📄 heardata.java
字号:
package MRL.Utilities;
import yab.agent.*;
import yab.agent.object.*;
import java.util.*;
import MRL.Utilities.Partitioning.*;
public class HearData {
private final DisasterSpace world;
public HearData(DisasterSpace world){
this.world = world;
}
public final Map<MotionlessObject , List[] > selfPosHearedCivilianTimeMap = new HashMap<MotionlessObject , List[] > ();
public final Map<MotionlessObject , List[] > messagePosHearedCivilianTimeMap = new HashMap<MotionlessObject , List[] > ();
public final Set<Civilian> inRefugeCivilians = new HashSet<Civilian>();
public final Set<Civilian> foundCivilians = new HashSet<Civilian>();
public final Set<Civilian> underSearchCivilians = new HashSet<Civilian>();
public final Map <Integer , List[]> timeHearedCivilianPosMap = new HashMap
<Integer , List []> ();
public void initMLO(MotionlessObject mo){
List [] hearedCivilianTimeMap = new ArrayList [2];
List hearedCivilian = new ArrayList();
List hearedCivilianTimes = new ArrayList();
hearedCivilianTimeMap[0] = hearedCivilian;
hearedCivilianTimeMap[1] = hearedCivilianTimes;
selfPosHearedCivilianTimeMap.put(mo,hearedCivilianTimeMap);
hearedCivilianTimeMap = new ArrayList [2];
hearedCivilian = new ArrayList();
hearedCivilianTimes = new ArrayList();
hearedCivilianTimeMap[0] = hearedCivilian;
hearedCivilianTimeMap[1] = hearedCivilianTimes;
messagePosHearedCivilianTimeMap.put(mo,hearedCivilianTimeMap);
}
private int time(){
return world.time();
}
private Humanoid self(){
return (Humanoid) world.self;
}
public void addHearedCivilian (Civilian civ , MotionlessObject mo , int posExtra, int time , boolean selfHeared){
List[] hearedCiviliansIC = timeHearedCivilianPosMap.get(time);
if(hearedCiviliansIC == null){
hearedCiviliansIC = new ArrayList[2];
hearedCiviliansIC[0] = new ArrayList();
hearedCiviliansIC[1] = new ArrayList();
timeHearedCivilianPosMap.put(time , hearedCiviliansIC);
}
hearedCiviliansIC[0].add(civ);
hearedCiviliansIC[1].add(mo);
if(civ.position() != null) return;
civ.setLastHearedTime(time);
underSearchCivilians.add(civ);
if(!selfPosHearedCivilianTimeMap.containsKey(mo))
initMLO(mo);
List [] hearedCivilianTimeMap;
if(selfHeared){
hearedCivilianTimeMap = selfPosHearedCivilianTimeMap.get(mo);
int x = self().x();
int y = self().y();
civ.addHearedPosition(mo,x,y,true);
}
else{
hearedCivilianTimeMap = messagePosHearedCivilianTimeMap.get(mo);
int x,y;
if(mo instanceof Road){
Road rd = (Road) mo;
x = rd.head().x() +( posExtra/rd.length() )* (rd.tail().x() - rd.head().x());
y =rd.head().y() +( posExtra/rd.length() )* (rd.tail().y() - rd.head().y());
}else{
x = mo.x();
y= mo.y();
}
civ.addHearedPosition(mo,x,y,false);
}
if(! hearedCivilianTimeMap[0].contains(civ)){
hearedCivilianTimeMap[0].add(civ);
hearedCivilianTimeMap[1].add(time);
}
else{
int lastIndx= hearedCivilianTimeMap[0].lastIndexOf(civ);
int lastTime = ((Integer)hearedCivilianTimeMap[1].get(lastIndx)).intValue();
if(lastTime != time){
hearedCivilianTimeMap[0].add(civ);
hearedCivilianTimeMap[1].add(time);
}
}
}
public void updateHumStats(){
Civilian civ;
for(Iterator it = underSearchCivilians.iterator();it.hasNext();){
civ = (Civilian) it.next();
if(civ.position() != null){
foundCivilians.add(civ);
if(civ.motionlessPosition() instanceof Refuge)
inRefugeCivilians.add(civ);
it.remove();
}
}
}
// public Collection updateNeedChecks(){
// int time = time();
// int lTimeCheck = time -1;
// MotionlessObject lastPos = self().getMotionlessPosition(lTimeCheck);
//
// Collection res = new HashSet();
// if(timeHearedCivilianPosMap.containsKey(lTimeCheck)){
//
// }
// else{
//// Collection tmp = world.getPossibleHearedBuildings(lastPos,true);
// int spx =self().getSelfX(lTimeCheck);
// int spy = self().getSelfY(lTimeCheck);
// Collection tmp = world.getPossibleHearedBuildings( spx, spy , Civilian.SEARCH_DIST );
// res.addAll(tmp);
// System.out.println(self() + " , LastMP : " + lastPos + " , Deleting : " + res + " In Time : " + time);
// }
// return res;
// }
public static final int POSS_NEAR_CIV_TIME_SEARCH_DEPTH = 5;
public boolean isNearPosCivilians(MotionlessObject mo){
List civPosMap[] , civs , poses;
for(int i = time() ; i > time() - POSS_NEAR_CIV_TIME_SEARCH_DEPTH ; i --){
civPosMap = timeHearedCivilianPosMap.get(i);
if(civPosMap == null) continue;
civs = civPosMap[0];
poses= civPosMap[1];
if(poses.contains(mo)) return true;
}
return false;
}
public int getPossibleNearCiviliansCount(Path path){
Civilian civ;
int res = 0;
for(Iterator it = underSearchCivilians.iterator();it.hasNext();){
civ = (Civilian)it.next();
if(Utils.getConditionCount(civ.possibleBuildings , path.IS_CONTAINING_C)>0)
res ++ ;
}
return res;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -