package controller.action.clock;
import controller.action.ActionBoard;
import controller.action.ActionType;
import controller.action.GCAction;
import data.AdvancedData;
import data.GameControlData;
import data.Rules;
/**
* @author Michel Bartsch
*
* This action means that some time has been passed.
*/
public class ClockTick extends GCAction
{
/**
* Creates a new ClockTick action.
* Look at the ActionBoard before using this.
*/
public ClockTick()
{
super(ActionType.CLOCK);
}
/**
* Performs this action to manipulate the data (model).
*
* @param data The current data to work on.
*/
@Override
public void perform(AdvancedData data)
{
if (data.gameState == GameControlData.STATE_READY
&& data.getSecondsSince(data.whenCurrentGameStateBegan) >= Rules.league.readyTime) {
ActionBoard.set.perform(data);
} else if (data.gameState == GameControlData.STATE_FINISHED) {
Integer remainingPauseTime = data.getRemainingPauseTime();
if (remainingPauseTime != null) {
if (data.firstHalf == GameControlData.C_TRUE && remainingPauseTime <= Rules.league.pauseTime / 2) {
ActionBoard.secondHalf.perform(data);
} else if (data.firstHalf != GameControlData.C_TRUE && remainingPauseTime <= Rules.league.pausePenaltyShootOutTime / 2) {
ActionBoard.penaltyShoot.perform(data);
}
}
}
data.updateCoachMessages();
data.updatePenalties();
}
/**
* Checks if this action is legal with the given data (model).
* Illegal actions are not performed by the EventHandler.
*
* @param data The current data to check with.
*/
@Override
public boolean isLegal(AdvancedData data)
{
return true;
}
public boolean isClockRunning(AdvancedData data)
{
boolean halfNotStarted = data.timeBeforeCurrentGameState == 0 && data.gameState != GameControlData.STATE_PLAYING;
return !((data.gameState == GameControlData.STATE_INITIAL)
|| (data.gameState == GameControlData.STATE_FINISHED)
|| (
((data.gameState == GameControlData.STATE_READY)
|| (data.gameState == GameControlData.STATE_SET))
&& (((data.gameType == GameControlData.GAME_PLAYOFF) && Rules.league.playOffTimeStop) || halfNotStarted)
)
|| data.manPause)
|| data.manPlay;
}
}