@relu-interactives/spatial-ecs 0.2.13 → 0.2.15

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 (189) hide show
  1. package/dist/{System-CTTwEGn1.d.cts → System-BeuJ1xt5.d.cts} +2 -0
  2. package/dist/{System-CTTwEGn1.d.ts → System-BeuJ1xt5.d.ts} +2 -0
  3. package/dist/{Video-CV1-u6hL.d.ts → Video-Cym2C52L.d.ts} +1 -1
  4. package/dist/{Video-BMWPYc3q.d.cts → Video-D4B-z74P.d.cts} +1 -1
  5. package/dist/{chunk-KDZ6VBRO.js → chunk-D3AKP6QQ.js} +33 -6
  6. package/dist/chunk-D3AKP6QQ.js.map +1 -0
  7. package/dist/components/index.d.cts +2 -2
  8. package/dist/components/index.d.ts +2 -2
  9. package/dist/docs/api/Behaviour/classes/Behaviour.md +29 -29
  10. package/dist/docs/api/Component/classes/Component.md +1 -1
  11. package/dist/docs/api/components/classes/AnimationComponent.md +26 -26
  12. package/dist/docs/api/components/classes/AudioComponent.md +19 -19
  13. package/dist/docs/api/components/classes/CameraComponent.md +14 -14
  14. package/dist/docs/api/components/classes/EntityType.md +3 -3
  15. package/dist/docs/api/components/classes/Environment.md +3 -3
  16. package/dist/docs/api/components/classes/ImageComponent.md +7 -7
  17. package/dist/docs/api/components/classes/ImageTarget.md +7 -7
  18. package/dist/docs/api/components/classes/ImageTargetAnchor.md +4 -4
  19. package/dist/docs/api/components/classes/InstanceSlotComponent.md +4 -4
  20. package/dist/docs/api/components/classes/InstancedMeshComponent.md +10 -10
  21. package/dist/docs/api/components/classes/LightComponent.md +6 -6
  22. package/dist/docs/api/components/classes/MaterialComponent.md +11 -11
  23. package/dist/docs/api/components/classes/MeshComponent.md +3 -3
  24. package/dist/docs/api/components/classes/MeshGeometryComponent.md +9 -9
  25. package/dist/docs/api/components/classes/ModelComponent.md +4 -4
  26. package/dist/docs/api/components/classes/Name.md +3 -3
  27. package/dist/docs/api/components/classes/Object3DRef.md +4 -4
  28. package/dist/docs/api/components/classes/ParentId.md +3 -3
  29. package/dist/docs/api/components/classes/PhysicsComponent.md +6 -6
  30. package/dist/docs/api/components/classes/Postprocessing.md +3 -3
  31. package/dist/docs/api/components/classes/ScriptComponent.md +5 -5
  32. package/dist/docs/api/components/classes/Selectable.md +3 -3
  33. package/dist/docs/api/components/classes/SelectionTransformState.md +5 -5
  34. package/dist/docs/api/components/classes/SpriteComponent.md +7 -7
  35. package/dist/docs/api/components/classes/TransformComponent.md +12 -12
  36. package/dist/docs/api/components/classes/VideoComponent.md +28 -28
  37. package/dist/docs/api/components/functions/normalizePhysicsState.md +1 -1
  38. package/dist/docs/api/components/type-aliases/AnimationComponentOptions.md +9 -9
  39. package/dist/docs/api/components/type-aliases/CameraComponentOptions.md +13 -13
  40. package/dist/docs/api/components/type-aliases/CameraProjection.md +1 -1
  41. package/dist/docs/api/components/type-aliases/CameraRuntimeType.md +1 -1
  42. package/dist/docs/api/components/type-aliases/ColliderShape.md +1 -1
  43. package/dist/docs/api/components/type-aliases/ColliderState.md +20 -20
  44. package/dist/docs/api/components/type-aliases/CubeMeshParameters.md +4 -4
  45. package/dist/docs/api/components/type-aliases/EditableMeshObjectKind.md +1 -1
  46. package/dist/docs/api/components/type-aliases/EnvironmentFogState.md +8 -8
  47. package/dist/docs/api/components/type-aliases/EnvironmentFogType.md +1 -1
  48. package/dist/docs/api/components/type-aliases/EnvironmentGradientEffect.md +1 -1
  49. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxState.md +7 -7
  50. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxType.md +1 -1
  51. package/dist/docs/api/components/type-aliases/EnvironmentState.md +5 -5
  52. package/dist/docs/api/components/type-aliases/ImageTargetAnchorOptions.md +3 -3
  53. package/dist/docs/api/components/type-aliases/ImageTargetReference.md +7 -7
  54. package/dist/docs/api/components/type-aliases/InstanceTransform.md +13 -13
  55. package/dist/docs/api/components/type-aliases/InstancedMeshKind.md +1 -1
  56. package/dist/docs/api/components/type-aliases/LightValueState.md +11 -11
  57. package/dist/docs/api/components/type-aliases/MaterialTypeValue.md +1 -1
  58. package/dist/docs/api/components/type-aliases/MaterialValueState.md +28 -28
  59. package/dist/docs/api/components/type-aliases/MeshGeometryParameters.md +1 -1
  60. package/dist/docs/api/components/type-aliases/MeshGeometryParametersByKind.md +7 -7
  61. package/dist/docs/api/components/type-aliases/PhysicsState.md +3 -3
  62. package/dist/docs/api/components/type-aliases/PlaneMeshParameters.md +3 -3
  63. package/dist/docs/api/components/type-aliases/PostprocessingState.md +62 -62
  64. package/dist/docs/api/components/type-aliases/RadiusHeightMeshParameters.md +3 -3
  65. package/dist/docs/api/components/type-aliases/RadiusMeshParameters.md +2 -2
  66. package/dist/docs/api/components/type-aliases/RigidbodyState.md +17 -17
  67. package/dist/docs/api/components/type-aliases/RigidbodyType.md +1 -1
  68. package/dist/docs/api/components/type-aliases/ScriptEntry.md +9 -9
  69. package/dist/docs/api/components/type-aliases/TextureFilteringValue.md +1 -1
  70. package/dist/docs/api/components/type-aliases/TransformData.md +4 -4
  71. package/dist/docs/api/components/type-aliases/TransformModeValue.md +1 -1
  72. package/dist/docs/api/components/type-aliases/TransformSpaceValue.md +1 -1
  73. package/dist/docs/api/components/type-aliases/Vec3.md +4 -4
  74. package/dist/docs/api/components/variables/DEFAULT_COLLIDER_STATE.md +1 -1
  75. package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_STATE.md +1 -1
  76. package/dist/docs/api/components/variables/DEFAULT_INSTANCED_MESH_PARAMETERS.md +1 -1
  77. package/dist/docs/api/components/variables/DEFAULT_INSTANCE_TRANSFORM.md +1 -1
  78. package/dist/docs/api/components/variables/DEFAULT_MESH_GEOMETRY_PARAMETERS.md +1 -1
  79. package/dist/docs/api/components/variables/DEFAULT_PHYSICS_STATE.md +1 -1
  80. package/dist/docs/api/components/variables/DEFAULT_POSTPROCESSING_STATE.md +1 -1
  81. package/dist/docs/api/components/variables/DEFAULT_RIGIDBODY_STATE.md +1 -1
  82. package/dist/docs/api/index/classes/AnimationStateMachine.md +16 -16
  83. package/dist/docs/api/index/classes/AnimationStateManager.md +13 -13
  84. package/dist/docs/api/index/classes/AnimationSystem.md +3 -3
  85. package/dist/docs/api/index/classes/AudioSystem.md +4 -4
  86. package/dist/docs/api/index/classes/CameraSyncSystem.md +2 -2
  87. package/dist/docs/api/index/classes/EnvironmentSyncSystem.md +4 -4
  88. package/dist/docs/api/index/classes/InputSystem.md +33 -33
  89. package/dist/docs/api/index/classes/InstancedMeshSystem.md +2 -2
  90. package/dist/docs/api/index/classes/LightSyncSystem.md +2 -2
  91. package/dist/docs/api/index/classes/MaterialSyncSystem.md +3 -3
  92. package/dist/docs/api/index/classes/MeshGeometrySystem.md +2 -2
  93. package/dist/docs/api/index/classes/ObjectManagementSystem.md +14 -14
  94. package/dist/docs/api/index/classes/ObjectVisibilitySystem.md +2 -2
  95. package/dist/docs/api/index/classes/PhysicsSyncSystem.md +4 -4
  96. package/dist/docs/api/index/classes/PostprocessingSyncSystem.md +4 -4
  97. package/dist/docs/api/index/classes/RenderSystem.md +3 -3
  98. package/dist/docs/api/index/classes/ScriptBehaviourSystem.md +4 -4
  99. package/dist/docs/api/index/classes/TransformSyncSystem.md +2 -2
  100. package/dist/docs/api/index/classes/VideoSystem.md +4 -4
  101. package/dist/docs/api/index/classes/World.md +124 -84
  102. package/dist/docs/api/index/functions/createAnimationComponent.md +1 -1
  103. package/dist/docs/api/index/functions/createAudioComponent.md +1 -1
  104. package/dist/docs/api/index/functions/createCameraComponent.md +1 -1
  105. package/dist/docs/api/index/functions/createEntityTypeComponent.md +1 -1
  106. package/dist/docs/api/index/functions/createEnvironmentComponent.md +1 -1
  107. package/dist/docs/api/index/functions/createImageComponent.md +1 -1
  108. package/dist/docs/api/index/functions/createImageTargetAnchorComponent.md +1 -1
  109. package/dist/docs/api/index/functions/createImageTargetComponent.md +1 -1
  110. package/dist/docs/api/index/functions/createInstanceSlotComponent.md +1 -1
  111. package/dist/docs/api/index/functions/createInstancedMeshComponent.md +1 -1
  112. package/dist/docs/api/index/functions/createLightComponent.md +1 -1
  113. package/dist/docs/api/index/functions/createMaterialComponent.md +1 -1
  114. package/dist/docs/api/index/functions/createMeshComponent.md +1 -1
  115. package/dist/docs/api/index/functions/createMeshGeometryComponent.md +1 -1
  116. package/dist/docs/api/index/functions/createModelComponent.md +1 -1
  117. package/dist/docs/api/index/functions/createNameComponent.md +1 -1
  118. package/dist/docs/api/index/functions/createObject3DRefComponent.md +1 -1
  119. package/dist/docs/api/index/functions/createParentIdComponent.md +1 -1
  120. package/dist/docs/api/index/functions/createPhysicsComponent.md +1 -1
  121. package/dist/docs/api/index/functions/createPostprocessingComponent.md +1 -1
  122. package/dist/docs/api/index/functions/createScriptComponent.md +1 -1
  123. package/dist/docs/api/index/functions/createSelectableComponent.md +1 -1
  124. package/dist/docs/api/index/functions/createSelectionTransformStateComponent.md +1 -1
  125. package/dist/docs/api/index/functions/createSpriteComponent.md +1 -1
  126. package/dist/docs/api/index/functions/createTransformComponent.md +1 -1
  127. package/dist/docs/api/index/functions/createVideoComponent.md +1 -1
  128. package/dist/docs/api/index/functions/hydrateWorldFromSnapshot.md +1 -1
  129. package/dist/docs/api/index/functions/hydrateWorldFromSnapshotDetailed.md +1 -1
  130. package/dist/docs/api/index/functions/registerDefaultComponentFactories.md +1 -1
  131. package/dist/docs/api/index/functions/registerDefaultFactories.md +1 -1
  132. package/dist/docs/api/index/interfaces/EcsSystem.md +3 -3
  133. package/dist/docs/api/index/interfaces/StateMachine.md +13 -13
  134. package/dist/docs/api/index/type-aliases/AnimationStateCallbacks.md +4 -4
  135. package/dist/docs/api/index/type-aliases/ComponentFactory.md +1 -1
  136. package/dist/docs/api/index/type-aliases/EcsComponentFactoryKind.md +1 -1
  137. package/dist/docs/api/index/type-aliases/EcsWorldComponentSnapshot.md +3 -3
  138. package/dist/docs/api/index/type-aliases/EcsWorldStateSnapshotLike.md +4 -4
  139. package/dist/docs/api/index/type-aliases/HydrateWorldFromSnapshotResult.md +3 -3
  140. package/dist/docs/api/index/type-aliases/KeyboardKey.md +1 -1
  141. package/dist/docs/api/index/type-aliases/MouseButton.md +1 -1
  142. package/dist/docs/api/index/type-aliases/SelectionContext.md +4 -4
  143. package/dist/docs/api/index/variables/HYDRATABLE_ENTITY_KINDS.md +1 -1
  144. package/dist/docs/api/index/variables/KeyboardKeys.md +89 -89
  145. package/dist/docs/api/types/type-aliases/AssetInput.md +3 -3
  146. package/dist/docs/api/types/type-aliases/CheckboxInput.md +3 -3
  147. package/dist/docs/api/types/type-aliases/ColorInput.md +1 -1
  148. package/dist/docs/api/types/type-aliases/ComponentInput.md +4 -4
  149. package/dist/docs/api/types/type-aliases/ComponentKind.md +1 -1
  150. package/dist/docs/api/types/type-aliases/DropdownInput.md +3 -3
  151. package/dist/docs/api/types/type-aliases/DropdownOption.md +3 -3
  152. package/dist/docs/api/types/type-aliases/EcsEntityEditorKind.md +1 -1
  153. package/dist/docs/api/types/type-aliases/EcsEntityKind.md +1 -1
  154. package/dist/docs/api/types/type-aliases/EntityId.md +1 -1
  155. package/dist/docs/api/types/type-aliases/EntityInput.md +3 -3
  156. package/dist/docs/api/types/type-aliases/FloatInput.md +1 -1
  157. package/dist/docs/api/types/type-aliases/IntersectionResult.md +3 -3
  158. package/dist/docs/api/types/type-aliases/ParentLookup.md +3 -3
  159. package/dist/docs/api/types/type-aliases/SelectionListener.md +1 -1
  160. package/dist/docs/api/types/type-aliases/SliderInput.md +5 -5
  161. package/dist/docs/api/types/type-aliases/TextInput.md +1 -1
  162. package/dist/docs/api/types/type-aliases/ToggleInput.md +1 -1
  163. package/dist/docs/api/types/type-aliases/Vec3.md +1 -1
  164. package/dist/docs/api/types/type-aliases/Vector2Input.md +3 -3
  165. package/dist/docs/api/types/type-aliases/Vector3Input.md +4 -4
  166. package/dist/docs/api/types/type-aliases/WorldEntityView.md +1 -1
  167. package/dist/docs/guide/components/parent-id.md +25 -0
  168. package/dist/docs/guide/world-api.md +34 -0
  169. package/dist/factories/index.d.cts +2 -2
  170. package/dist/factories/index.d.ts +2 -2
  171. package/dist/{index-D7q4SRCp.d.cts → index-BfoOC2CG.d.cts} +2 -2
  172. package/dist/{index-ByX7502C.d.ts → index-BoJ3_6a3.d.ts} +2 -2
  173. package/dist/index.cjs +49 -4
  174. package/dist/index.cjs.map +1 -1
  175. package/dist/index.d.cts +5 -5
  176. package/dist/index.d.ts +5 -5
  177. package/dist/index.js +21 -3
  178. package/dist/index.js.map +1 -1
  179. package/dist/systems/index.cjs +31 -4
  180. package/dist/systems/index.cjs.map +1 -1
  181. package/dist/systems/index.d.cts +6 -2
  182. package/dist/systems/index.d.ts +6 -2
  183. package/dist/systems/index.js +1 -1
  184. package/dist/types.d.cts +1 -1
  185. package/dist/types.d.ts +1 -1
  186. package/dist/worldSnapshotUtils.d.cts +1 -1
  187. package/dist/worldSnapshotUtils.d.ts +1 -1
  188. package/package.json +1 -1
  189. package/dist/chunk-KDZ6VBRO.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/World.ts","../core/hydration/readers.ts","../core/hydration/componentValues.ts","../core/hydration/parentLinks.ts","../core/hydration/postCreateComponents.ts","../core/hydration/animation.ts","../core/hydration/restoreComponentState.ts","../core/hydration/types.ts","../core/hydration/hydrateWorld.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import * as THREE from \"three\";\nimport type * as RAPIER from \"@dimforge/rapier3d-compat\";\nimport {\n cloneHistoryValue,\n DEBUG_CHANGE_IGNORED_SYSTEMS,\n normalizeDebugValue,\n type AnyComponent,\n type ComponentClass,\n type WorldHistorySnapshot,\n} from \"./worldSnapshotUtils\";\nimport type { Component } from \"./Component\";\nimport type { EcsSystem } from \"./System\";\nimport type { EntityId, IntersectionResult, SelectionListener, Vec3 } from \"./types\";\nimport { registerDefaultFactories } from \"./factories\";\nimport {\n Environment,\n EntityType,\n Name,\n Object3DRef,\n Postprocessing,\n ScriptComponent,\n SelectionTransformState,\n} from \"./components\";\nimport {\n AnimationSystem,\n AudioSystem,\n VideoSystem,\n CameraSyncSystem,\n EnvironmentSyncSystem,\n PostprocessingSyncSystem,\n LightSyncSystem,\n MaterialSyncSystem,\n MeshGeometrySystem,\n InstancedMeshSystem,\n ObjectManagementSystem,\n ObjectVisibilitySystem,\n PhysicsSyncSystem,\n TransformSyncSystem,\n RenderSystem,\n InputSystem,\n type KeyboardKey,\n type MouseButton,\n} from \"./systems\";\n\ntype StoreListener = () => void;\nexport type WorldFeatureFlags = {\n supportSkybox?: boolean;\n supportPostprocessing?: boolean;\n};\n\ntype WorldEntityView = {\n name: string;\n entityId: number;\n object: THREE.Object3D | null;\n type: string;\n components: Component[];\n};\n\nexport class World {\n private nextEntityId = 1;\n private entities = new Set<EntityId>();\n private systems: EcsSystem[] = [];\n private selectionListeners = new Set<SelectionListener>();\n private storeListeners = new Set<StoreListener>();\n\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private readonly featureFlags: {\n supportSkybox: boolean;\n supportPostprocessing: boolean;\n };\n\n private components = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n private inputSystem: InputSystem | null = null;\n private objectManagementSystem: ObjectManagementSystem | null = null;\n private environmentSyncSystem: EnvironmentSyncSystem | null = null;\n private postprocessingSyncSystem: PostprocessingSyncSystem | null = null;\n private rapierModule: typeof RAPIER | null = null;\n private rapierModulePromise: Promise<typeof RAPIER> | null = null;\n private physicsWorld: RAPIER.World | null = null;\n\n private isEditor = false;\n private paused = false;\n\n constructor(options: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n renderer: THREE.WebGLRenderer;\n featureFlags?: WorldFeatureFlags;\n }) {\n this.scene = options.scene;\n this.camera = options.camera;\n this.renderer = options.renderer;\n this.featureFlags = {\n supportSkybox: options.featureFlags?.supportSkybox ?? true,\n supportPostprocessing:\n options.featureFlags?.supportPostprocessing ?? true,\n };\n\n // Ensure runtime previews render mesh and light shadow settings consistently.\n this.renderer.shadowMap.enabled = true;\n }\n\n createEntity(): EntityId {\n const entityId = this.nextEntityId;\n this.nextEntityId += 1;\n this.entities.add(entityId);\n this.emitStoreChanged();\n return entityId;\n }\n\n destroyEntity(entityId: EntityId): void {\n if (!this.entities.has(entityId)) {\n return;\n }\n\n this.entities.delete(entityId);\n\n for (const store of this.components.values()) {\n store.delete(entityId);\n }\n\n if (this.getSelectedEntity() === entityId) {\n this.setSelectedEntity(null);\n }\n\n this.emitStoreChanged();\n }\n\n private getSelectionState(): SelectionTransformState | undefined {\n const entityId = this.query(SelectionTransformState)[0];\n if (entityId === undefined) {\n return undefined;\n }\n\n return this.getComponent(entityId, SelectionTransformState);\n }\n\n hasEntity(entityId: EntityId): boolean {\n return this.entities.has(entityId);\n }\n\n getEntities(): EntityId[] {\n return [...this.entities];\n }\n\n getEntityCount(): number {\n return this.entities.size;\n }\n\n addComponent<T extends Component>(entityId: EntityId, component: T): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n this.emitStoreChanged();\n }\n\n addComponents<T extends Component>(\n entityId: EntityId,\n components: T[],\n ): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n for (const component of components) {\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n }\n\n this.emitStoreChanged();\n }\n\n removeComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): void {\n this.components.get(componentType)?.delete(entityId);\n this.emitStoreChanged();\n }\n\n getComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): T | undefined {\n return this.components.get(componentType)?.get(entityId) as T | undefined;\n }\n\n hasComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): boolean {\n return this.components.get(componentType)?.has(entityId) ?? false;\n }\n\n query(...componentTypes: ComponentClass<AnyComponent>[]): EntityId[] {\n return [...this.entities].filter((entityId) =>\n componentTypes.every((componentType) =>\n this.components.get(componentType)?.has(entityId),\n ),\n );\n }\n\n /**\n * Returns `true` if the entity is currently visible (its `Object3DRef.visibility`\n * is `true`), or if the entity has no `Object3DRef` component (entities without a\n * scene object are always considered active). Systems use this to skip per-entity\n * updates for hidden objects.\n */\n isEntityVisible(entityId: EntityId): boolean {\n const objectRef = this.getComponent(entityId, Object3DRef);\n return objectRef ? objectRef.visibility : true;\n }\n\n getInputSystem(): EcsSystem | null {\n if (this.inputSystem !== null) return this.inputSystem;\n\n const inputSystem = this.systems.find(\n (system) => system.constructor.name === \"InputSystem\",\n );\n\n this.inputSystem = inputSystem as InputSystem;\n\n return inputSystem ?? null;\n }\n\n getKeyDown(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyDown(key);\n }\n\n getKeyUp(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyUp(key);\n }\n\n getKey(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKey(key);\n }\n\n getMouse(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouse(button);\n }\n\n getMouseDown(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseDown(button);\n }\n\n getMouseUp(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseUp(button);\n }\n\n getScrollClick(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClick();\n }\n\n getScrollClickDown(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickDown();\n }\n\n getScrollClickUp(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickUp();\n }\n\n getScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getScrollDelta();\n }\n\n consumeScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeScrollDelta();\n }\n\n getMousePosition(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMousePosition();\n }\n\n getMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMouseDelta();\n }\n\n consumeMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeMouseDelta();\n }\n\n async getRapierModule(): Promise<typeof RAPIER> {\n if (this.rapierModule) {\n return this.rapierModule;\n }\n\n if (!this.rapierModulePromise) {\n this.rapierModulePromise = import(\"@dimforge/rapier3d-compat\").then(\n async (moduleValue) => {\n await moduleValue.init();\n this.rapierModule = moduleValue;\n return moduleValue;\n },\n );\n }\n\n return this.rapierModulePromise;\n }\n\n getPhysicsWorld(): RAPIER.World | null {\n return this.physicsWorld;\n }\n\n setPhysicsWorld(physicsWorld: RAPIER.World | null): void {\n this.physicsWorld = physicsWorld;\n }\n\n async createPhysicsWorld(options?: {\n gravity?: { x?: number; y?: number; z?: number };\n }): Promise<RAPIER.World | null> {\n if (this.physicsWorld) {\n return this.physicsWorld;\n }\n\n const RAPIER = await this.getRapierModule();\n const gravity = options?.gravity;\n const gravityVector = new RAPIER.Vector3(\n typeof gravity?.x === \"number\" ? gravity.x : 0,\n typeof gravity?.y === \"number\" ? gravity.y : -9.81,\n typeof gravity?.z === \"number\" ? gravity.z : 0,\n );\n\n this.physicsWorld = new RAPIER.World(gravityVector);\n return this.physicsWorld;\n }\n\n lockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).lockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (typeof this.renderer.domElement.requestPointerLock !== \"function\") {\n return false;\n }\n\n try {\n const result = this.renderer.domElement.requestPointerLock();\n // Modern browsers (including Safari) return a Promise that rejects\n // when the call happens outside a user gesture. Absorb the rejection\n // so it does not surface as an unhandled promise rejection.\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n return true;\n } catch {\n return false;\n }\n }\n\n unlockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n return (inputSystem as InputSystem).unlockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (\n !document.pointerLockElement ||\n typeof document.exitPointerLock !== \"function\"\n ) {\n return false;\n }\n\n document.exitPointerLock();\n return true;\n }\n\n isMousePointerLocked(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).isMousePointerLocked();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n return document.pointerLockElement === this.renderer.domElement;\n }\n\n getSystem<T extends EcsSystem>(system: T): T {\n const resolvedSystem = this.systems.find((candidate) => {\n return (\n candidate === system || candidate.constructor === system.constructor\n );\n });\n\n if (!resolvedSystem) {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n throw new Error(\n `System '${systemName}' is not registered in this world.`,\n );\n }\n\n return resolvedSystem as T;\n }\n\n hasSystem<T extends EcsSystem>(system: T): boolean {\n return (\n this.systems.includes(system) ||\n this.systems.some(\n (candidate) => candidate.constructor === system.constructor,\n )\n );\n }\n\n addSystem(system: EcsSystem): void {\n this.systems.push(system);\n }\n\n addSystems(systems: EcsSystem[]): void {\n for (const system of systems) {\n this.addSystem(system);\n }\n }\n\n setup({ systems, isEditor }: { systems: EcsSystem[]; isEditor?: boolean }): {\n objectManagementSystem: ObjectManagementSystem;\n transformSyncSystem: TransformSyncSystem;\n renderSystem: RenderSystem;\n } {\n const objectManagementSystem = new ObjectManagementSystem(\n this.scene,\n this.camera,\n isEditor ?? false,\n );\n const meshGeometrySystem = new MeshGeometrySystem();\n const instancedMeshSystem = new InstancedMeshSystem();\n const environmentSyncSystem = this.featureFlags.supportSkybox\n ? new EnvironmentSyncSystem(this.scene)\n : null;\n const postprocessingSyncSystem = this.featureFlags.supportPostprocessing\n ? new PostprocessingSyncSystem(this.renderer, this.scene, this.camera)\n : null;\n const lightSyncSystem = new LightSyncSystem();\n const materialSyncSystem = new MaterialSyncSystem();\n const physicsSyncSystem = new PhysicsSyncSystem({\n isEditor: isEditor ?? false,\n });\n const animationSystem = new AnimationSystem();\n const audioSystem = new AudioSystem({ isEditor: isEditor ?? false });\n const videoSystem = new VideoSystem({ isEditor: isEditor ?? false });\n const cameraSyncSystem = new CameraSyncSystem();\n const transformSyncSystem = new TransformSyncSystem();\n const objectVisibilitySystem = new ObjectVisibilitySystem();\n const renderSystem = new RenderSystem(\n this.renderer,\n this.scene,\n this.camera,\n );\n\n registerDefaultFactories(objectManagementSystem);\n\n this.inputSystem = null;\n\n const coreSystems: EcsSystem[] = [\n objectManagementSystem,\n meshGeometrySystem,\n instancedMeshSystem,\n ];\n\n if (environmentSyncSystem) {\n coreSystems.push(environmentSyncSystem);\n }\n\n if (postprocessingSyncSystem) {\n coreSystems.push(postprocessingSyncSystem);\n }\n\n this.addSystems([\n ...coreSystems,\n physicsSyncSystem,\n ...systems,\n objectVisibilitySystem,\n lightSyncSystem,\n materialSyncSystem,\n animationSystem,\n audioSystem,\n videoSystem,\n cameraSyncSystem,\n transformSyncSystem,\n renderSystem,\n ]);\n\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n }\n\n this.isEditor = isEditor ?? false;\n\n this.objectManagementSystem = objectManagementSystem;\n this.environmentSyncSystem = environmentSyncSystem;\n this.postprocessingSyncSystem = postprocessingSyncSystem;\n\n return {\n objectManagementSystem,\n transformSyncSystem,\n renderSystem,\n };\n }\n\n isEditorMode(): boolean {\n return this.isEditor;\n }\n\n /**\n * Pauses world simulation. While paused, `update()` skips all system ticks so\n * physics, animation, scripts, and rendering stop advancing. The last rendered\n * frame remains frozen on-screen.\n *\n * Call {@link resume} to continue.\n */\n pause(): void {\n this.paused = true;\n }\n\n /**\n * Resumes world simulation after a previous {@link pause} call.\n * Has no effect if the world is not paused.\n */\n resume(): void {\n this.paused = false;\n }\n\n /**\n * Returns `true` if the world is currently paused.\n *\n * @example\n * ```ts\n * if (this.world.isPaused()) {\n * this.world.resume();\n * }\n * ```\n */\n isPaused(): boolean {\n return this.paused;\n }\n\n getScene(): THREE.Scene {\n return this.scene;\n }\n\n getCamera(): THREE.PerspectiveCamera {\n return this.camera;\n }\n\n getRenderer(): THREE.WebGLRenderer {\n return this.renderer;\n }\n\n update(deltaTime: number): void {\n if (this.paused) return;\n for (const system of this.systems) {\n system.update(this, deltaTime);\n }\n }\n\n dispose(): void {\n for (const system of this.systems) {\n system.dispose?.(this);\n }\n\n this.selectionListeners.clear();\n this.storeListeners.clear();\n this.physicsWorld = null;\n this.systems = [];\n this.paused = false;\n }\n\n setSelectedEntity(entityId: EntityId | null): void {\n const state = this.getSelectionState();\n if (!state) {\n return;\n }\n\n const nextEntityId =\n entityId !== null && this.entities.has(entityId) ? entityId : null;\n\n if (state.selectedEntityId === nextEntityId) {\n return;\n }\n\n state.selectedEntityId = nextEntityId;\n\n for (const listener of this.selectionListeners) {\n listener(nextEntityId);\n }\n\n this.emitStoreChanged();\n }\n\n getSelectedEntity(): EntityId | null {\n return this.getSelectionState()?.selectedEntityId ?? null;\n }\n\n private getEntityComponents(entityId: EntityId): Component[] {\n const components: Component[] = [];\n\n for (const store of this.components.values()) {\n const component = store.get(entityId);\n if (component) {\n components.push(component);\n }\n }\n\n return components;\n }\n\n private getEntityName(entityId: EntityId): string {\n const nameComponent = this.getComponent(entityId, Name);\n const name = nameComponent?.value?.trim();\n\n if (name) {\n return name;\n }\n\n return `Entity ${entityId}`;\n }\n\n private getEntityType(entityId: EntityId): string {\n const typeComponent = this.getComponent(entityId, EntityType);\n const type = typeComponent?.value?.trim();\n\n if (type) {\n return type;\n }\n\n return `EntityType ${entityId}`;\n }\n\n private getObject3d(entityId: EntityId): THREE.Object3D | null {\n const object3DRefComponent = this.getComponent(entityId, Object3DRef);\n const object = object3DRefComponent?.object;\n\n if (object) {\n return object;\n }\n\n return null;\n }\n\n private toEntityView(entityId: EntityId): WorldEntityView {\n return {\n entityId,\n name: this.getEntityName(entityId),\n object: this.getObject3d(entityId),\n type: this.getEntityType(entityId),\n components: this.getEntityComponents(entityId),\n };\n }\n\n getEntitiesByComponent(component: Component): WorldEntityView[] {\n const componentType = component.constructor as ComponentClass<AnyComponent>;\n const entityStore = this.components.get(componentType);\n\n if (!entityStore) {\n return [];\n }\n\n return [...entityStore.keys()]\n .filter((entityId) => this.entities.has(entityId))\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n getEntitiesByName(name: string): WorldEntityView[] {\n const searchName = name.trim();\n if (!searchName) {\n return [];\n }\n\n return this.getAllEntities().filter((entity) => entity.name === searchName);\n }\n\n getEntityByName(name: string): WorldEntityView | null {\n const [entity] = this.getEntitiesByName(name);\n return entity ?? null;\n }\n\n getEntityById(entityId: number): WorldEntityView | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n return this.toEntityView(entityId);\n }\n\n getObjectManagementSystem(): ObjectManagementSystem {\n if (this.objectManagementSystem) return this.objectManagementSystem;\n\n const objectManagementSystem = this.systems.find(\n (system) => system.constructor.name === \"ObjectManagementSystem\",\n );\n\n this.objectManagementSystem = objectManagementSystem as ObjectManagementSystem;\n\n return this.objectManagementSystem;\n }\n\n /**\n * Returns the singleton {@link Environment} component for the scene, or\n * `undefined` if no environment entity exists yet.\n *\n * Mutate `component.values` directly to change skybox, fog, or gravity at\n * runtime — `EnvironmentSyncSystem` picks up the changes next frame.\n *\n * @example\n * ```ts\n * const env = this.world.getEnvironmentComponent();\n * if (env) {\n * env.values.fog.type = \"exponential\";\n * env.values.fog.exponential.density = 0.01;\n * }\n * ```\n */\n getEnvironmentComponent(): Environment | undefined {\n const entityId = this.query(Environment)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Environment);\n }\n\n /**\n * Returns the singleton {@link Postprocessing} component for the scene, or\n * `undefined` if no postprocessing entity exists yet.\n *\n * Mutate `component.values` directly to enable/disable effects or tweak\n * parameters at runtime — `PostprocessingSyncSystem` picks up the changes\n * next frame.\n *\n * @example\n * ```ts\n * const pp = this.world.getPostprocessingComponent();\n * if (pp) {\n * pp.values.bloom.enabled = true;\n * pp.values.bloom.intensity = 2.0;\n * }\n * ```\n */\n getPostprocessingComponent(): Postprocessing | undefined {\n const entityId = this.query(Postprocessing)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Postprocessing);\n }\n\n /**\n * Cast a ray from `origin` along `direction` and return every intersected\n * entity-bound mesh, sorted by distance. Each result is a standard\n * `THREE.Intersection` augmented with the owning `entityId` (or `null` if\n * the hit object is not part of any tracked entity).\n *\n * @param origin - World-space origin of the ray (`THREE.Vector3` or\n * `{ x, y, z }`).\n * @param direction - World-space direction of the ray. Will be normalized\n * internally; magnitude is ignored.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycast(\n * { x: 0, y: 1, z: 0 },\n * { x: 0, y: 0, z: -1 },\n * );\n * if (hits[0]?.entityId !== null) {\n * console.log(\"hit entity\", hits[0].entityId, \"at\", hits[0].point);\n * }\n * ```\n */\n raycast(\n origin: Vec3,\n direction: Vec3,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const rayOrigin = new THREE.Vector3(origin.x, origin.y, origin.z);\n const rayDirection = new THREE.Vector3(\n direction.x,\n direction.y,\n direction.z,\n );\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n rayDirection.normalize();\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections.map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n );\n }\n\n /**\n * Cast a ray from an entity's world-space position along its forward\n * direction (the +Z axis of its world matrix). Returns intersected\n * entity-bound meshes sorted by distance, with the source entity itself\n * filtered out so the ray does not hit the caster.\n *\n * @param entityId - Entity to cast the ray from. Must have an `Object3DRef`.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycastFrom(this.entityId, 0, 50);\n * const closest = hits[0];\n * if (closest && closest.entityId !== null) {\n * console.log(\"looking at\", closest.entityId);\n * }\n * ```\n */\n raycastFrom(\n entityId: EntityId,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const sourceObject = this.getObject3d(entityId);\n if (!sourceObject) {\n return [];\n }\n\n const rayOrigin = new THREE.Vector3();\n const rayDirection = new THREE.Vector3();\n sourceObject.getWorldPosition(rayOrigin);\n sourceObject.getWorldDirection(rayDirection);\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections\n .map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n )\n .filter((result) => result.entityId !== entityId);\n }\n\n private buildObjectToEntityMap(): Map<THREE.Object3D, EntityId> {\n const map = new Map<THREE.Object3D, EntityId>();\n const store = this.components.get(\n Object3DRef as unknown as ComponentClass<AnyComponent>,\n );\n\n if (!store) {\n return map;\n }\n\n for (const [entityId, component] of store) {\n const object = (component as Object3DRef).object;\n if (object) {\n map.set(object, entityId);\n }\n }\n\n return map;\n }\n\n private resolveEntityForObject(\n object: THREE.Object3D,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): EntityId | null {\n let current: THREE.Object3D | null = object;\n while (current) {\n const entityId = objectToEntity.get(current);\n if (entityId !== undefined) {\n return entityId;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private toIntersectionResult(\n intersection: THREE.Intersection,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): IntersectionResult {\n return {\n entityId: this.resolveEntityForObject(\n intersection.object,\n objectToEntity,\n ),\n threeResult: intersection,\n };\n }\n\n getEntityScript<T = unknown>(entityId: number): T | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent || scriptComponent.scriptInstance === null) {\n return null;\n }\n\n return scriptComponent.scriptInstance as T;\n }\n\n getScripts<T = unknown>(className: string): T[] {\n const normalizedClassName = className.trim();\n if (!normalizedClassName) {\n return [];\n }\n\n const scriptEntityIds = this.query(ScriptComponent);\n const instances: T[] = [];\n\n for (const entityId of scriptEntityIds) {\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent) {\n continue;\n }\n\n const hasClassMatch = Array.isArray(scriptComponent.entries)\n ? scriptComponent.entries.some((entry) => {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n\n const classNameValue = (entry as { className?: unknown }).className;\n return (\n typeof classNameValue === \"string\" &&\n classNameValue === normalizedClassName\n );\n })\n : false;\n\n if (!hasClassMatch) {\n continue;\n }\n\n if (scriptComponent.scriptInstance !== null) {\n instances.push(scriptComponent.scriptInstance as T);\n }\n }\n\n return instances;\n }\n\n getScript<T = unknown>(className: string): T | null {\n const [instance] = this.getScripts<T>(className);\n return instance ?? null;\n }\n\n getAllEntities(): WorldEntityView[] {\n return [...this.entities]\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n onSelectionChanged(listener: SelectionListener): () => void {\n this.selectionListeners.add(listener);\n\n return () => {\n this.selectionListeners.delete(listener);\n };\n }\n\n subscribe(listener: StoreListener): () => void {\n this.storeListeners.add(listener);\n\n return () => {\n this.storeListeners.delete(listener);\n };\n }\n\n getDebugSnapshot(maxDepth = 3): unknown {\n const components = [...this.components.entries()]\n .map(([componentClass, store]) => {\n return {\n component: componentClass.name,\n entries: [...store.entries()]\n .map(([entityId, component]) => {\n return {\n entityId,\n value: normalizeDebugValue(component, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n })\n .sort((a, b) => a.entityId - b.entityId),\n };\n })\n .sort((a, b) => a.component.localeCompare(b.component));\n\n const systems = this.systems\n .map((system) => {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n return {\n system,\n systemName,\n };\n })\n .filter(({ systemName }) => !DEBUG_CHANGE_IGNORED_SYSTEMS.has(systemName))\n .map(({ system, systemName }) => {\n return {\n system: systemName,\n state: normalizeDebugValue(system, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n });\n\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities].sort((a, b) => a - b),\n nextEntityId: this.nextEntityId,\n components,\n systems,\n };\n }\n\n getDebugSignature(maxDepth = 3): string {\n return JSON.stringify(this.getDebugSnapshot(maxDepth));\n }\n\n createHistorySnapshot(): WorldHistorySnapshot {\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities],\n nextEntityId: this.nextEntityId,\n components: [...this.components.entries()].map(\n ([componentType, store]) => {\n return {\n componentType,\n entries: [...store.entries()].map(([entityId, component]) => {\n return {\n entityId,\n component: cloneHistoryValue(component),\n };\n }),\n };\n },\n ),\n };\n }\n\n applyHistorySnapshot(snapshot: WorldHistorySnapshot): void {\n const previousSelectedEntityId = this.getSelectedEntity();\n\n this.nextEntityId = snapshot.nextEntityId;\n this.entities = new Set(snapshot.entities);\n\n const nextComponents = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n for (const componentBlock of snapshot.components) {\n const store = new Map<EntityId, AnyComponent>();\n for (const entry of componentBlock.entries) {\n if (!this.entities.has(entry.entityId)) {\n continue;\n }\n\n store.set(entry.entityId, cloneHistoryValue(entry.component));\n }\n\n nextComponents.set(componentBlock.componentType, store);\n }\n\n this.components = nextComponents;\n\n const selectionState = this.getSelectionState();\n const nextSelectedEntityId =\n snapshot.selectedEntityId !== null &&\n this.entities.has(snapshot.selectedEntityId)\n ? snapshot.selectedEntityId\n : null;\n\n if (selectionState) {\n selectionState.selectedEntityId = nextSelectedEntityId;\n }\n\n const selectionChanged = previousSelectedEntityId !== nextSelectedEntityId;\n\n if (selectionChanged) {\n for (const listener of this.selectionListeners) {\n listener(nextSelectedEntityId);\n }\n }\n\n this.emitStoreChanged();\n }\n\n private emitStoreChanged(): void {\n for (const listener of this.storeListeners) {\n listener();\n }\n }\n}\n","import type { EcsWorldComponentSnapshot, HydrationPayload } from \"./types\";\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n return value as Record<string, unknown>;\n}\n\nexport function readString(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n return typeof record.value === \"string\" ? record.value : null;\n}\n\nexport function readTransform(value: unknown): HydrationPayload[\"transform\"] {\n const record = asRecord(value);\n if (!record) {\n return undefined;\n }\n\n const position = asRecord(record.position);\n const rotation = asRecord(record.rotation);\n const scale = asRecord(record.scale);\n\n return {\n position: position\n ? {\n x: typeof position.x === \"number\" ? position.x : undefined,\n y: typeof position.y === \"number\" ? position.y : undefined,\n z: typeof position.z === \"number\" ? position.z : undefined,\n }\n : undefined,\n rotation: rotation\n ? {\n x: typeof rotation.x === \"number\" ? rotation.x : undefined,\n y: typeof rotation.y === \"number\" ? rotation.y : undefined,\n z: typeof rotation.z === \"number\" ? rotation.z : undefined,\n }\n : undefined,\n scale: scale\n ? {\n x: typeof scale.x === \"number\" ? scale.x : undefined,\n y: typeof scale.y === \"number\" ? scale.y : undefined,\n z: typeof scale.z === \"number\" ? scale.z : undefined,\n }\n : undefined,\n };\n}\n\nexport function readByComponent(\n components: EcsWorldComponentSnapshot[],\n componentName: string,\n): Map<number, unknown> {\n const component = components.find((entry) => entry.component === componentName);\n const map = new Map<number, unknown>();\n\n if (!component) {\n return map;\n }\n\n for (const entry of component.entries) {\n map.set(entry.entityId, entry.value);\n }\n\n return map;\n}\n\nexport function readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n","import type { EcsWorldStateSnapshotLike, ComponentValueMaps } from \"./types\";\nimport { readByComponent } from \"./readers\";\n\nexport function buildComponentValueMaps(\n snapshot: EcsWorldStateSnapshotLike,\n): ComponentValueMaps {\n return {\n object3DRefValues: readByComponent(snapshot.components, \"Object3DRef\"),\n nameValues: readByComponent(snapshot.components, \"Name\"),\n transformValues: readByComponent(snapshot.components, \"TransformComponent\"),\n modelValues: readByComponent(snapshot.components, \"ModelComponent\"),\n imageValues: readByComponent(snapshot.components, \"ImageComponent\"),\n spriteValues: readByComponent(snapshot.components, \"SpriteComponent\"),\n videoValues: readByComponent(snapshot.components, \"VideoComponent\"),\n cameraValues: readByComponent(snapshot.components, \"CameraComponent\"),\n environmentValues: readByComponent(snapshot.components, \"Environment\"),\n postprocessingValues: readByComponent(snapshot.components, \"Postprocessing\"),\n audioValues: readByComponent(snapshot.components, \"AudioComponent\"),\n imageTargetValues: readByComponent(snapshot.components, \"ImageTarget\"),\n lightValues: readByComponent(snapshot.components, \"LightComponent\"),\n materialValues: readByComponent(snapshot.components, \"MaterialComponent\"),\n meshGeometryValues: readByComponent(snapshot.components, \"MeshGeometryComponent\"),\n selectableValues: readByComponent(snapshot.components, \"Selectable\"),\n physicsValues: readByComponent(snapshot.components, \"PhysicsComponent\"),\n animationValues: readByComponent(snapshot.components, \"AnimationComponent\"),\n imageTargetAnchorValues: readByComponent(snapshot.components, \"ImageTargetAnchor\"),\n scriptValues: readByComponent(snapshot.components, \"ScriptComponent\"),\n instancedMeshValues: readByComponent(snapshot.components, \"InstancedMeshComponent\"),\n instanceSlotValues: readByComponent(snapshot.components, \"InstanceSlotComponent\"),\n };\n}\n","import type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { EcsWorldStateSnapshotLike } from \"./types\";\nimport { asRecord, readByComponent } from \"./readers\";\n\nexport function applyParentLinks(\n snapshot: EcsWorldStateSnapshotLike,\n idMap: Map<number, number>,\n objectManagementSystem: ObjectManagementSystem,\n world: World,\n): void {\n const parentValues = readByComponent(snapshot.components, \"ParentId\");\n\n for (const [sourceEntityId, parentValue] of parentValues.entries()) {\n const targetEntityId = idMap.get(sourceEntityId);\n if (targetEntityId === undefined) {\n continue;\n }\n\n const parentRecord = asRecord(parentValue);\n const sourceParentId =\n parentRecord && typeof parentRecord.value === \"number\"\n ? parentRecord.value\n : null;\n\n if (sourceParentId === null) {\n objectManagementSystem.setParent(world, targetEntityId, null, {\n preserveWorldTransform: false,\n });\n continue;\n }\n\n const mappedParentId = idMap.get(sourceParentId);\n objectManagementSystem.setParent(world, targetEntityId, mappedParentId ?? null, {\n preserveWorldTransform: false,\n });\n }\n}\n","import { Object3DRef, ScriptComponent, InstancedMeshComponent } from \"../components\";\nimport { InstanceSlotComponent } from \"../components/InstanceSlotComponent\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { ComponentValueMaps } from \"./types\";\nimport { asRecord } from \"./readers\";\n\nfunction remapEntityRefsInScriptData(\n data: Record<string, unknown>,\n idMap: Map<number, number>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const v = value as Record<string, unknown>;\n if (v.type === \"entity\" && typeof v.value === \"number\") {\n result[key] = { ...v, value: idMap.get(v.value) ?? v.value };\n } else if (\n v.type === \"component\" &&\n v.value !== null &&\n typeof v.value === \"object\" &&\n !Array.isArray(v.value) &&\n typeof (v.value as Record<string, unknown>).entityId === \"number\"\n ) {\n const ref = v.value as Record<string, unknown>;\n result[key] = {\n ...v,\n value: { ...ref, entityId: idMap.get(ref.entityId as number) ?? ref.entityId },\n };\n } else {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function restorePostCreateComponents(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceEntityId: number,\n entityType: string | null,\n values: ComponentValueMaps,\n idMap: Map<number, number>,\n): void {\n const objectRef = world.getComponent(targetEntityId, Object3DRef)?.object ?? null;\n\n const sourceAudio = asRecord(values.audioValues.get(sourceEntityId));\n if (sourceAudio && entityType !== \"audio\") {\n const sourceOptions = asRecord(sourceAudio.options) ?? {};\n\n objectManagementSystem.createComponentNow(\n \"audio\",\n world,\n targetEntityId,\n typeof sourceAudio.path === \"string\" ? sourceAudio.path : \"\",\n sourceOptions,\n {\n object: objectRef,\n listener: objectManagementSystem.getOrCreateAudioListener(),\n isEditor: objectManagementSystem.isEditorMode(),\n },\n );\n }\n\n const sourceImageTarget = asRecord(values.imageTargetValues.get(sourceEntityId));\n if (sourceImageTarget && entityType !== \"imageTarget\") {\n objectManagementSystem.createComponentNow(\n \"imageTarget\",\n world,\n targetEntityId,\n {\n targets: Array.isArray(sourceImageTarget.targets)\n ? sourceImageTarget.targets\n : [],\n compiledTargetUrl:\n typeof sourceImageTarget.compiledTargetUrl === \"string\"\n ? sourceImageTarget.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof sourceImageTarget.compiledTargetDir === \"string\"\n ? sourceImageTarget.compiledTargetDir\n : undefined,\n },\n );\n }\n\n const sourceImageTargetAnchor = asRecord(values.imageTargetAnchorValues.get(sourceEntityId));\n if (sourceImageTargetAnchor) {\n // ImageTargetAnchor.targetId references ImageTarget.targets[].id, not an entity id.\n // Preserve the id directly; idMap remapping is only valid for entity references.\n const mappedTargetId =\n typeof sourceImageTargetAnchor.targetId === \"number\" &&\n Number.isFinite(sourceImageTargetAnchor.targetId)\n ? sourceImageTargetAnchor.targetId\n : null;\n\n objectManagementSystem.createComponentNow(\"imageTargetAnchor\", world, targetEntityId, {\n targetId: mappedTargetId,\n targetUrl:\n typeof sourceImageTargetAnchor.targetUrl === \"string\"\n ? sourceImageTargetAnchor.targetUrl\n : undefined,\n });\n }\n\n const sourceScript = asRecord(values.scriptValues.get(sourceEntityId));\n if (sourceScript) {\n const entries = Array.isArray(sourceScript.entries)\n ? sourceScript.entries\n .map((entry) => asRecord(entry))\n .filter((entry): entry is Record<string, unknown> => Boolean(entry))\n .map((entry) => {\n const runtimeState: \"idle\" | \"loading\" | \"ready\" | \"error\" | undefined =\n entry.runtimeState === \"idle\" ||\n entry.runtimeState === \"loading\" ||\n entry.runtimeState === \"ready\" ||\n entry.runtimeState === \"error\"\n ? entry.runtimeState\n : undefined;\n\n return {\n entityId: targetEntityId,\n className: typeof entry.className === \"string\" ? entry.className : \"\",\n scriptUrl: typeof entry.scriptUrl === \"string\" ? entry.scriptUrl : \"\",\n enabled: typeof entry.enabled === \"boolean\" ? entry.enabled : true,\n data:\n entry.data &&\n typeof entry.data === \"object\" &&\n !Array.isArray(entry.data)\n ? remapEntityRefsInScriptData(entry.data as Record<string, unknown>, idMap)\n : {},\n runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\"\n ? entry.runtimeMessage\n : undefined,\n };\n })\n .filter((entry) => entry.className || entry.scriptUrl)\n : [];\n\n if (!entries.length) {\n return;\n }\n\n world.addComponent(\n targetEntityId,\n new ScriptComponent(entries),\n );\n }\n\n // Remap InstancedMeshComponent.instanceEntityIds from snapshot IDs → live IDs.\n {\n const imComponent = world.getComponent(targetEntityId, InstancedMeshComponent);\n if (imComponent && imComponent.instanceEntityIds.length > 0) {\n imComponent.instanceEntityIds = imComponent.instanceEntityIds.map(\n (oldId) => idMap.get(oldId) ?? oldId,\n );\n }\n }\n\n // Remap InstanceSlotComponent.groupEntityId from snapshot ID → live ID.\n {\n const slotComponent = world.getComponent(targetEntityId, InstanceSlotComponent);\n if (slotComponent && slotComponent.groupEntityId !== -1) {\n slotComponent.groupEntityId =\n idMap.get(slotComponent.groupEntityId) ?? slotComponent.groupEntityId;\n }\n }\n}\n","import {\n AnimationComponent,\n type AnimationComponentOptions,\n} from \"../components\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport { asRecord, readBoolean, readNumber } from \"./readers\";\n\nfunction readAnimationClipName(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n if (typeof record.name === \"string\") {\n return record.name;\n }\n\n return null;\n}\n\nfunction readAnimationStates(value: unknown): NonNullable<\n AnimationComponentOptions[\"states\"]\n> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const states: NonNullable<AnimationComponentOptions[\"states\"]> = [];\n\n for (const entry of value) {\n const state = asRecord(entry);\n if (!state) {\n continue;\n }\n\n const name = typeof state.name === \"string\" ? state.name : null;\n const clip = readAnimationClipName(state.clip);\n if (!name || !clip) {\n continue;\n }\n\n states.push({\n name,\n clip,\n clipId: typeof state.clipId === \"string\" ? state.clipId : undefined,\n loop: typeof state.loop === \"boolean\" ? state.loop : false,\n });\n }\n\n return states;\n}\n\nfunction readAnimationClipSources(\n value: unknown,\n): NonNullable<AnimationComponentOptions[\"externalClipSources\"]> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const seen = new Set<string>();\n const sources: string[] = [];\n for (const entry of value) {\n if (typeof entry !== \"string\") {\n continue;\n }\n\n const trimmed = entry.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n sources.push(trimmed);\n }\n\n return sources;\n}\n\nfunction toAnimationOptions(\n sourceAnimation: Record<string, unknown>,\n): AnimationComponentOptions {\n const paused = readBoolean(sourceAnimation.paused);\n const reverse = readBoolean(sourceAnimation.reverse);\n const timeScale = readNumber(sourceAnimation.timeScale);\n const crossFadeDuration = readNumber(sourceAnimation.crossFadeDuration);\n const states = readAnimationStates(sourceAnimation.states);\n const externalClipSources = readAnimationClipSources(\n sourceAnimation.externalClipSources,\n );\n const activeStateName =\n typeof sourceAnimation.activeStateName === \"string\"\n ? sourceAnimation.activeStateName\n : typeof sourceAnimation.activeState === \"string\"\n ? sourceAnimation.activeState\n : typeof (sourceAnimation.active as { name?: unknown } | undefined)?.name ===\n \"string\"\n ? ((sourceAnimation.active as { name: string }).name ?? null)\n : null;\n\n return {\n paused,\n reverse,\n timeScale,\n crossFadeDuration,\n states,\n externalClipSources,\n activeState: activeStateName,\n };\n}\n\nexport function restoreAnimationComponent(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceAnimation: Record<string, unknown>,\n): void {\n const options = toAnimationOptions(sourceAnimation);\n let animation = world.getComponent(targetEntityId, AnimationComponent);\n\n if (!animation) {\n objectManagementSystem.createComponentNow(\n \"animation\",\n world,\n targetEntityId,\n options,\n );\n animation = world.getComponent(targetEntityId, AnimationComponent);\n }\n\n if (!animation) {\n return;\n }\n\n const availableClips = Array.isArray(sourceAnimation.availableClips)\n ? sourceAnimation.availableClips.filter(\n (clip): clip is string => typeof clip === \"string\" && clip.length > 0,\n )\n : [];\n if (availableClips.length > 0) {\n animation.availableClips = [...availableClips];\n }\n\n if (Array.isArray(options.externalClipSources)) {\n animation.setExternalClipSources(options.externalClipSources);\n }\n\n const states = options.states ?? [];\n const hasClips = Array.isArray(animation.clips) && animation.clips.length > 0;\n if (!hasClips) {\n (\n animation as AnimationComponent & {\n __pendingHydratedOptions?: AnimationComponentOptions;\n }\n ).__pendingHydratedOptions = options;\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.paused === \"boolean\") {\n animation.paused = options.paused;\n }\n\n return;\n }\n\n if (states.length > 0) {\n animation.setStates(states);\n }\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.setActiveState(options.activeState, !options.paused);\n }\n\n if (typeof options.paused === \"boolean\") {\n if (options.paused) {\n animation.pauseState();\n } else if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.playState(options.activeState);\n }\n }\n}\n","import {\n AudioComponent,\n CameraComponent,\n Environment,\n type EnvironmentState,\n ImageComponent,\n ImageTarget,\n InstancedMeshComponent,\n LightComponent,\n MaterialComponent,\n MeshGeometryComponent,\n ModelComponent,\n Name,\n Object3DRef,\n PhysicsComponent,\n Postprocessing,\n Selectable,\n SpriteComponent,\n TransformComponent,\n VideoComponent,\n} from \"../components\";\nimport { InstanceSlotComponent } from \"../components/InstanceSlotComponent\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport { restoreAnimationComponent } from \"./animation\";\nimport type { ComponentValueMaps } from \"./types\";\nimport { asRecord, readBoolean, readNumber, readString, readTransform } from \"./readers\";\n\nfunction readEnvironmentState(value: unknown): Partial<EnvironmentState> | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const nestedValues = asRecord(record.values);\n if (nestedValues) {\n return nestedValues as Partial<EnvironmentState>;\n }\n\n return record as Partial<EnvironmentState>;\n}\n\nfunction readPostprocessingState(value: unknown): Record<string, unknown> | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const nestedValues = asRecord(record.values);\n if (nestedValues) {\n return nestedValues;\n }\n\n return record;\n}\n\nexport function restoreComponentState(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceEntityId: number,\n entityType: string | null,\n values: ComponentValueMaps,\n): void {\n const sourceName = readString(values.nameValues.get(sourceEntityId));\n if (sourceName !== null) {\n const nameComponent = world.getComponent(targetEntityId, Name);\n if (nameComponent) {\n nameComponent.value = sourceName;\n }\n }\n\n const sourceObject3DRef = asRecord(values.object3DRefValues.get(sourceEntityId));\n if (sourceObject3DRef) {\n const object3DRefComponent = world.getComponent(targetEntityId, Object3DRef);\n const visibility = readBoolean(sourceObject3DRef.visibility);\n if (object3DRefComponent && typeof visibility === \"boolean\") {\n object3DRefComponent.visibility = visibility;\n }\n }\n\n const sourceTransform = readTransform(values.transformValues.get(sourceEntityId));\n if (sourceTransform) {\n const transformComponent = world.getComponent(targetEntityId, TransformComponent);\n if (transformComponent) {\n if (typeof sourceTransform.position?.x === \"number\") {\n transformComponent.position.x = sourceTransform.position.x;\n }\n if (typeof sourceTransform.position?.y === \"number\") {\n transformComponent.position.y = sourceTransform.position.y;\n }\n if (typeof sourceTransform.position?.z === \"number\") {\n transformComponent.position.z = sourceTransform.position.z;\n }\n\n if (typeof sourceTransform.rotation?.x === \"number\") {\n transformComponent.rotation.x = sourceTransform.rotation.x;\n }\n if (typeof sourceTransform.rotation?.y === \"number\") {\n transformComponent.rotation.y = sourceTransform.rotation.y;\n }\n if (typeof sourceTransform.rotation?.z === \"number\") {\n transformComponent.rotation.z = sourceTransform.rotation.z;\n }\n\n if (typeof sourceTransform.scale?.x === \"number\") {\n transformComponent.scale.x = sourceTransform.scale.x;\n }\n if (typeof sourceTransform.scale?.y === \"number\") {\n transformComponent.scale.y = sourceTransform.scale.y;\n }\n if (typeof sourceTransform.scale?.z === \"number\") {\n transformComponent.scale.z = sourceTransform.scale.z;\n }\n }\n }\n\n const sourceModel = asRecord(values.modelValues.get(sourceEntityId));\n if (sourceModel) {\n const modelComponent = world.getComponent(targetEntityId, ModelComponent);\n if (modelComponent && typeof sourceModel.path === \"string\") {\n modelComponent.path = sourceModel.path;\n }\n }\n\n const sourceImage = asRecord(values.imageValues.get(sourceEntityId));\n if (sourceImage) {\n const imageComponent = world.getComponent(targetEntityId, ImageComponent);\n if (imageComponent) {\n if (typeof sourceImage.path === \"string\") {\n imageComponent.path = sourceImage.path;\n }\n\n const width = readNumber(sourceImage.width);\n if (typeof width === \"number\") {\n imageComponent.width = width;\n }\n\n const height = readNumber(sourceImage.height);\n if (typeof height === \"number\") {\n imageComponent.height = height;\n }\n }\n }\n\n const sourceSprite = asRecord(values.spriteValues.get(sourceEntityId));\n if (sourceSprite) {\n const spriteComponent = world.getComponent(targetEntityId, SpriteComponent);\n if (spriteComponent) {\n if (typeof sourceSprite.path === \"string\") {\n spriteComponent.path = sourceSprite.path;\n }\n\n const width = readNumber(sourceSprite.width);\n if (typeof width === \"number\") {\n spriteComponent.width = width;\n }\n\n const height = readNumber(sourceSprite.height);\n if (typeof height === \"number\") {\n spriteComponent.height = height;\n }\n }\n }\n\n const sourceVideo = asRecord(values.videoValues.get(sourceEntityId));\n if (sourceVideo) {\n const videoComponent = world.getComponent(targetEntityId, VideoComponent);\n if (videoComponent) {\n if (typeof sourceVideo.path === \"string\") {\n videoComponent.path = sourceVideo.path;\n }\n\n const videoOptions = asRecord(sourceVideo.options);\n if (videoOptions) {\n videoComponent.options = {\n ...videoComponent.options,\n ...videoOptions,\n } as typeof videoComponent.options;\n }\n }\n }\n\n const sourceAudio = asRecord(values.audioValues.get(sourceEntityId));\n if (sourceAudio && entityType === \"audio\") {\n const audioComponent = world.getComponent(targetEntityId, AudioComponent);\n if (audioComponent) {\n if (typeof sourceAudio.path === \"string\") {\n audioComponent.path = sourceAudio.path;\n }\n\n const audioOptions = asRecord(sourceAudio.options);\n if (audioOptions) {\n audioComponent.options = {\n ...audioComponent.options,\n ...audioOptions,\n } as typeof audioComponent.options;\n }\n }\n }\n\n const sourceCamera = asRecord(values.cameraValues.get(sourceEntityId));\n if (sourceCamera) {\n const cameraComponent = world.getComponent(targetEntityId, CameraComponent);\n if (cameraComponent) {\n if (\n sourceCamera.projection === \"orthographic\" ||\n sourceCamera.projection === \"perspective\"\n ) {\n cameraComponent.projection = sourceCamera.projection;\n }\n\n if (\n sourceCamera.type === \"3d\" ||\n sourceCamera.type === \"ar\"\n ) {\n cameraComponent.type = sourceCamera.type;\n }\n\n if (typeof sourceCamera.isDefault === \"boolean\") {\n cameraComponent.isDefault = sourceCamera.isDefault;\n }\n\n const fov = readNumber(sourceCamera.fov);\n if (typeof fov === \"number\") {\n cameraComponent.fov = fov;\n }\n\n const near = readNumber(sourceCamera.near);\n if (typeof near === \"number\") {\n cameraComponent.near = near;\n }\n\n const far = readNumber(sourceCamera.far);\n if (typeof far === \"number\") {\n cameraComponent.far = far;\n }\n\n const left = readNumber(sourceCamera.left);\n if (typeof left === \"number\") {\n cameraComponent.left = left;\n }\n\n const right = readNumber(sourceCamera.right);\n if (typeof right === \"number\") {\n cameraComponent.right = right;\n }\n\n const top = readNumber(sourceCamera.top);\n if (typeof top === \"number\") {\n cameraComponent.top = top;\n }\n\n const bottom = readNumber(sourceCamera.bottom);\n if (typeof bottom === \"number\") {\n cameraComponent.bottom = bottom;\n }\n\n const zoom = readNumber(sourceCamera.zoom);\n if (typeof zoom === \"number\") {\n cameraComponent.zoom = zoom;\n }\n }\n }\n\n const sourceEnvironment = readEnvironmentState(\n values.environmentValues.get(sourceEntityId),\n );\n if (sourceEnvironment) {\n let environmentComponent = world.getComponent(targetEntityId, Environment);\n if (!environmentComponent) {\n objectManagementSystem.createComponentNow(\n \"environment\",\n world,\n targetEntityId,\n sourceEnvironment,\n );\n environmentComponent = world.getComponent(targetEntityId, Environment);\n }\n\n if (environmentComponent) {\n environmentComponent.values = new Environment({\n ...environmentComponent.values,\n ...sourceEnvironment,\n }).values;\n }\n }\n\n const sourcePostprocessing = readPostprocessingState(\n values.postprocessingValues.get(sourceEntityId),\n );\n if (sourcePostprocessing) {\n let postprocessingComponent = world.getComponent(targetEntityId, Postprocessing);\n if (!postprocessingComponent) {\n objectManagementSystem.createComponentNow(\n \"postprocessing\",\n world,\n targetEntityId,\n sourcePostprocessing,\n );\n postprocessingComponent = world.getComponent(targetEntityId, Postprocessing);\n }\n\n if (postprocessingComponent) {\n postprocessingComponent.values = new Postprocessing({\n ...postprocessingComponent.values,\n ...sourcePostprocessing,\n }).values;\n }\n }\n\n const sourceImageTarget = asRecord(values.imageTargetValues.get(sourceEntityId));\n if (sourceImageTarget && entityType === \"imageTarget\") {\n const imageTargetComponent = world.getComponent(targetEntityId, ImageTarget);\n if (imageTargetComponent) {\n imageTargetComponent.targets = Array.isArray(sourceImageTarget.targets)\n ? sourceImageTarget.targets\n : [];\n\n imageTargetComponent.compiledTargetUrl =\n typeof sourceImageTarget.compiledTargetUrl === \"string\"\n ? sourceImageTarget.compiledTargetUrl\n : undefined;\n\n imageTargetComponent.compiledTargetDir =\n typeof sourceImageTarget.compiledTargetDir === \"string\"\n ? sourceImageTarget.compiledTargetDir\n : undefined;\n }\n }\n\n const sourceLight = asRecord(values.lightValues.get(sourceEntityId));\n if (sourceLight) {\n const lightComponent = world.getComponent(targetEntityId, LightComponent);\n const sourceValues = asRecord(sourceLight.values);\n\n if (lightComponent && sourceValues) {\n lightComponent.values = {\n ...lightComponent.values,\n ...sourceValues,\n } as typeof lightComponent.values;\n }\n }\n\n const sourceMaterial = asRecord(values.materialValues.get(sourceEntityId));\n if (sourceMaterial) {\n const materialComponent = world.getComponent(targetEntityId, MaterialComponent);\n const sourceValues = sourceMaterial.values;\n\n if (materialComponent && Array.isArray(sourceValues)) {\n materialComponent.values = sourceValues as typeof materialComponent.values;\n }\n }\n\n const sourceMeshGeometry = asRecord(values.meshGeometryValues.get(sourceEntityId));\n if (sourceMeshGeometry) {\n const meshGeometryComponent = world.getComponent(\n targetEntityId,\n MeshGeometryComponent,\n );\n\n if (meshGeometryComponent) {\n const parameters = asRecord(sourceMeshGeometry.parameters);\n if (parameters) {\n meshGeometryComponent.parameters =\n parameters as typeof meshGeometryComponent.parameters;\n }\n\n if (typeof sourceMeshGeometry.modelName === \"string\") {\n meshGeometryComponent.modelName = sourceMeshGeometry.modelName;\n }\n\n if (typeof sourceMeshGeometry.castShadow === \"boolean\") {\n meshGeometryComponent.castShadow = sourceMeshGeometry.castShadow;\n }\n\n if (typeof sourceMeshGeometry.receiveShadow === \"boolean\") {\n meshGeometryComponent.receiveShadow = sourceMeshGeometry.receiveShadow;\n }\n }\n }\n\n const sourceSelectable = asRecord(values.selectableValues.get(sourceEntityId));\n if (sourceSelectable) {\n const enabled = readBoolean(sourceSelectable.enabled);\n let selectable = world.getComponent(targetEntityId, Selectable);\n\n if (!selectable) {\n objectManagementSystem.createComponentNow(\n \"selectable\",\n world,\n targetEntityId,\n enabled ?? true,\n );\n selectable = world.getComponent(targetEntityId, Selectable);\n }\n\n if (selectable && typeof enabled === \"boolean\") {\n selectable.enabled = enabled;\n }\n }\n\n const sourcePhysics = asRecord(values.physicsValues.get(sourceEntityId));\n if (sourcePhysics) {\n // Unwrap wrapped component snapshot shape: { values: { rigidbody, collider }, rigidBody, collider }\n // Fall back to raw shape for backward compatibility with any plain-shape saves.\n const physicsValues = asRecord(sourcePhysics.values) ?? sourcePhysics;\n\n let physics = world.getComponent(targetEntityId, PhysicsComponent);\n if (!physics) {\n objectManagementSystem.createComponentNow(\n \"physics\",\n world,\n targetEntityId,\n physicsValues,\n );\n physics = world.getComponent(targetEntityId, PhysicsComponent);\n }\n\n if (physics) {\n physics.setValues({\n rigidbody: asRecord(physicsValues.rigidbody) as never ?? {},\n collider: asRecord(physicsValues.collider) as never ?? {},\n });\n }\n }\n\n const sourceAnimation = asRecord(values.animationValues.get(sourceEntityId));\n if (sourceAnimation) {\n restoreAnimationComponent(\n world,\n objectManagementSystem,\n targetEntityId,\n sourceAnimation,\n );\n }\n\n const sourceInstancedMesh = asRecord(values.instancedMeshValues.get(sourceEntityId));\n if (sourceInstancedMesh) {\n const imComponent = world.getComponent(targetEntityId, InstancedMeshComponent);\n if (imComponent) {\n if (typeof sourceInstancedMesh.meshKind === \"string\") {\n imComponent.meshKind = sourceInstancedMesh.meshKind as typeof imComponent.meshKind;\n }\n\n if (typeof sourceInstancedMesh.modelPath === \"string\") {\n imComponent.modelPath = sourceInstancedMesh.modelPath;\n }\n\n const parameters = asRecord(sourceInstancedMesh.meshParameters);\n if (parameters) {\n imComponent.meshParameters = parameters as typeof imComponent.meshParameters;\n }\n\n if (typeof sourceInstancedMesh.castShadow === \"boolean\") {\n imComponent.castShadow = sourceInstancedMesh.castShadow;\n }\n\n if (typeof sourceInstancedMesh.receiveShadow === \"boolean\") {\n imComponent.receiveShadow = sourceInstancedMesh.receiveShadow;\n }\n\n // New format: restore instanceEntityIds (IDs are old snapshot IDs —\n // remapping to live IDs is deferred to restorePostCreateComponents).\n if (Array.isArray(sourceInstancedMesh.instanceEntityIds)) {\n imComponent.instanceEntityIds =\n sourceInstancedMesh.instanceEntityIds as number[];\n }\n // Old format (migration): instanceEntityIds were already created by the\n // factory from the legacy instances[] array — nothing more to do here.\n\n // Force geometry rebuild on next system update by clearing the runtime ref.\n imComponent.instancedMesh = null;\n }\n }\n\n // InstanceSlotComponent: slotIndex is restored here; groupEntityId remapping\n // is deferred to restorePostCreateComponents (needs idMap).\n const sourceInstanceSlot = asRecord(values.instanceSlotValues.get(sourceEntityId));\n if (sourceInstanceSlot) {\n const slotComponent = world.getComponent(targetEntityId, InstanceSlotComponent);\n if (slotComponent) {\n if (typeof sourceInstanceSlot.slotIndex === \"number\") {\n slotComponent.slotIndex = sourceInstanceSlot.slotIndex;\n }\n // groupEntityId is set from the factory payload and will be remapped in postCreate.\n }\n }\n}\n","import type { EcsEntityKind } from \"../types\";\n\nexport type HydrationPayload = {\n name?: string;\n transform?: {\n position?: { x?: number; y?: number; z?: number };\n rotation?: { x?: number; y?: number; z?: number };\n scale?: { x?: number; y?: number; z?: number };\n };\n path?: string;\n options?: Record<string, unknown>;\n useWorldCamera?: boolean;\n};\n\nexport type ComponentValueMaps = {\n object3DRefValues: Map<number, unknown>;\n nameValues: Map<number, unknown>;\n transformValues: Map<number, unknown>;\n modelValues: Map<number, unknown>;\n imageValues: Map<number, unknown>;\n spriteValues: Map<number, unknown>;\n videoValues: Map<number, unknown>;\n cameraValues: Map<number, unknown>;\n environmentValues: Map<number, unknown>;\n postprocessingValues: Map<number, unknown>;\n audioValues: Map<number, unknown>;\n imageTargetValues: Map<number, unknown>;\n lightValues: Map<number, unknown>;\n materialValues: Map<number, unknown>;\n meshGeometryValues: Map<number, unknown>;\n selectableValues: Map<number, unknown>;\n physicsValues: Map<number, unknown>;\n animationValues: Map<number, unknown>;\n imageTargetAnchorValues: Map<number, unknown>;\n scriptValues: Map<number, unknown>;\n instancedMeshValues: Map<number, unknown>;\n instanceSlotValues: Map<number, unknown>;\n};\n\nexport type EcsWorldComponentSnapshot = {\n component: string;\n entries: Array<{\n entityId: number;\n value: unknown;\n }>;\n};\n\nexport type EcsWorldStateSnapshotLike = {\n selectedEntityId?: number | null;\n entities: number[];\n components: EcsWorldComponentSnapshot[];\n};\n\nexport type HydrateWorldFromSnapshotResult = {\n restoredCount: number;\n selectedEntityId: number | null;\n};\n\nexport const HYDRATABLE_ENTITY_KINDS = new Set<EcsEntityKind>([\n \"cube\",\n \"sphere\",\n \"plane\",\n \"capsule\",\n \"cylinder\",\n \"empty\",\n \"model\",\n \"image\",\n \"imageTarget\",\n \"sprite\",\n \"audio\",\n \"camera\",\n \"video\",\n \"ambientLight\",\n \"directionalLight\",\n \"pointLight\",\n \"spotLight\",\n \"areaLight\",\n \"instancedMesh\",\n \"instanceSlot\",\n]);\n","import { Object3DRef, TransformComponent } from \"../components\";\nimport {\n applyTransform,\n type ObjectManagementSystem,\n} from \"../systems/ObjectManagementSystem\";\nimport type { EcsEntityKind } from \"../types\";\nimport type { World } from \"../World\";\nimport { buildComponentValueMaps } from \"./componentValues\";\nimport { applyParentLinks } from \"./parentLinks\";\nimport { restorePostCreateComponents } from \"./postCreateComponents\";\nimport { restoreComponentState } from \"./restoreComponentState\";\nimport { asRecord, readByComponent, readString, readTransform } from \"./readers\";\nimport {\n HYDRATABLE_ENTITY_KINDS,\n type EcsWorldStateSnapshotLike,\n type HydrateWorldFromSnapshotResult,\n type HydrationPayload,\n} from \"./types\";\n\nexport type {\n EcsWorldComponentSnapshot,\n EcsWorldStateSnapshotLike,\n HydrateWorldFromSnapshotResult,\n} from \"./types\";\nexport { HYDRATABLE_ENTITY_KINDS } from \"./types\";\n\nfunction buildEntityCreationPayload(\n sourceEntityId: number,\n kind: EcsEntityKind,\n componentValues: ReturnType<typeof buildComponentValueMaps>,\n): HydrationPayload {\n const payload: HydrationPayload = {\n name: readString(componentValues.nameValues.get(sourceEntityId)) ?? undefined,\n transform: readTransform(componentValues.transformValues.get(sourceEntityId)),\n };\n\n if (kind === \"model\") {\n const model = asRecord(componentValues.modelValues.get(sourceEntityId));\n if (typeof model?.path === \"string\") {\n payload.path = model.path;\n }\n }\n\n if (kind === \"image\") {\n const image = asRecord(componentValues.imageValues.get(sourceEntityId));\n if (typeof image?.path === \"string\") {\n payload.path = image.path;\n }\n }\n\n if (kind === \"sprite\") {\n const sprite = asRecord(componentValues.spriteValues.get(sourceEntityId));\n if (typeof sprite?.path === \"string\") {\n payload.path = sprite.path;\n }\n }\n\n if (kind === \"video\") {\n const video = asRecord(componentValues.videoValues.get(sourceEntityId));\n if (typeof video?.path === \"string\") {\n payload.path = video.path;\n }\n const videoOptions = asRecord(video?.options);\n if (videoOptions) {\n payload.options = videoOptions;\n }\n }\n\n if (kind === \"audio\") {\n const audio = asRecord(componentValues.audioValues.get(sourceEntityId));\n if (typeof audio?.path === \"string\") {\n payload.path = audio.path;\n }\n const audioOptions = asRecord(audio?.options);\n if (audioOptions) {\n payload.options = audioOptions;\n }\n }\n\n if (kind === \"camera\") {\n const camera = asRecord(componentValues.cameraValues.get(sourceEntityId));\n if (camera) {\n const projection =\n camera.projection === \"orthographic\" || camera.projection === \"perspective\"\n ? camera.projection\n : undefined;\n const type =\n camera.type === \"3d\" || camera.type === \"ar\"\n ? camera.type\n : undefined;\n\n payload.options = {\n isDefault: typeof camera.isDefault === \"boolean\" ? camera.isDefault : undefined,\n projection,\n type,\n fov: typeof camera.fov === \"number\" ? camera.fov : undefined,\n near: typeof camera.near === \"number\" ? camera.near : undefined,\n far: typeof camera.far === \"number\" ? camera.far : undefined,\n left: typeof camera.left === \"number\" ? camera.left : undefined,\n right: typeof camera.right === \"number\" ? camera.right : undefined,\n top: typeof camera.top === \"number\" ? camera.top : undefined,\n bottom: typeof camera.bottom === \"number\" ? camera.bottom : undefined,\n zoom: typeof camera.zoom === \"number\" ? camera.zoom : undefined,\n };\n }\n }\n\n if (kind === \"imageTarget\") {\n const imageTarget = asRecord(componentValues.imageTargetValues.get(sourceEntityId));\n if (imageTarget) {\n payload.options = {\n targets: Array.isArray(imageTarget.targets) ? imageTarget.targets : [],\n compiledTargetUrl:\n typeof imageTarget.compiledTargetUrl === \"string\"\n ? imageTarget.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof imageTarget.compiledTargetDir === \"string\"\n ? imageTarget.compiledTargetDir\n : undefined,\n };\n }\n }\n\n if (kind === \"instancedMesh\") {\n const im = asRecord(componentValues.instancedMeshValues.get(sourceEntityId));\n if (im) {\n payload.options = {\n meshKind: typeof im.meshKind === \"string\" ? im.meshKind : \"cube\",\n modelPath: typeof im.modelPath === \"string\" ? im.modelPath : undefined,\n meshParameters: asRecord(im.meshParameters) ?? undefined,\n castShadow: typeof im.castShadow === \"boolean\" ? im.castShadow : false,\n receiveShadow: typeof im.receiveShadow === \"boolean\" ? im.receiveShadow : false,\n // New format: signal the factory to skip child entity creation.\n // Old format (instances[]): pass through for migration — factory will\n // create slot entities from the legacy InstanceTransform array.\n ...(Array.isArray(im.instanceEntityIds)\n ? { instanceEntityIds: im.instanceEntityIds }\n : Array.isArray(im.instances)\n ? { instances: im.instances }\n : {}),\n };\n }\n }\n\n if (kind === \"instanceSlot\") {\n const slot = asRecord(componentValues.instanceSlotValues.get(sourceEntityId));\n if (slot) {\n payload.options = {\n groupEntityId: typeof slot.groupEntityId === \"number\" ? slot.groupEntityId : -1,\n slotIndex: typeof slot.slotIndex === \"number\" ? slot.slotIndex : 0,\n };\n }\n }\n\n return payload;\n}\n\nfunction resolvePrimaryCameraSourceEntityId(\n snapshot: EcsWorldStateSnapshotLike,\n componentValues: ReturnType<typeof buildComponentValueMaps>,\n entityTypeValues: Map<number, unknown>,\n): number | null {\n let firstCameraSourceEntityId: number | null = null;\n\n for (const sourceEntityId of snapshot.entities) {\n const entityType = readString(entityTypeValues.get(sourceEntityId));\n if (entityType !== \"camera\") {\n continue;\n }\n\n if (firstCameraSourceEntityId === null) {\n firstCameraSourceEntityId = sourceEntityId;\n }\n\n const cameraValue = asRecord(componentValues.cameraValues.get(sourceEntityId));\n if (cameraValue?.isDefault === true) {\n return sourceEntityId;\n }\n }\n\n return firstCameraSourceEntityId;\n}\n\nfunction applyLocalTransformsAfterHierarchyRestore(world: World): void {\n const transformEntities = world.query(TransformComponent, Object3DRef);\n\n for (const entityId of transformEntities) {\n const transform = world.getComponent(entityId, TransformComponent);\n const object = world.getComponent(entityId, Object3DRef)?.object;\n if (!transform || !object) {\n continue;\n }\n\n // Parent links are already resolved, so applying transform now uses correct local space.\n applyTransform(object, transform);\n object.updateMatrixWorld(true);\n }\n}\n\nexport function hydrateWorldFromSnapshotDetailed(\n snapshot: EcsWorldStateSnapshotLike | null | undefined,\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n): HydrateWorldFromSnapshotResult {\n if (!snapshot || !snapshot.entities.length) {\n return {\n restoredCount: 0,\n selectedEntityId: null,\n };\n }\n\n const entityTypeValues = readByComponent(snapshot.components, \"EntityType\");\n const componentValues = buildComponentValueMaps(snapshot);\n const primaryCameraSourceEntityId = resolvePrimaryCameraSourceEntityId(\n snapshot,\n componentValues,\n entityTypeValues,\n );\n const idMap = new Map<number, number>();\n\n for (const sourceEntityId of snapshot.entities) {\n const entityTypeValue = entityTypeValues.get(sourceEntityId);\n const entityType = readString(entityTypeValue);\n if (!entityType || !HYDRATABLE_ENTITY_KINDS.has(entityType as EcsEntityKind)) {\n continue;\n }\n\n const kind = entityType as EcsEntityKind;\n const payload = buildEntityCreationPayload(sourceEntityId, kind, componentValues);\n\n if (kind === \"camera\" && sourceEntityId === primaryCameraSourceEntityId) {\n payload.useWorldCamera = true;\n\n const options = asRecord(payload.options);\n payload.options = {\n ...(options ?? {}),\n isDefault: true,\n };\n }\n\n const createdEntityId = objectManagementSystem.createNow(kind, world, payload);\n idMap.set(sourceEntityId, createdEntityId);\n }\n\n for (const sourceEntityId of snapshot.entities) {\n const targetEntityId = idMap.get(sourceEntityId);\n if (targetEntityId === undefined) {\n continue;\n }\n\n const entityType = readString(entityTypeValues.get(sourceEntityId));\n\n restoreComponentState(\n world,\n objectManagementSystem,\n targetEntityId,\n sourceEntityId,\n entityType,\n componentValues,\n );\n\n restorePostCreateComponents(\n world,\n objectManagementSystem,\n targetEntityId,\n sourceEntityId,\n entityType,\n componentValues,\n idMap,\n );\n }\n\n applyParentLinks(snapshot, idMap, objectManagementSystem, world);\n objectManagementSystem.reconcileSceneFromWorld(world);\n applyLocalTransformsAfterHierarchyRestore(world);\n\n const selectedEntityId =\n typeof snapshot.selectedEntityId === \"number\"\n ? (idMap.get(snapshot.selectedEntityId) ?? null)\n : null;\n\n return {\n restoredCount: idMap.size,\n selectedEntityId,\n };\n}\n\nexport function hydrateWorldFromSnapshot(\n snapshot: EcsWorldStateSnapshotLike | null | undefined,\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n): number {\n return hydrateWorldFromSnapshotDetailed(\n snapshot,\n world,\n objectManagementSystem,\n ).restoredCount;\n}\n"]}
1
+ {"version":3,"sources":["../core/World.ts","../core/hydration/readers.ts","../core/hydration/componentValues.ts","../core/hydration/parentLinks.ts","../core/hydration/postCreateComponents.ts","../core/hydration/animation.ts","../core/hydration/restoreComponentState.ts","../core/hydration/types.ts","../core/hydration/hydrateWorld.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import * as THREE from \"three\";\nimport type * as RAPIER from \"@dimforge/rapier3d-compat\";\nimport {\n cloneHistoryValue,\n DEBUG_CHANGE_IGNORED_SYSTEMS,\n normalizeDebugValue,\n type AnyComponent,\n type ComponentClass,\n type WorldHistorySnapshot,\n} from \"./worldSnapshotUtils\";\nimport type { Component } from \"./Component\";\nimport type { EcsSystem } from \"./System\";\nimport type { EntityId, IntersectionResult, SelectionListener, Vec3 } from \"./types\";\nimport { registerDefaultFactories } from \"./factories\";\nimport {\n Environment,\n EntityType,\n Name,\n Object3DRef,\n ParentId,\n Postprocessing,\n ScriptComponent,\n SelectionTransformState,\n} from \"./components\";\nimport {\n AnimationSystem,\n AudioSystem,\n VideoSystem,\n CameraSyncSystem,\n EnvironmentSyncSystem,\n PostprocessingSyncSystem,\n LightSyncSystem,\n MaterialSyncSystem,\n MeshGeometrySystem,\n InstancedMeshSystem,\n ObjectManagementSystem,\n ObjectVisibilitySystem,\n PhysicsSyncSystem,\n TransformSyncSystem,\n RenderSystem,\n InputSystem,\n type KeyboardKey,\n type MouseButton,\n} from \"./systems\";\n\ntype StoreListener = () => void;\nexport type WorldFeatureFlags = {\n supportSkybox?: boolean;\n supportPostprocessing?: boolean;\n};\n\ntype WorldEntityView = {\n name: string;\n entityId: number;\n object: THREE.Object3D | null;\n type: string;\n components: Component[];\n};\n\nexport class World {\n private nextEntityId = 1;\n private entities = new Set<EntityId>();\n private systems: EcsSystem[] = [];\n private selectionListeners = new Set<SelectionListener>();\n private storeListeners = new Set<StoreListener>();\n\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private readonly featureFlags: {\n supportSkybox: boolean;\n supportPostprocessing: boolean;\n };\n\n private components = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n private inputSystem: InputSystem | null = null;\n private objectManagementSystem: ObjectManagementSystem | null = null;\n private environmentSyncSystem: EnvironmentSyncSystem | null = null;\n private postprocessingSyncSystem: PostprocessingSyncSystem | null = null;\n private rapierModule: typeof RAPIER | null = null;\n private rapierModulePromise: Promise<typeof RAPIER> | null = null;\n private physicsWorld: RAPIER.World | null = null;\n\n private isEditor = false;\n private paused = false;\n\n constructor(options: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n renderer: THREE.WebGLRenderer;\n featureFlags?: WorldFeatureFlags;\n }) {\n this.scene = options.scene;\n this.camera = options.camera;\n this.renderer = options.renderer;\n this.featureFlags = {\n supportSkybox: options.featureFlags?.supportSkybox ?? true,\n supportPostprocessing:\n options.featureFlags?.supportPostprocessing ?? true,\n };\n\n // Ensure runtime previews render mesh and light shadow settings consistently.\n this.renderer.shadowMap.enabled = true;\n }\n\n createEntity(): EntityId {\n const entityId = this.nextEntityId;\n this.nextEntityId += 1;\n this.entities.add(entityId);\n this.emitStoreChanged();\n return entityId;\n }\n\n destroyEntity(entityId: EntityId): void {\n if (!this.entities.has(entityId)) {\n return;\n }\n\n this.entities.delete(entityId);\n\n for (const store of this.components.values()) {\n store.delete(entityId);\n }\n\n if (this.getSelectedEntity() === entityId) {\n this.setSelectedEntity(null);\n }\n\n this.emitStoreChanged();\n }\n\n private getSelectionState(): SelectionTransformState | undefined {\n const entityId = this.query(SelectionTransformState)[0];\n if (entityId === undefined) {\n return undefined;\n }\n\n return this.getComponent(entityId, SelectionTransformState);\n }\n\n hasEntity(entityId: EntityId): boolean {\n return this.entities.has(entityId);\n }\n\n getEntities(): EntityId[] {\n return [...this.entities];\n }\n\n getEntityCount(): number {\n return this.entities.size;\n }\n\n addComponent<T extends Component>(entityId: EntityId, component: T): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n this.emitStoreChanged();\n }\n\n addComponents<T extends Component>(\n entityId: EntityId,\n components: T[],\n ): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n for (const component of components) {\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n }\n\n this.emitStoreChanged();\n }\n\n removeComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): void {\n this.components.get(componentType)?.delete(entityId);\n this.emitStoreChanged();\n }\n\n getComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): T | undefined {\n return this.components.get(componentType)?.get(entityId) as T | undefined;\n }\n\n hasComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): boolean {\n return this.components.get(componentType)?.has(entityId) ?? false;\n }\n\n query(...componentTypes: ComponentClass<AnyComponent>[]): EntityId[] {\n return [...this.entities].filter((entityId) =>\n componentTypes.every((componentType) =>\n this.components.get(componentType)?.has(entityId),\n ),\n );\n }\n\n /**\n * Returns `true` if the entity is currently visible (its `Object3DRef.visibility`\n * is `true`), or if the entity has no `Object3DRef` component (entities without a\n * scene object are always considered active). Systems use this to skip per-entity\n * updates for hidden objects.\n */\n isEntityVisible(entityId: EntityId): boolean {\n const objectRef = this.getComponent(entityId, Object3DRef);\n return objectRef ? objectRef.visibility : true;\n }\n\n getInputSystem(): EcsSystem | null {\n if (this.inputSystem !== null) return this.inputSystem;\n\n const inputSystem = this.systems.find(\n (system) => system.constructor.name === \"InputSystem\",\n );\n\n this.inputSystem = inputSystem as InputSystem;\n\n return inputSystem ?? null;\n }\n\n getKeyDown(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyDown(key);\n }\n\n getKeyUp(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyUp(key);\n }\n\n getKey(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKey(key);\n }\n\n getMouse(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouse(button);\n }\n\n getMouseDown(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseDown(button);\n }\n\n getMouseUp(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseUp(button);\n }\n\n getScrollClick(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClick();\n }\n\n getScrollClickDown(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickDown();\n }\n\n getScrollClickUp(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickUp();\n }\n\n getScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getScrollDelta();\n }\n\n consumeScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeScrollDelta();\n }\n\n getMousePosition(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMousePosition();\n }\n\n getMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMouseDelta();\n }\n\n consumeMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeMouseDelta();\n }\n\n async getRapierModule(): Promise<typeof RAPIER> {\n if (this.rapierModule) {\n return this.rapierModule;\n }\n\n if (!this.rapierModulePromise) {\n this.rapierModulePromise = import(\"@dimforge/rapier3d-compat\").then(\n async (moduleValue) => {\n await moduleValue.init();\n this.rapierModule = moduleValue;\n return moduleValue;\n },\n );\n }\n\n return this.rapierModulePromise;\n }\n\n getPhysicsWorld(): RAPIER.World | null {\n return this.physicsWorld;\n }\n\n setPhysicsWorld(physicsWorld: RAPIER.World | null): void {\n this.physicsWorld = physicsWorld;\n }\n\n async createPhysicsWorld(options?: {\n gravity?: { x?: number; y?: number; z?: number };\n }): Promise<RAPIER.World | null> {\n if (this.physicsWorld) {\n return this.physicsWorld;\n }\n\n const RAPIER = await this.getRapierModule();\n const gravity = options?.gravity;\n const gravityVector = new RAPIER.Vector3(\n typeof gravity?.x === \"number\" ? gravity.x : 0,\n typeof gravity?.y === \"number\" ? gravity.y : -9.81,\n typeof gravity?.z === \"number\" ? gravity.z : 0,\n );\n\n this.physicsWorld = new RAPIER.World(gravityVector);\n return this.physicsWorld;\n }\n\n lockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).lockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (typeof this.renderer.domElement.requestPointerLock !== \"function\") {\n return false;\n }\n\n try {\n const result = this.renderer.domElement.requestPointerLock();\n // Modern browsers (including Safari) return a Promise that rejects\n // when the call happens outside a user gesture. Absorb the rejection\n // so it does not surface as an unhandled promise rejection.\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n return true;\n } catch {\n return false;\n }\n }\n\n unlockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n return (inputSystem as InputSystem).unlockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (\n !document.pointerLockElement ||\n typeof document.exitPointerLock !== \"function\"\n ) {\n return false;\n }\n\n document.exitPointerLock();\n return true;\n }\n\n isMousePointerLocked(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).isMousePointerLocked();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n return document.pointerLockElement === this.renderer.domElement;\n }\n\n getSystem<T extends EcsSystem>(system: T): T {\n const resolvedSystem = this.systems.find((candidate) => {\n return (\n candidate === system || candidate.constructor === system.constructor\n );\n });\n\n if (!resolvedSystem) {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n throw new Error(\n `System '${systemName}' is not registered in this world.`,\n );\n }\n\n return resolvedSystem as T;\n }\n\n hasSystem<T extends EcsSystem>(system: T): boolean {\n return (\n this.systems.includes(system) ||\n this.systems.some(\n (candidate) => candidate.constructor === system.constructor,\n )\n );\n }\n\n addSystem(system: EcsSystem): void {\n this.systems.push(system);\n }\n\n addSystems(systems: EcsSystem[]): void {\n for (const system of systems) {\n this.addSystem(system);\n }\n }\n\n setup({ systems, isEditor }: { systems: EcsSystem[]; isEditor?: boolean }): {\n objectManagementSystem: ObjectManagementSystem;\n transformSyncSystem: TransformSyncSystem;\n renderSystem: RenderSystem;\n } {\n const objectManagementSystem = new ObjectManagementSystem(\n this.scene,\n this.camera,\n isEditor ?? false,\n );\n const meshGeometrySystem = new MeshGeometrySystem();\n const instancedMeshSystem = new InstancedMeshSystem();\n const environmentSyncSystem = this.featureFlags.supportSkybox\n ? new EnvironmentSyncSystem(this.scene)\n : null;\n const postprocessingSyncSystem = this.featureFlags.supportPostprocessing\n ? new PostprocessingSyncSystem(this.renderer, this.scene, this.camera)\n : null;\n const lightSyncSystem = new LightSyncSystem();\n const materialSyncSystem = new MaterialSyncSystem();\n const physicsSyncSystem = new PhysicsSyncSystem({\n isEditor: isEditor ?? false,\n });\n const animationSystem = new AnimationSystem();\n const audioSystem = new AudioSystem({ isEditor: isEditor ?? false });\n const videoSystem = new VideoSystem({ isEditor: isEditor ?? false });\n const cameraSyncSystem = new CameraSyncSystem();\n const transformSyncSystem = new TransformSyncSystem();\n const objectVisibilitySystem = new ObjectVisibilitySystem();\n const renderSystem = new RenderSystem(\n this.renderer,\n this.scene,\n this.camera,\n );\n\n registerDefaultFactories(objectManagementSystem);\n\n this.inputSystem = null;\n\n const coreSystems: EcsSystem[] = [\n objectManagementSystem,\n meshGeometrySystem,\n instancedMeshSystem,\n ];\n\n if (environmentSyncSystem) {\n coreSystems.push(environmentSyncSystem);\n }\n\n if (postprocessingSyncSystem) {\n coreSystems.push(postprocessingSyncSystem);\n }\n\n this.addSystems([\n ...coreSystems,\n physicsSyncSystem,\n ...systems,\n objectVisibilitySystem,\n lightSyncSystem,\n materialSyncSystem,\n animationSystem,\n audioSystem,\n videoSystem,\n cameraSyncSystem,\n transformSyncSystem,\n renderSystem,\n ]);\n\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n }\n\n this.isEditor = isEditor ?? false;\n\n this.objectManagementSystem = objectManagementSystem;\n this.environmentSyncSystem = environmentSyncSystem;\n this.postprocessingSyncSystem = postprocessingSyncSystem;\n\n return {\n objectManagementSystem,\n transformSyncSystem,\n renderSystem,\n };\n }\n\n isEditorMode(): boolean {\n return this.isEditor;\n }\n\n /**\n * Pauses world simulation. While paused, `update()` skips all system ticks so\n * physics, animation, scripts, and rendering stop advancing. The last rendered\n * frame remains frozen on-screen.\n *\n * Call {@link resume} to continue.\n */\n pause(): void {\n this.paused = true;\n }\n\n /**\n * Resumes world simulation after a previous {@link pause} call.\n * Has no effect if the world is not paused.\n */\n resume(): void {\n this.paused = false;\n }\n\n /**\n * Returns `true` if the world is currently paused.\n *\n * @example\n * ```ts\n * if (this.world.isPaused()) {\n * this.world.resume();\n * }\n * ```\n */\n isPaused(): boolean {\n return this.paused;\n }\n\n getScene(): THREE.Scene {\n return this.scene;\n }\n\n getCamera(): THREE.PerspectiveCamera {\n return this.camera;\n }\n\n getRenderer(): THREE.WebGLRenderer {\n return this.renderer;\n }\n\n update(deltaTime: number): void {\n if (this.paused) return;\n for (const system of this.systems) {\n system.update(this, deltaTime);\n }\n }\n\n dispose(): void {\n for (const system of this.systems) {\n system.dispose?.(this);\n }\n\n this.selectionListeners.clear();\n this.storeListeners.clear();\n this.physicsWorld = null;\n this.systems = [];\n this.paused = false;\n }\n\n setSelectedEntity(entityId: EntityId | null): void {\n const state = this.getSelectionState();\n if (!state) {\n return;\n }\n\n const nextEntityId =\n entityId !== null && this.entities.has(entityId) ? entityId : null;\n\n if (state.selectedEntityId === nextEntityId) {\n return;\n }\n\n state.selectedEntityId = nextEntityId;\n\n for (const listener of this.selectionListeners) {\n listener(nextEntityId);\n }\n\n this.emitStoreChanged();\n }\n\n getSelectedEntity(): EntityId | null {\n return this.getSelectionState()?.selectedEntityId ?? null;\n }\n\n private getEntityComponents(entityId: EntityId): Component[] {\n const components: Component[] = [];\n\n for (const store of this.components.values()) {\n const component = store.get(entityId);\n if (component) {\n components.push(component);\n }\n }\n\n return components;\n }\n\n private getEntityName(entityId: EntityId): string {\n const nameComponent = this.getComponent(entityId, Name);\n const name = nameComponent?.value?.trim();\n\n if (name) {\n return name;\n }\n\n return `Entity ${entityId}`;\n }\n\n private getEntityType(entityId: EntityId): string {\n const typeComponent = this.getComponent(entityId, EntityType);\n const type = typeComponent?.value?.trim();\n\n if (type) {\n return type;\n }\n\n return `EntityType ${entityId}`;\n }\n\n private getObject3d(entityId: EntityId): THREE.Object3D | null {\n const object3DRefComponent = this.getComponent(entityId, Object3DRef);\n const object = object3DRefComponent?.object;\n\n if (object) {\n return object;\n }\n\n return null;\n }\n\n private toEntityView(entityId: EntityId): WorldEntityView {\n return {\n entityId,\n name: this.getEntityName(entityId),\n object: this.getObject3d(entityId),\n type: this.getEntityType(entityId),\n components: this.getEntityComponents(entityId),\n };\n }\n\n getEntitiesByComponent(component: Component): WorldEntityView[] {\n const componentType = component.constructor as ComponentClass<AnyComponent>;\n const entityStore = this.components.get(componentType);\n\n if (!entityStore) {\n return [];\n }\n\n return [...entityStore.keys()]\n .filter((entityId) => this.entities.has(entityId))\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n getEntitiesByName(name: string): WorldEntityView[] {\n const searchName = name.trim();\n if (!searchName) {\n return [];\n }\n\n return this.getAllEntities().filter((entity) => entity.name === searchName);\n }\n\n getEntityByName(name: string): WorldEntityView | null {\n const [entity] = this.getEntitiesByName(name);\n return entity ?? null;\n }\n\n getEntityById(entityId: number): WorldEntityView | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n return this.toEntityView(entityId);\n }\n\n getEntitiesChildren(entityId: EntityId): WorldEntityView[] {\n const children: WorldEntityView[] = [];\n const entitiesWithParent = this.query(ParentId);\n \n for (const childId of entitiesWithParent) {\n const parentIdComponent = this.getComponent(childId, ParentId);\n if (parentIdComponent?.value === entityId) {\n children.push(this.toEntityView(childId));\n }\n }\n \n return children;\n }\n\n getEntitiesParent(entityId: EntityId): WorldEntityView | null {\n const parentIdComponent = this.getComponent(entityId, ParentId);\n \n if (!parentIdComponent || parentIdComponent.value === null) {\n return null;\n }\n \n return this.getEntityById(parentIdComponent.value);\n }\n\n getObjectManagementSystem(): ObjectManagementSystem {\n if (this.objectManagementSystem) return this.objectManagementSystem;\n\n const objectManagementSystem = this.systems.find(\n (system) => system.constructor.name === \"ObjectManagementSystem\",\n );\n\n this.objectManagementSystem = objectManagementSystem as ObjectManagementSystem;\n\n return this.objectManagementSystem;\n }\n\n /**\n * Returns the singleton {@link Environment} component for the scene, or\n * `undefined` if no environment entity exists yet.\n *\n * Mutate `component.values` directly to change skybox, fog, or gravity at\n * runtime — `EnvironmentSyncSystem` picks up the changes next frame.\n *\n * @example\n * ```ts\n * const env = this.world.getEnvironmentComponent();\n * if (env) {\n * env.values.fog.type = \"exponential\";\n * env.values.fog.exponential.density = 0.01;\n * }\n * ```\n */\n getEnvironmentComponent(): Environment | undefined {\n const entityId = this.query(Environment)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Environment);\n }\n\n /**\n * Returns the singleton {@link Postprocessing} component for the scene, or\n * `undefined` if no postprocessing entity exists yet.\n *\n * Mutate `component.values` directly to enable/disable effects or tweak\n * parameters at runtime — `PostprocessingSyncSystem` picks up the changes\n * next frame.\n *\n * @example\n * ```ts\n * const pp = this.world.getPostprocessingComponent();\n * if (pp) {\n * pp.values.bloom.enabled = true;\n * pp.values.bloom.intensity = 2.0;\n * }\n * ```\n */\n getPostprocessingComponent(): Postprocessing | undefined {\n const entityId = this.query(Postprocessing)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Postprocessing);\n }\n\n /**\n * Cast a ray from `origin` along `direction` and return every intersected\n * entity-bound mesh, sorted by distance. Each result is a standard\n * `THREE.Intersection` augmented with the owning `entityId` (or `null` if\n * the hit object is not part of any tracked entity).\n *\n * @param origin - World-space origin of the ray (`THREE.Vector3` or\n * `{ x, y, z }`).\n * @param direction - World-space direction of the ray. Will be normalized\n * internally; magnitude is ignored.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycast(\n * { x: 0, y: 1, z: 0 },\n * { x: 0, y: 0, z: -1 },\n * );\n * if (hits[0]?.entityId !== null) {\n * console.log(\"hit entity\", hits[0].entityId, \"at\", hits[0].point);\n * }\n * ```\n */\n raycast(\n origin: Vec3,\n direction: Vec3,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const rayOrigin = new THREE.Vector3(origin.x, origin.y, origin.z);\n const rayDirection = new THREE.Vector3(\n direction.x,\n direction.y,\n direction.z,\n );\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n rayDirection.normalize();\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections.map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n );\n }\n\n /**\n * Cast a ray from an entity's world-space position along its forward\n * direction (the +Z axis of its world matrix). Returns intersected\n * entity-bound meshes sorted by distance, with the source entity itself\n * filtered out so the ray does not hit the caster.\n *\n * @param entityId - Entity to cast the ray from. Must have an `Object3DRef`.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycastFrom(this.entityId, 0, 50);\n * const closest = hits[0];\n * if (closest && closest.entityId !== null) {\n * console.log(\"looking at\", closest.entityId);\n * }\n * ```\n */\n raycastFrom(\n entityId: EntityId,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const sourceObject = this.getObject3d(entityId);\n if (!sourceObject) {\n return [];\n }\n\n const rayOrigin = new THREE.Vector3();\n const rayDirection = new THREE.Vector3();\n sourceObject.getWorldPosition(rayOrigin);\n sourceObject.getWorldDirection(rayDirection);\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections\n .map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n )\n .filter((result) => result.entityId !== entityId);\n }\n\n private buildObjectToEntityMap(): Map<THREE.Object3D, EntityId> {\n const map = new Map<THREE.Object3D, EntityId>();\n const store = this.components.get(\n Object3DRef as unknown as ComponentClass<AnyComponent>,\n );\n\n if (!store) {\n return map;\n }\n\n for (const [entityId, component] of store) {\n const object = (component as Object3DRef).object;\n if (object) {\n map.set(object, entityId);\n }\n }\n\n return map;\n }\n\n private resolveEntityForObject(\n object: THREE.Object3D,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): EntityId | null {\n let current: THREE.Object3D | null = object;\n while (current) {\n const entityId = objectToEntity.get(current);\n if (entityId !== undefined) {\n return entityId;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private toIntersectionResult(\n intersection: THREE.Intersection,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): IntersectionResult {\n return {\n entityId: this.resolveEntityForObject(\n intersection.object,\n objectToEntity,\n ),\n threeResult: intersection,\n };\n }\n\n getEntityScript<T = unknown>(entityId: number): T | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent || scriptComponent.scriptInstance === null) {\n return null;\n }\n\n return scriptComponent.scriptInstance as T;\n }\n\n getScripts<T = unknown>(className: string): T[] {\n const normalizedClassName = className.trim();\n if (!normalizedClassName) {\n return [];\n }\n\n const scriptEntityIds = this.query(ScriptComponent);\n const instances: T[] = [];\n\n for (const entityId of scriptEntityIds) {\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent) {\n continue;\n }\n\n const hasClassMatch = Array.isArray(scriptComponent.entries)\n ? scriptComponent.entries.some((entry) => {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n\n const classNameValue = (entry as { className?: unknown }).className;\n return (\n typeof classNameValue === \"string\" &&\n classNameValue === normalizedClassName\n );\n })\n : false;\n\n if (!hasClassMatch) {\n continue;\n }\n\n if (scriptComponent.scriptInstance !== null) {\n instances.push(scriptComponent.scriptInstance as T);\n }\n }\n\n return instances;\n }\n\n getScript<T = unknown>(className: string): T | null {\n const [instance] = this.getScripts<T>(className);\n return instance ?? null;\n }\n\n getAllEntities(): WorldEntityView[] {\n return [...this.entities]\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n onSelectionChanged(listener: SelectionListener): () => void {\n this.selectionListeners.add(listener);\n\n return () => {\n this.selectionListeners.delete(listener);\n };\n }\n\n subscribe(listener: StoreListener): () => void {\n this.storeListeners.add(listener);\n\n return () => {\n this.storeListeners.delete(listener);\n };\n }\n\n getDebugSnapshot(maxDepth = 3): unknown {\n const components = [...this.components.entries()]\n .map(([componentClass, store]) => {\n return {\n component: componentClass.name,\n entries: [...store.entries()]\n .map(([entityId, component]) => {\n return {\n entityId,\n value: normalizeDebugValue(component, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n })\n .sort((a, b) => a.entityId - b.entityId),\n };\n })\n .sort((a, b) => a.component.localeCompare(b.component));\n\n const systems = this.systems\n .map((system) => {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n return {\n system,\n systemName,\n };\n })\n .filter(({ systemName }) => !DEBUG_CHANGE_IGNORED_SYSTEMS.has(systemName))\n .map(({ system, systemName }) => {\n return {\n system: systemName,\n state: normalizeDebugValue(system, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n });\n\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities].sort((a, b) => a - b),\n nextEntityId: this.nextEntityId,\n components,\n systems,\n };\n }\n\n getDebugSignature(maxDepth = 3): string {\n return JSON.stringify(this.getDebugSnapshot(maxDepth));\n }\n\n createHistorySnapshot(): WorldHistorySnapshot {\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities],\n nextEntityId: this.nextEntityId,\n components: [...this.components.entries()].map(\n ([componentType, store]) => {\n return {\n componentType,\n entries: [...store.entries()].map(([entityId, component]) => {\n return {\n entityId,\n component: cloneHistoryValue(component),\n };\n }),\n };\n },\n ),\n };\n }\n\n applyHistorySnapshot(snapshot: WorldHistorySnapshot): void {\n const previousSelectedEntityId = this.getSelectedEntity();\n\n this.nextEntityId = snapshot.nextEntityId;\n this.entities = new Set(snapshot.entities);\n\n const nextComponents = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n for (const componentBlock of snapshot.components) {\n const store = new Map<EntityId, AnyComponent>();\n for (const entry of componentBlock.entries) {\n if (!this.entities.has(entry.entityId)) {\n continue;\n }\n\n store.set(entry.entityId, cloneHistoryValue(entry.component));\n }\n\n nextComponents.set(componentBlock.componentType, store);\n }\n\n this.components = nextComponents;\n\n const selectionState = this.getSelectionState();\n const nextSelectedEntityId =\n snapshot.selectedEntityId !== null &&\n this.entities.has(snapshot.selectedEntityId)\n ? snapshot.selectedEntityId\n : null;\n\n if (selectionState) {\n selectionState.selectedEntityId = nextSelectedEntityId;\n }\n\n const selectionChanged = previousSelectedEntityId !== nextSelectedEntityId;\n\n if (selectionChanged) {\n for (const listener of this.selectionListeners) {\n listener(nextSelectedEntityId);\n }\n }\n\n this.emitStoreChanged();\n }\n\n private emitStoreChanged(): void {\n for (const listener of this.storeListeners) {\n listener();\n }\n }\n}\n","import type { EcsWorldComponentSnapshot, HydrationPayload } from \"./types\";\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n return value as Record<string, unknown>;\n}\n\nexport function readString(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n return typeof record.value === \"string\" ? record.value : null;\n}\n\nexport function readTransform(value: unknown): HydrationPayload[\"transform\"] {\n const record = asRecord(value);\n if (!record) {\n return undefined;\n }\n\n const position = asRecord(record.position);\n const rotation = asRecord(record.rotation);\n const scale = asRecord(record.scale);\n\n return {\n position: position\n ? {\n x: typeof position.x === \"number\" ? position.x : undefined,\n y: typeof position.y === \"number\" ? position.y : undefined,\n z: typeof position.z === \"number\" ? position.z : undefined,\n }\n : undefined,\n rotation: rotation\n ? {\n x: typeof rotation.x === \"number\" ? rotation.x : undefined,\n y: typeof rotation.y === \"number\" ? rotation.y : undefined,\n z: typeof rotation.z === \"number\" ? rotation.z : undefined,\n }\n : undefined,\n scale: scale\n ? {\n x: typeof scale.x === \"number\" ? scale.x : undefined,\n y: typeof scale.y === \"number\" ? scale.y : undefined,\n z: typeof scale.z === \"number\" ? scale.z : undefined,\n }\n : undefined,\n };\n}\n\nexport function readByComponent(\n components: EcsWorldComponentSnapshot[],\n componentName: string,\n): Map<number, unknown> {\n const component = components.find((entry) => entry.component === componentName);\n const map = new Map<number, unknown>();\n\n if (!component) {\n return map;\n }\n\n for (const entry of component.entries) {\n map.set(entry.entityId, entry.value);\n }\n\n return map;\n}\n\nexport function readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n","import type { EcsWorldStateSnapshotLike, ComponentValueMaps } from \"./types\";\nimport { readByComponent } from \"./readers\";\n\nexport function buildComponentValueMaps(\n snapshot: EcsWorldStateSnapshotLike,\n): ComponentValueMaps {\n return {\n object3DRefValues: readByComponent(snapshot.components, \"Object3DRef\"),\n nameValues: readByComponent(snapshot.components, \"Name\"),\n transformValues: readByComponent(snapshot.components, \"TransformComponent\"),\n modelValues: readByComponent(snapshot.components, \"ModelComponent\"),\n imageValues: readByComponent(snapshot.components, \"ImageComponent\"),\n spriteValues: readByComponent(snapshot.components, \"SpriteComponent\"),\n videoValues: readByComponent(snapshot.components, \"VideoComponent\"),\n cameraValues: readByComponent(snapshot.components, \"CameraComponent\"),\n environmentValues: readByComponent(snapshot.components, \"Environment\"),\n postprocessingValues: readByComponent(snapshot.components, \"Postprocessing\"),\n audioValues: readByComponent(snapshot.components, \"AudioComponent\"),\n imageTargetValues: readByComponent(snapshot.components, \"ImageTarget\"),\n lightValues: readByComponent(snapshot.components, \"LightComponent\"),\n materialValues: readByComponent(snapshot.components, \"MaterialComponent\"),\n meshGeometryValues: readByComponent(snapshot.components, \"MeshGeometryComponent\"),\n selectableValues: readByComponent(snapshot.components, \"Selectable\"),\n physicsValues: readByComponent(snapshot.components, \"PhysicsComponent\"),\n animationValues: readByComponent(snapshot.components, \"AnimationComponent\"),\n imageTargetAnchorValues: readByComponent(snapshot.components, \"ImageTargetAnchor\"),\n scriptValues: readByComponent(snapshot.components, \"ScriptComponent\"),\n instancedMeshValues: readByComponent(snapshot.components, \"InstancedMeshComponent\"),\n instanceSlotValues: readByComponent(snapshot.components, \"InstanceSlotComponent\"),\n };\n}\n","import type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { EcsWorldStateSnapshotLike } from \"./types\";\nimport { asRecord, readByComponent } from \"./readers\";\n\nexport function applyParentLinks(\n snapshot: EcsWorldStateSnapshotLike,\n idMap: Map<number, number>,\n objectManagementSystem: ObjectManagementSystem,\n world: World,\n): void {\n const parentValues = readByComponent(snapshot.components, \"ParentId\");\n\n for (const [sourceEntityId, parentValue] of parentValues.entries()) {\n const targetEntityId = idMap.get(sourceEntityId);\n if (targetEntityId === undefined) {\n continue;\n }\n\n const parentRecord = asRecord(parentValue);\n const sourceParentId =\n parentRecord && typeof parentRecord.value === \"number\"\n ? parentRecord.value\n : null;\n\n if (sourceParentId === null) {\n objectManagementSystem.setParent(world, targetEntityId, null, {\n preserveWorldTransform: false,\n });\n continue;\n }\n\n const mappedParentId = idMap.get(sourceParentId);\n objectManagementSystem.setParent(world, targetEntityId, mappedParentId ?? null, {\n preserveWorldTransform: false,\n });\n }\n}\n","import { Object3DRef, ScriptComponent, InstancedMeshComponent } from \"../components\";\nimport { InstanceSlotComponent } from \"../components/InstanceSlotComponent\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { ComponentValueMaps } from \"./types\";\nimport { asRecord } from \"./readers\";\n\nfunction remapEntityRefsInScriptData(\n data: Record<string, unknown>,\n idMap: Map<number, number>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const v = value as Record<string, unknown>;\n if (v.type === \"entity\" && typeof v.value === \"number\") {\n result[key] = { ...v, value: idMap.get(v.value) ?? v.value };\n } else if (\n v.type === \"component\" &&\n v.value !== null &&\n typeof v.value === \"object\" &&\n !Array.isArray(v.value) &&\n typeof (v.value as Record<string, unknown>).entityId === \"number\"\n ) {\n const ref = v.value as Record<string, unknown>;\n result[key] = {\n ...v,\n value: { ...ref, entityId: idMap.get(ref.entityId as number) ?? ref.entityId },\n };\n } else {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function restorePostCreateComponents(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceEntityId: number,\n entityType: string | null,\n values: ComponentValueMaps,\n idMap: Map<number, number>,\n): void {\n const objectRef = world.getComponent(targetEntityId, Object3DRef)?.object ?? null;\n\n const sourceAudio = asRecord(values.audioValues.get(sourceEntityId));\n if (sourceAudio && entityType !== \"audio\") {\n const sourceOptions = asRecord(sourceAudio.options) ?? {};\n\n objectManagementSystem.createComponentNow(\n \"audio\",\n world,\n targetEntityId,\n typeof sourceAudio.path === \"string\" ? sourceAudio.path : \"\",\n sourceOptions,\n {\n object: objectRef,\n listener: objectManagementSystem.getOrCreateAudioListener(),\n isEditor: objectManagementSystem.isEditorMode(),\n },\n );\n }\n\n const sourceImageTarget = asRecord(values.imageTargetValues.get(sourceEntityId));\n if (sourceImageTarget && entityType !== \"imageTarget\") {\n objectManagementSystem.createComponentNow(\n \"imageTarget\",\n world,\n targetEntityId,\n {\n targets: Array.isArray(sourceImageTarget.targets)\n ? sourceImageTarget.targets\n : [],\n compiledTargetUrl:\n typeof sourceImageTarget.compiledTargetUrl === \"string\"\n ? sourceImageTarget.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof sourceImageTarget.compiledTargetDir === \"string\"\n ? sourceImageTarget.compiledTargetDir\n : undefined,\n },\n );\n }\n\n const sourceImageTargetAnchor = asRecord(values.imageTargetAnchorValues.get(sourceEntityId));\n if (sourceImageTargetAnchor) {\n // ImageTargetAnchor.targetId references ImageTarget.targets[].id, not an entity id.\n // Preserve the id directly; idMap remapping is only valid for entity references.\n const mappedTargetId =\n typeof sourceImageTargetAnchor.targetId === \"number\" &&\n Number.isFinite(sourceImageTargetAnchor.targetId)\n ? sourceImageTargetAnchor.targetId\n : null;\n\n objectManagementSystem.createComponentNow(\"imageTargetAnchor\", world, targetEntityId, {\n targetId: mappedTargetId,\n targetUrl:\n typeof sourceImageTargetAnchor.targetUrl === \"string\"\n ? sourceImageTargetAnchor.targetUrl\n : undefined,\n });\n }\n\n const sourceScript = asRecord(values.scriptValues.get(sourceEntityId));\n if (sourceScript) {\n const entries = Array.isArray(sourceScript.entries)\n ? sourceScript.entries\n .map((entry) => asRecord(entry))\n .filter((entry): entry is Record<string, unknown> => Boolean(entry))\n .map((entry) => {\n const runtimeState: \"idle\" | \"loading\" | \"ready\" | \"error\" | undefined =\n entry.runtimeState === \"idle\" ||\n entry.runtimeState === \"loading\" ||\n entry.runtimeState === \"ready\" ||\n entry.runtimeState === \"error\"\n ? entry.runtimeState\n : undefined;\n\n return {\n entityId: targetEntityId,\n className: typeof entry.className === \"string\" ? entry.className : \"\",\n scriptUrl: typeof entry.scriptUrl === \"string\" ? entry.scriptUrl : \"\",\n enabled: typeof entry.enabled === \"boolean\" ? entry.enabled : true,\n data:\n entry.data &&\n typeof entry.data === \"object\" &&\n !Array.isArray(entry.data)\n ? remapEntityRefsInScriptData(entry.data as Record<string, unknown>, idMap)\n : {},\n runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\"\n ? entry.runtimeMessage\n : undefined,\n };\n })\n .filter((entry) => entry.className || entry.scriptUrl)\n : [];\n\n if (!entries.length) {\n return;\n }\n\n world.addComponent(\n targetEntityId,\n new ScriptComponent(entries),\n );\n }\n\n // Remap InstancedMeshComponent.instanceEntityIds from snapshot IDs → live IDs.\n {\n const imComponent = world.getComponent(targetEntityId, InstancedMeshComponent);\n if (imComponent && imComponent.instanceEntityIds.length > 0) {\n imComponent.instanceEntityIds = imComponent.instanceEntityIds.map(\n (oldId) => idMap.get(oldId) ?? oldId,\n );\n }\n }\n\n // Remap InstanceSlotComponent.groupEntityId from snapshot ID → live ID.\n {\n const slotComponent = world.getComponent(targetEntityId, InstanceSlotComponent);\n if (slotComponent && slotComponent.groupEntityId !== -1) {\n slotComponent.groupEntityId =\n idMap.get(slotComponent.groupEntityId) ?? slotComponent.groupEntityId;\n }\n }\n}\n","import {\n AnimationComponent,\n type AnimationComponentOptions,\n} from \"../components\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport { asRecord, readBoolean, readNumber } from \"./readers\";\n\nfunction readAnimationClipName(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n if (typeof record.name === \"string\") {\n return record.name;\n }\n\n return null;\n}\n\nfunction readAnimationStates(value: unknown): NonNullable<\n AnimationComponentOptions[\"states\"]\n> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const states: NonNullable<AnimationComponentOptions[\"states\"]> = [];\n\n for (const entry of value) {\n const state = asRecord(entry);\n if (!state) {\n continue;\n }\n\n const name = typeof state.name === \"string\" ? state.name : null;\n const clip = readAnimationClipName(state.clip);\n if (!name || !clip) {\n continue;\n }\n\n states.push({\n name,\n clip,\n clipId: typeof state.clipId === \"string\" ? state.clipId : undefined,\n loop: typeof state.loop === \"boolean\" ? state.loop : false,\n });\n }\n\n return states;\n}\n\nfunction readAnimationClipSources(\n value: unknown,\n): NonNullable<AnimationComponentOptions[\"externalClipSources\"]> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const seen = new Set<string>();\n const sources: string[] = [];\n for (const entry of value) {\n if (typeof entry !== \"string\") {\n continue;\n }\n\n const trimmed = entry.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n sources.push(trimmed);\n }\n\n return sources;\n}\n\nfunction toAnimationOptions(\n sourceAnimation: Record<string, unknown>,\n): AnimationComponentOptions {\n const paused = readBoolean(sourceAnimation.paused);\n const reverse = readBoolean(sourceAnimation.reverse);\n const timeScale = readNumber(sourceAnimation.timeScale);\n const crossFadeDuration = readNumber(sourceAnimation.crossFadeDuration);\n const states = readAnimationStates(sourceAnimation.states);\n const externalClipSources = readAnimationClipSources(\n sourceAnimation.externalClipSources,\n );\n const activeStateName =\n typeof sourceAnimation.activeStateName === \"string\"\n ? sourceAnimation.activeStateName\n : typeof sourceAnimation.activeState === \"string\"\n ? sourceAnimation.activeState\n : typeof (sourceAnimation.active as { name?: unknown } | undefined)?.name ===\n \"string\"\n ? ((sourceAnimation.active as { name: string }).name ?? null)\n : null;\n\n return {\n paused,\n reverse,\n timeScale,\n crossFadeDuration,\n states,\n externalClipSources,\n activeState: activeStateName,\n };\n}\n\nexport function restoreAnimationComponent(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceAnimation: Record<string, unknown>,\n): void {\n const options = toAnimationOptions(sourceAnimation);\n let animation = world.getComponent(targetEntityId, AnimationComponent);\n\n if (!animation) {\n objectManagementSystem.createComponentNow(\n \"animation\",\n world,\n targetEntityId,\n options,\n );\n animation = world.getComponent(targetEntityId, AnimationComponent);\n }\n\n if (!animation) {\n return;\n }\n\n const availableClips = Array.isArray(sourceAnimation.availableClips)\n ? sourceAnimation.availableClips.filter(\n (clip): clip is string => typeof clip === \"string\" && clip.length > 0,\n )\n : [];\n if (availableClips.length > 0) {\n animation.availableClips = [...availableClips];\n }\n\n if (Array.isArray(options.externalClipSources)) {\n animation.setExternalClipSources(options.externalClipSources);\n }\n\n const states = options.states ?? [];\n const hasClips = Array.isArray(animation.clips) && animation.clips.length > 0;\n if (!hasClips) {\n (\n animation as AnimationComponent & {\n __pendingHydratedOptions?: AnimationComponentOptions;\n }\n ).__pendingHydratedOptions = options;\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.paused === \"boolean\") {\n animation.paused = options.paused;\n }\n\n return;\n }\n\n if (states.length > 0) {\n animation.setStates(states);\n }\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.setActiveState(options.activeState, !options.paused);\n }\n\n if (typeof options.paused === \"boolean\") {\n if (options.paused) {\n animation.pauseState();\n } else if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.playState(options.activeState);\n }\n }\n}\n","import {\n AudioComponent,\n CameraComponent,\n Environment,\n type EnvironmentState,\n ImageComponent,\n ImageTarget,\n InstancedMeshComponent,\n LightComponent,\n MaterialComponent,\n MeshGeometryComponent,\n ModelComponent,\n Name,\n Object3DRef,\n PhysicsComponent,\n Postprocessing,\n Selectable,\n SpriteComponent,\n TransformComponent,\n VideoComponent,\n} from \"../components\";\nimport { InstanceSlotComponent } from \"../components/InstanceSlotComponent\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport { restoreAnimationComponent } from \"./animation\";\nimport type { ComponentValueMaps } from \"./types\";\nimport { asRecord, readBoolean, readNumber, readString, readTransform } from \"./readers\";\n\nfunction readEnvironmentState(value: unknown): Partial<EnvironmentState> | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const nestedValues = asRecord(record.values);\n if (nestedValues) {\n return nestedValues as Partial<EnvironmentState>;\n }\n\n return record as Partial<EnvironmentState>;\n}\n\nfunction readPostprocessingState(value: unknown): Record<string, unknown> | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const nestedValues = asRecord(record.values);\n if (nestedValues) {\n return nestedValues;\n }\n\n return record;\n}\n\nexport function restoreComponentState(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceEntityId: number,\n entityType: string | null,\n values: ComponentValueMaps,\n): void {\n const sourceName = readString(values.nameValues.get(sourceEntityId));\n if (sourceName !== null) {\n const nameComponent = world.getComponent(targetEntityId, Name);\n if (nameComponent) {\n nameComponent.value = sourceName;\n }\n }\n\n const sourceObject3DRef = asRecord(values.object3DRefValues.get(sourceEntityId));\n if (sourceObject3DRef) {\n const object3DRefComponent = world.getComponent(targetEntityId, Object3DRef);\n const visibility = readBoolean(sourceObject3DRef.visibility);\n if (object3DRefComponent && typeof visibility === \"boolean\") {\n object3DRefComponent.visibility = visibility;\n }\n }\n\n const sourceTransform = readTransform(values.transformValues.get(sourceEntityId));\n if (sourceTransform) {\n const transformComponent = world.getComponent(targetEntityId, TransformComponent);\n if (transformComponent) {\n if (typeof sourceTransform.position?.x === \"number\") {\n transformComponent.position.x = sourceTransform.position.x;\n }\n if (typeof sourceTransform.position?.y === \"number\") {\n transformComponent.position.y = sourceTransform.position.y;\n }\n if (typeof sourceTransform.position?.z === \"number\") {\n transformComponent.position.z = sourceTransform.position.z;\n }\n\n if (typeof sourceTransform.rotation?.x === \"number\") {\n transformComponent.rotation.x = sourceTransform.rotation.x;\n }\n if (typeof sourceTransform.rotation?.y === \"number\") {\n transformComponent.rotation.y = sourceTransform.rotation.y;\n }\n if (typeof sourceTransform.rotation?.z === \"number\") {\n transformComponent.rotation.z = sourceTransform.rotation.z;\n }\n\n if (typeof sourceTransform.scale?.x === \"number\") {\n transformComponent.scale.x = sourceTransform.scale.x;\n }\n if (typeof sourceTransform.scale?.y === \"number\") {\n transformComponent.scale.y = sourceTransform.scale.y;\n }\n if (typeof sourceTransform.scale?.z === \"number\") {\n transformComponent.scale.z = sourceTransform.scale.z;\n }\n }\n }\n\n const sourceModel = asRecord(values.modelValues.get(sourceEntityId));\n if (sourceModel) {\n const modelComponent = world.getComponent(targetEntityId, ModelComponent);\n if (modelComponent && typeof sourceModel.path === \"string\") {\n modelComponent.path = sourceModel.path;\n }\n }\n\n const sourceImage = asRecord(values.imageValues.get(sourceEntityId));\n if (sourceImage) {\n const imageComponent = world.getComponent(targetEntityId, ImageComponent);\n if (imageComponent) {\n if (typeof sourceImage.path === \"string\") {\n imageComponent.path = sourceImage.path;\n }\n\n const width = readNumber(sourceImage.width);\n if (typeof width === \"number\") {\n imageComponent.width = width;\n }\n\n const height = readNumber(sourceImage.height);\n if (typeof height === \"number\") {\n imageComponent.height = height;\n }\n }\n }\n\n const sourceSprite = asRecord(values.spriteValues.get(sourceEntityId));\n if (sourceSprite) {\n const spriteComponent = world.getComponent(targetEntityId, SpriteComponent);\n if (spriteComponent) {\n if (typeof sourceSprite.path === \"string\") {\n spriteComponent.path = sourceSprite.path;\n }\n\n const width = readNumber(sourceSprite.width);\n if (typeof width === \"number\") {\n spriteComponent.width = width;\n }\n\n const height = readNumber(sourceSprite.height);\n if (typeof height === \"number\") {\n spriteComponent.height = height;\n }\n }\n }\n\n const sourceVideo = asRecord(values.videoValues.get(sourceEntityId));\n if (sourceVideo) {\n const videoComponent = world.getComponent(targetEntityId, VideoComponent);\n if (videoComponent) {\n if (typeof sourceVideo.path === \"string\") {\n videoComponent.path = sourceVideo.path;\n }\n\n const videoOptions = asRecord(sourceVideo.options);\n if (videoOptions) {\n videoComponent.options = {\n ...videoComponent.options,\n ...videoOptions,\n } as typeof videoComponent.options;\n }\n }\n }\n\n const sourceAudio = asRecord(values.audioValues.get(sourceEntityId));\n if (sourceAudio && entityType === \"audio\") {\n const audioComponent = world.getComponent(targetEntityId, AudioComponent);\n if (audioComponent) {\n if (typeof sourceAudio.path === \"string\") {\n audioComponent.path = sourceAudio.path;\n }\n\n const audioOptions = asRecord(sourceAudio.options);\n if (audioOptions) {\n audioComponent.options = {\n ...audioComponent.options,\n ...audioOptions,\n } as typeof audioComponent.options;\n }\n }\n }\n\n const sourceCamera = asRecord(values.cameraValues.get(sourceEntityId));\n if (sourceCamera) {\n const cameraComponent = world.getComponent(targetEntityId, CameraComponent);\n if (cameraComponent) {\n if (\n sourceCamera.projection === \"orthographic\" ||\n sourceCamera.projection === \"perspective\"\n ) {\n cameraComponent.projection = sourceCamera.projection;\n }\n\n if (\n sourceCamera.type === \"3d\" ||\n sourceCamera.type === \"ar\"\n ) {\n cameraComponent.type = sourceCamera.type;\n }\n\n if (typeof sourceCamera.isDefault === \"boolean\") {\n cameraComponent.isDefault = sourceCamera.isDefault;\n }\n\n const fov = readNumber(sourceCamera.fov);\n if (typeof fov === \"number\") {\n cameraComponent.fov = fov;\n }\n\n const near = readNumber(sourceCamera.near);\n if (typeof near === \"number\") {\n cameraComponent.near = near;\n }\n\n const far = readNumber(sourceCamera.far);\n if (typeof far === \"number\") {\n cameraComponent.far = far;\n }\n\n const left = readNumber(sourceCamera.left);\n if (typeof left === \"number\") {\n cameraComponent.left = left;\n }\n\n const right = readNumber(sourceCamera.right);\n if (typeof right === \"number\") {\n cameraComponent.right = right;\n }\n\n const top = readNumber(sourceCamera.top);\n if (typeof top === \"number\") {\n cameraComponent.top = top;\n }\n\n const bottom = readNumber(sourceCamera.bottom);\n if (typeof bottom === \"number\") {\n cameraComponent.bottom = bottom;\n }\n\n const zoom = readNumber(sourceCamera.zoom);\n if (typeof zoom === \"number\") {\n cameraComponent.zoom = zoom;\n }\n }\n }\n\n const sourceEnvironment = readEnvironmentState(\n values.environmentValues.get(sourceEntityId),\n );\n if (sourceEnvironment) {\n let environmentComponent = world.getComponent(targetEntityId, Environment);\n if (!environmentComponent) {\n objectManagementSystem.createComponentNow(\n \"environment\",\n world,\n targetEntityId,\n sourceEnvironment,\n );\n environmentComponent = world.getComponent(targetEntityId, Environment);\n }\n\n if (environmentComponent) {\n environmentComponent.values = new Environment({\n ...environmentComponent.values,\n ...sourceEnvironment,\n }).values;\n }\n }\n\n const sourcePostprocessing = readPostprocessingState(\n values.postprocessingValues.get(sourceEntityId),\n );\n if (sourcePostprocessing) {\n let postprocessingComponent = world.getComponent(targetEntityId, Postprocessing);\n if (!postprocessingComponent) {\n objectManagementSystem.createComponentNow(\n \"postprocessing\",\n world,\n targetEntityId,\n sourcePostprocessing,\n );\n postprocessingComponent = world.getComponent(targetEntityId, Postprocessing);\n }\n\n if (postprocessingComponent) {\n postprocessingComponent.values = new Postprocessing({\n ...postprocessingComponent.values,\n ...sourcePostprocessing,\n }).values;\n }\n }\n\n const sourceImageTarget = asRecord(values.imageTargetValues.get(sourceEntityId));\n if (sourceImageTarget && entityType === \"imageTarget\") {\n const imageTargetComponent = world.getComponent(targetEntityId, ImageTarget);\n if (imageTargetComponent) {\n imageTargetComponent.targets = Array.isArray(sourceImageTarget.targets)\n ? sourceImageTarget.targets\n : [];\n\n imageTargetComponent.compiledTargetUrl =\n typeof sourceImageTarget.compiledTargetUrl === \"string\"\n ? sourceImageTarget.compiledTargetUrl\n : undefined;\n\n imageTargetComponent.compiledTargetDir =\n typeof sourceImageTarget.compiledTargetDir === \"string\"\n ? sourceImageTarget.compiledTargetDir\n : undefined;\n }\n }\n\n const sourceLight = asRecord(values.lightValues.get(sourceEntityId));\n if (sourceLight) {\n const lightComponent = world.getComponent(targetEntityId, LightComponent);\n const sourceValues = asRecord(sourceLight.values);\n\n if (lightComponent && sourceValues) {\n lightComponent.values = {\n ...lightComponent.values,\n ...sourceValues,\n } as typeof lightComponent.values;\n }\n }\n\n const sourceMaterial = asRecord(values.materialValues.get(sourceEntityId));\n if (sourceMaterial) {\n const materialComponent = world.getComponent(targetEntityId, MaterialComponent);\n const sourceValues = sourceMaterial.values;\n\n if (materialComponent && Array.isArray(sourceValues)) {\n materialComponent.values = sourceValues as typeof materialComponent.values;\n }\n }\n\n const sourceMeshGeometry = asRecord(values.meshGeometryValues.get(sourceEntityId));\n if (sourceMeshGeometry) {\n const meshGeometryComponent = world.getComponent(\n targetEntityId,\n MeshGeometryComponent,\n );\n\n if (meshGeometryComponent) {\n const parameters = asRecord(sourceMeshGeometry.parameters);\n if (parameters) {\n meshGeometryComponent.parameters =\n parameters as typeof meshGeometryComponent.parameters;\n }\n\n if (typeof sourceMeshGeometry.modelName === \"string\") {\n meshGeometryComponent.modelName = sourceMeshGeometry.modelName;\n }\n\n if (typeof sourceMeshGeometry.castShadow === \"boolean\") {\n meshGeometryComponent.castShadow = sourceMeshGeometry.castShadow;\n }\n\n if (typeof sourceMeshGeometry.receiveShadow === \"boolean\") {\n meshGeometryComponent.receiveShadow = sourceMeshGeometry.receiveShadow;\n }\n }\n }\n\n const sourceSelectable = asRecord(values.selectableValues.get(sourceEntityId));\n if (sourceSelectable) {\n const enabled = readBoolean(sourceSelectable.enabled);\n let selectable = world.getComponent(targetEntityId, Selectable);\n\n if (!selectable) {\n objectManagementSystem.createComponentNow(\n \"selectable\",\n world,\n targetEntityId,\n enabled ?? true,\n );\n selectable = world.getComponent(targetEntityId, Selectable);\n }\n\n if (selectable && typeof enabled === \"boolean\") {\n selectable.enabled = enabled;\n }\n }\n\n const sourcePhysics = asRecord(values.physicsValues.get(sourceEntityId));\n if (sourcePhysics) {\n // Unwrap wrapped component snapshot shape: { values: { rigidbody, collider }, rigidBody, collider }\n // Fall back to raw shape for backward compatibility with any plain-shape saves.\n const physicsValues = asRecord(sourcePhysics.values) ?? sourcePhysics;\n\n let physics = world.getComponent(targetEntityId, PhysicsComponent);\n if (!physics) {\n objectManagementSystem.createComponentNow(\n \"physics\",\n world,\n targetEntityId,\n physicsValues,\n );\n physics = world.getComponent(targetEntityId, PhysicsComponent);\n }\n\n if (physics) {\n physics.setValues({\n rigidbody: asRecord(physicsValues.rigidbody) as never ?? {},\n collider: asRecord(physicsValues.collider) as never ?? {},\n });\n }\n }\n\n const sourceAnimation = asRecord(values.animationValues.get(sourceEntityId));\n if (sourceAnimation) {\n restoreAnimationComponent(\n world,\n objectManagementSystem,\n targetEntityId,\n sourceAnimation,\n );\n }\n\n const sourceInstancedMesh = asRecord(values.instancedMeshValues.get(sourceEntityId));\n if (sourceInstancedMesh) {\n const imComponent = world.getComponent(targetEntityId, InstancedMeshComponent);\n if (imComponent) {\n if (typeof sourceInstancedMesh.meshKind === \"string\") {\n imComponent.meshKind = sourceInstancedMesh.meshKind as typeof imComponent.meshKind;\n }\n\n if (typeof sourceInstancedMesh.modelPath === \"string\") {\n imComponent.modelPath = sourceInstancedMesh.modelPath;\n }\n\n const parameters = asRecord(sourceInstancedMesh.meshParameters);\n if (parameters) {\n imComponent.meshParameters = parameters as typeof imComponent.meshParameters;\n }\n\n if (typeof sourceInstancedMesh.castShadow === \"boolean\") {\n imComponent.castShadow = sourceInstancedMesh.castShadow;\n }\n\n if (typeof sourceInstancedMesh.receiveShadow === \"boolean\") {\n imComponent.receiveShadow = sourceInstancedMesh.receiveShadow;\n }\n\n // New format: restore instanceEntityIds (IDs are old snapshot IDs —\n // remapping to live IDs is deferred to restorePostCreateComponents).\n if (Array.isArray(sourceInstancedMesh.instanceEntityIds)) {\n imComponent.instanceEntityIds =\n sourceInstancedMesh.instanceEntityIds as number[];\n }\n // Old format (migration): instanceEntityIds were already created by the\n // factory from the legacy instances[] array — nothing more to do here.\n\n // Force geometry rebuild on next system update by clearing the runtime ref.\n imComponent.instancedMesh = null;\n }\n }\n\n // InstanceSlotComponent: slotIndex is restored here; groupEntityId remapping\n // is deferred to restorePostCreateComponents (needs idMap).\n const sourceInstanceSlot = asRecord(values.instanceSlotValues.get(sourceEntityId));\n if (sourceInstanceSlot) {\n const slotComponent = world.getComponent(targetEntityId, InstanceSlotComponent);\n if (slotComponent) {\n if (typeof sourceInstanceSlot.slotIndex === \"number\") {\n slotComponent.slotIndex = sourceInstanceSlot.slotIndex;\n }\n // groupEntityId is set from the factory payload and will be remapped in postCreate.\n }\n }\n}\n","import type { EcsEntityKind } from \"../types\";\n\nexport type HydrationPayload = {\n name?: string;\n transform?: {\n position?: { x?: number; y?: number; z?: number };\n rotation?: { x?: number; y?: number; z?: number };\n scale?: { x?: number; y?: number; z?: number };\n };\n path?: string;\n options?: Record<string, unknown>;\n useWorldCamera?: boolean;\n};\n\nexport type ComponentValueMaps = {\n object3DRefValues: Map<number, unknown>;\n nameValues: Map<number, unknown>;\n transformValues: Map<number, unknown>;\n modelValues: Map<number, unknown>;\n imageValues: Map<number, unknown>;\n spriteValues: Map<number, unknown>;\n videoValues: Map<number, unknown>;\n cameraValues: Map<number, unknown>;\n environmentValues: Map<number, unknown>;\n postprocessingValues: Map<number, unknown>;\n audioValues: Map<number, unknown>;\n imageTargetValues: Map<number, unknown>;\n lightValues: Map<number, unknown>;\n materialValues: Map<number, unknown>;\n meshGeometryValues: Map<number, unknown>;\n selectableValues: Map<number, unknown>;\n physicsValues: Map<number, unknown>;\n animationValues: Map<number, unknown>;\n imageTargetAnchorValues: Map<number, unknown>;\n scriptValues: Map<number, unknown>;\n instancedMeshValues: Map<number, unknown>;\n instanceSlotValues: Map<number, unknown>;\n};\n\nexport type EcsWorldComponentSnapshot = {\n component: string;\n entries: Array<{\n entityId: number;\n value: unknown;\n }>;\n};\n\nexport type EcsWorldStateSnapshotLike = {\n selectedEntityId?: number | null;\n entities: number[];\n components: EcsWorldComponentSnapshot[];\n};\n\nexport type HydrateWorldFromSnapshotResult = {\n restoredCount: number;\n selectedEntityId: number | null;\n};\n\nexport const HYDRATABLE_ENTITY_KINDS = new Set<EcsEntityKind>([\n \"cube\",\n \"sphere\",\n \"plane\",\n \"capsule\",\n \"cylinder\",\n \"empty\",\n \"model\",\n \"image\",\n \"imageTarget\",\n \"sprite\",\n \"audio\",\n \"camera\",\n \"video\",\n \"ambientLight\",\n \"directionalLight\",\n \"pointLight\",\n \"spotLight\",\n \"areaLight\",\n \"instancedMesh\",\n \"instanceSlot\",\n]);\n","import { Object3DRef, TransformComponent } from \"../components\";\nimport {\n applyTransform,\n type ObjectManagementSystem,\n} from \"../systems/ObjectManagementSystem\";\nimport type { EcsEntityKind } from \"../types\";\nimport type { World } from \"../World\";\nimport { buildComponentValueMaps } from \"./componentValues\";\nimport { applyParentLinks } from \"./parentLinks\";\nimport { restorePostCreateComponents } from \"./postCreateComponents\";\nimport { restoreComponentState } from \"./restoreComponentState\";\nimport { asRecord, readByComponent, readString, readTransform } from \"./readers\";\nimport {\n HYDRATABLE_ENTITY_KINDS,\n type EcsWorldStateSnapshotLike,\n type HydrateWorldFromSnapshotResult,\n type HydrationPayload,\n} from \"./types\";\n\nexport type {\n EcsWorldComponentSnapshot,\n EcsWorldStateSnapshotLike,\n HydrateWorldFromSnapshotResult,\n} from \"./types\";\nexport { HYDRATABLE_ENTITY_KINDS } from \"./types\";\n\nfunction buildEntityCreationPayload(\n sourceEntityId: number,\n kind: EcsEntityKind,\n componentValues: ReturnType<typeof buildComponentValueMaps>,\n): HydrationPayload {\n const payload: HydrationPayload = {\n name: readString(componentValues.nameValues.get(sourceEntityId)) ?? undefined,\n transform: readTransform(componentValues.transformValues.get(sourceEntityId)),\n };\n\n if (kind === \"model\") {\n const model = asRecord(componentValues.modelValues.get(sourceEntityId));\n if (typeof model?.path === \"string\") {\n payload.path = model.path;\n }\n }\n\n if (kind === \"image\") {\n const image = asRecord(componentValues.imageValues.get(sourceEntityId));\n if (typeof image?.path === \"string\") {\n payload.path = image.path;\n }\n }\n\n if (kind === \"sprite\") {\n const sprite = asRecord(componentValues.spriteValues.get(sourceEntityId));\n if (typeof sprite?.path === \"string\") {\n payload.path = sprite.path;\n }\n }\n\n if (kind === \"video\") {\n const video = asRecord(componentValues.videoValues.get(sourceEntityId));\n if (typeof video?.path === \"string\") {\n payload.path = video.path;\n }\n const videoOptions = asRecord(video?.options);\n if (videoOptions) {\n payload.options = videoOptions;\n }\n }\n\n if (kind === \"audio\") {\n const audio = asRecord(componentValues.audioValues.get(sourceEntityId));\n if (typeof audio?.path === \"string\") {\n payload.path = audio.path;\n }\n const audioOptions = asRecord(audio?.options);\n if (audioOptions) {\n payload.options = audioOptions;\n }\n }\n\n if (kind === \"camera\") {\n const camera = asRecord(componentValues.cameraValues.get(sourceEntityId));\n if (camera) {\n const projection =\n camera.projection === \"orthographic\" || camera.projection === \"perspective\"\n ? camera.projection\n : undefined;\n const type =\n camera.type === \"3d\" || camera.type === \"ar\"\n ? camera.type\n : undefined;\n\n payload.options = {\n isDefault: typeof camera.isDefault === \"boolean\" ? camera.isDefault : undefined,\n projection,\n type,\n fov: typeof camera.fov === \"number\" ? camera.fov : undefined,\n near: typeof camera.near === \"number\" ? camera.near : undefined,\n far: typeof camera.far === \"number\" ? camera.far : undefined,\n left: typeof camera.left === \"number\" ? camera.left : undefined,\n right: typeof camera.right === \"number\" ? camera.right : undefined,\n top: typeof camera.top === \"number\" ? camera.top : undefined,\n bottom: typeof camera.bottom === \"number\" ? camera.bottom : undefined,\n zoom: typeof camera.zoom === \"number\" ? camera.zoom : undefined,\n };\n }\n }\n\n if (kind === \"imageTarget\") {\n const imageTarget = asRecord(componentValues.imageTargetValues.get(sourceEntityId));\n if (imageTarget) {\n payload.options = {\n targets: Array.isArray(imageTarget.targets) ? imageTarget.targets : [],\n compiledTargetUrl:\n typeof imageTarget.compiledTargetUrl === \"string\"\n ? imageTarget.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof imageTarget.compiledTargetDir === \"string\"\n ? imageTarget.compiledTargetDir\n : undefined,\n };\n }\n }\n\n if (kind === \"instancedMesh\") {\n const im = asRecord(componentValues.instancedMeshValues.get(sourceEntityId));\n if (im) {\n payload.options = {\n meshKind: typeof im.meshKind === \"string\" ? im.meshKind : \"cube\",\n modelPath: typeof im.modelPath === \"string\" ? im.modelPath : undefined,\n meshParameters: asRecord(im.meshParameters) ?? undefined,\n castShadow: typeof im.castShadow === \"boolean\" ? im.castShadow : false,\n receiveShadow: typeof im.receiveShadow === \"boolean\" ? im.receiveShadow : false,\n // New format: signal the factory to skip child entity creation.\n // Old format (instances[]): pass through for migration — factory will\n // create slot entities from the legacy InstanceTransform array.\n ...(Array.isArray(im.instanceEntityIds)\n ? { instanceEntityIds: im.instanceEntityIds }\n : Array.isArray(im.instances)\n ? { instances: im.instances }\n : {}),\n };\n }\n }\n\n if (kind === \"instanceSlot\") {\n const slot = asRecord(componentValues.instanceSlotValues.get(sourceEntityId));\n if (slot) {\n payload.options = {\n groupEntityId: typeof slot.groupEntityId === \"number\" ? slot.groupEntityId : -1,\n slotIndex: typeof slot.slotIndex === \"number\" ? slot.slotIndex : 0,\n };\n }\n }\n\n return payload;\n}\n\nfunction resolvePrimaryCameraSourceEntityId(\n snapshot: EcsWorldStateSnapshotLike,\n componentValues: ReturnType<typeof buildComponentValueMaps>,\n entityTypeValues: Map<number, unknown>,\n): number | null {\n let firstCameraSourceEntityId: number | null = null;\n\n for (const sourceEntityId of snapshot.entities) {\n const entityType = readString(entityTypeValues.get(sourceEntityId));\n if (entityType !== \"camera\") {\n continue;\n }\n\n if (firstCameraSourceEntityId === null) {\n firstCameraSourceEntityId = sourceEntityId;\n }\n\n const cameraValue = asRecord(componentValues.cameraValues.get(sourceEntityId));\n if (cameraValue?.isDefault === true) {\n return sourceEntityId;\n }\n }\n\n return firstCameraSourceEntityId;\n}\n\nfunction applyLocalTransformsAfterHierarchyRestore(world: World): void {\n const transformEntities = world.query(TransformComponent, Object3DRef);\n\n for (const entityId of transformEntities) {\n const transform = world.getComponent(entityId, TransformComponent);\n const object = world.getComponent(entityId, Object3DRef)?.object;\n if (!transform || !object) {\n continue;\n }\n\n // Parent links are already resolved, so applying transform now uses correct local space.\n applyTransform(object, transform);\n object.updateMatrixWorld(true);\n }\n}\n\nexport function hydrateWorldFromSnapshotDetailed(\n snapshot: EcsWorldStateSnapshotLike | null | undefined,\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n): HydrateWorldFromSnapshotResult {\n if (!snapshot || !snapshot.entities.length) {\n return {\n restoredCount: 0,\n selectedEntityId: null,\n };\n }\n\n const entityTypeValues = readByComponent(snapshot.components, \"EntityType\");\n const componentValues = buildComponentValueMaps(snapshot);\n const primaryCameraSourceEntityId = resolvePrimaryCameraSourceEntityId(\n snapshot,\n componentValues,\n entityTypeValues,\n );\n const idMap = new Map<number, number>();\n\n for (const sourceEntityId of snapshot.entities) {\n const entityTypeValue = entityTypeValues.get(sourceEntityId);\n const entityType = readString(entityTypeValue);\n if (!entityType || !HYDRATABLE_ENTITY_KINDS.has(entityType as EcsEntityKind)) {\n continue;\n }\n\n const kind = entityType as EcsEntityKind;\n const payload = buildEntityCreationPayload(sourceEntityId, kind, componentValues);\n\n if (kind === \"camera\" && sourceEntityId === primaryCameraSourceEntityId) {\n payload.useWorldCamera = true;\n\n const options = asRecord(payload.options);\n payload.options = {\n ...(options ?? {}),\n isDefault: true,\n };\n }\n\n const createdEntityId = objectManagementSystem.createNow(kind, world, payload);\n idMap.set(sourceEntityId, createdEntityId);\n }\n\n for (const sourceEntityId of snapshot.entities) {\n const targetEntityId = idMap.get(sourceEntityId);\n if (targetEntityId === undefined) {\n continue;\n }\n\n const entityType = readString(entityTypeValues.get(sourceEntityId));\n\n restoreComponentState(\n world,\n objectManagementSystem,\n targetEntityId,\n sourceEntityId,\n entityType,\n componentValues,\n );\n\n restorePostCreateComponents(\n world,\n objectManagementSystem,\n targetEntityId,\n sourceEntityId,\n entityType,\n componentValues,\n idMap,\n );\n }\n\n applyParentLinks(snapshot, idMap, objectManagementSystem, world);\n objectManagementSystem.reconcileSceneFromWorld(world);\n applyLocalTransformsAfterHierarchyRestore(world);\n\n const selectedEntityId =\n typeof snapshot.selectedEntityId === \"number\"\n ? (idMap.get(snapshot.selectedEntityId) ?? null)\n : null;\n\n return {\n restoredCount: idMap.size,\n selectedEntityId,\n };\n}\n\nexport function hydrateWorldFromSnapshot(\n snapshot: EcsWorldStateSnapshotLike | null | undefined,\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n): number {\n return hydrateWorldFromSnapshotDetailed(\n snapshot,\n world,\n objectManagementSystem,\n ).restoredCount;\n}\n"]}