diff options
Diffstat (limited to 'core/src/ch/asynk/tankontank/engine/Tile.java')
-rw-r--r-- | core/src/ch/asynk/tankontank/engine/Tile.java | 101 |
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); + } } |