summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/ch/asynk/tankontank/game/hud/Engagement.java89
1 files changed, 46 insertions, 43 deletions
diff --git a/core/src/ch/asynk/tankontank/game/hud/Engagement.java b/core/src/ch/asynk/tankontank/game/hud/Engagement.java
index 6522bde..d8a223e 100644
--- a/core/src/ch/asynk/tankontank/game/hud/Engagement.java
+++ b/core/src/ch/asynk/tankontank/game/hud/Engagement.java
@@ -13,16 +13,18 @@ import ch.asynk.tankontank.engine.gfx.animations.DiceAnimation;
public class Engagement extends Patch implements Animation
{
+ private enum State { ROLL1, MOVE, ROLL2, RESULT };
+
public static int FLAG_HEIGHT = 24;
public static int OK_OFFSET = 10;
public static int PADDING = 20;
public static int VSPACING = 10;
public static int HSPACING = 5;
- public static float REROLL_DELAY = 0.3f;
+ public static float MOVE_STEP = 2f;
+ private State state;
private boolean reroll;
- private boolean roll2;
- private float delay;
+ private float rerollY;
private Sprite usFlag;
private Sprite geFlag;
private Sprite winner;
@@ -92,9 +94,12 @@ public class Engagement extends Patch implements Animation
else
winner = ((e.attacker == Army.US) ? geFlag : usFlag);
+ this.position = position;
+ placeElements();
+ state = State.ROLL1;
reroll = (e.d3 != 0);
- delay = 0f;
+
d1Animation.set(e.d1);
d2Animation.set(e.d2);
if (reroll) {
@@ -102,9 +107,6 @@ public class Engagement extends Patch implements Animation
d4Animation.set(e.d4);
}
- this.position = position;
- placeElements();
-
visible = true;
}
@@ -138,29 +140,16 @@ public class Engagement extends Patch implements Animation
attackImg.setPosition(x, y);
x += (attackImg.getWidth() + HSPACING);
d1Animation.setPosition(x, y);
+ d3Animation.setPosition(x, y);
x += (d1Animation.getWidth() + HSPACING);
d2Animation.setPosition(x, (y));
+ d4Animation.setPosition(x, y);
x += (d1Animation.getWidth() + HSPACING);
y = (y + (attackImg.getHeight() / 2f) - (attack.getHeight() / 2f));
attack.setPosition(x, y);
attackR.setPosition(defenseR.getX(), y);
- if (reroll) {
- d3Animation.setPosition(x, y);
- d4Animation.setPosition(x, y);
- }
- }
-
- private void reroll()
- {
- // hud.notify("Ace re-roll");
- roll2 = true;
- float h = (getHeight() + d1Animation.getHeight() + VSPACING);
- setPosition(getX(), getY(), getWidth(), h);
- d3Animation.setPosition(d1Animation.getX(), d1Animation.getY());
- d4Animation.setPosition(d2Animation.getX(), d2Animation.getY());
- d1Animation.setPosition(d1Animation.getX(), (d1Animation.getY() + d1Animation.getHeight() + VSPACING));
- d2Animation.setPosition(d2Animation.getX(), (d2Animation.getY() + d2Animation.getHeight() + VSPACING));
+ rerollY = (d1Animation.getY() + d1Animation.getHeight() + VSPACING);
}
public boolean hit(float x, float y)
@@ -174,17 +163,40 @@ public class Engagement extends Patch implements Animation
public boolean animate(float delta)
{
if (!visible) return true;
- if (!roll2) {
+ if (state == State.ROLL1) {
d1Animation.animate(delta);
d2Animation.animate(delta);
- } else {
- if (delay < REROLL_DELAY) {
- delay += delta;
- return false;
+ if (d1Animation.isDone() && d2Animation.isDone()) {
+ if (reroll)
+ state = State.MOVE;
+ else
+ state = State.RESULT;
+ }
+ }
+
+ if (state == State.MOVE) {
+ float y = (d1Animation.getY() + MOVE_STEP);
+ if (y >= rerollY) {
+ y = rerollY;
+ state = State.ROLL2;
}
- d3Animation.animate(delta);
- d4Animation.animate(delta);
+ setPosition(getX(), getY(), getWidth(), (y + d1Animation.getHeight() + VSPACING));
+ d1Animation.setPosition(d1Animation.getX(), y);
+ d2Animation.setPosition(d2Animation.getX(), y);
}
+
+ if (state == State.ROLL2) {
+ if (d1Animation.getY() < rerollY) {
+ d1Animation.setPosition(d1Animation.getX(), (d1Animation.getY() + d1Animation.getHeight() + VSPACING));
+ d2Animation.setPosition(d2Animation.getX(), (d2Animation.getY() + d2Animation.getHeight() + VSPACING));
+ } else {
+ d3Animation.animate(delta);
+ d4Animation.animate(delta);
+ if (d3Animation.isDone() && d4Animation.isDone())
+ state = State.RESULT;
+ }
+ }
+
return false;
}
@@ -211,7 +223,7 @@ public class Engagement extends Patch implements Animation
attackImg.draw(batch);
d1Animation.draw(batch);
d2Animation.draw(batch);
- if (roll2) {
+ if ((state == State.ROLL2) || (state == State.RESULT)) {
d3Animation.draw(batch);
d4Animation.draw(batch);
}
@@ -220,18 +232,9 @@ public class Engagement extends Patch implements Animation
defense.draw(batch);
defenseR.draw(batch);
okBtn.draw(batch);
- if (d1Animation.isDone() && d2Animation.isDone()) {
- if (reroll) {
- if (!roll2)
- reroll();
- if (d3Animation.isDone() && d4Animation.isDone()) {
- attackR.draw(batch);
- winner.draw(batch);
- }
- } else {
- attackR.draw(batch);
- winner.draw(batch);
- }
+ if (state == State.RESULT) {
+ attackR.draw(batch);
+ winner.draw(batch);
}
}