Merge branch 'DumpTurn' into 'master'

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

See merge request core-developers/forge!209
This commit is contained in:
Michael Kamensky
2018-02-18 19:39:22 +00:00
3 changed files with 24 additions and 5 deletions

View File

@@ -82,6 +82,8 @@ public abstract class GameState {
private String precastHuman = null;
private String precastAI = null;
private int turn;
// 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_HUMAN = -2;
@@ -110,6 +112,7 @@ public abstract class GameState {
sb.append(TextUtil.concatNoSpace("humanlife=", String.valueOf(humanLife), "\n"));
sb.append(TextUtil.concatNoSpace("ailife=", String.valueOf(computerLife), "\n"));
sb.append(TextUtil.concatNoSpace("turn=", String.valueOf(turn), "\n"));
if (!humanCounters.isEmpty()) {
sb.append(TextUtil.concatNoSpace("humancounters=", humanCounters, "\n"));
@@ -149,6 +152,7 @@ public abstract class GameState {
tChangePlayer = game.getPhaseHandler().getPlayerTurn() == ai ? "ai" : "human";
tChangePhase = game.getPhaseHandler().getPhase().toString();
turn = game.getPhaseHandler().getTurn();
aiCardTexts.clear();
humanCardTexts.clear();
@@ -392,6 +396,11 @@ public abstract class GameState {
boolean isHuman = categoryName.startsWith("human");
if (categoryName.equals("turn")) {
turn = Integer.parseInt(categoryValue);
} else {
turn = 1;
}
if (categoryName.endsWith("life")) {
if (isHuman)
humanLife = Integer.parseInt(categoryValue);
@@ -499,7 +508,7 @@ public abstract class GameState {
applyCountersToGameEntity(ai, computerCounters);
}
game.getPhaseHandler().devModeSet(newPhase, newPlayerTurn);
game.getPhaseHandler().devModeSet(newPhase, newPlayerTurn, turn);
game.getTriggerHandler().setSuppressAllTriggers(true);
@@ -530,7 +539,7 @@ public abstract class GameState {
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,
// 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) {
game.getPhaseHandler().setCombat(new Combat(attackingPlayer));

View File

@@ -97,7 +97,7 @@ public class GameCopier {
PhaseHandler origPhaseHandler = origGame.getPhaseHandler();
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);
for (Player p : newGame.getPlayers()) {
((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
// 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) {
setPhase(phase0);
}
if (player0 != null) {
setPlayerTurn(player0);
}
turn = cturn;
game.fireEvent(new GameEventTurnPhase(playerTurn, phase, ""));
if (endCombat) {
@@ -1068,9 +1069,18 @@ public class PhaseHandler implements java.io.Serializable {
}
}
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() {
endCombat();
extraPhases.clear();