/**
*
*/
package iamrescue.belief.commupdates;
import iamrescue.belief.IAMWorldModel;
import iamrescue.communication.messages.CivilianCryForHelpMessage;
import iamrescue.communication.messages.Message;
import java.util.Collection;
import java.util.Iterator;
import org.apache.log4j.Logger;
import rescuecore2.config.Config;
import rescuecore2.standard.entities.StandardEntity;
import rescuecore2.standard.entities.StandardEntityURN;
import rescuecore2.worldmodel.EntityID;
/**
* @author Simon
*
*/
public class CivilianCryForHelpHandler implements IMessageHandler {
private static final String DISTANCE_KEY = "comms.channels.0.range";
private static final Logger LOGGER = Logger
.getLogger(CivilianCryForHelpHandler.class);
private IAMWorldModel worldModel;
private EntityID myID;
private int range;
// private ISpatialIndex spatial;
public CivilianCryForHelpHandler(IAMWorldModel worldModel, Config config,
EntityID myID) {
this.worldModel = worldModel;
range = config.getIntValue(DISTANCE_KEY, 30000);
this.myID = myID;
}
@Override
public boolean canHandle(Message message) {
return (message instanceof CivilianCryForHelpMessage);
}
@Override
public boolean handleMessage(Message message) {
CivilianCryForHelpMessage civMsg = (CivilianCryForHelpMessage) message;
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Updating search list with " + civMsg);
}
EntityID civ = civMsg.getSenderAgentID();
// first check if we know about this civilian already
Collection<StandardEntity> civs = worldModel
.getEntitiesOfType(StandardEntityURN.CIVILIAN);
for (Iterator<StandardEntity> it = civs.iterator(); it.hasNext();) {
if (it.next().getID().getValue() == civ.getValue()) {
civMsg.markAsRead();
return true;
}
}
// is a new civilian so need to add a set of high priority buildings to
// search
Collection<StandardEntity> buildings = worldModel.getObjectsInRange(
myID, range);
worldModel.updateHighPriorityBuildings(buildings);
civMsg.markAsRead();
return true;
}
}