diff options
Diffstat (limited to 'core/src/ch')
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/Board.java (renamed from core/src/ch/asynk/tankontank/engine/MapNode.java) | 60 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/Map.java | 47 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/Pawn.java | 72 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/PawnImage.java | 70 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/Tile.java | 101 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/TileOverlays.java | 101 | 
6 files changed, 163 insertions, 288 deletions
| diff --git a/core/src/ch/asynk/tankontank/engine/MapNode.java b/core/src/ch/asynk/tankontank/engine/Board.java index bf9928a..16a27d2 100644 --- a/core/src/ch/asynk/tankontank/engine/MapNode.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -4,7 +4,7 @@ import java.util.Vector;  import java.util.Iterator;  import java.util.LinkedHashSet; -import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.utils.Disposable;  import com.badlogic.gdx.graphics.Texture;  import com.badlogic.gdx.graphics.g2d.Batch; @@ -20,9 +20,23 @@ import ch.asynk.tankontank.engine.gfx.Animation;  import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence;  import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation; -public class MapNode extends Image implements Map +public abstract class Board extends Image implements Disposable  { -    private Map.Config cfg; +    public static class Config +    { +        public int cols; +        public int rows; +        public int x0;          // bottom left x offset +        public int y0;          // bottom left y offset +        public int w;           // hex width +        public int dw;          // half hex : w/2 +        public int s;           // hex side +        public float dh;        // hex top : s/2 +        public float h;         // square height : s + dh +        public float slope;     // north-west side slope : (dh / (float) dw) +    } + +    private Config cfg;      private int cols;      private int rows;      private Tile[][] board; @@ -31,15 +45,12 @@ public class MapNode extends Image implements Map      private Matrix4 prevTransform;      private Matrix4 nextTransform; -    private Pawn currentPawn; -    private GridPoint2 currentHex = new GridPoint2(-1, -1); -      private final Vector<Animation> animations = new Vector<Animation>(2);      private final Vector<Animation> nextAnimations = new Vector<Animation>(2);      private final LinkedHashSet<Tile> tilesToDraw = new LinkedHashSet<Tile>();      private final LinkedHashSet<Pawn> pawnsToDraw = new LinkedHashSet<Pawn>(); -    public MapNode(Map.Config cfg, Tile[][] board, Texture texture) +    public Board(Config cfg, Tile[][] board, Texture texture)      {          super(texture);          this.cfg = cfg; @@ -67,7 +78,6 @@ public class MapNode extends Image implements Map          nextAnimations.add(seq);      } -    @Override      public void animate(float delta)      {          Iterator<Animation> iter = animations.iterator(); @@ -126,7 +136,6 @@ public class MapNode extends Image implements Map              debugShapes.setTransformMatrix(prevTransform);      } -    @Override      public Pawn getTopPawnAt(GridPoint2 cell)      {          return getTopPawnAt(cell.x, cell.y); @@ -153,7 +162,6 @@ public class MapNode extends Image implements Map          return n;      } -    @Override      public Vector2 getHexCenterAt(GridPoint2 cell)      {          float x = cfg.x0 + ((cell.x * cfg.w) + (cfg.w / 2)); @@ -162,7 +170,6 @@ public class MapNode extends Image implements Map          return new Vector2(x, y);      } -    @Override      public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 cell)      {          return getPawnPosAt(pawn, cell.x, cell.y); @@ -176,7 +183,6 @@ public class MapNode extends Image implements Map          return new Vector2(x, y);      } -    @Override      public void setPawnAt(final Pawn pawn, final int col, final int row, Pawn.Orientation o)      {          Vector2 pos = getPawnPosAt(pawn, col, row); @@ -184,20 +190,17 @@ public class MapNode extends Image implements Map          pushPawnAt(pawn, col, row);      } -    @Override      public void movePawnTo(Pawn pawn, Vector3 coords)      {          GridPoint2 hex = getHexAt(null, coords.x, coords.y);          movePawnTo(pawn, hex.x, hex.y, Pawn.Orientation.KEEP);      } -    @Override      public void movePawnTo(Pawn pawn, GridPoint2 hex)      {          movePawnTo(pawn, hex.x, hex.y, Pawn.Orientation.KEEP);      } -    @Override      public void movePawnTo(final Pawn pawn, final int col, final int row, Pawn.Orientation o)      {          GridPoint2 prev = getHexAt(pawn.getLastPosition()); @@ -226,7 +229,6 @@ public class MapNode extends Image implements Map          return getHexAt(null, v.x, v.y);      } -    @Override      public GridPoint2 getHexAt(GridPoint2 hex, float cx, float cy)      {          if (hex == null) hex = new GridPoint2(); @@ -280,31 +282,5 @@ public class MapNode extends Image implements Map          return hex;      } - -    @Override -    public boolean drag(float dx, float dy) -    { -        if (currentPawn == null) return false; -        currentPawn.translate(dx, dy); -        return true; -    } - -    @Override -    public void touchDown(float x, float y) -    { -        getHexAt(currentHex, x, y); -        if (currentHex.x != -1) { -            currentPawn = getTopPawnAt(currentHex); -        } -    } - -    @Override -    public void touchUp(float x, float y) -    { -        getHexAt(currentHex, x, y); -        if (currentPawn != null) { -            movePawnTo(currentPawn, currentHex); -        } -    }  } diff --git a/core/src/ch/asynk/tankontank/engine/Map.java b/core/src/ch/asynk/tankontank/engine/Map.java deleted file mode 100644 index 253edf0..0000000 --- a/core/src/ch/asynk/tankontank/engine/Map.java +++ /dev/null @@ -1,47 +0,0 @@ -package ch.asynk.tankontank.engine; - -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.math.Vector3; -import com.badlogic.gdx.math.GridPoint2; -import com.badlogic.gdx.utils.Disposable; - -import ch.asynk.tankontank.engine.gfx.Drawable; - -public interface Map extends Drawable, Disposable -{ -    public void animate(float delta); - -    public GridPoint2 getHexAt(GridPoint2 hex, float x, float y); - -    public Pawn getTopPawnAt(GridPoint2 hex); - -    public Vector2 getHexCenterAt(GridPoint2 hex); - -    public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 hex); - -    public void setPawnAt(Pawn pawn, int col, int row, Pawn.Orientation o); - -    public void movePawnTo(Pawn pawn, Vector3 coords); - -    public void movePawnTo(Pawn pawn, GridPoint2 hex); - -    public void movePawnTo(Pawn pawn, int col, int row, Pawn.Orientation o); - -    public class Config -    { -        public int cols; -        public int rows; -        public int x0;          // bottom left x offset -        public int y0;          // bottom left y offset -        public int w;           // hex width -        public int dw;          // half hex : w/2 -        public int s;           // hex side -        public float dh;        // hex top : s/2 -        public float h;         // square height : s + dh -        public float slope;     // north-west side slope : (dh / (float) dw) -    } - -    public void touchUp(float x, float y); -    public void touchDown(float x, float y); -    public boolean drag(float dx, float dy); -} diff --git a/core/src/ch/asynk/tankontank/engine/Pawn.java b/core/src/ch/asynk/tankontank/engine/Pawn.java index 0198302..204bc97 100644 --- a/core/src/ch/asynk/tankontank/engine/Pawn.java +++ b/core/src/ch/asynk/tankontank/engine/Pawn.java @@ -1,21 +1,20 @@  package ch.asynk.tankontank.engine; -import com.badlogic.gdx.math.Vector3; -import com.badlogic.gdx.utils.Disposable; - -import ch.asynk.tankontank.engine.gfx.Drawable; -import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence; +import java.util.ArrayDeque; -public interface Pawn extends Drawable, Disposable -{ -    public Vector3 getLastPosition(); +import com.badlogic.gdx.utils.Disposable; -    public void moveDone(); +import com.badlogic.gdx.graphics.g2d.TextureRegion; -    public void pushMove(float x, float y, Pawn.Orientation o); +import com.badlogic.gdx.math.Vector3; -    public AnimationSequence getResetMovesAnimation(); +import ch.asynk.tankontank.engine.gfx.Image; +import ch.asynk.tankontank.engine.gfx.animations.MoveToAnimation; +import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation; +import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence; +public abstract class Pawn extends Image implements Disposable +{      public enum Orientation      {          KEEP(0), @@ -29,4 +28,55 @@ public interface Pawn extends Drawable, Disposable          public final int v;          Orientation(int v) { this.v = v; }      } + +    private static final float MOVE_TIME = 0.3f; + +    private ArrayDeque<Vector3> path = new ArrayDeque<Vector3>(); + +    public Pawn(TextureRegion region) +    { +        super(region); +    } + +    public Vector3 getLastPosition() +    { +        if ((path == null) || (path.size() == 0)) return null; +        return path.getFirst(); +    } + +    public void moveDone() +    { +        Vector3 v = path.pop(); +        path.clear(); +        path.push(v); +    } + +    public void pushMove(float x, float y, Pawn.Orientation o) +    { +        float r = ((o == Pawn.Orientation.KEEP) ? getRotation() : o.v); +        setPosition(x, y, r); +        Vector3 v = new Vector3(x, y, r); +        if ((path.size() == 0) || (!v.equals(path.getFirst()))) +            path.push(new Vector3(x, y, r)); +    } + +    public AnimationSequence getResetMovesAnimation() +    { +        final Vector3 finalPos = path.getLast(); + +        AnimationSequence seq = AnimationSequence.get(path.size() + 1); + +        while(path.size() != 0) { +            seq.addAnimation(MoveToAnimation.get(this, path.pop(), MOVE_TIME)); +        } + +        seq.addAnimation(RunnableAnimation.get(this, new Runnable() { +            @Override +            public void run() { +                path.push(finalPos); +            } +        })); + +        return seq; +    }  } diff --git a/core/src/ch/asynk/tankontank/engine/PawnImage.java b/core/src/ch/asynk/tankontank/engine/PawnImage.java deleted file mode 100644 index 4a16cd5..0000000 --- a/core/src/ch/asynk/tankontank/engine/PawnImage.java +++ /dev/null @@ -1,70 +0,0 @@ -package ch.asynk.tankontank.engine; - -import java.util.ArrayDeque; - -import com.badlogic.gdx.graphics.g2d.TextureRegion; - -import com.badlogic.gdx.math.Vector3; - -import ch.asynk.tankontank.engine.gfx.Image; -import ch.asynk.tankontank.engine.gfx.animations.MoveToAnimation; -import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation; -import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence; - -public class PawnImage extends Image implements Pawn -{ -    private static final float MOVE_TIME = 0.3f; - -    private ArrayDeque<Vector3> path = new ArrayDeque<Vector3>(); - -    public PawnImage(TextureRegion region) -    { -        super(region); -    } - -    @Override -    public Vector3 getLastPosition() -    { -        if ((path == null) || (path.size() == 0)) return null; -        return path.getFirst(); -    } - -    @Override -    public void moveDone() -    { -        Vector3 v = path.pop(); -        path.clear(); -        path.push(v); -    } - -    @Override -    public void pushMove(float x, float y, Pawn.Orientation o) -    { -        float r = ((o == Pawn.Orientation.KEEP) ? getRotation() : o.v); -        setPosition(x, y, r); -        Vector3 v = new Vector3(x, y, r); -        if ((path.size() == 0) || (!v.equals(path.getFirst()))) -            path.push(new Vector3(x, y, r)); -    } - -    @Override -    public AnimationSequence getResetMovesAnimation() -    { -        final Vector3 finalPos = path.getLast(); - -        AnimationSequence seq = AnimationSequence.get(path.size() + 1); - -        while(path.size() != 0) { -            seq.addAnimation(MoveToAnimation.get(this, path.pop(), MOVE_TIME)); -        } - -        seq.addAnimation(RunnableAnimation.get(this, new Runnable() { -            @Override -            public void run() { -                path.push(finalPos); -            } -        })); - -        return seq; -    } -} 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); +    }  } diff --git a/core/src/ch/asynk/tankontank/engine/TileOverlays.java b/core/src/ch/asynk/tankontank/engine/TileOverlays.java deleted file mode 100644 index 48d755d..0000000 --- a/core/src/ch/asynk/tankontank/engine/TileOverlays.java +++ /dev/null @@ -1,101 +0,0 @@ -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.StackedImages; - -public abstract class TileOverlays implements Tile -{ -    private StackedImages overlays; -    private ArrayDeque<Pawn> stack; - -    public TileOverlays(TextureAtlas atlas) -    { -        this.stack = null; -        this.overlays = new StackedImages(atlas); -    } - -    @Override -    public int push(Pawn pawn) -    { -        if (stack == null) stack = new ArrayDeque<Pawn>(); -        stack.push(pawn); -        return stack.size(); -    } - -    @Override -    public int remove(Pawn pawn) -    { -        stack.remove(pawn); -        return stack.size(); -    } - -    @Override -    public Pawn getTopPawn() -    { -        if ((stack == null) || (stack.size() == 0)) return null; -        return stack.getFirst(); -    } - -    @Override -    public boolean mustBeDrawn() -    { -        if (occupied()) return true; -        return hasOverlayEnabled(); -    } - -    @Override -    public boolean occupied() -    { -        return (stack.size() != 0); -    } - -    @Override -    public boolean hasOverlayEnabled() -    { -        return overlays.isEnabled(); -    } - -    @Override -    public void enableOverlay(int i, boolean enable) -    { -        overlays.enable(i, enable); -    } - -    @Override -    public List<Tile> adjacents() -    { -        // FIXME -        System.err.println("adjacents() Not implemented yet"); -        return null; -    } - -    @Override -    public void setPosition(float x, float y, float z) -    { -        overlays.setPosition(x, y, z); -    } - -    @Override -    public void draw(Batch batch, float parentAlpha) -    { -        overlays.draw(batch, parentAlpha); -        Pawn pawn = getTopPawn(); -        if (pawn != null) -            pawn.draw(batch, parentAlpha); -    } - -    @Override -    public void drawDebug(ShapeRenderer debugShapes) -    { -        overlays.drawDebug(debugShapes); -        Pawn pawn = getTopPawn(); -        if (pawn != null) -            pawn.drawDebug(debugShapes); -    } -} | 
