{"version":3,"file":"EventTicker.mjs","sources":["../../src/events/EventTicker.ts"],"sourcesContent":["import { UPDATE_PRIORITY } from '../ticker/const';\nimport { Ticker } from '../ticker/Ticker';\n\nimport type { EventSystem } from './EventSystem';\n\n/** @advanced */\nclass EventsTickerClass\n{\n    /** The event system. */\n    public events: EventSystem;\n    /** The DOM element to listen to events on. */\n    public domElement: HTMLElement;\n    /** The frequency that fake events will be fired. */\n    public interactionFrequency = 10;\n\n    private _deltaTime = 0;\n    private _didMove = false;\n    private _tickerAdded = false;\n    private _pauseUpdate = true;\n\n    /**\n     * Initializes the event ticker.\n     * @param events - The event system.\n     */\n    public init(events: EventSystem): void\n    {\n        this.removeTickerListener();\n        this.events = events;\n        this.interactionFrequency = 10;\n        this._deltaTime = 0;\n        this._didMove = false;\n        this._tickerAdded = false;\n        this._pauseUpdate = true;\n    }\n\n    /** Whether to pause the update checks or not. */\n    get pauseUpdate(): boolean\n    {\n        return this._pauseUpdate;\n    }\n\n    set pauseUpdate(paused: boolean)\n    {\n        this._pauseUpdate = paused;\n    }\n\n    /** Adds the ticker listener. */\n    public addTickerListener(): void\n    {\n        if (this._tickerAdded || !this.domElement)\n        {\n            return;\n        }\n\n        Ticker.system.add(this._tickerUpdate, this, UPDATE_PRIORITY.INTERACTION);\n\n        this._tickerAdded = true;\n    }\n\n    /** Removes the ticker listener. */\n    public removeTickerListener(): void\n    {\n        if (!this._tickerAdded)\n        {\n            return;\n        }\n\n        Ticker.system.remove(this._tickerUpdate, this);\n\n        this._tickerAdded = false;\n    }\n\n    /** Sets flag to not fire extra events when the user has already moved there mouse */\n    public pointerMoved(): void\n    {\n        this._didMove = true;\n    }\n\n    /** Updates the state of interactive objects. */\n    private _update(): void\n    {\n        if (!this.domElement || this._pauseUpdate)\n        {\n            return;\n        }\n\n        // if the user move the mouse this check has already been done using the mouse move!\n        if (this._didMove)\n        {\n            this._didMove = false;\n\n            return;\n        }\n\n        // eslint-disable-next-line dot-notation\n        const rootPointerEvent = this.events['_rootPointerEvent'];\n\n        if (this.events.supportsTouchEvents && (rootPointerEvent as PointerEvent).pointerType === 'touch')\n        {\n            return;\n        }\n\n        globalThis.document.dispatchEvent(this.events.supportsPointerEvents ? new PointerEvent('pointermove', {\n            clientX: rootPointerEvent.clientX,\n            clientY: rootPointerEvent.clientY,\n            pointerType: rootPointerEvent.pointerType,\n            pointerId: rootPointerEvent.pointerId,\n        }) : new MouseEvent('mousemove', {\n            clientX: rootPointerEvent.clientX,\n            clientY: rootPointerEvent.clientY,\n        }));\n    }\n\n    /**\n     * Updates the state of interactive objects if at least {@link interactionFrequency}\n     * milliseconds have passed since the last invocation.\n     *\n     * Invoked by a throttled ticker update from {@link Ticker.system}.\n     * @param ticker - The throttled ticker.\n     */\n    private _tickerUpdate(ticker: Ticker): void\n    {\n        this._deltaTime += ticker.deltaTime;\n\n        if (this._deltaTime < this.interactionFrequency)\n        {\n            return;\n        }\n\n        this._deltaTime = 0;\n\n        this._update();\n    }\n\n    /** Destroys the event ticker. */\n    public destroy(): void\n    {\n        this.removeTickerListener();\n        this.events = null;\n        this.domElement = null;\n        this._deltaTime = 0;\n        this._didMove = false;\n        this._tickerAdded = false;\n        this._pauseUpdate = true;\n    }\n}\n\n/**\n * This class handles automatic firing of PointerEvents\n * in the case where the pointer is stationary for too long.\n * This is to ensure that hit-tests are still run on moving objects.\n * @since 7.2.0\n * @category events\n * @class\n * @advanced\n */\nexport const EventsTicker = new EventsTickerClass();\n"],"names":[],"mappings":"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"}