@vworlds/vecs 1.0.14 → 1.0.16

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.
Files changed (187) hide show
  1. package/README.md +249 -119
  2. package/dist/component.d.ts +52 -76
  3. package/dist/component.js +60 -45
  4. package/dist/component.js.map +1 -1
  5. package/dist/component_meta.d.ts +98 -0
  6. package/dist/component_meta.js +65 -0
  7. package/dist/component_meta.js.map +1 -0
  8. package/dist/dsl.d.ts +46 -34
  9. package/dist/dsl.js +459 -61
  10. package/dist/dsl.js.map +1 -1
  11. package/dist/entity/entity.base.d.ts +57 -0
  12. package/dist/entity/entity.base.js +81 -0
  13. package/dist/entity/entity.base.js.map +1 -0
  14. package/dist/entity/entity.components.d.ts +117 -0
  15. package/dist/entity/entity.components.js +244 -0
  16. package/dist/entity/entity.components.js.map +1 -0
  17. package/dist/entity/entity.d.ts +35 -0
  18. package/dist/entity/entity.identity.d.ts +8 -0
  19. package/dist/entity/entity.identity.js +15 -0
  20. package/dist/entity/entity.identity.js.map +1 -0
  21. package/dist/entity/entity.js +33 -0
  22. package/dist/entity/entity.js.map +1 -0
  23. package/dist/entity/entity.lifecycle.d.ts +12 -0
  24. package/dist/entity/entity.lifecycle.js +111 -0
  25. package/dist/entity/entity.lifecycle.js.map +1 -0
  26. package/dist/entity/entity.queries.d.ts +3 -0
  27. package/dist/entity/entity.queries.js +33 -0
  28. package/dist/entity/entity.queries.js.map +1 -0
  29. package/dist/entity/entity.relationships.d.ts +9 -0
  30. package/dist/entity/entity.relationships.js +74 -0
  31. package/dist/entity/entity.relationships.js.map +1 -0
  32. package/dist/entity/index.d.ts +2 -0
  33. package/dist/entity/index.js +3 -0
  34. package/dist/entity/index.js.map +1 -0
  35. package/dist/filter.d.ts +27 -8
  36. package/dist/filter.js +33 -18
  37. package/dist/filter.js.map +1 -1
  38. package/dist/index.d.ts +13 -5
  39. package/dist/index.js +12 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/inject.d.ts +80 -0
  42. package/dist/inject.js +270 -0
  43. package/dist/inject.js.map +1 -0
  44. package/dist/module.d.ts +23 -0
  45. package/dist/module.js +17 -0
  46. package/dist/module.js.map +1 -0
  47. package/dist/modules/identity.d.ts +15 -0
  48. package/dist/modules/identity.js +41 -0
  49. package/dist/modules/identity.js.map +1 -0
  50. package/dist/modules/singleton.d.ts +26 -0
  51. package/dist/modules/singleton.js +41 -0
  52. package/dist/modules/singleton.js.map +1 -0
  53. package/dist/package.json +18 -20
  54. package/dist/phase.d.ts +2 -2
  55. package/dist/query/index.d.ts +6 -0
  56. package/dist/query/index.js +5 -0
  57. package/dist/query/index.js.map +1 -0
  58. package/dist/query/query.00.base.d.ts +23 -0
  59. package/dist/query/query.00.base.js +77 -0
  60. package/dist/query/query.00.base.js.map +1 -0
  61. package/dist/query/query.01.reactive.d.ts +7 -0
  62. package/dist/query/query.01.reactive.js +58 -0
  63. package/dist/query/query.01.reactive.js.map +1 -0
  64. package/dist/query/query.02.lifecycle.d.ts +6 -0
  65. package/dist/query/query.02.lifecycle.js +63 -0
  66. package/dist/query/query.02.lifecycle.js.map +1 -0
  67. package/dist/query/query.03.tracking.d.ts +15 -0
  68. package/dist/query/query.03.tracking.js +31 -0
  69. package/dist/query/query.03.tracking.js.map +1 -0
  70. package/dist/query/query.04.callbacks.d.ts +14 -0
  71. package/dist/query/query.04.callbacks.js +65 -0
  72. package/dist/query/query.04.callbacks.js.map +1 -0
  73. package/dist/query/query.05.updates.d.ts +14 -0
  74. package/dist/query/query.05.updates.js +81 -0
  75. package/dist/query/query.05.updates.js.map +1 -0
  76. package/dist/query/query.06.predicate.d.ts +13 -0
  77. package/dist/query/query.06.predicate.js +40 -0
  78. package/dist/query/query.06.predicate.js.map +1 -0
  79. package/dist/query/query.07.groups.d.ts +41 -0
  80. package/dist/query/query.07.groups.js +110 -0
  81. package/dist/query/query.07.groups.js.map +1 -0
  82. package/dist/query/query.d.ts +53 -0
  83. package/dist/query/query.js +138 -0
  84. package/dist/query/query.js.map +1 -0
  85. package/dist/relationship.d.ts +19 -0
  86. package/dist/relationship.js +18 -0
  87. package/dist/relationship.js.map +1 -0
  88. package/dist/system.d.ts +37 -23
  89. package/dist/system.js +80 -64
  90. package/dist/system.js.map +1 -1
  91. package/dist/terms/all_term.d.ts +32 -0
  92. package/dist/terms/all_term.js +41 -0
  93. package/dist/terms/all_term.js.map +1 -0
  94. package/dist/terms/any_term.d.ts +33 -0
  95. package/dist/terms/any_term.js +42 -0
  96. package/dist/terms/any_term.js.map +1 -0
  97. package/dist/terms/build.d.ts +62 -0
  98. package/dist/terms/build.js +382 -0
  99. package/dist/terms/build.js.map +1 -0
  100. package/dist/terms/component_term.d.ts +37 -0
  101. package/dist/terms/component_term.js +49 -0
  102. package/dist/terms/component_term.js.map +1 -0
  103. package/dist/terms/empty_term.d.ts +6 -0
  104. package/dist/terms/empty_term.js +12 -0
  105. package/dist/terms/empty_term.js.map +1 -0
  106. package/dist/terms/index.d.ts +11 -0
  107. package/dist/terms/index.js +12 -0
  108. package/dist/terms/index.js.map +1 -0
  109. package/dist/terms/not_term.d.ts +35 -0
  110. package/dist/terms/not_term.js +47 -0
  111. package/dist/terms/not_term.js.map +1 -0
  112. package/dist/terms/only_term.d.ts +47 -0
  113. package/dist/terms/only_term.js +79 -0
  114. package/dist/terms/only_term.js.map +1 -0
  115. package/dist/terms/predicate_term.d.ts +80 -0
  116. package/dist/terms/predicate_term.js +109 -0
  117. package/dist/terms/predicate_term.js.map +1 -0
  118. package/dist/terms/target_term.d.ts +43 -0
  119. package/dist/terms/target_term.js +87 -0
  120. package/dist/terms/target_term.js.map +1 -0
  121. package/dist/terms/term.d.ts +94 -0
  122. package/dist/terms/term.js +202 -0
  123. package/dist/terms/term.js.map +1 -0
  124. package/dist/terms/world_term.d.ts +68 -0
  125. package/dist/terms/world_term.js +99 -0
  126. package/dist/terms/world_term.js.map +1 -0
  127. package/dist/timer.js +2 -2
  128. package/dist/timer.js.map +1 -1
  129. package/dist/util/array_map.js +12 -0
  130. package/dist/util/array_map.js.map +1 -1
  131. package/dist/util/bitset.js +107 -22
  132. package/dist/util/bitset.js.map +1 -1
  133. package/dist/util/dense_set.d.ts +1 -0
  134. package/dist/util/dense_set.js +90 -0
  135. package/dist/util/dense_set.js.map +1 -0
  136. package/dist/util/id_pool.d.ts +23 -0
  137. package/dist/util/id_pool.js +194 -0
  138. package/dist/util/id_pool.js.map +1 -0
  139. package/dist/util/ordered_set.js.map +1 -1
  140. package/dist/world/index.d.ts +3 -0
  141. package/dist/world/index.js +3 -0
  142. package/dist/world/index.js.map +1 -0
  143. package/dist/world/world.base.d.ts +6 -0
  144. package/dist/world/world.base.js +21 -0
  145. package/dist/world/world.base.js.map +1 -0
  146. package/dist/world/world.components.d.ts +67 -0
  147. package/dist/world/world.components.js +93 -0
  148. package/dist/world/world.components.js.map +1 -0
  149. package/dist/world/world.d.ts +29 -0
  150. package/dist/world/world.deferred.d.ts +13 -0
  151. package/dist/world/world.deferred.js +93 -0
  152. package/dist/world/world.deferred.js.map +1 -0
  153. package/dist/world/world.entities.d.ts +18 -0
  154. package/dist/world/world.entities.js +97 -0
  155. package/dist/world/world.entities.js.map +1 -0
  156. package/dist/world/world.js +39 -0
  157. package/dist/world/world.js.map +1 -0
  158. package/dist/world/world.modules.d.ts +12 -0
  159. package/dist/world/world.modules.js +21 -0
  160. package/dist/world/world.modules.js.map +1 -0
  161. package/dist/world/world.pipeline.d.ts +21 -0
  162. package/dist/world/world.pipeline.js +105 -0
  163. package/dist/world/world.pipeline.js.map +1 -0
  164. package/dist/world/world.pools.d.ts +9 -0
  165. package/dist/world/world.pools.js +59 -0
  166. package/dist/world/world.pools.js.map +1 -0
  167. package/dist/world/world.queries.d.ts +18 -0
  168. package/dist/world/world.queries.js +101 -0
  169. package/dist/world/world.queries.js.map +1 -0
  170. package/dist/world/world.storage.d.ts +7 -0
  171. package/dist/world/world.storage.js +26 -0
  172. package/dist/world/world.storage.js.map +1 -0
  173. package/package.json +18 -20
  174. package/tsconfig.build.json +13 -0
  175. package/.husky/pre-commit +0 -3
  176. package/.prettierrc +0 -7
  177. package/dist/entity.d.ts +0 -215
  178. package/dist/entity.js +0 -457
  179. package/dist/entity.js.map +0 -1
  180. package/dist/query.d.ts +0 -251
  181. package/dist/query.js +0 -353
  182. package/dist/query.js.map +0 -1
  183. package/dist/world.d.ts +0 -389
  184. package/dist/world.js +0 -631
  185. package/dist/world.js.map +0 -1
  186. package/eslint-rules/internal-underscore.js +0 -60
  187. package/eslint.config.js +0 -22
package/dist/entity.js DELETED
@@ -1,457 +0,0 @@
1
- import { ArrayMap } from "./util/array_map.js";
2
- import { Events } from "./util/events.js";
3
- import { Bitset } from "./util/bitset.js";
4
- /**
5
- * A game object: a unique numeric id with an arbitrary set of
6
- * {@link Component | components} attached.
7
- *
8
- * Never instantiate `Entity` directly. Use {@link World.entity} for an
9
- * auto-assigned id, or {@link World.getOrCreateEntity} when the id comes from
10
- * an external authority such as a game server:
11
- *
12
- * ```ts
13
- * const e = world.entity();
14
- * e.set(Position, { x: 100 });
15
- * ```
16
- *
17
- * Entities support a parent-child hierarchy. `parent` and `children` form a
18
- * bidirectional link maintained by {@link setParent}; the children set is
19
- * created lazily. Destroying a parent recursively destroys its children.
20
- *
21
- * ## Deferred semantics
22
- *
23
- * Inside a system body or `forEach` iteration the world is in **deferred
24
- * mode**: `add` / `attach` / `set` / `modified` / `remove` / `destroy` /
25
- * `setParent` only enqueue commands. The data layer (the components map and
26
- * `componentBitmask`) is mutated when the world drains its queue. Concretely,
27
- * while deferred:
28
- *
29
- * - `entity.get(C)` returns `undefined` after `entity.add(C)` (no instance yet).
30
- * - `entity.get(C)` returns `undefined` after `entity.attach(instance)` if C was absent.
31
- * - `entity.get(C)` returns the previous value after `entity.set(C, props)`.
32
- * - `entity.get(C)` still returns the component after `entity.remove(C)`.
33
- *
34
- * Outside deferred mode the same calls execute inline and mutations are
35
- * visible immediately.
36
- */
37
- export class Entity {
38
- constructor(
39
- /** World that owns this entity. */
40
- world,
41
- /** Unique numeric entity id assigned at creation. */
42
- eid) {
43
- this.world = world;
44
- this.eid = eid;
45
- /** @internal Maps numeric component type id to component instance. */
46
- this._components = new ArrayMap();
47
- /** @internal Component types with pending modified delivery. */
48
- this._dirtyComponentBitmask = new Bitset();
49
- /** @internal Set of queries this entity currently belongs to. */
50
- this._queries = new Set();
51
- /**
52
- * Bitmask of component type ids currently attached to this entity. Used by
53
- * the world for fast archetype matching against query predicates.
54
- */
55
- this.componentBitmask = new Bitset();
56
- /**
57
- * Free-form property bag. Modules can use it to associate arbitrary data with
58
- * an entity without registering a dedicated component.
59
- */
60
- this.properties = new Map();
61
- /** @internal Set to `true` after the world has fully torn down this entity. */
62
- this._destroyed = false;
63
- }
64
- /** Fire every `onAdd` hook registered for `meta`. */
65
- _runOnAddHandlers(meta, component) {
66
- meta._onAddHandlers?.forEach((handler) => handler(this, component));
67
- }
68
- /** Fire every `onSet` hook registered for `meta`. */
69
- _runOnSetHandlers(meta, component) {
70
- meta._onSetHandlers?.forEach((handler) => handler(this, component));
71
- }
72
- /**
73
- * Re-evaluate every world query for this entity, firing `_enter` / `_exit`
74
- * routing whenever membership flipped.
75
- */
76
- _updateQueries() {
77
- this.world.queries.forEach((q) => {
78
- const belongs = q.belongs(this);
79
- const isIn = this._queries.has(q);
80
- if (belongs !== isIn) {
81
- belongs ? q._enter(this) : q._exit(this);
82
- }
83
- });
84
- }
85
- /** Store a component instance and perform the shared add-side bookkeeping. */
86
- _storeComponent(meta, component, isAdd) {
87
- if (meta._exclusive) {
88
- for (const exclusiveMeta of meta._exclusive) {
89
- if (this._components.has(exclusiveMeta.type)) {
90
- this._remove(exclusiveMeta);
91
- }
92
- }
93
- }
94
- this._components.set(meta.type, component);
95
- this.componentBitmask.addBit(meta.bitPtr);
96
- if (isAdd) {
97
- this._runOnAddHandlers(meta, component);
98
- }
99
- this._updateQueries();
100
- }
101
- /** Perform the shared set-side hook and query update routing. */
102
- _notifyComponentSet(meta, component, isUpdate) {
103
- this._runOnSetHandlers(meta, component);
104
- this._dirtyComponentBitmask.deleteBit(meta.bitPtr);
105
- if (isUpdate) {
106
- this._queries.forEach((q) => q._notifyModified(this, meta, component));
107
- }
108
- }
109
- /**
110
- * Construct a fresh component of `type`, apply `props`, store it on this
111
- * entity, fire the `onAdd` hook, and route query updates.
112
- *
113
- * If the component type belongs to an exclusivity group, any conflicting
114
- * component already on this entity is removed first.
115
- */
116
- _new(meta, props) {
117
- const c = new meta.Class();
118
- if (props !== undefined) {
119
- Object.assign(c, props);
120
- }
121
- this._storeComponent(meta, c, true);
122
- return c;
123
- }
124
- /**
125
- * @internal Record that this entity is now tracked by `q`. Called by
126
- * `Query._enter`.
127
- */
128
- _addQueryMembership(q) {
129
- this._queries.add(q);
130
- }
131
- /**
132
- * @internal Apply an `Attach` command: store the provided component instance,
133
- * replacing any previous instance for this type. Events are fired as if the
134
- * caller had performed a `set` operation.
135
- */
136
- _attach(meta, component) {
137
- if (this._destroyed) {
138
- return;
139
- }
140
- const existing = this._components.get(meta.type);
141
- this._storeComponent(meta, component, existing === undefined);
142
- this._notifyComponentSet(meta, component, existing !== undefined);
143
- }
144
- /**
145
- * @internal Apply a `Destroy` command: fire `_exit` on every query, then
146
- * `onRemove` on every component, emit the `destroy` event, and unlink from
147
- * the world and any parent.
148
- */
149
- _destroy() {
150
- if (this._destroyed) {
151
- return;
152
- }
153
- this._destroyed = true;
154
- const toExit = [];
155
- this._queries.forEach((q) => {
156
- if (q.world) {
157
- toExit.push(q);
158
- }
159
- });
160
- toExit.forEach((q) => q._exit(this));
161
- this._components.forEach((c, type) => {
162
- const meta = this.world.getComponentMeta(type);
163
- const removeHandlers = meta._onRemoveHandlers;
164
- if (removeHandlers) {
165
- removeHandlers.forEach((handler) => handler(this, c));
166
- }
167
- });
168
- this._dirtyComponentBitmask.clear();
169
- if (this._events) {
170
- this._events.emit("destroy");
171
- this._events.removeAllListeners("destroy");
172
- }
173
- this.world._unregisterEntity(this);
174
- if (this._parent) {
175
- this._parent._children?.delete(this);
176
- this._parent = undefined;
177
- }
178
- }
179
- /**
180
- * @internal Look up a component instance by numeric type id.
181
- *
182
- * Faster than {@link get} because no class to type id resolution is needed.
183
- */
184
- _get(type) {
185
- return this._components.get(type);
186
- }
187
- /**
188
- * @internal Return `true` when this entity is currently tracked by `q`.
189
- */
190
- _isInQuery(q) {
191
- return this._queries.has(q);
192
- }
193
- /**
194
- * @internal Apply a `Modified` command: fire `onSet` and route modified
195
- * events to every query that watches the component type.
196
- */
197
- _modified(meta) {
198
- if (this._destroyed) {
199
- return;
200
- }
201
- const c = this._components.get(meta.type);
202
- if (!c) {
203
- return;
204
- }
205
- this._notifyComponentSet(meta, c, true);
206
- }
207
- /**
208
- * @internal Forget query `q` without firing exit callbacks. Called by
209
- * {@link World} when a {@link Query.destroy} sweeps every entity.
210
- */
211
- _purgeQuery(q) {
212
- this._queries.delete(q);
213
- }
214
- /**
215
- * @internal Apply a `Remove` command: clear the type bit, route exits,
216
- * detach the component, and fire `onRemove`.
217
- */
218
- _remove(meta) {
219
- if (this._destroyed) {
220
- return;
221
- }
222
- const c = this._components.get(meta.type);
223
- if (!c) {
224
- return;
225
- }
226
- this._dirtyComponentBitmask.deleteBit(meta.bitPtr);
227
- this.componentBitmask.deleteBit(meta.bitPtr);
228
- this._updateQueries();
229
- this._components.delete(meta.type);
230
- const removeHandlers = meta._onRemoveHandlers;
231
- if (removeHandlers) {
232
- removeHandlers.forEach((handler) => handler(this, c));
233
- }
234
- }
235
- /**
236
- * @internal Record that this entity is no longer tracked by `q`. Called by
237
- * `Query._exit`.
238
- */
239
- _removeQueryMembership(q) {
240
- this._queries.delete(q);
241
- }
242
- /**
243
- * @internal Apply a `Set` command: create the component if missing, assign
244
- * `props` if provided, fire `onSet`, and route modified events to every
245
- * query that watches the component type.
246
- */
247
- _set(meta, props) {
248
- if (this._destroyed) {
249
- return;
250
- }
251
- const existing = this._components.get(meta.type);
252
- const c = existing ?? this._new(meta, props);
253
- if (props !== undefined) {
254
- if (existing) {
255
- Object.assign(c, props);
256
- }
257
- this._notifyComponentSet(meta, c, existing !== undefined);
258
- }
259
- }
260
- /**
261
- * @internal Reparent this entity in place, maintaining the bidirectional
262
- * link. Throws if `newParent` is a descendant of this entity.
263
- *
264
- * Called by the world either inline (outside deferred mode) or while
265
- * routing a queued `SetParent` command.
266
- */
267
- _setParent(newParent) {
268
- if (this._destroyed) {
269
- return;
270
- }
271
- if (newParent !== undefined) {
272
- let ancestor = newParent;
273
- while (ancestor !== undefined) {
274
- if (ancestor === this) {
275
- throw new Error(`Circular parent reference: entity ${this.eid} is already an ancestor of entity ${newParent.eid}`);
276
- }
277
- ancestor = ancestor._parent;
278
- }
279
- }
280
- if (this._parent) {
281
- this._parent._children?.delete(this);
282
- }
283
- this._parent = newParent;
284
- if (newParent) {
285
- (newParent._children ?? (newParent._children = new Set())).add(this);
286
- }
287
- }
288
- /**
289
- * Read-only view of direct child entities. The backing set is created lazily
290
- * on the first child link; before that this getter returns a shared empty set.
291
- */
292
- get children() {
293
- return this._children ?? Entity._emptyChildren;
294
- }
295
- /**
296
- * Read-only view of all components currently attached to this entity, keyed
297
- * by numeric component type id.
298
- *
299
- * The mutating methods (`set`, `delete`, `clear`) are not exposed. Use
300
- * `entity.add`, `entity.attach`, `entity.set`, and `entity.remove` to change
301
- * the component set.
302
- *
303
- * ```ts
304
- * entity.components.forEach((c) => console.log(c.constructor.name));
305
- * ```
306
- */
307
- get components() {
308
- return this._components;
309
- }
310
- /** `true` when no components are currently attached to this entity. */
311
- get empty() {
312
- return this._components.size == 0;
313
- }
314
- /**
315
- * Typed event emitter for entity-level lifecycle events. Currently only the
316
- * `"destroy"` event is emitted, just before the entity is fully torn down.
317
- *
318
- * The emitter is created lazily on first access.
319
- */
320
- get events() {
321
- if (!this._events) {
322
- this._events = new Events();
323
- }
324
- return this._events;
325
- }
326
- /** Parent entity in the scene hierarchy, or `undefined` for a root entity. */
327
- get parent() {
328
- return this._parent;
329
- }
330
- add(typeOrClass) {
331
- const meta = this.world.getComponentMeta(typeOrClass);
332
- if (this.world.deferred) {
333
- this.world._enqueue({ kind: 1 /* CommandKind.Set */, entity: this, meta, props: undefined });
334
- }
335
- else {
336
- this._set(meta, undefined);
337
- }
338
- return this;
339
- }
340
- /**
341
- * Attach an existing component instance to this entity and store that exact
342
- * object. If a component of the same registered class already exists, it is
343
- * replaced rather than assigned into.
344
- *
345
- * `attach` uses the instance constructor to resolve component metadata, so
346
- * the constructor must already be registered in this world. The operation
347
- * fires hooks and query updates like a `set` operation.
348
- *
349
- * @param component - Existing component instance to store on the entity.
350
- * @returns This entity, for chaining.
351
- */
352
- attach(component) {
353
- const meta = this.world.getComponentMeta(component.constructor);
354
- if (this.world.deferred) {
355
- this.world._enqueue({ kind: 6 /* CommandKind.Attach */, entity: this, meta, component });
356
- }
357
- else {
358
- this._attach(meta, component);
359
- }
360
- return this;
361
- }
362
- /**
363
- * Destroy this entity and recursively destroy its children.
364
- *
365
- * Each component fires its `onRemove` hook, the `"destroy"` event is emitted
366
- * just before teardown, and the entity is unregistered from the world.
367
- * After destruction the entity must not be used.
368
- */
369
- destroy() {
370
- if (this.world.deferred) {
371
- this.world._enqueue({ kind: 4 /* CommandKind.Destroy */, entity: this });
372
- }
373
- else {
374
- this._destroy();
375
- }
376
- if (this._children) {
377
- this._children.forEach((child) => {
378
- child.destroy();
379
- });
380
- this._children.clear();
381
- }
382
- }
383
- /**
384
- * Look up a component on this entity.
385
- *
386
- * @param typeOrClass - Component class or numeric type id.
387
- * @returns The component instance, or `undefined` when it is not attached.
388
- */
389
- get(typeOrClass) {
390
- const type = this.world.getComponentType(typeOrClass);
391
- return this._get(type);
392
- }
393
- /**
394
- * Mark a component type as having changed, queueing the corresponding `onSet` / `update`
395
- * notifications.
396
- *
397
- * Repeated calls before the world routes the modified command are coalesced via
398
- * the entity's dirty component bitset.
399
- *
400
- * @param typeOrClass - Component class or numeric type id whose data changed.
401
- * @returns This entity, for chaining.
402
- */
403
- modified(typeOrClass) {
404
- const meta = this.world.getComponentMeta(typeOrClass);
405
- if (this._dirtyComponentBitmask.hasBit(meta.bitPtr)) {
406
- return this;
407
- }
408
- this._dirtyComponentBitmask.addBit(meta.bitPtr);
409
- if (this.world.deferred) {
410
- this.world._enqueue({ kind: 2 /* CommandKind.Modified */, entity: this, meta });
411
- }
412
- else {
413
- this._modified(meta);
414
- }
415
- return this;
416
- }
417
- remove(typeOrClass) {
418
- const meta = this.world.getComponentMeta(typeOrClass);
419
- if (this.world.deferred) {
420
- this.world._enqueue({ kind: 3 /* CommandKind.Remove */, entity: this, meta });
421
- }
422
- else {
423
- this._remove(meta);
424
- }
425
- }
426
- /**
427
- * Reparent this entity. In deferred mode the change is queued; outside
428
- * deferred mode it executes inline.
429
- *
430
- * @param newParent - New parent, or `undefined` to make this a root entity.
431
- */
432
- setParent(newParent) {
433
- if (this.world.deferred) {
434
- this.world._enqueue({ kind: 5 /* CommandKind.SetParent */, entity: this, parent: newParent });
435
- }
436
- else {
437
- this._setParent(newParent);
438
- }
439
- }
440
- set(typeOrClass, props) {
441
- const meta = this.world.getComponentMeta(typeOrClass);
442
- if (this.world.deferred) {
443
- this.world._enqueue({ kind: 1 /* CommandKind.Set */, entity: this, meta, props });
444
- }
445
- else {
446
- this._set(meta, props);
447
- }
448
- return this;
449
- }
450
- /** Returns `"EntityN"` where N is the entity id. */
451
- toString() {
452
- return `Entity${this.eid}`;
453
- }
454
- }
455
- /** @internal Empty children set used as the default `children` value. */
456
- Entity._emptyChildren = new Set();
457
- //# sourceMappingURL=entity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}