fix few nulls

This commit is contained in:
RandomityGuy 2024-05-05 12:59:10 +05:30
parent ca6991e495
commit eaea583c2c
3 changed files with 65 additions and 24 deletions

View file

@ -1142,15 +1142,17 @@ class MarbleWorld extends Scheduler {
var packet = new GemSpawnPacket(); var packet = new GemSpawnPacket();
var hunt = cast(this.gameMode, HuntMode); var hunt = cast(this.gameMode, HuntMode);
var activeGemIds = []; if (@:privateAccess hunt.activeGemSpawnGroup != null) {
for (gemId in @:privateAccess hunt.activeGemSpawnGroup) { var activeGemIds = [];
if (@:privateAccess hunt.gemSpawnPoints[gemId].gem != null && @:privateAccess !hunt.gemSpawnPoints[gemId].gem.pickedUp) { for (gemId in @:privateAccess hunt.activeGemSpawnGroup) {
activeGemIds.push(gemId); 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 // Marble states
for (marb in this.marbles) { for (marb in this.marbles) {

View file

@ -290,7 +290,9 @@ class Net {
if (!Net.isMP) if (!Net.isMP)
return; return;
static var accum = 0.0; static var accum = 0.0;
static var wsAccum = 0.0;
accum += dt; accum += dt;
wsAccum += dt;
if (accum > 1.0) { if (accum > 1.0) {
accum = 0; accum = 0;
var t = Console.time(); var t = Console.time();
@ -312,11 +314,25 @@ class Net {
} }
if (Net.isClient) { if (Net.isClient) {
disconnect(); 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) { static function onClientConnect(c:RTCPeerConnection, dc:RTCDataChannel, dcu:RTCDataChannel) {
@ -521,23 +537,25 @@ class Net {
var marbleUpdatePacket = new MarbleUpdatePacket(); var marbleUpdatePacket = new MarbleUpdatePacket();
marbleUpdatePacket.deserialize(input); marbleUpdatePacket.deserialize(input);
var cc = marbleUpdatePacket.clientId; var cc = marbleUpdatePacket.clientId;
if (MarbleGame.instance.world != null) { if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
var m = MarbleGame.instance.world.lastMoves; var m = MarbleGame.instance.world.lastMoves;
m.enqueue(marbleUpdatePacket); m.enqueue(marbleUpdatePacket);
} }
case MarbleMove: case MarbleMove:
var movePacket = new MarbleMovePacket(); if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
movePacket.deserialize(input); var movePacket = new MarbleMovePacket();
var cc = clientIdMap[movePacket.clientId]; movePacket.deserialize(input);
if (cc.state == GAME) var cc = clientIdMap[movePacket.clientId];
for (move in movePacket.moves) if (cc.state == GAME)
cc.queueMove(move); for (move in movePacket.moves)
cc.queueMove(move);
}
case PowerupPickup: case PowerupPickup:
var powerupPickupPacket = new PowerupPickupPacket(); var powerupPickupPacket = new PowerupPickupPacket();
powerupPickupPacket.deserialize(input); powerupPickupPacket.deserialize(input);
if (MarbleGame.instance.world != null) { if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
var m = @:privateAccess MarbleGame.instance.world.powerupPredictions; var m = @:privateAccess MarbleGame.instance.world.powerupPredictions;
m.acknowledgePowerupPickup(powerupPickupPacket, MarbleGame.instance.world.timeState, clientConnection.moveManager.getQueueSize()); m.acknowledgePowerupPickup(powerupPickupPacket, MarbleGame.instance.world.timeState, clientConnection.moveManager.getQueueSize());
} }
@ -545,7 +563,7 @@ class Net {
case GemSpawn: case GemSpawn:
var gemSpawnPacket = new GemSpawnPacket(); var gemSpawnPacket = new GemSpawnPacket();
gemSpawnPacket.deserialize(input); gemSpawnPacket.deserialize(input);
if (MarbleGame.instance.world != null) { if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
MarbleGame.instance.world.spawnHuntGemsClientSide(gemSpawnPacket.gemIds); MarbleGame.instance.world.spawnHuntGemsClientSide(gemSpawnPacket.gemIds);
@:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemSpawn(gemSpawnPacket); @:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemSpawn(gemSpawnPacket);
} }
@ -553,7 +571,7 @@ class Net {
case GemPickup: case GemPickup:
var gemPickupPacket = new GemPickupPacket(); var gemPickupPacket = new GemPickupPacket();
gemPickupPacket.deserialize(input); 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.playGui.incrementPlayerScore(gemPickupPacket.clientId, gemPickupPacket.scoreIncr);
@:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemPickup(gemPickupPacket); @:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemPickup(gemPickupPacket);
} }

View file

@ -106,14 +106,32 @@ class NetCommands {
// Mid game join // Mid game join
Console.log("Mid game join for client " + clientId); Console.log("Mid game join for client " + clientId);
// Send em our present world state // Send em our present world state
var packets = MarbleGame.instance.world.getWorldStateForClientJoin(); if (MarbleGame.instance.world != null) {
var c = Net.clientIdMap[clientId]; var packets = MarbleGame.instance.world.getWorldStateForClientJoin();
for (packet in packets) { var c = Net.clientIdMap[clientId];
c.sendBytes(packet); 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() { @:rpc(server) public static function timerRanOut() {
if (Net.isClient && MarbleGame.instance.world != null) { if (Net.isClient && MarbleGame.instance.world != null) {
if (MarbleGame.instance.paused) {
MarbleGame.instance.handlePauseGame(); // Unpause
}
var huntMode:HuntMode = cast MarbleGame.instance.world.gameMode; var huntMode:HuntMode = cast MarbleGame.instance.world.gameMode;
huntMode.onTimeExpire(); huntMode.onTimeExpire();
} }