package gis2.scenario; import java.awt.Graphics2D; import java.util.Map; import maps.gml.view.Overlay; import maps.gml.GMLShape; import rescuecore2.misc.gui.ScreenTransform; import rescuecore2.misc.collections.LazyMap; /** Overlay for viewing agents in a scenario. */ public class AgentOverlay implements Overlay { private static final int CIV_OFFSET = 0; private static final int FB_OFFSET = 10; private static final int PF_OFFSET = 20; private static final int AT_OFFSET = 30; private ScenarioEditor editor; /** Construct an AgentOverlay. @param editor The scenario editor. */ public AgentOverlay(ScenarioEditor editor) { this.editor = editor; } @Override public void render(Graphics2D g, ScreenTransform transform) { // Count agents in each location Map<Integer, Integer> civs = new LazyMap<Integer, Integer>() { @Override public Integer createValue() { return 0; } }; Map<Integer, Integer> fbs = new LazyMap<Integer, Integer>() { @Override public Integer createValue() { return 0; } }; Map<Integer, Integer> pfs = new LazyMap<Integer, Integer>() { @Override public Integer createValue() { return 0; } }; Map<Integer, Integer> ats = new LazyMap<Integer, Integer>() { @Override public Integer createValue() { return 0; } }; for (int next : editor.getScenario().getCivilians()) { civs.put(next, civs.get(next) + 1); } for (int next : editor.getScenario().getFireBrigades()) { fbs.put(next, fbs.get(next) + 1); } for (int next : editor.getScenario().getPoliceForces()) { pfs.put(next, pfs.get(next) + 1); } for (int next : editor.getScenario().getAmbulanceTeams()) { ats.put(next, ats.get(next) + 1); } // Now draw them for (Map.Entry<Integer, Integer> next : civs.entrySet()) { GMLShape shape = editor.getMap().getShape(next.getKey()); int count = next.getValue(); int x = transform.xToScreen(shape.getCentreX()); int y = transform.yToScreen(shape.getCentreY()) + CIV_OFFSET; g.drawString(count + " civs", x, y); } for (Map.Entry<Integer, Integer> next : fbs.entrySet()) { GMLShape shape = editor.getMap().getShape(next.getKey()); int count = next.getValue(); int x = transform.xToScreen(shape.getCentreX()); int y = transform.yToScreen(shape.getCentreY()) + FB_OFFSET; g.drawString(count + " fbs", x, y); } for (Map.Entry<Integer, Integer> next : pfs.entrySet()) { GMLShape shape = editor.getMap().getShape(next.getKey()); int count = next.getValue(); int x = transform.xToScreen(shape.getCentreX()); int y = transform.yToScreen(shape.getCentreY()) + PF_OFFSET; g.drawString(count + " pfs", x, y); } for (Map.Entry<Integer, Integer> next : ats.entrySet()) { GMLShape shape = editor.getMap().getShape(next.getKey()); int count = next.getValue(); int x = transform.xToScreen(shape.getCentreX()); int y = transform.yToScreen(shape.getCentreY()) + AT_OFFSET; g.drawString(count + " ats", x, y); } } }