package controller.action.ui; import common.Log; import controller.action.ActionBoard; import controller.action.ActionType; import controller.action.GCAction; import data.AdvancedData; import data.GameControlData; public class RefereeTimeout extends GCAction { public RefereeTimeout() { super(ActionType.UI); } @Override public void perform(AdvancedData data) { if (!data.refereeTimeout) { data.previousSecGameState = data.secGameState; data.secGameState = GameControlData.STATE2_TIMEOUT; data.refereeTimeout = true; Log.setNextMessage("Referee Timeout"); if (data.gameState == GameControlData.STATE_PLAYING) { data.addTimeInCurrentState(); } if (data.previousSecGameState == GameControlData.STATE2_PENALTYSHOOT && (data.gameState == GameControlData.STATE_SET || data.gameState == GameControlData.STATE_PLAYING)) { data.team[data.kickOffTeam == data.team[0].teamNumber ? 0 : 1].penaltyShot--; } data.gameState = -1; //something impossible to force execution of next call ActionBoard.initial.perform(data); } else { data.secGameState = data.previousSecGameState; data.previousSecGameState = GameControlData.STATE2_TIMEOUT; data.refereeTimeout = false; Log.setNextMessage("End of Referee Timeout"); if (data.secGameState != GameControlData.STATE2_PENALTYSHOOT) { ActionBoard.ready.perform(data); } } } @Override public boolean isLegal(AdvancedData data) { return data.gameState != GameControlData.STATE_FINISHED && !data.timeOutActive[0] && !data.timeOutActive[1]; } }