mani-game-engine 1.0.0-pre.50 → 1.0.0-pre.51
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.
|
@@ -27,7 +27,7 @@ export type ScopeMapping = (params: {
|
|
|
27
27
|
onSubExit: Signal<ScopeContext>;
|
|
28
28
|
onActivate: Signal<ScopeContext>;
|
|
29
29
|
onDeactivate: Signal<ScopeContext>;
|
|
30
|
-
}) => void
|
|
30
|
+
}) => any | Promise<void>;
|
|
31
31
|
interface AddScopeSignalOptions extends ScopeSignalOptions {
|
|
32
32
|
context?: unknown;
|
|
33
33
|
}
|
|
@@ -48,13 +48,13 @@ export declare class ScopeContext {
|
|
|
48
48
|
readonly onDeactivate: Signal<ScopeContext>;
|
|
49
49
|
private readonly creationTime;
|
|
50
50
|
get runtime(): number;
|
|
51
|
-
constructor(injector: EcsInjector, scopeClass: Class, mapping?: ScopeMapping, parent?: ScopeContext | undefined);
|
|
51
|
+
constructor(injector: EcsInjector, scopeClass: Class, mapping?: ScopeMapping, parent?: ScopeContext | undefined, resolve?: () => void);
|
|
52
52
|
get isRoot(): boolean;
|
|
53
53
|
get target(): Scope | undefined;
|
|
54
54
|
get isActive(): boolean;
|
|
55
55
|
get activeContext(): ScopeContext;
|
|
56
|
-
enterScope(scopeClass: Class, mapping?: ScopeMapping): ScopeContext | undefined
|
|
57
|
-
exitScope(target?: Scope): void
|
|
56
|
+
enterScope(scopeClass: Class, mapping?: ScopeMapping): Promise<ScopeContext | undefined>;
|
|
57
|
+
exitScope(target?: Scope): Promise<void>;
|
|
58
58
|
closeSubScopes(): void;
|
|
59
59
|
private logStack;
|
|
60
60
|
getStackClasses(): Scope[];
|
|
@@ -53,8 +53,7 @@ class ScopeContext {
|
|
|
53
53
|
get runtime() {
|
|
54
54
|
return (performance.now() - this.creationTime) / 1000;
|
|
55
55
|
}
|
|
56
|
-
constructor(injector, scopeClass, mapping, parent) {
|
|
57
|
-
var _a, _b, _c, _d;
|
|
56
|
+
constructor(injector, scopeClass, mapping, parent, resolve) {
|
|
58
57
|
this.parent = parent;
|
|
59
58
|
this.signalBindings = [];
|
|
60
59
|
this.serviceBindings = [];
|
|
@@ -77,7 +76,7 @@ class ScopeContext {
|
|
|
77
76
|
this.injector = injector.createChild();
|
|
78
77
|
this.injector.map(scopeClass).toSingleton();
|
|
79
78
|
this.injector.map(ScopeContext).toValue(this);
|
|
80
|
-
mapping === null || mapping === void 0 ? void 0 : mapping({
|
|
79
|
+
const result = mapping === null || mapping === void 0 ? void 0 : mapping({
|
|
81
80
|
injector: this.injector,
|
|
82
81
|
registerScopeService: serviceClass => {
|
|
83
82
|
this.injector.map(serviceClass).toSingleton();
|
|
@@ -90,13 +89,23 @@ class ScopeContext {
|
|
|
90
89
|
onActivate: this.onActivate,
|
|
91
90
|
onDeactivate: this.onDeactivate,
|
|
92
91
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
92
|
+
const completeScopeChange = () => {
|
|
93
|
+
var _a, _b, _c, _d;
|
|
94
|
+
this.scope = this.injector.get(scopeClass);
|
|
95
|
+
this.mapScopeSignals();
|
|
96
|
+
this.updateSignalBindings();
|
|
97
|
+
(_b = (_a = this.scope).onEnter) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
98
|
+
this.onEnter.dispatch(this);
|
|
99
|
+
(_d = (_c = this.scope).onActivate) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
100
|
+
this.onActivate.dispatch(this);
|
|
101
|
+
resolve === null || resolve === void 0 ? void 0 : resolve();
|
|
102
|
+
};
|
|
103
|
+
if (result instanceof Promise) {
|
|
104
|
+
result.then(completeScopeChange);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
completeScopeChange();
|
|
108
|
+
}
|
|
100
109
|
}
|
|
101
110
|
get isRoot() {
|
|
102
111
|
return this === this.stack.rootScope;
|
|
@@ -108,19 +117,21 @@ class ScopeContext {
|
|
|
108
117
|
return this === this.stack.activeContext;
|
|
109
118
|
}
|
|
110
119
|
get activeContext() { return this.stack.activeContext; }
|
|
111
|
-
enterScope(scopeClass, mapping) {
|
|
120
|
+
async enterScope(scopeClass, mapping) {
|
|
112
121
|
let newContext;
|
|
113
|
-
const doChange = () => {
|
|
122
|
+
const doChange = async () => {
|
|
114
123
|
var _a, _b, _c, _d;
|
|
115
124
|
(_b = (_a = this.activeContext.scope).onSubExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
116
125
|
this.activeContext.onSubExit.dispatch(this);
|
|
117
126
|
(_d = (_c = this.activeContext.scope).onDeactivate) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
118
127
|
this.activeContext.onDeactivate.dispatch(this);
|
|
119
|
-
|
|
128
|
+
await new Promise(resolve => {
|
|
129
|
+
newContext = new ScopeContext(this.activeContext.injector, scopeClass, mapping, this.activeContext, resolve);
|
|
130
|
+
});
|
|
120
131
|
this.logStack();
|
|
121
132
|
const nextChange = this.stack.queuedScopeChanges.shift();
|
|
122
133
|
if (nextChange) {
|
|
123
|
-
nextChange();
|
|
134
|
+
await nextChange();
|
|
124
135
|
}
|
|
125
136
|
else {
|
|
126
137
|
this.stack.ongoingChange = false;
|
|
@@ -128,15 +139,15 @@ class ScopeContext {
|
|
|
128
139
|
};
|
|
129
140
|
if (!this.stack.ongoingChange) {
|
|
130
141
|
this.stack.ongoingChange = true;
|
|
131
|
-
doChange();
|
|
142
|
+
await doChange();
|
|
132
143
|
}
|
|
133
144
|
else {
|
|
134
145
|
this.stack.queuedScopeChanges.push(doChange);
|
|
135
146
|
}
|
|
136
147
|
return newContext;
|
|
137
148
|
}
|
|
138
|
-
exitScope(target) {
|
|
139
|
-
const doChange = () => {
|
|
149
|
+
async exitScope(target) {
|
|
150
|
+
const doChange = async () => {
|
|
140
151
|
if (this.closed)
|
|
141
152
|
throw new Error(`Scope already closed`);
|
|
142
153
|
this.stack.target = target || this.scope.constructor;
|
|
@@ -153,7 +164,7 @@ class ScopeContext {
|
|
|
153
164
|
this.stack.target = undefined;
|
|
154
165
|
const nextChange = this.stack.queuedScopeChanges.shift();
|
|
155
166
|
if (nextChange) {
|
|
156
|
-
nextChange();
|
|
167
|
+
await nextChange();
|
|
157
168
|
}
|
|
158
169
|
else {
|
|
159
170
|
this.stack.ongoingChange = false;
|
|
@@ -161,7 +172,7 @@ class ScopeContext {
|
|
|
161
172
|
};
|
|
162
173
|
if (!this.stack.ongoingChange) {
|
|
163
174
|
this.stack.ongoingChange = true;
|
|
164
|
-
doChange();
|
|
175
|
+
await doChange();
|
|
165
176
|
}
|
|
166
177
|
else {
|
|
167
178
|
this.stack.queuedScopeChanges.push(doChange);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopeContext.js","sourceRoot":"","sources":["../../src/scope/scopeContext.ts"],"names":[],"mappings":";;;AAAA,oCAAmF;AACnF,gDAA8C;AAC9C,0CAA4C;AAI/B,QAAA,mBAAmB,GAAG,IAAI,GAAG,EAA+C,CAAC;AAEnF,MAAM,aAAa,GAAG,CAAC,EAAM,EAAE,OAA4B,EAAE,EAAE,CAAC,CAAC,MAAW,EAAE,WAAmB,EAAE,UAA8B,EAAE,EAAE;IACxI,IAAI,MAAM,YAAY,QAAQ,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACzD;SAAM;QACH,MAAM,WAAW,GAAG,IAAA,sBAAW,EAAC,2BAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAwC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxH,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;KAChD;AACL,CAAC,CAAC;AAPW,QAAA,aAAa,iBAOxB;AAEW,QAAA,aAAa,GAAG;IACzB,GAAG,EAAE,IAAI;CACZ,CAAC;AAYF,MAAM,kBAAkB;IAIpB,YAAoB,aAA4B,EAAE,OAA4B;QAA1D,kBAAa,GAAb,aAAa,CAAe;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC;IAChC,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,UAAU;QACN,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,MAAM;QACF,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;CACJ;AAED,MAAM,UAAU;IAMZ,YAAqB,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;QALnC,UAAK,GAAmB,EAAE,CAAC;QACpC,uBAAkB,
|
|
1
|
+
{"version":3,"file":"scopeContext.js","sourceRoot":"","sources":["../../src/scope/scopeContext.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -53,7 +53,7 @@ class ScopeSignalBinding {
|
|
|
53
53
|
|
|
54
54
|
class ScopeStack {
|
|
55
55
|
readonly stack: ScopeContext[] = [];
|
|
56
|
-
queuedScopeChanges:
|
|
56
|
+
queuedScopeChanges: (() => Promise<void>)[] = [];
|
|
57
57
|
ongoingChange = false;
|
|
58
58
|
target?: Scope;
|
|
59
59
|
|
|
@@ -81,7 +81,7 @@ export type ScopeMapping = (params: {
|
|
|
81
81
|
onActivate: Signal<ScopeContext>,
|
|
82
82
|
onDeactivate: Signal<ScopeContext>,
|
|
83
83
|
|
|
84
|
-
}) => void
|
|
84
|
+
}) => any | Promise<void>;
|
|
85
85
|
|
|
86
86
|
interface AddScopeSignalOptions extends ScopeSignalOptions {
|
|
87
87
|
context?: unknown;
|
|
@@ -89,7 +89,7 @@ interface AddScopeSignalOptions extends ScopeSignalOptions {
|
|
|
89
89
|
|
|
90
90
|
// TODO: maybe move Signal resolver to Injector and dont use EcsInjector here?
|
|
91
91
|
export class ScopeContext {
|
|
92
|
-
readonly scope
|
|
92
|
+
readonly scope!: Scope;
|
|
93
93
|
readonly injector: EcsInjector;
|
|
94
94
|
private readonly stack: ScopeStack; // TODO: naming
|
|
95
95
|
private readonly signalBindings: ScopeSignalBinding[] = [];
|
|
@@ -112,7 +112,7 @@ export class ScopeContext {
|
|
|
112
112
|
return (performance.now() - this.creationTime) / 1000;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
constructor(injector: EcsInjector, scopeClass: Class, mapping?: ScopeMapping, private parent?: ScopeContext) {
|
|
115
|
+
constructor(injector: EcsInjector, scopeClass: Class, mapping?: ScopeMapping, private parent?: ScopeContext, resolve?: () => void) {
|
|
116
116
|
this.creationTime = performance.now();
|
|
117
117
|
if (!parent) {
|
|
118
118
|
this.stack = new ScopeStack(this);
|
|
@@ -129,7 +129,7 @@ export class ScopeContext {
|
|
|
129
129
|
this.injector.map(scopeClass).toSingleton();
|
|
130
130
|
this.injector.map(ScopeContext).toValue(this);
|
|
131
131
|
|
|
132
|
-
mapping?.({
|
|
132
|
+
const result = mapping?.({
|
|
133
133
|
injector: this.injector,
|
|
134
134
|
registerScopeService: serviceClass => {
|
|
135
135
|
this.injector.map(serviceClass).toSingleton();
|
|
@@ -143,14 +143,23 @@ export class ScopeContext {
|
|
|
143
143
|
onDeactivate: this.onDeactivate,
|
|
144
144
|
});
|
|
145
145
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
146
|
+
const completeScopeChange = () => {
|
|
147
|
+
(this.scope as Scope) = this.injector.get(scopeClass);
|
|
148
|
+
this.mapScopeSignals();
|
|
149
|
+
this.updateSignalBindings();
|
|
150
|
+
// TODO: maybe the scope needs to prepare resources or something before it can react to signals, so we should move onEnter bevore the signal mapping and make it async (not working in constructor though)
|
|
151
|
+
this.scope.onEnter?.();
|
|
152
|
+
this.onEnter.dispatch(this);
|
|
153
|
+
this.scope.onActivate?.();
|
|
154
|
+
this.onActivate.dispatch(this);
|
|
155
|
+
resolve?.();
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
if (result instanceof Promise) {
|
|
159
|
+
result.then(completeScopeChange);
|
|
160
|
+
} else {
|
|
161
|
+
completeScopeChange();
|
|
162
|
+
}
|
|
154
163
|
}
|
|
155
164
|
|
|
156
165
|
get isRoot() {
|
|
@@ -173,21 +182,23 @@ export class ScopeContext {
|
|
|
173
182
|
* @param scopeClass
|
|
174
183
|
* @param mapping
|
|
175
184
|
*/
|
|
176
|
-
enterScope(scopeClass: Class, mapping?: ScopeMapping)
|
|
177
|
-
let newContext;
|
|
178
|
-
const doChange = () => {
|
|
185
|
+
async enterScope(scopeClass: Class, mapping?: ScopeMapping) {
|
|
186
|
+
let newContext: ScopeContext | undefined;
|
|
187
|
+
const doChange = async () => {
|
|
179
188
|
|
|
180
189
|
this.activeContext.scope.onSubExit?.();
|
|
181
190
|
this.activeContext.onSubExit.dispatch(this);
|
|
182
191
|
this.activeContext.scope.onDeactivate?.();
|
|
183
192
|
this.activeContext.onDeactivate.dispatch(this);
|
|
184
193
|
|
|
185
|
-
|
|
194
|
+
await new Promise<void>(resolve => {
|
|
195
|
+
newContext = new ScopeContext(this.activeContext.injector, scopeClass, mapping, this.activeContext, resolve);
|
|
196
|
+
});
|
|
186
197
|
|
|
187
198
|
this.logStack();
|
|
188
199
|
const nextChange = this.stack.queuedScopeChanges.shift();
|
|
189
200
|
if (nextChange) {
|
|
190
|
-
nextChange();
|
|
201
|
+
await nextChange();
|
|
191
202
|
} else {
|
|
192
203
|
this.stack.ongoingChange = false;
|
|
193
204
|
}
|
|
@@ -195,7 +206,7 @@ export class ScopeContext {
|
|
|
195
206
|
// TODO: this queued changes are somewhat experimental
|
|
196
207
|
if (!this.stack.ongoingChange) {
|
|
197
208
|
this.stack.ongoingChange = true;
|
|
198
|
-
doChange();
|
|
209
|
+
await doChange();
|
|
199
210
|
} else {
|
|
200
211
|
this.stack.queuedScopeChanges.push(doChange);
|
|
201
212
|
}
|
|
@@ -205,8 +216,8 @@ export class ScopeContext {
|
|
|
205
216
|
/**
|
|
206
217
|
* Exits this scope (and all open subscopes=), if a scope class is given. all scopes from the stack are closed until after the scope with the given class
|
|
207
218
|
*/
|
|
208
|
-
exitScope(target?: Scope) {
|
|
209
|
-
const doChange = () => {
|
|
219
|
+
async exitScope(target?: Scope) {
|
|
220
|
+
const doChange = async () => {
|
|
210
221
|
if (this.closed) throw new Error(`Scope already closed`);
|
|
211
222
|
// TODO: check if target is in stack?
|
|
212
223
|
this.stack.target = target || this.scope.constructor;
|
|
@@ -223,7 +234,7 @@ export class ScopeContext {
|
|
|
223
234
|
this.stack.target = undefined;
|
|
224
235
|
const nextChange = this.stack.queuedScopeChanges.shift();
|
|
225
236
|
if (nextChange) {
|
|
226
|
-
nextChange();
|
|
237
|
+
await nextChange();
|
|
227
238
|
} else {
|
|
228
239
|
this.stack.ongoingChange = false;
|
|
229
240
|
}
|
|
@@ -231,7 +242,7 @@ export class ScopeContext {
|
|
|
231
242
|
};
|
|
232
243
|
if (!this.stack.ongoingChange) {
|
|
233
244
|
this.stack.ongoingChange = true;
|
|
234
|
-
doChange();
|
|
245
|
+
await doChange();
|
|
235
246
|
} else {
|
|
236
247
|
this.stack.queuedScopeChanges.push(doChange);
|
|
237
248
|
}
|