diff --git a/src/micropolisj/engine/ToolEffect.java b/src/micropolisj/engine/ToolEffect.java new file mode 100644 index 0000000..978ca38 --- /dev/null +++ b/src/micropolisj/engine/ToolEffect.java @@ -0,0 +1,76 @@ +package micropolisj.engine; + +import static micropolisj.engine.TileConstants.CLEAR; + +class ToolEffect implements ToolEffectIfc +{ + final Micropolis city; + final ToolPreview preview; + final int originX; + final int originY; + + ToolEffect(Micropolis city, int xpos, int ypos) + { + this.city = city; + this.preview = new ToolPreview(); + this.originX = xpos; + this.originY = ypos; + } + + //implements ToolEffectIfc + public int getTile(int dx, int dy) + { + int c = preview.getTile(dx, dy); + if (c != CLEAR) { + return c; + } + + if (city.testBounds(originX + dx, originY + dy)) { + return city.getTile(originX + dx, originY + dy); + } + else { + return CLEAR; + } + } + + //implements ToolEffectIfc + public void setTile(int dx, int dy, int tileValue) + { + preview.setTile(dx, dy, tileValue); + } + + //implements ToolEffectIfc + public void spend(int amount) + { + preview.spend(amount); + } + + ToolResult apply() + { + if (originX - preview.offsetX < 0 || + originX - preview.offsetX >= city.getWidth() || + originY - preview.offsetY < 0 || + originY - preview.offsetY >= city.getHeight()) + { + return ToolResult.UH_OH; + } + + if (city.budget.totalFunds < preview.cost) { + return ToolResult.INSUFFICIENT_FUNDS; + } + + boolean anyFound = false; + for (int y = 0; y < preview.tiles.length; y++) { + for (int x = 0; x < preview.tiles[y].length; x++) { + int c = preview.tiles[y][x]; + if (c != CLEAR) { + city.setTile(originX + x - preview.offsetX, originY + y - preview.offsetY, (char) c); + anyFound = true; + } + } + } + return anyFound && preview.cost != 0 ? + ToolResult.SUCCESS : + ToolResult.NONE; + } +} diff --git a/src/micropolisj/engine/ToolPreview.java b/src/micropolisj/engine/ToolPreview.java index 794f3f5..54fa543 100644 --- a/src/micropolisj/engine/ToolPreview.java +++ b/src/micropolisj/engine/ToolPreview.java @@ -5,17 +5,13 @@ import static micropolisj.engine.TileConstants.*; public class ToolPreview implements ToolEffectIfc { - public int originX; - public int originY; public int offsetX; public int offsetY; public short [][] tiles; public int cost; - ToolPreview(int x, int y) + ToolPreview() { - this.originX = x; - this.originY = y; this.tiles = new short[1][1]; this.tiles[0][0] = CLEAR; }