OSDN Git Service

[fixed] Parallel and Sequence to properly call the completion listeners on sub Actions.
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Fri, 7 Jan 2011 06:00:19 +0000 (06:00 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Fri, 7 Jan 2011 06:00:19 +0000 (06:00 +0000)
gdx/src/com/badlogic/gdx/scenes/scene2d/actions/Parallel.java
gdx/src/com/badlogic/gdx/scenes/scene2d/actions/Sequence.java

index 677178f..d4c7f89 100644 (file)
@@ -30,6 +30,8 @@ public class Parallel extends Action {
        public static Parallel $ (Action... actions) {\r
                Parallel action = pool.add();\r
                action.actions.clear();\r
+               if(action.finished == null || action.finished.length < actions.length) \r
+                       action.finished = new boolean[actions.length];\r
                int len = actions.length;\r
                for (int i = 0; i < len; i++)\r
                        action.actions.add(actions[i]);\r
@@ -37,6 +39,7 @@ public class Parallel extends Action {
        }\r
 \r
        protected final List<Action> actions = new ArrayList<Action>();\r
+       protected boolean[] finished;\r
 \r
        @Override public void setTarget (Actor actor) {\r
                int len = actions.size();\r
@@ -46,8 +49,16 @@ public class Parallel extends Action {
 \r
        @Override public void act (float delta) {\r
                int len = actions.size();\r
-               for (int i = 0; i < len; i++)\r
-                       if (!actions.get(i).isDone()) actions.get(i).act(delta);\r
+               for (int i = 0; i < len; i++) {\r
+                       if (!actions.get(i).isDone()) {\r
+                               actions.get(i).act(delta);\r
+                       } else {\r
+                               if(!finished[i]) {\r
+                                       actions.get(i).finish();\r
+                                       finished[i] = true;\r
+                               }\r
+                       }\r
+               }\r
        }\r
 \r
        @Override public boolean isDone () {\r
@@ -60,8 +71,10 @@ public class Parallel extends Action {
        @Override public void finish () {\r
                pool.removeValue(this, true);\r
                int len = 0;\r
-               for (int i = 0; i < len; i++)\r
-                       actions.get(i).finish();\r
+               for (int i = 0; i < len; i++) {\r
+                       if(!finished[i])\r
+                               actions.get(i).finish();\r
+               }\r
                if(listener != null)\r
                        listener.completed(this);\r
        }\r
@@ -70,6 +83,9 @@ public class Parallel extends Action {
                Parallel action = pool.add();\r
                action.actions.clear();\r
                int len = actions.size();\r
+               for(int i = 0; i < len; i++)\r
+                       action.finished[i] = false;\r
+               len = actions.size();\r
                for (int i = 0; i < len; i++)\r
                        action.actions.add(actions.get(i).copy());\r
                return action;\r
index ffc9081..882f466 100644 (file)
@@ -54,6 +54,7 @@ public class Sequence extends Action {
 \r
                actions.get(currAction).act(delta);\r
                if (actions.get(currAction).isDone()) {\r
+                       actions.get(currAction).finish();\r
                        currAction++;\r
                        if (currAction < actions.size()) actions.get(currAction).setTarget(target);\r
                }\r
@@ -65,9 +66,7 @@ public class Sequence extends Action {
 \r
        @Override public void finish () {\r
                pool.removeValue(this, true);\r
-               int len = 0;\r
-               for (int i = 0; i < len; i++)\r
-                       actions.get(i).finish();\r
+               int len = 0;            \r
                if(listener != null)\r
                        listener.completed(this);\r
        }\r