summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/rustanddust/game/Hex.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/rustanddust/game/Hex.java')
-rw-r--r--core/src/ch/asynk/rustanddust/game/Hex.java138
1 files changed, 138 insertions, 0 deletions
diff --git a/core/src/ch/asynk/rustanddust/game/Hex.java b/core/src/ch/asynk/rustanddust/game/Hex.java
new file mode 100644
index 0000000..b805146
--- /dev/null
+++ b/core/src/ch/asynk/rustanddust/game/Hex.java
@@ -0,0 +1,138 @@
+package ch.asynk.rustanddust.game;
+
+import java.util.List;
+import java.util.Iterator;
+
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+
+import ch.asynk.rustanddust.engine.Board;
+import ch.asynk.rustanddust.engine.Pawn;
+import ch.asynk.rustanddust.engine.Tile;
+import ch.asynk.rustanddust.engine.Orientation;
+import ch.asynk.rustanddust.game.Unit.UnitType;
+
+public class Hex extends Tile
+{
+ public enum Terrain implements TileTerrain
+ {
+ OFFMAP,
+ BLOCKED,
+ CLEAR,
+ HILLS,
+ WOODS,
+ TOWN
+ }
+
+ public static final int FOG = 0;
+ public static final int SELECT = 1;
+ public static final int AREA = 2;
+ public static final int MOVE = 3;
+ public static final int DIRECTIONS = 4;
+ public static final int ORIENTATION = 5;
+ public static final int OBJECTIVE = 6;
+ public static final int OBJECTIVE_HOLD = 7;
+ public static final int OBJECTIVE_GE = 8;
+ public static final int OBJECTIVE_US = 9;
+ public static final int EXIT = 10;
+
+ public Terrain terrain;
+ public int roads;
+
+ public String toString()
+ {
+ return String.format("(%d;%d) [%f;%f] t:%s r:%d", col, row, x, y, terrain, roads);
+ }
+
+ public String toShort()
+ {
+ return String.format("(%d;%d)", col, row);
+ }
+
+ public Hex(float x, float y, int col, int row, TextureAtlas atlas)
+ {
+ super(x, y, col, row, atlas);
+ this.terrain = Terrain.CLEAR;
+ this.roads = 0;
+ }
+
+ public Unit getUnit()
+ {
+ return (Unit) stack.peekFirst();
+ }
+
+ @Override
+ public boolean isA(TileTerrain terrain)
+ {
+ return (this.terrain == terrain);
+ }
+
+ @Override
+ public boolean isOffMap()
+ {
+ return isA(Terrain.OFFMAP);
+ }
+
+ @Override
+ public boolean blockLineOfSightFrom(Tile tile)
+ {
+ if (isA(Terrain.CLEAR) && !hasUnits())
+ return false;
+
+ if (tile.isA(Terrain.HILLS) && isA(Terrain.CLEAR))
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public boolean atLeastOneMove(Pawn pawn)
+ {
+ if (hasUnits() || isA(Terrain.BLOCKED) || isA(Terrain.OFFMAP))
+ return false;
+ return true;
+ }
+
+ @Override
+ public boolean road(Orientation side)
+ {
+ return (side.s == (roads & side.s));
+ }
+
+ @Override
+ public int exitCost()
+ {
+ return 1;
+ }
+
+ @Override
+ public int costFrom(Pawn pawn, Orientation side)
+ {
+ if (side == Orientation.KEEP) return 0;
+ if (hasUnits()) return (Integer.MAX_VALUE / 2);
+ if (road(side)) return 1;
+
+ int c = 0;
+ switch(terrain) {
+ case CLEAR:
+ case HILLS:
+ c = 1;
+ break;
+ case WOODS:
+ case TOWN:
+ c = 2;
+ break;
+ case OFFMAP:
+ case BLOCKED:
+ c = (Integer.MAX_VALUE / 2);
+ break;
+ }
+
+ return c;
+ }
+
+ @Override
+ public int defense()
+ {
+ return (isA(Terrain.TOWN) ? 1 : 0);
+ }
+}