Dump/Setup game state will now save current game turn.

Needed to test cards and AI that care about how many turns it have been since the start of the game.
This commit is contained in:
Seravy
2018-02-14 16:13:44 +01:00
parent 36917c0d18
commit 22846db1a3
3 changed files with 22 additions and 5 deletions

View File

@@ -82,6 +82,8 @@ public abstract class GameState {
private String precastHuman = null; private String precastHuman = null;
private String precastAI = null; private String precastAI = null;
private int turn;
// Targeting for precast spells in a game state (mostly used by Puzzle Mode game states) // Targeting for precast spells in a game state (mostly used by Puzzle Mode game states)
private final int TARGET_NONE = -1; // untargeted spell (e.g. Joraga Invocation) private final int TARGET_NONE = -1; // untargeted spell (e.g. Joraga Invocation)
private final int TARGET_HUMAN = -2; private final int TARGET_HUMAN = -2;
@@ -110,6 +112,7 @@ public abstract class GameState {
sb.append(TextUtil.concatNoSpace("humanlife=", String.valueOf(humanLife), "\n")); sb.append(TextUtil.concatNoSpace("humanlife=", String.valueOf(humanLife), "\n"));
sb.append(TextUtil.concatNoSpace("ailife=", String.valueOf(computerLife), "\n")); sb.append(TextUtil.concatNoSpace("ailife=", String.valueOf(computerLife), "\n"));
sb.append(TextUtil.concatNoSpace("turn=", String.valueOf(turn), "\n"));
if (!humanCounters.isEmpty()) { if (!humanCounters.isEmpty()) {
sb.append(TextUtil.concatNoSpace("humancounters=", humanCounters, "\n")); sb.append(TextUtil.concatNoSpace("humancounters=", humanCounters, "\n"));
@@ -149,6 +152,7 @@ public abstract class GameState {
tChangePlayer = game.getPhaseHandler().getPlayerTurn() == ai ? "ai" : "human"; tChangePlayer = game.getPhaseHandler().getPlayerTurn() == ai ? "ai" : "human";
tChangePhase = game.getPhaseHandler().getPhase().toString(); tChangePhase = game.getPhaseHandler().getPhase().toString();
turn = game.getPhaseHandler().getTurn();
aiCardTexts.clear(); aiCardTexts.clear();
humanCardTexts.clear(); humanCardTexts.clear();
@@ -392,6 +396,9 @@ public abstract class GameState {
boolean isHuman = categoryName.startsWith("human"); boolean isHuman = categoryName.startsWith("human");
if (categoryName.endsWith("turn")) {
turn = Integer.parseInt(categoryValue);
}
if (categoryName.endsWith("life")) { if (categoryName.endsWith("life")) {
if (isHuman) if (isHuman)
humanLife = Integer.parseInt(categoryValue); humanLife = Integer.parseInt(categoryValue);
@@ -499,7 +506,7 @@ public abstract class GameState {
applyCountersToGameEntity(ai, computerCounters); applyCountersToGameEntity(ai, computerCounters);
} }
game.getPhaseHandler().devModeSet(newPhase, newPlayerTurn); game.getPhaseHandler().devModeSet(newPhase, newPlayerTurn, turn);
game.getTriggerHandler().setSuppressAllTriggers(true); game.getTriggerHandler().setSuppressAllTriggers(true);
@@ -530,7 +537,7 @@ public abstract class GameState {
private void handleCombat(final Game game, final Player attackingPlayer, final Player defendingPlayer, final boolean toDeclareBlockers) { private void handleCombat(final Game game, final Player attackingPlayer, final Player defendingPlayer, final boolean toDeclareBlockers) {
// First we need to ensure that all attackers are declared in the Declare Attackers step, // First we need to ensure that all attackers are declared in the Declare Attackers step,
// even if proceeding straight to Declare Blockers // even if proceeding straight to Declare Blockers
game.getPhaseHandler().devModeSet(PhaseType.COMBAT_DECLARE_ATTACKERS, attackingPlayer); game.getPhaseHandler().devModeSet(PhaseType.COMBAT_DECLARE_ATTACKERS, attackingPlayer, turn);
if (game.getPhaseHandler().getCombat() == null) { if (game.getPhaseHandler().getCombat() == null) {
game.getPhaseHandler().setCombat(new Combat(attackingPlayer)); game.getPhaseHandler().setCombat(new Combat(attackingPlayer));

View File

@@ -98,7 +98,7 @@ public class GameCopier {
PhaseHandler origPhaseHandler = origGame.getPhaseHandler(); PhaseHandler origPhaseHandler = origGame.getPhaseHandler();
Player newPlayerTurn = playerMap.get(origPhaseHandler.getPlayerTurn()); Player newPlayerTurn = playerMap.get(origPhaseHandler.getPlayerTurn());
newGame.getPhaseHandler().devModeSet(origPhaseHandler.getPhase(), newPlayerTurn); newGame.getPhaseHandler().devModeSet(origPhaseHandler.getPhase(), newPlayerTurn, origPhaseHandler.getTurn());
newGame.getTriggerHandler().suppressMode(TriggerType.ChangesZone); newGame.getTriggerHandler().suppressMode(TriggerType.ChangesZone);
for (Player p : newGame.getPlayers()) { for (Player p : newGame.getPlayers()) {
((PlayerZoneBattlefield) p.getZone(ZoneType.Battlefield)).setTriggers(false); ((PlayerZoneBattlefield) p.getZone(ZoneType.Battlefield)).setTriggers(false);

View File

@@ -1054,13 +1054,14 @@ public class PhaseHandler implements java.io.Serializable {
// this is a hack for the setup game state mode, do not use outside of devSetupGameState code // this is a hack for the setup game state mode, do not use outside of devSetupGameState code
// as it avoids calling any of the phase effects that may be necessary in a less enforced context // as it avoids calling any of the phase effects that may be necessary in a less enforced context
public final void devModeSet(final PhaseType phase0, final Player player0, boolean endCombat) { public final void devModeSet(final PhaseType phase0, final Player player0, boolean endCombat, int cturn) {
if (phase0 != null) { if (phase0 != null) {
setPhase(phase0); setPhase(phase0);
} }
if (player0 != null) { if (player0 != null) {
setPlayerTurn(player0); setPlayerTurn(player0);
} }
turn = cturn;
game.fireEvent(new GameEventTurnPhase(playerTurn, phase, "")); game.fireEvent(new GameEventTurnPhase(playerTurn, phase, ""));
if (endCombat) { if (endCombat) {
@@ -1068,9 +1069,18 @@ public class PhaseHandler implements java.io.Serializable {
} }
} }
public final void devModeSet(final PhaseType phase0, final Player player0) { public final void devModeSet(final PhaseType phase0, final Player player0) {
devModeSet(phase0, player0, true); devModeSet(phase0, player0, true, 1);
} }
public final void devModeSet(final PhaseType phase0, final Player player0, int cturn) {
devModeSet(phase0, player0, true, cturn);
}
public final void devModeSet(final PhaseType phase0, final Player player0, boolean endCombat) {
devModeSet(phase0, player0, endCombat, 0);
}
public final void endTurnByEffect() { public final void endTurnByEffect() {
endCombat(); endCombat();
extraPhases.clear(); extraPhases.clear();