mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
Fix Mindslaver so you can actually take actions for your opponent
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -20,39 +20,42 @@ public class LobbyPlayerForTests extends LobbyPlayer implements IGameEntitiesFac
|
|||||||
private final Map<Player, PlayerControllerForTests> playerControllers;
|
private final Map<Player, PlayerControllerForTests> playerControllers;
|
||||||
private final PlayerActions playerActions;
|
private final PlayerActions playerActions;
|
||||||
|
|
||||||
public LobbyPlayerForTests( String name, PlayerActions playerActions ) {
|
public LobbyPlayerForTests(String name, PlayerActions playerActions) {
|
||||||
super( name );
|
super(name);
|
||||||
playerControllers = new HashMap<Player, PlayerControllerForTests>();
|
playerControllers = new HashMap<Player, PlayerControllerForTests>();
|
||||||
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) {
|
||||||
Player dummyPlayer = new Player(getName(), gameState, id);
|
Player dummyPlayer = new Player(getName(), gameState, id);
|
||||||
dummyPlayer.setFirstController( createControllerFor( dummyPlayer ) );
|
dummyPlayer.setFirstController(createControllerFor(dummyPlayer));
|
||||||
return dummyPlayer;
|
return dummyPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
||||||
public void hear( LobbyPlayer player, String message ) {
|
public void hear(LobbyPlayer player, String message) {
|
||||||
//Do nothing
|
//Do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerControllerForTests getPlayerController() {
|
public PlayerControllerForTests getPlayerController() {
|
||||||
if( playerControllers.size() == 1 ) {
|
if (playerControllers.size() == 1) {
|
||||||
return playerControllers.values().iterator().next();
|
return playerControllers.values().iterator().next();
|
||||||
}
|
}
|
||||||
throw new IllegalStateException( "Can't determine correct controller " + StringUtils.join( playerControllers.entrySet(), ", " ) );
|
throw new IllegalStateException("Can't determine correct controller " + StringUtils.join(playerControllers.entrySet(), ", "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user