@vworlds/vecs 1.0.43 → 1.0.45

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 (38) hide show
  1. package/README.md +2 -2
  2. package/dist/component.d.ts +27 -17
  3. package/dist/component.js +9 -0
  4. package/dist/component.js.map +1 -1
  5. package/dist/component_meta.d.ts +40 -13
  6. package/dist/component_meta.js +22 -6
  7. package/dist/component_meta.js.map +1 -1
  8. package/dist/entity/entity.components.d.ts +57 -4
  9. package/dist/entity/entity.components.js +121 -22
  10. package/dist/entity/entity.components.js.map +1 -1
  11. package/dist/entity/entity.d.ts +4 -2
  12. package/dist/entity/entity.js +4 -2
  13. package/dist/entity/entity.js.map +1 -1
  14. package/dist/entity/entity.lifecycle.js +1 -4
  15. package/dist/entity/entity.lifecycle.js.map +1 -1
  16. package/dist/entity/entity.relationships.js +3 -0
  17. package/dist/entity/entity.relationships.js.map +1 -1
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/modules/relationship_types.d.ts +18 -0
  22. package/dist/modules/relationship_types.js +18 -0
  23. package/dist/modules/relationship_types.js.map +1 -1
  24. package/dist/modules/relationships.d.ts +8 -2
  25. package/dist/modules/relationships.js +41 -3
  26. package/dist/modules/relationships.js.map +1 -1
  27. package/dist/package.json +1 -1
  28. package/docs/README.md +6 -6
  29. package/docs/components.md +77 -13
  30. package/docs/concepts.md +8 -2
  31. package/docs/design-guide.md +135 -1
  32. package/docs/entities.md +62 -6
  33. package/docs/execution-model.md +8 -4
  34. package/docs/glossary.md +11 -2
  35. package/docs/modules.md +7 -7
  36. package/docs/relationships.md +81 -0
  37. package/package.json +1 -1
  38. package/skills/vecs/SKILL.md +81 -0
package/README.md CHANGED
@@ -64,9 +64,9 @@ The full documentation lives in [`docs/`](./docs/README.md). Recommended reading
64
64
  1. [Getting started](./docs/getting-started.md) — install to first ticking world.
65
65
  2. [Concepts](./docs/concepts.md) — the mental model.
66
66
  3. [Execution model](./docs/execution-model.md) — phases, deferred mutation, event routing.
67
- 4. Subsystem guides: [Components](./docs/components.md) · [Entities](./docs/entities.md) ·
67
+ 4. Subsystem guides: [Components and traits](./docs/components.md) · [Entities](./docs/entities.md) ·
68
68
  [Systems](./docs/systems.md) · [Queries and filters](./docs/queries-and-filters.md) ·
69
- [Relationships](./docs/relationships.md) · [Modules](./docs/modules.md)
69
+ [Relationships, targets, and ownership](./docs/relationships.md) · [Modules](./docs/modules.md)
70
70
  5. [Design guide](./docs/design-guide.md) — patterns and anti-patterns from real designs.
71
71
 
72
72
  Plus the [Utilities](./docs/utilities.md) guide for helper classes and the
@@ -1,45 +1,51 @@
1
1
  import { Entity } from "./entity/index.js";
2
- import type { ComponentInstance, ComponentType } from "./component_meta.js";
3
- export { CleanupPolicy, ComponentMeta, Implements, Relationship, type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentRefArray, type ComponentType, type Hook, } from "./component_meta.js";
2
+ import type { ComponentType, HookHandler } from "./component_meta.js";
3
+ export { CleanupPolicy, ComponentMeta, Implements, Relationship, type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentRefArray, type ComponentType, type Hook, type HookHandler, type RetargetHandler, } from "./component_meta.js";
4
4
  /** A component entity created by {@link World.component}. */
5
5
  export declare class Component<T extends ComponentType = ComponentType> extends Entity {
6
6
  /**
7
- * Register a callback fired each time this component is **added** to an entity.
7
+ * Get or set the callback fired each time this component is **added** to an entity.
8
8
  *
9
9
  * The handler is called with the owning entity and the freshly created
10
10
  * component instance. Use it to initialise external state (e.g. scene objects)
11
11
  * that should exist for the lifetime of the component.
12
12
  *
13
- * @param handler - Callback invoked with `(entity, componentInstance)`.
14
- * @returns This `Component` entity, for chaining.
13
+ * Call without an argument to return the current handler. Pass `undefined` to remove it.
14
+ *
15
+ * @param handler - Callback invoked with `(entity, componentInstance)`, or `undefined`.
16
+ * @returns The current handler when called without an argument; otherwise this component.
15
17
  *
16
18
  * @example
17
19
  * ```ts
18
20
  * world.component(Sprite).onAdd((entity, sprite) => sprite.initialize(scene));
19
21
  * ```
20
22
  */
21
- onAdd(handler: (entity: Entity, c: InstanceType<T>) => void): this;
22
- onAdd(handler: (entity: Entity, c: ComponentInstance) => void): this;
23
+ onAdd(): HookHandler | undefined;
24
+ onAdd(handler: HookHandler<InstanceType<T>> | undefined): this;
25
+ onAdd(handler: HookHandler | undefined): this;
23
26
  /**
24
- * Register a callback fired each time this component is **removed** from an
27
+ * Get or set the callback fired each time this component is **removed** from an
25
28
  * entity, or when the owning entity is destroyed.
26
29
  *
27
30
  * The handler is called with the owning entity and the component instance that
28
31
  * is about to be detached. Use it to clean up any external state associated
29
32
  * with the component.
30
33
  *
31
- * @param handler - Callback invoked with `(entity, componentInstance)`.
32
- * @returns This `Component` entity, for chaining.
34
+ * Call without an argument to return the current handler. Pass `undefined` to remove it.
35
+ *
36
+ * @param handler - Callback invoked with `(entity, componentInstance)`, or `undefined`.
37
+ * @returns The current handler when called without an argument; otherwise this component.
33
38
  *
34
39
  * @example
35
40
  * ```ts
36
41
  * world.component(Sprite).onRemove((entity, sprite) => sprite.destroy(scene));
37
42
  * ```
38
43
  */
39
- onRemove(handler: (entity: Entity, c: InstanceType<T>) => void): this;
40
- onRemove(handler: (entity: Entity, c: ComponentInstance) => void): this;
44
+ onRemove(): HookHandler | undefined;
45
+ onRemove(handler: HookHandler<InstanceType<T>> | undefined): this;
46
+ onRemove(handler: HookHandler | undefined): this;
41
47
  /**
42
- * Register a callback fired each time this component's data is **set or
48
+ * Get or set the callback fired each time this component's data is **set or
43
49
  * modified**.
44
50
  *
45
51
  * Fires when:
@@ -47,19 +53,23 @@ export declare class Component<T extends ComponentType = ComponentType> extends
47
53
  * - `entity.attach(instance)` stores an existing instance.
48
54
  * - `entity.modified(C)` is called after in-place mutation.
49
55
  * - A system's `getMut(C)` marks the component dirty.
56
+ * - `entity.ensure(C)` creates or marks the component dirty.
50
57
  *
51
58
  * The handler receives the owning entity and the current component instance.
52
59
  * Component instances do not carry entity references, which is why the entity
53
60
  * is passed explicitly.
54
61
  *
55
- * @param handler - Callback invoked with `(entity, componentInstance)`.
56
- * @returns This `Component` entity, for chaining.
62
+ * Call without an argument to return the current handler. Pass `undefined` to remove it.
63
+ *
64
+ * @param handler - Callback invoked with `(entity, componentInstance)`, or `undefined`.
65
+ * @returns The current handler when called without an argument; otherwise this component.
57
66
  *
58
67
  * @example
59
68
  * ```ts
60
69
  * world.component(Transform).onSet((entity, t) => renderer.syncTransform(entity.eid, t));
61
70
  * ```
62
71
  */
63
- onSet(handler: (entity: Entity, c: InstanceType<T>) => void): this;
64
- onSet(handler: (entity: Entity, c: ComponentInstance) => void): this;
72
+ onSet(): HookHandler | undefined;
73
+ onSet(handler: HookHandler<InstanceType<T>> | undefined): this;
74
+ onSet(handler: HookHandler | undefined): this;
65
75
  }
package/dist/component.js CHANGED
@@ -3,14 +3,23 @@ export { CleanupPolicy, ComponentMeta, Implements, Relationship, } from "./compo
3
3
  /** A component entity created by {@link World.component}. */
4
4
  export class Component extends Entity {
5
5
  onAdd(handler) {
6
+ if (arguments.length === 0) {
7
+ return super.onAdd();
8
+ }
6
9
  super.onAdd(handler);
7
10
  return this;
8
11
  }
9
12
  onRemove(handler) {
13
+ if (arguments.length === 0) {
14
+ return super.onRemove();
15
+ }
10
16
  super.onRemove(handler);
11
17
  return this;
12
18
  }
13
19
  onSet(handler) {
20
+ if (arguments.length === 0) {
21
+ return super.onSet();
22
+ }
14
23
  super.onSet(handler);
15
24
  return this;
16
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,GAOb,MAAM,qBAAqB,CAAC;AAE7B,6DAA6D;AAC7D,MAAM,OAAO,SAAmD,SAAQ,MAAM;IAkB5D,KAAK,CAAC,OAAyC;QAC7D,KAAK,CAAC,KAAK,CAAC,OAAyD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAoBe,QAAQ,CAAC,OAAyC;QAChE,KAAK,CAAC,QAAQ,CAAC,OAAyD,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IA0Be,KAAK,CAAC,OAAyC;QAC7D,KAAK,CAAC,KAAK,CAAC,OAAyD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,GASb,MAAM,qBAAqB,CAAC;AAE7B,6DAA6D;AAC7D,MAAM,OAAO,SAAmD,SAAQ,MAAM;IAqB5D,KAAK,CAAC,OAAa;QACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAuBe,QAAQ,CAAC,OAAa;QACpC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IA8Be,KAAK,CAAC,OAAa;QACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -9,6 +9,10 @@ export declare enum CleanupPolicy {
9
9
  export declare abstract class Relationship {
10
10
  target: Entity;
11
11
  }
12
+ /** Callback fired after a relationship moves from one existing target to another. */
13
+ export type RetargetHandler = (source: Entity, oldTarget: Entity, newTarget: Entity) => void;
14
+ /** Callback fired for a component lifecycle event. */
15
+ export type HookHandler<C extends ComponentInstance = ComponentInstance> = (entity: Entity, component: C) => void;
12
16
  /** A component instance. Components are plain objects created with a no-arg constructor. */
13
17
  export type ComponentInstance = object;
14
18
  /** A component constructor used as a component key. */
@@ -43,37 +47,45 @@ export declare class Implements {
43
47
  * @typeParam C - Component class this hook is bound to.
44
48
  */
45
49
  export interface Hook<C extends ComponentInstance = ComponentInstance> {
50
+ /** Return the current add handler, or `undefined` when none is set. */
51
+ onAdd(): HookHandler<C> | undefined;
46
52
  /**
47
- * Register a handler invoked when a component of this type is first attached
48
- * to an entity (`entity.add(C)` or `entity.set(C, ...)` on an entity that
49
- * does not yet have the component).
53
+ * Set the handler invoked when a component of this type is first attached to
54
+ * an entity (`entity.add(C)` or `entity.set(C, ...)` on an entity that does
55
+ * not yet have the component). Pass `undefined` to remove the current handler.
50
56
  *
51
57
  * @param handler - Receives the entity and freshly created component instance.
52
58
  * @returns This hook, for chaining.
53
59
  */
54
- onAdd(handler: (entity: Entity, c: C) => void): Hook<C>;
60
+ onAdd(handler: HookHandler<C> | undefined): Hook<C>;
61
+ /** Return the current remove handler, or `undefined` when none is set. */
62
+ onRemove(): HookHandler<C> | undefined;
55
63
  /**
56
- * Register a handler invoked when a component of this type is removed from
57
- * an entity (explicit `entity.remove(C)` or implicit removal during
58
- * `entity.destroy()`).
64
+ * Set the handler invoked when a component of this type is removed from an
65
+ * entity (explicit `entity.remove(C)` or implicit removal during
66
+ * `entity.destroy()`). Pass `undefined` to remove the current handler.
59
67
  *
60
68
  * @param handler - Receives the entity and component instance that was removed.
61
69
  * @returns This hook, for chaining.
62
70
  */
63
- onRemove(handler: (entity: Entity, c: C) => void): Hook<C>;
71
+ onRemove(handler: HookHandler<C> | undefined): Hook<C>;
72
+ /** Return the current set handler, or `undefined` when none is set. */
73
+ onSet(): HookHandler<C> | undefined;
64
74
  /**
65
- * Register a handler invoked when a component's data is set or modified.
75
+ * Set the handler invoked when a component's data is set or modified. Pass
76
+ * `undefined` to remove the current handler.
66
77
  *
67
78
  * Fires when:
68
79
  * - `entity.set(C, props)` applies data to the component.
69
80
  * - `entity.attach(instance)` stores an existing instance.
70
81
  * - `entity.modified(C)` is called after in-place mutation.
71
82
  * - A system's `getMut(C)` marks the component dirty.
83
+ * - `entity.ensure(C)` creates or marks the component dirty.
72
84
  *
73
85
  * @param handler - Receives the entity and component instance whose data changed.
74
86
  * @returns This hook, for chaining.
75
87
  */
76
- onSet(handler: (entity: Entity, c: C) => void): Hook<C>;
88
+ onSet(handler: HookHandler<C> | undefined): Hook<C>;
77
89
  }
78
90
  /**
79
91
  * Bookkeeping record produced for each component eid.
@@ -101,9 +113,24 @@ export declare class ComponentMeta implements Hook<ComponentInstance> {
101
113
  /** Number of entities currently carrying this component eid. */
102
114
  get usageCount(): number;
103
115
  /** @inheritdoc */
104
- onAdd(handler: (entity: Entity, c: ComponentInstance) => void): ComponentMeta;
116
+ onAdd(): HookHandler | undefined;
117
+ onAdd(handler: HookHandler | undefined): ComponentMeta;
105
118
  /** @inheritdoc */
106
- onRemove(handler: (entity: Entity, c: ComponentInstance) => void): ComponentMeta;
119
+ onRemove(): HookHandler | undefined;
120
+ onRemove(handler: HookHandler | undefined): ComponentMeta;
121
+ /**
122
+ * Return the current retarget handler, or `undefined` when none is set.
123
+ */
124
+ onRetarget(): RetargetHandler | undefined;
125
+ /**
126
+ * Set the handler fired after this relationship changes between two existing targets. Pass
127
+ * `undefined` to remove the current handler.
128
+ *
129
+ * @param handler - Receives the source entity, previous target, and current target.
130
+ * @returns This metadata object, for chaining.
131
+ */
132
+ onRetarget(handler: RetargetHandler | undefined): ComponentMeta;
107
133
  /** @inheritdoc */
108
- onSet(handler: (entity: Entity, c: ComponentInstance) => void): ComponentMeta;
134
+ onSet(): HookHandler | undefined;
135
+ onSet(handler: HookHandler | undefined): ComponentMeta;
109
136
  }
@@ -58,19 +58,35 @@ export class ComponentMeta {
58
58
  this._usageCount--;
59
59
  }
60
60
  }
61
- /** @inheritdoc */
62
61
  onAdd(handler) {
63
- (this._onAddHandlers ?? (this._onAddHandlers = [])).unshift(handler);
62
+ if (arguments.length === 0) {
63
+ return this._onAdd;
64
+ }
65
+ this._onAdd = handler;
64
66
  return this;
65
67
  }
66
- /** @inheritdoc */
67
68
  onRemove(handler) {
68
- (this._onRemoveHandlers ?? (this._onRemoveHandlers = [])).unshift(handler);
69
+ if (arguments.length === 0) {
70
+ return this._onRemove;
71
+ }
72
+ this._onRemove = handler;
73
+ return this;
74
+ }
75
+ onRetarget(handler) {
76
+ if (!this.isRelationship) {
77
+ throw new Error("onRetarget can only be registered on a Relationship component");
78
+ }
79
+ if (arguments.length === 0) {
80
+ return this._onRetarget;
81
+ }
82
+ this._onRetarget = handler;
69
83
  return this;
70
84
  }
71
- /** @inheritdoc */
72
85
  onSet(handler) {
73
- (this._onSetHandlers ?? (this._onSetHandlers = [])).unshift(handler);
86
+ if (arguments.length === 0) {
87
+ return this._onSet;
88
+ }
89
+ this._onSet = handler;
74
90
  return this;
75
91
  }
76
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"component_meta.js","sourceRoot":"","sources":["../src/component_meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;AACnB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,2EAA2E;AAC3E,MAAM,OAAgB,YAAY;CAEjC;AAgBD,yEAAyE;AACzE,MAAM,OAAO,UAAU;IAAvB;QACS,eAAU,GAAoB,EAAE,CAAC;IAC1C,CAAC;CAAA;AA2DD;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IAqCxB,YAAY,KAAoB,EAAE,IAAS;QA3B3C,yFAAyF;QAClF,aAAQ,GAAG,aAAa,CAAC,KAAK,CAAC;QACtC,gFAAgF;QACzE,mBAAc,GAAG,aAAa,CAAC,MAAM,CAAC;QAE7C;;;;WAIG;QACI,eAAU,GAAgC,SAAS,CAAC;QAE3D,uFAAuF;QAChF,uBAAkB,GAAgC,SAAS,CAAC;QAEnE,4EAA4E;QACrE,iBAAY,GAAG,KAAK,CAAC;QASpB,gBAAW,GAAG,CAAC,CAAC;QAGtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,YAAY,YAAY,CAAC;IAChE,CAAC;IAED,gEAAgE;IAChE,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,gBAAgB;IACT,eAAe;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,gBAAgB;IACT,eAAe;QACpB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,OAAuD;QAClE,CAAC,IAAI,CAAC,cAAc,KAAnB,IAAI,CAAC,cAAc,GAAK,EAAE,EAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;IACX,QAAQ,CAAC,OAAuD;QACrE,CAAC,IAAI,CAAC,iBAAiB,KAAtB,IAAI,CAAC,iBAAiB,GAAK,EAAE,EAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,OAAuD;QAClE,CAAC,IAAI,CAAC,cAAc,KAAnB,IAAI,CAAC,cAAc,GAAK,EAAE,EAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"component_meta.js","sourceRoot":"","sources":["../src/component_meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;AACnB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,2EAA2E;AAC3E,MAAM,OAAgB,YAAY;CAEjC;AAyBD,yEAAyE;AACzE,MAAM,OAAO,UAAU;IAAvB;QACS,eAAU,GAAoB,EAAE,CAAC;IAC1C,CAAC;CAAA;AAsED;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IA0CxB,YAAY,KAAoB,EAAE,IAAS;QAhC3C,yFAAyF;QAClF,aAAQ,GAAG,aAAa,CAAC,KAAK,CAAC;QACtC,gFAAgF;QACzE,mBAAc,GAAG,aAAa,CAAC,MAAM,CAAC;QAE7C;;;;WAIG;QACI,eAAU,GAAgC,SAAS,CAAC;QAE3D,uFAAuF;QAChF,uBAAkB,GAAgC,SAAS,CAAC;QAEnE,4EAA4E;QACrE,iBAAY,GAAG,KAAK,CAAC;QAcpB,gBAAW,GAAG,CAAC,CAAC;QAGtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,YAAY,YAAY,CAAC;IAChE,CAAC;IAED,gEAAgE;IAChE,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,gBAAgB;IACT,eAAe;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,gBAAgB;IACT,eAAe;QACpB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,OAAqB;QAChC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAKM,QAAQ,CAAC,OAAqB;QACnC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAeM,UAAU,CAAC,OAAyB;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAKM,KAAK,CAAC,OAAqB;QAChC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
- import { type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentType } from "../component_meta.js";
1
+ import { type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentType, type HookHandler, type RetargetHandler } from "../component_meta.js";
2
+ import { Relationship } from "../component_meta.js";
2
3
  import { Relationships } from "./entity.relationships.js";
3
4
  import type { EID, Entity } from "./entity.js";
4
5
  export declare class Components extends Relationships {
@@ -70,6 +71,37 @@ export declare class Components extends Relationships {
70
71
  getMut(ceid: EID, callback: (component: ComponentInstance) => void): Readonly<ComponentInstance> | undefined;
71
72
  getMut(entity: Entity): ComponentInstance | undefined;
72
73
  getMut(entity: Entity, callback: (component: ComponentInstance) => void): Readonly<ComponentInstance> | undefined;
74
+ /**
75
+ * Look up a component for mutation, creating and attaching it when missing.
76
+ *
77
+ * Outside deferred mode, pass a callback so creation/modified notifications
78
+ * fire after the mutation callback returns. Inside deferred mode, the callback
79
+ * is optional and the returned component may be mutated before the queue drains.
80
+ * Repeated calls before that drain return the same pending component instance.
81
+ *
82
+ * @param typeOrClass - Component class or numeric type id.
83
+ * @returns The mutable component instance.
84
+ */
85
+ ensure<C extends ComponentType>(Class: C): InstanceType<C>;
86
+ /** Look up or create a component, mutate it in `callback`, then notify watchers. */
87
+ ensure<C extends ComponentType>(Class: C, callback: (component: InstanceType<C>) => void): Readonly<InstanceType<C>>;
88
+ /** Look up or create a component by numeric type id for mutation. */
89
+ ensure(ceid: EID): ComponentInstance;
90
+ /** Look up or create a component by numeric type id, mutate it in `callback`, then notify watchers. */
91
+ ensure(ceid: EID, callback: (component: ComponentInstance) => void): Readonly<ComponentInstance>;
92
+ ensure(entity: Entity): ComponentInstance;
93
+ ensure(entity: Entity, callback: (component: ComponentInstance) => void): Readonly<ComponentInstance>;
94
+ /**
95
+ * Return the target of relationship `Class`, creating and targeting a new
96
+ * independent entity when the relationship is absent.
97
+ *
98
+ * The relationship class must already be registered in this world. Repeated
99
+ * calls during deferred execution return the same pending target.
100
+ *
101
+ * @param Class - Registered relationship component class.
102
+ * @returns The existing or newly created relationship target.
103
+ */
104
+ ensureTarget(this: Entity, Class: ComponentType<Relationship>): Entity;
73
105
  /**
74
106
  * Mark a component type as having changed, queueing the corresponding `onSet` / `update`
75
107
  * notifications.
@@ -121,7 +153,28 @@ export declare class Components extends Relationships {
121
153
  set(ceid: EID, props: Partial<ComponentInstance>): this;
122
154
  set(entity: Entity, props: Partial<ComponentInstance>): this;
123
155
  private _throwIfInterface;
124
- onAdd(handler: (entity: Entity, c: ComponentInstance) => void): this;
125
- onRemove(handler: (entity: Entity, c: ComponentInstance) => void): this;
126
- onSet(handler: (entity: Entity, c: ComponentInstance) => void): this;
156
+ /** Return the current add hook, or `undefined` when none is set. */
157
+ onAdd(): HookHandler | undefined;
158
+ /** Set the add hook, or remove it by passing `undefined`. */
159
+ onAdd(handler: HookHandler | undefined): this;
160
+ /** Return the current remove hook, or `undefined` when none is set. */
161
+ onRemove(): HookHandler | undefined;
162
+ /** Set the remove hook, or remove it by passing `undefined`. */
163
+ onRemove(handler: HookHandler | undefined): this;
164
+ /**
165
+ * Return the current retarget hook, or `undefined` when none is set.
166
+ */
167
+ onRetarget(): RetargetHandler | undefined;
168
+ /**
169
+ * Set the handler fired after this relationship moves between existing targets. Pass
170
+ * `undefined` to remove the current handler.
171
+ *
172
+ * @param handler - Receives the source entity, previous target, and current target.
173
+ * @returns This entity, for chaining.
174
+ */
175
+ onRetarget(handler: RetargetHandler | undefined): this;
176
+ /** Return the current set hook, or `undefined` when none is set. */
177
+ onSet(): HookHandler | undefined;
178
+ /** Set the set hook, or remove it by passing `undefined`. */
179
+ onSet(handler: HookHandler | undefined): this;
127
180
  }
@@ -6,6 +6,10 @@ export class Components extends Relationships {
6
6
  * caller had performed a `set` operation.
7
7
  */
8
8
  _attach(meta, component) {
9
+ const entity = this;
10
+ if (meta._pendingEnsures?.get(entity) === component) {
11
+ meta._pendingEnsures.delete(entity);
12
+ }
9
13
  if (this._destroyed) {
10
14
  return;
11
15
  }
@@ -71,10 +75,7 @@ export class Components extends Relationships {
71
75
  this._components.delete(meta.eid);
72
76
  this.world._notifyComponentChanged(meta.eid, this);
73
77
  meta._decrementUsage();
74
- const removeHandlers = meta._onRemoveHandlers;
75
- if (removeHandlers) {
76
- removeHandlers.forEach((handler) => handler(this, c));
77
- }
78
+ meta._onRemove?.(this, c);
78
79
  }
79
80
  /**
80
81
  * @internal Apply a `Set` command: create the component if missing, assign
@@ -85,17 +86,31 @@ export class Components extends Relationships {
85
86
  if (this._destroyed) {
86
87
  return;
87
88
  }
89
+ if (meta.isRelationship) {
90
+ const existing = this._components.get(meta.eid);
91
+ const oldTarget = existing?.target;
92
+ let relationship = existing;
93
+ if (relationship) {
94
+ if (props === undefined) {
95
+ return;
96
+ }
97
+ Object.assign(relationship, props);
98
+ }
99
+ else {
100
+ relationship = this._new(meta, props);
101
+ }
102
+ this._updateIncoming(meta, oldTarget, relationship.target);
103
+ if (props !== undefined) {
104
+ this._notifyComponentSet(meta, relationship, existing !== undefined);
105
+ }
106
+ return;
107
+ }
88
108
  const existing = this._components.get(meta.eid);
89
- const oldTarget = meta.isRelationship
90
- ? existing?.target
91
- : undefined;
92
109
  const c = existing ?? this._new(meta, props);
93
110
  if (props !== undefined) {
94
111
  if (existing) {
95
112
  Object.assign(c, props);
96
113
  }
97
- const newTarget = c.target;
98
- this._updateIncoming(meta, oldTarget, newTarget);
99
114
  this._notifyComponentSet(meta, c, existing !== undefined);
100
115
  }
101
116
  }
@@ -120,17 +135,7 @@ export class Components extends Relationships {
120
135
  const instance = component ?? classOrComponent;
121
136
  const componentMeta = this.world.entity(ComponentKey).meta;
122
137
  this._throwIfInterface(componentMeta, "attach");
123
- if (this.world.deferred) {
124
- this.world._enqueue({
125
- kind: 5 /* CommandKind.Attach */,
126
- entity: this,
127
- meta: componentMeta,
128
- component: instance,
129
- });
130
- }
131
- else {
132
- this._attach(componentMeta, instance);
133
- }
138
+ this._attach_or_enqueue(componentMeta, instance);
134
139
  return this;
135
140
  }
136
141
  get(ref) {
@@ -163,6 +168,70 @@ export class Components extends Relationships {
163
168
  this._markModified(componentMeta);
164
169
  return component;
165
170
  }
171
+ ensure(ref, callback) {
172
+ if (this._destroyed) {
173
+ throw new Error(`Cannot ensure component on destroyed entity ${this.eid}`);
174
+ }
175
+ if (callback === undefined && !this.world.deferred) {
176
+ throw new Error("Entity.ensure without a callback is only allowed in deferred mode");
177
+ }
178
+ const componentMeta = this.world.entity(ref).meta;
179
+ if (componentMeta.isRelationship) {
180
+ throw new Error("Entity.ensure cannot mutate Relationship components; retarget with set");
181
+ }
182
+ this._throwIfInterface(componentMeta, "ensure");
183
+ const existing = this._get(componentMeta.eid);
184
+ if (existing) {
185
+ callback?.(existing);
186
+ this._markModified(componentMeta);
187
+ return existing;
188
+ }
189
+ return this._ensureMissingInstance(componentMeta, callback);
190
+ }
191
+ /**
192
+ * Return the target of relationship `Class`, creating and targeting a new
193
+ * independent entity when the relationship is absent.
194
+ *
195
+ * The relationship class must already be registered in this world. Repeated
196
+ * calls during deferred execution return the same pending target.
197
+ *
198
+ * @param Class - Registered relationship component class.
199
+ * @returns The existing or newly created relationship target.
200
+ */
201
+ ensureTarget(Class) {
202
+ if (this._destroyed) {
203
+ throw new Error(`Cannot ensure relationship target on destroyed entity ${this.eid}`);
204
+ }
205
+ const componentMeta = this.world.entity(Class).meta;
206
+ if (!componentMeta.isRelationship) {
207
+ throw new Error("Entity.ensureTarget requires a Relationship component");
208
+ }
209
+ const existing = this._get(componentMeta.eid);
210
+ if (existing) {
211
+ return existing.target;
212
+ }
213
+ const relationship = this._ensureMissingInstance(componentMeta, (component) => {
214
+ component.target = this.world.entity();
215
+ }, false);
216
+ return relationship.target;
217
+ }
218
+ /** @internal Return a pending instance, or create and attach one. The caller checked storage. */
219
+ _ensureMissingInstance(componentMeta, callback, initializePending = true) {
220
+ const pending = componentMeta._pendingEnsures?.get(this);
221
+ if (pending) {
222
+ if (initializePending) {
223
+ callback?.(pending);
224
+ }
225
+ return pending;
226
+ }
227
+ const component = new componentMeta.Class();
228
+ callback?.(component);
229
+ if (this.world.deferred) {
230
+ (componentMeta._pendingEnsures ?? (componentMeta._pendingEnsures = new WeakMap())).set(this, component);
231
+ }
232
+ this._attach_or_enqueue(componentMeta, component);
233
+ return component;
234
+ }
166
235
  /**
167
236
  * Mark a component type as having changed, queueing the corresponding `onSet` / `update`
168
237
  * notifications.
@@ -193,6 +262,20 @@ export class Components extends Relationships {
193
262
  }
194
263
  return this;
195
264
  }
265
+ /** @internal Attach immediately or enqueue the attach while deferred. */
266
+ _attach_or_enqueue(meta, component) {
267
+ if (this.world.deferred) {
268
+ this.world._enqueue({
269
+ kind: 5 /* CommandKind.Attach */,
270
+ entity: this,
271
+ meta,
272
+ component,
273
+ });
274
+ }
275
+ else {
276
+ this._attach(meta, component);
277
+ }
278
+ }
196
279
  remove(ref) {
197
280
  const componentMeta = this.world.entity(ref).meta;
198
281
  this._throwIfInterface(componentMeta, "remove");
@@ -251,7 +334,7 @@ export class Components extends Relationships {
251
334
  }
252
335
  /** @internal Perform one set-side hook and query update without expanding aliases. */
253
336
  _notifyRaw(meta, instance, isUpdate) {
254
- meta._onSetHandlers?.forEach((handler) => handler(this, instance));
337
+ meta._onSet?.(this, instance);
255
338
  this._dirtyComponentBitmask.deleteBit(meta.bitPtr);
256
339
  if (isUpdate) {
257
340
  this.world._notifyComponentChanged(meta.eid, this);
@@ -292,7 +375,7 @@ export class Components extends Relationships {
292
375
  meta._incrementUsage();
293
376
  }
294
377
  if (isAdd && !existing) {
295
- meta._onAddHandlers?.forEach((handler) => handler(this, instance));
378
+ meta._onAdd?.(this, instance);
296
379
  }
297
380
  if (!existing) {
298
381
  this.world._notifyComponentAdded(meta.eid, this);
@@ -304,14 +387,30 @@ export class Components extends Relationships {
304
387
  }
305
388
  }
306
389
  onAdd(handler) {
390
+ if (arguments.length === 0) {
391
+ return this.meta.onAdd();
392
+ }
307
393
  this.meta.onAdd(handler);
308
394
  return this;
309
395
  }
310
396
  onRemove(handler) {
397
+ if (arguments.length === 0) {
398
+ return this.meta.onRemove();
399
+ }
311
400
  this.meta.onRemove(handler);
312
401
  return this;
313
402
  }
403
+ onRetarget(handler) {
404
+ if (arguments.length === 0) {
405
+ return this.meta.onRetarget();
406
+ }
407
+ this.meta.onRetarget(handler);
408
+ return this;
409
+ }
314
410
  onSet(handler) {
411
+ if (arguments.length === 0) {
412
+ return this.meta.onSet();
413
+ }
315
414
  this.meta.onSet(handler);
316
415
  return this;
317
416
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity.components.js","sourceRoot":"","sources":["../../src/entity/entity.components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.components.js","sourceRoot":"","sources":["../../src/entity/entity.components.ts"],"names":[],"mappings":"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"}