mani-game-engine 1.0.0-pre.74 → 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/systemContext.d.ts +2 -2
- package/lib/systemContext.js +14 -4
- package/lib/systemContext.js.map +1 -1
- package/package.json +1 -1
- package/src/systemContext.ts +37 -25
package/lib/systemContext.d.ts
CHANGED
|
@@ -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
|
}
|
package/lib/systemContext.js
CHANGED
|
@@ -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.
|
|
23
|
+
this.signalBindings.add(this.entity.gameEngine.getSignal(signalId).add(callback, thisArg));
|
|
24
24
|
}
|
|
25
25
|
addSignal(signal, callback, thisArg) {
|
|
26
|
-
|
|
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
|
-
|
|
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)
|
package/lib/systemContext.js.map
CHANGED
|
@@ -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;
|
|
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
package/src/systemContext.ts
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
readonly system!: T;
|
|
16
|
+
readonly onDispose = new Signal();
|
|
17
|
+
private signalBindings = new Set<SignalBinding>();
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
constructor(readonly entity: Entity) {
|
|
20
|
+
}
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
}
|