package controller.action;
import controller.action.clock.ClockTick;
import controller.action.net.Manual;
import controller.action.ui.CancelUndo;
import controller.action.ui.ClockPause;
import controller.action.ui.ClockReset;
import controller.action.ui.DropBall;
import controller.action.ui.GlobalStuck;
import controller.action.ui.Goal;
import controller.action.ui.IncGameClock;
import controller.action.ui.KickOff;
import controller.action.ui.Out;
import controller.action.ui.Quit;
import controller.action.ui.RefereeTimeout;
import controller.action.ui.Robot;
import controller.action.ui.TeammatePushing;
import controller.action.ui.Testmode;
import controller.action.ui.TimeOut;
import controller.action.ui.Undo;
import controller.action.ui.half.FirstHalf;
import controller.action.ui.half.FirstHalfOvertime;
import controller.action.ui.half.PenaltyShoot;
import controller.action.ui.half.SecondHalf;
import controller.action.ui.half.SecondHalfOvertime;
import controller.action.ui.penalty.Attack;
import controller.action.ui.penalty.BallManipulation;
import controller.action.ui.penalty.CoachMotion;
import controller.action.ui.penalty.Defender;
import controller.action.ui.penalty.Defense;
import controller.action.ui.penalty.MotionInSet;
import controller.action.ui.penalty.KickOffGoal;
import controller.action.ui.penalty.BallContact;
import controller.action.ui.penalty.Inactive;
import controller.action.ui.penalty.Leaving;
import controller.action.ui.penalty.PickUp;
import controller.action.ui.penalty.PickUpHL;
import controller.action.ui.penalty.Pushing;
import controller.action.ui.penalty.ServiceHL;
import controller.action.ui.penalty.Substitute;
import controller.action.ui.state.Finish;
import controller.action.ui.state.Initial;
import controller.action.ui.state.Play;
import controller.action.ui.state.Ready;
import controller.action.ui.state.Set;
import data.Rules;
/**
* @author Michel Bartsch
*
* This class actually holds static every instance of an action to get these
* actions where ever you want to execute or identify them.
* It may be usefull to have instances of actions that are not listed here,
* that would be ok but for basic features it should not be needed.
* Because of multi-thredding you should not take actions from here to write
* into their attributes. However, you should allways avoid writing in
* action`s attributes except in their constructor.
*
* You can read a detailed description of each action in it`s class.
*/
public class ActionBoard
{
public static ClockTick clock;
public static Quit quit;
public static Testmode testmode;
public static Undo[] undo;
public static CancelUndo cancelUndo;
public static final int MAX_NUM_UNDOS_AT_ONCE = 8;
public static Goal[] goalDec = new Goal[2];
public static Goal[] goalInc = new Goal[2];
public static KickOff[] kickOff = new KickOff[2];
public static Robot[][] robot;
public static TimeOut[] timeOut = new TimeOut[2];
public static GlobalStuck[] stuck = new GlobalStuck[2];
public static Out[] out = new Out[2];
public static ClockReset clockReset;
public static ClockPause clockPause;
public static IncGameClock incGameClock;
public static FirstHalf firstHalf;
public static SecondHalf secondHalf;
public static FirstHalfOvertime firstHalfOvertime;
public static SecondHalfOvertime secondHalfOvertime;
public static PenaltyShoot penaltyShoot;
public static RefereeTimeout refereeTimeout;
public static Initial initial;
public static Ready ready;
public static Set set;
public static Play play;
public static Finish finish;
public static Pushing pushing;
public static Leaving leaving;
public static MotionInSet motionInSet;
public static Inactive inactive;
public static Defender defender;
public static BallContact ballContact;
public static KickOffGoal kickOffGoal;
public static PickUp pickUp;
public static BallManipulation ballManipulation;
public static Attack attack;
public static Defense defense;
public static PickUpHL pickUpHL;
public static ServiceHL serviceHL;
public static CoachMotion coachMotion;
public static TeammatePushing teammatePushing;
public static Substitute substitute;
public static DropBall dropBall;
public static Manual[][] manualPen = Rules.league.isCoachAvailable ? new Manual[2][Rules.league.teamSize+1] : new Manual[2][Rules.league.teamSize];
public static Manual[][] manualUnpen = Rules.league.isCoachAvailable ? new Manual[2][Rules.league.teamSize+1] : new Manual[2][Rules.league.teamSize];
/**
* This must be called before using actions from this class. It creates
* all the actions instances.
*/
public static void init()
{
clock = new ClockTick();
quit = new Quit();
testmode = new Testmode();
undo = new Undo[MAX_NUM_UNDOS_AT_ONCE];
for (int i=0; i<undo.length; i++) {
undo[i] = new Undo(i);
}
cancelUndo = new CancelUndo();
if (Rules.league.isCoachAvailable) {
robot = new Robot[2][Rules.league.teamSize+1];
} else {
robot = new Robot[2][Rules.league.teamSize];
}
for (int i=0; i<2; i++) {
goalDec[i] = new Goal(i, -1);
goalInc[i] = new Goal(i, 1);
kickOff[i] = new KickOff(i);
for (int j=0; j<robot[i].length; j++) {
robot[i][j] = new Robot(i, j);
}
timeOut[i] = new TimeOut(i);
stuck[i] = new GlobalStuck(i);
out[i] = new Out(i);
}
clockReset = new ClockReset();
clockPause = new ClockPause();
incGameClock = new IncGameClock();
firstHalf = new FirstHalf();
secondHalf = new SecondHalf();
firstHalfOvertime = new FirstHalfOvertime();
secondHalfOvertime = new SecondHalfOvertime();
penaltyShoot = new PenaltyShoot();
refereeTimeout = new RefereeTimeout();
initial = new Initial();
ready = new Ready();
set = new Set();
play = new Play();
finish = new Finish();
pushing = new Pushing();
leaving = new Leaving();
motionInSet = new MotionInSet();
inactive = new Inactive();
defender = new Defender();
ballContact = new BallContact();
kickOffGoal = new KickOffGoal();
pickUp = new PickUp();
ballManipulation = new BallManipulation();
attack = new Attack();
defense = new Defense();
pickUpHL = new PickUpHL();
serviceHL = new ServiceHL();
coachMotion = new CoachMotion();
teammatePushing = new TeammatePushing();
substitute = new Substitute();
dropBall = new DropBall();
for (int i=0; i<2; i++) {
for (int j=0; j<Rules.league.teamSize; j++) {
manualPen[i][j] = new Manual(i, j, false);
manualUnpen[i][j] = new Manual(i, j, true);
}
}
}
}