Added two new events and replacement calls - PLAY_TURN and EXTRA_TURN.

This commit is contained in:
LevelX2 2014-09-11 17:00:21 +02:00
parent 86abd6a2e5
commit 0ffa27e777
2 changed files with 38 additions and 12 deletions

View file

@ -604,22 +604,25 @@ public abstract class GameImpl implements Game, Serializable {
PlayerList players = state.getPlayerList(nextPlayerId); PlayerList players = state.getPlayerList(nextPlayerId);
Player player = getPlayer(players.get()); Player player = getPlayer(players.get());
while (!isPaused() && !gameOver(null)) { while (!isPaused() && !gameOver(null)) {
GameEvent event = new GameEvent(GameEvent.EventType.PLAY_TURN, null, null, player.getId());
if (!replaceEvent(event)) {
if (!playTurn(player)) { if (!playTurn(player)) {
break; break;
} }
state.setTurnNum(state.getTurnNum() + 1); state.setTurnNum(state.getTurnNum() + 1);
}
//20091005 - 500.7 //20091005 - 500.7
UUID extraTurnId = getState().getTurnMods().getExtraTurn(player.getId()); UUID extraTurnId = getNextExtraTurn(player.getId());
while (extraTurnId != null) { while (extraTurnId != null) {
event = new GameEvent(GameEvent.EventType.PLAY_TURN, null, null, player.getId());
if (!replaceEvent(event)) {
state.setExtraTurn(true); state.setExtraTurn(true);
state.setTurnId(extraTurnId); state.setTurnId(extraTurnId);
playTurn(player); playTurn(player);
state.setTurnNum(state.getTurnNum() + 1); state.setTurnNum(state.getTurnNum() + 1);
}
extraTurnId = getState().getTurnMods().getExtraTurn(player.getId()); extraTurnId = getNextExtraTurn(player.getId());
} }
state.setTurnId(null); state.setTurnId(null);
state.setExtraTurn(false); 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) { private boolean playTurn(Player player) {
this.logStartOfTurn(player); this.logStartOfTurn(player);
if (checkStopOnTurnOption()) { if (checkStopOnTurnOption()) {

View file

@ -55,6 +55,7 @@ public class GameEvent {
PREVENT_DAMAGE, PREVENTED_DAMAGE, PREVENT_DAMAGE, PREVENTED_DAMAGE,
//Turn-based events //Turn-based events
PLAY_TURN, EXTRA_TURN,
CHANGE_PHASE, PHASE_CHANGED, CHANGE_PHASE, PHASE_CHANGED,
CHANGE_STEP, STEP_CHANGED, CHANGE_STEP, STEP_CHANGED,
BEGINNING_PHASE, BEGINNING_PHASE_PRE, BEGINNING_PHASE_POST, BEGINNING_PHASE, BEGINNING_PHASE_PRE, BEGINNING_PHASE_POST,