@pixi/core
Version:
Core PixiJS
55 lines (52 loc) • 1.56 kB
JavaScript
import { Runner } from '@pixi/runner';
import { EventEmitter } from '@pixi/utils';
class SystemManager extends EventEmitter {
constructor() {
super(...arguments);
this.runners = {};
this._systemsHash = {};
}
setup(config) {
this.addRunners(...config.runners);
const priority = (config.priority ?? []).filter((key) => config.systems[key]);
const orderByPriority = [
...priority,
...Object.keys(config.systems).filter((key) => !priority.includes(key))
];
for (const i of orderByPriority) {
this.addSystem(config.systems[i], i);
}
}
addRunners(...runnerIds) {
runnerIds.forEach((runnerId) => {
this.runners[runnerId] = new Runner(runnerId);
});
}
addSystem(ClassRef, name) {
const system = new ClassRef(this);
if (this[name]) {
throw new Error(`Whoops! The name "${name}" is already in use`);
}
this[name] = system;
this._systemsHash[name] = system;
for (const i in this.runners) {
this.runners[i].add(system);
}
return this;
}
emitWithCustomOptions(runner, options) {
const systemHashKeys = Object.keys(this._systemsHash);
runner.items.forEach((system) => {
const systemName = systemHashKeys.find((systemId) => this._systemsHash[systemId] === system);
system[runner.name](options[systemName]);
});
}
destroy() {
Object.values(this.runners).forEach((runner) => {
runner.destroy();
});
this._systemsHash = {};
}
}
export { SystemManager };
//# sourceMappingURL=SystemManager.mjs.map