pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 8.06 kB
Source Map (JSON)
{"version":3,"file":"TickerPlugin.mjs","sources":["../../src/app/TickerPlugin.ts"],"sourcesContent":["import { ExtensionType } from '../extensions/Extensions';\nimport { UPDATE_PRIORITY } from '../ticker/const';\nimport { Ticker } from '../ticker/Ticker';\n\nimport type { ExtensionMetadata } from '../extensions/Extensions';\n\n/**\n * Application options for the {@link TickerPlugin}.\n * These options control the animation loop and update cycle of your PixiJS application.\n * @example\n * ```ts\n * import { Application } from 'pixi.js';\n *\n * // Basic setup with default options\n * const app = new Application();\n * await app.init({\n * autoStart: true, // Start animation loop automatically\n * sharedTicker: false // Use dedicated ticker instance\n * });\n *\n * // Advanced setup with shared ticker\n * const app2 = new Application();\n * await app2.init({\n * autoStart: false, // Don't start automatically\n * sharedTicker: true // Use global shared ticker\n * });\n *\n * // Start animation when ready\n * app2.start();\n * ```\n * @remarks\n * The ticker is the heart of your application's animation system. It:\n * - Manages the render loop\n * - Provides accurate timing information\n * - Handles frame-based updates\n * - Supports priority-based execution order\n * @see {@link Ticker} For detailed ticker functionality\n * @see {@link UPDATE_PRIORITY} For update priority constants\n * @category app\n * @standard\n */\nexport interface TickerPluginOptions\n{\n /**\n * Controls whether the animation loop starts automatically after initialization.\n * > [!IMPORTANT]\n * > Setting this to `false` does NOT stop the shared ticker even if `sharedTicker` is `true`.\n * > You must stop the shared ticker manually if needed.\n * @example\n * ```ts\n * // Auto-start (default behavior)\n * await app.init({ autoStart: true });\n *\n * // Manual start\n * await app.init({ autoStart: false });\n * app.start(); // Start when ready\n * ```\n * @default true\n */\n autoStart?: boolean;\n\n /**\n * Controls whether to use the shared global ticker or create a new instance.\n *\n * The shared ticker is useful when you have multiple instances that should sync their updates.\n * However, it has some limitations regarding update order control.\n *\n * Update Order:\n * 1. System ticker (always runs first)\n * 2. Shared ticker (if enabled)\n * 3. App ticker (if using own ticker)\n * @example\n * ```ts\n * // Use shared ticker (global instance)\n * await app.init({ sharedTicker: true });\n *\n * // Use dedicated ticker (default)\n * await app.init({ sharedTicker: false });\n *\n * // Access ticker properties\n * console.log(app.ticker.FPS); // Current FPS\n * console.log(app.ticker.deltaMS); // MS since last update\n * ```\n * @default false\n */\n sharedTicker?: boolean;\n}\n\n/**\n * Middleware for Application's {@link Ticker} functionality. This plugin manages the\n * animation loop and update cycle of your PixiJS application.\n *\n * Adds the following features to {@link Application}:\n * - `ticker`: Access to the application's ticker\n * - `start`: Start the animation loop\n * - `stop`: Stop the animation loop\n * @example\n * ```ts\n * import { Application, TickerPlugin, extensions } from 'pixi.js';\n *\n * // Create application\n * const app = new Application();\n *\n * // Example 1: Basic ticker usage (default autoStart)\n * await app.init({ autoStart: true }); // Starts ticker automatically\n *\n * // Example 2: Manual ticker control\n * await app.init({ autoStart: false }); // Don't start automatically\n * app.start(); // Start manually\n * app.stop(); // Stop manually\n *\n * // Example 3: Add custom update logic\n * app.ticker.add((ticker) => {\n * // Run every frame, delta is the time since last update\n * sprite.rotation += 0.1 * ticker.deltaTime;\n * });\n *\n * // Example 4: Control update priority\n * import { UPDATE_PRIORITY } from 'pixi.js';\n *\n * app.ticker.add(\n * (ticker) => {\n * // Run before normal priority updates\n * },\n * null,\n * UPDATE_PRIORITY.HIGH\n * );\n *\n * // Example 5: One-time update\n * app.ticker.addOnce(() => {\n * console.log('Runs next frame only');\n * });\n * ```\n * @see {@link Ticker} For detailed ticker functionality\n * @see {@link UPDATE_PRIORITY} For priority constants\n * @category app\n * @standard\n */\nexport class TickerPlugin\n{\n /** @ignore */\n public static extension: ExtensionMetadata = ExtensionType.Application;\n\n /** @internal */\n public static start: () => void;\n /** @internal */\n public static stop: () => void;\n /** @internal */\n private static _ticker: Ticker;\n /** @internal */\n public static ticker: Ticker;\n\n /**\n * Initialize the plugin with scope of application instance\n * @private\n * @param {object} [options] - See application options\n */\n public static init(options?: PixiMixins.ApplicationOptions): void\n {\n // Set default\n options = Object.assign({\n autoStart: true,\n sharedTicker: false,\n }, options);\n\n // Create ticker setter\n Object.defineProperty(this, 'ticker',\n {\n set(ticker)\n {\n if (this._ticker)\n {\n this._ticker.remove(this.render, this);\n }\n this._ticker = ticker;\n if (ticker)\n {\n ticker.add(this.render, this, UPDATE_PRIORITY.LOW);\n }\n },\n get()\n {\n return this._ticker;\n },\n });\n\n this.stop = (): void =>\n {\n this._ticker.stop();\n };\n\n this.start = (): void =>\n {\n this._ticker.start();\n };\n\n this._ticker = null;\n this.ticker = options.sharedTicker ? Ticker.shared : new Ticker();\n\n // Start the rendering\n if (options.autoStart)\n {\n this.start();\n }\n }\n\n /**\n * Clean up the ticker, scoped to application.\n * @private\n */\n public static destroy(): void\n {\n if (this._ticker)\n {\n const oldTicker = this._ticker;\n\n this.ticker = null;\n oldTicker.destroy();\n }\n }\n}\n"],"names":[],"mappings":";;;;;AA0IO,MAAM,YACb,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBI,OAAc,KAAK,OACnB,EAAA;AAEI,IAAA,OAAA,GAAU,OAAO,MAAO,CAAA;AAAA,MACpB,SAAW,EAAA,IAAA;AAAA,MACX,YAAc,EAAA,KAAA;AAAA,OACf,OAAO,CAAA,CAAA;AAGV,IAAO,MAAA,CAAA,cAAA;AAAA,MAAe,IAAA;AAAA,MAAM,QAAA;AAAA,MACxB;AAAA,QACI,IAAI,MACJ,EAAA;AACI,UAAA,IAAI,KAAK,OACT,EAAA;AACI,YAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAAA,WACzC;AACA,UAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAA;AACf,UAAA,IAAI,MACJ,EAAA;AACI,YAAA,MAAA,CAAO,GAAI,CAAA,IAAA,CAAK,MAAQ,EAAA,IAAA,EAAM,gBAAgB,GAAG,CAAA,CAAA;AAAA,WACrD;AAAA,SACJ;AAAA,QACA,GACA,GAAA;AACI,UAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,SAChB;AAAA,OACJ;AAAA,KAAC,CAAA;AAEL,IAAA,IAAA,CAAK,OAAO,MACZ;AACI,MAAA,IAAA,CAAK,QAAQ,IAAK,EAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAA,IAAA,CAAK,QAAQ,MACb;AACI,MAAA,IAAA,CAAK,QAAQ,KAAM,EAAA,CAAA;AAAA,KACvB,CAAA;AAEA,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AACf,IAAA,IAAA,CAAK,SAAS,OAAQ,CAAA,YAAA,GAAe,MAAO,CAAA,MAAA,GAAS,IAAI,MAAO,EAAA,CAAA;AAGhE,IAAA,IAAI,QAAQ,SACZ,EAAA;AACI,MAAA,IAAA,CAAK,KAAM,EAAA,CAAA;AAAA,KACf;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,OACd,GAAA;AACI,IAAA,IAAI,KAAK,OACT,EAAA;AACI,MAAA,MAAM,YAAY,IAAK,CAAA,OAAA,CAAA;AAEvB,MAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AACd,MAAA,SAAA,CAAU,OAAQ,EAAA,CAAA;AAAA,KACtB;AAAA,GACJ;AACJ,CAAA;AAAA;AAlFa,YAAA,CAGK,YAA+B,aAAc,CAAA,WAAA;;;;"}