From a830e49c5e3592a17f342c672ade32bd795242d4 Mon Sep 17 00:00:00 2001 From: k20066 <87357429+k20066@users.noreply.github.com> Date: Fri, 3 Nov 2023 01:27:43 +0900 Subject: [PATCH] remove unnecessary module --- config/module.cfg | 13 +- .../CentralizedControlCommandExecutorA.java | 311 --------------- .../CentralizedControlCommandPickerA.java | 80 ---- .../module/comm/DefaultChannelSubscriber.java | 100 ----- .../CentralizedControlATAllocator.java | 371 ------------------ 5 files changed, 5 insertions(+), 870 deletions(-) delete mode 100644 src/main/java/autumn_2023/centralized/CentralizedControlCommandExecutorA.java delete mode 100644 src/main/java/autumn_2023/centralized/CentralizedControlCommandPickerA.java delete mode 100644 src/main/java/autumn_2023/module/comm/DefaultChannelSubscriber.java delete mode 100755 src/main/java/autumn_2023/module/complex/CentralizedControlATAllocator.java diff --git a/config/module.cfg b/config/module.cfg index fae5e10..7827515 100755 --- a/config/module.cfg +++ b/config/module.cfg @@ -3,7 +3,7 @@ DefaultTacticsAmbulanceTeam.HumanDetector : autumn_2023.module.complex.Centraliz DefaultTacticsAmbulanceTeam.Search : sample_team.module.complex.SampleSearch DefaultTacticsAmbulanceTeam.ExtActionTransport : adf.impl.extaction.DefaultExtActionTransport DefaultTacticsAmbulanceTeam.ExtActionMove : adf.impl.extaction.DefaultExtActionMove -#DefaultTacticsAmbulanceTeam.CommandExecutorAmbulance : adf.impl.centralized.DefaultCommandExecutorAmbulance +DefaultTacticsAmbulanceTeam.CommandExecutorAmbulance : adf.impl.centralized.DefaultCommandExecutorAmbulance DefaultTacticsAmbulanceTeam.CommandExecutorAmbulance : autumn_2023.centralized.CentralizedControlCommandExecutorA DefaultTacticsAmbulanceTeam.CommandExecutorScout : adf.impl.centralized.DefaultCommandExecutorScout @@ -24,13 +24,10 @@ DefaultTacticsPoliceForce.CommandExecutorPolice : adf.impl.centralized.DefaultCo DefaultTacticsPoliceForce.CommandExecutorScout : adf.impl.centralized.DefaultCommandExecutorScoutPolice ## DefaultTacticsAmbulanceCentre -#DefaultTacticsAmbulanceCentre.TargetAllocator : sample_team.module.complex.SampleAmbulanceTargetAllocator -#DefaultTacticsAmbulanceCentre.CommandPicker : adf.impl.centralized.DefaultCommandPickerAmbulance -DefaultTacticsAmbulanceCentre.TargetAllocator : autumn_2023.module.complex.CentralizedControlATAllocator -DefaultTacticsAmbulanceCentre.CommandPicker : autumn_2023.centralized.CentralizedControlCommandPickerA +DefaultTacticsAmbulanceCentre.TargetAllocator : sample_team.module.complex.SampleAmbulanceTargetAllocator +DefaultTacticsAmbulanceCentre.CommandPicker : adf.impl.centralized.DefaultCommandPickerAmbulance ## DefaultTacticsFireStation -#DefaultTacticsFireStation.TargetAllocator : sample_team.module.complex.SampleFireTargetAllocator DefaultTacticsFireStation.CommandPicker : adf.impl.centralized.DefaultCommandPickerFire TacticsFireStation.TargetAllocator : autumn_2023.module.complex.CentralizedControlFBAllocator @@ -96,8 +93,8 @@ DefaultCommandExecutorScoutPolice.PathPlanning : adf.impl.module.algorithm.Dijks DefaultCommandExecutorScoutPolice.ExtActionClear : adf.impl.extaction.DefaultExtActionClear ## MessageManager -MessageManager.PlatoonChannelSubscriber : autumn_2023.module.comm.DefaultChannelSubscriber -MessageManager.CenterChannelSubscriber : autumn_2023.module.comm.DefaultChannelSubscriber +MessageManager.PlatoonChannelSubscriber : adf.impl.module.comm.DefaultChannelSubscriber +MessageManager.CenterChannelSubscriber : adf.impl.module.comm.DefaultChannelSubscriber MessageManager.PlatoonMessageCoordinator : autumn_2023.module.comm.CentralizedControlMessageCoordinator MessageManager.CenterMessageCoordinator : autumn_2023.module.comm.CentralizedControlMessageCoordinator diff --git a/src/main/java/autumn_2023/centralized/CentralizedControlCommandExecutorA.java b/src/main/java/autumn_2023/centralized/CentralizedControlCommandExecutorA.java deleted file mode 100644 index 83841ed..0000000 --- a/src/main/java/autumn_2023/centralized/CentralizedControlCommandExecutorA.java +++ /dev/null @@ -1,311 +0,0 @@ -package autumn_2023.centralized; - -import static rescuecore2.standard.entities.StandardEntityURN.AMBULANCE_TEAM; -import static rescuecore2.standard.entities.StandardEntityURN.CIVILIAN; -import static rescuecore2.standard.entities.StandardEntityURN.REFUGE; -import adf.core.agent.action.common.ActionMove; -import adf.core.agent.action.common.ActionRest; -import adf.core.agent.communication.MessageManager; -import adf.core.agent.communication.standard.bundle.centralized.CommandAmbulance; -import adf.core.agent.communication.standard.bundle.centralized.MessageReport; -import adf.core.agent.develop.DevelopData; -import adf.core.agent.info.AgentInfo; -import adf.core.agent.info.ScenarioInfo; -import adf.core.agent.info.WorldInfo; -import adf.core.agent.module.ModuleManager; -import adf.core.agent.precompute.PrecomputeData; -import adf.core.component.centralized.CommandExecutor; -import adf.core.component.extaction.ExtAction; -import adf.core.component.module.algorithm.PathPlanning; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import rescuecore2.standard.entities.Area; -import rescuecore2.standard.entities.Human; -import rescuecore2.standard.entities.StandardEntity; -import rescuecore2.worldmodel.EntityID; - -public class CentralizedControlCommandExecutorA - extends CommandExecutor { - - private static final int ACTION_UNKNOWN = -1; - private static final int ACTION_REST = CommandAmbulance.ACTION_REST; - private static final int ACTION_MOVE = CommandAmbulance.ACTION_MOVE; - private static final int ACTION_RESCUE = CommandAmbulance.ACTION_RESCUE; - private static final int ACTION_LOAD = CommandAmbulance.ACTION_LOAD; - private static final int ACTION_UNLOAD = CommandAmbulance.ACTION_UNLOAD; - private static final int ACTION_AUTONOMY = CommandAmbulance.ACTION_AUTONOMY; - - private PathPlanning pathPlanning; - - private ExtAction actionTransport; - private ExtAction actionExtMove; - - private int commandType; - private EntityID target; - private EntityID commanderID; - - public CentralizedControlCommandExecutorA(AgentInfo ai, WorldInfo wi, ScenarioInfo si, ModuleManager moduleManager, DevelopData developData) { - super(ai, wi, si, moduleManager, developData); - this.commandType = ACTION_UNKNOWN; - switch (scenarioInfo.getMode()) { - case PRECOMPUTATION_PHASE: - case PRECOMPUTED: - case NON_PRECOMPUTE: - this.pathPlanning = moduleManager.getModule( - "DefaultCommandExecutorAmbulance.PathPlanning", - "adf.impl.module.algorithm.DijkstraPathPlanning"); - this.actionTransport = moduleManager.getExtAction( - "DefaultCommandExecutorAmbulance.ExtActionTransport", - "adf.impl.extaction.DefaultExtActionTransport"); - this.actionExtMove = moduleManager.getExtAction( - "DefaultCommandExecutorAmbulance.ExActionMove", - "adf.impl.extaction.DefaultExtActionMove"); - break; - } - } - - - @Override - public CommandExecutor setCommand(CommandAmbulance command) { - EntityID agentID = this.agentInfo.getID(); - if (command.isToIDDefined() && Objects.requireNonNull(command.getToID()) - .getValue() == agentID.getValue()) { - this.commandType = command.getAction(); - this.target = command.getTargetID(); - this.commanderID = command.getSenderID(); - } - return this; - } - - - @Override - public CommandExecutor updateInfo(MessageManager messageManager) { - super.updateInfo(messageManager); - if (this.getCountUpdateInfo() >= 2) { - return this; - } - this.pathPlanning.updateInfo(messageManager); - this.actionTransport.updateInfo(messageManager); - this.actionExtMove.updateInfo(messageManager); - - if (this.isCommandCompleted()) { - if (this.commandType != ACTION_UNKNOWN) { - messageManager - .addMessage(new MessageReport(true, true, false, this.commanderID)); - if (this.commandType == ACTION_LOAD) { - this.commandType = ACTION_UNLOAD; - this.target = null; - } else { - this.commandType = ACTION_UNKNOWN; - this.target = null; - this.commanderID = null; - } - } - } - return this; - } - - - @Override - public CommandExecutor precompute(PrecomputeData precomputeData) { - super.precompute(precomputeData); - if (this.getCountPrecompute() >= 2) { - return this; - } - this.pathPlanning.precompute(precomputeData); - this.actionTransport.precompute(precomputeData); - this.actionExtMove.precompute(precomputeData); - return this; - } - - - @Override - public CommandExecutor resume(PrecomputeData precomputeData) { - super.resume(precomputeData); - if (this.getCountResume() >= 2) { - return this; - } - this.pathPlanning.resume(precomputeData); - this.actionTransport.resume(precomputeData); - this.actionExtMove.resume(precomputeData); - return this; - } - - - @Override - public CommandExecutor preparate() { - super.preparate(); - if (this.getCountPreparate() >= 2) { - return this; - } - this.pathPlanning.preparate(); - this.actionTransport.preparate(); - this.actionExtMove.preparate(); - return this; - } - - - @Override - public CommandExecutor calc() { - this.result = null; - //System.out.println("time:"+this.agentInfo.getTime()+" id:"+this.agentInfo.getID()+" excutor"); - switch (this.commandType) { - case ACTION_REST: - EntityID position = this.agentInfo.getPosition(); - if (this.target == null) { - Collection< - EntityID> refuges = this.worldInfo.getEntityIDsOfType(REFUGE); - if (refuges.contains(position)) { - this.result = new ActionRest(); - } else { - this.pathPlanning.setFrom(position); - this.pathPlanning.setDestination(refuges); - List path = this.pathPlanning.calc().getResult(); - if (path != null && path.size() > 0) { - this.result = new ActionMove(path); - } else { - this.result = new ActionRest(); - } - } - return this; - } - if (position.getValue() != this.target.getValue()) { - List path = this.pathPlanning.getResult(position, - this.target); - if (path != null && path.size() > 0) { - this.result = new ActionMove(path); - return this; - } - } - this.result = new ActionRest(); - return this; - case ACTION_MOVE: - if (this.target != null) { - this.result = this.actionExtMove.setTarget(this.target).calc() - .getAction(); - } - return this; - case ACTION_RESCUE: - if (this.target != null) { - this.result = this.actionTransport.setTarget(this.target).calc() - .getAction(); - } - return this; - case ACTION_LOAD: - if (this.target != null) { - this.result = this.actionTransport.setTarget(this.target).calc() - .getAction(); - } - return this; - case ACTION_UNLOAD: - if (this.target != null) { - this.result = this.actionTransport.setTarget(this.target).calc() - .getAction(); - } - return this; - case ACTION_AUTONOMY: - if (this.target == null) { - return this; - } - StandardEntity targetEntity = this.worldInfo.getEntity(this.target); - if (targetEntity instanceof Area) { - if (this.agentInfo.someoneOnBoard() == null) { - this.result = this.actionExtMove.setTarget(this.target).calc() - .getAction(); - } else { - this.result = this.actionTransport.setTarget(this.target).calc() - .getAction(); - } - } else if (targetEntity instanceof Human) { - this.result = this.actionTransport.setTarget(this.target).calc() - .getAction(); - } - } - return this; - } - - - private boolean isCommandCompleted() { - Human agent = (Human) this.agentInfo.me(); - switch (this.commandType) { - case ACTION_REST: - if (this.target == null) { - return (agent.getDamage() == 0); - } - if (Objects.requireNonNull(this.worldInfo.getEntity(this.target)) - .getStandardURN() == REFUGE) { - if (agent.getPosition().getValue() == this.target.getValue()) { - return (agent.getDamage() == 0); - } - } - return false; - case ACTION_MOVE: - return this.target == null || this.agentInfo.getPosition() - .getValue() == this.target.getValue(); - case ACTION_RESCUE: - if (this.target == null) { - return true; - } - Human human = (Human) Objects - .requireNonNull(this.worldInfo.getEntity(this.target)); - return human.isBuriednessDefined() && human.getBuriedness() == 0 - || (human.isHPDefined() && human.getHP() == 0); - case ACTION_LOAD: - if (this.target == null) { - return true; - } - Human human1 = (Human) Objects - .requireNonNull(this.worldInfo.getEntity(this.target)); - if ((human1.isHPDefined() && human1.getHP() == 0)) { - return true; - } - if (human1.getStandardURN() != CIVILIAN) { - this.commandType = ACTION_RESCUE; - return this.isCommandCompleted(); - } - if (human1.isPositionDefined()) { - EntityID position = human1.getPosition(); - if (this.worldInfo.getEntityIDsOfType(AMBULANCE_TEAM) - .contains(position)) { - return true; - } else if (this.worldInfo.getEntity(position) - .getStandardURN() == REFUGE) { - return true; - } - } - return false; - case ACTION_UNLOAD: - if (this.target != null) { - StandardEntity entity = this.worldInfo.getEntity(this.target); - if (entity != null && entity instanceof Area) { - if (this.target.getValue() != this.agentInfo.getPosition() - .getValue()) { - return false; - } - } - } - return (this.agentInfo.someoneOnBoard() == null); - case ACTION_AUTONOMY: - if (this.target != null) { - StandardEntity targetEntity = this.worldInfo.getEntity(this.target); - if (targetEntity instanceof Area) { - this.commandType = this.agentInfo.someoneOnBoard() == null - ? ACTION_MOVE - : ACTION_UNLOAD; - return this.isCommandCompleted(); - } else if (targetEntity instanceof Human) { - Human h = (Human) targetEntity; - if ((h.isHPDefined() && h.getHP() == 0)) { - return true; - } - this.commandType = h.getStandardURN() == CIVILIAN ? ACTION_LOAD - : ACTION_RESCUE; - return this.isCommandCompleted(); - } - } - return true; - } - return true; - } -} \ No newline at end of file diff --git a/src/main/java/autumn_2023/centralized/CentralizedControlCommandPickerA.java b/src/main/java/autumn_2023/centralized/CentralizedControlCommandPickerA.java deleted file mode 100644 index 66b9cc0..0000000 --- a/src/main/java/autumn_2023/centralized/CentralizedControlCommandPickerA.java +++ /dev/null @@ -1,80 +0,0 @@ -package autumn_2023.centralized; - -import adf.core.agent.communication.standard.bundle.centralized.CommandAmbulance; -import adf.core.agent.communication.standard.bundle.centralized.CommandScout; -import adf.core.agent.develop.DevelopData; -import adf.core.agent.info.AgentInfo; -import adf.core.agent.info.ScenarioInfo; -import adf.core.agent.info.WorldInfo; -import adf.core.agent.module.ModuleManager; -import adf.core.component.centralized.CommandPicker; -import adf.core.component.communication.CommunicationMessage; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Map; -import rescuecore2.standard.entities.Area; -import rescuecore2.standard.entities.Human; -import rescuecore2.standard.entities.StandardEntity; -import rescuecore2.standard.entities.StandardEntityURN; -import rescuecore2.worldmodel.EntityID; - -public class CentralizedControlCommandPickerA extends CommandPicker { - - private int scoutDistance; - - private Collection messages; - private Map allocationData; - - public CentralizedControlCommandPickerA(AgentInfo ai, WorldInfo wi, ScenarioInfo si, ModuleManager moduleManager, DevelopData developData) { - super(ai, wi, si, moduleManager, developData); - this.messages = new ArrayList<>(); - this.allocationData = null; - this.scoutDistance = developData.getInteger( - "adf.impl.centralized.DefaultCommandPickerAmbulance.scoutDistance", - 40000); - } - - - @Override - public CommandPicker - setAllocatorResult(Map allocationData) { - this.allocationData = allocationData; - return this; - } - - - @Override - public CommandPicker calc() { - //System.out.println("time:"+this.agentInfo.getTime()+" id:"+this.agentInfo.getID()+" picker"); - this.messages.clear(); - if (this.allocationData == null) { - return this; - } - for (EntityID agentID : this.allocationData.keySet()) { - StandardEntity agent = this.worldInfo.getEntity(agentID); - if (agent != null - && agent.getStandardURN() == StandardEntityURN.AMBULANCE_TEAM) { - StandardEntity target = this.worldInfo - .getEntity(this.allocationData.get(agentID)); - if (target != null) { - if (target instanceof Human) { - CommandAmbulance command = new CommandAmbulance(true, agentID, - target.getID(), CommandAmbulance.ACTION_AUTONOMY); - this.messages.add(command); - } else if (target instanceof Area) { - CommandScout command = new CommandScout(true, agentID, - target.getID(), this.scoutDistance); - this.messages.add(command); - } - } - } - } - return this; - } - - - @Override - public Collection getResult() { - return this.messages; - } -} \ No newline at end of file diff --git a/src/main/java/autumn_2023/module/comm/DefaultChannelSubscriber.java b/src/main/java/autumn_2023/module/comm/DefaultChannelSubscriber.java deleted file mode 100644 index c5de79e..0000000 --- a/src/main/java/autumn_2023/module/comm/DefaultChannelSubscriber.java +++ /dev/null @@ -1,100 +0,0 @@ -package autumn_2023.module.comm; - -import adf.core.agent.communication.MessageManager; -import adf.core.agent.info.AgentInfo; -import adf.core.agent.info.ScenarioInfo; -import adf.core.agent.info.WorldInfo; -import adf.core.component.communication.ChannelSubscriber; -import rescuecore2.standard.entities.StandardEntityURN; - -public class DefaultChannelSubscriber extends ChannelSubscriber { - - @Override - public void subscribe(AgentInfo agentInfo, WorldInfo worldInfo, - ScenarioInfo scenarioInfo, MessageManager messageManager) { - // subscribe only once at the beginning - if (agentInfo.getTime() == 1) { - int numChannels = scenarioInfo.getCommsChannelsCount() - 1; // 0th channel - // is the - // voice - // channel - - int maxChannelCount = 0; - boolean isPlatoon = isPlatoonAgent(agentInfo, worldInfo); - if (isPlatoon) { - maxChannelCount = scenarioInfo.getCommsChannelsMaxPlatoon(); - } else { - maxChannelCount = scenarioInfo.getCommsChannelsMaxOffice(); - } - - StandardEntityURN agentType = getAgentType(agentInfo, worldInfo); - int[] channels = new int[maxChannelCount]; - for (int i = 0; i < maxChannelCount; i++) { - channels[i] = getChannelNumber(agentType, i, numChannels); - } - - messageManager.subscribeToChannels(channels); - } - } - - - protected boolean isPlatoonAgent(AgentInfo agentInfo, WorldInfo worldInfo) { - StandardEntityURN agentType = getAgentType(agentInfo, worldInfo); - if (agentType == StandardEntityURN.FIRE_BRIGADE - || agentType == StandardEntityURN.POLICE_FORCE - || agentType == StandardEntityURN.AMBULANCE_TEAM) { - return true; - } - return false; - } - - - protected StandardEntityURN getAgentType(AgentInfo agentInfo, - WorldInfo worldInfo) { - StandardEntityURN agentType = worldInfo.getEntity(agentInfo.getID()) - .getStandardURN(); - return agentType; - } - - - public static int getChannelNumber(StandardEntityURN agentType, - int channelIndex, int numChannels) { - int agentIndex = 0; - if (agentType == StandardEntityURN.FIRE_BRIGADE - || agentType == StandardEntityURN.FIRE_STATION) { - agentIndex = 1; - } else if (agentType == StandardEntityURN.POLICE_FORCE - || agentType == StandardEntityURN.POLICE_OFFICE) { - agentIndex = 2; - } else if (agentType == StandardEntityURN.AMBULANCE_TEAM - || agentType == StandardEntityURN.AMBULANCE_CENTRE) { - agentIndex = 3; - } - - int index = (3 * channelIndex) + agentIndex; - if ((index % numChannels) == 0) { - index = numChannels; - } else { - index = index % numChannels; - } - return index; - } - - - public static void main(String[] args) { - int numChannels = 6; - int maxChannels = 2; - for (int i = 0; i < maxChannels; i++) { - System.out.println("FIREBRIGADE-" + i + ":" - + getChannelNumber(StandardEntityURN.FIRE_BRIGADE, i, numChannels)); - } - for (int i = 0; i < maxChannels; i++) { - System.out.println("POLICE-" + i + ":" - + getChannelNumber(StandardEntityURN.POLICE_OFFICE, i, numChannels)); - } - for (int i = 0; i < maxChannels; i++) { - System.out.println("AMB-" + i + ":" + getChannelNumber( - StandardEntityURN.AMBULANCE_CENTRE, i, numChannels)); - } - } -} \ No newline at end of file diff --git a/src/main/java/autumn_2023/module/complex/CentralizedControlATAllocator.java b/src/main/java/autumn_2023/module/complex/CentralizedControlATAllocator.java deleted file mode 100755 index 3ef3a29..0000000 --- a/src/main/java/autumn_2023/module/complex/CentralizedControlATAllocator.java +++ /dev/null @@ -1,371 +0,0 @@ -package autumn_2023.module.complex; - -import static rescuecore2.standard.entities.StandardEntityURN.REFUGE; -import adf.core.agent.communication.MessageManager; -import adf.core.agent.communication.standard.bundle.MessageUtil; -import adf.core.agent.communication.standard.bundle.centralized.CommandAmbulance; -import adf.core.agent.communication.standard.bundle.centralized.MessageReport; -import adf.core.agent.communication.standard.bundle.information.MessageAmbulanceTeam; -import adf.core.agent.communication.standard.bundle.information.MessageCivilian; -import adf.core.agent.communication.standard.bundle.information.MessageFireBrigade; -import adf.core.agent.communication.standard.bundle.information.MessagePoliceForce; -import adf.core.agent.develop.DevelopData; -import adf.core.agent.info.AgentInfo; -import adf.core.agent.info.ScenarioInfo; -import adf.core.agent.info.WorldInfo; -import adf.core.agent.module.ModuleManager; -import adf.core.agent.precompute.PrecomputeData; -import adf.core.component.communication.CommunicationMessage; -import adf.core.component.module.complex.AmbulanceTargetAllocator; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import rescuecore2.standard.entities.AmbulanceTeam; -import rescuecore2.standard.entities.Area; -import rescuecore2.standard.entities.Human; -import rescuecore2.standard.entities.StandardEntity; -import rescuecore2.standard.entities.StandardEntityURN; -import rescuecore2.worldmodel.EntityID; - -public class CentralizedControlATAllocator extends AmbulanceTargetAllocator { - - private Collection priorityHumans; - private Collection targetHumans; - - private Map ambulanceTeamInfoMap; - - public CentralizedControlATAllocator(AgentInfo ai, WorldInfo wi, ScenarioInfo si, ModuleManager moduleManager, DevelopData developData) { - super(ai, wi, si, moduleManager, developData); - this.priorityHumans = new HashSet<>(); - this.targetHumans = new HashSet<>(); - this.ambulanceTeamInfoMap = new HashMap<>(); - } - - - @Override - public AmbulanceTargetAllocator resume(PrecomputeData precomputeData) { - super.resume(precomputeData); - if (this.getCountResume() >= 2) { - return this; - } - for (EntityID id : this.worldInfo - .getEntityIDsOfType(StandardEntityURN.AMBULANCE_TEAM)) { - this.ambulanceTeamInfoMap.put(id, new AmbulanceTeamInfo(id)); - } - return this; - } - - - @Override - public AmbulanceTargetAllocator preparate() { - super.preparate(); - if (this.getCountPrecompute() >= 2) { - return this; - } - for (EntityID id : this.worldInfo - .getEntityIDsOfType(StandardEntityURN.AMBULANCE_TEAM)) { - this.ambulanceTeamInfoMap.put(id, new AmbulanceTeamInfo(id)); - } - return this; - } - - - @Override - public Map getResult() { - return this.convert(this.ambulanceTeamInfoMap); - } - - - @Override - public AmbulanceTargetAllocator calc() { - //System.out.println("time:"+this.agentInfo.getTime()+" id:"+this.agentInfo.getID()+" allocator"); - List agents = this - .getActionAgents(this.ambulanceTeamInfoMap); - Collection removes = new ArrayList<>(); - int currentTime = this.agentInfo.getTime(); - for (EntityID target : this.priorityHumans) { - if (agents.size() > 0) { - StandardEntity targetEntity = this.worldInfo.getEntity(target); - if (targetEntity != null && targetEntity instanceof Human - && ((Human) targetEntity).isPositionDefined()) { - agents.sort(new DistanceSorter(this.worldInfo, targetEntity)); - StandardEntity result = agents.get(0); - agents.remove(0); - AmbulanceTeamInfo info = this.ambulanceTeamInfoMap - .get(result.getID()); - if (info != null) { - info.canNewAction = false; - info.target = target; - info.commandTime = currentTime; - this.ambulanceTeamInfoMap.put(result.getID(), info); - removes.add(target); - } - } - } - } - this.priorityHumans.removeAll(removes); - removes.clear(); - for (EntityID target : this.targetHumans) { - if (agents.size() > 0) { - StandardEntity targetEntity = this.worldInfo.getEntity(target); - if (targetEntity != null && targetEntity instanceof Human - && ((Human) targetEntity).isPositionDefined()) { - agents.sort(new DistanceSorter(this.worldInfo, targetEntity)); - StandardEntity result = agents.get(0); - agents.remove(0); - AmbulanceTeamInfo info = this.ambulanceTeamInfoMap - .get(result.getID()); - if (info != null) { - info.canNewAction = false; - info.target = target; - info.commandTime = currentTime; - this.ambulanceTeamInfoMap.put(result.getID(), info); - removes.add(target); - } - } - } - } - this.targetHumans.removeAll(removes); - return this; - } - - - @Override - public AmbulanceTargetAllocator updateInfo(MessageManager messageManager) { - super.updateInfo(messageManager); - if (this.getCountUpdateInfo() >= 2) { - return this; - } - int currentTime = this.agentInfo.getTime(); - for (CommunicationMessage message : messageManager - .getReceivedMessageList()) { - Class messageClass = message.getClass(); - if (messageClass == MessageCivilian.class) { - MessageCivilian mc = (MessageCivilian) message; - MessageUtil.reflectMessage(this.worldInfo, mc); - if (mc.isBuriednessDefined() && mc.getBuriedness() > 0) { - this.targetHumans.add(mc.getAgentID()); - } else { - this.priorityHumans.remove(mc.getAgentID()); - this.targetHumans.remove(mc.getAgentID()); - } - } else if (messageClass == MessageFireBrigade.class) { - MessageFireBrigade mfb = (MessageFireBrigade) message; - MessageUtil.reflectMessage(this.worldInfo, mfb); - if (mfb.isBuriednessDefined() && mfb.getBuriedness() > 0) { - this.priorityHumans.add(mfb.getAgentID()); - } else { - this.priorityHumans.remove(mfb.getAgentID()); - this.targetHumans.remove(mfb.getAgentID()); - } - } else if (messageClass == MessagePoliceForce.class) { - MessagePoliceForce mpf = (MessagePoliceForce) message; - MessageUtil.reflectMessage(this.worldInfo, mpf); - if (mpf.isBuriednessDefined() && mpf.getBuriedness() > 0) { - this.priorityHumans.add(mpf.getAgentID()); - } else { - this.priorityHumans.remove(mpf.getAgentID()); - this.targetHumans.remove(mpf.getAgentID()); - } - } - } - for (CommunicationMessage message : messageManager - .getReceivedMessageList(MessageAmbulanceTeam.class)) { - MessageAmbulanceTeam mat = (MessageAmbulanceTeam) message; - MessageUtil.reflectMessage(this.worldInfo, mat); - if (mat.isBuriednessDefined() && mat.getBuriedness() > 0) { - this.priorityHumans.add(mat.getAgentID()); - } else { - this.priorityHumans.remove(mat.getAgentID()); - this.targetHumans.remove(mat.getAgentID()); - } - AmbulanceTeamInfo info = this.ambulanceTeamInfoMap.get(mat.getAgentID()); - if (info == null) { - info = new AmbulanceTeamInfo(mat.getAgentID()); - } - if (currentTime >= info.commandTime + 2) { - this.ambulanceTeamInfoMap.put(mat.getAgentID(), this.update(info, mat)); - } - } - for (CommunicationMessage message : messageManager - .getReceivedMessageList(CommandAmbulance.class)) { - CommandAmbulance command = (CommandAmbulance) message; - if (command.getAction() == CommandAmbulance.ACTION_RESCUE - && command.isBroadcast()) { - this.priorityHumans.add(command.getTargetID()); - this.targetHumans.add(command.getTargetID()); - } else if (command.getAction() == CommandAmbulance.ACTION_LOAD - && command.isBroadcast()) { - this.priorityHumans.add(command.getTargetID()); - this.targetHumans.add(command.getTargetID()); - } - } - for (CommunicationMessage message : messageManager - .getReceivedMessageList(MessageReport.class)) { - MessageReport report = (MessageReport) message; - AmbulanceTeamInfo info = this.ambulanceTeamInfoMap - .get(report.getSenderID()); - if (info != null && report.isDone()) { - info.canNewAction = true; - this.priorityHumans.remove(info.target); - this.targetHumans.remove(info.target); - info.target = null; - this.ambulanceTeamInfoMap.put(info.agentID, info); - } - } - return this; - } - - - private Map - convert(Map map) { - Map result = new HashMap<>(); - for (EntityID id : map.keySet()) { - AmbulanceTeamInfo info = map.get(id); - if (info != null && info.target != null) { - result.put(id, info.target); - } - } - return result; - } - - - private List - getActionAgents(Map map) { - List result = new ArrayList<>(); - for (StandardEntity entity : this.worldInfo - .getEntitiesOfType(StandardEntityURN.POLICE_FORCE)) { - AmbulanceTeamInfo info = map.get(entity.getID()); - if (info != null && info.canNewAction - && ((AmbulanceTeam) entity).isPositionDefined()) { - result.add(entity); - } - } - return result; - } - - - private AmbulanceTeamInfo update(AmbulanceTeamInfo info, - MessageAmbulanceTeam message) { - if (message.isBuriednessDefined() && message.getBuriedness() > 0) { - info.canNewAction = false; - if (info.target != null) { - this.targetHumans.add(info.target); - info.target = null; - } - return info; - } - if (message.getAction() == MessageAmbulanceTeam.ACTION_REST) { - info.canNewAction = true; - if (info.target != null) { - this.targetHumans.add(info.target); - info.target = null; - } - } else if (message.getAction() == MessageAmbulanceTeam.ACTION_MOVE) { - if (message.getTargetID() != null) { - StandardEntity entity = this.worldInfo.getEntity(message.getTargetID()); - if (entity != null) { - if (entity instanceof Area) { - if (entity.getStandardURN() == REFUGE) { - info.canNewAction = false; - return info; - } - StandardEntity targetEntity = this.worldInfo.getEntity(info.target); - if (targetEntity != null) { - if (targetEntity instanceof Human) { - targetEntity = this.worldInfo.getPosition((Human) targetEntity); - if (targetEntity == null) { - this.priorityHumans.remove(info.target); - this.targetHumans.remove(info.target); - info.canNewAction = true; - info.target = null; - return info; - } - } - if (targetEntity.getID().getValue() == entity.getID() - .getValue()) { - info.canNewAction = false; - } else { - info.canNewAction = true; - if (info.target != null) { - this.targetHumans.add(info.target); - info.target = null; - } - } - } else { - info.canNewAction = true; - info.target = null; - } - return info; - } else if (entity instanceof Human) { - if (entity.getID().getValue() == info.target.getValue()) { - info.canNewAction = false; - } else { - info.canNewAction = true; - this.targetHumans.add(info.target); - this.targetHumans.add(entity.getID()); - info.target = null; - } - return info; - } - } - } - info.canNewAction = true; - if (info.target != null) { - this.targetHumans.add(info.target); - info.target = null; - } - } else if (message.getAction() == MessageAmbulanceTeam.ACTION_RESCUE) { - info.canNewAction = true; - if (info.target != null) { - this.targetHumans.add(info.target); - info.target = null; - } - } else if (message.getAction() == MessageAmbulanceTeam.ACTION_LOAD) { - info.canNewAction = false; - } else if (message.getAction() == MessageAmbulanceTeam.ACTION_UNLOAD) { - info.canNewAction = true; - this.priorityHumans.remove(info.target); - this.targetHumans.remove(info.target); - info.target = null; - } - return info; - } - - private class AmbulanceTeamInfo { - - EntityID agentID; - EntityID target; - boolean canNewAction; - int commandTime; - - AmbulanceTeamInfo(EntityID id) { - agentID = id; - target = null; - canNewAction = true; - commandTime = -1; - } - } - - private class DistanceSorter implements Comparator { - - private StandardEntity reference; - private WorldInfo worldInfo; - - DistanceSorter(WorldInfo wi, StandardEntity reference) { - this.reference = reference; - this.worldInfo = wi; - } - - - public int compare(StandardEntity a, StandardEntity b) { - int d1 = this.worldInfo.getDistance(this.reference, a); - int d2 = this.worldInfo.getDistance(this.reference, b); - return d1 - d2; - } - } -} \ No newline at end of file -- GitLab