mani-game-engine 1.0.0-pre.73 → 1.0.0-pre.75

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
@@ -1,9 +1,10 @@
1
+ import { GameEngine } from './gameEngine';
1
2
  import { Signal } from 'mani-signal';
2
3
  import { Class } from './types';
3
4
  import { ID } from './injector';
4
5
  export declare class Entity {
5
6
  readonly children: Set<Entity>;
6
- private gameEngine?;
7
+ readonly gameEngine?: GameEngine;
7
8
  get isAdded(): boolean;
8
9
  private _parent?;
9
10
  readonly parentChanged: Signal<unknown>;
@@ -9,7 +9,7 @@ export declare class SystemContext<T extends System = System> {
9
9
  private signalBindings;
10
10
  constructor(entity: Entity);
11
11
  addSignalById<S>(signalId: string | symbol, callback: SignalCallback<S>, thisArg?: unknown): void;
12
- addSignal<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown): void;
13
- addSignalOnce<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown): void;
12
+ addSignal<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown): () => void;
13
+ addSignalOnce<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown): () => void;
14
14
  dispose(): void;
15
15
  }
@@ -17,16 +17,26 @@ class SystemContext {
17
17
  constructor(entity) {
18
18
  this.entity = entity;
19
19
  this.onDispose = new index_1.Signal();
20
- this.signalBindings = [];
20
+ this.signalBindings = new Set();
21
21
  }
22
22
  addSignalById(signalId, callback, thisArg) {
23
- this.signalBindings.push(this.entity.gameEngine.getSignal(signalId).add(callback, thisArg));
23
+ this.signalBindings.add(this.entity.gameEngine.getSignal(signalId).add(callback, thisArg));
24
24
  }
25
25
  addSignal(signal, callback, thisArg) {
26
- this.signalBindings.push(signal.add(callback, thisArg));
26
+ const binding = signal.add(callback, thisArg);
27
+ this.signalBindings.add(binding);
28
+ return () => {
29
+ binding.detach();
30
+ this.signalBindings.delete(binding);
31
+ };
27
32
  }
28
33
  addSignalOnce(signal, callback, thisArg) {
29
- this.signalBindings.push(signal.addOnce(callback, thisArg));
34
+ const binding = signal.addOnce(callback, thisArg);
35
+ this.signalBindings.add(binding);
36
+ return () => {
37
+ binding.detach();
38
+ this.signalBindings.delete(binding);
39
+ };
30
40
  }
31
41
  dispose() {
32
42
  for (const binding of this.signalBindings)
@@ -1 +1 @@
1
- {"version":3,"file":"systemContext.js","sourceRoot":"","sources":["../src/systemContext.ts"],"names":[],"mappings":";;;AACA,mCAAmG;AAEtF,QAAA,oBAAoB,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC/D,MAAM,cAAc,GAAG,CAAC,EAAM,EAAE,EAAE,CAAC,CAAC,MAAW,EAAE,WAAmB,EAAE,UAA8B,EAAE,EAAE;IAC3G,IAAI,MAAM,YAAY,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACJ,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,4BAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;QACpG,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB;AAEF,MAAa,aAAa;IAKtB,YAAqB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAH1B,cAAS,GAAG,IAAI,cAAM,EAAE,CAAC;QAC1B,mBAAc,GAAoB,EAAE,CAAC;IAG7C,CAAC;IAGD,aAAa,CAAI,QAAyB,EAAE,QAA2B,EAAE,OAAiB;QACtF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAG,IAAI,CAAC,MAAc,CAAC,UAAyB,CAAC,SAAS,CAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,SAAS,CAAI,MAAiB,EAAE,QAA2B,EAAE,OAAiB;QAC1E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,aAAa,CAAI,MAAiB,EAAE,QAA2B,EAAE,OAAiB;QAC9E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;CACJ;AA1BD,sCA0BC"}
1
+ {"version":3,"file":"systemContext.js","sourceRoot":"","sources":["../src/systemContext.ts"],"names":[],"mappings":";;;AACA,mCAAmG;AAEtF,QAAA,oBAAoB,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC/D,MAAM,cAAc,GAAG,CAAC,EAAM,EAAE,EAAE,CAAC,CAAC,MAAW,EAAE,WAAmB,EAAE,UAA8B,EAAE,EAAE;IAC7G,IAAI,MAAM,YAAY,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,4BAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;QACpG,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB;AAEF,MAAa,aAAa;IAKxB,YAAqB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAH1B,cAAS,GAAG,IAAI,cAAM,EAAE,CAAC;QAC1B,mBAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAGlD,CAAC;IAGD,aAAa,CAAI,QAAyB,EAAE,QAA2B,EAAE,OAAiB;QACxF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAG,IAAI,CAAC,MAAc,CAAC,UAAyB,CAAC,SAAS,CAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACzH,CAAC;IAGD,SAAS,CAAI,MAAiB,EAAE,QAA2B,EAAE,OAAiB;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC;IAED,aAAa,CAAI,MAAiB,EAAE,QAA2B,EAAE,OAAiB;QAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAA;IAEH,CAAC;IAED,OAAO;QACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC;CACF;AAtCD,sCAsCC"}
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.73",
4
+ "version": "1.0.0-pre.75",
5
5
  "description": "entity component system game engine for typescript",
6
6
  "private": false,
7
7
  "scripts": {
package/src/entity.ts CHANGED
@@ -10,7 +10,7 @@ let idCounter = 0;
10
10
  export class Entity {
11
11
 
12
12
  readonly children = new Set<Entity>();
13
- private gameEngine?: GameEngine;
13
+ readonly gameEngine?: GameEngine;
14
14
 
15
15
  get isAdded() {
16
16
  return !!this.gameEngine;
@@ -3,38 +3,50 @@ import {Entity, GameEngine, ID, putIfAbsent, Signal, SignalBinding, SignalCallba
3
3
 
4
4
  export const entitySignalHandlers = new Map<Object, [string, ID][]>();
5
5
  export const OnEntitySignal = (id: ID) => (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
6
- if (target instanceof Function) {
7
- throw new Error('only allowed on non static methods');
8
- } else {
9
- const mappingList = putIfAbsent(entitySignalHandlers, target.constructor, (): [string, ID][] => []);
10
- mappingList.push([propertyKey, id]);
11
- }
6
+ if (target instanceof Function) {
7
+ throw new Error('only allowed on non static methods');
8
+ } else {
9
+ const mappingList = putIfAbsent(entitySignalHandlers, target.constructor, (): [string, ID][] => []);
10
+ mappingList.push([propertyKey, id]);
11
+ }
12
12
  };
13
13
 
14
14
  export class SystemContext<T extends System = System> {
15
- readonly system!: T;
16
- readonly onDispose = new Signal();
17
- private signalBindings: SignalBinding[] = [];
15
+ readonly system!: T;
16
+ readonly onDispose = new Signal();
17
+ private signalBindings = new Set<SignalBinding>();
18
18
 
19
- constructor(readonly entity: Entity) {
20
- }
19
+ constructor(readonly entity: Entity) {
20
+ }
21
21
 
22
- // TODO: is this a bit hacky?
23
- addSignalById<S>(signalId: string | symbol, callback: SignalCallback<S>, thisArg?: unknown) {
24
- this.signalBindings.push(((this.entity as any).gameEngine as GameEngine).getSignal<S>(signalId).add(callback, thisArg));
25
- }
22
+ // TODO: is this a bit hacky?
23
+ addSignalById<S>(signalId: string | symbol, callback: SignalCallback<S>, thisArg?: unknown) {
24
+ this.signalBindings.add(((this.entity as any).gameEngine as GameEngine).getSignal<S>(signalId).add(callback, thisArg));
25
+ }
26
26
 
27
- addSignal<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown) {
28
- this.signalBindings.push(signal.add(callback, thisArg));
29
- }
27
+ // returns a function that can be called to remove the signal
28
+ addSignal<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown) {
29
+ const binding = signal.add(callback, thisArg);
30
+ this.signalBindings.add(binding);
31
+ return () => {
32
+ binding.detach();
33
+ this.signalBindings.delete(binding);
34
+ };
35
+ }
30
36
 
31
- addSignalOnce<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown) {
32
- this.signalBindings.push(signal.addOnce(callback, thisArg));
37
+ addSignalOnce<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown) {
38
+ const binding = signal.addOnce(callback, thisArg);
39
+ this.signalBindings.add(binding);
40
+ return () => {
41
+ binding.detach();
42
+ this.signalBindings.delete(binding);
33
43
  }
34
44
 
35
- dispose() {
36
- for (const binding of this.signalBindings) binding.detach();
37
- this.onDispose.dispatch();
38
- this.onDispose.detachAll();
39
- }
45
+ }
46
+
47
+ dispose() {
48
+ for (const binding of this.signalBindings) binding.detach();
49
+ this.onDispose.dispatch();
50
+ this.onDispose.detachAll();
51
+ }
40
52
  }