From babca10432300d09d74b6971398349fe2fc67d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Tue, 16 Sep 2014 11:32:27 +0200 Subject: actors/HexMap actors/Pawn -> game/* --- core/src/ch/asynk/tankontank/actors/HexMap.java | 163 --------------------- core/src/ch/asynk/tankontank/actors/Pawn.java | 83 ----------- core/src/ch/asynk/tankontank/game/HexMap.java | 163 +++++++++++++++++++++ core/src/ch/asynk/tankontank/game/Pawn.java | 83 +++++++++++ core/src/ch/asynk/tankontank/game/Unit.java | 3 - core/src/ch/asynk/tankontank/game/UnitFactory.java | 2 - .../ch/asynk/tankontank/screens/GameScreen.java | 4 +- 7 files changed, 248 insertions(+), 253 deletions(-) delete mode 100644 core/src/ch/asynk/tankontank/actors/HexMap.java delete mode 100644 core/src/ch/asynk/tankontank/actors/Pawn.java create mode 100644 core/src/ch/asynk/tankontank/game/HexMap.java create mode 100644 core/src/ch/asynk/tankontank/game/Pawn.java diff --git a/core/src/ch/asynk/tankontank/actors/HexMap.java b/core/src/ch/asynk/tankontank/actors/HexMap.java deleted file mode 100644 index 722f5c7..0000000 --- a/core/src/ch/asynk/tankontank/actors/HexMap.java +++ /dev/null @@ -1,163 +0,0 @@ -package ch.asynk.tankontank.actors; - -import java.util.ArrayDeque; - -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.GridPoint2; -import com.badlogic.gdx.math.GridPoint3; - -public class HexMap extends Image -{ - static final int x0 = 83; // map offset - static final int y0 = 182; // map offset - static final int h = 110; // hex side - static final float dh = 53.6f; // hex top should be h/2 - static final int w = 189; // hex width - static final int dw = 94; // half hex should be w/2 - static final float H = h + dh; // total height - static final float slope = (dh / (float) dw); - - private int cols; - private int rows; - private ArrayDeque[][] cells; - - @SuppressWarnings("unchecked") - public HexMap(int cols, int rows, Texture texture) - { - super(texture); - cells = new ArrayDeque[rows][]; - for (int i = 0; i < rows; i++) { - if ((i % 2) == 1) cells[i] = new ArrayDeque[cols - 1]; - else cells[i] = new ArrayDeque[cols]; - } - this.cols = cols - 1; - this.rows = 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)) return null; - ArrayDeque st = cells[row][col]; - if ((st == null) || (st.size() == 0)) return null; - return st.getFirst(); - } - - public void setImageCenterAt(Image image, GridPoint2 cell) - { - float x = x0 + ((cell.x * w) + (w / 2)); - float y = y0 + ((cell.y * H) + (h / 2)); - if ((cell.y % 2) == 1) x += dw; - image.setCenterPosition(x, y); - } - - // public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 cell) - // { - // return getPawnPosAt(pawn, cell.x, cell.y); - // } - - public Vector2 getPawnPosAt(Pawn pawn, GridPoint3 cell) - { - return getPawnPosAt(pawn, cell.x, cell.y); - } - - private Vector2 getPawnPosAt(Pawn pawn, int col, int row) - { - float x = x0 + ((col * w) + ((w - pawn.getHeight()) / 2)); - float y = y0 + ((row * H) + ((h - pawn.getWidth()) / 2)); - if ((row % 2) == 1) x += dw; - return new Vector2(x, y); - } - - private void removePawnFrom(Pawn pawn, int col, int row) - { - if ((col> 0) && (row > 0)) { - ArrayDeque st = cells[row][col]; - if ((st == null) || (st.size() == 0)) - Gdx.app.error("GameScreen", "remove pawn from " + col + ";" + row + " but pawn stack is empty"); - else - st.remove(pawn); - } - } - - public void setPawnOn(Pawn pawn, GridPoint3 cell) - { - setPawnOn(pawn, cell.x, cell.y, cell.z); - } - - private void setPawnOn(Pawn pawn, int col, int row, int angle) - { - GridPoint3 prev = pawn.getHex(); - if (prev != null) removePawnFrom(pawn, prev.x, prev.y); - - Vector2 pos = getPawnPosAt(pawn, col, row); - pawn.setPosition(pos.x, pos.y); - pawn.setRotation(angle); - - ArrayDeque st = cells[row][col]; - if (st == null) st = cells[row][col] = new ArrayDeque(); - st.push(pawn); - pawn.setZIndex(st.size()); - } - - public GridPoint2 getCellAt(GridPoint2 cell, float cx, float cy) - { - // compute row - int row; - boolean oddRow = true; - float y = (cy - y0); - if (y < 0.f) { - row = -1; - } else { - row = (int) (y / H); - oddRow = ((row % 2) == 1); - } - - // compute col - int col; - float x = (cx - x0); - if (oddRow) x -= dw; - if (x < 0.f) { - col = -1; - } else { - col = (int) (x / w); - } - - // check upper boundaries - float dy = (y - (row * H)); - if (dy > h) { - dy -= h; - float dx = (x - (col * w)); - if (dx < dw) { - if ((dx * slope) < dy) { - row += 1; - if (!oddRow) col -= 1; - oddRow = !oddRow; - } - } else { - if (((w - dx) * slope) < dy) { - row += 1; - if (oddRow) col += 1; - oddRow = !oddRow; - } - } - } - - // validate cell - if ((col < 0) || (row < 0) || (row > rows) || (col > cols) || (oddRow && ((col +1)> cols))) - cell.set(-1, -1); - else - cell.set(col, row); - - return cell; - } -} diff --git a/core/src/ch/asynk/tankontank/actors/Pawn.java b/core/src/ch/asynk/tankontank/actors/Pawn.java deleted file mode 100644 index b33e049..0000000 --- a/core/src/ch/asynk/tankontank/actors/Pawn.java +++ /dev/null @@ -1,83 +0,0 @@ -package ch.asynk.tankontank.actors; - -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.Vector2; -import com.badlogic.gdx.math.GridPoint2; -import com.badlogic.gdx.math.GridPoint3; - -public class Pawn extends Image -{ - public static final int DRAGGED_Z_INDEX = 10; - private static final float MOVE_TIME = 0.3f; - - private HexMap map; - private ArrayDeque path = new ArrayDeque(); - - public Pawn(TextureRegion region, HexMap map) - { - super(region); - this.map = map; - setOrigin((getWidth() / 2.f), (getHeight() / 2.f)); - } - - public GridPoint3 getHex() - { - if (path.size() == 0) return null; - return path.getFirst(); - } - - public void moveTo(GridPoint2 hex) - { - moveTo(new GridPoint3(hex.x, hex.y, (int) getRotation())); - } - - public void moveTo(int col, int row, int angle) - { - moveTo(new GridPoint3(col, row, angle)); - } - - private void moveTo(GridPoint3 hex) - { - if ((hex.x == -1) || (hex.y == -1)) { - resetMoves(); - } else { - map.setPawnOn(this, hex); - path.push(hex); - } - } - - public void resetMoves() - { - final Pawn self = this; - final GridPoint3 finalHex = path.getLast(); - - SequenceAction seq = new SequenceAction(); - while(path.size() != 0) { - Vector2 v = map.getPawnPosAt(this, path.pop()); - seq.addAction(Actions.moveTo(v.x, v.y, MOVE_TIME)); - } - - seq.addAction( Actions.run(new Runnable() { - @Override - public void run() { - map.setPawnOn(self, finalHex); - path.push(finalHex); - } - })); - - addAction(seq); - } - - public void moveDone() - { - GridPoint3 hex = path.pop(); - path.clear(); - path.push(hex); - } -} diff --git a/core/src/ch/asynk/tankontank/game/HexMap.java b/core/src/ch/asynk/tankontank/game/HexMap.java new file mode 100644 index 0000000..7aced56 --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/HexMap.java @@ -0,0 +1,163 @@ +package ch.asynk.tankontank.game; + +import java.util.ArrayDeque; + +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.GridPoint2; +import com.badlogic.gdx.math.GridPoint3; + +public class HexMap extends Image +{ + static final int x0 = 83; // map offset + static final int y0 = 182; // map offset + static final int h = 110; // hex side + static final float dh = 53.6f; // hex top should be h/2 + static final int w = 189; // hex width + static final int dw = 94; // half hex should be w/2 + static final float H = h + dh; // total height + static final float slope = (dh / (float) dw); + + private int cols; + private int rows; + private ArrayDeque[][] cells; + + @SuppressWarnings("unchecked") + public HexMap(int cols, int rows, Texture texture) + { + super(texture); + cells = new ArrayDeque[rows][]; + for (int i = 0; i < rows; i++) { + if ((i % 2) == 1) cells[i] = new ArrayDeque[cols - 1]; + else cells[i] = new ArrayDeque[cols]; + } + this.cols = cols - 1; + this.rows = 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)) return null; + ArrayDeque st = cells[row][col]; + if ((st == null) || (st.size() == 0)) return null; + return st.getFirst(); + } + + public void setImageCenterAt(Image image, GridPoint2 cell) + { + float x = x0 + ((cell.x * w) + (w / 2)); + float y = y0 + ((cell.y * H) + (h / 2)); + if ((cell.y % 2) == 1) x += dw; + image.setCenterPosition(x, y); + } + + // public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 cell) + // { + // return getPawnPosAt(pawn, cell.x, cell.y); + // } + + public Vector2 getPawnPosAt(Pawn pawn, GridPoint3 cell) + { + return getPawnPosAt(pawn, cell.x, cell.y); + } + + private Vector2 getPawnPosAt(Pawn pawn, int col, int row) + { + float x = x0 + ((col * w) + ((w - pawn.getHeight()) / 2)); + float y = y0 + ((row * H) + ((h - pawn.getWidth()) / 2)); + if ((row % 2) == 1) x += dw; + return new Vector2(x, y); + } + + private void removePawnFrom(Pawn pawn, int col, int row) + { + if ((col> 0) && (row > 0)) { + ArrayDeque st = cells[row][col]; + if ((st == null) || (st.size() == 0)) + Gdx.app.error("GameScreen", "remove pawn from " + col + ";" + row + " but pawn stack is empty"); + else + st.remove(pawn); + } + } + + public void setPawnOn(Pawn pawn, GridPoint3 cell) + { + setPawnOn(pawn, cell.x, cell.y, cell.z); + } + + private void setPawnOn(Pawn pawn, int col, int row, int angle) + { + GridPoint3 prev = pawn.getHex(); + if (prev != null) removePawnFrom(pawn, prev.x, prev.y); + + Vector2 pos = getPawnPosAt(pawn, col, row); + pawn.setPosition(pos.x, pos.y); + pawn.setRotation(angle); + + ArrayDeque st = cells[row][col]; + if (st == null) st = cells[row][col] = new ArrayDeque(); + st.push(pawn); + pawn.setZIndex(st.size()); + } + + public GridPoint2 getCellAt(GridPoint2 cell, float cx, float cy) + { + // compute row + int row; + boolean oddRow = true; + float y = (cy - y0); + if (y < 0.f) { + row = -1; + } else { + row = (int) (y / H); + oddRow = ((row % 2) == 1); + } + + // compute col + int col; + float x = (cx - x0); + if (oddRow) x -= dw; + if (x < 0.f) { + col = -1; + } else { + col = (int) (x / w); + } + + // check upper boundaries + float dy = (y - (row * H)); + if (dy > h) { + dy -= h; + float dx = (x - (col * w)); + if (dx < dw) { + if ((dx * slope) < dy) { + row += 1; + if (!oddRow) col -= 1; + oddRow = !oddRow; + } + } else { + if (((w - dx) * slope) < dy) { + row += 1; + if (oddRow) col += 1; + oddRow = !oddRow; + } + } + } + + // validate cell + if ((col < 0) || (row < 0) || (row > rows) || (col > cols) || (oddRow && ((col +1)> cols))) + cell.set(-1, -1); + else + cell.set(col, row); + + return cell; + } +} diff --git a/core/src/ch/asynk/tankontank/game/Pawn.java b/core/src/ch/asynk/tankontank/game/Pawn.java new file mode 100644 index 0000000..804097f --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/Pawn.java @@ -0,0 +1,83 @@ +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.Vector2; +import com.badlogic.gdx.math.GridPoint2; +import com.badlogic.gdx.math.GridPoint3; + +public class Pawn extends Image +{ + public static final int DRAGGED_Z_INDEX = 10; + private static final float MOVE_TIME = 0.3f; + + private HexMap map; + private ArrayDeque path = new ArrayDeque(); + + public Pawn(TextureRegion region, HexMap map) + { + super(region); + this.map = map; + setOrigin((getWidth() / 2.f), (getHeight() / 2.f)); + } + + public GridPoint3 getHex() + { + if (path.size() == 0) return null; + return path.getFirst(); + } + + public void moveTo(GridPoint2 hex) + { + moveTo(new GridPoint3(hex.x, hex.y, (int) getRotation())); + } + + public void moveTo(int col, int row, int angle) + { + moveTo(new GridPoint3(col, row, angle)); + } + + private void moveTo(GridPoint3 hex) + { + if ((hex.x == -1) || (hex.y == -1)) { + resetMoves(); + } else { + map.setPawnOn(this, hex); + path.push(hex); + } + } + + public void resetMoves() + { + final Pawn self = this; + final GridPoint3 finalHex = path.getLast(); + + SequenceAction seq = new SequenceAction(); + while(path.size() != 0) { + Vector2 v = map.getPawnPosAt(this, path.pop()); + seq.addAction(Actions.moveTo(v.x, v.y, MOVE_TIME)); + } + + seq.addAction( Actions.run(new Runnable() { + @Override + public void run() { + map.setPawnOn(self, finalHex); + path.push(finalHex); + } + })); + + addAction(seq); + } + + public void moveDone() + { + GridPoint3 hex = path.pop(); + path.clear(); + path.push(hex); + } +} diff --git a/core/src/ch/asynk/tankontank/game/Unit.java b/core/src/ch/asynk/tankontank/game/Unit.java index aed976e..7487799 100644 --- a/core/src/ch/asynk/tankontank/game/Unit.java +++ b/core/src/ch/asynk/tankontank/game/Unit.java @@ -2,9 +2,6 @@ package ch.asynk.tankontank.game; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import ch.asynk.tankontank.actors.Pawn; -import ch.asynk.tankontank.actors.HexMap; - public class Unit extends Pawn { public int rng; diff --git a/core/src/ch/asynk/tankontank/game/UnitFactory.java b/core/src/ch/asynk/tankontank/game/UnitFactory.java index 6c646d1..0ce2a6e 100644 --- a/core/src/ch/asynk/tankontank/game/UnitFactory.java +++ b/core/src/ch/asynk/tankontank/game/UnitFactory.java @@ -4,8 +4,6 @@ import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import ch.asynk.tankontank.actors.HexMap; - public class UnitFactory { public enum UnitType diff --git a/core/src/ch/asynk/tankontank/screens/GameScreen.java b/core/src/ch/asynk/tankontank/screens/GameScreen.java index 3663ec0..96771a2 100644 --- a/core/src/ch/asynk/tankontank/screens/GameScreen.java +++ b/core/src/ch/asynk/tankontank/screens/GameScreen.java @@ -25,8 +25,8 @@ import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.ScreenViewport; import ch.asynk.tankontank.TankOnTank; -import ch.asynk.tankontank.actors.Pawn; -import ch.asynk.tankontank.actors.HexMap; +import ch.asynk.tankontank.game.Pawn; +import ch.asynk.tankontank.game.HexMap; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.UnitFactory; import ch.asynk.tankontank.game.UnitFactory.UnitType; -- cgit v1.1-2-g2b99