From 0ffa27e7776b4d39bc287f58ef7dd7d44444709d Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 11 Sep 2014 17:00:21 +0200 Subject: [PATCH] Added two new events and replacement calls - PLAY_TURN and EXTRA_TURN. --- Mage/src/mage/game/GameImpl.java | 49 ++++++++++++++++++------ Mage/src/mage/game/events/GameEvent.java | 1 + 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 4bea2ca1f56..4b17558085b 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -604,22 +604,25 @@ public abstract class GameImpl implements Game, Serializable { PlayerList players = state.getPlayerList(nextPlayerId); Player player = getPlayer(players.get()); while (!isPaused() && !gameOver(null)) { - - if (!playTurn(player)) { - break; + GameEvent event = new GameEvent(GameEvent.EventType.PLAY_TURN, null, null, player.getId()); + if (!replaceEvent(event)) { + if (!playTurn(player)) { + break; + } + state.setTurnNum(state.getTurnNum() + 1); } - state.setTurnNum(state.getTurnNum() + 1); - //20091005 - 500.7 - UUID extraTurnId = getState().getTurnMods().getExtraTurn(player.getId()); + UUID extraTurnId = getNextExtraTurn(player.getId()); while (extraTurnId != null) { - state.setExtraTurn(true); - state.setTurnId(extraTurnId); - playTurn(player); - state.setTurnNum(state.getTurnNum() + 1); - - extraTurnId = getState().getTurnMods().getExtraTurn(player.getId()); + event = new GameEvent(GameEvent.EventType.PLAY_TURN, null, null, player.getId()); + if (!replaceEvent(event)) { + state.setExtraTurn(true); + state.setTurnId(extraTurnId); + playTurn(player); + state.setTurnNum(state.getTurnNum() + 1); + } + extraTurnId = getNextExtraTurn(player.getId()); } state.setTurnId(null); state.setExtraTurn(false); @@ -632,6 +635,28 @@ public abstract class GameImpl implements Game, Serializable { } } + private UUID getNextExtraTurn(UUID playerId) { + Player player = this.getPlayer(playerId); + if (player != null) { + boolean checkForExtraTurn = true; + while(checkForExtraTurn) { + UUID extraTurnId = getState().getTurnMods().getExtraTurn(playerId); + if (extraTurnId != null) { + GameEvent event = new GameEvent(GameEvent.EventType.EXTRA_TURN, extraTurnId, null, playerId); + if (!replaceEvent(event)) { + return extraTurnId; + } + } else { + checkForExtraTurn = false; + } + if (!player.isInGame()) { + return null; + } + } + } + return null; + } + private boolean playTurn(Player player) { this.logStartOfTurn(player); if (checkStopOnTurnOption()) { diff --git a/Mage/src/mage/game/events/GameEvent.java b/Mage/src/mage/game/events/GameEvent.java index af71b4b400c..207b1ca28e1 100644 --- a/Mage/src/mage/game/events/GameEvent.java +++ b/Mage/src/mage/game/events/GameEvent.java @@ -55,6 +55,7 @@ public class GameEvent { PREVENT_DAMAGE, PREVENTED_DAMAGE, //Turn-based events + PLAY_TURN, EXTRA_TURN, CHANGE_PHASE, PHASE_CHANGED, CHANGE_STEP, STEP_CHANGED, BEGINNING_PHASE, BEGINNING_PHASE_PRE, BEGINNING_PHASE_POST,