@pixi/animate
Version:
PIXI plugin for the PixiAnimate Extension
1 lines • 10.5 kB
Source Map (JSON)
{"version":3,"file":"Animator.mjs","sources":["../../src/animate/Animator.ts"],"sourcesContent":["import { AnimatorTimeline } from './AnimatorTimeline';\nimport type { MovieClip } from './MovieClip';\n\n// Static collection of timelines\nconst timelines: AnimatorTimeline[] = [];\n\n/**\n * Play animation via start/stop frame labels\n * @class Animator\n */\nexport class Animator\n{\n /**\n * The collection of timelines\n */\n private static get _timelines(): AnimatorTimeline[]\n {\n return timelines;\n }\n\n /**\n * Suffix added to label for a stop.\n */\n static get STOP_LABEL(): string\n {\n return '_stop';\n }\n\n /**\n * Suffix added to label for a loop.\n */\n static get LOOP_LABEL(): string\n {\n return '_loop';\n }\n\n /**\n * Play the entire duration of the MovieClip.\n * @param instance - Movie clip to play.\n * @param callback - Optional callback when complete\n * @return Timeline object for stopping or getting progress.\n */\n static play(instance: MovieClip, callback?: () => void): AnimatorTimeline;\n /**\n * Play an animation by frame labels. For instance, play animation sequence from\n * 'idle' to 'idle_stop' or 'idle_loop'. If no event label is provided, will\n * play the entire duration of the MovieClip.\n * @param instance - Movie clip to play.\n * @param label - The frame label event to call, if no event is provided\n * will use the entire length of the MovieClip.\n * @param callback - Optional callback when complete\n * @return Timeline object for stopping or getting progress.\n */\n static play(instance: MovieClip, label: string, callback?: () => void): AnimatorTimeline;\n static play(instance: MovieClip, label?: string | (() => void), callback?: () => void): AnimatorTimeline\n {\n let loop = false;\n let start;\n let end;\n\n if (!label || typeof label === 'function')\n {\n start = 0;\n end = instance.totalFrames - 1;\n if (label && typeof label === 'function')\n {\n callback = label;\n label = null;\n }\n }\n else\n {\n start = instance.labelsMap[label];\n end = instance.labelsMap[label + this.STOP_LABEL];\n if (end === undefined)\n {\n end = instance.labelsMap[label + this.LOOP_LABEL];\n loop = true;\n }\n if (start === undefined)\n {\n throw new Error(`No start label matching \"${label}\"`);\n }\n else if (end === undefined)\n {\n throw new Error(`No end label matching \"${label}\"`);\n }\n }\n\n return this.fromTo(\n instance,\n start,\n end,\n loop,\n callback,\n );\n }\n\n /**\n * Play an animation from the current frame to an end frame or label.\n * @param instance - Movie clip to play.\n * @param end - The end frame or label.\n * @param callback - Optional callback when complete\n * @return Timeline object for stopping or getting progress.\n */\n static to(instance: MovieClip, end: string | number, callback?: () => void): AnimatorTimeline\n {\n return this.fromTo(\n instance,\n instance.currentFrame,\n end,\n false,\n callback,\n );\n }\n\n /**\n * Play a MovieClip from a start to end frame.\n * @param instance - Movie clip to play.\n * @param start - The starting frame index or label.\n * @param end - The ending frame index or label.\n * @param loop - If the animation should loop.\n * @param callback - Optional callback when complete\n * @return Timeline object for stopping or getting progress.\n */\n static fromTo(instance: MovieClip,\n start: number | string,\n end: number | string,\n loop?: boolean,\n callback?: () => void): AnimatorTimeline\n {\n if (typeof start === 'string')\n {\n const startLabel = start;\n\n start = instance.labelsMap[startLabel];\n if (start === undefined)\n {\n throw new Error(`No start label matching \"${startLabel}\"`);\n }\n }\n if (typeof end === 'string')\n {\n const endLabel = end;\n\n end = instance.labelsMap[endLabel];\n if (end === undefined)\n {\n throw new Error(`No end label matching \"${endLabel}\"`);\n }\n }\n if (start < 0)\n {\n throw new Error('Start frame is out of bounds');\n }\n if (end >= instance.totalFrames)\n {\n throw new Error('End frame is out of bounds');\n }\n if (start >= end)\n {\n throw new Error('End frame is before start frame');\n }\n\n // Stop any animation that's playing\n this.stop(instance);\n\n loop = !!loop;\n\n // Add a new timeline\n const timeline = AnimatorTimeline.create(\n instance,\n start,\n end,\n loop,\n callback,\n );\n\n this._timelines.push(timeline);\n\n // Set the current frame\n if (instance.currentFrame !== start)\n {\n instance.gotoAndPlay(start);\n }\n else\n {\n instance.play();\n }\n\n return timeline;\n }\n\n /**\n * Stop the animation by instance.\n * @param instance - Movie clip to play.\n */\n static stop(instance: MovieClip): void\n {\n for (let i = 0, len = this._timelines.length; i < len; i++)\n {\n const timeline = this._timelines[i];\n\n if (timeline.instance === instance)\n {\n this._internalStop(timeline);\n break;\n }\n }\n }\n\n /**\n * Stop all the currently playing animations.\n */\n static stopAll(): void\n {\n for (let i = this._timelines.length - 1; i >= 0; i--)\n {\n this._internalStop(this._timelines[i]);\n }\n }\n\n /**\n * Stop the animation\n * @private\n * @param timeline - Timeline to stop.\n */\n static _internalStop(timeline: AnimatorTimeline): void\n {\n this._timelines.splice(this._timelines.indexOf(timeline), 1);\n timeline.instance.stop();\n timeline.destroy();\n }\n}\n"],"names":[],"mappings":"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"}