154 lines
6.6 KiB
JavaScript
154 lines
6.6 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$sprite_animated$AnimatedSprite = function(global, require, module, exports) {
|
|
var Texture = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$Texture"), _const = require("module$node_modules$pixi_DOT_js$lib$ticker$const"), Ticker = require("module$node_modules$pixi_DOT_js$lib$ticker$Ticker");
|
|
global = require("module$node_modules$pixi_DOT_js$lib$scene$sprite$Sprite");
|
|
"use strict";
|
|
class AnimatedSprite extends global.Sprite {
|
|
constructor(...args) {
|
|
let options = args[0];
|
|
Array.isArray(args[0]) && (options = {textures:args[0], autoUpdate:args[1]});
|
|
const {animationSpeed = 1, autoPlay = !1, autoUpdate = !0, loop = !0, onComplete = null, onFrameChange = null, onLoop = null, textures, updateAnchor = !1, ...rest} = options;
|
|
[args] = textures;
|
|
super({...rest, texture:args instanceof Texture.Texture ? args : args.texture});
|
|
this._durations = this._textures = null;
|
|
this._autoUpdate = autoUpdate;
|
|
this._isConnectedToTicker = !1;
|
|
this.animationSpeed = animationSpeed;
|
|
this.loop = loop;
|
|
this.updateAnchor = updateAnchor;
|
|
this.onComplete = onComplete;
|
|
this.onFrameChange = onFrameChange;
|
|
this.onLoop = onLoop;
|
|
this._currentTime = 0;
|
|
this._playing = !1;
|
|
this._previousFrame = null;
|
|
this.textures = textures;
|
|
autoPlay && this.play();
|
|
}
|
|
stop() {
|
|
this._playing && (this._playing = !1, this._autoUpdate && this._isConnectedToTicker && (Ticker.Ticker.shared.remove(this.update, this), this._isConnectedToTicker = !1));
|
|
}
|
|
play() {
|
|
this._playing || (this._playing = !0, this._autoUpdate && !this._isConnectedToTicker && (Ticker.Ticker.shared.add(this.update, this, _const.UPDATE_PRIORITY.HIGH), this._isConnectedToTicker = !0));
|
|
}
|
|
gotoAndStop(frameNumber) {
|
|
this.stop();
|
|
this.currentFrame = frameNumber;
|
|
}
|
|
gotoAndPlay(frameNumber) {
|
|
this.currentFrame = frameNumber;
|
|
this.play();
|
|
}
|
|
update(ticker) {
|
|
if (this._playing) {
|
|
var deltaTime = ticker.deltaTime, elapsed = this.animationSpeed * deltaTime;
|
|
ticker = this.currentFrame;
|
|
if (null !== this._durations) {
|
|
let lag = this._currentTime % 1 * this._durations[this.currentFrame];
|
|
for (lag += elapsed / 60 * 1e3; 0 > lag;) {
|
|
this._currentTime--, lag += this._durations[this.currentFrame];
|
|
}
|
|
deltaTime = Math.sign(this.animationSpeed * deltaTime);
|
|
for (this._currentTime = Math.floor(this._currentTime); lag >= this._durations[this.currentFrame];) {
|
|
lag -= this._durations[this.currentFrame] * deltaTime, this._currentTime += deltaTime;
|
|
}
|
|
this._currentTime += lag / this._durations[this.currentFrame];
|
|
} else {
|
|
this._currentTime += elapsed;
|
|
}
|
|
if (0 > this._currentTime && !this.loop) {
|
|
if (this.gotoAndStop(0), this.onComplete) {
|
|
this.onComplete();
|
|
}
|
|
} else if (this._currentTime >= this._textures.length && !this.loop) {
|
|
if (this.gotoAndStop(this._textures.length - 1), this.onComplete) {
|
|
this.onComplete();
|
|
}
|
|
} else if (ticker !== this.currentFrame) {
|
|
if (this.loop && this.onLoop && (0 < this.animationSpeed && this.currentFrame < ticker || 0 > this.animationSpeed && this.currentFrame > ticker)) {
|
|
this.onLoop();
|
|
}
|
|
this._updateTexture();
|
|
}
|
|
}
|
|
}
|
|
_updateTexture() {
|
|
const currentFrame = this.currentFrame;
|
|
if (this._previousFrame !== currentFrame && (this._previousFrame = currentFrame, this.texture = this._textures[currentFrame], this.updateAnchor && this.texture.defaultAnchor && this.anchor.copyFrom(this.texture.defaultAnchor), this.onFrameChange)) {
|
|
this.onFrameChange(this.currentFrame);
|
|
}
|
|
}
|
|
destroy(options = !1) {
|
|
if ("boolean" === typeof options ? options : options?.texture) {
|
|
const destroyTextureSource = "boolean" === typeof options ? options : options?.textureSource;
|
|
this._textures.forEach(texture => {
|
|
this.texture !== texture && texture.destroy(destroyTextureSource);
|
|
});
|
|
}
|
|
this._textures = [];
|
|
this._durations = null;
|
|
this.stop();
|
|
super.destroy(options);
|
|
this.onLoop = this.onFrameChange = this.onComplete = null;
|
|
}
|
|
static fromFrames(frames) {
|
|
const textures = [];
|
|
for (let i = 0; i < frames.length; ++i) {
|
|
textures.push(Texture.Texture.from(frames[i]));
|
|
}
|
|
return new AnimatedSprite(textures);
|
|
}
|
|
static fromImages(images) {
|
|
const textures = [];
|
|
for (let i = 0; i < images.length; ++i) {
|
|
textures.push(Texture.Texture.from(images[i]));
|
|
}
|
|
return new AnimatedSprite(textures);
|
|
}
|
|
get totalFrames() {
|
|
return this._textures.length;
|
|
}
|
|
get textures() {
|
|
return this._textures;
|
|
}
|
|
set textures(value) {
|
|
if (value[0] instanceof Texture.Texture) {
|
|
this._textures = value, this._durations = null;
|
|
} else {
|
|
this._textures = [];
|
|
this._durations = [];
|
|
for (let i = 0; i < value.length; i++) {
|
|
this._textures.push(value[i].texture), this._durations.push(value[i].time);
|
|
}
|
|
}
|
|
this._previousFrame = null;
|
|
this.gotoAndStop(0);
|
|
this._updateTexture();
|
|
}
|
|
get currentFrame() {
|
|
let currentFrame = Math.floor(this._currentTime) % this._textures.length;
|
|
0 > currentFrame && (currentFrame += this._textures.length);
|
|
return currentFrame;
|
|
}
|
|
set currentFrame(value) {
|
|
if (0 > value || value > this.totalFrames - 1) {
|
|
throw Error(`[AnimatedSprite]: Invalid frame index value ${value}, expected to be between 0 and totalFrames ${this.totalFrames}.`);
|
|
}
|
|
const previousFrame = this.currentFrame;
|
|
this._currentTime = value;
|
|
previousFrame !== this.currentFrame && this._updateTexture();
|
|
}
|
|
get playing() {
|
|
return this._playing;
|
|
}
|
|
get autoUpdate() {
|
|
return this._autoUpdate;
|
|
}
|
|
set autoUpdate(value) {
|
|
value !== this._autoUpdate && (this._autoUpdate = value, !this._autoUpdate && this._isConnectedToTicker ? (Ticker.Ticker.shared.remove(this.update, this), this._isConnectedToTicker = !1) : this._autoUpdate && !this._isConnectedToTicker && this._playing && (Ticker.Ticker.shared.add(this.update, this), this._isConnectedToTicker = !0));
|
|
}
|
|
}
|
|
exports.AnimatedSprite = AnimatedSprite;
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$sprite_animated$AnimatedSprite.js.map
|