@Override public int getTurnNum() { return state.getTurnNum(); }
private boolean checkStopOnTurnOption() { if (gameOptions.stopOnTurn != null && gameOptions.stopAtStep == PhaseStep.UNTAP) { if (gameOptions.stopOnTurn.equals(state.getTurnNum())) { winnerId = null; //DRAW saveState(false); return true; } } return false; }
private void logStartOfTurn(Game game, Player player) { StringBuilder sb = new StringBuilder(game.getState().isExtraTurn() ? "Extra turn" : "Turn "); sb.append(game.getState().getTurnNum()).append(' '); sb.append(player.getLogName()); sb.append(" ("); int delimiter = game.getPlayers().size() - 1; for (Player gamePlayer : game.getPlayers().values()) { sb.append(gamePlayer.getLife()); int poison = gamePlayer.getCounters().getCount(CounterType.POISON); if (poison > 0) { sb.append("[P:").append(poison).append(']'); } if (delimiter > 0) { sb.append(" - "); delimiter--; } } sb.append(')'); game.fireStatusEvent(sb.toString(), true); } }
sb.append(state.getTurnMods()); sb.append("<br>getTurnNum: "); sb.append(state.getTurnNum());
private boolean checkStopOnStepOption(Game game) { if (game.getOptions().stopOnTurn != null && game.getOptions().stopOnTurn <= game.getState().getTurnNum() && game.getOptions().stopAtStep == getStep().getType()) { game.pause(); return true; } return false; }
@Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); String key = permanent.getId() + "ignoreEffect" + game.getState().getPriorityPlayerId() + game.getState().getTurnNum(); if (key != null) { game.getState().setValue("ignoreEffect", key); } return true; } }
@Override public synchronized void rollbackTurns(int turnsToRollback) { if (gameOptions.rollbackTurnsAllowed) { int turnToGoTo = getTurnNum() - turnsToRollback; if (turnToGoTo < 1 || !gameStatesRollBack.containsKey(turnToGoTo)) { informPlayers(GameLog.getPlayerRequestColoredText("Player request: It's not possible to rollback " + turnsToRollback + " turn(s)")); } else { GameState restore = gameStatesRollBack.get(turnToGoTo); if (restore != null) { informPlayers(GameLog.getPlayerRequestColoredText("Player request: Rolling back to start of turn " + restore.getTurnNum())); state.restoreForRollBack(restore); playerList.setCurrent(state.getPlayerByOrderId()); // Reset temporary created bookmarks because no longer valid after rollback savedStates.clear(); gameStates.clear(); // because restore uses the objects without copy each copy the state again gameStatesRollBack.put(getTurnNum(), state.copy()); executingRollback = true; for (Player playerObject : getPlayers().values()) { if (playerObject.isHuman() && playerObject.isInGame()) { playerObject.resetStoredBookmark(this); playerObject.abort(); playerObject.resetPlayerPassedActions(); } } fireUpdatePlayersEvent(); } } } }
@Override public void resume() { playerList = state.getPlayerList(state.getActivePlayerId()); Player player = getPlayer(playerList.get()); boolean wasPaused = state.isPaused(); state.resume(); if (!checkIfGameIsOver()) { fireInformEvent("Turn " + state.getTurnNum()); if (checkStopOnTurnOption()) { return; } state.getTurn().resumePlay(this, wasPaused); if (!isPaused() && !checkIfGameIsOver()) { endOfTurn(); player = playerList.getNext(this); state.setTurnNum(state.getTurnNum() + 1); } } play(player.getId()); }
@Override public boolean applies(GameEvent event, Ability source, Game game) { Player player = game.getPlayer(event.getPlayerId()); Permanent dampingEngine = game.getPermanent(source.getSourceId()); final Card card = game.getCard(event.getSourceId()); if (player != null || card != null) { // check type of spell if (card.isCreature() || card.isArtifact() || card.isEnchantment() || card.isLand()) { // check to see if the player has more permanents if (new ControlsMorePermanentsThanEachOtherPlayer(player).apply(game, source)) { // check to see if the player choose to ignore the effect return game.getState().getValue("ignoreEffect") == null || dampingEngine == null || !game.getState().getValue("ignoreEffect").equals (dampingEngine.getId() + "ignoreEffect" + game.getState().getPriorityPlayerId() + game.getState().getTurnNum()); } } } return false; } }
private boolean playTurn(Player player) { boolean skipTurn = false; do { if (executingRollback) { executingRollback = false; player = getPlayer(state.getActivePlayerId()); for (Player playerObject : getPlayers().values()) { if (playerObject.isInGame()) { playerObject.abortReset(); } } } else { state.setActivePlayerId(player.getId()); saveRollBackGameState(); } if (checkStopOnTurnOption()) { return false; } skipTurn = state.getTurn().play(this, player); } while (executingRollback); if (isPaused() || checkIfGameIsOver()) { return false; } if (!skipTurn) { endOfTurn(); state.setTurnNum(state.getTurnNum() + 1); } return true; }
this.turn = state.getTurnNum(); this.activePlayerId = state.getActivePlayerId(); if (state.getActivePlayerId() != null) {