package net.sf.bloodball.fit.system;
import java.awt.Point;
import java.util.List;
import net.sf.bloodball.BloodballGame;
import net.sf.bloodball.confguration.random.IRandomizer;
import net.sf.bloodball.confguration.team.ITeam;
import net.sf.bloodball.gameflow.TurnFlowController;
import net.sf.bloodball.gameflow.state.MoveSelectionState;
import net.sf.bloodball.model.ball.IBall;
import net.sf.bloodball.model.player.IFieldInterpreter;
import net.sf.bloodball.model.player.IPlayer;
import net.sf.bloodball.model.player.ITeamFormation;
import net.sf.bloodball.presenter.event.IGameBoardController;
public class TestSystem {
private static BloodballGame bloodballGame;
private static TestGame testGame;
public static void reset(String beginningTeam) {
testGame = new TestGame(beginningTeam);
}
public static ITeam getTeam(String name) {
return testGame.getTeam(name);
}
public static ITeamFormation getFormation(String name) {
TurnFlowController turnFlowController = getTurnFlow();
return turnFlowController.getTeams().getTeamFormation(getTeam(name));
}
private static TurnFlowController getTurnFlow() {
return testGame.getTurnFlowController();
}
public static ITeamFormation getActiveTeam() {
return testGame.getPresenter().getGameFlowController().getActiveTeam();
}
public static IGameBoardController getGameBoardController() {
return testGame.getGameBoardController();
}
public static List getPlayersOnField() {
return getTurnFlow().getField().getAllFieldPlayers();
}
public static Point getPlayerPosition(IPlayer player) {
return getFieldInterpreter().getPlayerPosition(player);
}
private static IFieldInterpreter getFieldInterpreter() {
return getTurnFlow().getField();
}
public static boolean isContinueButtonEnabled() {
return getTurnFlow().getState().mayEndTurn();
}
public static IPlayer getPlayer(String team, int number) {
return getFormation(team).getPlayerByNumber(number);
}
public static void setPlayer(IPlayer player, Point position) {
getFieldInterpreter().setPlayer(position, player);
}
public static void setBall(Point point) {
getTurnFlow().getBall().setPosition(point);
}
public static void setBallPossingPlayer(IPlayer player, Point position) {
setPlayer(player, position);
setBall(position);
player.catchBall(getBall());
}
public static IBall getBall() {
return getTurnFlow().getBall();
}
private static MoveSelectionState createMoveSelectionState() {
return new MoveSelectionState(getTurnFlow().getGameFlow(), getBall(), getTurnFlow());
}
public static void prepare() {
reset("home"); getTurnFlow().setState(createMoveSelectionState());
}
public static void setRandomizer(IRandomizer randomizer) {
getTurnFlow().setRandomizer(randomizer);
}
}