From ea040c318e2c05740150800670e467c4a02ddbbe Mon Sep 17 00:00:00 2001 From: Collin Smith Date: Sun, 22 Dec 2019 17:38:16 -0800 Subject: [PATCH] Added networking for dynamic objects Added networking for dynamic objects Fixed disconnecting players not being removed from player ids table NetworkSynchronizer conditionally processes based on if any players are connected Disabled AIStepper when game is connected to a socket --- .../com/riiablo/engine/server/ServerEntityFactory.java | 1 + core/src/com/riiablo/screen/GameScreen.java | 4 +++- server/d2gs/src/com/riiablo/server/d2gs/D2GS.java | 2 +- .../src/com/riiablo/server/d2gs/NetworkSynchronizer.java | 8 ++++++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/core/src/com/riiablo/engine/server/ServerEntityFactory.java b/core/src/com/riiablo/engine/server/ServerEntityFactory.java index ed27c2c8..4f00a27d 100644 --- a/core/src/com/riiablo/engine/server/ServerEntityFactory.java +++ b/core/src/com/riiablo/engine/server/ServerEntityFactory.java @@ -113,6 +113,7 @@ public class ServerEntityFactory extends EntityFactory { int id = createMonster(map, zone, monstats, x, y); mDS1ObjectWrapper.create(id).set(preset.getDS1(), object); if (object.path != null) mPathWrapper.create(id).path = object.path; + mNetworked.create(id); return id; } diff --git a/core/src/com/riiablo/screen/GameScreen.java b/core/src/com/riiablo/screen/GameScreen.java index ca9077a4..79d2ef4c 100644 --- a/core/src/com/riiablo/screen/GameScreen.java +++ b/core/src/com/riiablo/screen/GameScreen.java @@ -531,8 +531,10 @@ public class GameScreen extends ScreenAdapter implements GameLoadingScreen.Loada if (!DEBUG_TOUCHPAD && Gdx.app.getType() == Application.ApplicationType.Desktop) { builder.with(new CursorMovementSystem()); } + if (socket == null) { + builder.with(new AIStepper()); + } builder - .with(new AIStepper()) .with(new Pathfinder()) .with(new SoundEmitterHandler()) diff --git a/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java b/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java index fd11a77f..c2f21cfc 100644 --- a/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java +++ b/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java @@ -459,7 +459,7 @@ public class D2GS extends ApplicationAdapter { outPackets.offer(broadcast); world.delete(entityId); - player.put(id, Engine.INVALID_ENTITY); + player.remove(id, Engine.INVALID_ENTITY); synchronized (clients) { clients[id] = null; numClients--; diff --git a/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java b/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java index d503359c..e7e8d061 100644 --- a/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java +++ b/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java @@ -26,12 +26,16 @@ public class NetworkSynchronizer extends IteratingSystem { @Wire(name = "player") protected IntIntMap players; + @Override + protected boolean checkProcessing() { + return players.size > 0; + } + @Override protected void process(int entityId) { D2GS sync = sync(entityId); int id = players.findKey(entityId, -1); - assert id != -1; - boolean success = outPackets.offer(com.riiablo.server.d2gs.D2GS.Packet.obtain(~(1 << id), sync)); + boolean success = outPackets.offer(com.riiablo.server.d2gs.D2GS.Packet.obtain(id != -1 ? ~(1 << id) : 0xFFFFFFFF, sync)); assert success; }