package sim.app.geo.haiti; import sim.engine.SimState; import sim.engine.Steppable; import sim.field.grid.IntGrid2D; import sim.util.Bag; public class Center implements Steppable { private static final long serialVersionUID = 1L; public static int ENERGY_FROM_FOOD = 1000; Location loc; public int foodLevel; int foodIncrement = 1; IntGrid2D gradient; public Center(int x, int y, int foodLevel) { loc = new Location(x, y); this.foodLevel = foodLevel; } public Center(int x, int y, int foodLevel, int energy) { loc = new Location(x, y); this.foodLevel = foodLevel; ENERGY_FROM_FOOD = energy; } @Override public void step(SimState state) { if (foodLevel <= 0) { return; // if there's no food, don't bother with anything else } HaitiFood world = (HaitiFood) state; Bag peopleInCenter = world.population.getObjectsAtLocation(loc.x, loc.y); if (peopleInCenter == null || peopleInCenter.size() == 0) { return; } // distribute food to people in center for (Object o : peopleInCenter) { Agent a = (Agent) o; if (!a.hasFood) { // give hungry agents food // give it the food a.hasFood = true; a.energyLevel += ENERGY_FROM_FOOD; // update Center's info about its own food reserves foodLevel -= foodIncrement; if (foodLevel <= 0) { return; // have we run out of food? } } } } public int getFoodLevel() { return foodLevel; } public void setFoodLevel(int fl) { foodLevel = fl; } }