// Draws the minimap public void draw() { // A new image is created for the minimap, drawn onto, and the applied as the Actor's image // Drawing of the minimap is done this way so that there won't be any artifacting when draw() is // called by a thread other than the main thread GreenfootImage image = new GreenfootImage(FRAME.width, FRAME.height); image.setTransparency(150); // Get map ArrayList<ArrayList<Tile>> map = Data.tiles(); // Position of the minimap tile being drawn int x = 0; int y = 0; // Iterate through every map tile and draw it onto minimap, adjusting the position for the next // tile with each iteration // Minimap is drawn column by column for (int i = 0; i < Map.getInstance().SIZE_COLUMNS; i++) { for (int j = 0; j < Map.getInstance().SIZE_ROWS; j++) { Tile tile = (Tile) map.get(i).get(j); // Get the color to draw based on either the tile's type or zone (if zoned) if (tile.zone() > 0) { image.setColor(colorForTileOfZone(tile.zone())); } else { image.setColor(colorForTileOfType(tile.type())); } image.fillRect(x, y, tileSize, tileSize); // Minimap tiles are 2px * 2px y += tileSize; } // Reset Y to top of the column y = 0; x += tileSize; } setImage(image); }
@Subscribe public void listen(MenuItemEvent event) { CSLogger.sharedLogger().finer("\"" + event.message() + "\" was selected."); // * ZONING * if (event.message() == ResidentialZone.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setUnacceptedTypes(new int[] {Tile.WATER}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance() .selection() .setSize(ResidentialZone.SIZE_WIDTH, ResidentialZone.SIZE_HEIGHT); Zone.setPendingOp(ResidentialZone.TYPE_ID); City.getInstance() .setHint( new Hint("Select the areas you wish to zone as residential. Press 'ESC' when done.")); } else if (event.message() == IndustrialZone.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(IndustrialZone.SIZE_WIDTH, IndustrialZone.SIZE_HEIGHT); Zone.setPendingOp(IndustrialZone.TYPE_ID); City.getInstance() .setHint( new Hint("Select the areas you wish to zone as industrial. Press 'ESC' when done.")); } else if (event.message() == CommercialZone.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(CommercialZone.SIZE_WIDTH, CommercialZone.SIZE_HEIGHT); Zone.setPendingOp(CommercialZone.TYPE_ID); City.getInstance() .setHint( new Hint("Select the areas you wish to zone as commercial. Press 'ESC' when done.")); } // * TRANSPORTATION * else if (event.message() == Street.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance() .selection() .setAcceptedTypes( new int[] {Tile.GROUND, Tile.POWERLINE_H, Tile.POWERLINE_V, Tile.WATER}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(Street.SIZE_WIDTH, Street.SIZE_HEIGHT); Road.setPendingOp(Street.TYPE_ID); City.getInstance() .setHint( new Hint("Click on the areas you wish to build a road on. Press 'ESC' when done.")); } // * POWER * else if (event.message() == PowerLine.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance() .selection() .setAcceptedTypes(new int[] {Tile.GROUND, Tile.STREET_H, Tile.STREET_V}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(PowerLine.SIZE_WIDTH, PowerLine.SIZE_HEIGHT); PowerGrid.setPendingOp(PowerLine.TYPE_ID); City.getInstance() .setHint( new Hint( "Click on the areas you wish to build a power line on. Press 'ESC' when done.")); } else if (event.message() == CoalPowerPlant.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(CoalPowerPlant.SIZE_WIDTH, CoalPowerPlant.SIZE_HEIGHT); Zone.setPendingOp(CoalPowerPlant.TYPE_ID); City.getInstance() .setHint( new Hint( "Select the areas where you wish to build a coal power plant. Press 'ESC' when done.")); } else if (event.message() == NuclearPowerPlant.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance() .selection() .setSize(NuclearPowerPlant.SIZE_WIDTH, NuclearPowerPlant.SIZE_HEIGHT); Zone.setPendingOp(NuclearPowerPlant.TYPE_ID); City.getInstance() .setHint( new Hint( "Select the areas where you wish to build a nuclear power plant. Press 'ESC' when done.")); } // * PROTECTION * else if (event.message() == FireStation.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(FireStation.SIZE_WIDTH, FireStation.SIZE_HEIGHT); Zone.setPendingOp(FireStation.TYPE_ID); City.getInstance() .setHint( new Hint( "Select the areas where you wish to build a fire station. Press 'ESC' when done.")); } else if (event.message() == PoliceStation.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(PoliceStation.SIZE_WIDTH, PoliceStation.SIZE_HEIGHT); Zone.setPendingOp(PoliceStation.TYPE_ID); City.getInstance() .setHint( new Hint( "Select the areas where you wish to build a police station. Press 'ESC' when done.")); } // * RECREATION * else if (event.message() == Park.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(Park.SIZE_WIDTH, Park.SIZE_HEIGHT); Recreation.setPendingOp(Park.TYPE_ID); City.getInstance() .setHint( new Hint("Select the areas where you wish to build a park. Press 'ESC' when done.")); } else if (event.message() == Stadium.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setAcceptedTypes(new int[] {Tile.GROUND}); Map.getInstance() .selection() .setUnacceptedZones( new int[] {ResidentialZone.TYPE_ID, CommercialZone.TYPE_ID, IndustrialZone.TYPE_ID}); Map.getInstance().selection().setSize(Stadium.SIZE_WIDTH, Stadium.SIZE_HEIGHT); Zone.setPendingOp(Stadium.TYPE_ID); City.getInstance() .setHint( new Hint( "Select the areas where you wish to build a stadium. Press 'ESC' when done.")); } // * TOOLS * else if (event.message() == Bulldozer.NAME) { Map.getInstance().selection().setSelectionMode(true); Map.getInstance().selection().setUnacceptedTypes(new int[] {Tile.WATER}); Map.getInstance().selection().setSize(Bulldozer.SIZE_WIDTH, Bulldozer.SIZE_HEIGHT); Tool.setPendingOp(Bulldozer.TYPE_ID); City.getInstance() .setHint(new Hint("Select the areas you wish to bulldoze. Press 'ESC' when done.")); } else if (event.message() == Query.NAME) { Map.getInstance().selection().setSelectionMode(true); Tool.setPendingOp(Query.TYPE_ID); City.getInstance() .setHint( new Hint( "Click on zones to query them. Click on the popup to dismiss it. Press 'ESC' when done.")); } }