package iamrescue.routing.costs;
import iamrescue.belief.IAMWorldModel;
import iamrescue.routing.util.ISpeedInfo;
import iamrescue.util.PositionXY;
import rescuecore2.config.Config;
import rescuecore2.standard.entities.Area;
import rescuecore2.worldmodel.EntityID;
public class ClearingAndMovingRoutingFunction extends
AbstractRoutingCostFunction {
public static final int DEFAULT_MM_PER_TIME_STEP = 60000;
private SimpleDistanceRoutingCostFunction moveCostFunction;
private ClearingCostFunction repairCostFunction;
private int mmPerTimeStep = DEFAULT_MM_PER_TIME_STEP;
public ClearingAndMovingRoutingFunction(IAMWorldModel worldModel,
Config config, ISpeedInfo speedInfo) {
this.moveCostFunction = new SimpleTimeLearningRoutingCostFunction(
worldModel, speedInfo, true);
// this.move
this.repairCostFunction = new ClearingCostFunction(worldModel, config);
this.moveCostFunction.setBurningPenalty(5000000);
mmPerTimeStep = 1;
}
public ClearingAndMovingRoutingFunction(IAMWorldModel worldModel,
Config config) {
this.moveCostFunction = new SimpleDistanceRoutingCostFunction(
worldModel);
// this.move
this.repairCostFunction = new ClearingCostFunction(worldModel, config);
this.moveCostFunction.setBurningPenalty(5000000);
}
@Override
public double getTravelCost(Area area, PositionXY from, PositionXY to) {
double moveCost = moveCostFunction.getTravelCost(area, from, to)
/ mmPerTimeStep;
double repairCost = repairCostFunction.getTravelCost(area, from, to);
return moveCost + repairCost;
}
public void addIgnored(EntityID id) {
repairCostFunction.addIgnored(id);
}
public void removeIgnored(EntityID id) {
repairCostFunction.removeIgnored(id);
}
public void addAlreadyClearing(EntityID id) {
repairCostFunction.addAlreadyClearing(id);
}
public void setAlreadyClearing(EntityID id, int already) {
repairCostFunction.setAlreadyClearing(id, already);
}
public int getAlreadyClearing(EntityID id) {
return repairCostFunction.getAlreadyClearing(id);
}
public void clearIgnored() {
repairCostFunction.clearIgnored();
}
}