summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/engine/Tile.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/engine/Tile.java')
-rw-r--r--core/src/ch/asynk/tankontank/engine/Tile.java101
1 files changed, 84 insertions, 17 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Tile.java b/core/src/ch/asynk/tankontank/engine/Tile.java
index 7c43bd4..f7122fe 100644
--- a/core/src/ch/asynk/tankontank/engine/Tile.java
+++ b/core/src/ch/asynk/tankontank/engine/Tile.java
@@ -1,27 +1,17 @@
package ch.asynk.tankontank.engine;
import java.util.List;
+import java.util.ArrayDeque;
+
+import com.badlogic.gdx.graphics.g2d.Batch;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import ch.asynk.tankontank.engine.gfx.BasicDrawable;
+import ch.asynk.tankontank.engine.gfx.StackedImages;
-public interface Tile extends BasicDrawable
+public abstract class Tile implements BasicDrawable
{
- public int push(Pawn pawn);
-
- public int remove(Pawn pawn);
-
- public Pawn getTopPawn();
-
- public boolean mustBeDrawn();
-
- public boolean occupied();
-
- public boolean hasOverlayEnabled();
-
- public void enableOverlay(int i, boolean enable);
-
- public List<Tile> adjacents();
-
public enum Side
{
WEST(1),
@@ -34,4 +24,81 @@ public interface Tile extends BasicDrawable
public final int v;
Side(int v) { this.v = v; }
}
+
+ private StackedImages overlays;
+ private ArrayDeque<Pawn> stack;
+
+ public Tile(TextureAtlas atlas)
+ {
+ this.stack = null;
+ this.overlays = new StackedImages(atlas);
+ }
+
+ public int push(Pawn pawn)
+ {
+ if (stack == null) stack = new ArrayDeque<Pawn>();
+ stack.push(pawn);
+ return stack.size();
+ }
+
+ public int remove(Pawn pawn)
+ {
+ stack.remove(pawn);
+ return stack.size();
+ }
+
+ public Pawn getTopPawn()
+ {
+ if ((stack == null) || (stack.size() == 0)) return null;
+ return stack.getFirst();
+ }
+
+ public boolean mustBeDrawn()
+ {
+ if (occupied()) return true;
+ return hasOverlayEnabled();
+ }
+
+ public boolean occupied()
+ {
+ return (stack.size() != 0);
+ }
+
+ public boolean hasOverlayEnabled()
+ {
+ return overlays.isEnabled();
+ }
+
+ public void enableOverlay(int i, boolean enable)
+ {
+ overlays.enable(i, enable);
+ }
+
+ public List<Tile> adjacents()
+ {
+ // FIXME
+ System.err.println("adjacents() Not implemented yet");
+ return null;
+ }
+
+ public void setPosition(float x, float y, float z)
+ {
+ overlays.setPosition(x, y, z);
+ }
+
+ public void draw(Batch batch, float parentAlpha)
+ {
+ overlays.draw(batch, parentAlpha);
+ Pawn pawn = getTopPawn();
+ if (pawn != null)
+ pawn.draw(batch, parentAlpha);
+ }
+
+ public void drawDebug(ShapeRenderer debugShapes)
+ {
+ overlays.drawDebug(debugShapes);
+ Pawn pawn = getTopPawn();
+ if (pawn != null)
+ pawn.drawDebug(debugShapes);
+ }
}