starling-framework
Version:
A fast, productive library for 2D cross-platform development.
285 lines (270 loc) • 9.95 kB
JavaScript
// Class: starling.animation.Juggler
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
var $bind = require("./../../bind_stub").default;
function starling_animation_IAnimatable() {return require("./../../starling/animation/IAnimatable");}
function starling_events_EventDispatcher() {return require("./../../starling/events/EventDispatcher");}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
function starling_animation_Tween() {return require("./../../starling/animation/Tween");}
function starling_animation_DelayedCall() {return require("./../../starling/animation/DelayedCall");}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));}
function Type() {return require("./../../Type");}
function Reflect() {return require("./../../Reflect");}
// Constructor
var Juggler = function() {
this.__elapsedTime = 0;
this.__timeScale = 1.0;
this.__objects = (openfl__$Vector_Vector_$Impl_$().default)._new();
this.__objectIDs = (openfl__$Vector_Vector_$Impl_$().default)._new();
}
// Meta
Juggler.__name__ = "starling.animation.Juggler";
Juggler.__isInterface__ = false;
Juggler.__interfaces__ = [(starling_animation_IAnimatable().default)];
Juggler.prototype = {
add: function(object) {
return this.addWithID(object,Juggler.getNextID());
},
addWithID: function(object,objectID) {
if(object != null && !this.contains(object)) {
var dispatcher = ((object) instanceof (starling_events_EventDispatcher().default)) ? object : null;
if(dispatcher != null) {
dispatcher.addEventListener("removeFromJuggler",$bind(this,this.onRemoveRequested));
}
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objects,this.__objects.length,object);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objectIDs,this.__objectIDs.length,objectID);
return objectID;
} else {
return 0;
}
},
contains: function(object) {
var this1 = this.__objects;
return (Array.prototype.indexOf.call)(this1,object,0) != -1;
},
get_isEmpty: function() {
return this.__objects.length == 0;
},
remove: function(object) {
var this1 = this.__objects;
var objectIndex = (Array.prototype.indexOf.call)(this1,object,0);
if(objectIndex != -1) {
return this.removeByIndex(objectIndex);
}
return 0;
},
removeByIndex: function(index) {
var object = this.__objects[index];
var objectID = this.__objectIDs[index];
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objects,index,null);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objectIDs,index,0);
var dispatcher = ((object) instanceof (starling_events_EventDispatcher().default)) ? object : null;
if(dispatcher != null) {
dispatcher.removeEventListener("removeFromJuggler",$bind(this,this.onRemoveRequested));
dispatcher.dispatchEventWith("removedFromJuggler");
}
return objectID;
},
removeByID: function(objectID) {
var this1 = this.__objectIDs;
var objectIndex = (Array.prototype.indexOf.call)(this1,objectID,0);
if(objectIndex != -1) {
return this.removeByIndex(objectIndex);
}
return 0;
},
removeTweens: function(target) {
if(target == null) {
return;
}
var tween;
var i = this.__objects.length - 1;
while(i >= 0) {
tween = ((this.__objects[i]) instanceof (starling_animation_Tween().default)) ? this.__objects[i] : null;
if(tween != null && tween.get_target() == target) {
this.removeByIndex(i);
}
--i;
}
},
removeDelayedCalls: function(callback) {
if(callback == null) {
return;
}
var delayedCall;
var i = this.__objects.length - 1;
while(i >= 0) {
delayedCall = ((this.__objects[i]) instanceof (starling_animation_DelayedCall().default)) ? this.__objects[i] : null;
if(delayedCall != null && delayedCall.__callback == callback) {
this.removeByIndex(i);
}
--i;
}
},
containsTweens: function(target) {
if(target != null) {
var tween;
var i = this.__objects.length - 1;
while(i >= 0) {
tween = ((this.__objects[i]) instanceof (starling_animation_Tween().default)) ? this.__objects[i] : null;
if(tween != null && tween.get_target() == target) {
return true;
}
--i;
}
}
return false;
},
containsDelayedCalls: function(callback) {
if(callback != null) {
var delayedCall;
var i = this.__objects.length - 1;
while(i >= 0) {
delayedCall = ((this.__objects[i]) instanceof (starling_animation_DelayedCall().default)) ? this.__objects[i] : null;
if(delayedCall != null && delayedCall.__callback == callback) {
return true;
}
--i;
}
}
return false;
},
purge: function() {
var i = this.__objects.length - 1;
while(i >= 0) {
this.removeByIndex(i);
--i;
}
},
delayCall: function(call,delay,args) {
if(call == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("call must not be null"));
}
if(args == null) {
args = [];
}
var delayedCall = (starling_animation_DelayedCall().default).fromPool(call,delay,args);
delayedCall.addEventListener("removeFromJuggler",$bind(this,this.onPooledDelayedCallRemovedFromJuggler));
return this.add(delayedCall);
},
repeatCall: function(call,interval,repeatCount,args) {
if(repeatCount == null) {
repeatCount = 0;
}
if(call == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("call must not be null"));
}
if(args == null) {
args = [];
}
var delayedCall = (starling_animation_DelayedCall().default).fromPool(call,interval,args);
delayedCall.set_repeatCount(repeatCount);
delayedCall.addEventListener("removeFromJuggler",$bind(this,this.onPooledDelayedCallRemovedFromJuggler));
return this.add(delayedCall);
},
onPooledDelayedCallRemovedFromJuggler: function(event) {
(starling_animation_DelayedCall().default).toPool(event.target);
},
tween: function(target,time,properties) {
if(target == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("target must not be null"));
}
var tween = (starling_animation_Tween().default).fromPool(target,time);
var value;
if(Juggler.sTweenInstanceFields == null) {
Juggler.sTweenInstanceFields = (Type().default).getInstanceFields((starling_animation_Tween().default));
}
var _g = 0;
var _g1 = (Reflect().default).fields(properties);
while(_g < _g1.length) {
var property = _g1[_g];
++_g;
value = (Reflect().default).field(properties,property);
if(Juggler.sTweenInstanceFields.indexOf("set_" + property) != -1) {
(Reflect().default).setProperty(tween,property,value);
} else if((Reflect().default).hasField(target,property) || (Reflect().default).getProperty(target,property) != null) {
tween.animate(property,value);
} else {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Invalid property: " + property));
}
}
tween.addEventListener("removeFromJuggler",$bind(this,this.onPooledTweenRemovedFromJuggler));
return this.add(tween);
},
onPooledTweenRemovedFromJuggler: function(event) {
(starling_animation_Tween().default).toPool(event.target);
},
advanceTime: function(time) {
var numObjects = this.__objects.length;
var currentIndex = 0;
var i = 0;
this.__elapsedTime += time;
time *= this.__timeScale;
if(numObjects == 0 || time == 0) {
return;
}
var object;
while(i < numObjects) {
object = this.__objects[i];
if(object != null) {
if(currentIndex != i) {
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objects,currentIndex,object);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objectIDs,currentIndex,this.__objectIDs[i]);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objects,i,null);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objectIDs,i,0);
}
object.advanceTime(time);
++currentIndex;
}
++i;
}
if(currentIndex != i) {
numObjects = this.__objects.length;
while(i < numObjects) {
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objects,currentIndex,this.__objects[i]);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__objectIDs,currentIndex,this.__objectIDs[i]);
++currentIndex;
++i;
}
this.__objects.length = currentIndex;
this.__objectIDs.length = currentIndex;
}
},
onRemoveRequested: function(event) {
var objectID = this.remove(event.target);
if(objectID != 0) {
var tween = ((event.target) instanceof (starling_animation_Tween().default)) ? event.target : null;
if(tween != null && tween.get_isComplete()) {
this.addWithID(tween.get_nextTween(),objectID);
}
}
},
get_elapsedTime: function() {
return this.__elapsedTime;
},
get_timeScale: function() {
return this.__timeScale;
},
set_timeScale: function(value) {
return this.__timeScale = value;
},
get_objects: function() {
return this.__objects;
}
};
Juggler.prototype.__class__ = Juggler.prototype.constructor = $hxClasses["starling.animation.Juggler"] = Juggler;
// Init
Object.defineProperties(Juggler.prototype,{ elapsedTime : { get : function () { return this.get_elapsedTime (); }}, timeScale : { get : function () { return this.get_timeScale (); }, set : function (v) { return this.set_timeScale (v); }}, objects : { get : function () { return this.get_objects (); }}});
// Statics
Juggler.getNextID = function() {
return ++Juggler.sCurrentObjectID;
}
Juggler.sCurrentObjectID = 0
// Export
exports.default = Juggler;