Engine.SimpleTween = class
{
constructor(onUpdate, tweenFunc, start, end, time, toInt)
{
this.t; //current time
this.c; //delta
this.b; //start value
this.d; //duration
this.tweenValue;
this.toInt = false;
this.instant = false;
this.MaxTime = -1;
this.active = false;
this.onFinish = null;
this.onUpdate = null;
this.loop = false;
this.ignoreFirstUpdate = true;
this.timeScale = 1;
this.paused = 0;
this.thisTween = null;
if (onUpdate !== undefined)
{
this.init(onUpdate, tweenFunc, start, end, time, toInt);
}
}
pause()
{
this.paused++;
}
resume()
{
if (this.paused > 0) this.paused--;
}
get isPaused() { return this.paused > 0; }
forceFinish()
{
this.t = this.d;
}
stop()
{
if (this.onStop != null) this.onStop();
this.active = false;
this.onFinish = null;
this.onUpdate = null;
Engine.EnterFrameManagerInstance.remove(this);
}
init(onUpdate, tweenFunc, start, end, time, toInt = false)
{
if (this.active) this.stop();
this.onUpdate = onUpdate;
this.toInt = toInt;
this.tweenValue = start;
this.thisTween = tweenFunc;
this.t = 0;
this.c = end - start;
this.b = start;
this.d = time;
this.instant = (this.d == 0);
Engine.EnterFrameManagerInstance.add(this, (timeElapsed) => { this.update(timeElapsed); });
this.active = true;
this.ignoreFirstUpdate = true;
}
update(timeElapsed)
{
if (this.ignoreFirstUpdate)
{
this.ignoreFirstUpdate = false;
return;
}
if (this.MaxTime != -1) timeElapsed = Math.min(timeElapsed, this.MaxTime);
if (this.paused > 0) return;
if (!this.active) return;
this.t += (timeElapsed * this.timeScale);
if (this.t >= this.d) this.t = this.d;
var val = 0;
val = this.thisTween(this.instant ? 1.0 : this.t, this.b, this.c, this.instant ? 1.0 : this.d);
var intVal = Math.floor(val);
if (this.toInt) val = intVal;
this.tweenValue = val;
if (this.onUpdate != null) this.onUpdate(this.tweenValue);
if (this.t == this.d)
{
if (this.loop)
{
this.t = 0;
}
else
{
this.active = false;
Engine.EnterFrameManagerInstance.remove(this);
}
if (this.onFinish) this.onFinish();
}
}
forceUpdateCall()
{
if (this.active)
{
if (this.onUpdate != null) this.onUpdate(this.tweenValue);
}
}
static sineWaveIn(t, b, c, d)
{
var param = (t / d);
var s = (-(Math.pow(((param-0.774)*1.4), 2) )) + 1.1;
return c * s + b;
}
static easeLinear(t, b, c, d)
{
return c * t / d + b;
}
static quadEaseIn(t, b, c, d)
{
return c * (t /= d) * t + b;
}
static quadEaseOut(t, b, c, d)
{
return -c * (t /= d) * (t - 2) + b;
}
static quadEaseInOut(t, b, c, d)
{
if ((t /= d * 0.5) < 1) return c * 0.5 * t * t + b;
return -c * 0.5 * ((--t) * (t - 2) - 1) + b;
}
static strongEaseIn(t, b, c, d)
{
return c * (t /= d) * t * t * t * t + b;
}
static strongEaseOut(t, b, c, d)
{
return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
}
static strongEaseInOut(t, b, c, d)
{
if ((t /= d * 0.5) < 1) return c * 0.5 * t * t * t * t * t + b;
return c * 0.5 * ((t -= 2) * t * t * t * t + 2) + b;
}
}