/* * 作成日: 2008/06/11 */ package jp.ac.fit.asura.nao.strategy; import org.apache.log4j.Logger; import jp.ac.fit.asura.nao.RobotContext; import jp.ac.fit.asura.nao.VisualCycle; import jp.ac.fit.asura.nao.VisualFrameContext; import jp.ac.fit.asura.nao.strategy.schedulers.Scheduler; /** * * StrategySystem. 戦略関連のcore部分. * * 情報管理と各ステップでの処理、スケジューラの切り替えと実行など. * * @author $Author: sey $ * * @version $Id: StrategySystem.java 717 2008-12-31 18:16:20Z sey $ * */ public class StrategySystem implements VisualCycle { private Logger log = Logger.getLogger(StrategySystem.class); private RobotContext robotContext; private TaskManager taskManager; private Team team; private Role role; private GameState gameState; private boolean isPenalized; // private boolean[] isPenalized; for all allies private Team kickOffTeam; private Scheduler scheduler; private Scheduler nextScheduler; private StrategyContext context; private byte ownScore; private int secsRemaining; public StrategySystem() { taskManager = new TaskManager(); team = Team.Red; } @Override public void init(RobotContext rctx) { this.robotContext = rctx; // set default role. switch (rctx.getRobotId()) { case 0: setRole(Role.Goalie); break; case 1: setRole(Role.Striker); break; case 2: setRole(Role.Libero); break; case 3: setRole(Role.Defender); break; default: assert false; setRole(null); } context = new StrategyContext(robotContext); } @Override public void start() { gameState = GameState.INITIAL; scheduler = null; taskManager.init(robotContext); nextScheduler = (Scheduler) taskManager.find("StrategySchedulerTask"); } @Override public void stop() { } @Override public void step(VisualFrameContext frameContext) { context.update(frameContext); // スケジューラ切り替え if (nextScheduler != null) { if (scheduler != null) scheduler.leave(context); scheduler = nextScheduler; nextScheduler = null; scheduler.enter(context); } // beforeを実行 for (Task task : taskManager.values()) task.before(context); scheduler.continueTask(context); // afterを実行 for (Task task : taskManager.values()) task.after(context); } /** * @return the team */ public Team getTeam() { return team; } /** * @param team * the team to set */ public void setTeam(Team team) { this.team = team; } /** * @return the role */ public Role getRole() { return role; } public void setRole(Role newRole) { log.info("[robotId " + robotContext.getRobotId() + "]set Role: " + newRole); this.role = newRole; } /** * @return the taskManager */ public TaskManager getTaskManager() { return taskManager; } /** * @return the scheduler */ public Scheduler getScheduler() { return scheduler; } public void setNextScheduler(Scheduler scheduler) { nextScheduler = scheduler; } public GameState getGameState() { return gameState; } public void setGameState(GameState gameState) { this.gameState = gameState; } public boolean isPenalized() { return isPenalized; } public void setPenalized(boolean isPenalized) { this.isPenalized = isPenalized; } public Team getKickOffTeam() { return kickOffTeam; } public void setKickOffTeam(Team kickOffTeam) { this.kickOffTeam = kickOffTeam; } /** * StrategyContextの取得. * * @return StrategyContext */ public StrategyContext getContext() { return context; } public byte getOwnScore() { return ownScore; } public void setOwnScore(byte ownScore) { this.ownScore = ownScore; } public int getSecsRemaining() { return secsRemaining; } public void setSecsRemaining(int secsRemaining) { this.secsRemaining = secsRemaining; } }