@relu-interactives/spatial-ecs 0.2.11 → 0.2.12

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 (197) hide show
  1. package/dist/{System-KTHuWc-i.d.cts → System-CHCucemW.d.cts} +23 -1
  2. package/dist/{System-KTHuWc-i.d.ts → System-CHCucemW.d.ts} +23 -1
  3. package/dist/{Video-BnrYbbzu.d.cts → Video-ACTSfWjH.d.cts} +1 -1
  4. package/dist/{Video-Ds_0Aj66.d.ts → Video-B9ZKmBIT.d.ts} +1 -1
  5. package/dist/{chunk-UU6VYCIO.js → chunk-ON4E5E5O.js} +3 -3
  6. package/dist/{chunk-UU6VYCIO.js.map → chunk-ON4E5E5O.js.map} +1 -1
  7. package/dist/{chunk-OIOUWDOS.js → chunk-PH43YHUT.js} +39 -3
  8. package/dist/chunk-PH43YHUT.js.map +1 -0
  9. package/dist/{chunk-YLRCC4EK.js → chunk-ZCEMOTH4.js} +3 -3
  10. package/dist/{chunk-YLRCC4EK.js.map → chunk-ZCEMOTH4.js.map} +1 -1
  11. package/dist/components/index.d.cts +2 -2
  12. package/dist/components/index.d.ts +2 -2
  13. package/dist/docs/api/Behaviour/classes/Behaviour.md +29 -29
  14. package/dist/docs/api/Component/classes/Component.md +1 -1
  15. package/dist/docs/api/components/classes/AnimationComponent.md +26 -26
  16. package/dist/docs/api/components/classes/AudioComponent.md +19 -19
  17. package/dist/docs/api/components/classes/CameraComponent.md +14 -14
  18. package/dist/docs/api/components/classes/EntityType.md +3 -3
  19. package/dist/docs/api/components/classes/Environment.md +3 -3
  20. package/dist/docs/api/components/classes/ImageComponent.md +7 -7
  21. package/dist/docs/api/components/classes/ImageTarget.md +7 -7
  22. package/dist/docs/api/components/classes/ImageTargetAnchor.md +4 -4
  23. package/dist/docs/api/components/classes/InstanceSlotComponent.md +4 -4
  24. package/dist/docs/api/components/classes/InstancedMeshComponent.md +10 -10
  25. package/dist/docs/api/components/classes/LightComponent.md +6 -6
  26. package/dist/docs/api/components/classes/MaterialComponent.md +11 -11
  27. package/dist/docs/api/components/classes/MeshComponent.md +3 -3
  28. package/dist/docs/api/components/classes/MeshGeometryComponent.md +9 -9
  29. package/dist/docs/api/components/classes/ModelComponent.md +4 -4
  30. package/dist/docs/api/components/classes/Name.md +3 -3
  31. package/dist/docs/api/components/classes/Object3DRef.md +4 -4
  32. package/dist/docs/api/components/classes/ParentId.md +3 -3
  33. package/dist/docs/api/components/classes/PhysicsComponent.md +6 -6
  34. package/dist/docs/api/components/classes/Postprocessing.md +3 -3
  35. package/dist/docs/api/components/classes/ScriptComponent.md +5 -5
  36. package/dist/docs/api/components/classes/Selectable.md +3 -3
  37. package/dist/docs/api/components/classes/SelectionTransformState.md +5 -5
  38. package/dist/docs/api/components/classes/SpriteComponent.md +7 -7
  39. package/dist/docs/api/components/classes/TransformComponent.md +12 -12
  40. package/dist/docs/api/components/classes/VideoComponent.md +28 -28
  41. package/dist/docs/api/components/functions/normalizePhysicsState.md +1 -1
  42. package/dist/docs/api/components/type-aliases/AnimationComponentOptions.md +9 -9
  43. package/dist/docs/api/components/type-aliases/CameraComponentOptions.md +13 -13
  44. package/dist/docs/api/components/type-aliases/CameraProjection.md +1 -1
  45. package/dist/docs/api/components/type-aliases/CameraRuntimeType.md +1 -1
  46. package/dist/docs/api/components/type-aliases/ColliderShape.md +1 -1
  47. package/dist/docs/api/components/type-aliases/ColliderState.md +20 -20
  48. package/dist/docs/api/components/type-aliases/CubeMeshParameters.md +4 -4
  49. package/dist/docs/api/components/type-aliases/EditableMeshObjectKind.md +1 -1
  50. package/dist/docs/api/components/type-aliases/EnvironmentFogState.md +8 -8
  51. package/dist/docs/api/components/type-aliases/EnvironmentFogType.md +1 -1
  52. package/dist/docs/api/components/type-aliases/EnvironmentGradientEffect.md +1 -1
  53. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxState.md +7 -7
  54. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxType.md +1 -1
  55. package/dist/docs/api/components/type-aliases/EnvironmentState.md +5 -5
  56. package/dist/docs/api/components/type-aliases/ImageTargetAnchorOptions.md +3 -3
  57. package/dist/docs/api/components/type-aliases/ImageTargetReference.md +7 -7
  58. package/dist/docs/api/components/type-aliases/InstanceTransform.md +13 -13
  59. package/dist/docs/api/components/type-aliases/InstancedMeshKind.md +1 -1
  60. package/dist/docs/api/components/type-aliases/LightValueState.md +11 -11
  61. package/dist/docs/api/components/type-aliases/MaterialTypeValue.md +1 -1
  62. package/dist/docs/api/components/type-aliases/MaterialValueState.md +28 -28
  63. package/dist/docs/api/components/type-aliases/MeshGeometryParameters.md +1 -1
  64. package/dist/docs/api/components/type-aliases/MeshGeometryParametersByKind.md +7 -7
  65. package/dist/docs/api/components/type-aliases/PhysicsState.md +3 -3
  66. package/dist/docs/api/components/type-aliases/PlaneMeshParameters.md +3 -3
  67. package/dist/docs/api/components/type-aliases/PostprocessingState.md +62 -62
  68. package/dist/docs/api/components/type-aliases/RadiusHeightMeshParameters.md +3 -3
  69. package/dist/docs/api/components/type-aliases/RadiusMeshParameters.md +2 -2
  70. package/dist/docs/api/components/type-aliases/RigidbodyState.md +17 -17
  71. package/dist/docs/api/components/type-aliases/RigidbodyType.md +1 -1
  72. package/dist/docs/api/components/type-aliases/ScriptEntry.md +9 -9
  73. package/dist/docs/api/components/type-aliases/TextureFilteringValue.md +1 -1
  74. package/dist/docs/api/components/type-aliases/TransformData.md +4 -4
  75. package/dist/docs/api/components/type-aliases/TransformModeValue.md +1 -1
  76. package/dist/docs/api/components/type-aliases/TransformSpaceValue.md +1 -1
  77. package/dist/docs/api/components/type-aliases/Vec3.md +4 -4
  78. package/dist/docs/api/components/variables/DEFAULT_COLLIDER_STATE.md +1 -1
  79. package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_STATE.md +1 -1
  80. package/dist/docs/api/components/variables/DEFAULT_INSTANCED_MESH_PARAMETERS.md +1 -1
  81. package/dist/docs/api/components/variables/DEFAULT_INSTANCE_TRANSFORM.md +1 -1
  82. package/dist/docs/api/components/variables/DEFAULT_MESH_GEOMETRY_PARAMETERS.md +1 -1
  83. package/dist/docs/api/components/variables/DEFAULT_PHYSICS_STATE.md +1 -1
  84. package/dist/docs/api/components/variables/DEFAULT_POSTPROCESSING_STATE.md +1 -1
  85. package/dist/docs/api/components/variables/DEFAULT_RIGIDBODY_STATE.md +1 -1
  86. package/dist/docs/api/index/classes/AnimationStateMachine.md +16 -16
  87. package/dist/docs/api/index/classes/AnimationStateManager.md +13 -13
  88. package/dist/docs/api/index/classes/AnimationSystem.md +3 -3
  89. package/dist/docs/api/index/classes/AudioSystem.md +4 -4
  90. package/dist/docs/api/index/classes/CameraSyncSystem.md +2 -2
  91. package/dist/docs/api/index/classes/EnvironmentSyncSystem.md +4 -4
  92. package/dist/docs/api/index/classes/InputSystem.md +33 -33
  93. package/dist/docs/api/index/classes/InstancedMeshSystem.md +2 -2
  94. package/dist/docs/api/index/classes/LightSyncSystem.md +2 -2
  95. package/dist/docs/api/index/classes/MaterialSyncSystem.md +3 -3
  96. package/dist/docs/api/index/classes/MeshGeometrySystem.md +2 -2
  97. package/dist/docs/api/index/classes/ObjectManagementSystem.md +39 -19
  98. package/dist/docs/api/index/classes/ObjectVisibilitySystem.md +2 -2
  99. package/dist/docs/api/index/classes/PhysicsSyncSystem.md +4 -4
  100. package/dist/docs/api/index/classes/PostprocessingSyncSystem.md +4 -4
  101. package/dist/docs/api/index/classes/RenderSystem.md +3 -3
  102. package/dist/docs/api/index/classes/ScriptBehaviourSystem.md +4 -4
  103. package/dist/docs/api/index/classes/TransformSyncSystem.md +2 -2
  104. package/dist/docs/api/index/classes/VideoSystem.md +4 -4
  105. package/dist/docs/api/index/classes/World.md +82 -82
  106. package/dist/docs/api/index/functions/createAnimationComponent.md +1 -1
  107. package/dist/docs/api/index/functions/createAudioComponent.md +1 -1
  108. package/dist/docs/api/index/functions/createCameraComponent.md +1 -1
  109. package/dist/docs/api/index/functions/createEntityTypeComponent.md +1 -1
  110. package/dist/docs/api/index/functions/createEnvironmentComponent.md +1 -1
  111. package/dist/docs/api/index/functions/createImageComponent.md +1 -1
  112. package/dist/docs/api/index/functions/createImageTargetAnchorComponent.md +1 -1
  113. package/dist/docs/api/index/functions/createImageTargetComponent.md +1 -1
  114. package/dist/docs/api/index/functions/createInstanceSlotComponent.md +1 -1
  115. package/dist/docs/api/index/functions/createInstancedMeshComponent.md +1 -1
  116. package/dist/docs/api/index/functions/createLightComponent.md +1 -1
  117. package/dist/docs/api/index/functions/createMaterialComponent.md +1 -1
  118. package/dist/docs/api/index/functions/createMeshComponent.md +1 -1
  119. package/dist/docs/api/index/functions/createMeshGeometryComponent.md +1 -1
  120. package/dist/docs/api/index/functions/createModelComponent.md +1 -1
  121. package/dist/docs/api/index/functions/createNameComponent.md +1 -1
  122. package/dist/docs/api/index/functions/createObject3DRefComponent.md +1 -1
  123. package/dist/docs/api/index/functions/createParentIdComponent.md +1 -1
  124. package/dist/docs/api/index/functions/createPhysicsComponent.md +1 -1
  125. package/dist/docs/api/index/functions/createPostprocessingComponent.md +1 -1
  126. package/dist/docs/api/index/functions/createScriptComponent.md +1 -1
  127. package/dist/docs/api/index/functions/createSelectableComponent.md +1 -1
  128. package/dist/docs/api/index/functions/createSelectionTransformStateComponent.md +1 -1
  129. package/dist/docs/api/index/functions/createSpriteComponent.md +1 -1
  130. package/dist/docs/api/index/functions/createTransformComponent.md +1 -1
  131. package/dist/docs/api/index/functions/createVideoComponent.md +1 -1
  132. package/dist/docs/api/index/functions/hydrateWorldFromSnapshot.md +1 -1
  133. package/dist/docs/api/index/functions/hydrateWorldFromSnapshotDetailed.md +1 -1
  134. package/dist/docs/api/index/functions/registerDefaultComponentFactories.md +1 -1
  135. package/dist/docs/api/index/functions/registerDefaultFactories.md +1 -1
  136. package/dist/docs/api/index/interfaces/EcsSystem.md +3 -3
  137. package/dist/docs/api/index/interfaces/StateMachine.md +13 -13
  138. package/dist/docs/api/index/type-aliases/AnimationStateCallbacks.md +4 -4
  139. package/dist/docs/api/index/type-aliases/ComponentFactory.md +1 -1
  140. package/dist/docs/api/index/type-aliases/EcsComponentFactoryKind.md +1 -1
  141. package/dist/docs/api/index/type-aliases/EcsWorldComponentSnapshot.md +3 -3
  142. package/dist/docs/api/index/type-aliases/EcsWorldStateSnapshotLike.md +4 -4
  143. package/dist/docs/api/index/type-aliases/HydrateWorldFromSnapshotResult.md +3 -3
  144. package/dist/docs/api/index/type-aliases/KeyboardKey.md +1 -1
  145. package/dist/docs/api/index/type-aliases/MouseButton.md +1 -1
  146. package/dist/docs/api/index/type-aliases/SelectionContext.md +4 -4
  147. package/dist/docs/api/index/variables/HYDRATABLE_ENTITY_KINDS.md +1 -1
  148. package/dist/docs/api/index/variables/KeyboardKeys.md +89 -89
  149. package/dist/docs/api/types/type-aliases/AssetInput.md +3 -3
  150. package/dist/docs/api/types/type-aliases/CheckboxInput.md +1 -1
  151. package/dist/docs/api/types/type-aliases/ColorInput.md +1 -1
  152. package/dist/docs/api/types/type-aliases/ComponentInput.md +4 -4
  153. package/dist/docs/api/types/type-aliases/ComponentKind.md +1 -1
  154. package/dist/docs/api/types/type-aliases/DropdownInput.md +3 -3
  155. package/dist/docs/api/types/type-aliases/DropdownOption.md +3 -3
  156. package/dist/docs/api/types/type-aliases/EcsEntityEditorKind.md +1 -1
  157. package/dist/docs/api/types/type-aliases/EcsEntityKind.md +1 -1
  158. package/dist/docs/api/types/type-aliases/EntityId.md +1 -1
  159. package/dist/docs/api/types/type-aliases/EntityInput.md +3 -3
  160. package/dist/docs/api/types/type-aliases/FloatInput.md +1 -1
  161. package/dist/docs/api/types/type-aliases/IntersectionResult.md +3 -3
  162. package/dist/docs/api/types/type-aliases/ParentLookup.md +3 -3
  163. package/dist/docs/api/types/type-aliases/SelectionListener.md +1 -1
  164. package/dist/docs/api/types/type-aliases/SliderInput.md +5 -5
  165. package/dist/docs/api/types/type-aliases/TextInput.md +1 -1
  166. package/dist/docs/api/types/type-aliases/ToggleInput.md +1 -1
  167. package/dist/docs/api/types/type-aliases/Vec3.md +1 -1
  168. package/dist/docs/api/types/type-aliases/Vector2Input.md +3 -3
  169. package/dist/docs/api/types/type-aliases/Vector3Input.md +4 -4
  170. package/dist/docs/api/types/type-aliases/WorldEntityView.md +1 -1
  171. package/dist/docs/guide/component-catalog.md +2 -0
  172. package/dist/docs/guide/components/animation.md +40 -1
  173. package/dist/docs/guide/components/instanced-mesh.md +1 -4
  174. package/dist/docs/guide/spawning/audio.md +29 -7
  175. package/dist/docs/guide/systems/object-management-system.md +9 -0
  176. package/dist/factories/index.cjs.map +1 -1
  177. package/dist/factories/index.d.cts +2 -2
  178. package/dist/factories/index.d.ts +2 -2
  179. package/dist/factories/index.js +2 -2
  180. package/dist/{index-D-gUELQS.d.ts → index-B5JcGMJ5.d.ts} +2 -2
  181. package/dist/{index-ComEYKYI.d.cts → index-kx5O2mVU.d.cts} +2 -2
  182. package/dist/index.cjs +37 -1
  183. package/dist/index.cjs.map +1 -1
  184. package/dist/index.d.cts +5 -5
  185. package/dist/index.d.ts +5 -5
  186. package/dist/index.js +6 -6
  187. package/dist/systems/index.cjs +37 -1
  188. package/dist/systems/index.cjs.map +1 -1
  189. package/dist/systems/index.d.cts +2 -2
  190. package/dist/systems/index.d.ts +2 -2
  191. package/dist/systems/index.js +2 -2
  192. package/dist/types.d.cts +1 -1
  193. package/dist/types.d.ts +1 -1
  194. package/dist/worldSnapshotUtils.d.cts +1 -1
  195. package/dist/worldSnapshotUtils.d.ts +1 -1
  196. package/package.json +1 -1
  197. package/dist/chunk-OIOUWDOS.js.map +0 -1
@@ -109,9 +109,48 @@ export default class AnimationSpeedDriver extends Behaviour {
109
109
  ```
110
110
 
111
111
  ::: tip State machine
112
- Always use anim.switchState(name)` to change the active clip — do not assign to `active` directly. This ensures the animation system observes the transition and applies the configured cross-fade.
112
+ Always use `anim.switchState(name)` to change the active clip — do not assign to `active` directly. This ensures the animation system observes the transition and applies the configured cross-fade.
113
113
  :::
114
114
 
115
+ ### ⚠️ `addState` — positional args only (critical)
116
+
117
+ `addState` takes **three positional arguments**: `(name, clipRef, loop)`. Passing an object will silently resolve nothing because `resolveClipRef` won't find a clip named `[object Object]`.
118
+
119
+ ```typescript
120
+ // ✅ Correct — positional args
121
+ anim.addState("Walk", "Walk", true);
122
+ anim.addState("Attack", "Attack", false);
123
+
124
+ // ❌ Wrong — object arg; the clip will never resolve
125
+ anim.addState({ name: "Walk", clip: "Walk", loop: true }); // ← broken
126
+ ```
127
+
128
+ ### Typical deferred setup (model may not be loaded yet)
129
+
130
+ Guard on `availableClips.length > 0` inside `onUpdate` until the model is ready, then register states once:
131
+
132
+ ```typescript
133
+ import { Behaviour, AnimationComponent } from "@relu-interactives/spatial-ecs";
134
+
135
+ export default class AnimSetup extends Behaviour {
136
+ private ready = false;
137
+
138
+ protected onUpdate() {
139
+ if (this.ready) return;
140
+ const anim = this.getComponent(AnimationComponent);
141
+ if (!anim || anim.availableClips.length === 0) return;
142
+
143
+ const c = anim.availableClips;
144
+ if (c.includes("Walk")) anim.addState("Walk", "Walk", true);
145
+ if (c.includes("Run")) anim.addState("Run", "Run", true);
146
+ if (c.includes("Attack")) anim.addState("Attack", "Attack", false);
147
+ anim.crossFadeDuration = 0.25;
148
+ anim.switchState("Walk");
149
+ this.ready = true;
150
+ }
151
+ }
152
+ ```
153
+
115
154
  ### Via `ComponentInput` in the inspector
116
155
 
117
156
  You can also pick this component from the inspector using a `ComponentInput` field. Assign any entity in the inspector and the field resolves to the live `AnimationComponent` instance at runtime.
@@ -8,10 +8,7 @@ Use instanced meshes when you need tens, hundreds, or thousands of identical obj
8
8
 
9
9
  ## Editor inspector
10
10
 
11
- ::: tip Screenshot
12
- Add a screenshot of the **Instanced Mesh** component in the editor inspector here.
13
- Suggested asset path: `/public/images/inspector/instanced-mesh.png`
14
- :::
11
+ ![Instanced Mesh inspector](/images/components/instanced-mesh.png)
15
12
 
16
13
  ## Properties
17
14
 
@@ -40,13 +40,35 @@ export default class SpawnSound extends Behaviour {
40
40
 
41
41
  ### `options`
42
42
 
43
- | Option | Type | Default | Description |
44
- | --------------- | -------------- | ------- | ------------------------------------------------ |
45
- | `autoplay` | `boolean` | `false` | Start playback as soon as the clip is loaded. |
46
- | `loop` | `boolean` | `false` | Loop playback indefinitely. |
47
- | `volume` | `number` (0–1) | `1` | Linear gain. |
48
- | `refDistance` | `number` | `1` | Distance at which volume is unattenuated. |
49
- | `rolloffFactor` | `number` | `1` | How quickly volume falls off past `refDistance`. |
43
+ | Option | Type | Default | Description |
44
+ | --------------- | ---------------------------------------- | ----------- | ----------------------------------------------------------------- |
45
+ | `autoplay` | `boolean` | `false` | Start playback as soon as the clip is loaded. |
46
+ | `loop` | `boolean` | `false` | Loop playback indefinitely. |
47
+ | `volume` | `number` (0–1) | `1` | Linear gain. |
48
+ | `pitch` | `number` | `1` | Playback rate multiplier (`1` = normal speed/pitch). |
49
+ | `positional` | `boolean` | `false` | When `true`, audio is spatialized using the entity's transform. |
50
+ | `refDistance` | `number` | `1` | Distance at which volume is unattenuated (positional only). |
51
+ | `distanceModel` | `"linear" \| "inverse" \| "exponential"` | `"inverse"` | WebAudio distance model (positional only). |
52
+ | `rolloffFactor` | `number` | `1` | How quickly volume falls off past `refDistance`. |
53
+
54
+ ## ⚠️ Common mistake — wrong payload shape
55
+
56
+ `path` and `options` must be **top-level** keys on the payload. Never nest them inside an `audio:` sub-object.
57
+
58
+ ```ts
59
+ // ✅ Correct
60
+ objects?.requestCreate("audio", {
61
+ name: "SFX",
62
+ path: "localasset://assets/sfx/hit.mp3",
63
+ options: { autoplay: true, volume: 0.8 },
64
+ });
65
+
66
+ // ❌ Wrong — do NOT wrap inside audio:{}
67
+ objects?.requestCreate("audio", {
68
+ name: "SFX",
69
+ audio: { path: "...", options: { autoplay: true } }, // ← this will be ignored
70
+ });
71
+ ```
50
72
 
51
73
  ## Components attached
52
74
 
@@ -32,6 +32,15 @@ Component kinds (e.g. `"animation"`, `"physics"`) are registered with `registerC
32
32
  - **Parent reconciliation** — if a `ParentId` refers to an entity that does not yet have an `Object3DRef` (e.g. the parent is still loading), reparenting is deferred to the next frame.
33
33
  - **Scene root** — entities without a `ParentId` (or with `ParentId.parentId === null`) are kept as direct children of the THREE.js scene root.
34
34
  - **Audio listener** — `getOrCreateAudioListener()` lazily creates a single `THREE.AudioListener` on the world camera and is used by audio object factories.
35
+ - **Entity deletion** — `deleteEntity(world, entityId)` removes the entity from the ECS world and its `Object3D` from the THREE.js scene graph. Pass `dispose = true` as the third argument to also call `.dispose()` on all `BufferGeometry` and `Material` instances in the subtree, freeing GPU memory. Use this for dynamically spawned objects that will not be reused. Avoid it when geometry or materials are shared with other entities.
36
+
37
+ ```ts
38
+ // Remove from scene only (geometry/materials are kept on the GPU — safe if shared)
39
+ objects.deleteEntity(world, entityId);
40
+
41
+ // Remove from scene and free GPU memory
42
+ objects.deleteEntity(world, entityId, true);
43
+ ```
35
44
 
36
45
  ## API reference
37
46