// This file is part of MicropolisJ.
// Copyright (C) 2013 Jason Long
// Portions Copyright (C) 1989-2007 Electronic Arts Inc.
//
// MicropolisJ is free software; you can redistribute it and/or modify
// it under the terms of the GNU GPLv3, with additional terms.
// See the README file, included in this distribution, for details.
package micropolisj.engine;
import static micropolisj.engine.TileConstants.*;
/**
* Enumerates the various tools that can be applied to the map by the user.
* Call the tool's apply() method to actually use the tool on the map.
*/
public enum MicropolisTool
{
BULLDOZER,
WIRE,
ROADS,
RAIL,
RESIDENTIAL,
COMMERCIAL,
INDUSTRIAL,
FIRE,
POLICE,
STADIUM,
PARK,
SEAPORT,
POWERPLANT,
NUCLEAR,
AIRPORT,
QUERY;
public int getWidth()
switch(this)
case RESIDENTIAL:
case COMMERCIAL:
case INDUSTRIAL:
case FIRE:
case POLICE:
return 3;
case STADIUM:
case SEAPORT:
case POWERPLANT:
case NUCLEAR:
return 4;
case AIRPORT:
return 6;
default:
return 1;
}
public int getHeight()
return getWidth();
public ToolStroke beginStroke(Micropolis engine, int xpos, int ypos)
return new ToolStroke(engine, this, xpos, ypos);
public ToolResult apply(Micropolis engine, int xpos, int ypos)
return beginStroke(engine, xpos, ypos).apply();
public int getToolCost()
switch (this)
case BULLDOZER: return 1;
case WIRE: return 5; //25 for underwater
case ROADS: return 10; //50 for over water
case RAIL: return 20; //100 for underwater
case RESIDENTIAL: return 100;
case COMMERCIAL: return 100;
case INDUSTRIAL: return 100;
case FIRE: return 500;
case POLICE: return 500;
case STADIUM: return 5000;
case PARK: return 10;
case SEAPORT: return 3000;
case POWERPLANT: return 3000;
case NUCLEAR: return 5000;
case AIRPORT: return 10000;
case QUERY: return 0;
assert false;