summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/game/HexMapImage.java
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2014-09-16 17:14:25 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2014-09-16 17:14:25 +0200
commitaed778eefd7dfeb5a42920c36b4101c769383f8c (patch)
tree0aefc6948e5829f685710c9cb844db1943261188 /core/src/ch/asynk/tankontank/game/HexMapImage.java
parentf61f47a2f403d39531482c036726715958b16901 (diff)
downloadRustAndDust-aed778eefd7dfeb5a42920c36b4101c769383f8c.zip
RustAndDust-aed778eefd7dfeb5a42920c36b4101c769383f8c.tar.gz
refactor
- PawnImage have no more reference to HexMap - HexMapImage is in charge of moving Pawns
Diffstat (limited to 'core/src/ch/asynk/tankontank/game/HexMapImage.java')
-rw-r--r--core/src/ch/asynk/tankontank/game/HexMapImage.java66
1 files changed, 43 insertions, 23 deletions
diff --git a/core/src/ch/asynk/tankontank/game/HexMapImage.java b/core/src/ch/asynk/tankontank/game/HexMapImage.java
index 60e218f..3a728c8 100644
--- a/core/src/ch/asynk/tankontank/game/HexMapImage.java
+++ b/core/src/ch/asynk/tankontank/game/HexMapImage.java
@@ -8,8 +8,8 @@ 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;
-import com.badlogic.gdx.math.GridPoint3;
public class HexMapImage extends Image implements HexMap
{
@@ -60,12 +60,7 @@ public class HexMapImage extends Image implements HexMap
return new Vector2(x, y);
}
- // public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 cell)
- // {
- // return getPawnPosAt(pawn, cell.x, cell.y);
- // }
-
- public Vector2 getPawnPosAt(Pawn pawn, GridPoint3 cell)
+ public Vector2 getPawnPosAt(Pawn pawn, GridPoint2 cell)
{
return getPawnPosAt(pawn, cell.x, cell.y);
}
@@ -78,6 +73,15 @@ public class HexMapImage extends Image implements HexMap
return new Vector2(x, y);
}
+ private int pushPawnAt(Pawn pawn, int col, int row)
+ {
+ ArrayDeque<Pawn> st = cells[row][col];
+ if (st == null) st = cells[row][col] = new ArrayDeque<Pawn>();
+ st.push(pawn);
+ System.out.println("pushed at: "+col+" " +row);
+ return st.size();
+ }
+
private void removePawnFrom(Pawn pawn, int col, int row)
{
if ((col> 0) && (row > 0)) {
@@ -86,31 +90,47 @@ public class HexMapImage extends Image implements HexMap
Gdx.app.error("GameScreen", "remove pawn from " + col + ";" + row + " but pawn stack is empty");
else
st.remove(pawn);
+ System.out.println("poped from: "+col+" " +row);
}
}
- public void setPawnAt(Pawn pawn, GridPoint3 cell)
+ public void movePawnTo(Pawn pawn, Vector3 coords)
{
- setPawnAt(pawn, cell.x, cell.y, cell.z);
+ GridPoint2 p = getHexAt(null, coords.x, coords.y);
+ movePawnTo(pawn, p.x, p.y, HexOrientation.KEEP);
}
- private void setPawnAt(Pawn pawn, int col, int row, int angle)
+ public void movePawnTo(final Pawn pawn, final int col, final int row, HexOrientation o)
{
- GridPoint3 prev = pawn.getBoardPosition();
+ GridPoint2 prev = getHexAt(pawn.getLastPosition());
if (prev != null) removePawnFrom(pawn, prev.x, prev.y);
- Vector2 pos = getPawnPosAt(pawn, col, row);
- pawn.setPosition(pos.x, pos.y);
- pawn.setRotation(angle);
+ 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);
+ }
+ }
- ArrayDeque<Pawn> st = cells[row][col];
- if (st == null) st = cells[row][col] = new ArrayDeque<Pawn>();
- st.push(pawn);
- pawn.setZIndex(st.size());
+ private GridPoint2 getHexAt(Vector3 v)
+ {
+ if (v == null) return null;
+ return getHexAt(null, v.x, v.y);
}
- public GridPoint2 getHexAt(GridPoint2 cell, float cx, float cy)
+ public GridPoint2 getHexAt(GridPoint2 hex, float cx, float cy)
{
+ if (hex == null) hex = new GridPoint2();
+
// compute row
int row;
boolean oddRow = true;
@@ -152,12 +172,12 @@ public class HexMapImage extends Image implements HexMap
}
}
- // validate cell
+ // validate hex
if ((col < 0) || (row < 0) || (row > rows) || (col > cols) || (oddRow && ((col +1)> cols)))
- cell.set(-1, -1);
+ hex.set(-1, -1);
else
- cell.set(col, row);
+ hex.set(col, row);
- return cell;
+ return hex;
}
}