Better repeat handling and new getOverallProgress method.

This commit is contained in:
photonstorm 2017-06-29 14:05:49 +01:00
parent 121f1e5730
commit 8efed59271

View file

@ -9,16 +9,24 @@ var TimerEvent = new Class({
{ {
/** /**
* @property {number} delay - The delay in ms at which this TimerEvent fires. * @property {number} delay - The delay in ms at which this TimerEvent fires.
* @readOnly
*/ */
this.delay = 0; this.delay = 0;
/** /**
* @property {number} repeatCount - If this TimerEvent repeats it will do so this many times. * @property {number} repeat - The total number of times this TimerEvent will repeat before finishing.
* @readOnly
*/
this.repeat = 0;
/**
* @property {number} repeatCount - If repeating this contains the current repeat count.
*/ */
this.repeatCount = 0; this.repeatCount = 0;
/** /**
* @property {boolean} loop - True if this TimerEvent loops, otherwise false. * @property {boolean} loop - True if this TimerEvent loops, otherwise false.
* @readOnly
*/ */
this.loop = false; this.loop = false;
@ -56,7 +64,8 @@ var TimerEvent = new Class({
{ {
this.delay = GetFastValue(config, 'delay', 0); this.delay = GetFastValue(config, 'delay', 0);
this.repeatCount = GetFastValue(config, 'repeat', 0); // Can also be set to -1 for an infinite loop (same as setting loop: true)
this.repeat = GetFastValue(config, 'repeat', 0);
this.loop = GetFastValue(config, 'loop', false); this.loop = GetFastValue(config, 'loop', false);
@ -72,23 +81,40 @@ var TimerEvent = new Class({
this.paused = GetFastValue(config, 'paused', false); this.paused = GetFastValue(config, 'paused', false);
// This works for setting an infinite repeat too
if (this.repeatCount === -1)
{
this.loop = true;
}
this.elapsed = 0; this.elapsed = 0;
this.hasDispatched = false; this.hasDispatched = false;
this.repeatCount = (this.repeat === -1 || this.loop) ? 999999999999 : this.repeat;
return this; return this;
}, },
// Gets the progress of the current iteration, not factoring in repeats
getProgress: function () getProgress: function ()
{ {
return (this.elapsed / this.delay); return (this.elapsed / this.delay);
}, },
// Gets the progress of the timer overall, factoring in repeats.
getOverallProgress: function ()
{
if (this.repeat > 0)
{
var totalDuration = this.delay + (this.delay * this.repeat);
var totalElapsed = this.elapsed + (this.delay * (this.repeat - this.repeatCount));
return (totalElapsed / totalDuration);
}
else
{
return this.getProgress();
}
},
getRepeatCount: function ()
{
return this.repeatCount;
},
getElapsed: function () getElapsed: function ()
{ {
return this.elapsed; return this.elapsed;