Changed listeners to Vector.<Function>.

This commit is contained in:
NathanSweet 2013-12-21 18:44:56 +01:00
parent 5ef80af12e
commit dca388bb98
3 changed files with 34 additions and 26 deletions

View File

@ -71,19 +71,19 @@ public class Main extends Sprite {
skeleton.x = 320;
skeleton.y = 420;
skeleton.state.onStart = function (trackIndex:int) : void {
skeleton.state.onStart.push(function (trackIndex:int) : void {
trace(trackIndex + " start: " + skeleton.state.getCurrent(trackIndex));
};
skeleton.state.onEnd = function (trackIndex:int) : void {
});
skeleton.state.onEnd.push(function (trackIndex:int) : void {
trace(trackIndex + " end: " + skeleton.state.getCurrent(trackIndex));
};
skeleton.state.onComplete = function (trackIndex:int, count:int) : void {
});
skeleton.state.onComplete.push(function (trackIndex:int, count:int) : void {
trace(trackIndex + " complete: " + skeleton.state.getCurrent(trackIndex) + ", " + count);
};
skeleton.state.onEvent = function (trackIndex:int, event:Event) : void {
});
skeleton.state.onEvent.push(function (trackIndex:int, event:Event) : void {
trace(trackIndex + " event: " + skeleton.state.getCurrent(trackIndex) + ", "
+ event.data.name + ": " + event.intValue + ", " + event.floatValue + ", " + event.stringValue);
};
});
if (true) {
skeleton.state.setAnimationByName(0, "drawOrder", true);

View File

@ -40,7 +40,10 @@ public class AnimationState {
private var _data:AnimationStateData;
private var _tracks:Vector.<TrackEntry> = new Vector.<TrackEntry>();
private var _events:Vector.<Event> = new Vector.<Event>();
public var onStart:Function, onEnd:Function, onComplete:Function, onEvent:Function;
public var onStart:Vector.<Function> = new Vector.<Function>();
public var onEnd:Vector.<Function> = new Vector.<Function>();
public var onComplete:Vector.<Function> = new Vector.<Function>();
public var onEvent:Vector.<Function> = new Vector.<Function>();
public var timeScale:Number = 1;
public function AnimationState (data:AnimationStateData) {
@ -102,14 +105,16 @@ public class AnimationState {
for each (var event:Event in _events) {
if (current.onEvent != null) current.onEvent(i, event);
if (onEvent != null) onEvent(i, event);
for each (var onEventFunc:Function in onEvent)
onEventFunc(i, event);
}
// Check if completed the animation or a loop iteration.
if (loop ? (lastTime % endTime > time % endTime) : (lastTime < endTime && time >= endTime)) {
var count:int = (int)(time / endTime);
if (current.onComplete != null) current.onComplete(i, count);
if (onComplete != null) onComplete(i, count);
for each (var onCompleteFunc:Function in onComplete)
onCompleteFunc(i, count);
}
current.lastTime = current.time;
@ -128,7 +133,8 @@ public class AnimationState {
if (!current) return;
if (current.onEnd != null) current.onEnd(trackIndex);
if (onEnd != null) onEnd(trackIndex);
for each (var onEndFunc:Function in onEnd)
onEndFunc(trackIndex);
_tracks[trackIndex] = null;
}
@ -144,10 +150,11 @@ public class AnimationState {
var current:TrackEntry = expandToIndex(index);
if (current) {
current.previous = null;
if (current.onEnd != null) current.onEnd(index);
if (onEnd != null) onEnd(index);
for each (var onEndFunc:Function in onEnd)
onEndFunc(index);
entry.mixDuration = _data.getMix(current.animation, entry.animation);
if (entry.mixDuration > 0) {
entry.mixTime = 0;
@ -156,9 +163,10 @@ public class AnimationState {
}
_tracks[index] = entry;
if (entry.onStart != null) entry.onStart(index);
if (onStart != null) onStart(index);
for each (var onStartFunc:Function in onStart)
onStartFunc(index);
}
public function setAnimationByName (trackIndex:int, animationName:String, loop:Boolean) : TrackEntry {

View File

@ -44,20 +44,20 @@ public class AtlasExample extends Sprite {
skeleton.x = 320;
skeleton.y = 420;
skeleton.state.onStart = function (trackIndex:int) : void {
skeleton.state.onStart.push(function (trackIndex:int) : void {
trace(trackIndex + " start: " + skeleton.state.getCurrent(trackIndex));
};
skeleton.state.onEnd = function (trackIndex:int) : void {
});
skeleton.state.onEnd.push(function (trackIndex:int) : void {
trace(trackIndex + " end: " + skeleton.state.getCurrent(trackIndex));
};
skeleton.state.onComplete = function (trackIndex:int, count:int) : void {
});
skeleton.state.onComplete.push(function (trackIndex:int, count:int) : void {
trace(trackIndex + " complete: " + skeleton.state.getCurrent(trackIndex) + ", " + count);
};
skeleton.state.onEvent = function (trackIndex:int, event:Event) : void {
});
skeleton.state.onEvent.push(function (trackIndex:int, event:Event) : void {
trace(trackIndex + " event: " + skeleton.state.getCurrent(trackIndex) + ", "
+ event.data.name + ": " + event.intValue + ", " + event.floatValue + ", " + event.stringValue);
};
});
skeleton.state.setAnimationByName(0, "walk", true);
skeleton.state.addAnimationByName(0, "jump", false, 3);
skeleton.state.addAnimationByName(0, "walk", true, 0);