diff --git a/spine-as3/spine-as3-example/lib/spine-as3.swc b/spine-as3/spine-as3-example/lib/spine-as3.swc index 02e4ded81..ff39eb080 100644 Binary files a/spine-as3/spine-as3-example/lib/spine-as3.swc and b/spine-as3/spine-as3-example/lib/spine-as3.swc differ diff --git a/spine-as3/spine-as3/src/spine/animation/Animation.as b/spine-as3/spine-as3/src/spine/animation/Animation.as index 3f96d6a33..f09070b1b 100644 --- a/spine-as3/spine-as3/src/spine/animation/Animation.as +++ b/spine-as3/spine-as3/src/spine/animation/Animation.as @@ -30,10 +30,12 @@ package spine.animation { import spine.Event; import spine.Skeleton; + import flash.utils.Dictionary; public class Animation { internal var _name : String; public var _timelines : Vector.; + internal var _timelineIds : Dictionary = new Dictionary(); public var duration : Number; public function Animation(name : String, timelines : Vector., duration : Number) { @@ -41,8 +43,14 @@ package spine.animation { if (timelines == null) throw new ArgumentError("timelines cannot be null."); _name = name; _timelines = timelines; + for (var i : Number = 0; i < timelines.length; i++) + _timelineIds[timelines[i].getPropertyId()] = true; this.duration = duration; } + + public function hasTimeline(id: Number) : Boolean { + return _timelineIds[id] == true; + } public function get timelines() : Vector. { return _timelines; diff --git a/spine-as3/spine-as3/src/spine/animation/AnimationState.as b/spine-as3/spine-as3/src/spine/animation/AnimationState.as index 993e9367b..b344bf17d 100644 --- a/spine-as3/spine-as3/src/spine/animation/AnimationState.as +++ b/spine-as3/spine-as3/src/spine/animation/AnimationState.as @@ -664,11 +664,11 @@ package spine.animation { if (contained != null) { timelineMode[i] = AnimationState.SUBSEQUENT; } else if (to == null || timeline is AttachmentTimeline || timeline is DrawOrderTimeline - || timeline is EventTimeline || !hasTimeline(to, intId)) { + || timeline is EventTimeline || !to.animation.hasTimeline(intId)) { timelineMode[i] = AnimationState.FIRST; } else { for (var next : TrackEntry = to.mixingTo; next != null; next = next.mixingTo) { - if (hasTimeline(next, intId)) continue; + if (next.animation.hasTimeline(intId)) continue; if (entry.mixDuration > 0) { timelineMode[i] = AnimationState.HOLD_MIX; timelineHoldMix[i] = entry; @@ -681,13 +681,6 @@ package spine.animation { } } - private static function hasTimeline (entry: TrackEntry, id : int) : Boolean { - var timelines : Vector. = entry.animation.timelines; - for (var i : int = 0, n : int = entry.animation.timelines.length; i < n; i++) - if (timelines[i].getPropertyId() == id) return true; - return false; - } - public function getCurrent(trackIndex : int) : TrackEntry { if (trackIndex >= tracks.length) return null; return tracks[trackIndex]; diff --git a/spine-starling/spine-starling-example/lib/spine-as3.swc b/spine-starling/spine-starling-example/lib/spine-as3.swc index 02e4ded81..ff39eb080 100644 Binary files a/spine-starling/spine-starling-example/lib/spine-as3.swc and b/spine-starling/spine-starling-example/lib/spine-as3.swc differ diff --git a/spine-starling/spine-starling/lib/spine-as3.swc b/spine-starling/spine-starling/lib/spine-as3.swc index 02e4ded81..ff39eb080 100644 Binary files a/spine-starling/spine-starling/lib/spine-as3.swc and b/spine-starling/spine-starling/lib/spine-as3.swc differ