UNPKG

@zenithcore/core

Version:

Core functionality for ZenithKernel framework

40 lines (32 loc) 991 B
import { BaseSystem } from "./BaseSystem"; import { ECSManager } from "./ECSManager"; export class Scheduler extends BaseSystem { static readonly id = "Scheduler"; private static instance: Scheduler | null = null; static getInstance(ecsManager: ECSManager): Scheduler { if (!Scheduler.instance) { Scheduler.instance = new Scheduler(ecsManager); } return Scheduler.instance; } onLoad?(): void { } onUnload?(): void { } update(): void { this.tick(); } private updateQueue: Map<string, () => Generator> = new Map(); schedule(id: string, generatorFactory: () => Generator) { this.updateQueue.set(id, generatorFactory); } unschedule(id: string) { this.updateQueue.delete(id); } tick() { for (const [_, factory] of this.updateQueue) { const gen = factory(); gen.next(); // advance one tick } } }