{"version":3,"file":"TickerListener.mjs","sources":["../src/TickerListener.ts"],"sourcesContent":["import type { TickerCallback } from './Ticker';\n\n/**\n * Internal class for handling the priority sorting of ticker handlers.\n * @private\n * @class\n * @memberof PIXI\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 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     * @private\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    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     * @private\n     * @param deltaTime - time since the last emit.\n     * @returns Next ticker\n     */\n    emit(deltaTime: number): TickerListener\n    {\n        if (this.fn)\n        {\n            if (this.context)\n            {\n                this.fn.call(this.context, deltaTime);\n            }\n            else\n            {\n                (this as TickerListener<any>).fn(deltaTime);\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     * @private\n     * @param previous - Input node, previous listener\n     */\n    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     * @private\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    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":"AAQO,MAAM,cACb,CAAA;AAAA,EAyBI,YAAY,EAAuB,EAAA,OAAA,GAAa,MAAM,QAAW,GAAA,CAAA,EAAG,OAAO,KAC3E,EAAA;AAtBA,IAAA,IAAA,CAAO,IAAuB,GAAA,IAAA,CAAA;AAE9B,IAAA,IAAA,CAAO,QAA2B,GAAA,IAAA,CAAA;AASlC,IAAA,IAAA,CAAQ,UAAa,GAAA,KAAA,CAAA;AAYjB,IAAA,IAAA,CAAK,EAAK,GAAA,EAAA,CAAA;AACV,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AACf,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GAChB;AAAA,EASA,KAAA,CAAM,EAAuB,EAAA,OAAA,GAAe,IAC5C,EAAA;AACI,IAAA,OAAO,IAAK,CAAA,EAAA,KAAO,EAAM,IAAA,IAAA,CAAK,OAAY,KAAA,OAAA,CAAA;AAAA,GAC9C;AAAA,EAQA,KAAK,SACL,EAAA;AACI,IAAA,IAAI,KAAK,EACT,EAAA;AACI,MAAA,IAAI,KAAK,OACT,EAAA;AACI,QAAA,IAAA,CAAK,EAAG,CAAA,IAAA,CAAK,IAAK,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAAA,OAGxC,MAAA;AACI,QAAC,IAAA,CAA6B,GAAG,SAAS,CAAA,CAAA;AAAA,OAC9C;AAAA,KACJ;AAEA,IAAA,MAAM,WAAW,IAAK,CAAA,IAAA,CAAA;AAEtB,IAAA,IAAI,KAAK,IACT,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,EAOA,QAAQ,QACR,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,EASA,OAAA,CAAQ,OAAO,KACf,EAAA;AACI,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,EAAK,GAAA,IAAA,CAAA;AACV,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AAGf,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;;;;"}