UNPKG

@pixi/core

Version:
55 lines (52 loc) 1.56 kB
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