Fix so player 2 can start a network game

This commit is contained in:
drdev
2015-07-19 00:50:04 +00:00
parent c75a63305d
commit 5ac766a542
3 changed files with 27 additions and 8 deletions

View File

@@ -40,6 +40,16 @@ public class TrackableTypes {
private TrackableObjectType() { 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() { public void clearLookupDictionary() {
objLookup.clear(); objLookup.clear();
} }

View File

@@ -52,11 +52,14 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
return currentPlayer; return currentPlayer;
} }
@Override @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)) { if (!gameControllers.containsKey(player)) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
this.currentPlayer = player;
currentPlayer = player;
updateCurrentPlayer(player); updateCurrentPlayer(player);
} }
protected abstract void updateCurrentPlayer(PlayerView player); protected abstract void updateCurrentPlayer(PlayerView player);
@@ -99,11 +102,13 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
} }
@Override @Override
public void setOriginalGameController(final PlayerView player, final IGameController gameController) { public void setOriginalGameController(PlayerView player, final IGameController gameController) {
if (player == null || gameController == null) { if (player == null || gameController == null) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
player = TrackableTypes.PlayerViewType.lookup(player); //ensure we use the correct player
final boolean doSetCurrentPlayer = originalGameControllers.isEmpty(); final boolean doSetCurrentPlayer = originalGameControllers.isEmpty();
originalGameControllers.put(player, gameController); originalGameControllers.put(player, gameController);
gameControllers.put(player, gameController); gameControllers.put(player, gameController);
@@ -113,15 +118,18 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
} }
@Override @Override
public void setGameController(final PlayerView player, final IGameController gameController) { public void setGameController(PlayerView player, final IGameController gameController) {
if (player == null) { if (player == null) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
player = TrackableTypes.PlayerViewType.lookup(player); //ensure we use the correct player
if (gameController == null) { if (gameController == null) {
if (originalGameControllers.containsKey(player)) { if (originalGameControllers.containsKey(player)) {
gameControllers.put(player, originalGameControllers.get(player)); gameControllers.put(player, originalGameControllers.get(player));
} else { }
else {
gameControllers.remove(player); gameControllers.remove(player);
autoPassUntilEndOfTurn.remove(player); autoPassUntilEndOfTurn.remove(player);
final PlayerView currentPlayer = getCurrentPlayer(); final PlayerView currentPlayer = getCurrentPlayer();
@@ -130,8 +138,9 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
setCurrentPlayer(Iterables.getFirst(gameControllers.keySet(), null)); setCurrentPlayer(Iterables.getFirst(gameControllers.keySet(), null));
} }
} }
} else { }
this.gameControllers.put(player, gameController); else {
gameControllers.put(player, gameController);
} }
} }

View File

@@ -111,7 +111,7 @@ public class FGameClient implements IToServer {
void setGameControllers(final Iterable<PlayerView> myPlayers) { void setGameControllers(final Iterable<PlayerView> myPlayers) {
for (final PlayerView p : myPlayers) { for (final PlayerView p : myPlayers) {
clientGui.setGameController(p, new NetGameController(this)); clientGui.setOriginalGameController(p, new NetGameController(this));
} }
} }