diff options
Diffstat (limited to 'core/src/ch/asynk/tankontank')
-rw-r--r-- | core/src/ch/asynk/tankontank/engine/Board.java | 40 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Ctrl.java | 3 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 41 |
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()) |