summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/game
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/game')
-rw-r--r--core/src/ch/asynk/tankontank/game/GameFactory.java4
-rw-r--r--core/src/ch/asynk/tankontank/game/Hex.java3
-rw-r--r--core/src/ch/asynk/tankontank/game/Map.java43
-rw-r--r--core/src/ch/asynk/tankontank/game/MapImage.java167
-rw-r--r--core/src/ch/asynk/tankontank/game/Pawn.java24
-rw-r--r--core/src/ch/asynk/tankontank/game/PawnImage.java71
-rw-r--r--core/src/ch/asynk/tankontank/game/Tile.java37
-rw-r--r--core/src/ch/asynk/tankontank/game/Unit.java2
8 files changed, 9 insertions, 342 deletions
diff --git a/core/src/ch/asynk/tankontank/game/GameFactory.java b/core/src/ch/asynk/tankontank/game/GameFactory.java
index 961a39a..3b77f1a 100644
--- a/core/src/ch/asynk/tankontank/game/GameFactory.java
+++ b/core/src/ch/asynk/tankontank/game/GameFactory.java
@@ -5,6 +5,10 @@ import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import ch.asynk.tankontank.engine.Map;
+import ch.asynk.tankontank.engine.MapImage;
+import ch.asynk.tankontank.engine.Tile;
+
public class GameFactory
{
private static TextureAtlas usAtlas;
diff --git a/core/src/ch/asynk/tankontank/game/Hex.java b/core/src/ch/asynk/tankontank/game/Hex.java
index e3889f9..1222363 100644
--- a/core/src/ch/asynk/tankontank/game/Hex.java
+++ b/core/src/ch/asynk/tankontank/game/Hex.java
@@ -2,6 +2,9 @@ package ch.asynk.tankontank.game;
import java.util.ArrayDeque;
+import ch.asynk.tankontank.engine.Tile;
+import ch.asynk.tankontank.engine.Pawn;
+
public class Hex implements Tile
{
public enum Terrain
diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java
deleted file mode 100644
index d410502..0000000
--- a/core/src/ch/asynk/tankontank/game/Map.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package ch.asynk.tankontank.game;
-
-import com.badlogic.gdx.math.Vector2;
-import com.badlogic.gdx.math.Vector3;
-import com.badlogic.gdx.math.GridPoint2;
-
-public interface Map
-{
- // libgdx
-
- public float getWidth();
- public float getHeight();
-
- // game
-
- 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 movePawnTo(Pawn pawn, Vector3 coords);
-
- public void setPawnAt(Pawn pawn, int col, int row, Tile.Orientation o);
-
- public void movePawnTo(Pawn pawn, int col, int row, Tile.Orientation o);
-
- public class Config
- {
- public int cols;
- public int rows;
- public int x0 = 83; // map offset
- public int y0 = 182; // map offset
- public int h = 110; // hex side
- public float dh = 53.6f; // hex top should be h/2
- public int w = 189; // hex width
- public int dw = 94; // half hex should be w/2
- public float H = h + dh; // total height
- public float slope = (dh / (float) dw);
- }
-}
diff --git a/core/src/ch/asynk/tankontank/game/MapImage.java b/core/src/ch/asynk/tankontank/game/MapImage.java
deleted file mode 100644
index 2bb330d..0000000
--- a/core/src/ch/asynk/tankontank/game/MapImage.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package ch.asynk.tankontank.game;
-
-import com.badlogic.gdx.Gdx;
-
-import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.scenes.scene2d.ui.Image;
-
-import com.badlogic.gdx.math.Vector2;
-import com.badlogic.gdx.math.Vector3;
-import com.badlogic.gdx.math.GridPoint2;
-
-public class MapImage extends Image implements Map
-{
- private Map.Config cfg;
- private int cols;
- private int rows;
- private Tile[][] board;
-
- @SuppressWarnings("unchecked")
- public MapImage(Map.Config cfg, Tile[][] board, Texture texture)
- {
- super(texture);
- this.cfg = cfg;
- this.board = board;
- this.cols = cfg.cols - 1;
- this.rows = cfg.rows - 1;
- }
-
- public Pawn getTopPawnAt(GridPoint2 cell)
- {
- return getTopPawnAt(cell.x, cell.y);
- }
-
- private Pawn getTopPawnAt(int col, int row)
- {
- // if ((col < 0) || (row < 0)) throw new ();
- return board[row][col].getTop();
- }
-
- private int pushPawnAt(Pawn pawn, int col, int row)
- {
- // if ((col < 0) || (row < 0)) throw new ();
- return board[row][col].push(pawn);
- }
-
- private void removePawnFrom(Pawn pawn, int col, int row)
- {
- // if ((col < 0) || (row < 0)) throw new ();
- board[row][col].remove(pawn);
- }
-
- public Vector2 getHexCenterAt(GridPoint2 cell)
- {
- float x = cfg.x0 + ((cell.x * cfg.w) + (cfg.w / 2));
- float y = cfg.y0 + ((cell.y * cfg.H) + (cfg.h / 2));
- if ((cell.y % 2) == 1) x += cfg.dw;
- return new Vector2(x, y);
- }
-
- public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 cell)
- {
- return getPawnPosAt(pawn, cell.x, cell.y);
- }
-
- private Vector2 getPawnPosAt(Pawn pawn, int col, int row)
- {
- float x = cfg.x0 + ((col * cfg.w) + ((cfg.w - pawn.getHeight()) / 2));
- float y = cfg.y0 + ((row * cfg.H) + ((cfg.h - pawn.getWidth()) / 2));
- if ((row % 2) == 1) x += cfg.dw;
- return new Vector2(x, y);
- }
-
- public void movePawnTo(Pawn pawn, Vector3 coords)
- {
- GridPoint2 p = getHexAt(null, coords.x, coords.y);
- movePawnTo(pawn, p.x, p.y, Tile.Orientation.KEEP);
- }
-
- public void setPawnAt(final Pawn pawn, final int col, final int row, Tile.Orientation o)
- {
- int z = pushPawnAt(pawn, col, row);
- Vector2 pos = getPawnPosAt(pawn, col, row);
- pawn.pushMove(pos.x, pos.y, z, o);
- }
-
- public void movePawnTo(final Pawn pawn, final int col, final int row, Tile.Orientation o)
- {
- GridPoint2 prev = getHexAt(pawn.getLastPosition());
- // if (prev == null) throw new ();
- removePawnFrom(pawn, prev.x, prev.y);
-
- if ((col < 0) || (row < 0)) {
- pawn.resetMoves(new Runnable() {
- @Override
- public void run() {
- GridPoint2 hex = getHexAt(pawn.getLastPosition());
- pawn.setZIndex(pushPawnAt(pawn, hex.x, hex.y));
- }
- });
- return;
- } else {
- int z = pushPawnAt(pawn, col, row);
- Vector2 pos = getPawnPosAt(pawn, col, row);
- pawn.pushMove(pos.x, pos.y, z, o);
- }
- }
-
- private GridPoint2 getHexAt(Vector3 v)
- {
- if (v == null) return null;
- return getHexAt(null, v.x, v.y);
- }
-
- public GridPoint2 getHexAt(GridPoint2 hex, float cx, float cy)
- {
- if (hex == null) hex = new GridPoint2();
-
- // compute row
- int row;
- boolean oddRow = true;
- float y = (cy - cfg.y0);
- if (y < 0.f) {
- row = -1;
- } else {
- row = (int) (y / cfg.H);
- oddRow = ((row % 2) == 1);
- }
-
- // compute col
- int col;
- float x = (cx - cfg.x0);
- if (oddRow) x -= cfg.dw;
- if (x < 0.f) {
- col = -1;
- } else {
- col = (int) (x / cfg.w);
- }
-
- // check upper boundaries
- float dy = (y - (row * cfg.H));
- if (dy > cfg.h) {
- dy -= cfg.h;
- float dx = (x - (col * cfg.w));
- if (dx < cfg.dw) {
- if ((dx * cfg.slope) < dy) {
- row += 1;
- if (!oddRow) col -= 1;
- oddRow = !oddRow;
- }
- } else {
- if (((cfg.w - dx) * cfg.slope) < dy) {
- row += 1;
- if (oddRow) col += 1;
- oddRow = !oddRow;
- }
- }
- }
-
- // validate hex
- if ((col < 0) || (row < 0) || (row > rows) || (col > cols) || (oddRow && ((col +1)> cols)))
- hex.set(-1, -1);
- else
- hex.set(col, row);
-
- return hex;
- }
-}
diff --git a/core/src/ch/asynk/tankontank/game/Pawn.java b/core/src/ch/asynk/tankontank/game/Pawn.java
deleted file mode 100644
index 8bbdec4..0000000
--- a/core/src/ch/asynk/tankontank/game/Pawn.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package ch.asynk.tankontank.game;
-
-import com.badlogic.gdx.math.Vector3;
-
-public interface Pawn
-{
- // libgdx
-
- public float getWidth();
- public float getHeight();
- public void setZIndex(int z);
-
- // game
-
- public Vector3 getLastPosition();
-
- public void moveBy(float x, float y);
-
- public void pushMove(float x, float y, int z, Tile.Orientation o);
-
- public void resetMoves(Runnable cb);
-
- public void moveDone();
-}
diff --git a/core/src/ch/asynk/tankontank/game/PawnImage.java b/core/src/ch/asynk/tankontank/game/PawnImage.java
deleted file mode 100644
index d8b6d56..0000000
--- a/core/src/ch/asynk/tankontank/game/PawnImage.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package ch.asynk.tankontank.game;
-
-import java.util.ArrayDeque;
-
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import com.badlogic.gdx.scenes.scene2d.ui.Image;
-import com.badlogic.gdx.scenes.scene2d.actions.Actions;
-import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
-
-import com.badlogic.gdx.math.Vector3;
-
-public class PawnImage extends Image implements Pawn
-{
- private static final float MOVE_TIME = 0.3f;
- private static final float ROTATE_TIME = 0.2f;
-
- private ArrayDeque<Vector3> path = new ArrayDeque<Vector3>();
-
- public PawnImage(TextureRegion region)
- {
- super(region);
- setOrigin((getWidth() / 2.f), (getHeight() / 2.f));
- }
-
- public Vector3 getLastPosition()
- {
- if ((path == null) || (path.size() == 0)) return null;
- return path.getFirst();
- }
-
- public void pushMove(float x, float y, int z, Tile.Orientation r)
- {
- setPosition(x, y);
- if (r != Tile.Orientation.KEEP) setRotation(r.v);
- setZIndex(z);
- path.push(new Vector3(x, y, r.v));
- }
-
- public void resetMoves(Runnable cb)
- {
- final Pawn self = this;
- final Vector3 finalPos = path.getLast();
-
- SequenceAction seq = new SequenceAction();
- while(path.size() != 0) {
- Vector3 v = path.pop();
- seq.addAction(Actions.moveTo(v.x, v.y, MOVE_TIME));
- if (v.z != Tile.Orientation.KEEP.v)
- seq.addAction(Actions.rotateTo(v.z, ROTATE_TIME));
- }
-
- seq.addAction( Actions.run(new Runnable() {
- @Override
- public void run() {
- path.push(finalPos);
- }
- }));
-
- // map set z index and push me in hex stack
- seq.addAction(Actions.run(cb));
-
- addAction(seq);
- }
-
- public void moveDone()
- {
- Vector3 v = path.pop();
- path.clear();
- path.push(v);
- }
-}
diff --git a/core/src/ch/asynk/tankontank/game/Tile.java b/core/src/ch/asynk/tankontank/game/Tile.java
deleted file mode 100644
index a52e728..0000000
--- a/core/src/ch/asynk/tankontank/game/Tile.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package ch.asynk.tankontank.game;
-
-public interface Tile
-{
- public int push(Pawn pawn);
-
- public void remove(Pawn pawn);
-
- public Pawn getTop();
-
- public enum Orientation
- {
- KEEP(0),
- WEST(-90),
- NORTH_WEST(-30),
- NORTH_EAST (30),
- EAST(90),
- SOUTH_EAST(150),
- SOUTH_WEST(-150);
-
- public final int v;
- Orientation(int v) { this.v = v; }
- }
-
- public enum Side
- {
- WEST(1),
- NORTH_WEST(2),
- NORTH_EAST (4),
- EAST(8),
- SOUTH_EAST(16),
- SOUTH_WEST(32);
-
- public final int v;
- Side(int v) { this.v = v; }
- }
-}
diff --git a/core/src/ch/asynk/tankontank/game/Unit.java b/core/src/ch/asynk/tankontank/game/Unit.java
index 965ed47..61833eb 100644
--- a/core/src/ch/asynk/tankontank/game/Unit.java
+++ b/core/src/ch/asynk/tankontank/game/Unit.java
@@ -2,6 +2,8 @@ package ch.asynk.tankontank.game;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import ch.asynk.tankontank.engine.PawnImage;
+
public class Unit extends PawnImage
{
public int rng;