diff options
Diffstat (limited to 'core/src/ch')
-rw-r--r-- | core/src/ch/asynk/tankontank/engine/Pawn.java | 1 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/engine/Tile.java | 35 |
2 files changed, 26 insertions, 10 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Pawn.java b/core/src/ch/asynk/tankontank/engine/Pawn.java index 989c57f..446c3cd 100644 --- a/core/src/ch/asynk/tankontank/engine/Pawn.java +++ b/core/src/ch/asynk/tankontank/engine/Pawn.java @@ -32,6 +32,7 @@ public abstract class Pawn implements Drawable, Disposable public abstract int getRoadMarchBonus(); public abstract boolean isUnit(); public abstract boolean isEnemy(Pawn other); + public abstract boolean canAttack(Pawn other); public abstract int getAngleOfAttack(); public abstract int getAttackRangeFrom(Tile tile); diff --git a/core/src/ch/asynk/tankontank/engine/Tile.java b/core/src/ch/asynk/tankontank/engine/Tile.java index 566f0cc..3495ada 100644 --- a/core/src/ch/asynk/tankontank/engine/Tile.java +++ b/core/src/ch/asynk/tankontank/engine/Tile.java @@ -1,6 +1,5 @@ package ch.asynk.tankontank.engine; -import java.util.List; import java.util.Iterator; import java.util.ArrayDeque; @@ -14,14 +13,13 @@ import ch.asynk.tankontank.engine.gfx.StackedImages; public abstract class Tile implements Drawable { - private StackedImages overlays; - protected ArrayDeque<Pawn> stack; private Vector2 center; + private StackedImages overlays; + private ArrayDeque<Pawn> stack; + public abstract int costFrom(Pawn pawn, Orientation side, boolean road); public abstract boolean atLeastOneMove(Pawn pawn); public abstract boolean road(Orientation side); - public abstract int costFrom(Pawn pawn, Orientation side, boolean road); - public abstract boolean hasTargetsFor(Pawn pawn); public abstract boolean isOffMap(); public abstract boolean blockLineOfSightFrom(Tile tile); @@ -42,6 +40,17 @@ public abstract class Tile implements Drawable return center; } + public boolean isEmpty() + { + if (stack == null) return true; + return stack.isEmpty(); + } + + public Iterator<Pawn> getIterator() + { + return stack.iterator(); + } + public int push(Pawn pawn) { if (stack == null) stack = new ArrayDeque<Pawn>(); @@ -57,14 +66,14 @@ public abstract class Tile implements Drawable public Pawn getTopPawn() { - if ((stack == null) || (stack.size() == 0)) return null; + if (isEmpty()) return null; return stack.getFirst(); } public boolean hasUnits() { if (isEmpty()) return false; - Iterator<Pawn> itr = stack.iterator(); + Iterator<Pawn> itr = getIterator(); while(itr.hasNext()) { if (itr.next().isUnit()) return true; @@ -72,10 +81,16 @@ public abstract class Tile implements Drawable return false; } - public boolean isEmpty() + public boolean hasTargetsFor(Pawn pawn) { - if (stack == null) return true; - return (stack.size() == 0); + if (isEmpty()) return false; + Iterator<Pawn> itr = getIterator(); + while(itr.hasNext()) { + Pawn target = itr.next(); + if (pawn.canAttack(target)) return true; + } + + return false; } public boolean mustBeDrawn() |