From 54a20d9b05338fd86338cb0c4808ea04db53e1b4 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Wed, 5 Apr 2023 21:43:57 +0200 Subject: [PATCH] maybe it'll work better this way (go eat, Arisotura) --- src/frontend/qt_sdl/Netplay.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/frontend/qt_sdl/Netplay.cpp b/src/frontend/qt_sdl/Netplay.cpp index bd1e5c77..c155a478 100644 --- a/src/frontend/qt_sdl/Netplay.cpp +++ b/src/frontend/qt_sdl/Netplay.cpp @@ -194,6 +194,8 @@ Player MyPlayer; u32 HostAddress; bool Lag; +int NumMirrorClients; + struct InputFrame { u32 FrameNum; @@ -232,6 +234,8 @@ bool Init() memset(Players, 0, sizeof(Players)); NumPlayers = 0; + NumMirrorClients = 0; + for (int i = 0; i < Blob_MAX; i++) { Blobs[i] = nullptr; @@ -282,6 +286,8 @@ void StartHost(const char* playername, int port) HostAddress = 0x0100007F; + NumMirrorClients = 0; + ENetAddress mirroraddr; mirroraddr.host = ENET_HOST_ANY; mirroraddr.port = port + 1; @@ -647,7 +653,7 @@ void StartGame() SpawnMirrorInstance(Players[i]); } - SyncMirrorClients(); + //SyncMirrorClients(); // tell remote peers to start game u8 cmd[1] = {0x04}; @@ -664,7 +670,7 @@ void StartGame() // 3. load state // start game locally - StartLocal(); + //StartLocal(); } void StartLocal() @@ -805,6 +811,8 @@ void ProcessClient() { if (event.packet->dataLength != 2) break; + NumMirrorClients = 0; + // create mirror host ENetAddress mirroraddr; mirroraddr.host = ENET_HOST_ANY; @@ -852,13 +860,13 @@ printf("client mirror host connecting to %08X:%d\n", mirroraddr.host, mirroraddr SpawnMirrorInstance(Players[i]); } - SyncMirrorClients(); + //SyncMirrorClients(); printf("bourf\n"); // tell other mirror instances to start the game //IPC::SendCommand(0xFFFF, IPC::Cmd_Start, 0, nullptr); printf("birf\n"); // start game locally - StartLocal(); + //StartLocal(); } break; } @@ -880,13 +888,26 @@ void ProcessMirrorHost() { case ENET_EVENT_TYPE_CONNECT: printf("[MIRROR HOST] mirror client connected\n"); + NumMirrorClients++; 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; case ENET_EVENT_TYPE_DISCONNECT: { // TODO printf("[MIRROR HOST] mirror client disconnected\n"); + NumMirrorClients--; } break;