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 • 5.35 kB
Source Map (JSON)
{"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 * @category rendering\n * @advanced\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 offset: number\n start: number;\n last: number;\n repeat: boolean;\n id: number;\n }[] = [];\n\n /** a small off set to apply to the repeat schedules. This is just to make sure they run at slightly different times */\n private _offset = 0;\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 * @param useOffset - this will spread out tasks so that they do not all run at the same time\n * @returns The unique identifier for the scheduled task.\n */\n public repeat(func: (elapsed: number) => void, duration: number, useOffset = true): number\n {\n const id = uid++;\n\n let offset = 0;\n\n if (useOffset)\n {\n this._offset += 1000;\n offset = this._offset;\n }\n\n this._tasks.push({\n func,\n duration,\n start: performance.now(),\n offset,\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.offset) - 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 */\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;AAOH,MAAM,eACb,CAAA;AAAA,EADO,WAAA,GAAA;AAaH,IAAA,IAAA,CAAiB,SAQX,EAAC,CAAA;AAGP;AAAA,IAAA,IAAA,CAAQ,OAAU,GAAA,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA,EAGX,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;AAAA,EASO,MAAO,CAAA,IAAA,EAAiC,QAAkB,EAAA,SAAA,GAAY,IAC7E,EAAA;AACI,IAAA,MAAM,EAAK,GAAA,GAAA,EAAA,CAAA;AAEX,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,IAAA,IAAI,SACJ,EAAA;AACI,MAAA,IAAA,CAAK,OAAW,IAAA,GAAA,CAAA;AAChB,MAAA,MAAA,GAAS,IAAK,CAAA,OAAA,CAAA;AAAA,KAClB;AAEA,IAAA,IAAA,CAAK,OAAO,IAAK,CAAA;AAAA,MACb,IAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,YAAY,GAAI,EAAA;AAAA,MACvB,MAAA;AAAA,MACA,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,IAAK,MAAM,IAAK,CAAA,MAAA,GAAU,IAAK,CAAA,IAAA,IAAQ,KAAK,QAC5C,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,EAMO,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;AAjHa,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;;;;"}