Fix Mindslaver so you can actually take actions for your opponent

This commit is contained in:
drdev
2014-10-15 15:33:47 +00:00
parent 4f3bf5d6fa
commit ab7fb0788e
6 changed files with 52 additions and 45 deletions

View File

@@ -4,6 +4,7 @@ import forge.LobbyPlayer;
import forge.game.Game; import forge.game.Game;
import forge.game.player.IGameEntitiesFactory; import forge.game.player.IGameEntitiesFactory;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerController;
public class LobbyPlayerAi extends LobbyPlayer implements IGameEntitiesFactory { public class LobbyPlayerAi extends LobbyPlayer implements IGameEntitiesFactory {
public LobbyPlayerAi(String name) { public LobbyPlayerAi(String name) {
@@ -35,13 +36,17 @@ public class LobbyPlayerAi extends LobbyPlayer implements IGameEntitiesFactory {
this.rotateProfileEachGame = rotateProfileEachGame; this.rotateProfileEachGame = rotateProfileEachGame;
} }
@Override private PlayerControllerAi createControllerFor(Player ai) {
public PlayerControllerAi createControllerFor(Player ai) {
PlayerControllerAi result = new PlayerControllerAi(ai.getGame(), ai, this); PlayerControllerAi result = new PlayerControllerAi(ai.getGame(), ai, this);
result.allowCheatShuffle(allowCheatShuffle); result.allowCheatShuffle(allowCheatShuffle);
return result; return result;
} }
@Override
public PlayerController createMindSlaveController(Player master, Player slave) {
return createControllerFor(slave);
}
@Override @Override
public Player createIngamePlayer(Game game, final int id) { public Player createIngamePlayer(Game game, final int id) {
Player ai = new Player(getName(), game, id); Player ai = new Player(getName(), game, id);

View File

@@ -2,8 +2,7 @@ package forge.game.player;
import forge.game.Game; import forge.game.Game;
public interface IGameEntitiesFactory public interface IGameEntitiesFactory {
{ PlayerController createMindSlaveController(Player master, Player slave);
PlayerController createControllerFor(Player p);
Player createIngamePlayer(Game game, int id); Player createIngamePlayer(Game game, int id);
} }

View File

@@ -2085,7 +2085,7 @@ public class Player extends GameEntity implements Comparable<Player> {
if (mindSlaveMaster != null) { if (mindSlaveMaster != null) {
LobbyPlayer oldLobbyPlayer = getLobbyPlayer(); LobbyPlayer oldLobbyPlayer = getLobbyPlayer();
IGameEntitiesFactory master = (IGameEntitiesFactory)mindSlaveMaster.getLobbyPlayer(); IGameEntitiesFactory master = (IGameEntitiesFactory)mindSlaveMaster.getLobbyPlayer();
controller = master.createControllerFor(this); controller = master.createMindSlaveController(mindSlaveMaster, this);
game.fireEvent(new GameEventPlayerControl(this, oldLobbyPlayer, getLobbyPlayer())); game.fireEvent(new GameEventPlayerControl(this, oldLobbyPlayer, getLobbyPlayer()));
} }
else { else {

View File

@@ -26,6 +26,14 @@ public class LobbyPlayerForTests extends LobbyPlayer implements IGameEntitiesFac
this.playerActions = playerActions; this.playerActions = playerActions;
} }
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 @Override
public Player createIngamePlayer(Game gameState, final int id) { public Player createIngamePlayer(Game gameState, final int id) {
@@ -35,13 +43,8 @@ public class LobbyPlayerForTests extends LobbyPlayer implements IGameEntitiesFac
} }
@Override @Override
public PlayerController createControllerFor( Player player ) { public PlayerController createMindSlaveController(Player master, Player slave) {
if( !playerControllers.containsKey( player ) ) { return createControllerFor(slave);
PlayerControllerForTests dummyPlayerControllerForTests = new PlayerControllerForTests( player.getGame(), player, this );
dummyPlayerControllerForTests.setPlayerActions( playerActions );
playerControllers.put( player, dummyPlayerControllerForTests );
}
return playerControllers.get( player );
} }
@Override @Override

View File

@@ -14,8 +14,8 @@ public class LobbyPlayerHuman extends LobbyPlayer implements IGameEntitiesFactor
} }
@Override @Override
public PlayerController createControllerFor(Player human) { public PlayerController createMindSlaveController(Player master, Player slave) {
return new PlayerControllerHuman(human.getGame(), human, this); return new PlayerControllerHuman(slave, this, (PlayerControllerHuman)master.getController());
} }
@Override @Override

View File

@@ -35,7 +35,7 @@ public class LobbyPlayerRemote extends LobbyPlayer implements IGameEntitiesFacto
* @see forge.game.player.LobbyPlayer#createControllerFor(forge.game.player.Player) * @see forge.game.player.LobbyPlayer#createControllerFor(forge.game.player.Player)
*/ */
@Override @Override
public PlayerController createControllerFor(Player p) { public PlayerController createMindSlaveController(Player master, Player slave) {
// Cannot create remote players yet // Cannot create remote players yet
throw new UnsupportedOperationException("method is not implemented"); throw new UnsupportedOperationException("method is not implemented");
} }