From 5ac766a5421e6067a3f1b0de6f20ba43481d8f93 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 19 Jul 2015 00:50:04 +0000 Subject: [PATCH] Fix so player 2 can start a network game --- .../java/forge/trackable/TrackableTypes.java | 10 ++++++++ .../java/forge/match/AbstractGuiGame.java | 23 +++++++++++++------ .../java/forge/net/client/FGameClient.java | 2 +- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/trackable/TrackableTypes.java b/forge-game/src/main/java/forge/trackable/TrackableTypes.java index 8e699b5a291..c3532628866 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableTypes.java +++ b/forge-game/src/main/java/forge/trackable/TrackableTypes.java @@ -40,6 +40,16 @@ public class TrackableTypes { private TrackableObjectType() { } + public T lookup(T from) { + if (from == null) { return null; } + T to = objLookup.get(from.getId()); + if (to == null) { + objLookup.put(from.getId(), from); + return from; + } + return to; + } + public void clearLookupDictionary() { objLookup.clear(); } diff --git a/forge-gui/src/main/java/forge/match/AbstractGuiGame.java b/forge-gui/src/main/java/forge/match/AbstractGuiGame.java index 5b55046eb6c..fbeaea8ac18 100644 --- a/forge-gui/src/main/java/forge/match/AbstractGuiGame.java +++ b/forge-gui/src/main/java/forge/match/AbstractGuiGame.java @@ -52,11 +52,14 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { return currentPlayer; } @Override - public final void setCurrentPlayer(final PlayerView player) { + public final void setCurrentPlayer(PlayerView player) { + player = TrackableTypes.PlayerViewType.lookup(player); //ensure we use the correct player + if (!gameControllers.containsKey(player)) { throw new IllegalArgumentException(); } - this.currentPlayer = player; + + currentPlayer = player; updateCurrentPlayer(player); } protected abstract void updateCurrentPlayer(PlayerView player); @@ -99,11 +102,13 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { } @Override - public void setOriginalGameController(final PlayerView player, final IGameController gameController) { + public void setOriginalGameController(PlayerView player, final IGameController gameController) { if (player == null || gameController == null) { throw new IllegalArgumentException(); } + player = TrackableTypes.PlayerViewType.lookup(player); //ensure we use the correct player + final boolean doSetCurrentPlayer = originalGameControllers.isEmpty(); originalGameControllers.put(player, gameController); gameControllers.put(player, gameController); @@ -113,15 +118,18 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { } @Override - public void setGameController(final PlayerView player, final IGameController gameController) { + public void setGameController(PlayerView player, final IGameController gameController) { if (player == null) { throw new IllegalArgumentException(); } + player = TrackableTypes.PlayerViewType.lookup(player); //ensure we use the correct player + if (gameController == null) { if (originalGameControllers.containsKey(player)) { gameControllers.put(player, originalGameControllers.get(player)); - } else { + } + else { gameControllers.remove(player); autoPassUntilEndOfTurn.remove(player); final PlayerView currentPlayer = getCurrentPlayer(); @@ -130,8 +138,9 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { setCurrentPlayer(Iterables.getFirst(gameControllers.keySet(), null)); } } - } else { - this.gameControllers.put(player, gameController); + } + else { + gameControllers.put(player, gameController); } } diff --git a/forge-gui/src/main/java/forge/net/client/FGameClient.java b/forge-gui/src/main/java/forge/net/client/FGameClient.java index af9d15a8c55..35cf2bc6c54 100644 --- a/forge-gui/src/main/java/forge/net/client/FGameClient.java +++ b/forge-gui/src/main/java/forge/net/client/FGameClient.java @@ -111,7 +111,7 @@ public class FGameClient implements IToServer { void setGameControllers(final Iterable myPlayers) { for (final PlayerView p : myPlayers) { - clientGui.setGameController(p, new NetGameController(this)); + clientGui.setOriginalGameController(p, new NetGameController(this)); } }