From eaea583c2ca273f796f54aa9399bb9f2307d31d4 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sun, 5 May 2024 12:59:10 +0530 Subject: [PATCH] fix few nulls --- src/MarbleWorld.hx | 16 +++++++++------- src/net/Net.hx | 38 ++++++++++++++++++++++++++++---------- src/net/NetCommands.hx | 35 ++++++++++++++++++++++++++++------- 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 251a2cf3..4295b9b6 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1142,15 +1142,17 @@ class MarbleWorld extends Scheduler { var packet = new GemSpawnPacket(); var hunt = cast(this.gameMode, HuntMode); - var activeGemIds = []; - for (gemId in @:privateAccess hunt.activeGemSpawnGroup) { - if (@:privateAccess hunt.gemSpawnPoints[gemId].gem != null && @:privateAccess !hunt.gemSpawnPoints[gemId].gem.pickedUp) { - activeGemIds.push(gemId); + if (@:privateAccess hunt.activeGemSpawnGroup != null) { + var activeGemIds = []; + for (gemId in @:privateAccess hunt.activeGemSpawnGroup) { + if (@:privateAccess hunt.gemSpawnPoints[gemId].gem != null && @:privateAccess !hunt.gemSpawnPoints[gemId].gem.pickedUp) { + activeGemIds.push(gemId); + } } + packet.gemIds = activeGemIds; + packet.serialize(bs); + packets.push(bs.getBytes()); } - packet.gemIds = activeGemIds; - packet.serialize(bs); - packets.push(bs.getBytes()); // Marble states for (marb in this.marbles) { diff --git a/src/net/Net.hx b/src/net/Net.hx index 9455f7a3..bd24c75c 100644 --- a/src/net/Net.hx +++ b/src/net/Net.hx @@ -290,7 +290,9 @@ class Net { if (!Net.isMP) return; static var accum = 0.0; + static var wsAccum = 0.0; accum += dt; + wsAccum += dt; if (accum > 1.0) { accum = 0; var t = Console.time(); @@ -312,11 +314,25 @@ class Net { } if (Net.isClient) { disconnect(); + if (MarbleGame.instance.world != null) { + MarbleGame.instance.quitMission(); + } + if (!(MarbleGame.canvas.content is MultiplayerLoadingGui)) { + var loadGui = new MultiplayerLoadingGui("Timed out"); + MarbleGame.canvas.setContent(loadGui); + loadGui.setErrorStatus("Timed out"); + } } } } } } + if (wsAccum >= 20.0) { + wsAccum = 0; + if (Net.isHost) { + MasterServerClient.instance.sendServerInfo(serverInfo); // Heartbeat + } + } } static function onClientConnect(c:RTCPeerConnection, dc:RTCDataChannel, dcu:RTCDataChannel) { @@ -521,23 +537,25 @@ class Net { var marbleUpdatePacket = new MarbleUpdatePacket(); marbleUpdatePacket.deserialize(input); var cc = marbleUpdatePacket.clientId; - if (MarbleGame.instance.world != null) { + if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) { var m = MarbleGame.instance.world.lastMoves; m.enqueue(marbleUpdatePacket); } case MarbleMove: - var movePacket = new MarbleMovePacket(); - movePacket.deserialize(input); - var cc = clientIdMap[movePacket.clientId]; - if (cc.state == GAME) - for (move in movePacket.moves) - cc.queueMove(move); + if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) { + var movePacket = new MarbleMovePacket(); + movePacket.deserialize(input); + var cc = clientIdMap[movePacket.clientId]; + if (cc.state == GAME) + for (move in movePacket.moves) + cc.queueMove(move); + } case PowerupPickup: var powerupPickupPacket = new PowerupPickupPacket(); powerupPickupPacket.deserialize(input); - if (MarbleGame.instance.world != null) { + if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) { var m = @:privateAccess MarbleGame.instance.world.powerupPredictions; m.acknowledgePowerupPickup(powerupPickupPacket, MarbleGame.instance.world.timeState, clientConnection.moveManager.getQueueSize()); } @@ -545,7 +563,7 @@ class Net { case GemSpawn: var gemSpawnPacket = new GemSpawnPacket(); gemSpawnPacket.deserialize(input); - if (MarbleGame.instance.world != null) { + if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) { MarbleGame.instance.world.spawnHuntGemsClientSide(gemSpawnPacket.gemIds); @:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemSpawn(gemSpawnPacket); } @@ -553,7 +571,7 @@ class Net { case GemPickup: var gemPickupPacket = new GemPickupPacket(); gemPickupPacket.deserialize(input); - if (MarbleGame.instance.world != null) { + if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) { @:privateAccess MarbleGame.instance.world.playGui.incrementPlayerScore(gemPickupPacket.clientId, gemPickupPacket.scoreIncr); @:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemPickup(gemPickupPacket); } diff --git a/src/net/NetCommands.hx b/src/net/NetCommands.hx index 71f7ad1a..b93a314d 100644 --- a/src/net/NetCommands.hx +++ b/src/net/NetCommands.hx @@ -106,14 +106,32 @@ class NetCommands { // Mid game join Console.log("Mid game join for client " + clientId); // Send em our present world state - var packets = MarbleGame.instance.world.getWorldStateForClientJoin(); - var c = Net.clientIdMap[clientId]; - for (packet in packets) { - c.sendBytes(packet); + if (MarbleGame.instance.world != null) { + var packets = MarbleGame.instance.world.getWorldStateForClientJoin(); + var c = Net.clientIdMap[clientId]; + for (packet in packets) { + c.sendBytes(packet); + } + Net.clientIdMap[clientId].ready(); + + if (MarbleGame.instance.world.serverStartTicks == 0) { + var allReady = true; + for (id => client in Net.clientIdMap) { + if (client.state != GameplayState.GAME) { + allReady = false; + break; + } + } + if (allReady) { + if (MarbleGame.instance.world != null) { + MarbleGame.instance.world.allClientsReady(); + } + } + } else { + // Send the start ticks + NetCommands.setStartTicksMidJoinClient(c, MarbleGame.instance.world.serverStartTicks, MarbleGame.instance.world.timeState.ticks); + } } - Net.clientIdMap[clientId].ready(); - // Send the start ticks - NetCommands.setStartTicksMidJoinClient(c, MarbleGame.instance.world.serverStartTicks, MarbleGame.instance.world.timeState.ticks); } } } @@ -143,6 +161,9 @@ class NetCommands { @:rpc(server) public static function timerRanOut() { if (Net.isClient && MarbleGame.instance.world != null) { + if (MarbleGame.instance.paused) { + MarbleGame.instance.handlePauseGame(); // Unpause + } var huntMode:HuntMode = cast MarbleGame.instance.world.gameMode; huntMode.onTimeExpire(); }