This commit is contained in:
2025-01-04 00:34:03 +01:00
parent 41829408dc
commit 0ca14bbc19
18111 changed files with 1871397 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
The MIT License
Copyright (c) 2013-2023 Mathew Groves, Chad Engler
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,143 @@
"use strict";
var core = require("@pixi/core"), sprite = require("@pixi/sprite");
class AnimatedSprite extends sprite.Sprite {
/**
* @param textures - An array of {@link PIXI.Texture} or frame
* objects that make up the animation.
* @param {boolean} [autoUpdate=true] - Whether to use Ticker.shared to auto update animation time.
*/
constructor(textures, autoUpdate = !0) {
super(textures[0] instanceof core.Texture ? textures[0] : textures[0].texture), this._textures = null, this._durations = null, this._autoUpdate = autoUpdate, this._isConnectedToTicker = !1, this.animationSpeed = 1, this.loop = !0, this.updateAnchor = !1, this.onComplete = null, this.onFrameChange = null, this.onLoop = null, this._currentTime = 0, this._playing = !1, this._previousFrame = null, this.textures = textures;
}
/** Stops the AnimatedSprite. */
stop() {
this._playing && (this._playing = !1, this._autoUpdate && this._isConnectedToTicker && (core.Ticker.shared.remove(this.update, this), this._isConnectedToTicker = !1));
}
/** Plays the AnimatedSprite. */
play() {
this._playing || (this._playing = !0, this._autoUpdate && !this._isConnectedToTicker && (core.Ticker.shared.add(this.update, this, core.UPDATE_PRIORITY.HIGH), this._isConnectedToTicker = !0));
}
/**
* Stops the AnimatedSprite and goes to a specific frame.
* @param frameNumber - Frame index to stop at.
*/
gotoAndStop(frameNumber) {
this.stop(), this.currentFrame = frameNumber;
}
/**
* Goes to a specific frame and begins playing the AnimatedSprite.
* @param frameNumber - Frame index to start at.
*/
gotoAndPlay(frameNumber) {
this.currentFrame = frameNumber, this.play();
}
/**
* Updates the object transform for rendering.
* @param deltaTime - Time since last tick.
*/
update(deltaTime) {
if (!this._playing)
return;
const elapsed = this.animationSpeed * deltaTime, previousFrame = this.currentFrame;
if (this._durations !== null) {
let lag = this._currentTime % 1 * this._durations[this.currentFrame];
for (lag += elapsed / 60 * 1e3; lag < 0; )
this._currentTime--, lag += this._durations[this.currentFrame];
const sign = Math.sign(this.animationSpeed * deltaTime);
for (this._currentTime = Math.floor(this._currentTime); lag >= this._durations[this.currentFrame]; )
lag -= this._durations[this.currentFrame] * sign, this._currentTime += sign;
this._currentTime += lag / this._durations[this.currentFrame];
} else
this._currentTime += elapsed;
this._currentTime < 0 && !this.loop ? (this.gotoAndStop(0), this.onComplete && this.onComplete()) : this._currentTime >= this._textures.length && !this.loop ? (this.gotoAndStop(this._textures.length - 1), this.onComplete && this.onComplete()) : previousFrame !== this.currentFrame && (this.loop && this.onLoop && (this.animationSpeed > 0 && this.currentFrame < previousFrame || this.animationSpeed < 0 && this.currentFrame > previousFrame) && this.onLoop(), this.updateTexture());
}
/** Updates the displayed texture to match the current frame index. */
updateTexture() {
const currentFrame = this.currentFrame;
this._previousFrame !== currentFrame && (this._previousFrame = currentFrame, this._texture = this._textures[currentFrame], this._textureID = -1, this._textureTrimmedID = -1, this._cachedTint = 16777215, this.uvs = this._texture._uvs.uvsFloat32, this.updateAnchor && this._anchor.copyFrom(this._texture.defaultAnchor), this.onFrameChange && this.onFrameChange(this.currentFrame));
}
/**
* Stops the AnimatedSprite and destroys it.
* @param {object|boolean} [options] - Options parameter. A boolean will act as if all options
* have been set to that value.
* @param {boolean} [options.children=false] - If set to true, all the children will have their destroy
* method called as well. 'options' will be passed on to those calls.
* @param {boolean} [options.texture=false] - Should it destroy the current texture of the sprite as well.
* @param {boolean} [options.baseTexture=false] - Should it destroy the base texture of the sprite as well.
*/
destroy(options) {
this.stop(), super.destroy(options), this.onComplete = null, this.onFrameChange = null, this.onLoop = null;
}
/**
* A short hand way of creating an AnimatedSprite from an array of frame ids.
* @param frames - The array of frames ids the AnimatedSprite will use as its texture frames.
* @returns - The new animated sprite with the specified frames.
*/
static fromFrames(frames) {
const textures = [];
for (let i = 0; i < frames.length; ++i)
textures.push(core.Texture.from(frames[i]));
return new AnimatedSprite(textures);
}
/**
* A short hand way of creating an AnimatedSprite from an array of image ids.
* @param images - The array of image urls the AnimatedSprite will use as its texture frames.
* @returns The new animate sprite with the specified images as frames.
*/
static fromImages(images) {
const textures = [];
for (let i = 0; i < images.length; ++i)
textures.push(core.Texture.from(images[i]));
return new AnimatedSprite(textures);
}
/**
* The total number of frames in the AnimatedSprite. This is the same as number of textures
* assigned to the AnimatedSprite.
* @readonly
* @default 0
*/
get totalFrames() {
return this._textures.length;
}
/** The array of textures used for this AnimatedSprite. */
get textures() {
return this._textures;
}
set textures(value) {
if (value[0] instanceof core.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();
}
/** The AnimatedSprite's current frame index. */
get currentFrame() {
let currentFrame = Math.floor(this._currentTime) % this._textures.length;
return currentFrame < 0 && (currentFrame += this._textures.length), currentFrame;
}
set currentFrame(value) {
if (value < 0 || value > this.totalFrames - 1)
throw new 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();
}
/**
* Indicates if the AnimatedSprite is currently playing.
* @readonly
*/
get playing() {
return this._playing;
}
/** Whether to use Ticker.shared to auto update animation time. */
get autoUpdate() {
return this._autoUpdate;
}
set autoUpdate(value) {
value !== this._autoUpdate && (this._autoUpdate = value, !this._autoUpdate && this._isConnectedToTicker ? (core.Ticker.shared.remove(this.update, this), this._isConnectedToTicker = !1) : this._autoUpdate && !this._isConnectedToTicker && this._playing && (core.Ticker.shared.add(this.update, this), this._isConnectedToTicker = !0));
}
}
exports.AnimatedSprite = AnimatedSprite;
//# sourceMappingURL=AnimatedSprite.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,145 @@
import { Texture, Ticker, UPDATE_PRIORITY } from "@pixi/core";
import { Sprite } from "@pixi/sprite";
class AnimatedSprite extends Sprite {
/**
* @param textures - An array of {@link PIXI.Texture} or frame
* objects that make up the animation.
* @param {boolean} [autoUpdate=true] - Whether to use Ticker.shared to auto update animation time.
*/
constructor(textures, autoUpdate = !0) {
super(textures[0] instanceof Texture ? textures[0] : textures[0].texture), this._textures = null, this._durations = null, this._autoUpdate = autoUpdate, this._isConnectedToTicker = !1, this.animationSpeed = 1, this.loop = !0, this.updateAnchor = !1, this.onComplete = null, this.onFrameChange = null, this.onLoop = null, this._currentTime = 0, this._playing = !1, this._previousFrame = null, this.textures = textures;
}
/** Stops the AnimatedSprite. */
stop() {
this._playing && (this._playing = !1, this._autoUpdate && this._isConnectedToTicker && (Ticker.shared.remove(this.update, this), this._isConnectedToTicker = !1));
}
/** Plays the AnimatedSprite. */
play() {
this._playing || (this._playing = !0, this._autoUpdate && !this._isConnectedToTicker && (Ticker.shared.add(this.update, this, UPDATE_PRIORITY.HIGH), this._isConnectedToTicker = !0));
}
/**
* Stops the AnimatedSprite and goes to a specific frame.
* @param frameNumber - Frame index to stop at.
*/
gotoAndStop(frameNumber) {
this.stop(), this.currentFrame = frameNumber;
}
/**
* Goes to a specific frame and begins playing the AnimatedSprite.
* @param frameNumber - Frame index to start at.
*/
gotoAndPlay(frameNumber) {
this.currentFrame = frameNumber, this.play();
}
/**
* Updates the object transform for rendering.
* @param deltaTime - Time since last tick.
*/
update(deltaTime) {
if (!this._playing)
return;
const elapsed = this.animationSpeed * deltaTime, previousFrame = this.currentFrame;
if (this._durations !== null) {
let lag = this._currentTime % 1 * this._durations[this.currentFrame];
for (lag += elapsed / 60 * 1e3; lag < 0; )
this._currentTime--, lag += this._durations[this.currentFrame];
const sign = Math.sign(this.animationSpeed * deltaTime);
for (this._currentTime = Math.floor(this._currentTime); lag >= this._durations[this.currentFrame]; )
lag -= this._durations[this.currentFrame] * sign, this._currentTime += sign;
this._currentTime += lag / this._durations[this.currentFrame];
} else
this._currentTime += elapsed;
this._currentTime < 0 && !this.loop ? (this.gotoAndStop(0), this.onComplete && this.onComplete()) : this._currentTime >= this._textures.length && !this.loop ? (this.gotoAndStop(this._textures.length - 1), this.onComplete && this.onComplete()) : previousFrame !== this.currentFrame && (this.loop && this.onLoop && (this.animationSpeed > 0 && this.currentFrame < previousFrame || this.animationSpeed < 0 && this.currentFrame > previousFrame) && this.onLoop(), this.updateTexture());
}
/** Updates the displayed texture to match the current frame index. */
updateTexture() {
const currentFrame = this.currentFrame;
this._previousFrame !== currentFrame && (this._previousFrame = currentFrame, this._texture = this._textures[currentFrame], this._textureID = -1, this._textureTrimmedID = -1, this._cachedTint = 16777215, this.uvs = this._texture._uvs.uvsFloat32, this.updateAnchor && this._anchor.copyFrom(this._texture.defaultAnchor), this.onFrameChange && this.onFrameChange(this.currentFrame));
}
/**
* Stops the AnimatedSprite and destroys it.
* @param {object|boolean} [options] - Options parameter. A boolean will act as if all options
* have been set to that value.
* @param {boolean} [options.children=false] - If set to true, all the children will have their destroy
* method called as well. 'options' will be passed on to those calls.
* @param {boolean} [options.texture=false] - Should it destroy the current texture of the sprite as well.
* @param {boolean} [options.baseTexture=false] - Should it destroy the base texture of the sprite as well.
*/
destroy(options) {
this.stop(), super.destroy(options), this.onComplete = null, this.onFrameChange = null, this.onLoop = null;
}
/**
* A short hand way of creating an AnimatedSprite from an array of frame ids.
* @param frames - The array of frames ids the AnimatedSprite will use as its texture frames.
* @returns - The new animated sprite with the specified frames.
*/
static fromFrames(frames) {
const textures = [];
for (let i = 0; i < frames.length; ++i)
textures.push(Texture.from(frames[i]));
return new AnimatedSprite(textures);
}
/**
* A short hand way of creating an AnimatedSprite from an array of image ids.
* @param images - The array of image urls the AnimatedSprite will use as its texture frames.
* @returns The new animate sprite with the specified images as frames.
*/
static fromImages(images) {
const textures = [];
for (let i = 0; i < images.length; ++i)
textures.push(Texture.from(images[i]));
return new AnimatedSprite(textures);
}
/**
* The total number of frames in the AnimatedSprite. This is the same as number of textures
* assigned to the AnimatedSprite.
* @readonly
* @default 0
*/
get totalFrames() {
return this._textures.length;
}
/** The array of textures used for this AnimatedSprite. */
get textures() {
return this._textures;
}
set textures(value) {
if (value[0] instanceof 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();
}
/** The AnimatedSprite's current frame index. */
get currentFrame() {
let currentFrame = Math.floor(this._currentTime) % this._textures.length;
return currentFrame < 0 && (currentFrame += this._textures.length), currentFrame;
}
set currentFrame(value) {
if (value < 0 || value > this.totalFrames - 1)
throw new 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();
}
/**
* Indicates if the AnimatedSprite is currently playing.
* @readonly
*/
get playing() {
return this._playing;
}
/** Whether to use Ticker.shared to auto update animation time. */
get autoUpdate() {
return this._autoUpdate;
}
set autoUpdate(value) {
value !== this._autoUpdate && (this._autoUpdate = value, !this._autoUpdate && this._isConnectedToTicker ? (Ticker.shared.remove(this.update, this), this._isConnectedToTicker = !1) : this._autoUpdate && !this._isConnectedToTicker && this._playing && (Ticker.shared.add(this.update, this), this._isConnectedToTicker = !0));
}
}
export {
AnimatedSprite
};
//# sourceMappingURL=AnimatedSprite.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
"use strict";
var AnimatedSprite = require("./AnimatedSprite.js");
exports.AnimatedSprite = AnimatedSprite.AnimatedSprite;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}

View File

@@ -0,0 +1,5 @@
import { AnimatedSprite } from "./AnimatedSprite.mjs";
export {
AnimatedSprite
};
//# sourceMappingURL=index.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}

View File

@@ -0,0 +1,38 @@
{
"name": "@pixi/sprite-animated",
"version": "7.4.2",
"main": "lib/index.js",
"module": "lib/index.mjs",
"types": "lib/index.d.ts",
"exports": {
".": {
"import": {
"types": "./lib/index.d.ts",
"default": "./lib/index.mjs"
},
"require": {
"types": "./lib/index.d.ts",
"default": "./lib/index.js"
}
}
},
"description": "Sprite Animations as depicted by playing a series of Textures",
"author": "Mat Groves",
"homepage": "http://pixijs.com/",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/pixijs/pixijs.git"
},
"publishConfig": {
"access": "public"
},
"files": [
"lib",
"*.d.ts"
],
"peerDependencies": {
"@pixi/core": "7.4.2",
"@pixi/sprite": "7.4.2"
}
}