Skip to content

Commit dfb71fe

Browse files
committed
Fixes to GenerateFrameNumbers
* `GenerateFrameNumbers` would include the __BASE frame by mistake in its calculations. This didn't end up in the final animation, but did cause a cache miss when building the animation. * `GenerateFrameNumbers` can now accept the `start` and `end` parameters in reverse order, meaning you can now do `{ start: 10, end: 1 }` to create the animation in reverse.
1 parent f64d2cf commit dfb71fe

1 file changed

Lines changed: 15 additions & 31 deletions

File tree

src/animations/AnimationManager.js

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var GameEvents = require('../core/events');
1313
var GetFastValue = require('../utils/object/GetFastValue');
1414
var GetValue = require('../utils/object/GetValue');
1515
var Pad = require('../utils/string/Pad');
16+
var NumberArray = require('../utils/array/NumberArray');
1617

1718
/**
1819
* @classdesc
@@ -728,46 +729,29 @@ var AnimationManager = new Class({
728729
out.push({ key: key, frame: firstFrame });
729730
}
730731

731-
var i;
732+
// No 'frames' array? Then calculate one automatically
732733

733-
// Have they provided their own custom frame sequence array?
734-
if (Array.isArray(frames))
734+
if (!frames)
735735
{
736-
for (i = 0; i < frames.length; i++)
736+
if (endFrame === -1)
737737
{
738-
if (texture.has(frames[i]))
739-
{
740-
out.push({ key: key, frame: frames[i] });
741-
}
742-
else
743-
{
744-
console.warn('generateFrameNumbers: Frame ' + i + ' missing from texture: ' + key);
745-
}
738+
// -1 because of __BASE, which we don't want in our results
739+
// and -1 because frames are zero based
740+
endFrame = texture.frameTotal - 2;
746741
}
742+
743+
frames = NumberArray(startFrame, endFrame);
747744
}
748-
else
745+
746+
for (var i = 0; i < frames.length; i++)
749747
{
750-
// No endFrame then see if we can get it
751-
if (endFrame === -1)
748+
if (texture.has(frames[i]))
752749
{
753-
endFrame = texture.frameTotal;
750+
out.push({ key: key, frame: frames[i] });
754751
}
755-
756-
var diff = (startFrame < endFrame) ? 1 : -1;
757-
758-
// Adjust because we use i !== end in the for loop
759-
endFrame += diff;
760-
761-
for (i = startFrame; i !== endFrame; i += diff)
752+
else
762753
{
763-
if (texture.has(i))
764-
{
765-
out.push({ key: key, frame: i });
766-
}
767-
else
768-
{
769-
console.warn('generateFrameNumbers: Frame ' + i + ' missing from texture: ' + key);
770-
}
754+
console.warn('generateFrameNumbers: Frame ' + i + ' missing from texture: ' + key);
771755
}
772756
}
773757

0 commit comments

Comments
 (0)