trainsim/lib/resources.ts
2025-02-05 04:00:40 -07:00

39 lines
1.0 KiB
TypeScript

export class ResourceManager {
private resources: Map<string, unknown> = new Map();
private statuses: Map<string, Promise<boolean>> = new Map();
get<T>(name: string): T {
if (!this.resources.has(name)) {
throw new Error(`Resource ${name} not found`);
}
return this.resources.get(name) as T;
}
set(name: string, value: unknown) {
if (typeof (value as EventSource).addEventListener === "function") {
this.statuses.set(
name,
new Promise((resolve) => {
const onload = () => {
this.resources.set(name, value);
resolve(true);
(value as EventSource).removeEventListener("load", onload);
};
(value as EventSource).addEventListener("load", onload);
}),
);
} else {
console.warn("Resource added was not a loadable resource");
}
this.resources.set(name, value);
}
delete(name: string) {
this.resources.delete(name);
}
ready() {
return Promise.all(Array.from(this.statuses.values()));
}
}