UNPKG

pixi.js

Version:

PixiJS — The HTML5 Creation Engine =============

1 lines 5.82 kB
{"version":3,"file":"TickerListener.mjs","sources":["../../src/ticker/TickerListener.ts"],"sourcesContent":["import type { Ticker, TickerCallback } from './Ticker';\n\n/**\n * Internal class for handling the priority sorting of ticker handlers.\n * @private\n * @class\n */\nexport class TickerListener<T = any>\n{\n /** The current priority. */\n public priority: number;\n /** The next item in chain. */\n public next: TickerListener = null;\n /** The previous item in chain. */\n public previous: TickerListener = null;\n\n /** The handler function to execute. */\n private _fn: TickerCallback<T>;\n /** The calling to execute. */\n private _context: T;\n /** If this should only execute once. */\n private readonly _once: boolean;\n /** `true` if this listener has been destroyed already. */\n private _destroyed = false;\n\n /**\n * Constructor\n * @private\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @param priority - The priority for emitting\n * @param once - If the handler should fire once\n */\n constructor(fn: TickerCallback<T>, context: T = null, priority = 0, once = false)\n {\n this._fn = fn;\n this._context = context;\n this.priority = priority;\n this._once = once;\n }\n\n /**\n * Simple compare function to figure out if a function and context match.\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @returns `true` if the listener match the arguments\n */\n public match(fn: TickerCallback<T>, context: any = null): boolean\n {\n return this._fn === fn && this._context === context;\n }\n\n /**\n * Emit by calling the current function.\n * @param ticker - The ticker emitting.\n * @returns Next ticker\n */\n public emit(ticker: Ticker): TickerListener\n {\n if (this._fn)\n {\n if (this._context)\n {\n this._fn.call(this._context, ticker);\n }\n else\n {\n (this as TickerListener<any>)._fn(ticker);\n }\n }\n\n const redirect = this.next;\n\n if (this._once)\n {\n this.destroy(true);\n }\n\n // Soft-destroying should remove\n // the next reference\n if (this._destroyed)\n {\n this.next = null;\n }\n\n return redirect;\n }\n\n /**\n * Connect to the list.\n * @param previous - Input node, previous listener\n */\n public connect(previous: TickerListener): void\n {\n this.previous = previous;\n if (previous.next)\n {\n previous.next.previous = this;\n }\n this.next = previous.next;\n previous.next = this;\n }\n\n /**\n * Destroy and don't use after this.\n * @param hard - `true` to remove the `next` reference, this\n * is considered a hard destroy. Soft destroy maintains the next reference.\n * @returns The listener to redirect while emitting or removing.\n */\n public destroy(hard = false): TickerListener\n {\n this._destroyed = true;\n this._fn = null;\n this._context = null;\n\n // Disconnect, hook up next and previous\n if (this.previous)\n {\n this.previous.next = this.next;\n }\n\n if (this.next)\n {\n this.next.previous = this.previous;\n }\n\n // Redirect to the next item\n const redirect = this.next;\n\n // Remove references\n this.next = hard ? null : redirect;\n this.previous = null;\n\n return redirect;\n }\n}\n"],"names":[],"mappings":";AAOO,MAAM,cACb,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBI,YAAY,EAAuB,EAAA,OAAA,GAAa,MAAM,QAAW,GAAA,CAAA,EAAG,OAAO,KAC3E,EAAA;AAtBA;AAAA,IAAA,IAAA,CAAO,IAAuB,GAAA,IAAA,CAAA;AAE9B;AAAA,IAAA,IAAA,CAAO,QAA2B,GAAA,IAAA,CAAA;AASlC;AAAA,IAAA,IAAA,CAAQ,UAAa,GAAA,KAAA,CAAA;AAYjB,IAAA,IAAA,CAAK,GAAM,GAAA,EAAA,CAAA;AACX,IAAA,IAAA,CAAK,QAAW,GAAA,OAAA,CAAA;AAChB,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAA;AAAA,GACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,KAAA,CAAM,EAAuB,EAAA,OAAA,GAAe,IACnD,EAAA;AACI,IAAA,OAAO,IAAK,CAAA,GAAA,KAAQ,EAAM,IAAA,IAAA,CAAK,QAAa,KAAA,OAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KAAK,MACZ,EAAA;AACI,IAAA,IAAI,KAAK,GACT,EAAA;AACI,MAAA,IAAI,KAAK,QACT,EAAA;AACI,QAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,IAAK,CAAA,QAAA,EAAU,MAAM,CAAA,CAAA;AAAA,OAGvC,MAAA;AACI,QAAC,IAAA,CAA6B,IAAI,MAAM,CAAA,CAAA;AAAA,OAC5C;AAAA,KACJ;AAEA,IAAA,MAAM,WAAW,IAAK,CAAA,IAAA,CAAA;AAEtB,IAAA,IAAI,KAAK,KACT,EAAA;AACI,MAAA,IAAA,CAAK,QAAQ,IAAI,CAAA,CAAA;AAAA,KACrB;AAIA,IAAA,IAAI,KAAK,UACT,EAAA;AACI,MAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,KAChB;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ,QACf,EAAA;AACI,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAA,IAAI,SAAS,IACb,EAAA;AACI,MAAA,QAAA,CAAS,KAAK,QAAW,GAAA,IAAA,CAAA;AAAA,KAC7B;AACA,IAAA,IAAA,CAAK,OAAO,QAAS,CAAA,IAAA,CAAA;AACrB,IAAA,QAAA,CAAS,IAAO,GAAA,IAAA,CAAA;AAAA,GACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,OAAA,CAAQ,OAAO,KACtB,EAAA;AACI,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,GAAM,GAAA,IAAA,CAAA;AACX,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAGhB,IAAA,IAAI,KAAK,QACT,EAAA;AACI,MAAK,IAAA,CAAA,QAAA,CAAS,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,IAAI,KAAK,IACT,EAAA;AACI,MAAK,IAAA,CAAA,IAAA,CAAK,WAAW,IAAK,CAAA,QAAA,CAAA;AAAA,KAC9B;AAGA,IAAA,MAAM,WAAW,IAAK,CAAA,IAAA,CAAA;AAGtB,IAAK,IAAA,CAAA,IAAA,GAAO,OAAO,IAAO,GAAA,QAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAEhB,IAAO,OAAA,QAAA,CAAA;AAAA,GACX;AACJ;;;;"}