public SoarTaxi(Taxi taxi, Agent agent, String[] shutdown_commands) { this.player = taxi; this.agent = agent; this.shutdownCommands = shutdown_commands; agent.SetBlinkIfNoChange(false); input = new SoarTaxiIL(agent); input.create(); if (!agent.Commit()) { Gridmap2D.control.errorPopUp(Names.Errors.commitFail + taxi.getName()); } }
public void shutdown() { assert agent != null; if (shutdownCommands != null) { // execute the pre-shutdown commands for (String command : shutdownCommands) { String result = player.getName() + ": result: " + agent.ExecuteCommandLine(command, true); logger.info(player.getName() + ": shutdown command: " + command); if (agent.HadError()) { Gridmap2D.control.errorPopUp(result); } else { logger.info(player.getName() + ": result: " + result); } } } }
public void reset() { if (agent == null) { return; } input.destroy(); if (!agent.Commit()) { Gridmap2D.control.errorPopUp(Names.Errors.commitFail + player.getName()); Gridmap2D.control.stopSimulation(); } agent.InitSoar(); input.create(); if (!agent.Commit()) { Gridmap2D.control.errorPopUp(Names.Errors.commitFail + player.getName()); Gridmap2D.control.stopSimulation(); } }
public void update(TaxiMap taxiMap) { input.update( player.getMoved(), player.getLocation(), taxiMap, player.getPointsDelta(), player.getFuel()); if (!agent.Commit()) { Gridmap2D.control.errorPopUp(Names.Errors.commitFail + player.getName()); Gridmap2D.control.stopSimulation(); } }
public CommandInfo nextCommand() { // if there was no command issued, that is kind of strange if (agent.GetNumberCommands() == 0) { if (logger.isDebugEnabled()) { logger.debug(player.getName() + " issued no command."); } return new CommandInfo(); } // go through the commands // see move info for details CommandInfo move = new CommandInfo(); boolean moveWait = false; if (agent.GetNumberCommands() > 1) { logger.debug( player.getName() + ": " + agent.GetNumberCommands() + " commands detected, all but the first will be ignored"); } for (int i = 0; i < agent.GetNumberCommands(); ++i) { Identifier commandId = agent.GetCommand(i); String commandName = commandId.GetAttribute(); if (commandName.equalsIgnoreCase(Names.kMoveID)) { if (move.move || moveWait) { logger.debug(player.getName() + ": multiple move commands detected"); commandId.AddStatusError(); continue; } move.move = true; String direction = commandId.GetParameterValue(Names.kDirectionID); if (direction != null) { if (direction.equals(Names.kNone)) { // legal wait move.move = false; moveWait = true; commandId.AddStatusComplete(); continue; } else { move.moveDirection = Direction.parse(direction); commandId.AddStatusComplete(); continue; } } } else if (commandName.equalsIgnoreCase(Names.kStopSimID)) { if (move.stopSim) { logger.debug(player.getName() + ": multiple stop commands detected, ignoring"); commandId.AddStatusError(); continue; } move.stopSim = true; commandId.AddStatusComplete(); continue; } else if (commandName.equalsIgnoreCase(Names.kPickUpID)) { if (move.pickup) { logger.debug( player.getName() + ": multiple " + Names.kPickUpID + " commands detected, ignoring"); commandId.AddStatusError(); continue; } move.pickup = true; commandId.AddStatusComplete(); continue; } else if (commandName.equalsIgnoreCase(Names.kPutDownID)) { if (move.putdown) { logger.debug( player.getName() + ": multiple " + Names.kPutDownID + " commands detected, ignoring"); commandId.AddStatusError(); continue; } move.putdown = true; commandId.AddStatusComplete(); continue; } else if (commandName.equalsIgnoreCase(Names.kFillUpID)) { if (move.fillup) { logger.debug( player.getName() + ": multiple " + Names.kFillUpID + " commands detected, ignoring"); commandId.AddStatusError(); continue; } move.fillup = true; commandId.AddStatusComplete(); continue; } else { logger.warn("Unknown command: " + commandName); commandId.AddStatusError(); continue; } logger.warn("Improperly formatted command: " + commandName); commandId.AddStatusError(); } agent.ClearOutputLinkChanges(); if (!agent.Commit()) { Gridmap2D.control.errorPopUp(Names.Errors.commitFail + player.getName()); Gridmap2D.control.stopSimulation(); } return move; }