UNPKG

1.56 kBJavaScriptView Raw
1import { Runner } from '@pixi/runner';
2import { EventEmitter } from '@pixi/utils';
3
4class SystemManager extends EventEmitter {
5 constructor() {
6 super(...arguments);
7 this.runners = {};
8 this._systemsHash = {};
9 }
10 setup(config) {
11 this.addRunners(...config.runners);
12 const priority = (config.priority ?? []).filter((key) => config.systems[key]);
13 const orderByPriority = [
14 ...priority,
15 ...Object.keys(config.systems).filter((key) => !priority.includes(key))
16 ];
17 for (const i of orderByPriority) {
18 this.addSystem(config.systems[i], i);
19 }
20 }
21 addRunners(...runnerIds) {
22 runnerIds.forEach((runnerId) => {
23 this.runners[runnerId] = new Runner(runnerId);
24 });
25 }
26 addSystem(ClassRef, name) {
27 const system = new ClassRef(this);
28 if (this[name]) {
29 throw new Error(`Whoops! The name "${name}" is already in use`);
30 }
31 this[name] = system;
32 this._systemsHash[name] = system;
33 for (const i in this.runners) {
34 this.runners[i].add(system);
35 }
36 return this;
37 }
38 emitWithCustomOptions(runner, options) {
39 const systemHashKeys = Object.keys(this._systemsHash);
40 runner.items.forEach((system) => {
41 const systemName = systemHashKeys.find((systemId) => this._systemsHash[systemId] === system);
42 system[runner.name](options[systemName]);
43 });
44 }
45 destroy() {
46 Object.values(this.runners).forEach((runner) => {
47 runner.destroy();
48 });
49 this._systemsHash = {};
50 }
51}
52
53export { SystemManager };
54//# sourceMappingURL=SystemManager.mjs.map