mani-game-engine 1.0.0-pre.36 → 1.0.0-pre.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/clock.d.ts CHANGED
@@ -6,12 +6,12 @@ declare const defaultOptions: {
6
6
  maxFrameTime: number;
7
7
  timeScale: number;
8
8
  };
9
- export declare type Timeout = {
9
+ export type Timeout = {
10
10
  recall?: number;
11
11
  callback: Function;
12
12
  callTime: number;
13
13
  };
14
- export declare type GameClockOptions = Partial<typeof defaultOptions>;
14
+ export type GameClockOptions = Partial<typeof defaultOptions>;
15
15
  export interface Clock {
16
16
  onPrepare: Signal<unknown>;
17
17
  onEarlyUpdate: Signal<OnEarlyUpdateParams>;
@@ -1,11 +1,21 @@
1
1
  import { Signal } from 'mani-signal';
2
- import { Class, ID, Injector, ResolverFunction } from './injector';
2
+ import { Class, Dependency, ID, Injector, ResolverFunction } from './injector';
3
3
  import { SystemContext } from './systemContext';
4
- declare type ComponentClass = Class;
5
- declare type EntityClass = Class;
6
- declare type SystemResolvers<T extends Class> = [T, ResolverFunction[]];
7
- export declare const entityComponents: Map<EntityClass, Map<ComponentClass, string>>;
4
+ import { Entity } from './entity';
5
+ type ComponentClass = Class;
6
+ type EntityClass = Class;
7
+ type ComponentDependency = Dependency & {
8
+ kind: 'component';
9
+ index: number;
10
+ type: Class;
11
+ };
12
+ type DynamicComponentDependency = Dependency & {
13
+ kind: 'dynamic';
14
+ index: number;
15
+ type: Class;
16
+ };
8
17
  export declare const GetComponent: (dependantType: Class<any>, _propertyKey: string | symbol, index: number) => any;
18
+ export declare const GetDynamicComponent: (dependantType: Class<any>, _propertyKey: string | symbol, index: number) => any;
9
19
  export declare const GetEntity: (dependantType: Class<any>, _propertyKey: string | symbol, index: number) => any;
10
20
  export declare const GetContext: (dependantType: Class<any>, _propertyKey: string | symbol, index: number) => any;
11
21
  export declare const GetSignal: (id: ID) => (dependantType: Class<any>, _propertyKey: string | symbol, index: number) => any;
@@ -15,13 +25,21 @@ export declare const signalHandlers: Map<Object, [string, ID][]>;
15
25
  export declare const staticSignalHandlers: Map<Object, [string, ID][]>;
16
26
  export declare const OnSignal: (id: ID) => (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
17
27
  export declare class EcsInjector<SystemClass extends Class = Class> extends Injector {
28
+ static warnNoMatchingEntities: boolean;
29
+ static entityComponents: Map<EntityClass, Map<ComponentClass, string>>;
30
+ protected componentDependencyMap: Map<Class<any>, ComponentDependency[]>;
31
+ protected dynamicComponentDependencyMap: Map<Class<any>, DynamicComponentDependency[]>;
18
32
  protected entitySystemMap: Map<Class, SystemClass[]>;
19
- protected entitySystemResolverTuples: Map<Class, SystemResolvers<SystemClass>[]>;
33
+ protected dynamicComponentSystemMap: Map<Class, SystemClass[]>;
34
+ protected entitySystemResolverTuples: Map<Class, Map<SystemClass, ResolverFunction[]>>;
20
35
  private signalMap;
21
36
  constructor(parent?: EcsInjector<SystemClass>);
22
37
  newSignalScope(): void;
23
38
  registerSystem<T extends SystemClass>(systemClass: T): void;
24
- createSystems(entity: Object): SystemContext[];
39
+ createSystemsForDynamicComponents(dynamicComponentClass: Class, entity: Entity): Set<SystemContext<import("./types").System>>;
40
+ createSystemsForEntity(entity: Entity): Set<SystemContext>;
41
+ private createSystems;
42
+ private getSystemResolverTuples;
25
43
  getSignal<T>(id: ID): Signal<T>;
26
44
  dispose(): void;
27
45
  }
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsInjector = exports.OnSignal = exports.staticSignalHandlers = exports.signalHandlers = exports.EntityComponent = exports.GetEntitySignal = exports.GetSignal = exports.GetContext = exports.GetEntity = exports.GetComponent = exports.entityComponents = void 0;
3
+ exports.EcsInjector = exports.OnSignal = exports.staticSignalHandlers = exports.signalHandlers = exports.EntityComponent = exports.GetEntitySignal = exports.GetSignal = exports.GetContext = exports.GetEntity = exports.GetDynamicComponent = exports.GetComponent = void 0;
4
4
  const mani_signal_1 = require("mani-signal");
5
5
  const injector_1 = require("./injector");
6
6
  const systemContext_1 = require("./systemContext");
7
- exports.entityComponents = new Map();
8
7
  exports.GetComponent = (0, injector_1.createDependencyAnnotation)((type, index) => ({ kind: 'component', type, index }));
8
+ exports.GetDynamicComponent = (0, injector_1.createDependencyAnnotation)((type, index) => ({
9
+ kind: 'dynamic',
10
+ type,
11
+ index,
12
+ }));
9
13
  exports.GetEntity = (0, injector_1.createDependencyAnnotation)((_type, index) => ({ kind: 'entity', index }));
10
14
  exports.GetContext = (0, injector_1.createDependencyAnnotation)((_type, index) => ({ kind: 'context', index }));
11
15
  const GetSignal = (id) => (0, injector_1.createDependencyAnnotation)((_type, index) => ({ kind: 'signal', index, id }));
@@ -22,7 +26,7 @@ const EntityComponent = (target, propertyKey) => {
22
26
  if (componentClass === Object) {
23
27
  throw new Error(`Object component type not allowed. Forgot to specify type of ${entityClass.name}.${propertyKey}?`);
24
28
  }
25
- const componentSet = (0, injector_1.putIfAbsent)(exports.entityComponents, entityClass, () => new Map());
29
+ const componentSet = (0, injector_1.putIfAbsent)(EcsInjector.entityComponents, entityClass, () => new Map());
26
30
  componentSet.set(componentClass, propertyKey);
27
31
  };
28
32
  exports.EntityComponent = EntityComponent;
@@ -39,15 +43,16 @@ const OnSignal = (id) => (target, propertyKey, descriptor) => {
39
43
  }
40
44
  };
41
45
  exports.OnSignal = OnSignal;
42
- const getComponentDependencies = (system) => {
43
- const dependencies = injector_1.Injector.dependencyMap.get(system);
44
- return dependencies
45
- ? dependencies.filter((dependency) => dependency.kind === 'component')
46
- : [];
46
+ const extractDependenciesWithType = (type) => {
47
+ const result = new Map();
48
+ injector_1.Injector.dependencyMap.forEach((dependency, system) => {
49
+ (0, injector_1.putIfAbsent)(result, system, () => [...dependency.filter((dependency) => dependency.kind === type)]);
50
+ });
51
+ return result;
47
52
  };
48
53
  const getEntityClassesForComponentDependencies = (componentTypes) => {
49
54
  const result = [];
50
- for (const [entityClass, componentMap] of exports.entityComponents) {
55
+ for (const [entityClass, componentMap] of EcsInjector.entityComponents) {
51
56
  let allDependenciesMet = true;
52
57
  for (const componentType of componentTypes) {
53
58
  if (!componentMap.has(componentType)) {
@@ -68,9 +73,17 @@ const componentResolver = (context, dependency) => {
68
73
  throw new Error(`Could not resolve Component ${type.name}. @GetComponent only allowed in system scope.`);
69
74
  }
70
75
  const entityClass = context.entityClass;
71
- const key = exports.entityComponents.get(entityClass).get(dependency.type);
76
+ const key = EcsInjector.entityComponents.get(entityClass).get(dependency.type);
72
77
  return (context) => context.entity[key];
73
78
  };
79
+ const dynamicComponentResolver = (context, dependency) => {
80
+ const kind = context.kind;
81
+ const type = context.type;
82
+ if (kind !== 'system') {
83
+ throw new Error(`Could not resolve Component ${type.name}. @GetComponent only allowed in system scope.`);
84
+ }
85
+ return (context) => context.entity.getDynamicComponent(dependency.type);
86
+ };
74
87
  const entityResolver = ({ type, kind }, _dependency) => {
75
88
  if (kind !== 'system') {
76
89
  throw new Error(`Could not resolve Entity in ${type.name}. @GetEntity only allowed in system scope.`);
@@ -92,13 +105,17 @@ const contextResolver = ({ type, kind }, _dependency) => {
92
105
  class EcsInjector extends injector_1.Injector {
93
106
  constructor(parent) {
94
107
  super(parent);
108
+ this.componentDependencyMap = extractDependenciesWithType('component');
109
+ this.dynamicComponentDependencyMap = extractDependenciesWithType('dynamic');
95
110
  this.signalMap = parent ? parent.signalMap : new Map();
96
111
  this.entitySystemMap = new Map();
112
+ this.dynamicComponentSystemMap = new Map();
97
113
  this.entitySystemResolverTuples = new Map();
98
114
  this.map(EcsInjector).toValue(this);
99
115
  if (!parent) {
100
116
  this.addExtensionResolver('entity', entityResolver);
101
117
  this.addExtensionResolver('component', componentResolver);
118
+ this.addExtensionResolver('dynamic', dynamicComponentResolver);
102
119
  this.addExtensionResolver('context', contextResolver);
103
120
  const signalResolver = ({ kind }, dependency) => {
104
121
  const signal = (0, injector_1.putIfAbsent)(this.signalMap, dependency.id, () => new mani_signal_1.Signal());
@@ -112,12 +129,18 @@ class EcsInjector extends injector_1.Injector {
112
129
  this.signalMap = new Map();
113
130
  }
114
131
  registerSystem(systemClass) {
115
- const componentDependencies = getComponentDependencies(systemClass).map(dependency => dependency.type);
132
+ var _a;
133
+ const componentDependencies = ((_a = this.componentDependencyMap.get(systemClass)) === null || _a === void 0 ? void 0 : _a.map(it => it.type)) || [];
134
+ const dynamicComponentDependencies = this.dynamicComponentDependencyMap.get(systemClass) || [];
135
+ for (const dynamicComponentDependency of dynamicComponentDependencies) {
136
+ const systemClassesForDynamicComponent = (0, injector_1.putIfAbsent)(this.dynamicComponentSystemMap, dynamicComponentDependency.type, () => []);
137
+ systemClassesForDynamicComponent.push(systemClass);
138
+ }
116
139
  if (componentDependencies.length === 0) {
117
140
  throw new Error(`${systemClass.name} needs at least one component dependency.`);
118
141
  }
119
142
  const entityClasses = getEntityClassesForComponentDependencies(componentDependencies);
120
- if (entityClasses.length === 0) {
143
+ if (entityClasses.length === 0 && EcsInjector.warnNoMatchingEntities) {
121
144
  console.warn(`System '${systemClass.name}' has no matching entities.`);
122
145
  return;
123
146
  }
@@ -126,21 +149,33 @@ class EcsInjector extends injector_1.Injector {
126
149
  systemClasses.push(systemClass);
127
150
  }
128
151
  }
129
- createSystems(entity) {
130
- const systemResolverTuples = (0, injector_1.putIfAbsent)(this.entitySystemResolverTuples, entity.constructor, () => {
131
- const systems = this.entitySystemMap.get(entity.constructor);
132
- if (!systems) {
133
- return [];
134
- }
135
- const result = [];
136
- for (const systemClass of systems) {
137
- result.push([systemClass, this.createResolverArray({ type: systemClass, kind: 'system', entityClass: entity.constructor })]);
152
+ createSystemsForDynamicComponents(dynamicComponentClass, entity) {
153
+ const potentialSystems = this.getSystemResolverTuples(entity);
154
+ const systems = this.dynamicComponentSystemMap.get(dynamicComponentClass);
155
+ const finalSystemResolverEntries = new Map();
156
+ for (const system of systems) {
157
+ const resolverTuples = potentialSystems.get(system);
158
+ if (resolverTuples) {
159
+ finalSystemResolverEntries.set(system, resolverTuples);
138
160
  }
139
- return result;
140
- });
141
- const systemInstances = [];
142
- for (const [system, resolver] of systemResolverTuples) {
161
+ }
162
+ return this.createSystems(finalSystemResolverEntries, entity);
163
+ }
164
+ createSystemsForEntity(entity) {
165
+ const systemResolverTuples = this.getSystemResolverTuples(entity);
166
+ return this.createSystems(systemResolverTuples, entity);
167
+ }
168
+ createSystems(systemResolverMap, entity) {
169
+ const systemInstances = new Set();
170
+ for (const [system, resolver] of systemResolverMap) {
143
171
  const args = new Array(resolver.length);
172
+ const dynamicDependencies = this.dynamicComponentDependencyMap.get(system) || [];
173
+ const hasUnfulfilledDynamicDependencies = dynamicDependencies.some((dependency, index) => {
174
+ return !entity.hasDynamicComponentClass(dependency.type);
175
+ });
176
+ if (hasUnfulfilledDynamicDependencies) {
177
+ continue;
178
+ }
144
179
  const systemContext = new systemContext_1.SystemContext(entity);
145
180
  for (let i = 0; i < args.length; i++) {
146
181
  args[i] = resolver[i](systemContext);
@@ -153,10 +188,22 @@ class EcsInjector extends injector_1.Injector {
153
188
  }
154
189
  }
155
190
  systemContext.system = newSystem;
156
- systemInstances.push(systemContext);
191
+ systemInstances.add(systemContext);
157
192
  }
158
193
  return systemInstances;
159
194
  }
195
+ getSystemResolverTuples(entity) {
196
+ return (0, injector_1.putIfAbsent)(this.entitySystemResolverTuples, entity.constructor, () => {
197
+ const systems = this.entitySystemMap.get(entity.constructor);
198
+ if (!systems)
199
+ return [];
200
+ const result = new Map();
201
+ for (const systemClass of systems) {
202
+ result.set(systemClass, this.createResolverArray({ type: systemClass, kind: 'system', entityClass: entity.constructor }));
203
+ }
204
+ return result;
205
+ });
206
+ }
160
207
  getSignal(id) {
161
208
  return (0, injector_1.putIfAbsent)(this.signalMap, id, () => new mani_signal_1.Signal());
162
209
  }
@@ -167,4 +214,6 @@ class EcsInjector extends injector_1.Injector {
167
214
  }
168
215
  }
169
216
  exports.EcsInjector = EcsInjector;
217
+ EcsInjector.warnNoMatchingEntities = true;
218
+ EcsInjector.entityComponents = new Map();
170
219
  //# sourceMappingURL=ecsInjector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecsInjector.js","sourceRoot":"","sources":["../src/ecsInjector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecsInjector.js","sourceRoot":"","sources":["../src/ecsInjector.ts"],"names":[],"mappings":"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"}
package/lib/entity.d.ts CHANGED
@@ -11,6 +11,12 @@ export declare class Entity {
11
11
  private markRemoval;
12
12
  private _detached;
13
13
  private readonly signalMap;
14
+ private dynamicComponents;
15
+ addDynamicComponent<T extends Class>(component: InstanceType<T>): void;
16
+ hasDynamicComponentClass<T extends Class>(componentClass: T): boolean;
17
+ removeDynamicComponentClass<T extends Class>(componentClass: T): void;
18
+ removeDynamicComponent<T extends Class>(component: InstanceType<T>): void;
19
+ getDynamicComponent<T extends Class>(componentClass: T): InstanceType<T> | undefined;
14
20
  get detached(): boolean;
15
21
  constructor();
16
22
  onBeforeRemove?(): Promise<void>;
@@ -23,4 +29,5 @@ export declare class Entity {
23
29
  detach(): Promise<void>;
24
30
  has(entity: Entity): boolean;
25
31
  getAllEntities(target?: Entity[]): Entity[];
32
+ hasDynamicComponents(): boolean;
26
33
  }
package/lib/entity.js CHANGED
@@ -2,10 +2,63 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Entity = void 0;
4
4
  const mani_signal_1 = require("mani-signal");
5
- const ecsInjector_1 = require("./ecsInjector");
6
5
  const injector_1 = require("./injector");
6
+ const ecsInjector_1 = require("./ecsInjector");
7
7
  let idCounter = 0;
8
8
  class Entity {
9
+ addDynamicComponent(component) {
10
+ var _a;
11
+ if (this.hasDynamicComponentClass(component.constructor)) {
12
+ throw new Error('component of this class already added');
13
+ }
14
+ this.dynamicComponents.set(component.constructor, component);
15
+ if (!this.gameEngine)
16
+ return;
17
+ const systemContexts = this.gameEngine.injector.createSystemsForDynamicComponents(component.constructor, this);
18
+ if (!systemContexts)
19
+ return;
20
+ const preparePromises = [];
21
+ for (const context of systemContexts) {
22
+ context.system.onPrepare && preparePromises.push(context.system.onPrepare());
23
+ }
24
+ for (const context of systemContexts) {
25
+ (_a = this.gameEngine['entitySystemMap'].get(this)) === null || _a === void 0 ? void 0 : _a.add(context);
26
+ }
27
+ if (preparePromises.length === 0) {
28
+ this.gameEngine['startSystems'](systemContexts, () => { });
29
+ }
30
+ else {
31
+ Promise.all(preparePromises).then(() => { var _a; return (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a['startSystems'](systemContexts); });
32
+ }
33
+ }
34
+ hasDynamicComponentClass(componentClass) {
35
+ return this.dynamicComponents.has(componentClass);
36
+ }
37
+ removeDynamicComponentClass(componentClass) {
38
+ var _a;
39
+ const systemContexts = (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a['entitySystemMap'].get(this);
40
+ systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.forEach(systemContext => {
41
+ var _a, _b, _c;
42
+ const systemToDependencies = (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a.injector['dynamicComponentDependencyMap'];
43
+ const dependencies = systemToDependencies === null || systemToDependencies === void 0 ? void 0 : systemToDependencies.get(systemContext.system.constructor);
44
+ if (!dependencies)
45
+ return;
46
+ if (dependencies.some(dependency => dependency.type === componentClass)) {
47
+ (_c = (_b = this.gameEngine) === null || _b === void 0 ? void 0 : _b['disposeContext']) === null || _c === void 0 ? void 0 : _c.call(_b, systemContext);
48
+ systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.delete(systemContext);
49
+ }
50
+ });
51
+ if (!this.dynamicComponents.delete(componentClass)) {
52
+ throw new Error('component not found: ' + JSON.stringify(componentClass));
53
+ }
54
+ }
55
+ removeDynamicComponent(component) {
56
+ this.removeDynamicComponentClass(component.constructor);
57
+ }
58
+ getDynamicComponent(componentClass) {
59
+ return this.dynamicComponents.get(componentClass);
60
+ }
61
+ get detached() { return this._detached; }
9
62
  constructor() {
10
63
  this.children = new Set();
11
64
  this.parentChanged = new mani_signal_1.Signal();
@@ -13,9 +66,9 @@ class Entity {
13
66
  this.markRemoval = false;
14
67
  this._detached = false;
15
68
  this.signalMap = new Map();
69
+ this.dynamicComponents = new Map();
16
70
  this.id = idCounter++;
17
71
  }
18
- get detached() { return this._detached; }
19
72
  getSignal(id) {
20
73
  return (0, injector_1.putIfAbsent)(this.signalMap, id, () => new mani_signal_1.Signal());
21
74
  }
@@ -30,7 +83,7 @@ class Entity {
30
83
  return this._parent;
31
84
  }
32
85
  getComponent(componentClass) {
33
- const componentMap = ecsInjector_1.entityComponents.get(this.constructor);
86
+ const componentMap = ecsInjector_1.EcsInjector.entityComponents.get(this.constructor);
34
87
  if (!componentMap) {
35
88
  throw new Error(`No components in entity of type '${this.constructor.name}'.`);
36
89
  }
@@ -97,6 +150,9 @@ class Entity {
97
150
  }
98
151
  return target;
99
152
  }
153
+ hasDynamicComponents() {
154
+ return this.dynamicComponents.size > 0;
155
+ }
100
156
  }
101
157
  exports.Entity = Entity;
102
158
  //# sourceMappingURL=entity.js.map
package/lib/entity.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ declare const defaultOptions: {
8
8
  fixedDeltaTime: number;
9
9
  plugins: GameEnginePlugin[];
10
10
  };
11
- export declare type GameEngineOptions = Partial<typeof defaultOptions>;
11
+ export type GameEngineOptions = Partial<typeof defaultOptions>;
12
12
  declare global {
13
13
  interface GameEngineActions {
14
14
  'testAction': string;
@@ -79,5 +79,7 @@ export declare class GameEngine {
79
79
  private getStaticSignalMap;
80
80
  dispose(): void;
81
81
  private prepareFrame;
82
+ private startSystems;
83
+ private disposeContext;
82
84
  }
83
85
  export {};
package/lib/gameEngine.js CHANGED
@@ -11,6 +11,10 @@ const defaultOptions = {
11
11
  };
12
12
  let id = 0;
13
13
  class GameEngine {
14
+ get started() { return this._started; }
15
+ get frameCount() { return this._frameCount; }
16
+ get fixedFrameCount() { return this._fixedFrameCount; }
17
+ get numEntities() { return this.entitySystemMap.size; }
14
18
  constructor(injector, clock) {
15
19
  this.injector = injector;
16
20
  this.clock = clock;
@@ -52,10 +56,6 @@ class GameEngine {
52
56
  this.setupClock();
53
57
  this.prepareFrame();
54
58
  }
55
- get started() { return this._started; }
56
- get frameCount() { return this._frameCount; }
57
- get fixedFrameCount() { return this._fixedFrameCount; }
58
- get numEntities() { return this.entitySystemMap.size; }
59
59
  static createDefault(options) {
60
60
  const opts = Object.assign(Object.assign({}, defaultOptions), options);
61
61
  const clock = new clock_1.GameClock({
@@ -269,19 +269,7 @@ class GameEngine {
269
269
  this.entitySystemMap.delete(entity);
270
270
  if (systemContexts) {
271
271
  for (const context of systemContexts) {
272
- context.dispose();
273
- const system = context.system;
274
- this.unmapAnnotatedSignals(system);
275
- system.onEnd && system.onEnd();
276
- system.onPreFixedUpdate && this.onPreFixedUpdateSet.delete(system);
277
- system.onFixedUpdate && this.onFixedUpdateSet.delete(system);
278
- system.onUpdate && this.onUpdateSet.delete(system);
279
- system.onLateUpdate && this.onLateUpdateSet.delete(system);
280
- system.onPhysicsUpdate && this.onPhysicsUpdateSet.delete(system);
281
- system.onPrePhysicsUpdate && this.onPrePhysicsUpdateSet.delete(system);
282
- system.onPostPhysicsUpdate && this.onPostPhysicsUpdateSet.delete(system);
283
- system.onLateFixedUpdate && this.onLateFixedUpdateSet.delete(system);
284
- system.onRender && this.onRenderUpdateSet.delete(system);
272
+ this.disposeContext(context);
285
273
  }
286
274
  }
287
275
  entity.onRemove.dispatch();
@@ -292,41 +280,24 @@ class GameEngine {
292
280
  this.removeQueue = [];
293
281
  for (const [entity, resolve] of this.addQueue) {
294
282
  const preparePromises = [];
295
- const nexSystemContexts = [];
283
+ const nextSystemContexts = [];
296
284
  const entities = entity.getAllEntities();
297
285
  for (const entity of entities) {
298
286
  if (entity.gameEngine)
299
287
  throw new Error('Entity already added to a gameEngine');
300
288
  entity.gameEngine = this;
301
- const systemContexts = this.injector.createSystems(entity);
289
+ const systemContexts = this.injector.createSystemsForEntity(entity);
302
290
  for (const context of systemContexts) {
303
291
  context.system.onPrepare && preparePromises.push(context.system.onPrepare());
304
- nexSystemContexts.push(context);
292
+ nextSystemContexts.push(context);
305
293
  }
306
294
  this.entitySystemMap.set(entity, systemContexts);
307
295
  }
308
- const startSystems = () => {
309
- for (const context of nexSystemContexts) {
310
- const system = context.system;
311
- this.mapAnnotatedSignals(system);
312
- system.onStart && system.onStart();
313
- system.onPreFixedUpdate && this.onPreFixedUpdateSet.add(system);
314
- system.onFixedUpdate && this.onFixedUpdateSet.add(system);
315
- system.onUpdate && this.onUpdateSet.add(system);
316
- system.onLateUpdate && this.onLateUpdateSet.add(system);
317
- system.onPhysicsUpdate && this.onPhysicsUpdateSet.add(system);
318
- system.onPrePhysicsUpdate && this.onPrePhysicsUpdateSet.add(system);
319
- system.onPostPhysicsUpdate && this.onPostPhysicsUpdateSet.add(system);
320
- system.onLateFixedUpdate && this.onLateFixedUpdateSet.add(system);
321
- system.onRender && this.onRenderUpdateSet.add(system);
322
- }
323
- resolve();
324
- };
325
296
  if (preparePromises.length === 0) {
326
- startSystems();
297
+ this.startSystems(nextSystemContexts, resolve);
327
298
  }
328
299
  else {
329
- Promise.all(preparePromises).then(startSystems);
300
+ Promise.all(preparePromises).then(() => this.startSystems(nextSystemContexts, resolve));
330
301
  }
331
302
  }
332
303
  this.addQueue = [];
@@ -336,6 +307,39 @@ class GameEngine {
336
307
  });
337
308
  this.onPrepare.dispatch();
338
309
  }
310
+ startSystems(contexts, then) {
311
+ for (const context of contexts) {
312
+ const system = context.system;
313
+ this.mapAnnotatedSignals(system);
314
+ system.onStart && system.onStart();
315
+ system.onPreFixedUpdate && this.onPreFixedUpdateSet.add(system);
316
+ system.onFixedUpdate && this.onFixedUpdateSet.add(system);
317
+ system.onUpdate && this.onUpdateSet.add(system);
318
+ system.onLateUpdate && this.onLateUpdateSet.add(system);
319
+ system.onPhysicsUpdate && this.onPhysicsUpdateSet.add(system);
320
+ system.onPrePhysicsUpdate && this.onPrePhysicsUpdateSet.add(system);
321
+ system.onPostPhysicsUpdate && this.onPostPhysicsUpdateSet.add(system);
322
+ system.onLateFixedUpdate && this.onLateFixedUpdateSet.add(system);
323
+ system.onRender && this.onRenderUpdateSet.add(system);
324
+ }
325
+ then === null || then === void 0 ? void 0 : then();
326
+ }
327
+ ;
328
+ disposeContext(context) {
329
+ context.dispose();
330
+ const system = context.system;
331
+ this.unmapAnnotatedSignals(system);
332
+ system.onEnd && system.onEnd();
333
+ system.onPreFixedUpdate && this.onPreFixedUpdateSet.delete(system);
334
+ system.onFixedUpdate && this.onFixedUpdateSet.delete(system);
335
+ system.onUpdate && this.onUpdateSet.delete(system);
336
+ system.onLateUpdate && this.onLateUpdateSet.delete(system);
337
+ system.onPhysicsUpdate && this.onPhysicsUpdateSet.delete(system);
338
+ system.onPrePhysicsUpdate && this.onPrePhysicsUpdateSet.delete(system);
339
+ system.onPostPhysicsUpdate && this.onPostPhysicsUpdateSet.delete(system);
340
+ system.onLateFixedUpdate && this.onLateFixedUpdateSet.delete(system);
341
+ system.onRender && this.onRenderUpdateSet.delete(system);
342
+ }
339
343
  }
340
344
  exports.GameEngine = GameEngine;
341
345
  //# sourceMappingURL=gameEngine.js.map