class MultiTween
{
get tweenValue() { return this.currentTween.tweenValue; }
get MaxTime() { return this.currentTween.MaxTime; }
set MaxTime(value) { this.currentTween.MaxTime = value; }
pause()
{
this.currentTween.pause();
}
resume()
{
this.currentTween.resume();
}
get isPaused() { return this.currentTween.isPaused; }
constructor(finish, update)
{
if (finish === undefined) finish = null;
if (update === undefined) update = null;
this.active = false;
this.onFinish = finish;
this.onUpdate = update;
this.currentTween = new SimpleTween();
this.currentTween.onFinish = this.internalOnFinish;
this.tweens = [];
this.currentTweenIndex = 0;
this.loop = false;
}
addSimpleTween(tweenFunc, start, end, time, toInt /* = false*/)
{
if (toInt === undefined) toInt = false;
this.addSimpleTweenAt(this.tweens.length, tweenFunc, start, end, time, toInt);
}
addSimpleTweenAt(index, tweenFunc, start, end, time, toInt /* = false*/)
{
if (toInt === undefined) toInt = false;
this.tweens.splice(index, 0, { tweenFunc: tweenFunc, start: start, end: end, time: time, toInt: toInt });
if (this.active && index <= this.currentTweenIndex)
{
this.currentTweenIndex++;
}
}
clear()
{
this.stop();
this.tweens.length = 0;
}
start(tweenIndex /* = 0*/)
{
if (tweenIndex === undefined) tweenIndex = 0;
this.active = true;
if (this.tweens.length == 0)
{
this.active = false;
if (this.onFinish != null) this.onFinish();
}
else
{
this.setupTween(tweenIndex);
}
}
setupTween(tweenIndex)
{
this.currentTweenIndex = tweenIndex % this.tweens.length;
var info = this.tweens[currentTweenIndex];
this.currentTween.init(this.internalOnUpdate, info.tweenFunc, info.start, info.end, info.time, info.toInt);
}
internalOnUpdate(val)
{
if (this.onUpdate != null) this.onUpdate(val);
}
internalOnFinish()
{
if (this.currentTweenIndex + 1 >= this.tweens.length)
{
if (!this.loop)
{
this.active = false;
if (this.onFinish != null) this.onFinish();
return;
}
}
this.setupTween(this.currentTweenIndex + 1);
}
stop()
{
if (this.active)
{
this.currentTween.stop();
this.currentTween.onFinish = this.internalOnFinish;
this.active = false;
this.onFinish = null;
this.onUpdate = null;
}
}
forceUpdateCall()
{
if (this.active && this.currentTween != null)
{
this.currentTween.forceUpdateCall();
}
}
}