package controller.action.ui.half;
import common.Log;
import controller.action.ActionType;
import controller.action.GCAction;
import data.AdvancedData;
import data.GameControlData;
import data.Rules;
/**
* @author Michel Bartsch
*
* This action means that a penalty shoot is to be starting.
*/
public class PenaltyShoot extends GCAction
{
/**
* Creates a new PenaltyShoot action.
* Look at the ActionBoard before using this.
*/
public PenaltyShoot()
{
super(ActionType.UI);
}
/**
* Performs this action to manipulate the data (model).
*
* @param data The current data to work on.
*/
@Override
public void perform(AdvancedData data)
{
if (data.secGameState != GameControlData.STATE2_PENALTYSHOOT) {
data.secGameState = GameControlData.STATE2_PENALTYSHOOT;
// Don't set data.whenCurrentGameStateBegan, because it's used to count the pause
data.gameState = GameControlData.STATE_INITIAL;
data.timeBeforeCurrentGameState = 0;
data.resetPenalties();
if (Rules.league.timeOutPerHalf) {
data.timeOutTaken = new boolean[] {false, false};
}
Log.state(data, "Penalty Shoot-out");
}
}
/**
* 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 (data.secGameState == GameControlData.STATE2_PENALTYSHOOT)
|| (data.previousSecGameState == GameControlData.STATE2_PENALTYSHOOT)
|| ((data.firstHalf != GameControlData.C_TRUE)
&& (data.gameState == GameControlData.STATE_FINISHED)
&& !(Rules.league.overtime
&& (data.gameType == GameControlData.GAME_PLAYOFF)
&& (data.secGameState == GameControlData.STATE2_NORMAL)
&& (data.team[0].score == data.team[1].score)
&& (data.team[0].score > 0)) )
|| (data.testmode);
}
}