First network test
Warning: old, unfinished code
This commit is contained in:
parent
c107f82abb
commit
3b2a0f4de8
7 changed files with 149 additions and 45 deletions
BIN
data/icons2.png
BIN
data/icons2.png
Binary file not shown.
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
@ -1483,7 +1483,7 @@ void renderMenu(int menu,int xscr,int yscr){
|
||||||
char * text = malloc((50+8+1) * sizeof(char));
|
char * text = malloc((50+8+1) * sizeof(char));
|
||||||
memset(text, 0, (50+8+1) * sizeof(char));
|
memset(text, 0, (50+8+1) * sizeof(char));
|
||||||
networkGetScanName(text, i);
|
networkGetScanName(text, i);
|
||||||
strcpy(text, "'s World");
|
strcat(text, "'s World");
|
||||||
|
|
||||||
if(i != currentSelection) color &= 0xFF7F7F7F; // Darken color.
|
if(i != currentSelection) color &= 0xFF7F7F7F; // Darken color.
|
||||||
|
|
||||||
|
|
|
@ -151,19 +151,28 @@ bool networkConnected() {
|
||||||
return isConnected;
|
return isConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool networkIsServer() {
|
||||||
|
return isServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void networkSend(networkPacket *packet, size_t size) {
|
void networkSend(networkPacket *packet, size_t size) {
|
||||||
if(udsRunning && isConnected) {
|
if(udsRunning && isConnected) {
|
||||||
//Server broadcasts to all clients but clients only send info to server
|
//Server broadcasts to all clients but clients only send info to server
|
||||||
u16 dest;
|
|
||||||
if(isServer) {
|
if(isServer) {
|
||||||
dest = UDS_BROADCAST_NETWORKNODEID;
|
networkSendTo(packet, size, UDS_BROADCAST_NETWORKNODEID);
|
||||||
} else {
|
} else {
|
||||||
dest = UDS_HOST_NETWORKNODEID;
|
networkSendTo(packet, size, UDS_HOST_NETWORKNODEID);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Result ret = udsSendTo(dest, NETWORK_CHANNEL, UDS_SENDFLAG_Default, packet, size);
|
//TODO: I somehow need to implement a relieable protocol on top of uds
|
||||||
|
void networkSendTo(networkPacket *packet, size_t size, u16 reciever) {
|
||||||
|
if(udsRunning && isConnected) {
|
||||||
|
|
||||||
|
Result ret = udsSendTo(reciever, NETWORK_CHANNEL, UDS_SENDFLAG_Default, packet, size);
|
||||||
if(UDS_CHECK_SENDTO_FATALERROR(ret)) {
|
if(UDS_CHECK_SENDTO_FATALERROR(ret)) {
|
||||||
//TODO: what do?
|
//TODO: what do?
|
||||||
}
|
}
|
||||||
|
@ -187,7 +196,7 @@ void networkRecieve() {
|
||||||
if(actualSize) {
|
if(actualSize) {
|
||||||
networkPacket *packet = (networkPacket*) networkBuffer;
|
networkPacket *packet = (networkPacket*) networkBuffer;
|
||||||
|
|
||||||
processPacket(packet, packet->analyze.type);
|
processPacket(packet, packet->analyze.type, sourceNetworkNodeID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,8 @@ bool networkConnect(int pos);
|
||||||
void networkDisconnect();
|
void networkDisconnect();
|
||||||
|
|
||||||
bool networkConnected();
|
bool networkConnected();
|
||||||
|
bool networkIsServer();
|
||||||
|
|
||||||
void networkSend(networkPacket *packet, size_t size); //TODO: Should this be a pointer? Calling function needs to cleanup itself
|
void networkSend(networkPacket *packet, size_t size); //TODO: Should this be a pointer? Calling function needs to cleanup itself
|
||||||
|
void networkSendTo(networkPacket *packet, size_t size, u16 reciever); //TODO: Should this be a pointer? Calling function needs to cleanup itself
|
||||||
void networkRecieve(); //TODO: Should recieve actually handle all the packets or just return them?
|
void networkRecieve(); //TODO: Should recieve actually handle all the packets or just return them?
|
||||||
|
|
|
@ -1,10 +1,48 @@
|
||||||
#include "PacketHandler.h"
|
#include "PacketHandler.h"
|
||||||
|
|
||||||
void processPacket(networkPacket *packet, u8 type) {
|
#include "Globals.h"
|
||||||
|
|
||||||
|
void processPacket(networkPacket *packet, u8 type, u16 sender) {
|
||||||
//TODO: Differenciate the packets and process them
|
//TODO: Differenciate the packets and process them
|
||||||
if(type==PACKET_REQUEST_MAPDATA) {
|
if(networkIsServer()) {
|
||||||
|
if(type==PACKET_REQUEST_MAPDATA) {
|
||||||
|
u8 level = packet->requestMapData.level;
|
||||||
|
|
||||||
} else if(type==PACKET_MAPDATA) {
|
if(level>=0 && level<=5) {
|
||||||
|
//send back tile data
|
||||||
|
for(int y=0; y<128; y++) {
|
||||||
|
networkPacket packet = {
|
||||||
|
.mapData = {
|
||||||
|
.type = PACKET_MAPDATA,
|
||||||
|
.level = level,
|
||||||
|
.offset = y
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for(int x=0; x<128; x++) {
|
||||||
|
packet.mapData.map[x] = map[level][x+y*128];
|
||||||
|
packet.mapData.data[x] = data[level][x+y*128];
|
||||||
|
}
|
||||||
|
networkSendTo(&packet, sizeof(packetMapData), sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//TODO: Unknown packet - how to handle?
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(type==PACKET_MAPDATA) {
|
||||||
|
u8 level = packet->mapData.level;
|
||||||
|
|
||||||
}
|
if(level>=0 && level<=5) {
|
||||||
|
//recieve tile data
|
||||||
|
//TODO: This should really check whether the values are in valid range
|
||||||
|
int y = packet->mapData.offset;
|
||||||
|
for(int x=0; x<128; x++) {
|
||||||
|
map[level][x+y*128] = packet->mapData.map[x];
|
||||||
|
data[level][x+y*128] = packet->mapData.data[x];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//TODO: Unknown packet - how to handle?
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
#include "Network.h"
|
#include "Network.h"
|
||||||
|
|
||||||
void processPacket(networkPacket *packet, u8 type);
|
void processPacket(networkPacket *packet, u8 type, u16 sender);
|
||||||
|
|
107
source/main.c
107
source/main.c
|
@ -18,6 +18,13 @@
|
||||||
// -> Skeleton arrows are slower, do a little less damage
|
// -> Skeleton arrows are slower, do a little less damage
|
||||||
// -> Or instead of less damage, implement a simple armor system
|
// -> Or instead of less damage, implement a simple armor system
|
||||||
|
|
||||||
|
//TODO: Multiplayer should use normal drawing code -> so remove this first test again
|
||||||
|
float tmxscr = 400;
|
||||||
|
float tmyscr = 400;
|
||||||
|
float tmenuxa = 0.25;
|
||||||
|
float tmenuya = 0.25;
|
||||||
|
|
||||||
|
|
||||||
void initMiniMapData() {
|
void initMiniMapData() {
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < 128 * 128; ++i) {
|
for(i = 0; i < 128 * 128; ++i) {
|
||||||
|
@ -75,6 +82,12 @@ void setupGame(bool loadUpWorld, bool remote) {
|
||||||
|
|
||||||
initMiniMap(loadUpWorld);
|
initMiniMap(loadUpWorld);
|
||||||
} else {
|
} else {
|
||||||
|
//reset level data so no old data can somehow remain
|
||||||
|
memset(map, 0, 128*128*5 * sizeof(u8));
|
||||||
|
memset(data, 0, 128*128*5 * sizeof(u8));
|
||||||
|
|
||||||
|
currentLevel = 1;
|
||||||
|
|
||||||
//TODO: Can Packets get dropped - if yes, should resending be handled by network functions (so I dont need to do it everywhere)
|
//TODO: Can Packets get dropped - if yes, should resending be handled by network functions (so I dont need to do it everywhere)
|
||||||
networkPacket packet = {
|
networkPacket packet = {
|
||||||
.requestMapData = {
|
.requestMapData = {
|
||||||
|
@ -286,41 +299,83 @@ int main() {
|
||||||
|
|
||||||
if (currentMenu == 0) {
|
if (currentMenu == 0) {
|
||||||
tick();
|
tick();
|
||||||
sf2d_start_frame(GFX_TOP, GFX_LEFT);
|
//TODO: Multiplayer should use normal drawing code -> so remove this first test again
|
||||||
|
if(!isRemote) {
|
||||||
|
sf2d_start_frame(GFX_TOP, GFX_LEFT);
|
||||||
|
|
||||||
offsetX = xscr;
|
offsetX = xscr;
|
||||||
offsetY = yscr;
|
offsetY = yscr;
|
||||||
sf2d_draw_rectangle(0, 0, 400, 240, 0xFF0C0C0C); //RGBA8(12, 12, 12, 255)); //You might think "real" black would be better, but it actually looks better that way
|
sf2d_draw_rectangle(0, 0, 400, 240, 0xFF0C0C0C); //RGBA8(12, 12, 12, 255)); //You might think "real" black would be better, but it actually looks better that way
|
||||||
|
|
||||||
renderLightsToStencil(false, false, true);
|
renderLightsToStencil(false, false, true);
|
||||||
|
|
||||||
renderBackground(xscr, yscr);
|
renderBackground(xscr, yscr);
|
||||||
renderEntities(player.x, player.y, &eManager);
|
renderEntities(player.x, player.y, &eManager);
|
||||||
renderPlayer();
|
renderPlayer();
|
||||||
renderWeather(xscr, yscr);
|
renderWeather(xscr, yscr);
|
||||||
|
|
||||||
resetStencilStuff();
|
resetStencilStuff();
|
||||||
|
|
||||||
renderDayNight();
|
renderDayNight();
|
||||||
|
|
||||||
offsetX = 0;
|
offsetX = 0;
|
||||||
offsetY = 0;
|
offsetY = 0;
|
||||||
|
|
||||||
if(shouldRenderDebug){
|
if(shouldRenderDebug){
|
||||||
sprintf(fpsstr, " FPS: %.0f, X:%d, Y:%d, E:%d", sf2d_get_fps(), player.x, player.y, eManager.lastSlot[currentLevel]);
|
sprintf(fpsstr, " FPS: %.0f, X:%d, Y:%d, E:%d", sf2d_get_fps(), player.x, player.y, eManager.lastSlot[currentLevel]);
|
||||||
drawText(fpsstr, 2, 225);
|
drawText(fpsstr, 2, 225);
|
||||||
}
|
}
|
||||||
|
|
||||||
sf2d_end_frame();
|
sf2d_end_frame();
|
||||||
|
|
||||||
sf2d_start_frame(GFX_BOTTOM, GFX_LEFT);
|
sf2d_start_frame(GFX_BOTTOM, GFX_LEFT);
|
||||||
if(!shouldRenderMap){
|
if(!shouldRenderMap){
|
||||||
sf2d_draw_texture(bottombg, 0, 0);
|
sf2d_draw_texture(bottombg, 0, 0);
|
||||||
renderGui();
|
renderGui();
|
||||||
} else {
|
} else {
|
||||||
renderZoomedMap();
|
renderZoomedMap();
|
||||||
}
|
}
|
||||||
sf2d_end_frame();
|
sf2d_end_frame();
|
||||||
|
//TODO: Multiplayer should use normal drawing code -> so remove this first test again
|
||||||
|
} else {
|
||||||
|
//TODO: Temporary way of getting back to the menu
|
||||||
|
if (k_pause.clicked){
|
||||||
|
sf2d_set_clear_color(0xFF);
|
||||||
|
currentSelection = 0;
|
||||||
|
currentMenu = MENU_TITLE;
|
||||||
|
|
||||||
|
networkDisconnect();
|
||||||
|
|
||||||
|
playMusic(music_menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
tmxscr += tmenuxa;
|
||||||
|
tmyscr += tmenuya;
|
||||||
|
|
||||||
|
if (tmxscr < 16) {
|
||||||
|
tmxscr = 16;
|
||||||
|
tmenuxa = -tmenuxa;
|
||||||
|
} else if (tmxscr > 1832) {
|
||||||
|
tmxscr = 1832;
|
||||||
|
tmenuxa = -tmenuxa;
|
||||||
|
}
|
||||||
|
if (tmyscr < 16) {
|
||||||
|
tmyscr = 16;
|
||||||
|
tmenuya = -tmenuya;
|
||||||
|
} else if (tmyscr > 1792) {
|
||||||
|
tmyscr = 1792;
|
||||||
|
tmenuya = -tmenuya;
|
||||||
|
}
|
||||||
|
|
||||||
|
sf2d_start_frame(GFX_TOP, GFX_LEFT);
|
||||||
|
offsetX = (int) tmxscr; offsetY = (int) tmyscr;
|
||||||
|
renderBackground((int) tmxscr, (int) tmyscr);
|
||||||
|
offsetX = 0; offsetY = 0;
|
||||||
|
sf2d_end_frame();
|
||||||
|
|
||||||
|
sf2d_start_frame(GFX_BOTTOM, GFX_LEFT);
|
||||||
|
sf2d_end_frame();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
tickMenu(currentMenu);
|
tickMenu(currentMenu);
|
||||||
renderMenu(currentMenu, xscr, yscr);
|
renderMenu(currentMenu, xscr, yscr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue