update method
dynamic
update(
- dynamic delta
Implementation
update(delta) {
var currentColumn, currentRow, complete = [], x, animation;
for (x = 0; animation; animation = animations[x++]) {
animation.duration += delta;
// Have we gone longer than the duration of this tile? Show the
// next one
if (animation.duration > 1 / animation.fps) {
// Advance this animation to the next tile
animation.currentTile =
(animation.currentTile + 1) % animation.numberOfTiles;
// Calcualte the new column and row
currentColumn = animation.currentTile % animation.tilesHorizontal;
currentRow =
Math.floor(animation.currentTile / animation.tilesHorizontal);
// Calculate the texture offset. The y was found through trial
// and error and I have no idea why it works
animation.texture.offset.x = currentColumn / animation.tilesHorizontal;
animation.texture.offset.y = 1 -
(1 / animation.tilesHorizontal) -
(currentRow / animation.tilesVertical);
animation.duration = 0;
// If we're on the last frame (currentTile is 0 indexed), keep
// track of this one for later
if (animation.currentTile == animation.numberOfTiles - 1) {
animation.looped++;
complete.add(animation);
}
}
}
// Go over all completed animations. If we exceed our looping quota,
// free it
if (complete.isNotEmpty) {
for (x = 0; animation; animation = complete[x++]) {
if (animation.looped >= animation.repeat) {
free(animation);
}
}
}
}