From ab7fb0788e207c70b899fb1e76bf53d98e60a57a Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 15 Oct 2014 15:33:47 +0000 Subject: [PATCH] Fix Mindslaver so you can actually take actions for your opponent --- .../src/main/java/forge/ai/LobbyPlayerAi.java | 11 ++- .../game/player/IGameEntitiesFactory.java | 5 +- .../main/java/forge/game/player/Player.java | 2 +- .../util/LobbyPlayerForTests.java | 73 ++++++++++--------- .../java/forge/player/LobbyPlayerHuman.java | 4 +- .../java/forge/net/LobbyPlayerRemote.java | 2 +- 6 files changed, 52 insertions(+), 45 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/LobbyPlayerAi.java b/forge-ai/src/main/java/forge/ai/LobbyPlayerAi.java index eb232b9090f..30d6d2345a8 100644 --- a/forge-ai/src/main/java/forge/ai/LobbyPlayerAi.java +++ b/forge-ai/src/main/java/forge/ai/LobbyPlayerAi.java @@ -4,6 +4,7 @@ import forge.LobbyPlayer; import forge.game.Game; import forge.game.player.IGameEntitiesFactory; import forge.game.player.Player; +import forge.game.player.PlayerController; public class LobbyPlayerAi extends LobbyPlayer implements IGameEntitiesFactory { public LobbyPlayerAi(String name) { @@ -35,13 +36,17 @@ public class LobbyPlayerAi extends LobbyPlayer implements IGameEntitiesFactory { this.rotateProfileEachGame = rotateProfileEachGame; } - @Override - public PlayerControllerAi createControllerFor(Player ai) { + private PlayerControllerAi createControllerFor(Player ai) { PlayerControllerAi result = new PlayerControllerAi(ai.getGame(), ai, this); result.allowCheatShuffle(allowCheatShuffle); return result; } - + + @Override + public PlayerController createMindSlaveController(Player master, Player slave) { + return createControllerFor(slave); + } + @Override public Player createIngamePlayer(Game game, final int id) { Player ai = new Player(getName(), game, id); diff --git a/forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java b/forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java index f8211b1925d..cd18c1dd71d 100644 --- a/forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java +++ b/forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java @@ -2,8 +2,7 @@ package forge.game.player; import forge.game.Game; -public interface IGameEntitiesFactory -{ - PlayerController createControllerFor(Player p); +public interface IGameEntitiesFactory { + PlayerController createMindSlaveController(Player master, Player slave); Player createIngamePlayer(Game game, int id); } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index c9c1f5aa82b..9bb60760722 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -2085,7 +2085,7 @@ public class Player extends GameEntity implements Comparable { if (mindSlaveMaster != null) { LobbyPlayer oldLobbyPlayer = getLobbyPlayer(); IGameEntitiesFactory master = (IGameEntitiesFactory)mindSlaveMaster.getLobbyPlayer(); - controller = master.createControllerFor(this); + controller = master.createMindSlaveController(mindSlaveMaster, this); game.fireEvent(new GameEventPlayerControl(this, oldLobbyPlayer, getLobbyPlayer())); } else { diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/LobbyPlayerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/LobbyPlayerForTests.java index ef40dfdbf66..464b047c2e7 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/LobbyPlayerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/LobbyPlayerForTests.java @@ -17,42 +17,45 @@ import java.util.Map; * Test-specific behaviour can easily be added by mocking (parts of) this class. */ public class LobbyPlayerForTests extends LobbyPlayer implements IGameEntitiesFactory { - private final Map playerControllers; - private final PlayerActions playerActions; - - public LobbyPlayerForTests( String name, PlayerActions playerActions ) { - super( name ); - playerControllers = new HashMap(); - this.playerActions = playerActions; - } - + private final Map playerControllers; + private final PlayerActions playerActions; + + public LobbyPlayerForTests(String name, PlayerActions playerActions) { + super(name); + playerControllers = new HashMap(); + this.playerActions = playerActions; + } - @Override - public Player createIngamePlayer(Game gameState, final int id) { - Player dummyPlayer = new Player(getName(), gameState, id); - dummyPlayer.setFirstController( createControllerFor( dummyPlayer ) ); - return dummyPlayer; - } + private PlayerController createControllerFor(Player player) { + if (!playerControllers.containsKey(player)) { + PlayerControllerForTests dummyPlayerControllerForTests = new PlayerControllerForTests(player.getGame(), player, this); + dummyPlayerControllerForTests.setPlayerActions(playerActions); + playerControllers.put(player, dummyPlayerControllerForTests); + } + return playerControllers.get(player); + } - @Override - public PlayerController createControllerFor( Player player ) { - if( !playerControllers.containsKey( player ) ) { - PlayerControllerForTests dummyPlayerControllerForTests = new PlayerControllerForTests( player.getGame(), player, this ); - dummyPlayerControllerForTests.setPlayerActions( playerActions ); - playerControllers.put( player, dummyPlayerControllerForTests ); - } - return playerControllers.get( player ); - } + @Override + public Player createIngamePlayer(Game gameState, final int id) { + Player dummyPlayer = new Player(getName(), gameState, id); + dummyPlayer.setFirstController(createControllerFor(dummyPlayer)); + return dummyPlayer; + } - @Override - public void hear( LobbyPlayer player, String message ) { - //Do nothing - } - - public PlayerControllerForTests getPlayerController() { - if( playerControllers.size() == 1 ) { - return playerControllers.values().iterator().next(); - } - throw new IllegalStateException( "Can't determine correct controller " + StringUtils.join( playerControllers.entrySet(), ", " ) ); - } + @Override + public PlayerController createMindSlaveController(Player master, Player slave) { + return createControllerFor(slave); + } + + @Override + public void hear(LobbyPlayer player, String message) { + //Do nothing + } + + public PlayerControllerForTests getPlayerController() { + if (playerControllers.size() == 1) { + return playerControllers.values().iterator().next(); + } + throw new IllegalStateException("Can't determine correct controller " + StringUtils.join(playerControllers.entrySet(), ", ")); + } } diff --git a/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java b/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java index bc7bc604ad3..34830411547 100644 --- a/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java +++ b/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java @@ -14,8 +14,8 @@ public class LobbyPlayerHuman extends LobbyPlayer implements IGameEntitiesFactor } @Override - public PlayerController createControllerFor(Player human) { - return new PlayerControllerHuman(human.getGame(), human, this); + public PlayerController createMindSlaveController(Player master, Player slave) { + return new PlayerControllerHuman(slave, this, (PlayerControllerHuman)master.getController()); } @Override diff --git a/forge-net/src/main/java/forge/net/LobbyPlayerRemote.java b/forge-net/src/main/java/forge/net/LobbyPlayerRemote.java index 73fae4d50cf..d5c5e99ea2d 100644 --- a/forge-net/src/main/java/forge/net/LobbyPlayerRemote.java +++ b/forge-net/src/main/java/forge/net/LobbyPlayerRemote.java @@ -35,7 +35,7 @@ public class LobbyPlayerRemote extends LobbyPlayer implements IGameEntitiesFacto * @see forge.game.player.LobbyPlayer#createControllerFor(forge.game.player.Player) */ @Override - public PlayerController createControllerFor(Player p) { + public PlayerController createMindSlaveController(Player master, Player slave) { // Cannot create remote players yet throw new UnsupportedOperationException("method is not implemented"); }