@vworlds/vecs 1.0.9 → 1.0.10
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/.husky/pre-commit +1 -0
- package/dist/command.d.ts +46 -0
- package/dist/command.js +2 -0
- package/dist/command.js.map +1 -0
- package/dist/entity.d.ts +65 -72
- package/dist/entity.js +198 -110
- package/dist/entity.js.map +1 -1
- package/dist/filter.js +19 -17
- package/dist/filter.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/query.d.ts +89 -18
- package/dist/query.js +125 -47
- package/dist/query.js.map +1 -1
- package/dist/system.d.ts +16 -52
- package/dist/system.js +74 -67
- package/dist/system.js.map +1 -1
- package/dist/world.d.ts +59 -26
- package/dist/world.js +132 -99
- package/dist/world.js.map +1 -1
- package/package.json +1 -1
package/dist/world.js
CHANGED
|
@@ -37,21 +37,36 @@ const LOCAL_COMPONENT_MIN = 256;
|
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
39
|
export class World {
|
|
40
|
+
/** `true` when the world is in deferred mode — mutations are queued rather than applied immediately. */
|
|
41
|
+
get deferred() {
|
|
42
|
+
return this.deferredDepth > 0 || this.draining;
|
|
43
|
+
}
|
|
40
44
|
constructor() {
|
|
41
|
-
this.
|
|
45
|
+
this._entities = new Map(); // maps entity Id to Entity
|
|
42
46
|
this.componentNameTypeMap = new Map();
|
|
43
|
-
this.
|
|
44
|
-
this.destroyedEntities = [];
|
|
45
|
-
this.allQueries = [];
|
|
47
|
+
this._queries = [];
|
|
46
48
|
this.Class2Meta = new Map();
|
|
47
49
|
this.Type2Meta = new ArrayMap();
|
|
48
|
-
this.updatedComponents = [];
|
|
49
50
|
this.localComponentCounter = LOCAL_COMPONENT_MIN;
|
|
50
51
|
this.componentRegistrationDisabled = false;
|
|
52
|
+
/** @internal Single ordered command queue used in deferred mode. */
|
|
53
|
+
this.commandQueue = [];
|
|
54
|
+
/** @internal Nested `beginDefer` / `endDefer` count. */
|
|
55
|
+
this.deferredDepth = 0;
|
|
56
|
+
/** @internal True while `processCommandQueue` is iterating, to avoid re-entrant drains. */
|
|
57
|
+
this.draining = false;
|
|
51
58
|
/** @internal */
|
|
52
59
|
this._pipeline = new Map();
|
|
53
60
|
this.eidCounter = 0;
|
|
54
61
|
}
|
|
62
|
+
/** @readonly */
|
|
63
|
+
get entities() {
|
|
64
|
+
return this._entities;
|
|
65
|
+
}
|
|
66
|
+
/** @readonly */
|
|
67
|
+
get queries() {
|
|
68
|
+
return this._queries;
|
|
69
|
+
}
|
|
55
70
|
/**
|
|
56
71
|
* Return the entity with id `eid`, creating it if it does not yet exist.
|
|
57
72
|
*
|
|
@@ -71,10 +86,10 @@ export class World {
|
|
|
71
86
|
* @returns The existing or newly created entity.
|
|
72
87
|
*/
|
|
73
88
|
getOrCreateEntity(eid, onCreateCallback) {
|
|
74
|
-
let e = this.
|
|
89
|
+
let e = this._entities.get(eid);
|
|
75
90
|
if (!e) {
|
|
76
91
|
e = new Entity(this, eid);
|
|
77
|
-
this.
|
|
92
|
+
this._entities.set(eid, e);
|
|
78
93
|
if (onCreateCallback) {
|
|
79
94
|
onCreateCallback(e);
|
|
80
95
|
}
|
|
@@ -85,10 +100,15 @@ export class World {
|
|
|
85
100
|
if (id === undefined) {
|
|
86
101
|
const eid = this.eidCounter++;
|
|
87
102
|
const e = new Entity(this, eid);
|
|
88
|
-
this.
|
|
103
|
+
if (this.deferred) {
|
|
104
|
+
this._enqueue({ kind: 0 /* CommandKind.CreateEntity */, entity: e });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this._entities.set(eid, e);
|
|
108
|
+
}
|
|
89
109
|
return e;
|
|
90
110
|
}
|
|
91
|
-
return this.
|
|
111
|
+
return this._entities.get(id);
|
|
92
112
|
}
|
|
93
113
|
/**
|
|
94
114
|
* Set the starting value for the auto-incrementing entity id counter.
|
|
@@ -141,93 +161,106 @@ export class World {
|
|
|
141
161
|
return typeOrClass;
|
|
142
162
|
}
|
|
143
163
|
/**
|
|
144
|
-
*
|
|
145
|
-
*
|
|
164
|
+
* Enter deferred mode. Mutations made until the matching {@link endDefer}
|
|
165
|
+
* are queued instead of executing inline.
|
|
146
166
|
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
167
|
+
* Nested begin/end pairs are allowed; only the outermost `endDefer`
|
|
168
|
+
* triggers a drain.
|
|
149
169
|
*
|
|
150
|
-
* @internal Called automatically by {@link Entity.add} and
|
|
151
|
-
* {@link Entity.remove}.
|
|
152
170
|
*/
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
171
|
+
beginDefer() {
|
|
172
|
+
this.deferredDepth++;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Leave deferred mode. When the depth returns to zero, the world processes
|
|
176
|
+
* the command queue (firing hooks and routing enter / exit / update events).
|
|
177
|
+
*
|
|
178
|
+
*/
|
|
179
|
+
endDefer() {
|
|
180
|
+
this.deferredDepth--;
|
|
181
|
+
this.flush();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
*
|
|
185
|
+
* @param fn callback to invoke in deferred mode.
|
|
186
|
+
*/
|
|
187
|
+
defer(fn) {
|
|
188
|
+
this.beginDefer();
|
|
189
|
+
try {
|
|
190
|
+
fn();
|
|
156
191
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
e.children.forEach((child) => this.archetypeChanged(child));
|
|
160
|
-
}
|
|
161
|
-
/** @internal */
|
|
162
|
-
_notifyComponentAdded(e, c) {
|
|
163
|
-
this.archetypeChanged(e);
|
|
164
|
-
}
|
|
165
|
-
/** @internal */
|
|
166
|
-
_notifyComponentRemoved(e, c) {
|
|
167
|
-
const hook = c.meta._onRemoveHandler;
|
|
168
|
-
if (hook) {
|
|
169
|
-
hook(c);
|
|
192
|
+
finally {
|
|
193
|
+
this.endDefer();
|
|
170
194
|
}
|
|
171
|
-
this.archetypeChanged(e);
|
|
172
195
|
}
|
|
173
|
-
/**
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
196
|
+
/**
|
|
197
|
+
* Drain any pending commands queued at the top level (depth 0).
|
|
198
|
+
*
|
|
199
|
+
* Useful between phases or after batch-loading network snapshots, to make
|
|
200
|
+
* accumulated mutations visible (fire hooks, route enter/exit/update) before
|
|
201
|
+
* the next read or system run.
|
|
202
|
+
*/
|
|
203
|
+
flush() {
|
|
204
|
+
if (this.deferredDepth === 0) {
|
|
205
|
+
this.processCommandQueue();
|
|
177
206
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
e._removeQuery(q);
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
this.archChangeQueue.forEach((e) => {
|
|
196
|
-
e.clearDeletedComponents();
|
|
197
|
-
});
|
|
207
|
+
}
|
|
208
|
+
/** @internal Append a command to the queue. */
|
|
209
|
+
_enqueue(cmd) {
|
|
210
|
+
this.commandQueue.push(cmd);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @internal Walk the command queue in insertion order, executing each
|
|
214
|
+
* command. Callbacks may push more commands, which are processed in the
|
|
215
|
+
* same pass via index iteration.
|
|
216
|
+
*/
|
|
217
|
+
processCommandQueue() {
|
|
218
|
+
if (this.draining) {
|
|
219
|
+
return;
|
|
198
220
|
}
|
|
199
|
-
if (this.
|
|
200
|
-
|
|
201
|
-
e._destroy();
|
|
202
|
-
});
|
|
203
|
-
this.destroyedEntities.length = 0;
|
|
221
|
+
if (this.commandQueue.length === 0) {
|
|
222
|
+
return;
|
|
204
223
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
c.entity._notifyModified(c);
|
|
212
|
-
c._dirty = false;
|
|
213
|
-
});
|
|
214
|
-
this.updatedComponents.length = 0;
|
|
224
|
+
this.draining = true;
|
|
225
|
+
try {
|
|
226
|
+
for (let i = 0; i < this.commandQueue.length; i++) {
|
|
227
|
+
this.executeCommand(this.commandQueue[i]);
|
|
228
|
+
}
|
|
229
|
+
this.commandQueue.length = 0;
|
|
215
230
|
}
|
|
216
|
-
|
|
217
|
-
this.
|
|
218
|
-
e._updateQueries();
|
|
219
|
-
e._archetypeChanged = false;
|
|
220
|
-
});
|
|
221
|
-
this.archChangeQueue.length = 0;
|
|
231
|
+
finally {
|
|
232
|
+
this.draining = false;
|
|
222
233
|
}
|
|
223
234
|
}
|
|
224
|
-
/**
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
235
|
+
/**
|
|
236
|
+
* @internal Run a single command's side effects: data-layer mutation, hook
|
|
237
|
+
* firing, and routing to all registered queries / systems.
|
|
238
|
+
*/
|
|
239
|
+
executeCommand(cmd) {
|
|
240
|
+
switch (cmd.kind) {
|
|
241
|
+
case 0 /* CommandKind.CreateEntity */:
|
|
242
|
+
this._entities.set(cmd.entity.eid, cmd.entity);
|
|
243
|
+
return;
|
|
244
|
+
case 1 /* CommandKind.Set */:
|
|
245
|
+
cmd.entity._set(cmd.type, cmd.props);
|
|
246
|
+
return;
|
|
247
|
+
case 2 /* CommandKind.Modified */:
|
|
248
|
+
cmd.entity._modified(cmd.type);
|
|
249
|
+
return;
|
|
250
|
+
case 3 /* CommandKind.Remove */:
|
|
251
|
+
cmd.entity._remove(cmd.type);
|
|
252
|
+
return;
|
|
253
|
+
case 4 /* CommandKind.Destroy */:
|
|
254
|
+
cmd.entity._destroy();
|
|
255
|
+
return;
|
|
256
|
+
case 5 /* CommandKind.SetParent */:
|
|
257
|
+
cmd.entity._setParent(cmd.parent);
|
|
258
|
+
return;
|
|
228
259
|
}
|
|
229
|
-
|
|
230
|
-
|
|
260
|
+
}
|
|
261
|
+
/** @internal Remove an entity from the world's entity map. Called by Entity._destroy. */
|
|
262
|
+
_unregisterEntity(entity) {
|
|
263
|
+
this._entities.delete(entity.eid);
|
|
231
264
|
}
|
|
232
265
|
registerComponent(ComponentClass, typeOrComponentName, componentName) {
|
|
233
266
|
if (this.componentRegistrationDisabled) {
|
|
@@ -281,19 +314,15 @@ export class World {
|
|
|
281
314
|
}
|
|
282
315
|
/** @internal Called by the {@link Query} constructor to register itself. */
|
|
283
316
|
_addQuery(q) {
|
|
284
|
-
this.
|
|
317
|
+
this._queries.push(q);
|
|
285
318
|
}
|
|
286
319
|
/** @internal Called by {@link Query.destroy} to unregister a query and remove it from all entities. */
|
|
287
320
|
_removeQuery(q) {
|
|
288
|
-
const idx = this.
|
|
321
|
+
const idx = this._queries.indexOf(q);
|
|
289
322
|
if (idx !== -1) {
|
|
290
|
-
this.
|
|
323
|
+
this._queries.splice(idx, 1);
|
|
291
324
|
}
|
|
292
|
-
this.
|
|
293
|
-
}
|
|
294
|
-
/** @internal Iterate over all entities currently in the world. */
|
|
295
|
-
_forEachEntity(callback) {
|
|
296
|
-
this.entities.forEach(callback);
|
|
325
|
+
this._entities.forEach((e) => e._purgeQuery(q));
|
|
297
326
|
}
|
|
298
327
|
/**
|
|
299
328
|
* Create a new {@link System}, register it, and return it for configuration.
|
|
@@ -369,7 +398,7 @@ export class World {
|
|
|
369
398
|
this._pipeline.set(_defaultPhase.name, _defaultPhase);
|
|
370
399
|
}
|
|
371
400
|
const defaultPhase = _defaultPhase;
|
|
372
|
-
this.
|
|
401
|
+
this._queries.forEach((q) => {
|
|
373
402
|
if (!(q instanceof System)) {
|
|
374
403
|
return;
|
|
375
404
|
}
|
|
@@ -427,18 +456,22 @@ export class World {
|
|
|
427
456
|
/**
|
|
428
457
|
* Execute all systems in the given phase for one tick.
|
|
429
458
|
*
|
|
430
|
-
*
|
|
431
|
-
*
|
|
432
|
-
*
|
|
459
|
+
* Pending top-level mutations are drained at the start of the phase so the
|
|
460
|
+
* first system observes a consistent world. Each system's body runs in a
|
|
461
|
+
* deferred scope; mutations made by callbacks are appended to the world
|
|
462
|
+
* queue and processed by the world after the system returns, before the
|
|
463
|
+
* next system runs.
|
|
433
464
|
*
|
|
434
465
|
* @param phase - The {@link IPhase} to run (returned by {@link addPhase}).
|
|
435
466
|
* @param now - Absolute timestamp in milliseconds (e.g. `Date.now()`).
|
|
436
467
|
* @param delta - Milliseconds elapsed since the previous tick.
|
|
437
468
|
*/
|
|
438
469
|
runPhase(phase, now, delta) {
|
|
470
|
+
this.flush();
|
|
439
471
|
phase.systems.forEach((s) => {
|
|
440
472
|
s._run(now, delta);
|
|
441
|
-
|
|
473
|
+
// System._run wraps in begin/end which drains on return; nothing more
|
|
474
|
+
// to do here.
|
|
442
475
|
});
|
|
443
476
|
}
|
|
444
477
|
/**
|
|
@@ -450,7 +483,7 @@ export class World {
|
|
|
450
483
|
* @param delta - Milliseconds elapsed since the previous tick.
|
|
451
484
|
*/
|
|
452
485
|
progress(now, delta) {
|
|
453
|
-
this.
|
|
486
|
+
this.flush();
|
|
454
487
|
this._pipeline.forEach((phase) => {
|
|
455
488
|
this.runPhase(phase, now, delta);
|
|
456
489
|
});
|
|
@@ -482,10 +515,10 @@ export class World {
|
|
|
482
515
|
* transitioning between game sessions or resetting to a clean state.
|
|
483
516
|
*/
|
|
484
517
|
clearAllEntities() {
|
|
485
|
-
this.
|
|
518
|
+
this._entities.forEach((e) => {
|
|
486
519
|
e.destroy();
|
|
487
520
|
});
|
|
488
|
-
this.
|
|
521
|
+
this.flush();
|
|
489
522
|
}
|
|
490
523
|
}
|
|
491
524
|
//# sourceMappingURL=world.js.map
|
package/dist/world.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,aAAa,EAAQ,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAU,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
|