mirror of
https://github.com/MapMakersAndProgrammers/TankiOnline2.0DemoClient.git
synced 2025-10-26 01:49:11 -07:00
183 lines
4.9 KiB
ActionScript
183 lines
4.9 KiB
ActionScript
package alternativa.engine3d.animation
|
|
{
|
|
import alternativa.engine3d.alternativa3d;
|
|
import alternativa.engine3d.animation.events.NotifyEvent;
|
|
import alternativa.engine3d.core.Object3D;
|
|
import flash.utils.Dictionary;
|
|
import flash.utils.getTimer;
|
|
|
|
use namespace alternativa3d;
|
|
|
|
public class AnimationController
|
|
{
|
|
private var name_cn:AnimationNode;
|
|
|
|
private var name_Kq:Vector.<Object>;
|
|
|
|
private var name_62:Vector.<Object3D> = new Vector.<Object3D>();
|
|
|
|
private var name_oX:Dictionary = new Dictionary();
|
|
|
|
private var name_eB:Object = new Object();
|
|
|
|
private var name_Jl:int = -1;
|
|
|
|
alternativa3d var nearestNotifyers:AnimationNotify;
|
|
|
|
public function AnimationController()
|
|
{
|
|
super();
|
|
}
|
|
|
|
public function get root() : AnimationNode
|
|
{
|
|
return this.name_cn;
|
|
}
|
|
|
|
public function set root(value:AnimationNode) : void
|
|
{
|
|
if(this.name_cn != value)
|
|
{
|
|
if(this.name_cn != null)
|
|
{
|
|
this.name_cn.alternativa3d::setController(null);
|
|
this.name_cn.name_Eo = false;
|
|
}
|
|
if(value != null)
|
|
{
|
|
value.alternativa3d::setController(this);
|
|
value.name_Eo = true;
|
|
}
|
|
this.name_cn = value;
|
|
}
|
|
}
|
|
|
|
public function update() : void
|
|
{
|
|
var interval:Number = NaN;
|
|
var data:AnimationState = null;
|
|
var i:int = 0;
|
|
var count:int = 0;
|
|
var _loc6_:int = 0;
|
|
var object:Object3D = null;
|
|
if(this.name_Jl < 0)
|
|
{
|
|
this.name_Jl = getTimer();
|
|
interval = 0;
|
|
}
|
|
else
|
|
{
|
|
_loc6_ = int(getTimer());
|
|
interval = 0.001 * (_loc6_ - this.name_Jl);
|
|
this.name_Jl = _loc6_;
|
|
}
|
|
if(this.name_cn == null)
|
|
{
|
|
return;
|
|
}
|
|
for each(data in this.name_eB)
|
|
{
|
|
data.reset();
|
|
}
|
|
this.name_cn.alternativa3d::update(interval,1);
|
|
for(i = 0,count = int(this.name_62.length); i < count; )
|
|
{
|
|
object = this.name_62[i];
|
|
data = this.name_eB[object.name];
|
|
if(data != null)
|
|
{
|
|
data.apply(object);
|
|
}
|
|
i++;
|
|
}
|
|
for(var notify:AnimationNotify = this.alternativa3d::nearestNotifyers; notify != null; )
|
|
{
|
|
if(notify.willTrigger(NotifyEvent.NOTIFY))
|
|
{
|
|
notify.dispatchEvent(new NotifyEvent(notify));
|
|
}
|
|
notify = notify.name_XY;
|
|
}
|
|
this.alternativa3d::nearestNotifyers = null;
|
|
}
|
|
|
|
alternativa3d function addObject(object:Object) : void
|
|
{
|
|
if(object in this.name_oX)
|
|
{
|
|
this.name_oX[object]++;
|
|
}
|
|
else
|
|
{
|
|
if(object is Object3D)
|
|
{
|
|
this.name_62.push(object);
|
|
}
|
|
else
|
|
{
|
|
this.name_Kq.push(object);
|
|
}
|
|
this.name_oX[object] = 1;
|
|
}
|
|
}
|
|
|
|
alternativa3d function removeObject(object:Object) : void
|
|
{
|
|
var index:int = 0;
|
|
var j:int = 0;
|
|
var count:int = 0;
|
|
var used:int = int(this.name_oX[object]);
|
|
used--;
|
|
if(used <= 0)
|
|
{
|
|
if(object is Object3D)
|
|
{
|
|
index = int(this.name_62.indexOf(object as Object3D));
|
|
count = this.name_62.length - 1;
|
|
for(j = index + 1; index < count; )
|
|
{
|
|
this.name_62[index] = this.name_62[j];
|
|
index++;
|
|
j++;
|
|
}
|
|
this.name_62.length = count;
|
|
}
|
|
else
|
|
{
|
|
index = int(this.name_Kq.indexOf(object));
|
|
count = this.name_Kq.length - 1;
|
|
for(j = index + 1; index < count; )
|
|
{
|
|
this.name_Kq[index] = this.name_Kq[j];
|
|
index++;
|
|
j++;
|
|
}
|
|
this.name_Kq.length = count;
|
|
}
|
|
delete this.name_oX[object];
|
|
}
|
|
else
|
|
{
|
|
this.name_oX[object] = used;
|
|
}
|
|
}
|
|
|
|
alternativa3d function getState(name:String) : AnimationState
|
|
{
|
|
var state:AnimationState = this.name_eB[name];
|
|
if(state == null)
|
|
{
|
|
state = new AnimationState();
|
|
this.name_eB[name] = state;
|
|
}
|
|
return state;
|
|
}
|
|
|
|
public function freeze() : void
|
|
{
|
|
this.name_Jl = -1;
|
|
}
|
|
}
|
|
}
|
|
|