UNPKG

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.24 kB
{"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,GAAA,GAAM,CAAA;AAOH,MAAM,eAAA,CACb;AAAA,EADO,WAAA,GAAA;AAaH,IAAA,IAAA,CAAiB,SAQX,EAAC;AAGP;AAAA,IAAA,IAAA,CAAQ,OAAA,GAAU,CAAA;AAAA,EAAA;AAAA;AAAA,EAGX,IAAA,GACP;AACI,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,MAAA,CAAO,IAAA,EAAiC,QAAA,EAAkB,SAAA,GAAY,IAAA,EAC7E;AACI,IAAA,MAAM,EAAA,GAAK,GAAA,EAAA;AAEX,IAAA,IAAI,MAAA,GAAS,CAAA;AAEb,IAAA,IAAI,SAAA,EACJ;AACI,MAAA,IAAA,CAAK,OAAA,IAAW,GAAA;AAChB,MAAA,MAAA,GAAS,IAAA,CAAK,OAAA;AAAA,IAClB;AAEA,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,MACb,IAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,YAAY,GAAA,EAAI;AAAA,MACvB,MAAA;AAAA,MACA,IAAA,EAAM,YAAY,GAAA,EAAI;AAAA,MACtB,MAAA,EAAQ,IAAA;AAAA,MACR;AAAA,KACH,CAAA;AAED,IAAA,OAAO,EAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,EAAA,EACd;AACI,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EACxC;AACI,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,OAAO,EAAA,EAC1B;AACI,QAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAEvB,QAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,OAAA,GACR;AACI,IAAA,MAAM,GAAA,GAAM,YAAY,GAAA,EAAI;AAE5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EACxC;AACI,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAE1B,MAAA,IAAK,MAAM,IAAA,CAAK,MAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,KAAK,QAAA,EAC5C;AACI,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,KAAA;AAE3B,QAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AACjB,QAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAA,GACP;AACI,IAAA,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAEvC,IAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EACzB;AACJ;AAAA;AAjHa,eAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc,WAAA;AAAA,IACd,aAAA,CAAc,YAAA;AAAA,IACd,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU;AACd,CAAA;;;;"}