mani-game-engine 1.0.0-pre.44 → 1.0.0-pre.46

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/entity.d.ts CHANGED
@@ -11,7 +11,10 @@ export declare class Entity {
11
11
  private markRemoval;
12
12
  private _detached;
13
13
  private readonly signalMap;
14
- private dynamicComponents;
14
+ private _dynamicComponents;
15
+ readonly dynamicComponentAdded: Signal<any>;
16
+ readonly dynamicComponentRemoved: Signal<any>;
17
+ get dynamicComponents(): ReadonlyMap<Class, InstanceType<any>>;
15
18
  addDynamicComponent<T extends Class>(component: InstanceType<T>): void;
16
19
  hasDynamicComponentClass<T extends Class>(componentClass: T): boolean;
17
20
  removeDynamicComponentClass<T extends Class>(componentClass: T): void;
package/lib/entity.js CHANGED
@@ -13,17 +13,23 @@ class Entity {
13
13
  this.markRemoval = false;
14
14
  this._detached = false;
15
15
  this.signalMap = new Map();
16
- this.dynamicComponents = new Map();
16
+ this._dynamicComponents = new Map();
17
+ this.dynamicComponentAdded = new mani_signal_1.Signal();
18
+ this.dynamicComponentRemoved = new mani_signal_1.Signal();
17
19
  }
18
20
  get isAdded() {
19
21
  return !!this.gameEngine;
20
22
  }
23
+ get dynamicComponents() {
24
+ return this._dynamicComponents;
25
+ }
21
26
  addDynamicComponent(component) {
22
27
  var _a;
23
28
  if (this.hasDynamicComponentClass(component.constructor)) {
24
29
  throw new Error('component of this class already added');
25
30
  }
26
- this.dynamicComponents.set(component.constructor, component);
31
+ this._dynamicComponents.set(component.constructor, component);
32
+ this.dynamicComponentAdded.dispatch(component);
27
33
  if (!this.gameEngine)
28
34
  return;
29
35
  const systemContexts = this.gameEngine.injector.createSystemsForDynamicComponents(component.constructor, this);
@@ -44,7 +50,7 @@ class Entity {
44
50
  }
45
51
  }
46
52
  hasDynamicComponentClass(componentClass) {
47
- return this.dynamicComponents.has(componentClass);
53
+ return this._dynamicComponents.has(componentClass);
48
54
  }
49
55
  removeDynamicComponentClass(componentClass) {
50
56
  var _a;
@@ -60,15 +66,17 @@ class Entity {
60
66
  systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.delete(systemContext);
61
67
  }
62
68
  });
63
- if (!this.dynamicComponents.delete(componentClass)) {
69
+ const component = this._dynamicComponents.get(componentClass);
70
+ if (!this._dynamicComponents.delete(componentClass)) {
64
71
  throw new Error('component not found: ' + JSON.stringify(componentClass));
65
72
  }
73
+ this.dynamicComponentRemoved.dispatch(component);
66
74
  }
67
75
  removeDynamicComponent(component) {
68
76
  this.removeDynamicComponentClass(component.constructor);
69
77
  }
70
78
  getDynamicComponent(componentClass) {
71
- return this.dynamicComponents.get(componentClass);
79
+ return this._dynamicComponents.get(componentClass);
72
80
  }
73
81
  get detached() { return this._detached; }
74
82
  getSignal(id) {
@@ -153,7 +161,7 @@ class Entity {
153
161
  return target;
154
162
  }
155
163
  hasDynamicComponents() {
156
- return this.dynamicComponents.size > 0;
164
+ return this._dynamicComponents.size > 0;
157
165
  }
158
166
  }
159
167
  exports.Entity = Entity;
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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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mani-game-engine",
3
3
  "author": "Jan Mankopf",
4
- "version": "1.0.0-pre.44",
4
+ "version": "1.0.0-pre.46",
5
5
  "description": "entity component system game engine for typescript",
6
6
  "private": false,
7
7
  "scripts": {
package/src/entity.ts CHANGED
@@ -23,15 +23,23 @@ export class Entity {
23
23
  private _detached = false;
24
24
  private readonly signalMap: Map<ID, Signal> = new Map<ID, Signal>();
25
25
 
26
- private dynamicComponents = new Map<Class, InstanceType<any>>();
26
+ private _dynamicComponents = new Map<Class, InstanceType<any>>();
27
+
28
+ readonly dynamicComponentAdded = new Signal<InstanceType<any>>();
29
+ readonly dynamicComponentRemoved = new Signal<InstanceType<any>>();
30
+
31
+ get dynamicComponents(): ReadonlyMap<Class, InstanceType<any>> {
32
+ return this._dynamicComponents;
33
+ }
27
34
 
28
35
  // TODO: move the logic to gameEngine?
29
36
  addDynamicComponent<T extends Class>(component: InstanceType<T>) {
30
37
  if (this.hasDynamicComponentClass(component.constructor)) {
31
38
  throw new Error('component of this class already added');
32
39
  }
33
- this.dynamicComponents.set(component.constructor as T, component);
40
+ this._dynamicComponents.set(component.constructor as T, component);
34
41
 
42
+ this.dynamicComponentAdded.dispatch(component);
35
43
  if (!this.gameEngine) return;
36
44
 
37
45
  const systemContexts = this.gameEngine.injector.createSystemsForDynamicComponents(component.constructor, this);
@@ -50,11 +58,10 @@ export class Entity {
50
58
  } else {
51
59
  Promise.all(preparePromises).then(() => this.gameEngine?.['startSystems'](systemContexts));
52
60
  }
53
-
54
61
  }
55
62
 
56
63
  hasDynamicComponentClass<T extends Class>(componentClass: T): boolean {
57
- return this.dynamicComponents.has(componentClass);
64
+ return this._dynamicComponents.has(componentClass);
58
65
  }
59
66
 
60
67
  // TODO: move the logic to gameEngine?
@@ -69,9 +76,11 @@ export class Entity {
69
76
  systemContexts?.delete(systemContext);
70
77
  }
71
78
  });
72
- if (!this.dynamicComponents.delete(componentClass)) {
79
+ const component = this._dynamicComponents.get(componentClass);
80
+ if (!this._dynamicComponents.delete(componentClass)) {
73
81
  throw new Error('component not found: ' + JSON.stringify(componentClass));
74
82
  }
83
+ this.dynamicComponentRemoved.dispatch(component);
75
84
  }
76
85
 
77
86
  removeDynamicComponent<T extends Class>(component: InstanceType<T>) {
@@ -79,7 +88,7 @@ export class Entity {
79
88
  }
80
89
 
81
90
  getDynamicComponent<T extends Class>(componentClass: T): InstanceType<T> | undefined {
82
- return this.dynamicComponents.get(componentClass);
91
+ return this._dynamicComponents.get(componentClass);
83
92
  }
84
93
 
85
94
  get detached(): boolean { return this._detached; }
@@ -188,6 +197,6 @@ export class Entity {
188
197
  }
189
198
 
190
199
  hasDynamicComponents() {
191
- return this.dynamicComponents.size > 0;
200
+ return this._dynamicComponents.size > 0;
192
201
  }
193
202
  }