maybe it'll work better this way

(go eat, Arisotura)
This commit is contained in:
Arisotura
2023-04-05 21:43:57 +02:00
parent 7ff8a1cab9
commit 54a20d9b05

View File

@ -194,6 +194,8 @@ Player MyPlayer;
u32 HostAddress; u32 HostAddress;
bool Lag; bool Lag;
int NumMirrorClients;
struct InputFrame struct InputFrame
{ {
u32 FrameNum; u32 FrameNum;
@ -232,6 +234,8 @@ bool Init()
memset(Players, 0, sizeof(Players)); memset(Players, 0, sizeof(Players));
NumPlayers = 0; NumPlayers = 0;
NumMirrorClients = 0;
for (int i = 0; i < Blob_MAX; i++) for (int i = 0; i < Blob_MAX; i++)
{ {
Blobs[i] = nullptr; Blobs[i] = nullptr;
@ -282,6 +286,8 @@ void StartHost(const char* playername, int port)
HostAddress = 0x0100007F; HostAddress = 0x0100007F;
NumMirrorClients = 0;
ENetAddress mirroraddr; ENetAddress mirroraddr;
mirroraddr.host = ENET_HOST_ANY; mirroraddr.host = ENET_HOST_ANY;
mirroraddr.port = port + 1; mirroraddr.port = port + 1;
@ -647,7 +653,7 @@ void StartGame()
SpawnMirrorInstance(Players[i]); SpawnMirrorInstance(Players[i]);
} }
SyncMirrorClients(); //SyncMirrorClients();
// tell remote peers to start game // tell remote peers to start game
u8 cmd[1] = {0x04}; u8 cmd[1] = {0x04};
@ -664,7 +670,7 @@ void StartGame()
// 3. load state // 3. load state
// start game locally // start game locally
StartLocal(); //StartLocal();
} }
void StartLocal() void StartLocal()
@ -805,6 +811,8 @@ void ProcessClient()
{ {
if (event.packet->dataLength != 2) break; if (event.packet->dataLength != 2) break;
NumMirrorClients = 0;
// create mirror host // create mirror host
ENetAddress mirroraddr; ENetAddress mirroraddr;
mirroraddr.host = ENET_HOST_ANY; mirroraddr.host = ENET_HOST_ANY;
@ -852,13 +860,13 @@ printf("client mirror host connecting to %08X:%d\n", mirroraddr.host, mirroraddr
SpawnMirrorInstance(Players[i]); SpawnMirrorInstance(Players[i]);
} }
SyncMirrorClients(); //SyncMirrorClients();
printf("bourf\n"); printf("bourf\n");
// tell other mirror instances to start the game // tell other mirror instances to start the game
//IPC::SendCommand(0xFFFF, IPC::Cmd_Start, 0, nullptr); //IPC::SendCommand(0xFFFF, IPC::Cmd_Start, 0, nullptr);
printf("birf\n"); printf("birf\n");
// start game locally // start game locally
StartLocal(); //StartLocal();
} }
break; break;
} }
@ -880,13 +888,26 @@ void ProcessMirrorHost()
{ {
case ENET_EVENT_TYPE_CONNECT: case ENET_EVENT_TYPE_CONNECT:
printf("[MIRROR HOST] mirror client connected\n"); printf("[MIRROR HOST] mirror client connected\n");
NumMirrorClients++;
event.peer->data = (void*)0; event.peer->data = (void*)0;
if (NumMirrorClients > NumPlayers)
{
printf("??????\n");
}
else if (NumMirrorClients == NumPlayers)
{
// all mirror clients are connected, we're ready to go
SyncMirrorClients();
StartLocal();
}
break; break;
case ENET_EVENT_TYPE_DISCONNECT: case ENET_EVENT_TYPE_DISCONNECT:
{ {
// TODO // TODO
printf("[MIRROR HOST] mirror client disconnected\n"); printf("[MIRROR HOST] mirror client disconnected\n");
NumMirrorClients--;
} }
break; break;