package controller.action.ui.state;
import common.Log;
import controller.action.ActionType;
import controller.action.GCAction;
import controller.action.ui.half.FirstHalf;
import data.AdvancedData;
import data.GameControlData;
import data.Rules;
/**
* @author Michel Bartsch
*
* This action means that the state is to be set to set.
*/
public class Set extends GCAction
{
/**
* Creates a new Set action.
* Look at the ActionBoard before using this.
*/
public Set()
{
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.gameState == GameControlData.STATE_SET) {
return;
}
if (Rules.league.returnRobotsInGameStoppages) {
data.resetPenaltyTimes();
}
if ((data.gameType != GameControlData.GAME_PLAYOFF) && data.timeBeforeCurrentGameState != 0) {
data.addTimeInCurrentState();
}
data.whenCurrentGameStateBegan = data.getTime();
if (data.secGameState == GameControlData.STATE2_PENALTYSHOOT) {
data.timeBeforeCurrentGameState = 0;
if (data.gameState != GameControlData.STATE_INITIAL) {
data.kickOffTeam = data.team[data.kickOffTeam == data.team[0].teamNumber ? 1 : 0].teamNumber;
FirstHalf.changeSide(data);
}
if (data.gameState != GameControlData.STATE_PLAYING) {
data.team[data.team[0].teamColor == data.kickOffTeam ? 0 : 1].penaltyShot++;
}
}
data.gameState = GameControlData.STATE_SET;
Log.state(data, "Set");
}
/**
* 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.gameState == GameControlData.STATE_READY)
|| (data.gameState == GameControlData.STATE_SET)
|| ((data.secGameState == GameControlData.STATE2_PENALTYSHOOT)
&& ((data.gameState != GameControlData.STATE_PLAYING)
|| (Rules.league.penaltyShotRetries))
&& !data.timeOutActive[0]
&& !data.timeOutActive[1]
&& !data.refereeTimeout)
|| data.testmode;
}
}