From 69dee7fd17f76397daa6e74eb6d78110aaa35201 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= <jeremy@asynk.ch>
Date: Fri, 20 Feb 2015 00:58:27 +0100
Subject: Board,Map,Ctrl: move annimation count to Board

---
 core/src/ch/asynk/tankontank/engine/Board.java       | 20 ++++++++++++++++----
 core/src/ch/asynk/tankontank/game/Ctrl.java          | 10 +---------
 core/src/ch/asynk/tankontank/game/Map.java           | 14 ++++++++++----
 .../ch/asynk/tankontank/game/states/StateBreak.java  |  1 -
 .../ch/asynk/tankontank/game/states/StateEngage.java |  1 -
 .../ch/asynk/tankontank/game/states/StateMove.java   |  1 -
 .../asynk/tankontank/game/states/StatePromote.java   |  1 -
 .../ch/asynk/tankontank/game/states/StateRotate.java |  1 -
 .../asynk/tankontank/game/states/StateWithdraw.java  |  1 -
 9 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java
index b307ee7..e7e3105 100644
--- a/core/src/ch/asynk/tankontank/engine/Board.java
+++ b/core/src/ch/asynk/tankontank/engine/Board.java
@@ -218,9 +218,20 @@ public abstract class Board implements Disposable, Animation
 
     protected void addAnimation(Animation a)
     {
+        animationCount += 1;
         nextAnimations.add(a);
     }
 
+    protected void animationDone()
+    {
+        animationCount -= 1;
+    }
+
+    public int animationCount()
+    {
+        return animationCount;
+    }
+
     private void stats()
     {
         boolean print = false;
@@ -230,10 +241,11 @@ public abstract class Board implements Disposable, Animation
             print = true;
         }
 
-        if (animationCount != animations.size()) {
-            animationCount = animations.size();
-            print = true;
-        }
+        // FIXME this will never be false
+        // if (animationCount != animations.size()) {
+        //     animationCount = animations.size();
+        //     print = true;
+        // }
 
         if (print)
             Gdx.app.debug("Board", " tiles:" + tileCount + " pawns:" + pawnCount + " animations:" + animationCount);
diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java
index fb9495e..d4bd002 100644
--- a/core/src/ch/asynk/tankontank/game/Ctrl.java
+++ b/core/src/ch/asynk/tankontank/game/Ctrl.java
@@ -105,16 +105,8 @@ public class Ctrl implements Disposable
         return (state != selectState);
     }
 
-    public void setAnimationCount(int count)
+    public void animationsOver()
     {
-        animationCount = count;
-    }
-
-    public void animationDone()
-    {
-        animationCount -= 1;
-        if (animationCount > 0)
-            return;
         if (hud.dialogActive())
             return;
         leaveAnimationState();
diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java
index b86b366..2faa217 100644
--- a/core/src/ch/asynk/tankontank/game/Map.java
+++ b/core/src/ch/asynk/tankontank/game/Map.java
@@ -463,12 +463,15 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
         });
     }
 
-    private void animationDone()
+    @Override
+    protected void animationDone()
     {
+        soundId = -1;
+        super.animationDone();
+        if (animationCount() == 0)
+            ctrl.animationsOver();
         if (soundId >= 0)
             addAnimation( SoundAnimation.get(SoundAnimation.Action.FADE_OUT, sound, soundId, ctrl.cfg.fxVolume, 0.5f));
-        soundId = -1;
-        ctrl.animationDone();
     }
 
     private void addEngagementAnimation(Unit target)
@@ -577,7 +580,10 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS
             unclaim(e.defender.getHex());
             removePawn(e.defender);
             destroy.set(2f, e.defender);
-            addAnimation(destroy);
+            AnimationSequence seq = AnimationSequence.get(2);
+            seq.addAnimation(destroy);
+            seq.addAnimation(notifyDoneAnimation(e.defender));
+            addAnimation(seq);
         }
 
         if ((activatedUnits.size() == 1) && e.attacker.isA(Unit.UnitType.AT_GUN) && e.defender.isHardTarget())
diff --git a/core/src/ch/asynk/tankontank/game/states/StateBreak.java b/core/src/ch/asynk/tankontank/game/states/StateBreak.java
index 31b6315..9b87c23 100644
--- a/core/src/ch/asynk/tankontank/game/states/StateBreak.java
+++ b/core/src/ch/asynk/tankontank/game/states/StateBreak.java
@@ -83,7 +83,6 @@ public class StateBreak extends StateCommon
         if (map.pathBuilder.build(to) == 1) {
             map.pathBuilder.orientation = o;
             map.moveUnit(activeUnit);
-            ctrl.setAnimationCount(1);
             ctrl.setAfterAnimationState(StateType.DONE);
         } else
             TankOnTank.debug("That's very wrong there should be only one path");
diff --git a/core/src/ch/asynk/tankontank/game/states/StateEngage.java b/core/src/ch/asynk/tankontank/game/states/StateEngage.java
index 048dbef..865907e 100644
--- a/core/src/ch/asynk/tankontank/game/states/StateEngage.java
+++ b/core/src/ch/asynk/tankontank/game/states/StateEngage.java
@@ -64,7 +64,6 @@ public class StateEngage extends StateCommon
         }
 
         activeUnit.showTarget();
-        ctrl.setAnimationCount(map.activatedUnits.size());
         ctrl.setAfterAnimationState(nextState);
         return StateType.ANIMATION;
     }
diff --git a/core/src/ch/asynk/tankontank/game/states/StateMove.java b/core/src/ch/asynk/tankontank/game/states/StateMove.java
index cce19a6..9a8195d 100644
--- a/core/src/ch/asynk/tankontank/game/states/StateMove.java
+++ b/core/src/ch/asynk/tankontank/game/states/StateMove.java
@@ -76,7 +76,6 @@ public class StateMove extends StateCommon
         int n = map.activatedUnits.size();
         if (n == 0)
             return StateType.ABORT;
-        ctrl.setAnimationCount(n);
         map.revertMoves();
         return StateType.ANIMATION;
     }
diff --git a/core/src/ch/asynk/tankontank/game/states/StatePromote.java b/core/src/ch/asynk/tankontank/game/states/StatePromote.java
index 81d6d7e..9f327e7 100644
--- a/core/src/ch/asynk/tankontank/game/states/StatePromote.java
+++ b/core/src/ch/asynk/tankontank/game/states/StatePromote.java
@@ -7,7 +7,6 @@ public class StatePromote extends StateCommon
     @Override
     public void enter(StateType prevState)
     {
-        ctrl.setAnimationCount(1);
         ctrl.setAfterAnimationState(StateType.DONE);
         ctrl.setState(StateType.ANIMATION);
         map.promoteUnit(selectedUnit);
diff --git a/core/src/ch/asynk/tankontank/game/states/StateRotate.java b/core/src/ch/asynk/tankontank/game/states/StateRotate.java
index 6b60dfb..d297840 100644
--- a/core/src/ch/asynk/tankontank/game/states/StateRotate.java
+++ b/core/src/ch/asynk/tankontank/game/states/StateRotate.java
@@ -73,7 +73,6 @@ public class StateRotate extends StateCommon
         if (map.moveUnit(activeUnit) > 0)
             whenDone = StateType.MOVE;
 
-        ctrl.setAnimationCount(1);
         ctrl.setAfterAnimationState(whenDone);
         return StateType.ANIMATION;
     }
diff --git a/core/src/ch/asynk/tankontank/game/states/StateWithdraw.java b/core/src/ch/asynk/tankontank/game/states/StateWithdraw.java
index 43c38cc..87c33b8 100644
--- a/core/src/ch/asynk/tankontank/game/states/StateWithdraw.java
+++ b/core/src/ch/asynk/tankontank/game/states/StateWithdraw.java
@@ -29,7 +29,6 @@ public class StateWithdraw extends StateCommon
         if (activeUnit == null)
             activeUnit = selectedUnit;
 
-        ctrl.setAnimationCount(1);
         ctrl.setAfterAnimationState(withdraw(activeUnit));
         return StateType.ANIMATION;
     }
-- 
cgit v1.1-2-g2b99