@zenithcore/core
Version:
Core functionality for ZenithKernel framework
40 lines (32 loc) • 991 B
text/typescript
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
}
}
}