1 line
4.5 KiB
Plaintext
1 line
4.5 KiB
Plaintext
{"version":3,"file":"SchedulerSystem.mjs","sources":["../../../../src/rendering/renderers/shared/SchedulerSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Ticker } from '../../../ticker/Ticker';\n\nimport type { System } from './system/System';\n\n// start at one too keep it positive!\nlet uid = 1;\n\n/**\n * The SchedulerSystem manages scheduled tasks with specific intervals.\n * @memberof rendering\n */\nexport class SchedulerSystem implements System<null>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ExtensionType.CanvasSystem,\n ],\n name: 'scheduler',\n priority: 0,\n } as const;\n\n private readonly _tasks: {\n func: (elapsed: number) => void;\n duration: number;\n start: number;\n last: number;\n repeat: boolean;\n id: number;\n }[] = [];\n\n /** Initializes the scheduler system and starts the ticker. */\n public init(): void\n {\n Ticker.system.add(this._update, this);\n }\n\n /**\n * Schedules a repeating task.\n * @param func - The function to execute.\n * @param duration - The interval duration in milliseconds.\n * @returns The unique identifier for the scheduled task.\n */\n public repeat(func: (elapsed: number) => void, duration: number): number\n {\n const id = uid++;\n\n this._tasks.push({\n func,\n duration,\n start: performance.now(),\n last: performance.now(),\n repeat: true,\n id\n });\n\n return id;\n }\n\n /**\n * Cancels a scheduled task.\n * @param id - The unique identifier of the task to cancel.\n */\n public cancel(id: number): void\n {\n for (let i = 0; i < this._tasks.length; i++)\n {\n if (this._tasks[i].id === id)\n {\n this._tasks.splice(i, 1);\n\n return;\n }\n }\n }\n\n /**\n * Updates and executes the scheduled tasks.\n * @private\n */\n private _update(): void\n {\n const now = performance.now();\n\n for (let i = 0; i < this._tasks.length; i++)\n {\n const task = this._tasks[i];\n\n if (now - task.last >= task.duration)\n {\n const elapsed = now - task.start;\n\n task.func(elapsed);\n task.last = now;\n }\n }\n }\n\n /**\n * Destroys the scheduler system and removes all tasks.\n * @internal\n * @ignore\n */\n public destroy(): void\n {\n Ticker.system.remove(this._update, this);\n\n this._tasks.length = 0;\n }\n}\n"],"names":[],"mappings":";;;;AAMA,IAAI,GAAM,GAAA,CAAA,CAAA;AAMH,MAAM,eACb,CAAA;AAAA,EADO,WAAA,GAAA;AAaH,IAAA,IAAA,CAAiB,SAOX,EAAC,CAAA;AAAA,GAAA;AAAA;AAAA,EAGA,IACP,GAAA;AACI,IAAA,MAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA,EAAS,IAAI,CAAA,CAAA;AAAA,GACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,MAAA,CAAO,MAAiC,QAC/C,EAAA;AACI,IAAA,MAAM,EAAK,GAAA,GAAA,EAAA,CAAA;AAEX,IAAA,IAAA,CAAK,OAAO,IAAK,CAAA;AAAA,MACb,IAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,YAAY,GAAI,EAAA;AAAA,MACvB,IAAA,EAAM,YAAY,GAAI,EAAA;AAAA,MACtB,MAAQ,EAAA,IAAA;AAAA,MACR,EAAA;AAAA,KACH,CAAA,CAAA;AAED,IAAO,OAAA,EAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,EACd,EAAA;AACI,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CACxC,EAAA,EAAA;AACI,MAAA,IAAI,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,OAAO,EAC1B,EAAA;AACI,QAAK,IAAA,CAAA,MAAA,CAAO,MAAO,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAEvB,QAAA,OAAA;AAAA,OACJ;AAAA,KACJ;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,OACR,GAAA;AACI,IAAM,MAAA,GAAA,GAAM,YAAY,GAAI,EAAA,CAAA;AAE5B,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CACxC,EAAA,EAAA;AACI,MAAM,MAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAE1B,MAAA,IAAI,GAAM,GAAA,IAAA,CAAK,IAAQ,IAAA,IAAA,CAAK,QAC5B,EAAA;AACI,QAAM,MAAA,OAAA,GAAU,MAAM,IAAK,CAAA,KAAA,CAAA;AAE3B,QAAA,IAAA,CAAK,KAAK,OAAO,CAAA,CAAA;AACjB,QAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;AAAA,OAChB;AAAA,KACJ;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OACP,GAAA;AACI,IAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA,EAAS,IAAI,CAAA,CAAA;AAEvC,IAAA,IAAA,CAAK,OAAO,MAAS,GAAA,CAAA,CAAA;AAAA,GACzB;AACJ,CAAA;AAAA;AApGa,eAAA,CAGK,SAAY,GAAA;AAAA,EACtB,IAAM,EAAA;AAAA,IACF,aAAc,CAAA,WAAA;AAAA,IACd,aAAc,CAAA,YAAA;AAAA,IACd,aAAc,CAAA,YAAA;AAAA,GAClB;AAAA,EACA,IAAM,EAAA,WAAA;AAAA,EACN,QAAU,EAAA,CAAA;AACd,CAAA;;;;"} |