summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/src/ch/asynk/tankontank/engine/Board.java40
-rw-r--r--core/src/ch/asynk/tankontank/game/Ctrl.java3
-rw-r--r--core/src/ch/asynk/tankontank/game/Map.java41
3 files changed, 32 insertions, 52 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java
index e7e3105..b11eae4 100644
--- a/core/src/ch/asynk/tankontank/engine/Board.java
+++ b/core/src/ch/asynk/tankontank/engine/Board.java
@@ -103,7 +103,6 @@ public abstract class Board implements Disposable, Animation
initSides();
this.selectedTile = selectedTile;
- animations.add(selectedTile);
}
private void initSides()
@@ -216,20 +215,16 @@ public abstract class Board implements Disposable, Animation
return t;
}
+ protected abstract void animationsOver();
+
protected void addAnimation(Animation a)
{
- animationCount += 1;
nextAnimations.add(a);
}
- protected void animationDone()
- {
- animationCount -= 1;
- }
-
public int animationCount()
{
- return animationCount;
+ return animations.size();
}
private void stats()
@@ -241,11 +236,10 @@ public abstract class Board implements Disposable, Animation
print = true;
}
- // FIXME this will never be false
- // if (animationCount != animations.size()) {
- // animationCount = animations.size();
- // print = true;
- // }
+ if (animationCount != animations.size()) {
+ animationCount = animations.size();
+ print = true;
+ }
if (print)
Gdx.app.debug("Board", " tiles:" + tileCount + " pawns:" + pawnCount + " animations:" + animationCount);
@@ -253,18 +247,22 @@ public abstract class Board implements Disposable, Animation
public boolean animate(float delta)
{
-
+ boolean over = (animations.size() > 0);
Iterator<Animation> iter = animations.iterator();
while (iter.hasNext()) {
Animation a = iter.next();
if (a.animate(delta))
iter.remove();
}
+ if (over && (animations.size() == 0))
+ animationsOver();
for (int i = 0, n = nextAnimations.size(); i < n; i++)
animations.add(nextAnimations.get(i));
nextAnimations.clear();
+ selectedTile.animate(delta);
+
return true;
}
@@ -285,6 +283,8 @@ public abstract class Board implements Disposable, Animation
while (animationIter.hasNext())
animationIter.next().draw(batch);
+ selectedTile.draw(batch);
+
if (transform)
batch.setTransformMatrix(prevTransform);
}
@@ -445,14 +445,13 @@ public abstract class Board implements Disposable, Animation
});
}
- protected void movePawn(final Pawn pawn, Move move, RunnableAnimation whenDone, MoveToAnimationCb cb)
+ protected void movePawn(final Pawn pawn, Move move, MoveToAnimationCb cb)
{
pawn.move(move);
removePawn(pawn);
- AnimationSequence seq = pawn.getMoveAnimation(move.iterator(), (move.steps() + 2), cb);
+ AnimationSequence seq = pawn.getMoveAnimation(move.iterator(), (move.steps() + 1), cb);
seq.addAnimation(getSetPawnOntoAnimation(pawn));
- seq.addAnimation(whenDone);
addAnimation(seq);
}
@@ -462,19 +461,16 @@ public abstract class Board implements Disposable, Animation
setPawnOnto(pawn, move.to, move.orientation);
}
- protected void revertLastPawnMove(final Pawn pawn, RunnableAnimation whenDone)
+ protected void revertLastPawnMove(final Pawn pawn)
{
removePawn(pawn);
- AnimationSequence seq = pawn.getRevertLastMoveAnimation(2);
- seq.addAnimation(RunnableAnimation.get(pawn, new Runnable() {
+ addAnimation(RunnableAnimation.get(pawn, new Runnable() {
@Override
public void run() {
pushPawnOnto(pawn, pawn.getTile());
}
}));
- seq.addAnimation(whenDone);
- addAnimation(seq);
pawn.revertLastMove();
}
diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java
index d4bd002..b410651 100644
--- a/core/src/ch/asynk/tankontank/game/Ctrl.java
+++ b/core/src/ch/asynk/tankontank/game/Ctrl.java
@@ -109,7 +109,8 @@ public class Ctrl implements Disposable
{
if (hud.dialogActive())
return;
- leaveAnimationState();
+ if (stateType == StateType.ANIMATION)
+ leaveAnimationState();
}
private void leaveAnimationState()
diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java
index 2faa217..6be1a9c 100644
--- a/core/src/ch/asynk/tankontank/game/Map.java
+++ b/core/src/ch/asynk/tankontank/game/Map.java
@@ -261,12 +261,12 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
switch(move.type) {
case REGULAR:
initMove(unit);
- movePawn(unit, move, notifyDoneAnimation(unit), this);
+ movePawn(unit, move, this);
r = moveableUnits.size();
break;
case EXIT:
initMove(unit);
- movePawn(unit, move, notifyDoneAnimation(unit), this);
+ movePawn(unit, move, this);
ctrl.player.unitWithdraw(unit);
r = moveableUnits.size();
break;
@@ -300,7 +300,6 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
@Override
public void run() {
player.promote(unit);
- animationDone();
}
}));
addAnimation(seq);
@@ -395,7 +394,7 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
{
for (Unit unit: activatedUnits) {
TankOnTank.debug(" revertMove() " + unit);
- revertLastPawnMove(unit, notifyDoneAnimation(unit));
+ revertLastPawnMove(unit);
commands.dispose(unit, Command.CommandType.MOVE);
}
activatedUnits.clear();
@@ -453,25 +452,15 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
soundId = sound.play(ctrl.cfg.fxVolume);
}
- private RunnableAnimation notifyDoneAnimation(final Unit unit)
- {
- return RunnableAnimation.get(unit, new Runnable() {
- @Override
- public void run() {
- animationDone();
- }
- });
- }
-
@Override
- protected void animationDone()
+ protected void animationsOver()
{
- soundId = -1;
- super.animationDone();
- if (animationCount() == 0)
- ctrl.animationsOver();
- if (soundId >= 0)
+ if (soundId >= 0) {
addAnimation( SoundAnimation.get(SoundAnimation.Action.FADE_OUT, sound, soundId, ctrl.cfg.fxVolume, 0.5f));
+ soundId = -1;
+ return;
+ }
+ ctrl.animationsOver();
}
private void addEngagementAnimation(Unit target)
@@ -480,14 +469,11 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
Hex to = target.getHex();
for (Unit u : activatedUnits) {
Hex from = u.getHex();
- AnimationSequence seq = AnimationSequence.get(2);
float halfWidth = (u.getWidth() / 2f);
if (u.isA(Unit.UnitType.INFANTRY))
- seq.addAnimation(InfantryFireAnimation.get(ctrl.cfg.fxVolume, from.getX(), from.getY(), to.getX(), to.getY(), halfWidth));
+ addAnimation(InfantryFireAnimation.get(ctrl.cfg.fxVolume, from.getX(), from.getY(), to.getX(), to.getY(), halfWidth));
else
- seq.addAnimation(TankFireAnimation.get(ctrl.cfg.fxVolume, from.getX(), from.getY(), to.getX(), to.getY(), halfWidth));
- seq.addAnimation(notifyDoneAnimation(target));
- addAnimation(seq);
+ addAnimation(TankFireAnimation.get(ctrl.cfg.fxVolume, from.getX(), from.getY(), to.getX(), to.getY(), halfWidth));
}
}
@@ -580,10 +566,7 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
unclaim(e.defender.getHex());
removePawn(e.defender);
destroy.set(2f, e.defender);
- AnimationSequence seq = AnimationSequence.get(2);
- seq.addAnimation(destroy);
- seq.addAnimation(notifyDoneAnimation(e.defender));
- addAnimation(seq);
+ addAnimation(destroy);
}
if ((activatedUnits.size() == 1) && e.attacker.isA(Unit.UnitType.AT_GUN) && e.defender.isHardTarget())