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/HexMap.java13
-rw-r--r--core/src/ch/asynk/tankontank/game/HexMapFactory.java21
-rw-r--r--core/src/ch/asynk/tankontank/game/HexMapImage.java61
3 files changed, 59 insertions, 36 deletions
diff --git a/core/src/ch/asynk/tankontank/game/HexMap.java b/core/src/ch/asynk/tankontank/game/HexMap.java
index 51c0ebb..7207270 100644
--- a/core/src/ch/asynk/tankontank/game/HexMap.java
+++ b/core/src/ch/asynk/tankontank/game/HexMap.java
@@ -27,4 +27,17 @@ public interface HexMap
public void movePawnTo(Pawn pawn, int col, int row, HexOrientation 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/HexMapFactory.java b/core/src/ch/asynk/tankontank/game/HexMapFactory.java
index 18706bf..a5169e3 100644
--- a/core/src/ch/asynk/tankontank/game/HexMapFactory.java
+++ b/core/src/ch/asynk/tankontank/game/HexMapFactory.java
@@ -11,15 +11,32 @@ public class HexMapFactory
MAP_B
}
+ private static HexMap.Config config()
+ {
+ HexMap.Config cfg = new HexMap.Config();
+ cfg.cols = 11;
+ cfg.rows = 9;
+ cfg.x0 = 83;
+ cfg.y0 = 182;
+ cfg.h = 110;
+ cfg.dh = 53.6f;
+ cfg.w = 189;
+ cfg.dw = 94;
+ cfg.H = cfg.h + cfg.dh;
+ cfg.slope = (cfg.dh / (float) cfg.dw);
+
+ return cfg;
+ }
+
public static HexMap getMap(AssetManager manager, MapType t)
{
HexMap m = null;
switch(t) {
case MAP_A:
- m = new HexMapImage(11, 9, manager.get("images/map_a.png", Texture.class));
+ m = new HexMapImage(config(), manager.get("images/map_a.png", Texture.class));
break;
case MAP_B:
- m = new HexMapImage(11, 9, manager.get("images/map_b.png", Texture.class));
+ m = new HexMapImage(config(), manager.get("images/map_b.png", Texture.class));
break;
}
diff --git a/core/src/ch/asynk/tankontank/game/HexMapImage.java b/core/src/ch/asynk/tankontank/game/HexMapImage.java
index 0916808..2f14ef1 100644
--- a/core/src/ch/asynk/tankontank/game/HexMapImage.java
+++ b/core/src/ch/asynk/tankontank/game/HexMapImage.java
@@ -13,30 +13,23 @@ import com.badlogic.gdx.math.GridPoint2;
public class HexMapImage extends Image implements HexMap
{
- 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 HexMap.Config cfg;
private int cols;
private int rows;
private ArrayDeque<Pawn>[][] cells;
@SuppressWarnings("unchecked")
- public HexMapImage(int cols, int rows, Texture texture)
+ public HexMapImage(HexMap.Config cfg, 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];
+ cells = new ArrayDeque[cfg.rows][];
+ for (int i = 0; i < cfg.rows; i++) {
+ if ((i % 2) == 1) cells[i] = new ArrayDeque[cfg.cols - 1];
+ else cells[i] = new ArrayDeque[cfg.cols];
}
- this.cols = cols - 1;
- this.rows = rows - 1;
+ this.cfg = cfg;
+ this.cols = cfg.cols - 1;
+ this.rows = cfg.rows - 1;
}
public Pawn getTopPawnAt(GridPoint2 cell)
@@ -54,9 +47,9 @@ public class HexMapImage extends Image implements HexMap
public Vector2 getHexCenterAt(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;
+ 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);
}
@@ -67,9 +60,9 @@ public class HexMapImage extends Image implements HexMap
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;
+ 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);
}
@@ -139,37 +132,37 @@ public class HexMapImage extends Image implements HexMap
// compute row
int row;
boolean oddRow = true;
- float y = (cy - y0);
+ float y = (cy - cfg.y0);
if (y < 0.f) {
row = -1;
} else {
- row = (int) (y / H);
+ row = (int) (y / cfg.H);
oddRow = ((row % 2) == 1);
}
// compute col
int col;
- float x = (cx - x0);
- if (oddRow) x -= dw;
+ float x = (cx - cfg.x0);
+ if (oddRow) x -= cfg.dw;
if (x < 0.f) {
col = -1;
} else {
- col = (int) (x / w);
+ col = (int) (x / cfg.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) {
+ 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 (((w - dx) * slope) < dy) {
+ if (((cfg.w - dx) * cfg.slope) < dy) {
row += 1;
if (oddRow) col += 1;
oddRow = !oddRow;