diff options
Diffstat (limited to 'core/src/ch/asynk/tankontank/game')
-rw-r--r-- | core/src/ch/asynk/tankontank/game/GameFactory.java | 4 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Hex.java | 3 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 43 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/MapImage.java | 167 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Pawn.java | 24 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/PawnImage.java | 71 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Tile.java | 37 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Unit.java | 2 |
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; |