@relu-interactives/spatial-ecs 0.11.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{System-BldSHxZV.d.cts → System-D8vm-Jvv.d.cts} +110 -3
- package/dist/{System-CADhPyQs.d.ts → System-ttkDQCrj.d.ts} +110 -3
- package/dist/{XRHandPose-D3Ab1Dfs.d.cts → XRHandPose-C97XVW2R.d.cts} +2 -41
- package/dist/{XRHandPose-BNSwd1y9.d.ts → XRHandPose-CxXtWF1y.d.ts} +2 -41
- package/dist/animation/index.cjs +33 -1
- package/dist/animation/index.cjs.map +1 -1
- package/dist/animation/index.js +1 -1
- package/dist/{chunk-TY3XCHOR.js → chunk-2DJBNWBB.js} +56 -15
- package/dist/chunk-2DJBNWBB.js.map +1 -0
- package/dist/{chunk-WWP46AEF.js → chunk-4FHJA6U4.js} +8 -4
- package/dist/chunk-4FHJA6U4.js.map +1 -0
- package/dist/{chunk-GSWC6LLD.js → chunk-GMSFEXUZ.js} +35 -3
- package/dist/chunk-GMSFEXUZ.js.map +1 -0
- package/dist/{chunk-JEPUCLZX.js → chunk-QAZCVCMP.js} +88 -27
- package/dist/chunk-QAZCVCMP.js.map +1 -0
- package/dist/{chunk-NXASMBDS.js → chunk-SM5KGNYX.js} +4 -4
- package/dist/{chunk-NXASMBDS.js.map → chunk-SM5KGNYX.js.map} +1 -1
- package/dist/{chunk-JNYPJB55.js → chunk-T7SRBLPJ.js} +24 -4
- package/dist/chunk-T7SRBLPJ.js.map +1 -0
- package/dist/components/index.cjs +21 -1
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +3 -3
- package/dist/components/index.d.ts +3 -3
- package/dist/components/index.js +1 -1
- package/dist/docs/api/Behaviour/classes/Behaviour.md +187 -46
- package/dist/docs/api/Behaviour/type-aliases/UiInteractionEvent.md +5 -5
- package/dist/docs/api/Component/classes/Component.md +7 -1
- package/dist/docs/api/components/classes/AnimationComponent.md +26 -26
- package/dist/docs/api/components/classes/AudioComponent.md +20 -19
- package/dist/docs/api/components/classes/BoneAttachmentComponent.md +65 -0
- package/dist/docs/api/components/classes/CameraComponent.md +14 -14
- package/dist/docs/api/components/classes/EntityType.md +3 -3
- package/dist/docs/api/components/classes/Environment.md +3 -3
- package/dist/docs/api/components/classes/IKComponent.md +59 -0
- package/dist/docs/api/components/classes/ImageComponent.md +7 -7
- package/dist/docs/api/components/classes/ImageTarget.md +7 -7
- package/dist/docs/api/components/classes/ImageTargetAnchor.md +4 -4
- package/dist/docs/api/components/classes/InstanceSlotComponent.md +4 -4
- package/dist/docs/api/components/classes/InstancedMeshComponent.md +10 -10
- package/dist/docs/api/components/classes/LightComponent.md +6 -6
- package/dist/docs/api/components/classes/MaterialComponent.md +14 -14
- package/dist/docs/api/components/classes/MeshComponent.md +3 -3
- package/dist/docs/api/components/classes/MeshGeometryComponent.md +9 -9
- package/dist/docs/api/components/classes/ModelComponent.md +6 -6
- package/dist/docs/api/components/classes/Name.md +3 -3
- package/dist/docs/api/components/classes/NetworkIdentityComponent.md +42 -0
- package/dist/docs/api/components/classes/NetworkSpawnerComponent.md +48 -0
- package/dist/docs/api/components/classes/NetworkTransformComponent.md +51 -0
- package/dist/docs/api/components/classes/NetworkedPropsComponent.md +47 -0
- package/dist/docs/api/components/classes/Object3DRef.md +4 -4
- package/dist/docs/api/components/classes/ParentId.md +3 -3
- package/dist/docs/api/components/classes/PhysicsComponent.md +7 -7
- package/dist/docs/api/components/classes/Postprocessing.md +3 -3
- package/dist/docs/api/components/classes/PrefabInstance.md +5 -5
- package/dist/docs/api/components/classes/PrefabNode.md +3 -3
- package/dist/docs/api/components/classes/ScriptComponent.md +5 -5
- package/dist/docs/api/components/classes/ScriptObjectComponent.md +9 -9
- package/dist/docs/api/components/classes/Selectable.md +3 -3
- package/dist/docs/api/components/classes/SelectionTransformState.md +5 -5
- package/dist/docs/api/components/classes/SpriteComponent.md +7 -7
- package/dist/docs/api/components/classes/TransformComponent.md +12 -12
- package/dist/docs/api/components/classes/UIButtonComponent.md +18 -14
- package/dist/docs/api/components/classes/UIPanelComponent.md +13 -11
- package/dist/docs/api/components/classes/UISliderComponent.md +16 -11
- package/dist/docs/api/components/classes/UITextComponent.md +14 -12
- package/dist/docs/api/components/classes/UIToggleComponent.md +12 -9
- package/dist/docs/api/components/classes/VRTeleportAreaComponent.md +6 -6
- package/dist/docs/api/components/classes/VideoComponent.md +28 -28
- package/dist/docs/api/components/classes/XRAnchorComponent.md +3 -3
- package/dist/docs/api/components/classes/XREnvironmentComponent.md +5 -5
- package/dist/docs/api/components/classes/XRHandPoseComponent.md +4 -4
- package/dist/docs/api/components/classes/XRInteractableComponent.md +28 -28
- package/dist/docs/api/components/classes/XRInteractorComponent.md +10 -10
- package/dist/docs/api/components/classes/XRInteractorSideComponent.md +3 -3
- package/dist/docs/api/components/classes/XRRigComponent.md +17 -17
- package/dist/docs/api/components/functions/createAttachPoint.md +1 -1
- package/dist/docs/api/components/functions/createHandPoseEntry.md +1 -1
- package/dist/docs/api/components/functions/defaultMaterialValue.md +1 -1
- package/dist/docs/api/components/functions/handPoseDefinitionFor.md +1 -1
- package/dist/docs/api/components/functions/normalizeBoneHold.md +25 -0
- package/dist/docs/api/components/functions/normalizeEnvironmentLighting.md +1 -1
- package/dist/docs/api/components/functions/normalizeIKChain.md +25 -0
- package/dist/docs/api/components/functions/normalizePhysicsState.md +1 -1
- package/dist/docs/api/components/functions/setModelLoadState.md +1 -1
- package/dist/docs/api/components/functions/setPhysicsLiveRef.md +1 -1
- package/dist/docs/api/components/index.md +18 -0
- package/dist/docs/api/components/type-aliases/AnimationComponentOptions.md +9 -9
- package/dist/docs/api/components/type-aliases/BoneAttachmentOptions.md +35 -0
- package/dist/docs/api/components/type-aliases/BoneHold.md +34 -0
- package/dist/docs/api/components/type-aliases/CameraComponentOptions.md +13 -13
- package/dist/docs/api/components/type-aliases/CameraProjection.md +1 -1
- package/dist/docs/api/components/type-aliases/CameraRuntimeType.md +1 -1
- package/dist/docs/api/components/type-aliases/ColliderShape.md +1 -1
- package/dist/docs/api/components/type-aliases/ColliderState.md +20 -20
- package/dist/docs/api/components/type-aliases/CubeMeshParameters.md +4 -4
- package/dist/docs/api/components/type-aliases/EditableMeshObjectKind.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentFogState.md +8 -8
- package/dist/docs/api/components/type-aliases/EnvironmentFogType.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentGradientEffect.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentLightingState.md +9 -9
- package/dist/docs/api/components/type-aliases/EnvironmentSkyboxImageProjection.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentSkyboxState.md +8 -8
- package/dist/docs/api/components/type-aliases/EnvironmentSkyboxType.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentState.md +6 -6
- package/dist/docs/api/components/type-aliases/EnvironmentToneMapping.md +1 -1
- package/dist/docs/api/components/type-aliases/IKChain.md +37 -0
- package/dist/docs/api/components/type-aliases/IKLimb.md +15 -0
- package/dist/docs/api/components/type-aliases/IKOptions.md +27 -0
- package/dist/docs/api/components/type-aliases/ImageTargetAnchorOptions.md +3 -3
- package/dist/docs/api/components/type-aliases/ImageTargetReference.md +7 -7
- package/dist/docs/api/components/type-aliases/InstanceTransform.md +13 -13
- package/dist/docs/api/components/type-aliases/InstancedMeshKind.md +1 -1
- package/dist/docs/api/components/type-aliases/LightShadowState.md +8 -8
- package/dist/docs/api/components/type-aliases/LightValueState.md +12 -12
- package/dist/docs/api/components/type-aliases/MaterialTypeValue.md +1 -1
- package/dist/docs/api/components/type-aliases/MaterialValueState.md +28 -28
- package/dist/docs/api/components/type-aliases/MeshGeometryParameters.md +1 -1
- package/dist/docs/api/components/type-aliases/MeshGeometryParametersByKind.md +7 -7
- package/dist/docs/api/components/type-aliases/ModelLoadState.md +1 -1
- package/dist/docs/api/components/type-aliases/NetValue.md +23 -0
- package/dist/docs/api/components/type-aliases/NetworkTransformOptions.md +18 -0
- package/dist/docs/api/components/type-aliases/PhysicsState.md +3 -3
- package/dist/docs/api/components/type-aliases/PlaneMeshParameters.md +3 -3
- package/dist/docs/api/components/type-aliases/PostprocessingState.md +62 -62
- package/dist/docs/api/components/type-aliases/RadiusHeightMeshParameters.md +3 -3
- package/dist/docs/api/components/type-aliases/RadiusMeshParameters.md +2 -2
- package/dist/docs/api/components/type-aliases/RigidbodyState.md +17 -17
- package/dist/docs/api/components/type-aliases/RigidbodyType.md +1 -1
- package/dist/docs/api/components/type-aliases/ScriptEntry.md +8 -8
- package/dist/docs/api/components/type-aliases/ScriptObjectComponentInput.md +1 -1
- package/dist/docs/api/components/type-aliases/ScriptObjectRuntimeState.md +1 -1
- package/dist/docs/api/components/type-aliases/TextureFilteringValue.md +1 -1
- package/dist/docs/api/components/type-aliases/TransformData.md +4 -4
- package/dist/docs/api/components/type-aliases/TransformModeValue.md +1 -1
- package/dist/docs/api/components/type-aliases/TransformSpaceValue.md +1 -1
- package/dist/docs/api/components/type-aliases/UIButtonOptions.md +21 -13
- package/dist/docs/api/components/type-aliases/UIPanelOptions.md +14 -10
- package/dist/docs/api/components/type-aliases/UISliderOptions.md +20 -10
- package/dist/docs/api/components/type-aliases/UITextOptions.md +15 -11
- package/dist/docs/api/components/type-aliases/UIToggleOptions.md +14 -8
- package/dist/docs/api/components/type-aliases/UiFollowMode.md +1 -1
- package/dist/docs/api/components/type-aliases/UiIconPosition.md +13 -0
- package/dist/docs/api/components/type-aliases/UiSliderVariant.md +13 -0
- package/dist/docs/api/components/type-aliases/UiTextAlign.md +1 -1
- package/dist/docs/api/components/type-aliases/UiTextVAlign.md +1 -1
- package/dist/docs/api/components/type-aliases/UiToggleVariant.md +13 -0
- package/dist/docs/api/components/type-aliases/VRTeleportAreaOptions.md +5 -5
- package/dist/docs/api/components/type-aliases/Vec3.md +4 -4
- package/dist/docs/api/components/type-aliases/VrTeleportShape.md +1 -1
- package/dist/docs/api/components/type-aliases/XRAnchorOptions.md +2 -2
- package/dist/docs/api/components/type-aliases/XRHandPoseOptions.md +3 -3
- package/dist/docs/api/components/type-aliases/XRInteractableOptions.md +27 -27
- package/dist/docs/api/components/type-aliases/XRInteractorOptions.md +9 -9
- package/dist/docs/api/components/type-aliases/XRRigOptions.md +16 -16
- package/dist/docs/api/components/type-aliases/XrAttachPoint.md +13 -13
- package/dist/docs/api/components/type-aliases/XrDistanceGrabBehavior.md +1 -1
- package/dist/docs/api/components/type-aliases/XrEnvironmentKind.md +1 -1
- package/dist/docs/api/components/type-aliases/XrEnvironmentOrientation.md +1 -1
- package/dist/docs/api/components/type-aliases/XrEnvironmentPhysics.md +1 -1
- package/dist/docs/api/components/type-aliases/XrGrabGesture.md +1 -1
- package/dist/docs/api/components/type-aliases/XrGrabHands.md +1 -1
- package/dist/docs/api/components/type-aliases/XrGrabReach.md +1 -1
- package/dist/docs/api/components/type-aliases/XrHandPoseEntry.md +12 -12
- package/dist/docs/api/components/type-aliases/XrHandPreset.md +1 -1
- package/dist/docs/api/components/type-aliases/XrInteractorSide.md +1 -1
- package/dist/docs/api/components/type-aliases/XrInteractorType.md +1 -1
- package/dist/docs/api/components/type-aliases/XrLocomotionMode.md +1 -1
- package/dist/docs/api/components/type-aliases/XrTrackingOrigin.md +1 -1
- package/dist/docs/api/components/type-aliases/XrTwoHandRotation.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_COLLIDER_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_LIGHTING.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_INSTANCED_MESH_PARAMETERS.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_INSTANCE_TRANSFORM.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_MESH_GEOMETRY_PARAMETERS.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_PHYSICS_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_POSE_CURLS.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_POSE_DIRECTIONS.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_POSTPROCESSING_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_RIGIDBODY_STATE.md +1 -1
- package/dist/docs/api/components/variables/MODEL_NO_PATH_MESSAGE.md +1 -1
- package/dist/docs/api/index/classes/AnimationStateMachine.md +16 -16
- package/dist/docs/api/index/classes/AnimationStateManager.md +13 -13
- package/dist/docs/api/index/classes/AnimationSystem.md +3 -3
- package/dist/docs/api/index/classes/AudioMixer.md +161 -0
- package/dist/docs/api/index/classes/AudioSystem.md +138 -4
- package/dist/docs/api/index/classes/BoneHoldSystem.md +54 -0
- package/dist/docs/api/index/classes/CameraSyncSystem.md +2 -2
- package/dist/docs/api/index/classes/EnvironmentSyncSystem.md +4 -4
- package/dist/docs/api/index/classes/HandPoseTracker.md +6 -6
- package/dist/docs/api/index/classes/IKSystem.md +98 -0
- package/dist/docs/api/index/classes/InputSystem.md +33 -33
- package/dist/docs/api/index/classes/InstancedMeshSystem.md +2 -2
- package/dist/docs/api/index/classes/LightSyncSystem.md +2 -2
- package/dist/docs/api/index/classes/MaterialSyncSystem.md +3 -3
- package/dist/docs/api/index/classes/MeshGeometrySystem.md +2 -2
- package/dist/docs/api/index/classes/ObjectManagementSystem.md +269 -14
- package/dist/docs/api/index/classes/ObjectVisibilitySystem.md +2 -2
- package/dist/docs/api/index/classes/PhysicsSyncSystem.md +4 -4
- package/dist/docs/api/index/classes/PostprocessingSyncSystem.md +4 -4
- package/dist/docs/api/index/classes/RenderSystem.md +3 -3
- package/dist/docs/api/index/classes/ScriptBehaviourSystem.md +4 -4
- package/dist/docs/api/index/classes/ScriptObject.md +10 -10
- package/dist/docs/api/index/classes/ScriptObjectSystem.md +6 -6
- package/dist/docs/api/index/classes/SlotChooser.md +59 -0
- package/dist/docs/api/index/classes/TeleportAimGate.md +4 -4
- package/dist/docs/api/index/classes/ThrowVelocityTracker.md +4 -4
- package/dist/docs/api/index/classes/TransformSyncSystem.md +2 -2
- package/dist/docs/api/index/classes/UIInteractionSystem.md +3 -3
- package/dist/docs/api/index/classes/UIPanelSystem.md +4 -4
- package/dist/docs/api/index/classes/VRTeleportAreaSystem.md +2 -2
- package/dist/docs/api/index/classes/VideoSystem.md +4 -4
- package/dist/docs/api/index/classes/World.md +168 -98
- package/dist/docs/api/index/classes/XRAnchorSystem.md +4 -4
- package/dist/docs/api/index/classes/XRControllerVisualSystem.md +4 -4
- package/dist/docs/api/index/classes/XREnvironmentSystem.md +7 -7
- package/dist/docs/api/index/classes/XRHandPoseSystem.md +5 -5
- package/dist/docs/api/index/classes/XRHitTestSystem.md +4 -4
- package/dist/docs/api/index/classes/XRHoverVisualSystem.md +4 -4
- package/dist/docs/api/index/classes/XRInputSystem.md +9 -9
- package/dist/docs/api/index/classes/XRInteractionSystem.md +18 -18
- package/dist/docs/api/index/classes/XRLocomotionSystem.md +7 -7
- package/dist/docs/api/index/classes/XRSessionSystem.md +6 -6
- package/dist/docs/api/index/classes/XRTeleportVisualSystem.md +4 -4
- package/dist/docs/api/index/functions/angularVelocityFrom.md +1 -1
- package/dist/docs/api/index/functions/applyHandMaterial.md +1 -1
- package/dist/docs/api/index/functions/applyPrefabToSnapshotInstances.md +1 -1
- package/dist/docs/api/index/functions/arcGroundCrossing.md +1 -1
- package/dist/docs/api/index/functions/buildComponentValueMaps.md +1 -1
- package/dist/docs/api/index/functions/buildNodeKeyMapsFromSnapshot.md +1 -1
- package/dist/docs/api/index/functions/buildNodeMapsFromSnapshot.md +1 -1
- package/dist/docs/api/index/functions/canonicalizeComponentValue.md +1 -1
- package/dist/docs/api/index/functions/clearModelCache.md +1 -1
- package/dist/docs/api/index/functions/clearPrefabCache.md +1 -1
- package/dist/docs/api/index/functions/cloneHandPose.md +1 -1
- package/dist/docs/api/index/functions/collectDiffPaths.md +1 -1
- package/dist/docs/api/index/functions/collectDirectPrefabDependencies.md +1 -1
- package/dist/docs/api/index/functions/collectEntitySubtree.md +1 -1
- package/dist/docs/api/index/functions/collectSnapshotSubtreeIds.md +1 -1
- package/dist/docs/api/index/functions/computeFingerCurl.md +1 -1
- package/dist/docs/api/index/functions/computeHandShape.md +1 -1
- package/dist/docs/api/index/functions/computeInstanceOverrides.md +1 -1
- package/dist/docs/api/index/functions/computePalmPose.md +1 -1
- package/dist/docs/api/index/functions/computePalmWidth.md +1 -1
- package/dist/docs/api/index/functions/computePinch.md +1 -1
- package/dist/docs/api/index/functions/computeSpread.md +1 -1
- package/dist/docs/api/index/functions/createAnimationComponent.md +1 -1
- package/dist/docs/api/index/functions/createAudioComponent.md +1 -1
- package/dist/docs/api/index/functions/createBoneAttachmentComponent.md +28 -0
- package/dist/docs/api/index/functions/createCameraComponent.md +1 -1
- package/dist/docs/api/index/functions/createEntityTypeComponent.md +1 -1
- package/dist/docs/api/index/functions/createEnvironmentComponent.md +1 -1
- package/dist/docs/api/index/functions/createGLTFLoader.md +30 -0
- package/dist/docs/api/index/functions/createHandMaterial.md +1 -1
- package/dist/docs/api/index/functions/createIKComponent.md +28 -0
- package/dist/docs/api/index/functions/createImageComponent.md +1 -1
- package/dist/docs/api/index/functions/createImageTargetAnchorComponent.md +1 -1
- package/dist/docs/api/index/functions/createImageTargetComponent.md +1 -1
- package/dist/docs/api/index/functions/createInstanceSlotComponent.md +1 -1
- package/dist/docs/api/index/functions/createInstancedMeshComponent.md +1 -1
- package/dist/docs/api/index/functions/createLightComponent.md +1 -1
- package/dist/docs/api/index/functions/createMaterialComponent.md +1 -1
- package/dist/docs/api/index/functions/createMeshComponent.md +1 -1
- package/dist/docs/api/index/functions/createMeshGeometryComponent.md +1 -1
- package/dist/docs/api/index/functions/createModelComponent.md +1 -1
- package/dist/docs/api/index/functions/createNameComponent.md +1 -1
- package/dist/docs/api/index/functions/createNetworkIdentityComponent.md +24 -0
- package/dist/docs/api/index/functions/createNetworkSpawnerComponent.md +28 -0
- package/dist/docs/api/index/functions/createNetworkTransformComponent.md +28 -0
- package/dist/docs/api/index/functions/createNetworkedPropsComponent.md +28 -0
- package/dist/docs/api/index/functions/createObject3DRefComponent.md +1 -1
- package/dist/docs/api/index/functions/createParentIdComponent.md +1 -1
- package/dist/docs/api/index/functions/createPhysicsComponent.md +1 -1
- package/dist/docs/api/index/functions/createPostprocessingComponent.md +1 -1
- package/dist/docs/api/index/functions/createScriptComponent.md +1 -1
- package/dist/docs/api/index/functions/createScriptObjectComponent.md +1 -1
- package/dist/docs/api/index/functions/createSelectableComponent.md +1 -1
- package/dist/docs/api/index/functions/createSelectionTransformStateComponent.md +1 -1
- package/dist/docs/api/index/functions/createSpriteComponent.md +1 -1
- package/dist/docs/api/index/functions/createTransformComponent.md +1 -1
- package/dist/docs/api/index/functions/createUIButtonComponent.md +1 -1
- package/dist/docs/api/index/functions/createUIPanelComponent.md +1 -1
- package/dist/docs/api/index/functions/createUISliderComponent.md +1 -1
- package/dist/docs/api/index/functions/createUITextComponent.md +1 -1
- package/dist/docs/api/index/functions/createUIToggleComponent.md +1 -1
- package/dist/docs/api/index/functions/createVRTeleportAreaComponent.md +1 -1
- package/dist/docs/api/index/functions/createVideoComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRAnchorComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRHandPoseComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRInteractableComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRInteractorComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRInteractorSideComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRRigComponent.md +1 -1
- package/dist/docs/api/index/functions/decanonicalizeComponentValue.md +1 -1
- package/dist/docs/api/index/functions/despawnPrefab.md +1 -1
- package/dist/docs/api/index/functions/encodeOverride.md +1 -1
- package/dist/docs/api/index/functions/estimateHandScale.md +1 -1
- package/dist/docs/api/index/functions/findModelBone.md +30 -0
- package/dist/docs/api/index/functions/findSnapshotRootEntityIds.md +1 -1
- package/dist/docs/api/index/functions/findTopLevelNestedRegions.md +1 -1
- package/dist/docs/api/index/functions/getHandPosePreset.md +1 -1
- package/dist/docs/api/index/functions/gripQuaternion.md +36 -0
- package/dist/docs/api/index/functions/groupOverridePaths.md +1 -1
- package/dist/docs/api/index/functions/handPoseFromCurls.md +1 -1
- package/dist/docs/api/index/functions/hydrateWorldFromSnapshot.md +1 -1
- package/dist/docs/api/index/functions/hydrateWorldFromSnapshotDetailed.md +1 -1
- package/dist/docs/api/index/functions/indexSnapshotByEntity.md +1 -1
- package/dist/docs/api/index/functions/instantiateSubtree.md +1 -1
- package/dist/docs/api/index/functions/listModelBones.md +25 -0
- package/dist/docs/api/index/functions/loadPrefab.md +1 -1
- package/dist/docs/api/index/functions/loadSharedGltf.md +1 -1
- package/dist/docs/api/index/functions/matchHandPose.md +1 -1
- package/dist/docs/api/index/functions/mergeComponentValue.md +1 -1
- package/dist/docs/api/index/functions/parseOverride.md +1 -1
- package/dist/docs/api/index/functions/parsePrefabAsset.md +1 -1
- package/dist/docs/api/index/functions/prefabFileVersionFor.md +1 -1
- package/dist/docs/api/index/functions/readXrCapabilities.md +1 -1
- package/dist/docs/api/index/functions/registerDefaultComponentFactories.md +1 -1
- package/dist/docs/api/index/functions/registerDefaultFactories.md +1 -1
- package/dist/docs/api/index/functions/remapSnapshotEntityIds.md +3 -3
- package/dist/docs/api/index/functions/resolveDracoDecoderPath.md +1 -1
- package/dist/docs/api/index/functions/restoreComponentState.md +1 -1
- package/dist/docs/api/index/functions/restorePostCreateComponents.md +1 -1
- package/dist/docs/api/index/functions/sampleTeleportArc.md +1 -1
- package/dist/docs/api/index/functions/serializeEntitySubtree.md +1 -1
- package/dist/docs/api/index/functions/setDracoDecoderPath.md +1 -1
- package/dist/docs/api/index/functions/setPrefabAssetUrlResolver.md +1 -1
- package/dist/docs/api/index/functions/setWorldQuaternion.md +26 -0
- package/dist/docs/api/index/functions/soundBankFiles.md +25 -0
- package/dist/docs/api/index/functions/spawnPrefab.md +1 -1
- package/dist/docs/api/index/functions/twoBoneIK.md +41 -0
- package/dist/docs/api/index/index.md +31 -0
- package/dist/docs/api/index/interfaces/ChromaKeyOptions.md +5 -5
- package/dist/docs/api/index/interfaces/EcsSystem.md +3 -3
- package/dist/docs/api/index/interfaces/NetworkHandle.md +180 -0
- package/dist/docs/api/index/interfaces/PostprocessingBuildContext.md +6 -6
- package/dist/docs/api/index/interfaces/PostprocessingPipeline.md +5 -5
- package/dist/docs/api/index/interfaces/RenderBackend.md +8 -8
- package/dist/docs/api/index/interfaces/SoundBankAsset.md +18 -0
- package/dist/docs/api/index/interfaces/SoundSlot.md +31 -0
- package/dist/docs/api/index/interfaces/SoundTake.md +18 -0
- package/dist/docs/api/index/interfaces/StateMachine.md +13 -13
- package/dist/docs/api/index/type-aliases/AnimationStateCallbacks.md +4 -4
- package/dist/docs/api/index/type-aliases/ApplyPrefabToSnapshotResult.md +3 -3
- package/dist/docs/api/index/type-aliases/AudioBus.md +15 -0
- package/dist/docs/api/index/type-aliases/ComponentFactory.md +1 -1
- package/dist/docs/api/index/type-aliases/ComponentValueMaps.md +50 -38
- package/dist/docs/api/index/type-aliases/EcsComponentFactoryKind.md +7 -1
- package/dist/docs/api/index/type-aliases/EcsRenderer.md +1 -1
- package/dist/docs/api/index/type-aliases/EcsWorldComponentSnapshot.md +3 -3
- package/dist/docs/api/index/type-aliases/EcsWorldStateSnapshotLike.md +4 -4
- package/dist/docs/api/index/type-aliases/ExternalRefWarning.md +5 -5
- package/dist/docs/api/index/type-aliases/HandMaterialOptions.md +4 -4
- package/dist/docs/api/index/type-aliases/HandPoseTrackerOptions.md +5 -5
- package/dist/docs/api/index/type-aliases/HydrateOptions.md +3 -3
- package/dist/docs/api/index/type-aliases/HydrateWorldFromSnapshotResult.md +4 -4
- package/dist/docs/api/index/type-aliases/InstantiateSubtreeResult.md +3 -3
- package/dist/docs/api/index/type-aliases/KeyboardKey.md +1 -1
- package/dist/docs/api/index/type-aliases/ModelBoneInfo.md +29 -0
- package/dist/docs/api/index/type-aliases/ModuleLoader.md +1 -1
- package/dist/docs/api/index/type-aliases/MouseButton.md +1 -1
- package/dist/docs/api/index/type-aliases/NestedRegion.md +5 -5
- package/dist/docs/api/index/type-aliases/NetSpawnOptions.md +41 -0
- package/dist/docs/api/index/type-aliases/NodeKeyMaps.md +5 -5
- package/dist/docs/api/index/type-aliases/NodeMaps.md +4 -4
- package/dist/docs/api/index/type-aliases/PlaySlotOptions.md +32 -0
- package/dist/docs/api/index/type-aliases/PrefabAsset.md +5 -5
- package/dist/docs/api/index/type-aliases/RemapSnapshotOptions.md +2 -2
- package/dist/docs/api/index/type-aliases/RendererKind.md +1 -1
- package/dist/docs/api/index/type-aliases/ScriptBehaviourSystemOptions.md +2 -2
- package/dist/docs/api/index/type-aliases/ScriptErrorEvent.md +9 -9
- package/dist/docs/api/index/type-aliases/ScriptErrorListener.md +1 -1
- package/dist/docs/api/index/type-aliases/ScriptErrorPhase.md +1 -1
- package/dist/docs/api/index/type-aliases/ScriptErrorReport.md +6 -6
- package/dist/docs/api/index/type-aliases/ScriptErrorSource.md +1 -1
- package/dist/docs/api/index/type-aliases/SelectionContext.md +4 -4
- package/dist/docs/api/index/type-aliases/SerializeEntitySubtreeResult.md +4 -4
- package/dist/docs/api/index/type-aliases/SpawnPrefabOptions.md +5 -5
- package/dist/docs/api/index/type-aliases/SpawnPrefabSource.md +1 -1
- package/dist/docs/api/index/type-aliases/SubtreeSnapshot.md +4 -3
- package/dist/docs/api/index/type-aliases/UiCanvasLike.md +4 -4
- package/dist/docs/api/index/type-aliases/UiColorStop.md +37 -0
- package/dist/docs/api/index/type-aliases/UiPaint.md +81 -0
- package/dist/docs/api/index/type-aliases/UiShadow.md +27 -0
- package/dist/docs/api/index/type-aliases/UiStyle.md +43 -0
- package/dist/docs/api/index/type-aliases/UiTextStyle.md +33 -0
- package/dist/docs/api/index/type-aliases/UiTokens.md +13 -0
- package/dist/docs/api/index/type-aliases/VelocitySample.md +3 -3
- package/dist/docs/api/index/type-aliases/XrCapabilities.md +9 -9
- package/dist/docs/api/index/type-aliases/XrFinger.md +1 -1
- package/dist/docs/api/index/type-aliases/XrFingerCurl.md +4 -4
- package/dist/docs/api/index/type-aliases/XrFingerTarget.md +6 -6
- package/dist/docs/api/index/type-aliases/XrHandJointName.md +1 -1
- package/dist/docs/api/index/type-aliases/XrHandJoints.md +1 -1
- package/dist/docs/api/index/type-aliases/XrHandPoseAxis.md +1 -1
- package/dist/docs/api/index/type-aliases/XrHandPoseContext.md +2 -2
- package/dist/docs/api/index/type-aliases/XrHandPoseDefinition.md +11 -11
- package/dist/docs/api/index/type-aliases/XrHandPoseDirection.md +1 -1
- package/dist/docs/api/index/type-aliases/XrHandPoseEvent.md +1 -1
- package/dist/docs/api/index/type-aliases/XrHandPoseEventDetail.md +5 -5
- package/dist/docs/api/index/type-aliases/XrHandPoseMatch.md +4 -4
- package/dist/docs/api/index/type-aliases/XrHandPoseOrientation.md +4 -4
- package/dist/docs/api/index/type-aliases/XrHandShape.md +13 -13
- package/dist/docs/api/index/type-aliases/XrHandedness.md +1 -1
- package/dist/docs/api/index/type-aliases/XrHitResult.md +3 -3
- package/dist/docs/api/index/type-aliases/XrInputKind.md +1 -1
- package/dist/docs/api/index/type-aliases/XrInputState.md +18 -18
- package/dist/docs/api/index/type-aliases/XrPalmPose.md +6 -6
- package/dist/docs/api/index/variables/ADDED_NODE_MARKER_COMPONENT.md +1 -1
- package/dist/docs/api/index/variables/ARC_GRAVITY.md +1 -1
- package/dist/docs/api/index/variables/ARC_MAX_TIME.md +1 -1
- package/dist/docs/api/index/variables/ARC_SPEED.md +1 -1
- package/dist/docs/api/index/variables/ARC_STEPS.md +1 -1
- package/dist/docs/api/index/variables/CURLED_COS.md +1 -1
- package/dist/docs/api/index/variables/DEFAULT_DIRECTION_TOLERANCE.md +1 -1
- package/dist/docs/api/index/variables/DEFAULT_ENTER_CONFIDENCE.md +1 -1
- package/dist/docs/api/index/variables/DEFAULT_EXIT_CONFIDENCE.md +1 -1
- package/dist/docs/api/index/variables/DEFAULT_LOST_GRACE_SECONDS.md +1 -1
- package/dist/docs/api/index/variables/DEFAULT_MIN_HOLD_SECONDS.md +1 -1
- package/dist/docs/api/index/variables/DEFAULT_SCRIPT_ERROR_RETRY_DELAY.md +1 -1
- package/dist/docs/api/index/variables/FALLBACK_HAND_SCALE.md +1 -1
- package/dist/docs/api/index/variables/HAND_POSE_PRESETS.md +1 -1
- package/dist/docs/api/index/variables/HAND_POSE_PRESET_IDS.md +1 -1
- package/dist/docs/api/index/variables/HYDRATABLE_ENTITY_KINDS.md +1 -1
- package/dist/docs/api/index/variables/KeyboardKeys.md +89 -89
- package/dist/docs/api/index/variables/MATCH_FALLOFF.md +1 -1
- package/dist/docs/api/index/variables/MAX_PLAUSIBLE_SPEED.md +1 -1
- package/dist/docs/api/index/variables/MAX_SAMPLE_AGE_SECONDS.md +1 -1
- package/dist/docs/api/index/variables/NODE_KEY_SEPARATOR.md +1 -1
- package/dist/docs/api/index/variables/NO_XR_CAPABILITIES.md +1 -1
- package/dist/docs/api/index/variables/OVERRIDE_DIFF_EXCLUDED_COMPONENTS.md +1 -1
- package/dist/docs/api/index/variables/OVERRIDE_ROOT_EXCLUDED_COMPONENTS.md +1 -1
- package/dist/docs/api/index/variables/PINCH_FINGERS.md +1 -1
- package/dist/docs/api/index/variables/PREFAB_FILE_VERSION.md +1 -1
- package/dist/docs/api/index/variables/PREFAB_FILE_VERSION_NESTED.md +1 -1
- package/dist/docs/api/index/variables/SCRIPT_OBJECT_ROOT_FLAG.md +1 -1
- package/dist/docs/api/index/variables/SHARED_MODEL_RESOURCE_FLAG.md +1 -1
- package/dist/docs/api/index/variables/STRAIGHT_COS.md +1 -1
- package/dist/docs/api/index/variables/VELOCITY_SAMPLES.md +1 -1
- package/dist/docs/api/index/variables/XR_FINGERS.md +1 -1
- package/dist/docs/api/index/variables/XR_HOVER_SHELL_FLAG.md +1 -1
- package/dist/docs/api/index/variables/webglBackend.md +1 -1
- package/dist/docs/api/typedoc-sidebar.json +1 -1
- package/dist/docs/api/types/type-aliases/AssetInput.md +3 -3
- package/dist/docs/api/types/type-aliases/CheckboxInput.md +3 -3
- package/dist/docs/api/types/type-aliases/ColorInput.md +1 -1
- package/dist/docs/api/types/type-aliases/ComponentInput.md +4 -4
- package/dist/docs/api/types/type-aliases/ComponentKind.md +1 -1
- package/dist/docs/api/types/type-aliases/DropdownInput.md +3 -3
- package/dist/docs/api/types/type-aliases/DropdownOption.md +3 -3
- package/dist/docs/api/types/type-aliases/EcsEntityEditorKind.md +1 -1
- package/dist/docs/api/types/type-aliases/EcsEntityKind.md +1 -1
- package/dist/docs/api/types/type-aliases/EntityId.md +1 -1
- package/dist/docs/api/types/type-aliases/EntityInput.md +3 -3
- package/dist/docs/api/types/type-aliases/FloatInput.md +1 -1
- package/dist/docs/api/types/type-aliases/IntersectionResult.md +3 -3
- package/dist/docs/api/types/type-aliases/ParentLookup.md +3 -3
- package/dist/docs/api/types/type-aliases/SelectionListener.md +1 -1
- package/dist/docs/api/types/type-aliases/SliderInput.md +5 -5
- package/dist/docs/api/types/type-aliases/TextInput.md +1 -1
- package/dist/docs/api/types/type-aliases/ToggleInput.md +1 -1
- package/dist/docs/api/types/type-aliases/Vec3.md +1 -1
- package/dist/docs/api/types/type-aliases/Vector2Input.md +3 -3
- package/dist/docs/api/types/type-aliases/Vector3Input.md +4 -4
- package/dist/docs/api/types/type-aliases/WorldEntityView.md +1 -1
- package/dist/docs/guide/bone-attachments-and-ik.md +51 -0
- package/dist/docs/guide/components/audio.md +1 -1
- package/dist/factories/index.cjs +29 -1
- package/dist/factories/index.cjs.map +1 -1
- package/dist/factories/index.d.cts +2 -2
- package/dist/factories/index.d.ts +2 -2
- package/dist/factories/index.js +4 -4
- package/dist/{index-BXjwEdNq.d.cts → index-BbrnjNXy.d.ts} +5 -3
- package/dist/{index-CVG-hREM.d.ts → index-DD7aHv0p.d.cts} +5 -3
- package/dist/{index-6pZO_gV7.d.ts → index-OgOoIpEI.d.ts} +14 -2
- package/dist/{index-BdghvXKE.d.cts → index-xyqzT0PQ.d.cts} +14 -2
- package/dist/index.cjs +174 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -9
- package/dist/index.d.ts +10 -9
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/network/index.cjs +70 -38
- package/dist/network/index.cjs.map +1 -1
- package/dist/network/index.d.cts +2 -2
- package/dist/network/index.d.ts +2 -2
- package/dist/network/index.js +4 -4
- package/dist/systems/index.cjs +171 -13
- package/dist/systems/index.cjs.map +1 -1
- package/dist/systems/index.d.cts +2 -2
- package/dist/systems/index.d.ts +2 -2
- package/dist/systems/index.js +5 -5
- package/dist/types.d.cts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/webgpu/index.d.ts +2 -2
- package/dist/worldSnapshotUtils.d.cts +1 -1
- package/dist/worldSnapshotUtils.d.ts +1 -1
- package/package.json +2 -1
- package/dist/chunk-GSWC6LLD.js.map +0 -1
- package/dist/chunk-JEPUCLZX.js.map +0 -1
- package/dist/chunk-JNYPJB55.js.map +0 -1
- package/dist/chunk-TY3XCHOR.js.map +0 -1
- package/dist/chunk-WWP46AEF.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../core/systems/scriptShared.ts","../core/prefab/collectEntitySubtree.ts","../core/hydration/readers.ts","../core/hydration/componentValues.ts","../core/hydration/postCreateComponents.ts","../core/hydration/animation.ts","../core/hydration/restoreComponentState.ts","../core/hydration/types.ts","../core/hydration/parentLinks.ts","../core/hydration/hydrateWorld.ts","../core/prefab/nodeKeys.ts","../core/prefab/overrides.ts","../core/prefab/instantiateSubtree.ts","../core/prefab/types.ts","../core/prefab/spawnPrefab.ts","../core/Behaviour.ts"],"names":["options","asRecord","clone"],"mappings":"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","file":"chunk-WWP46AEF.js","sourcesContent":["import type { Component } from \"../Component\";\nimport { ScriptComponent } from \"../components/ScriptComponent\";\nimport type {\n ScriptErrorPhase,\n ScriptErrorReport,\n} from \"../scriptErrors\";\nimport type { World } from \"../World\";\n\n/**\n * Shared infrastructure for the script-hosting systems (`ScriptBehaviourSystem`\n * and `ScriptObjectSystem`): module loading, class resolution, data-envelope\n * merge/resolve/serialize. Extracted verbatim from `ScriptBehaviourSystem` so\n * both systems stay behaviourally identical for the parts they share.\n */\n\n/** Resolves a script URL to its ES module namespace. */\nexport type ModuleLoader = (\n scriptUrl: string,\n) => Promise<Record<string, unknown>>;\n\n/** Default loader — a plain dynamic import (used outside the editor/runtime). */\nexport async function defaultModuleLoader(\n scriptUrl: string,\n): Promise<Record<string, unknown>> {\n return (await import(/* webpackIgnore: true */ scriptUrl)) as Record<\n string,\n unknown\n >;\n}\n\nfunction sanitizeErrorText(value: string): string {\n return value\n .replace(/localasset:\\/\\/[^/]+\\//g, \"localasset://\")\n .replace(/\\/Users\\/[^\\s)]+/g, \"[local path]\");\n}\n\n/** Strip local paths / localasset hosts from an error before surfacing it. */\nexport function toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return sanitizeErrorText(error.message);\n }\n if (typeof error === \"string\" && error) {\n return sanitizeErrorText(error);\n }\n return \"Unknown script error.\";\n}\n\n/** The error's stack trace (sanitized like {@link toErrorMessage}), when it has one. */\nexport function toErrorStack(error: unknown): string | undefined {\n const stack =\n error && typeof error === \"object\"\n ? (error as { stack?: unknown }).stack\n : undefined;\n return typeof stack === \"string\" && stack.length > 0\n ? sanitizeErrorText(stack)\n : undefined;\n}\n\nconst SCRIPT_PHASE = Symbol(\"scriptErrorPhase\");\n\ntype PhasedError = { [SCRIPT_PHASE]: ScriptErrorPhase; error: unknown };\n\n/** Wrap a thrown value with the lifecycle phase it came from. */\nexport function withScriptPhase(phase: ScriptErrorPhase, error: unknown): PhasedError {\n if (error && typeof error === \"object\" && SCRIPT_PHASE in error) {\n return error as PhasedError;\n }\n return { [SCRIPT_PHASE]: phase, error };\n}\n\n/** Unwrap {@link withScriptPhase}; plain errors get `fallback`. */\nexport function readScriptPhase(\n thrown: unknown,\n fallback: ScriptErrorPhase,\n): { phase: ScriptErrorPhase; error: unknown } {\n if (thrown && typeof thrown === \"object\" && SCRIPT_PHASE in thrown) {\n const phased = thrown as PhasedError;\n return { phase: phased[SCRIPT_PHASE], error: phased.error };\n }\n return { phase: fallback, error: thrown };\n}\n\n/**\n * Route a script error to `world.reportScriptError` (deduplicated log +\n * `onScriptError` listeners). Falls back to a plain `console.error` for\n * world stand-ins that lack the method.\n */\nexport function reportScriptError(\n world: World,\n report: ScriptErrorReport,\n error: unknown,\n): void {\n const reporter = (world as {\n reportScriptError?: (report: ScriptErrorReport, error: unknown) => boolean;\n }).reportScriptError;\n if (typeof reporter === \"function\") {\n reporter.call(world, report, error);\n return;\n }\n console.error(\n `[spatial-ecs] ${report.className || \"Script\"} failed in ${report.phase} (entity ${report.entityId}):`,\n error,\n );\n}\n\n/**\n * Report an error thrown by a Behaviour hook (`onSelect`, `onUiPress`,\n * `onGrab`, ...). Looks the instance up on the entity's `ScriptComponent` to\n * recover its script URL and class name.\n */\nexport function reportBehaviourHookError(\n world: World,\n entityId: number,\n instance: unknown,\n hook: string,\n error: unknown,\n): void {\n let scriptUrl = \"\";\n let className =\n (instance as { constructor?: { name?: string } } | null)?.constructor?.name ?? \"\";\n\n const script =\n typeof (world as { getComponent?: unknown }).getComponent === \"function\"\n ? world.getComponent(entityId, ScriptComponent)\n : undefined;\n if (script?.scriptInstances && Array.isArray(script.entries)) {\n // Instances are keyed by index into the entries that name a script, the\n // same filtered list `ScriptBehaviourSystem` iterates.\n const entries = script.entries.filter(\n (entry) => entry && (entry.className || entry.scriptUrl),\n );\n for (const [index, live] of script.scriptInstances) {\n if (live !== instance) continue;\n const entry = entries[index];\n if (entry) {\n scriptUrl = typeof entry.scriptUrl === \"string\" ? entry.scriptUrl : \"\";\n className =\n typeof entry.className === \"string\" && entry.className\n ? entry.className\n : className;\n }\n break;\n }\n }\n\n reportScriptError(\n world,\n { entityId, scriptUrl, className, phase: hook, source: \"behaviour\" },\n error,\n );\n}\n\n/**\n * Resolve a script class from a loaded module: named export → `default` →\n * static marker fallback. The `instanceof baseClass` check can fail when a\n * bundler ships a second copy of the package into the script blob (identity\n * split); the inherited static marker (e.g. `__reluScriptObjectClass`) survives\n * that, so it's the fallback.\n */\nexport function resolveScriptCtor<TCtor extends abstract new (...args: never) => unknown>(\n moduleValue: Record<string, unknown>,\n className: string,\n options: { baseClass: Function; markerKey: string },\n): TCtor | null {\n const named = moduleValue[className];\n const fallback = moduleValue.default;\n const candidate =\n typeof named === \"function\"\n ? named\n : typeof fallback === \"function\"\n ? fallback\n : null;\n\n if (!candidate) {\n return null;\n }\n\n if (!(candidate.prototype instanceof options.baseClass)) {\n const marker = (candidate as unknown as Record<string, unknown>)[\n options.markerKey\n ];\n if (!marker) {\n return null;\n }\n }\n\n return candidate as unknown as TCtor;\n}\n\nexport function normalizeScriptData(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction mergeValueByDefaultShape(\n defaultValue: unknown,\n currentValue: unknown,\n): unknown {\n if (Array.isArray(defaultValue)) {\n return Array.isArray(currentValue) ? currentValue : defaultValue;\n }\n\n if (isPlainObject(defaultValue)) {\n if (!isPlainObject(currentValue)) {\n return defaultValue;\n }\n\n const next: Record<string, unknown> = {};\n for (const key of Object.keys(defaultValue)) {\n next[key] = mergeValueByDefaultShape(defaultValue[key], currentValue[key]);\n }\n return next;\n }\n\n if (typeof defaultValue === \"number\") {\n return typeof currentValue === \"number\" ? currentValue : defaultValue;\n }\n if (typeof defaultValue === \"string\") {\n return typeof currentValue === \"string\" ? currentValue : defaultValue;\n }\n if (typeof defaultValue === \"boolean\") {\n return typeof currentValue === \"boolean\" ? currentValue : defaultValue;\n }\n if (defaultValue === null) {\n return currentValue !== undefined ? currentValue : null;\n }\n\n return typeof currentValue === \"undefined\" ? defaultValue : currentValue;\n}\n\n/** Merge persisted `current` data over the script's `defaults`, shape-aware. */\nexport function mergeDataByCurrentDefaults(\n defaults: Record<string, unknown>,\n current: Record<string, unknown>,\n): Record<string, unknown> {\n const next: Record<string, unknown> = {};\n for (const key of Object.keys(defaults)) {\n next[key] = mergeValueByDefaultShape(defaults[key], current[key]);\n }\n return next;\n}\n\nfunction isRawEntityInput(\n value: unknown,\n): value is { type: string; value: number | null } {\n if (!isPlainObject(value)) return false;\n return (value as Record<string, unknown>).type === \"entity\";\n}\n\nfunction isRawComponentInput(value: unknown): boolean {\n if (!isPlainObject(value)) return false;\n return (value as Record<string, unknown>).type === \"component\";\n}\n\nfunction findComponentByKind(\n components: Component[],\n componentKind: string,\n): Component | null {\n return (\n components.find(\n (c) =>\n c.constructor.name === `${componentKind}Component` ||\n c.constructor.name === componentKind,\n ) ?? null\n );\n}\n\n/** Replace raw EntityInput/ComponentInput envelopes with live views for the script. */\nexport function resolveInputData(\n world: World,\n rawData: Record<string, unknown>,\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = { ...rawData };\n for (const [key, value] of Object.entries(rawData)) {\n if (isRawEntityInput(value)) {\n const entityId = (value as { type: string; value: number | null }).value;\n const entityView =\n typeof entityId === \"number\" ? world.getEntityById(entityId) : null;\n resolved[key] = { ...(value as object), value: entityView };\n } else if (isRawComponentInput(value)) {\n const ref = (value as Record<string, unknown>).value;\n if (\n isPlainObject(ref) &&\n typeof (ref as Record<string, unknown>).entityId === \"number\" &&\n typeof (ref as Record<string, unknown>).componentKind === \"string\"\n ) {\n const { entityId: refEntityId, componentKind } = ref as {\n entityId: number;\n componentKind: string;\n };\n const entityView = world.getEntityById(refEntityId);\n const component = entityView\n ? findComponentByKind(entityView.components, componentKind)\n : null;\n resolved[key] = { ...(value as object), value: component };\n }\n }\n }\n return resolved;\n}\n\n/** Re-serialize instance data for storage, preserving raw entity/component refs. */\nexport function serializeDataForStorage(\n rawData: Record<string, unknown>,\n instanceData: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...instanceData };\n for (const [key, rawValue] of Object.entries(rawData)) {\n if (isRawEntityInput(rawValue) || isRawComponentInput(rawValue)) {\n result[key] = rawValue;\n }\n }\n return result;\n}\n","import { ParentId } from \"../components\";\nimport type { EntityId } from \"../types\";\nimport type { World } from \"../World\";\n\n/**\n * Collect the given roots plus every descendant, BFS parent-first, using the\n * `ParentId` component edges. Parent-first ordering matters: serialization\n * renumbers ids in this order and instantiation creates entities in file\n * order, so parents always exist before their children are linked.\n */\nexport function collectEntitySubtree(\n world: World,\n rootIds: EntityId[],\n): EntityId[] {\n // Build a parent → children index once instead of scanning per node.\n const childrenByParent = new Map<EntityId, EntityId[]>();\n for (const entityId of world.query(ParentId)) {\n const parentId = world.getComponent(entityId, ParentId)?.value;\n if (parentId === null || parentId === undefined) {\n continue;\n }\n const siblings = childrenByParent.get(parentId);\n if (siblings) {\n siblings.push(entityId);\n } else {\n childrenByParent.set(parentId, [entityId]);\n }\n }\n\n const ordered: EntityId[] = [];\n const seen = new Set<EntityId>();\n const queue = [...rootIds];\n\n while (queue.length > 0) {\n const entityId = queue.shift() as EntityId;\n if (seen.has(entityId)) {\n continue;\n }\n seen.add(entityId);\n ordered.push(entityId);\n\n const children = childrenByParent.get(entityId);\n if (children) {\n queue.push(...children.sort((a, b) => a - b));\n }\n }\n\n return ordered;\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 scriptObjectValues: readByComponent(\n snapshot.components,\n \"ScriptObjectComponent\",\n ),\n xrRigValues: readByComponent(snapshot.components, \"XRRigComponent\"),\n vrTeleportAreaValues: readByComponent(\n snapshot.components,\n \"VRTeleportAreaComponent\",\n ),\n xrInteractableValues: readByComponent(\n snapshot.components,\n \"XRInteractableComponent\",\n ),\n xrInteractorValues: readByComponent(\n snapshot.components,\n \"XRInteractorComponent\",\n ),\n xrHandPoseValues: readByComponent(\n snapshot.components,\n \"XRHandPoseComponent\",\n ),\n xrAnchorValues: readByComponent(snapshot.components, \"XRAnchorComponent\"),\n boneAttachmentValues: readByComponent(snapshot.components, \"BoneAttachmentComponent\"),\n ikValues: readByComponent(snapshot.components, \"IKComponent\"),\n networkIdentityValues: readByComponent(snapshot.components, \"NetworkIdentityComponent\"),\n networkTransformValues: readByComponent(snapshot.components, \"NetworkTransformComponent\"),\n networkedPropsValues: readByComponent(snapshot.components, \"NetworkedPropsComponent\"),\n networkSpawnerValues: readByComponent(snapshot.components, \"NetworkSpawnerComponent\"),\n uiPanelValues: readByComponent(snapshot.components, \"UIPanelComponent\"),\n uiTextValues: readByComponent(snapshot.components, \"UITextComponent\"),\n uiButtonValues: readByComponent(snapshot.components, \"UIButtonComponent\"),\n uiToggleValues: readByComponent(snapshot.components, \"UIToggleComponent\"),\n uiSliderValues: readByComponent(snapshot.components, \"UISliderComponent\"),\n xrInteractorSideValues: readByComponent(\n snapshot.components,\n \"XRInteractorSideComponent\",\n ),\n instancedMeshValues: readByComponent(snapshot.components, \"InstancedMeshComponent\"),\n instanceSlotValues: readByComponent(snapshot.components, \"InstanceSlotComponent\"),\n prefabNodeValues: readByComponent(snapshot.components, \"PrefabNode\"),\n prefabInstanceValues: readByComponent(snapshot.components, \"PrefabInstance\"),\n };\n}\n","import {\n InstancedMeshComponent,\n Object3DRef,\n ScriptComponent,\n ScriptObjectComponent,\n VRTeleportAreaComponent,\n XRInteractorComponent,\n XRInteractorSideComponent,\n XRHandPoseComponent,\n UIButtonComponent,\n UIPanelComponent,\n UISliderComponent,\n UITextComponent,\n UIToggleComponent,\n XRAnchorComponent,\n BoneAttachmentComponent,\n IKComponent,\n NetworkedPropsComponent,\n NetworkIdentityComponent,\n NetworkSpawnerComponent,\n NetworkTransformComponent,\n normalizeIKChain,\n XRInteractableComponent,\n XRRigComponent,\n} from \"../components\";\nimport { createHandPoseEntry } from \"../components/XRHandPose\";\nimport { createAttachPoint } from \"../components/XRInteractable\";\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\";\nimport { normalizeUiStyle, normalizeUiTokens } from \"../ui/uiStyle\";\n\n/** Widget fields that stay absent until authored, by type. */\nconst OPTIONAL_UI_FIELDS: Record<string, string> = {\n pixelDensity: \"number\",\n icon: \"string\",\n iconPosition: \"string\",\n variant: \"string\",\n step: \"number\",\n readOnly: \"boolean\",\n};\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 // Skip only the ScriptComponent, never the rest of this pass. This was a\n // bare `return`, which exited the whole function — so an entity carrying a\n // Script component with no script picked yet (the state right after adding\n // one) silently lost every component restored below it, XR included.\n if (entries.length) {\n world.addComponent(targetEntityId, new ScriptComponent(entries));\n }\n }\n\n // Restore ScriptObjectComponent.data (with entity-ref remapping). The factory\n // already created the component with scriptUrl/className/enabled; runtimeState\n // is intentionally left \"idle\" so ScriptObjectSystem loads cleanly.\n const sourceScriptObject = asRecord(values.scriptObjectValues.get(sourceEntityId));\n if (sourceScriptObject) {\n const soc = world.getComponent(targetEntityId, ScriptObjectComponent);\n const data = asRecord(sourceScriptObject.data);\n if (soc && data) {\n soc.data = remapEntityRefsInScriptData(data, idMap);\n }\n }\n\n // Restore the XR authoring components' saved values.\n //\n // The entity factories seed these with DEFAULTS at create time (they only see\n // the create payload, not the snapshot), so without this pass a saved\n // teleport area would come back as a fresh 10×10 plane and the author's\n // width/depth/shape edits would be silently discarded on reload.\n {\n const sourceXrRig = asRecord(values.xrRigValues.get(sourceEntityId));\n const rig = world.getComponent(targetEntityId, XRRigComponent);\n if (sourceXrRig && rig) {\n if (typeof sourceXrRig.locomotion === \"string\") {\n rig.locomotion = sourceXrRig.locomotion as typeof rig.locomotion;\n }\n if (typeof sourceXrRig.moveSpeed === \"number\") {\n rig.moveSpeed = sourceXrRig.moveSpeed;\n }\n if (typeof sourceXrRig.snapTurn === \"boolean\") {\n rig.snapTurn = sourceXrRig.snapTurn;\n }\n if (typeof sourceXrRig.snapTurnDegrees === \"number\") {\n rig.snapTurnDegrees = sourceXrRig.snapTurnDegrees;\n }\n if (typeof sourceXrRig.teleportArcColor === \"string\") {\n rig.teleportArcColor = sourceXrRig.teleportArcColor;\n }\n if (typeof sourceXrRig.teleportArcInvalidColor === \"string\") {\n rig.teleportArcInvalidColor = sourceXrRig.teleportArcInvalidColor;\n }\n if (typeof sourceXrRig.teleportArcThickness === \"number\") {\n rig.teleportArcThickness = sourceXrRig.teleportArcThickness;\n }\n if (typeof sourceXrRig.fallbackEyeHeight === \"number\") {\n rig.fallbackEyeHeight = sourceXrRig.fallbackEyeHeight;\n }\n\n // Mixed reality. `passthrough` decides whether the entry button requests\n // an AR or a VR session, so losing it here would silently downgrade a\n // saved MR project to plain VR on reload.\n if (typeof sourceXrRig.passthrough === \"boolean\") {\n rig.passthrough = sourceXrRig.passthrough;\n }\n if (typeof sourceXrRig.depthOcclusion === \"boolean\") {\n rig.depthOcclusion = sourceXrRig.depthOcclusion;\n }\n if (typeof sourceXrRig.environmentPhysics === \"string\") {\n rig.environmentPhysics =\n sourceXrRig.environmentPhysics as typeof rig.environmentPhysics;\n }\n if (typeof sourceXrRig.environmentDebug === \"boolean\") {\n rig.environmentDebug = sourceXrRig.environmentDebug;\n }\n if (typeof sourceXrRig.hitTest === \"boolean\") {\n rig.hitTest = sourceXrRig.hitTest;\n }\n if (typeof sourceXrRig.anchors === \"boolean\") {\n rig.anchors = sourceXrRig.anchors;\n }\n }\n }\n\n {\n const sourceArea = asRecord(values.vrTeleportAreaValues.get(sourceEntityId));\n const area = world.getComponent(targetEntityId, VRTeleportAreaComponent);\n if (sourceArea && area) {\n if (typeof sourceArea.enabled === \"boolean\") {\n area.enabled = sourceArea.enabled;\n }\n if (typeof sourceArea.shape === \"string\") {\n // \"cylinder\" is the pre-release alias for \"circle\".\n area.shape =\n sourceArea.shape === \"cylinder\"\n ? \"circle\"\n : (sourceArea.shape as typeof area.shape);\n }\n if (typeof sourceArea.width === \"number\") area.width = sourceArea.width;\n if (typeof sourceArea.depth === \"number\") area.depth = sourceArea.depth;\n }\n }\n\n {\n const sourceInteractable = asRecord(\n values.xrInteractableValues.get(sourceEntityId),\n );\n // CREATED HERE WHEN ABSENT. No entity factory produces an\n // XRInteractableComponent — it is only ever added to an existing object —\n // so hydration is the only thing that can put it back. Merely restoring\n // values onto an already-present component silently dropped grabbing from\n // every loaded scene: it worked in the editor, where the component is live\n // in memory, and vanished at runtime.\n let interactable = world.getComponent(\n targetEntityId,\n XRInteractableComponent,\n );\n if (sourceInteractable && !interactable) {\n interactable = new XRInteractableComponent();\n world.addComponent(targetEntityId, interactable);\n }\n if (sourceInteractable && interactable) {\n if (typeof sourceInteractable.enabled === \"boolean\") {\n interactable.enabled = sourceInteractable.enabled;\n }\n if (typeof sourceInteractable.grabbable === \"boolean\") {\n interactable.grabbable = sourceInteractable.grabbable;\n }\n if (typeof sourceInteractable.pointable === \"boolean\") {\n interactable.pointable = sourceInteractable.pointable;\n }\n if (typeof sourceInteractable.grabReach === \"string\") {\n interactable.grabReach =\n sourceInteractable.grabReach as typeof interactable.grabReach;\n }\n if (typeof sourceInteractable.distanceBehavior === \"string\") {\n interactable.distanceBehavior =\n sourceInteractable.distanceBehavior as typeof interactable.distanceBehavior;\n }\n if (typeof sourceInteractable.grabGesture === \"string\") {\n interactable.grabGesture =\n sourceInteractable.grabGesture as typeof interactable.grabGesture;\n }\n if (typeof sourceInteractable.grabRadius === \"number\") {\n interactable.grabRadius = sourceInteractable.grabRadius;\n }\n if (typeof sourceInteractable.grabHands === \"string\") {\n interactable.grabHands =\n sourceInteractable.grabHands as typeof interactable.grabHands;\n }\n if (typeof sourceInteractable.twoHandRotation === \"string\") {\n interactable.twoHandRotation =\n sourceInteractable.twoHandRotation as typeof interactable.twoHandRotation;\n }\n if (typeof sourceInteractable.allowTwoHandScale === \"boolean\") {\n interactable.allowTwoHandScale = sourceInteractable.allowTwoHandScale;\n }\n if (typeof sourceInteractable.minScale === \"number\") {\n interactable.minScale = sourceInteractable.minScale;\n }\n if (typeof sourceInteractable.maxScale === \"number\") {\n interactable.maxScale = sourceInteractable.maxScale;\n }\n if (Array.isArray(sourceInteractable.attachPoints)) {\n // Rebuilt through the factory so a point saved by an older editor gains\n // any field added since, instead of arriving half-populated.\n interactable.attachPoints = sourceInteractable.attachPoints\n .map((point) => asRecord(point))\n .filter(\n (point): point is Record<string, unknown> =>\n point !== null && typeof point.id === \"string\",\n )\n .map((point) =>\n createAttachPoint(\n point as unknown as Parameters<typeof createAttachPoint>[0],\n ),\n );\n }\n // `throwOnRelease`/`throwStrength` are the pre-0.3.11 names, still present\n // in scenes saved by a published build — read them as a fallback so those\n // projects keep their authored values.\n if (typeof sourceInteractable.applyVelocityOnRelease === \"boolean\") {\n interactable.applyVelocityOnRelease =\n sourceInteractable.applyVelocityOnRelease;\n } else if (typeof sourceInteractable.throwOnRelease === \"boolean\") {\n interactable.applyVelocityOnRelease = sourceInteractable.throwOnRelease;\n }\n if (typeof sourceInteractable.velocityScale === \"number\") {\n interactable.velocityScale = sourceInteractable.velocityScale;\n } else if (typeof sourceInteractable.throwStrength === \"number\") {\n interactable.velocityScale = sourceInteractable.throwStrength;\n }\n const grabPos = asRecord(sourceInteractable.grabOffsetPosition);\n if (grabPos) {\n interactable.grabOffsetPosition = {\n x: typeof grabPos.x === \"number\" ? grabPos.x : 0,\n y: typeof grabPos.y === \"number\" ? grabPos.y : 0,\n z: typeof grabPos.z === \"number\" ? grabPos.z : 0,\n };\n }\n const grabRot = asRecord(sourceInteractable.grabOffsetRotation);\n if (grabRot) {\n interactable.grabOffsetRotation = {\n x: typeof grabRot.x === \"number\" ? grabRot.x : 0,\n y: typeof grabRot.y === \"number\" ? grabRot.y : 0,\n z: typeof grabRot.z === \"number\" ? grabRot.z : 0,\n };\n }\n if (typeof sourceInteractable.hoverBehavior === \"string\") {\n interactable.hoverBehavior =\n sourceInteractable.hoverBehavior as typeof interactable.hoverBehavior;\n } else if (sourceInteractable.highlightOnHover === false) {\n // Migration: the old boolean is the only hover setting older scenes\n // carry, and turning it off meant \"no feedback\".\n interactable.hoverBehavior = \"none\";\n }\n if (typeof sourceInteractable.hoverColor === \"string\") {\n interactable.hoverColor = sourceInteractable.hoverColor;\n }\n if (typeof sourceInteractable.hoverScale === \"number\") {\n interactable.hoverScale = sourceInteractable.hoverScale;\n }\n }\n }\n\n {\n const sourceHandPose = asRecord(\n values.xrHandPoseValues.get(sourceEntityId),\n );\n // Created here when absent, for the same reason as XRInteractableComponent\n // above: no entity factory makes one, so hydration is its only way back.\n let handPose = world.getComponent(targetEntityId, XRHandPoseComponent);\n if (sourceHandPose && !handPose) {\n handPose = new XRHandPoseComponent();\n world.addComponent(targetEntityId, handPose);\n }\n if (sourceHandPose && handPose) {\n if (typeof sourceHandPose.enabled === \"boolean\") {\n handPose.enabled = sourceHandPose.enabled;\n }\n if (Array.isArray(sourceHandPose.poses)) {\n // Rebuilt through the factory so a pose saved by an older editor gains\n // any fields added since, rather than arriving half-populated.\n handPose.poses = sourceHandPose.poses\n .map((entry) => asRecord(entry))\n .filter(\n (entry): entry is Record<string, unknown> =>\n entry !== null && typeof entry.id === \"string\",\n )\n .map((entry) =>\n createHandPoseEntry(\n entry as unknown as Parameters<typeof createHandPoseEntry>[0],\n ),\n );\n }\n }\n }\n\n {\n const sourceAnchor = asRecord(values.xrAnchorValues.get(sourceEntityId));\n // Created here when absent, for the same reason as XRInteractableComponent\n // and XRHandPoseComponent: no entity factory makes one — it is only ever\n // added to an arbitrary object — so hydration is its only way back. Without\n // this an anchored object authors correctly in the editor and then quietly\n // drifts off its real-world surface at runtime.\n let anchor = world.getComponent(targetEntityId, XRAnchorComponent);\n if (sourceAnchor && !anchor) {\n anchor = new XRAnchorComponent();\n world.addComponent(targetEntityId, anchor);\n }\n if (sourceAnchor && anchor) {\n if (typeof sourceAnchor.enabled === \"boolean\") {\n anchor.enabled = sourceAnchor.enabled;\n }\n }\n }\n\n // ── Bone attachments and IK ────────────────────────────────────────────────\n // Both CREATE-IF-MISSING: no entity factory makes them (they are added to an\n // arbitrary object), so without this a sword attached to a hand in the\n // editor would come back at runtime as a loose child of the character.\n {\n const source = asRecord(values.boneAttachmentValues.get(sourceEntityId));\n if (source) {\n let attachment = world.getComponent(targetEntityId, BoneAttachmentComponent);\n if (!attachment) {\n attachment = new BoneAttachmentComponent();\n world.addComponent(targetEntityId, attachment);\n }\n if (typeof source.bone === \"string\") attachment.bone = source.bone;\n if (typeof source.humanoid === \"string\" || source.humanoid === null) attachment.humanoid = source.humanoid;\n if (typeof source.compensateScale === \"boolean\") attachment.compensateScale = source.compensateScale;\n if (typeof source.enabled === \"boolean\") attachment.enabled = source.enabled;\n }\n }\n // Addable to anything, so no entity factory brings these back.\n if (\n values.networkIdentityValues.has(sourceEntityId) &&\n !world.getComponent(targetEntityId, NetworkIdentityComponent)\n ) {\n world.addComponent(targetEntityId, new NetworkIdentityComponent());\n }\n {\n const source = asRecord(values.networkTransformValues.get(sourceEntityId));\n if (source) {\n let net = world.getComponent(targetEntityId, NetworkTransformComponent);\n if (!net) {\n net = new NetworkTransformComponent();\n world.addComponent(targetEntityId, net);\n }\n if (typeof source.enabled === \"boolean\") net.enabled = source.enabled;\n if (typeof source.sendRate === \"number\") net.sendRate = source.sendRate;\n if (typeof source.interpolationMs === \"number\") {\n net.interpolationMs = source.interpolationMs;\n }\n if (typeof source.syncRotation === \"boolean\") {\n net.syncRotation = source.syncRotation;\n }\n if (typeof source.teleportDistance === \"number\") {\n net.teleportDistance = source.teleportDistance;\n }\n }\n }\n {\n const source = asRecord(values.networkedPropsValues.get(sourceEntityId));\n if (source) {\n let props = world.getComponent(targetEntityId, NetworkedPropsComponent);\n if (!props) {\n props = new NetworkedPropsComponent();\n world.addComponent(targetEntityId, props);\n }\n props.values = (asRecord(source.values) ?? {}) as NetworkedPropsComponent[\"values\"];\n }\n }\n {\n const source = asRecord(values.networkSpawnerValues.get(sourceEntityId));\n if (source) {\n let spawner = world.getComponent(targetEntityId, NetworkSpawnerComponent);\n if (!spawner) {\n spawner = new NetworkSpawnerComponent();\n world.addComponent(targetEntityId, spawner);\n }\n if (typeof source.playerPrefab === \"string\") {\n spawner.playerPrefab = source.playerPrefab;\n }\n if (typeof source.spawnRadius === \"number\") {\n spawner.spawnRadius = source.spawnRadius;\n }\n }\n }\n {\n const source = asRecord(values.ikValues.get(sourceEntityId));\n if (source) {\n let ik = world.getComponent(targetEntityId, IKComponent);\n if (!ik) {\n ik = new IKComponent();\n world.addComponent(targetEntityId, ik);\n }\n if (typeof source.enabled === \"boolean\") ik.enabled = source.enabled;\n if (Array.isArray(source.chains)) {\n const mapId = (v: unknown) => (typeof v === \"number\" ? (idMap.get(v) ?? v) : null);\n ik.chains = source.chains\n .map((raw) => asRecord(raw))\n .filter((c): c is Record<string, unknown> => !!c && typeof c.limb === \"string\")\n .map((c) =>\n normalizeIKChain({\n ...(c as Partial<IKComponent[\"chains\"][number]>),\n limb: c.limb as IKComponent[\"chains\"][number][\"limb\"],\n target: mapId(c.target),\n pole: mapId(c.pole),\n }),\n );\n }\n }\n }\n\n // ── Spatial UI widgets ─────────────────────────────────────────────────────\n // All five are primitive bags plus an optional style, restored by a shared copier. Each is\n // CREATE-IF-MISSING: their entity factories do make them, but a widget\n // component added to an arbitrary object (the grabbable-cube trap) would\n // otherwise author fine and vanish at runtime.\n {\n const restoreUi = <T extends object>(\n map: Map<number, unknown>,\n Ctor: new () => T,\n existing: T | undefined,\n ): void => {\n const source = asRecord(map.get(sourceEntityId));\n if (!source) return;\n let component = existing;\n if (!component) {\n component = new Ctor();\n world.addComponent(targetEntityId, component as object as never);\n }\n const target = component as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(source)) {\n const current = target[key];\n // Optional fields stay absent until authored, so there is no current\n // value to compare the type against.\n if (key === \"style\") {\n const style = normalizeUiStyle(value);\n if (style) target.style = style;\n continue;\n }\n if (key === \"tokens\") {\n const tokens = normalizeUiTokens(value);\n if (tokens) target.tokens = tokens;\n continue;\n }\n if (OPTIONAL_UI_FIELDS[key] === typeof value) {\n target[key] = value;\n continue;\n }\n // Copy only primitives whose type matches the component's field —\n // shape drift in a stale snapshot must not poison a live component.\n if (\n (typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\") &&\n typeof current === typeof value\n ) {\n target[key] = value;\n }\n }\n };\n\n restoreUi(\n values.uiPanelValues,\n UIPanelComponent,\n world.getComponent(targetEntityId, UIPanelComponent),\n );\n restoreUi(\n values.uiTextValues,\n UITextComponent,\n world.getComponent(targetEntityId, UITextComponent),\n );\n restoreUi(\n values.uiButtonValues,\n UIButtonComponent,\n world.getComponent(targetEntityId, UIButtonComponent),\n );\n restoreUi(\n values.uiToggleValues,\n UIToggleComponent,\n world.getComponent(targetEntityId, UIToggleComponent),\n );\n restoreUi(\n values.uiSliderValues,\n UISliderComponent,\n world.getComponent(targetEntityId, UISliderComponent),\n );\n }\n\n {\n const sourceInteractor = asRecord(\n values.xrInteractorValues.get(sourceEntityId),\n );\n const interactor = world.getComponent(targetEntityId, XRInteractorComponent);\n if (sourceInteractor && interactor) {\n if (typeof sourceInteractor.interactorType === \"string\") {\n interactor.interactorType =\n sourceInteractor.interactorType as typeof interactor.interactorType;\n }\n if (typeof sourceInteractor.handPreset === \"string\") {\n interactor.handPreset =\n sourceInteractor.handPreset as typeof interactor.handPreset;\n }\n if (typeof sourceInteractor.handColor === \"string\") {\n interactor.handColor = sourceInteractor.handColor;\n }\n if (typeof sourceInteractor.handOpacity === \"number\") {\n interactor.handOpacity = sourceInteractor.handOpacity;\n }\n if (typeof sourceInteractor.handEmissiveIntensity === \"number\") {\n interactor.handEmissiveIntensity =\n sourceInteractor.handEmissiveIntensity;\n }\n if (typeof sourceInteractor.rayVisibility === \"string\") {\n interactor.rayVisibility =\n sourceInteractor.rayVisibility as typeof interactor.rayVisibility;\n } else if (typeof sourceInteractor.showRay === \"boolean\") {\n // Migration: `showRay` was the pre-0.3.11 boolean, and its \"on\" state\n // meant exactly today's `interacting`.\n interactor.rayVisibility = sourceInteractor.showRay\n ? \"interacting\"\n : \"never\";\n }\n if (typeof sourceInteractor.rayColor === \"string\") {\n interactor.rayColor = sourceInteractor.rayColor;\n }\n if (typeof sourceInteractor.rayThickness === \"number\") {\n interactor.rayThickness = sourceInteractor.rayThickness;\n }\n }\n }\n\n {\n // The left/right slots are plain `empty` entities, so the factory never\n // creates their side marker — restore it or authored hand content loses\n // track of which hand it belongs to.\n const sourceSide = asRecord(\n values.xrInteractorSideValues.get(sourceEntityId),\n );\n if (sourceSide && typeof sourceSide.side === \"string\") {\n const existing = world.getComponent(\n targetEntityId,\n XRInteractorSideComponent,\n );\n if (existing) {\n existing.side = sourceSide.side as typeof existing.side;\n } else {\n world.addComponent(\n targetEntityId,\n new XRInteractorSideComponent({\n side: sourceSide.side as \"left\" | \"right\",\n }),\n );\n }\n }\n }\n\n // Restore the XR rig's tracking origin alongside its other fields.\n {\n const sourceRigOrigin = asRecord(values.xrRigValues.get(sourceEntityId));\n const rigForOrigin = world.getComponent(targetEntityId, XRRigComponent);\n if (\n sourceRigOrigin &&\n rigForOrigin &&\n typeof sourceRigOrigin.trackingOrigin === \"string\"\n ) {\n rigForOrigin.trackingOrigin =\n sourceRigOrigin.trackingOrigin as typeof rigForOrigin.trackingOrigin;\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 PrefabInstance,\n PrefabNode,\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 // Restore editor-managed material-asset linkage when present.\n const sourceAssetRefs = sourceMaterial.assetRefs;\n if (materialComponent && Array.isArray(sourceAssetRefs)) {\n materialComponent.assetRefs = sourceAssetRefs as (string | null)[];\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 // PrefabNode: stable prefab identity — factories never create it, so re-add\n // directly (same pattern as ScriptComponent in restorePostCreateComponents).\n const sourcePrefabNode = asRecord(values.prefabNodeValues.get(sourceEntityId));\n if (sourcePrefabNode && typeof sourcePrefabNode.nodeId === \"string\") {\n if (!world.getComponent(targetEntityId, PrefabNode)) {\n world.addComponent(targetEntityId, new PrefabNode(sourcePrefabNode.nodeId));\n }\n }\n\n // PrefabInstance: prefab-asset link on instance roots.\n const sourcePrefabInstance = asRecord(\n values.prefabInstanceValues.get(sourceEntityId),\n );\n if (sourcePrefabInstance && typeof sourcePrefabInstance.url === \"string\") {\n if (!world.getComponent(targetEntityId, PrefabInstance)) {\n const overrides = Array.isArray(sourcePrefabInstance.overrides)\n ? sourcePrefabInstance.overrides.filter(\n (entry): entry is string => typeof entry === \"string\",\n )\n : [];\n world.addComponent(\n targetEntityId,\n new PrefabInstance(\n sourcePrefabInstance.url,\n overrides,\n // Preserve the placement identity; the constructor generates a\n // fresh one for legacy snapshots that predate instanceId.\n typeof sourcePrefabInstance.instanceId === \"string\" &&\n sourcePrefabInstance.instanceId.length > 0\n ? sourcePrefabInstance.instanceId\n : undefined,\n ),\n );\n }\n }\n}\n","import type { EcsEntityKind } from \"../types\";\n\nexport type HydrationPayload = {\n /**\n * Suppress default child entities the factory would create.\n *\n * Always set during hydration — the snapshot already contains those children.\n */\n skipDefaultChildren?: boolean;\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 scriptObjectValues: Map<number, unknown>;\n xrRigValues: Map<number, unknown>;\n vrTeleportAreaValues: Map<number, unknown>;\n xrInteractableValues: Map<number, unknown>;\n xrInteractorValues: Map<number, unknown>;\n xrHandPoseValues: Map<number, unknown>;\n xrAnchorValues: Map<number, unknown>;\n boneAttachmentValues: Map<number, unknown>;\n ikValues: Map<number, unknown>;\n networkIdentityValues: Map<number, unknown>;\n networkTransformValues: Map<number, unknown>;\n networkedPropsValues: Map<number, unknown>;\n networkSpawnerValues: Map<number, unknown>;\n uiPanelValues: Map<number, unknown>;\n uiTextValues: Map<number, unknown>;\n uiButtonValues: Map<number, unknown>;\n uiToggleValues: Map<number, unknown>;\n uiSliderValues: Map<number, unknown>;\nxrInteractorSideValues: Map<number, unknown>;\n instancedMeshValues: Map<number, unknown>;\n instanceSlotValues: Map<number, unknown>;\n prefabNodeValues: Map<number, unknown>;\n prefabInstanceValues: 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 /** Snapshot entity id → created live entity id for every hydrated entity. */\n idMap: Map<number, number>;\n};\n\n/**\n * Optional behavior tweaks for {@link hydrateWorldFromSnapshotDetailed}.\n * Defaults preserve the historical full-world-load behavior; prefab/subtree\n * instantiation passes stricter options.\n */\nexport type HydrateOptions = {\n /**\n * When false, no camera in the snapshot is promoted to the world camera.\n * Defaults to true (full scene loads want their default camera active);\n * prefab spawns pass false so a spawned camera never hijacks the view.\n */\n assignPrimaryCamera?: boolean;\n /**\n * \"world\" (default) re-applies local transforms for every entity in the\n * world after parent links restore — correct for full scene loads.\n * \"created\" limits the pass to entities created by THIS hydrate call, so\n * mid-session spawns don't touch unrelated live entities.\n */\n applyTransformsScope?: \"world\" | \"created\";\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 \"scriptObject\",\n \"xrRig\",\n \"xrInteractor\",\n \"teleportArea\",\n \"uiPanel\",\n \"uiText\",\n \"uiButton\",\n \"uiToggle\",\n \"uiSlider\",\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, 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 HydrateOptions,\n type HydrateWorldFromSnapshotResult,\n type HydrationPayload,\n} from \"./types\";\n\nexport type {\n EcsWorldComponentSnapshot,\n EcsWorldStateSnapshotLike,\n HydrateOptions,\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 if (kind === \"scriptObject\") {\n const so = asRecord(componentValues.scriptObjectValues.get(sourceEntityId));\n if (so) {\n // Identity pre-linked at creation; `data` (with entity-ref remapping) is\n // restored in the post-create pass where the full idMap exists.\n payload.options = {\n scriptUrl: typeof so.scriptUrl === \"string\" ? so.scriptUrl : null,\n className: typeof so.className === \"string\" ? so.className : null,\n enabled: typeof so.enabled === \"boolean\" ? so.enabled : true,\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(\n world: World,\n scopeEntityIds?: Iterable<number>,\n): void {\n const transformEntities = scopeEntityIds\n ? Array.from(scopeEntityIds)\n : 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 options?: HydrateOptions,\n): HydrateWorldFromSnapshotResult {\n if (!snapshot || !snapshot.entities.length) {\n return {\n restoredCount: 0,\n selectedEntityId: null,\n idMap: new Map(),\n };\n }\n\n const assignPrimaryCamera = options?.assignPrimaryCamera !== false;\n const entityTypeValues = readByComponent(snapshot.components, \"EntityType\");\n const componentValues = buildComponentValueMaps(snapshot);\n const primaryCameraSourceEntityId = assignPrimaryCamera\n ? resolvePrimaryCameraSourceEntityId(\n snapshot,\n componentValues,\n entityTypeValues,\n )\n : null;\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 // The snapshot carries every entity, including factory-authored children,\n // so factories must not add their own during a restore.\n payload.skipDefaultChildren = true;\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(\n world,\n options?.applyTransformsScope === \"created\" ? idMap.values() : undefined,\n );\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 idMap,\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","/**\n * Scoped node identity for (possibly nested) prefab documents.\n *\n * A nodeKey identifies an entity within one prefab document even when the\n * document contains nested instances of other prefabs (whose nodeIds repeat\n * per instance). Formula (parent-first walk from the scope root, inherited\n * `prefix`; the scope root's prefix is \"\" even if it carries PrefabInstance):\n *\n * - entity WITHOUT PrefabInstance: key = prefix + nodeId, children inherit\n * the same prefix;\n * - entity WITH PrefabInstance (non-scope-root): childPrefix = prefix +\n * instanceId + \"/\"; key = childPrefix + nodeId (self-inclusive — sibling\n * instances of the SAME prefab get distinct keys); children inherit\n * childPrefix.\n *\n * Documents with no nested instances degenerate to bare nodeIds, so v1 files\n * and override lists keep their exact meaning.\n */\n\nimport type { SubtreeSnapshot } from \"./snapshotIdUtils\";\n\nexport const NODE_KEY_SEPARATOR = \"/\";\n\n/**\n * Reserved override \"component\" marking a node ADDED by the host document\n * inside a nested instance region (`\"<nodeKey>|+node|\"`). File patching\n * trusts stored overrides (the old base is unavailable), so without the\n * marker a host-authored node inside the region would be indistinguishable\n * from a node the child prefab removed — and get deleted.\n */\nexport const ADDED_NODE_MARKER_COMPONENT = \"+node\";\n\nexport type NodeKeyMaps = {\n idToKey: Map<number, string>;\n keyToId: Map<string, number>;\n /** nodeKey of the scope root (bare nodeId), or null when it has none. */\n rootKey: string | null;\n /** Entity ids of NESTED instance roots (non-scope-root PrefabInstance). */\n boundaryIds: Map<number, { url: string; instanceId: string }>;\n};\n\ntype Rec = Record<string, unknown>;\n\nconst asRecord = (value: unknown): Rec | null =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Rec)\n : null;\n\nconst readBlock = (\n snapshot: SubtreeSnapshot,\n component: string,\n): Map<number, Rec> => {\n const map = new Map<number, Rec>();\n const block = snapshot.components.find((b) => b.component === component);\n for (const entry of block?.entries ?? []) {\n const record = asRecord(entry.value);\n if (record) {\n map.set(entry.entityId, record);\n }\n }\n return map;\n};\n\n/**\n * Deterministic fallback for hand-edited files whose nested roots lack an\n * instanceId: derived from the entity id so repeated builds agree.\n */\nconst fallbackInstanceId = (entityId: number): string => `e${entityId}`;\n\nexport function buildNodeKeyMapsFromSnapshot(\n snapshot: SubtreeSnapshot,\n options?: { scopeRootEntityId?: number },\n): NodeKeyMaps {\n const parentValues = readBlock(snapshot, \"ParentId\");\n const nodeValues = readBlock(snapshot, \"PrefabNode\");\n const instanceValues = readBlock(snapshot, \"PrefabInstance\");\n\n // parent → children index. A numeric parent OUTSIDE the document (e.g. a\n // scene parent captured in an instance doc) still counts as a root.\n const inDocument = new Set(snapshot.entities);\n const childrenByParent = new Map<number, number[]>();\n const rootIds: number[] = [];\n for (const entityId of snapshot.entities) {\n const parent = parentValues.get(entityId)?.value;\n if (typeof parent === \"number\" && inDocument.has(parent)) {\n const siblings = childrenByParent.get(parent);\n if (siblings) siblings.push(entityId);\n else childrenByParent.set(parent, [entityId]);\n } else {\n rootIds.push(entityId);\n }\n }\n\n const scopeRoots =\n options?.scopeRootEntityId !== undefined\n ? [options.scopeRootEntityId]\n : rootIds;\n\n const idToKey = new Map<number, string>();\n const keyToId = new Map<string, number>();\n const boundaryIds = new Map<number, { url: string; instanceId: string }>();\n\n const scopeRootSet = new Set(scopeRoots);\n const queue: Array<{ entityId: number; prefix: string }> = scopeRoots.map(\n (entityId) => ({ entityId, prefix: \"\" }),\n );\n\n while (queue.length > 0) {\n const { entityId, prefix } = queue.shift() as {\n entityId: number;\n prefix: string;\n };\n\n const instance = instanceValues.get(entityId);\n const isBoundary = Boolean(\n instance &&\n typeof instance.url === \"string\" &&\n !scopeRootSet.has(entityId),\n );\n\n let ownPrefix = prefix;\n let childPrefix = prefix;\n if (isBoundary && instance) {\n const instanceId =\n typeof instance.instanceId === \"string\" && instance.instanceId.length > 0\n ? instance.instanceId\n : fallbackInstanceId(entityId);\n childPrefix = `${prefix}${instanceId}${NODE_KEY_SEPARATOR}`;\n // Self-inclusive: the boundary root itself lives under its own prefix,\n // so sibling instances of the same prefab never collide.\n ownPrefix = childPrefix;\n boundaryIds.set(entityId, {\n url: instance.url as string,\n instanceId,\n });\n }\n\n const nodeId = nodeValues.get(entityId)?.nodeId;\n if (typeof nodeId === \"string\" && nodeId.length > 0) {\n const key = `${ownPrefix}${nodeId}`;\n idToKey.set(entityId, key);\n keyToId.set(key, entityId);\n }\n\n for (const child of childrenByParent.get(entityId) ?? []) {\n queue.push({ entityId: child, prefix: childPrefix });\n }\n }\n\n const rootEntityId = scopeRoots[0];\n const rootNodeId =\n rootEntityId !== undefined ? nodeValues.get(rootEntityId)?.nodeId : undefined;\n\n return {\n idToKey,\n keyToId,\n rootKey:\n typeof rootNodeId === \"string\" && rootNodeId.length > 0\n ? rootNodeId\n : null,\n boundaryIds,\n };\n}\n\n/** JSON-space subtree ids (root first, BFS) via ParentId edges. */\nexport function collectSnapshotSubtreeIds(\n snapshot: SubtreeSnapshot,\n rootEntityId: number,\n): number[] {\n const parentValues = readBlock(snapshot, \"ParentId\");\n const childrenByParent = new Map<number, number[]>();\n for (const entityId of snapshot.entities) {\n const parent = parentValues.get(entityId)?.value;\n if (typeof parent === \"number\") {\n const siblings = childrenByParent.get(parent);\n if (siblings) siblings.push(entityId);\n else childrenByParent.set(parent, [entityId]);\n }\n }\n\n const ordered: number[] = [];\n const seen = new Set<number>();\n const queue = [rootEntityId];\n while (queue.length > 0) {\n const entityId = queue.shift() as number;\n if (seen.has(entityId)) continue;\n seen.add(entityId);\n ordered.push(entityId);\n queue.push(...(childrenByParent.get(entityId) ?? []));\n }\n return ordered;\n}\n\nexport type NestedRegion = {\n rootEntityId: number;\n url: string;\n instanceId: string;\n overrides: string[];\n};\n\n/**\n * TOP-LEVEL-RELATIVE nested instance regions of a document: instance roots\n * that are not the scope root and not themselves inside another region.\n * Deeper nesting is reached by cascading through the intermediate prefab's\n * own file, never directly.\n */\nexport function findTopLevelNestedRegions(\n snapshot: SubtreeSnapshot,\n): NestedRegion[] {\n const parentValues = readBlock(snapshot, \"ParentId\");\n const instanceValues = readBlock(snapshot, \"PrefabInstance\");\n const inDocument = new Set(snapshot.entities);\n const roots = new Set(\n snapshot.entities.filter((entityId) => {\n const parent = parentValues.get(entityId)?.value;\n return typeof parent !== \"number\" || !inDocument.has(parent);\n }),\n );\n\n const regions: NestedRegion[] = [];\n for (const [entityId, instance] of instanceValues) {\n if (roots.has(entityId)) continue; // scope root's own link (or variant)\n if (typeof instance.url !== \"string\" || instance.url.length === 0) continue;\n\n // Skip if any ancestor is itself a non-scope-root instance root.\n let ancestor = parentValues.get(entityId)?.value;\n let nestedDeeper = false;\n let hops = 0;\n while (typeof ancestor === \"number\" && hops < 512) {\n if (instanceValues.has(ancestor) && !roots.has(ancestor)) {\n nestedDeeper = true;\n break;\n }\n ancestor = parentValues.get(ancestor)?.value;\n hops += 1;\n }\n if (nestedDeeper) continue;\n\n regions.push({\n rootEntityId: entityId,\n url: instance.url,\n instanceId:\n typeof instance.instanceId === \"string\" && instance.instanceId.length > 0\n ? instance.instanceId\n : fallbackInstanceId(entityId),\n overrides: Array.isArray(instance.overrides)\n ? instance.overrides.filter(\n (entry): entry is string => typeof entry === \"string\",\n )\n : [],\n });\n }\n\n regions.sort((a, b) => a.rootEntityId - b.rootEntityId);\n return regions;\n}\n","/**\n * Per-property prefab override model — pure JSON-space functions shared by\n * the editor (diff/merge at apply time) and future `.scene` tooling.\n *\n * The core problem: an instance's entity ids differ from the prefab file's\n * ids by construction, so raw values can't be compared. Both sides are first\n * CANONICALIZED into nodeId-space: every entity-id-bearing field (kept in\n * sync with `snapshotIdUtils.ts`) becomes `{ $node: \"<nodeId>\" }` when the id\n * maps to a node inside the same document, or stays a raw id when external.\n * Two canonical values are equal iff they describe the same state relative\n * to their own subtree.\n *\n * Override encoding (stored in `PrefabInstance.overrides`):\n * \"<nodeId>|<ComponentName>|<slash/separated/path>\"\n * \"<nodeId>|<ComponentName>|\" // empty path = whole component overridden\n */\n\nimport {\n ADDED_NODE_MARKER_COMPONENT,\n buildNodeKeyMapsFromSnapshot,\n} from \"./nodeKeys\";\nimport type { SubtreeSnapshot } from \"./snapshotIdUtils\";\n\n/** Components that never participate in override diffing/merging. */\nexport const OVERRIDE_DIFF_EXCLUDED_COMPONENTS = new Set([\n \"PrefabNode\",\n \"PrefabInstance\",\n \"EntityType\",\n \"Selectable\",\n \"SelectionTransformState\",\n]);\n\n/**\n * Components excluded ONLY on the instance ROOT node — these are per-instance\n * by definition (where the instance sits in the scene and what it's called).\n */\nexport const OVERRIDE_ROOT_EXCLUDED_COMPONENTS = new Set([\n \"TransformComponent\",\n \"Name\",\n \"ParentId\",\n]);\n\nexport type NodeMaps = {\n idToNode: Map<number, string>;\n nodeToId: Map<string, number>;\n /** nodeId of the subtree root (entity whose ParentId is null/absent). */\n rootNodeId: string | null;\n};\n\ntype Rec = Record<string, unknown>;\n\nconst asRecord = (value: unknown): Rec | null =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Rec)\n : null;\n\nconst clone = <T>(value: T): T =>\n value === undefined ? value : (structuredClone(value) as T);\n\n/** `{ $node: \"<nodeId>\" }` marker — a canonical internal entity reference. */\nconst isNodeRef = (value: unknown): value is { $node: string } => {\n const record = asRecord(value);\n return Boolean(\n record &&\n typeof record.$node === \"string\" &&\n Object.keys(record).length === 1,\n );\n};\n\nconst makeNodeRef = (nodeId: string) => ({ $node: nodeId });\n\n/** Entity ids of entities whose ParentId is null or absent. */\nexport function findSnapshotRootEntityIds(snapshot: SubtreeSnapshot): number[] {\n const parentBlock = snapshot.components.find(\n (block) => block.component === \"ParentId\",\n );\n const parentByEntity = new Map<number, unknown>();\n for (const entry of parentBlock?.entries ?? []) {\n parentByEntity.set(entry.entityId, asRecord(entry.value)?.value ?? null);\n }\n return snapshot.entities.filter(\n (entityId) => typeof parentByEntity.get(entityId) !== \"number\",\n );\n}\n\nexport function buildNodeMapsFromSnapshot(snapshot: SubtreeSnapshot): NodeMaps {\n const idToNode = new Map<number, string>();\n const nodeToId = new Map<string, number>();\n\n const nodeBlock = snapshot.components.find(\n (block) => block.component === \"PrefabNode\",\n );\n for (const entry of nodeBlock?.entries ?? []) {\n const nodeId = asRecord(entry.value)?.nodeId;\n if (typeof nodeId === \"string\" && nodeId.length > 0) {\n idToNode.set(entry.entityId, nodeId);\n nodeToId.set(nodeId, entry.entityId);\n }\n }\n\n const rootEntityId = findSnapshotRootEntityIds(snapshot)[0];\n const rootNodeId =\n rootEntityId !== undefined ? (idToNode.get(rootEntityId) ?? null) : null;\n\n return { idToNode, nodeToId, rootNodeId };\n}\n\n/** Invert the columnar snapshot into entityId → (componentName → value). */\nexport function indexSnapshotByEntity(\n snapshot: SubtreeSnapshot,\n): Map<number, Map<string, unknown>> {\n const byEntity = new Map<number, Map<string, unknown>>();\n for (const block of snapshot.components) {\n for (const entry of block.entries) {\n let componentMap = byEntity.get(entry.entityId);\n if (!componentMap) {\n componentMap = new Map();\n byEntity.set(entry.entityId, componentMap);\n }\n componentMap.set(block.component, entry.value);\n }\n }\n return byEntity;\n}\n\nconst toRefOrRaw = (id: number, idToNode: Map<number, string>): unknown => {\n const nodeId = idToNode.get(id);\n return nodeId !== undefined ? makeNodeRef(nodeId) : id;\n};\n\n/** Canonicalize a script `data` record: EntityInput/ComponentInput ids → `{$node}`. */\nfunction canonicalizeScriptDataFields(\n data: Rec,\n idToNode: Map<number, string>,\n): Rec {\n const canonicalData: Rec = {};\n for (const [key, fieldValue] of Object.entries(data)) {\n const field = asRecord(fieldValue);\n if (field?.type === \"entity\" && typeof field.value === \"number\") {\n canonicalData[key] = {\n ...field,\n value: toRefOrRaw(field.value, idToNode),\n };\n continue;\n }\n const componentRef = asRecord(field?.value);\n if (\n field?.type === \"component\" &&\n componentRef &&\n typeof componentRef.entityId === \"number\"\n ) {\n canonicalData[key] = {\n ...field,\n value: {\n ...componentRef,\n entityId: toRefOrRaw(componentRef.entityId, idToNode),\n },\n };\n continue;\n }\n canonicalData[key] = fieldValue;\n }\n return canonicalData;\n}\n\n/**\n * Canonicalize a serialized component value into nodeId-space:\n * - entity-id fields → `{$node}` (internal) or raw id (external)\n * - ScriptComponent entries keep only `{className, scriptUrl, enabled, data}`\n * (entityId/runtimeState/runtimeMessage are per-instance transients)\n * - ScriptObjectComponent keeps only `{scriptUrl, className, enabled, data}`\n * (runtimeState/runtimeMessage are per-instance transients)\n * - Object3DRef keeps only `{visibility}` (the rest is a live object ref)\n *\n * Keep the id-bearing field list in sync with `snapshotIdUtils.ts`.\n */\nexport function canonicalizeComponentValue(\n componentName: string,\n value: unknown,\n idToNode: Map<number, string>,\n): unknown {\n const cloned = clone(value);\n const record = asRecord(cloned);\n if (!record) {\n return cloned;\n }\n\n if (componentName === \"ParentId\") {\n if (typeof record.value === \"number\") {\n record.value = toRefOrRaw(record.value, idToNode);\n }\n return record;\n }\n\n if (componentName === \"Object3DRef\") {\n return {\n visibility:\n typeof record.visibility === \"boolean\" ? record.visibility : true,\n };\n }\n\n if (componentName === \"ScriptComponent\") {\n const entries = Array.isArray(record.entries) ? record.entries : [];\n return {\n entries: entries.map((rawEntry) => {\n const entry = asRecord(rawEntry);\n if (!entry) {\n return rawEntry;\n }\n return {\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: canonicalizeScriptDataFields(asRecord(entry.data) ?? {}, idToNode),\n };\n }),\n };\n }\n\n if (componentName === \"ScriptObjectComponent\") {\n return {\n scriptUrl: typeof record.scriptUrl === \"string\" ? record.scriptUrl : null,\n className: typeof record.className === \"string\" ? record.className : null,\n enabled: typeof record.enabled === \"boolean\" ? record.enabled : true,\n data: canonicalizeScriptDataFields(asRecord(record.data) ?? {}, idToNode),\n };\n }\n\n if (componentName === \"InstancedMeshComponent\") {\n if (Array.isArray(record.instanceEntityIds)) {\n record.instanceEntityIds = record.instanceEntityIds.map((id) =>\n typeof id === \"number\" ? toRefOrRaw(id, idToNode) : id,\n );\n }\n return record;\n }\n\n if (componentName === \"IKComponent\") {\n if (Array.isArray(record.chains)) {\n record.chains = record.chains.map((rawChain) => {\n const chain = asRecord(rawChain);\n if (!chain) return rawChain;\n for (const key of [\"target\", \"pole\"] as const) {\n if (typeof chain[key] === \"number\") chain[key] = toRefOrRaw(chain[key] as number, idToNode);\n }\n return chain;\n });\n }\n return record;\n }\n\n if (componentName === \"InstanceSlotComponent\") {\n if (\n typeof record.groupEntityId === \"number\" &&\n record.groupEntityId !== -1\n ) {\n record.groupEntityId = toRefOrRaw(record.groupEntityId, idToNode);\n }\n return record;\n }\n\n return record;\n}\n\n/**\n * Replace every `{$node}` marker (at any depth) with the mapped entity id\n * from `nodeToId`, or null when the node no longer exists. Exact inverse of\n * canonicalization for the id-bearing positions.\n */\nexport function decanonicalizeComponentValue(\n value: unknown,\n nodeToId: Map<string, number>,\n): unknown {\n if (isNodeRef(value)) {\n return nodeToId.get(value.$node) ?? null;\n }\n if (Array.isArray(value)) {\n return value.map((item) => decanonicalizeComponentValue(item, nodeToId));\n }\n const record = asRecord(value);\n if (record) {\n const result: Rec = {};\n for (const [key, item] of Object.entries(record)) {\n result[key] = decanonicalizeComponentValue(item, nodeToId);\n }\n return result;\n }\n return value;\n}\n\nexport const encodeOverride = (\n nodeId: string,\n componentName: string,\n path: string,\n): string => `${nodeId}|${componentName}|${path}`;\n\nexport function parseOverride(\n encoded: string,\n): { nodeId: string; componentName: string; path: string } | null {\n const firstSep = encoded.indexOf(\"|\");\n if (firstSep <= 0) {\n return null;\n }\n const secondSep = encoded.indexOf(\"|\", firstSep + 1);\n if (secondSep <= firstSep + 1) {\n return null;\n }\n return {\n nodeId: encoded.slice(0, firstSep),\n componentName: encoded.slice(firstSep + 1, secondSep),\n path: encoded.slice(secondSep + 1),\n };\n}\n\n/** nodeId → componentName → set of overridden paths. */\nexport function groupOverridePaths(\n overrides: string[],\n): Map<string, Map<string, Set<string>>> {\n const grouped = new Map<string, Map<string, Set<string>>>();\n for (const encoded of overrides) {\n const parsed = parseOverride(encoded);\n if (!parsed) {\n continue;\n }\n let byComponent = grouped.get(parsed.nodeId);\n if (!byComponent) {\n byComponent = new Map();\n grouped.set(parsed.nodeId, byComponent);\n }\n let paths = byComponent.get(parsed.componentName);\n if (!paths) {\n paths = new Set();\n byComponent.set(parsed.componentName, paths);\n }\n paths.add(parsed.path);\n }\n return grouped;\n}\n\nconst isPrimitive = (value: unknown): boolean =>\n value === null || typeof value !== \"object\";\n\n/**\n * Collect leaf paths where two canonical values differ. Semantics:\n * - `{$node}` refs compare atomically by nodeId\n * - arrays of differing length are ONE atomic override (the array path);\n * equal lengths recurse per index\n * - object key present on one side only marks that key's path\n * - type mismatches mark the current path\n * An empty-string path means the values differ at the top level.\n */\nexport function collectDiffPaths(\n base: unknown,\n current: unknown,\n prefix = \"\",\n out: string[] = [],\n): string[] {\n if (isNodeRef(base) || isNodeRef(current)) {\n const same =\n isNodeRef(base) && isNodeRef(current) && base.$node === current.$node;\n if (!same) {\n out.push(prefix);\n }\n return out;\n }\n\n if (isPrimitive(base) || isPrimitive(current)) {\n if (base !== current) {\n out.push(prefix);\n }\n return out;\n }\n\n const baseIsArray = Array.isArray(base);\n const currentIsArray = Array.isArray(current);\n if (baseIsArray !== currentIsArray) {\n out.push(prefix);\n return out;\n }\n\n if (baseIsArray && currentIsArray) {\n if (base.length !== current.length) {\n out.push(prefix);\n return out;\n }\n base.forEach((item, index) => {\n collectDiffPaths(\n item,\n current[index],\n prefix ? `${prefix}/${index}` : String(index),\n out,\n );\n });\n return out;\n }\n\n const baseRecord = base as Rec;\n const currentRecord = current as Rec;\n const keys = new Set([\n ...Object.keys(baseRecord),\n ...Object.keys(currentRecord),\n ]);\n for (const key of keys) {\n const childPrefix = prefix ? `${prefix}/${key}` : key;\n if (!(key in baseRecord) || !(key in currentRecord)) {\n out.push(childPrefix);\n continue;\n }\n collectDiffPaths(baseRecord[key], currentRecord[key], childPrefix, out);\n }\n return out;\n}\n\n/**\n * Diff a live instance subtree against its prefab base (both as serialized\n * subtree snapshots carrying PrefabNode identity) and return the encoded\n * override list: every path where the instance deviates from the base.\n *\n * Identity is nodeKey-scoped ({@link buildNodeKeyMapsFromSnapshot}), so\n * nested instance regions diff correctly; for nested-free documents the\n * keys degenerate to bare nodeIds (v1 behavior unchanged).\n *\n * Policies: components missing on the instance produce no override (apply\n * re-adds them); components/nodes only on the instance are local additions\n * and produce no override — EXCEPT when `emitAdditionMarkers` is set\n * (file-space callers), which records `\"<key>|+node|\"` for instance nodes\n * absent from the base so pure-JSON patching never deletes host-authored\n * nodes inside nested regions.\n */\nexport function computeInstanceOverrides(\n baseSnapshot: SubtreeSnapshot,\n instanceSnapshot: SubtreeSnapshot,\n options?: { emitAdditionMarkers?: boolean },\n): string[] {\n const baseMaps = buildNodeKeyMapsFromSnapshot(baseSnapshot);\n const instanceMaps = buildNodeKeyMapsFromSnapshot(instanceSnapshot);\n const baseByEntity = indexSnapshotByEntity(baseSnapshot);\n const instanceByEntity = indexSnapshotByEntity(instanceSnapshot);\n\n const overrides: string[] = [];\n\n for (const [nodeKey, instanceEntityId] of instanceMaps.keyToId) {\n const baseEntityId = baseMaps.keyToId.get(nodeKey);\n if (baseEntityId === undefined) {\n // Node only exists on the instance — local addition.\n if (options?.emitAdditionMarkers) {\n overrides.push(\n encodeOverride(nodeKey, ADDED_NODE_MARKER_COMPONENT, \"\"),\n );\n }\n continue;\n }\n\n const baseComponents = baseByEntity.get(baseEntityId);\n const instanceComponents = instanceByEntity.get(instanceEntityId);\n if (!baseComponents) {\n continue;\n }\n\n // Root detection must use the BASE doc: the file root always has a null\n // ParentId, whereas an instance root carries its numeric scene parent.\n const isRoot = nodeKey === baseMaps.rootKey;\n\n for (const [componentName, baseRaw] of baseComponents) {\n if (OVERRIDE_DIFF_EXCLUDED_COMPONENTS.has(componentName)) {\n continue;\n }\n if (isRoot && OVERRIDE_ROOT_EXCLUDED_COMPONENTS.has(componentName)) {\n continue;\n }\n\n const instanceRaw = instanceComponents?.get(componentName);\n if (instanceRaw === undefined) {\n continue; // locally removed — apply re-adds, no override\n }\n\n const baseCanonical = canonicalizeComponentValue(\n componentName,\n baseRaw,\n baseMaps.idToKey,\n );\n const instanceCanonical = canonicalizeComponentValue(\n componentName,\n instanceRaw,\n instanceMaps.idToKey,\n );\n\n for (const path of collectDiffPaths(baseCanonical, instanceCanonical)) {\n overrides.push(encodeOverride(nodeKey, componentName, path));\n }\n }\n }\n\n return overrides;\n}\n\nconst PATH_TOKEN_SPLIT = \"/\";\n\nfunction getAtPath(value: unknown, tokens: string[]): unknown {\n let cursor: unknown = value;\n for (const token of tokens) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(token)];\n } else {\n const record = asRecord(cursor);\n if (!record) {\n return undefined;\n }\n cursor = record[token];\n }\n if (cursor === undefined) {\n return undefined;\n }\n }\n return cursor;\n}\n\nfunction setAtPath(target: unknown, tokens: string[], value: unknown): void {\n let cursor: unknown = target;\n for (let i = 0; i < tokens.length - 1; i++) {\n const token = tokens[i];\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(token)];\n } else {\n const record = asRecord(cursor);\n if (!record) {\n return; // container shape changed in the new file — skip gracefully\n }\n cursor = record[token];\n }\n if (cursor === null || typeof cursor !== \"object\") {\n return;\n }\n }\n\n const last = tokens[tokens.length - 1];\n if (Array.isArray(cursor)) {\n cursor[Number(last)] = value;\n } else {\n const record = asRecord(cursor);\n if (record) {\n if (value === undefined) {\n delete record[last];\n } else {\n record[last] = value;\n }\n }\n }\n}\n\n/**\n * Merge a component's NEW canonical file value with an instance's canonical\n * value, preserving the instance side at every overridden path. An empty\n * path (\"\") means the whole component is overridden → instance wins.\n */\nexport function mergeComponentValue(\n newFileCanonical: unknown,\n instanceCanonical: unknown,\n overridePaths: Set<string> | undefined,\n): unknown {\n if (!overridePaths || overridePaths.size === 0) {\n return clone(newFileCanonical);\n }\n if (overridePaths.has(\"\")) {\n return clone(instanceCanonical);\n }\n\n const merged = clone(newFileCanonical);\n for (const path of overridePaths) {\n const tokens = path.split(PATH_TOKEN_SPLIT);\n const instanceValue = getAtPath(instanceCanonical, tokens);\n setAtPath(merged, tokens, clone(instanceValue));\n }\n return merged;\n}\n","import { hydrateWorldFromSnapshotDetailed } from \"../hydration/hydrateWorld\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { EntityId } from \"../types\";\nimport type { World } from \"../World\";\nimport { findSnapshotRootEntityIds } from \"./overrides\";\nimport type { SubtreeSnapshot } from \"./snapshotIdUtils\";\n\n/**\n * Components a subtree snapshot must never inject into a live world —\n * scene singletons. Nested `PrefabInstance` links are kept (nested prefabs);\n * only an instance link ON THE SNAPSHOT ROOT is dropped (a file claiming to\n * be an instance of another prefab = variant, unsupported — defense in depth\n * for hand-edited files).\n */\nconst INSTANTIATE_EXCLUDED_COMPONENTS = new Set([\n \"Environment\",\n \"Postprocessing\",\n \"SelectionTransformState\",\n]);\n\nexport type InstantiateSubtreeResult = {\n /** Live entity id of the subtree root, or null when nothing hydrated. */\n rootId: EntityId | null;\n /** Snapshot entity id → live entity id. */\n idMap: Map<number, number>;\n};\n\n/**\n * Hydrate a self-contained subtree snapshot (a prefab file's `snapshot`)\n * into a LIVE world: fresh entity ids, internal references remapped, no\n * camera promotion, transform pass scoped to the created entities.\n */\nexport function instantiateSubtree(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n snapshot: SubtreeSnapshot,\n): InstantiateSubtreeResult {\n const snapshotRootIds = new Set(findSnapshotRootEntityIds(snapshot));\n const safeSnapshot: SubtreeSnapshot = {\n entities: snapshot.entities,\n components: snapshot.components\n .filter((block) => !INSTANTIATE_EXCLUDED_COMPONENTS.has(block.component))\n .map((block) =>\n block.component === \"PrefabInstance\"\n ? {\n component: block.component,\n entries: block.entries.filter(\n (entry) => !snapshotRootIds.has(entry.entityId),\n ),\n }\n : block,\n )\n .filter((block) => block.entries.length > 0),\n };\n\n const result = hydrateWorldFromSnapshotDetailed(\n safeSnapshot,\n world,\n objectManagementSystem,\n { assignPrimaryCamera: false, applyTransformsScope: \"created\" },\n );\n\n const rootSourceId = findSnapshotRootEntityIds(safeSnapshot).find(\n (sourceId) => result.idMap.has(sourceId),\n );\n\n return {\n rootId: rootSourceId !== undefined ? (result.idMap.get(rootSourceId) ?? null) : null,\n idMap: result.idMap,\n };\n}\n","import { findTopLevelNestedRegions } from \"./nodeKeys\";\nimport type { SubtreeSnapshot } from \"./snapshotIdUtils\";\n\nexport const PREFAB_FILE_VERSION = 1;\n/** Written for files containing NESTED instances (parse accepts either). */\nexport const PREFAB_FILE_VERSION_NESTED = 2;\n\n/** File version to write for a given snapshot: 2 iff it nests instances. */\nexport function prefabFileVersionFor(snapshot: SubtreeSnapshot): number {\n return findTopLevelNestedRegions(snapshot).length > 0\n ? PREFAB_FILE_VERSION_NESTED\n : PREFAB_FILE_VERSION;\n}\n\n/**\n * Envelope of a `.prefab` asset file (and, later, `.scene` assets — same\n * shape with `type: \"scene\"`). `snapshot` is the same columnar world-snapshot\n * format `hydrateWorldFromSnapshotDetailed` consumes, with entity ids\n * renumbered 1..N and every entity carrying a `PrefabNode` identity.\n */\nexport type PrefabAsset = {\n version: number;\n type?: \"prefab\" | \"scene\";\n name?: string;\n snapshot: SubtreeSnapshot;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\n/** Validate untrusted JSON into a `PrefabAsset`, or null when malformed. */\nexport function parsePrefabAsset(json: unknown): PrefabAsset | null {\n if (!isRecord(json)) {\n return null;\n }\n if (typeof json.version !== \"number\" || json.version < 1) {\n return null;\n }\n\n const snapshot = json.snapshot;\n if (!isRecord(snapshot)) {\n return null;\n }\n const entities = snapshot.entities;\n const components = snapshot.components;\n if (!Array.isArray(entities) || !Array.isArray(components)) {\n return null;\n }\n if (!entities.every((id) => typeof id === \"number\")) {\n return null;\n }\n if (\n !components.every(\n (block) =>\n isRecord(block) &&\n typeof block.component === \"string\" &&\n Array.isArray(block.entries),\n )\n ) {\n return null;\n }\n\n return {\n version: json.version,\n type: json.type === \"scene\" ? \"scene\" : \"prefab\",\n name: typeof json.name === \"string\" ? json.name : undefined,\n snapshot: snapshot as unknown as SubtreeSnapshot,\n };\n}\n","import { Object3DRef, PrefabInstance, TransformComponent } from \"../components\";\nimport { applyTransform } from \"../systems/ObjectManagementSystem\";\nimport type { EntityId } from \"../types\";\nimport type { World } from \"../World\";\nimport { collectEntitySubtree } from \"./collectEntitySubtree\";\nimport { instantiateSubtree } from \"./instantiateSubtree\";\nimport { parsePrefabAsset, type PrefabAsset } from \"./types\";\n\ntype Vec3Like = { x?: number; y?: number; z?: number };\n\nlet prefabAssetUrlResolver: ((url: string) => string) | null = null;\n\n/**\n * Override how prefab asset URLs (the file URL itself AND every asset URL\n * stored inside prefab files) are resolved before fetching. Published/preview\n * runtimes register a resolver that maps the editor's `localasset://…/assets/x`\n * URLs to `./assets/x`; the editor leaves it unset (identity — the\n * `localasset://` protocol is fetchable there). Same pattern as\n * {@link setDracoDecoderPath}. Pass null to restore identity.\n */\nexport function setPrefabAssetUrlResolver(\n resolver: ((url: string) => string) | null,\n): void {\n prefabAssetUrlResolver = resolver;\n}\n\n/** An editor asset URL as this runtime fetches it. Shared by everything that ships as a file. */\nexport const resolvePrefabAssetUrl = (url: string): string =>\n prefabAssetUrlResolver ? prefabAssetUrlResolver(url) : url;\nconst resolveUrl = resolvePrefabAssetUrl;\n\n/** Deep-transform every string in a JSON value (arrays/objects walked). */\nfunction transformStringsDeep(value: unknown, fn: (s: string) => string): unknown {\n if (typeof value === \"string\") {\n return fn(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => transformStringsDeep(item, fn));\n }\n if (value !== null && typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n result[key] = transformStringsDeep(item, fn);\n }\n return result;\n }\n return value;\n}\n\n/**\n * Prefab JSON cache: each URL is fetched and parsed once per session; every\n * spawn shares the parsed asset. Failed loads are evicted so a later spawn\n * can retry (same policy as the shared model cache).\n */\nconst prefabCache = new Map<string, Promise<PrefabAsset>>();\n\n/**\n * Fetch + parse (and cache) a `.prefab` asset. All strings inside the\n * snapshot are passed through the registered URL resolver, so asset\n * references load correctly in published/preview builds. Use this from\n * preloaders to warm the same cache `spawnPrefab` reads.\n */\nexport function loadPrefab(url: string): Promise<PrefabAsset> {\n const cached = prefabCache.get(url);\n if (cached) {\n return cached;\n }\n\n const pending = (async () => {\n const response = await fetch(resolveUrl(url));\n if (!response.ok) {\n throw new Error(`Failed to fetch prefab \"${url}\" (${response.status})`);\n }\n const json: unknown = await response.json();\n const parsed = parsePrefabAsset(json);\n if (!parsed) {\n throw new Error(`Invalid prefab file at \"${url}\"`);\n }\n return {\n ...parsed,\n snapshot: transformStringsDeep(\n parsed.snapshot,\n resolveUrl,\n ) as PrefabAsset[\"snapshot\"],\n };\n })();\n\n prefabCache.set(url, pending);\n pending.catch(() => {\n // Evict failed loads so future spawns can retry.\n if (prefabCache.get(url) === pending) {\n prefabCache.delete(url);\n }\n });\n\n return pending;\n}\n\n/** Drop one cached prefab (or all when no url is given). */\nexport function clearPrefabCache(url?: string): void {\n if (typeof url === \"string\") {\n prefabCache.delete(url);\n } else {\n prefabCache.clear();\n }\n}\n\nexport type SpawnPrefabSource =\n | string\n | { path: string; type?: string }\n | PrefabAsset;\n\nexport type SpawnPrefabOptions = {\n /** Parent the spawned root under this entity (default: world root). */\n parentId?: EntityId | null;\n /** Local-space spawn transform for the root (partial axes allowed). */\n position?: Vec3Like;\n rotation?: Vec3Like;\n scale?: Vec3Like;\n};\n\nfunction resolveSource(source: SpawnPrefabSource): {\n url: string;\n asset: Promise<PrefabAsset> | PrefabAsset;\n} {\n if (typeof source === \"string\") {\n return { url: source, asset: loadPrefab(source) };\n }\n if (\"path\" in source && typeof source.path === \"string\") {\n // AssetInput shape from script data: { path, type }.\n return { url: source.path, asset: loadPrefab(source.path) };\n }\n const asset = source as PrefabAsset;\n return { url: asset.name ?? \"\", asset };\n}\n\n/**\n * Instantiate a prefab into a live world at runtime.\n *\n * `source` may be a URL string, a script AssetInput (`{ path, type }`), or an\n * already-loaded {@link PrefabAsset}. Resolves with the root entity id once\n * all entities/components exist — heavyweight assets inside (models,\n * textures, audio) continue loading reactively through their systems, using\n * the shared model cache for repeat spawns.\n */\nexport async function spawnPrefab(\n world: World,\n source: SpawnPrefabSource,\n options?: SpawnPrefabOptions,\n): Promise<EntityId> {\n const { url, asset } = resolveSource(source);\n const prefab = await asset;\n\n const objectManagementSystem = world.getObjectManagementSystem();\n const { rootId } = instantiateSubtree(\n world,\n objectManagementSystem,\n prefab.snapshot,\n );\n if (rootId === null) {\n throw new Error(\n `Prefab \"${url || prefab.name || \"unknown\"}\" contained no spawnable entities`,\n );\n }\n\n if (!world.getComponent(rootId, PrefabInstance)) {\n world.addComponent(rootId, new PrefabInstance(url, []));\n }\n\n if (options?.parentId !== undefined && options.parentId !== null) {\n objectManagementSystem.setParent(world, rootId, options.parentId, {\n preserveWorldTransform: false,\n });\n }\n\n const transform = world.getComponent(rootId, TransformComponent);\n if (transform && (options?.position || options?.rotation || options?.scale)) {\n const write = (target: { x: number; y: number; z: number }, src?: Vec3Like) => {\n if (!src) return;\n if (typeof src.x === \"number\") target.x = src.x;\n if (typeof src.y === \"number\") target.y = src.y;\n if (typeof src.z === \"number\") target.z = src.z;\n };\n write(transform.position, options.position);\n write(transform.rotation, options.rotation);\n write(transform.scale, options.scale);\n\n const object = world.getComponent(rootId, Object3DRef)?.object;\n if (object) {\n applyTransform(object, transform);\n object.updateMatrixWorld(true);\n }\n }\n\n return rootId;\n}\n\n/**\n * Delete a spawned prefab instance: the root entity plus every descendant\n * (children first). Returns the number of entities removed. `dispose`\n * releases GPU resources not flagged as shared (safe with the model cache).\n */\nexport function despawnPrefab(\n world: World,\n rootId: EntityId,\n dispose = true,\n): number {\n const objectManagementSystem = world.getObjectManagementSystem();\n const subtree = collectEntitySubtree(world, [rootId]).reverse();\n\n let removed = 0;\n for (const entityId of subtree) {\n if (objectManagementSystem.deleteEntity(world, entityId, dispose)) {\n removed += 1;\n }\n }\n return removed;\n}\n","import type { World } from \"./World\";\nimport { Component } from \"./Component\";\nimport {\n despawnPrefab,\n spawnPrefab,\n type SpawnPrefabOptions,\n type SpawnPrefabSource,\n} from \"./prefab/spawnPrefab\";\nimport type { CustomEcsSystem } from \"./CustomEcsSystem\";\nimport type { ComponentClass } from \"./worldSnapshotUtils\";\nimport { Object3DRef, ParentId, TransformComponent } from \"./components\";\nimport type { ParentLookup, WorldEntityView } from \"./types\";\nimport type { NetValue } from \"./components/Network\";\nimport type { NetworkHandle } from \"./network/types\";\nimport type { PlaySlotOptions } from \"./systems/AudioSystem\";\nimport type { XrHandPoseEventDetail } from \"./systems/XRHandPoseSystem\";\nimport type { XrCapabilities, XrInputState } from \"./xr/types\";\nimport type { ScriptObject } from \"./ScriptObject\";\nimport * as THREE from \"three\";\n\n/**\n * Base class for all user-authored scripts attached to an entity through a\n * `ScriptComponent`. Subclass `Behaviour` to drive per-frame logic on a single\n * entity with full access to the {@link World}, the entity's\n * {@link TransformComponent}, and its three.js {@link Object3DRef}.\n *\n * @remarks\n * Scripts are dispatched by `ScriptBehaviourSystem` once per frame in this\n * order: {@link Behaviour.init} (first frame only) → {@link Behaviour.onUpdate}.\n * Override {@link Behaviour.onUpdate} for per-frame logic — never override\n * {@link Behaviour.update}, which is the engine-managed entry point.\n *\n * **Editor vs runtime**: `Behaviour` subclasses run ONLY at preview/runtime —\n * they never execute in the editor. For a visual that must render and animate\n * inside the editor (custom shaders, procedural geometry, grass, anything the\n * object palette can't produce), use {@link ScriptObject} instead.\n *\n * The runtime recognizes a script by its **default export** plus the\n * inherited static marker `__reluBehaviourClass`. Do not override the marker.\n *\n * @example\n * ```ts\n * import { Behaviour, type Component } from \"@relu-interactives/spatial-ecs\";\n *\n *\n * export default class Spinner extends Behaviour {\n * data: {\n * speed: number;\n * axis: \"x\" | \"y\" | \"z\";\n * };\n *\n * init() {\n * this.data.speed ??= 1;\n * this.data.axis ??= \"y\";\n * }\n *\n * onUpdate() {\n * this.transform.rotation[this.data.axis] += this.data.speed * this.deltaTime;\n * }\n * }\n * ```\n *\n * @see {@link World}\n * @see {@link TransformComponent}\n * @see {@link Object3DRef}\n *\n * @category Scripting\n */\n/**\n * Payload for spatial-UI hooks.\n *\n * `targetEntityId` is the WIDGET that was interacted with — hooks bubble up\n * the parent chain, so a panel script receives its children's events and can\n * switch on `actionId` (the widget's authored id, defaulting to its entity\n * name). `input` is null when the event came from the mouse in a flat\n * preview rather than an XR pointer.\n */\nexport type UiInteractionEvent = {\n targetEntityId: number;\n actionId: string;\n input: XrInputState | null;\n /** Toggle: the new boolean. Slider: the new number. Absent for presses. */\n value?: boolean | number;\n};\n\nexport class Behaviour implements CustomEcsSystem {\n /**\n * Static marker used by `ScriptBehaviourSystem` to detect `Behaviour`\n * subclasses across bundle-identity splits (esbuild may produce a second\n * copy of the package when scripts are bundled, breaking `instanceof`).\n * Inherited by every subclass via the prototype chain.\n *\n * @internal\n */\n static readonly __reluBehaviourClass = true as const;\n\n /**\n * Inspector-bound payload from the entity's `ScriptComponent`. Override the\n * type on subclasses with `declare data: MyDataShape` to get type safety\n * inside hooks. Saved with the project so values persist across reloads.\n */\n data: Component | Record<string, unknown> = {} as Component;\n\n /** Numeric id of the entity this script is attached to. */\n entityId: number;\n\n /** View of the owning entity (id + components) at construction time. */\n entity: WorldEntityView;\n\n /**\n * Live three.js object wrapper for the entity. May be `null` for entities\n * with no scene presence; helpers on this class return `null` in that case.\n */\n threeRef: Object3DRef;\n\n /**\n * The entity's {@link TransformComponent}. Mutating `position`, `rotation`,\n * or `scale` here is picked up the same frame by `TransformSyncSystem`.\n */\n transform: TransformComponent;\n\n /**\n * The owning {@link World}. Refreshed each frame in {@link Behaviour.update}.\n * Use it to query other entities or components.\n */\n world: World;\n\n /**\n * Seconds elapsed since the last frame. Set by the engine before each\n * {@link Behaviour.onUpdate}.\n */\n deltaTime: number = 0;\n\n /**\n * Engine-managed constructor. Hosts (`ScriptBehaviourSystem`) instantiate\n * subclasses with the owning world, the entity id, and the script's `data`\n * payload. User code should not call this directly.\n *\n * @param world - The owning ECS world.\n * @param entityId - The entity this script is bound to.\n * @param component - The `ScriptComponent.data` payload, or any object that\n * should be exposed to the script as `this.data`.\n */\n constructor(\n world: World,\n entityId: number,\n component: Component | Record<string, unknown>,\n ) {\n this.world = world;\n this.entityId = entityId;\n if (component) this.data = component;\n this.entity = this.getEntity()!;\n this.threeRef = this.getComponent(Object3DRef)!;\n this.transform = this.getComponent(TransformComponent)!;\n }\n\n /**\n * Engine-managed per-frame entry point. Refreshes {@link Behaviour.deltaTime}\n * and delegates to {@link Behaviour.onUpdate}.\n *\n * @remarks Do **not** override this method — override\n * {@link Behaviour.onUpdate} instead.\n *\n * @param world - The owning world (may differ from the constructor world\n * after hot reload).\n * @param deltaTime - Seconds since the last frame.\n */\n update(world: World, deltaTime: number): void {\n this.deltaTime = deltaTime;\n this.world = world;\n this.onUpdate();\n }\n\n /**\n * Optional cleanup hook invoked when the script is detached or the entity\n * is destroyed. Override to release timers, listeners, or other resources.\n *\n * @param world - The owning world at disposal time.\n */\n dispose?(world: World): void {\n // Default cleanup: no-op; override in subclasses if needed\n }\n\n /**\n * Instantiate a prefab asset into the world at runtime.\n *\n * `source` is typically an `AssetInput` field from this script's `data`\n * (drag a `.prefab` from the asset browser onto the field in the editor),\n * a URL string, or a pre-loaded `PrefabAsset`. Resolves with the new root\n * entity id.\n *\n * ```ts\n * data = { enemyPrefab: { path: \"\", type: \"prefab\" } };\n * async onUpdate() {\n * if (shouldSpawn) {\n * const id = await this.spawnPrefab(this.data.enemyPrefab, {\n * position: { x: 0, y: 0, z: -5 },\n * });\n * }\n * }\n * ```\n */\n spawnPrefab(\n source: SpawnPrefabSource,\n options?: SpawnPrefabOptions,\n ): Promise<number> {\n return spawnPrefab(this.world, source, options);\n }\n\n /**\n * The shared world, or `null` in a single-player run, so a script can work\n * both ways:\n *\n * ```ts\n * if (this.network && !this.network.isOwner) return; // someone else moves this\n * ```\n */\n get network(): NetworkHandle | null {\n return this.world.getNetwork()?.handleFor(this.entityId) ?? null;\n }\n\n /** Someone joined the room. `playerId` is their session id. */\n onPlayerJoin(_playerId: string): void {}\n\n /** Someone left the room. */\n onPlayerLeave(_playerId: string): void {}\n\n /** A shared value on this entity changed. */\n onNetworkProp(_key: string, _value: NetValue): void {}\n\n /**\n * Load a `.soundbank.json` asset so {@link Behaviour.playSlot} can play it.\n * `source` is an asset path or an `AssetInput` field.\n */\n loadSoundBank(source: string | { path: string }): Promise<void> {\n return this.world.getAudioSystem()?.loadSoundBank(source) ?? Promise.resolve();\n }\n\n /**\n * Play a named sound from a loaded bank, as a random take. Returns whether it\n * sounded: its chance, cooldown or priority may keep it quiet.\n *\n * ```ts\n * this.playSlot(\"hit\", { position: this.transform.position });\n * ```\n */\n playSlot(id: string, options?: PlaySlotOptions): boolean {\n return this.world.getAudioSystem()?.playSlot(id, options) ?? false;\n }\n\n /**\n * Remove a spawned prefab instance (the root entity and all descendants).\n * Returns the number of entities removed.\n */\n despawn(rootEntityId: number): number {\n return despawnPrefab(this.world, rootEntityId);\n }\n\n /**\n * Returns the entity's world-space position as a new `THREE.Vector3`, or\n * `null` if the entity has no scene presence.\n */\n getWorldPosition(): THREE.Vector3 | null {\n if (!this.threeRef) {\n return null;\n }\n\n const position = new THREE.Vector3();\n this.threeRef.object.getWorldPosition(position);\n\n return position;\n }\n\n /**\n * Returns the entity's forward direction in world space (the +Z axis of its\n * world matrix), or `null` if the entity has no scene presence.\n */\n getWorldDirection(): THREE.Vector3 | null {\n if (!this.threeRef) {\n return null;\n }\n\n const target = new THREE.Vector3();\n this.threeRef.object.getWorldDirection(target);\n\n return target;\n }\n\n /**\n * Returns a unit vector pointing from this entity toward the given world\n * position, or `null` if the entity has no scene presence.\n *\n * @param targetPosition - Destination point in world space.\n */\n directionTo(targetPosition: THREE.Vector3): THREE.Vector3 | null {\n const currentPosition = this.getWorldPosition();\n if (!currentPosition) {\n return null;\n }\n\n return targetPosition.clone().sub(currentPosition).normalize();\n }\n\n /**\n * Returns the world-space distance from this entity to the given position,\n * or `null` if the entity has no scene presence.\n *\n * @param targetPosition - Destination point in world space.\n */\n distanceTo(targetPosition: THREE.Vector3): number | null {\n const currentPosition = this.getWorldPosition();\n if (!currentPosition) {\n return null;\n }\n\n return currentPosition.distanceTo(targetPosition);\n }\n\n /**\n * Linearly interpolates the entity's position toward `targetPosition` and\n * writes the result back through {@link TransformComponent}. No-op if the\n * entity has no scene presence.\n *\n * @param targetPosition - Destination point in world space.\n * @param alpha - Interpolation factor in [0, 1]. Multiply by `deltaTime`\n * for frame-rate-independent smoothing.\n */\n lerpTo(targetPosition: THREE.Vector3, alpha: number): void {\n if (!this.threeRef) {\n return;\n }\n\n const currentPosition = this.getWorldPosition();\n if (!currentPosition) {\n return;\n }\n\n const newPosition = currentPosition.lerp(targetPosition, alpha);\n this.transform.setPosition(newPosition);\n }\n\n /**\n * Spherically interpolates the entity's rotation toward `targetRotation`\n * and writes the result back through {@link TransformComponent}. No-op if\n * the entity has no scene presence.\n *\n * @param targetRotation - Destination orientation as a quaternion.\n * @param alpha - Interpolation factor in [0, 1].\n */\n slerpTo(targetRotation: THREE.Quaternion, alpha: number): void {\n if (!this.threeRef) {\n return;\n }\n\n const rotation = new THREE.Quaternion();\n\n this.threeRef.object.getWorldQuaternion(rotation);\n rotation.slerp(targetRotation, alpha);\n this.transform.setRotation(rotation);\n }\n\n /**\n * Rotates the entity to face `targetPosition` in world space and writes the\n * resulting orientation back through {@link TransformComponent}. No-op if\n * the entity has no scene presence.\n *\n * @param targetPosition - Point in world space to face.\n */\n lookAt(targetPosition: THREE.Vector3): void {\n if (!this.threeRef) {\n return;\n }\n\n const clone = this.threeRef.object.clone();\n\n const rotation = new THREE.Quaternion();\n clone.lookAt(targetPosition);\n clone.getWorldQuaternion(rotation);\n this.transform.setRotation(rotation);\n }\n\n /** Returns every component currently attached to this entity. */\n getComponents(): Component[] {\n return this.world.getEntityById(this.entityId)?.components ?? [];\n }\n\n /**\n * Returns the entity's component of the given class, or `null` if it has\n * no such component.\n *\n * @typeParam T - Concrete component type.\n * @param componentClass - Component class constructor to look up.\n *\n * @example\n * ```ts\n * const mesh = this.getComponent(MeshComponent);\n * if (mesh) console.log(mesh.geometryRef);\n * ```\n */\n getComponent<T extends Component>(\n componentClass: ComponentClass<T>,\n ): T | null {\n return this.world.getComponent(this.entityId, componentClass) ?? null;\n }\n\n /**\n * Returns the latest {@link WorldEntityView} snapshot for this entity, or\n * `null` if it was destroyed.\n */\n getEntity(): WorldEntityView | null {\n return this.world.getEntityById(this.entityId);\n }\n\n /**\n * Resolves the entity's parent from the {@link ParentId} component, if any.\n *\n * @returns A {@link ParentLookup} with the parent component reference and\n * the parent entity view (or `null` if the entity is at the root).\n */\n getParent(): ParentLookup {\n const parentIdComponent = this.getComponent(ParentId);\n const parentEntityId = parentIdComponent?.value ?? null;\n\n if (parentEntityId === null) {\n return {\n parentIdComponent,\n parent: null,\n };\n }\n\n return {\n parentIdComponent,\n parent: this.world.getEntityById(parentEntityId),\n };\n }\n\n /**\n * Returns every direct child entity of this one (entities whose\n * {@link ParentId} matches `entityId`).\n */\n getChildren(): WorldEntityView[] {\n return this.world.getAllEntities().filter((entity) => {\n const parentIdComponent = entity.components.find(\n (component) => component instanceof ParentId,\n ) as ParentId | undefined;\n\n return parentIdComponent?.value === this.entityId;\n });\n }\n\n /**\n * Called once before the first {@link Behaviour.onUpdate}. Override to\n * default and validate {@link Behaviour.data}, cache references, or set\n * initial state. Runs at preview/runtime only — never in the editor.\n */\n protected init(): void {\n // Override in subclasses to implement custom startup logic\n }\n\n /**\n * Called every frame while the script is enabled. Override with the\n * script's main per-frame logic. Runs at preview/runtime only — never in the\n * editor (use {@link ScriptObject} for editor-visible visuals).\n */\n protected onUpdate(): void {\n // Override in subclasses to implement custom behaviour\n }\n\n /** Called when the editor selects this entity. Optional UX hook. */\n onSelect(): void {\n // Override in subclasses to implement custom logic when this behaviour's entity is selected\n }\n\n /** Called when the editor deselects this entity. Optional UX hook. */\n onDeselect(): void {\n // Override in subclasses to implement custom logic when this behaviour's entity is deselected\n }\n\n /**\n * Called when an image-tracking target this entity depends on becomes\n * visible. Optional AR hook.\n *\n * @param target - The newly-visible target entity view.\n */\n onTargetFound(target: WorldEntityView): void {\n // Override in subclasses to implement custom logic when a target is found\n }\n\n /**\n * Called when an image-tracking target this entity depends on is lost.\n * Optional AR hook.\n *\n * @param target - The target entity view that became invisible.\n */\n onTargetLost(target: WorldEntityView): void {\n // Override in subclasses to implement custom logic when a target is lost\n }\n\n // ─── WebXR (VR / MR) hooks ────────────────────────────────────────────────\n // Dispatched by XRSessionSystem / XRInteractionSystem, following the same\n // pattern as the AR hooks above: public no-op methods that subclasses opt\n // into by overriding. They never fire outside an immersive session.\n\n /**\n * Called once when an immersive session starts. Optional XR hook.\n *\n * Use it to set up XR-only state. Inspect `capabilities` rather than guessing\n * by device: feature support differs sharply per headset (for example Vision\n * Pro grants no passthrough on the web today).\n *\n * @param capabilities - What the session actually granted, read from\n * `XRSession.enabledFeatures`.\n */\n onXRSessionStart(capabilities: XrCapabilities): void {\n // Override in subclasses to react to entering VR/MR\n }\n\n /** Called once when the immersive session ends. Optional XR hook. */\n onXRSessionEnd(): void {\n // Override in subclasses to tear down XR-only state\n }\n\n /**\n * Called when a primary action begins — controller trigger, hand pinch, or\n * Vision Pro gaze-pinch. Optional XR hook.\n *\n * @param input - Normalized state for the source that acted.\n */\n onSelectStart(input: XrInputState): void {\n // Override in subclasses to react to a primary action press\n }\n\n /** Called when the primary action ends. Optional XR hook. */\n onSelectEnd(input: XrInputState): void {\n // Override in subclasses to react to a primary action release\n }\n\n /**\n * Called when this entity is grabbed. Optional XR hook.\n *\n * Only fires for entities carrying an enabled, grabbable\n * `XRInteractableComponent`.\n *\n * @param input - The source doing the grabbing.\n */\n /**\n * A SECOND hand joined a two-hand grab on this entity.\n *\n * The first hand anchors the object and keeps holding it; this fires for the\n * hand that came second — the foregrip on a rifle, say.\n */\n onSecondaryGrab(_input: XrInputState): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /** The second hand let go, leaving the object in the first hand alone. */\n onSecondaryRelease(_input: XrInputState): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /**\n * A hand pose declared on this entity started being held.\n *\n * Fires once the pose has been sustained for its hold time, not the instant\n * the fingers pass through it.\n */\n onHandPoseStart(_event: XrHandPoseEventDetail): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /** A held hand pose ended, or its hand stopped being tracked. */\n onHandPoseEnd(_event: XrHandPoseEventDetail): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n onGrab(input: XrInputState): void {\n // Override in subclasses to react to being picked up\n }\n\n /** Called when this entity is released. Optional XR hook. */\n onRelease(input: XrInputState): void {\n // Override in subclasses to react to being dropped\n }\n\n /** A UI button on this entity (or a descendant) was clicked. Clicks fire on\n * RELEASE while still pointing at the widget — sliding off cancels. */\n onUiPress(_event: UiInteractionEvent): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /** A pointer began hovering a UI widget on this entity (or a descendant). */\n onUiHoverStart(_event: UiInteractionEvent): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /** The pointer left the widget. */\n onUiHoverEnd(_event: UiInteractionEvent): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /** A UI toggle flipped; `event.value` is the new boolean. */\n onUiToggle(_event: UiInteractionEvent): void {\n // Intentionally empty — overridden by subclasses.\n }\n\n /** A UI slider moved; `event.value` is the new number. Fires on real value\n * changes during the drag and once more on release. */\n onUiChange(_event: UiInteractionEvent): void {\n // Intentionally empty — overridden by subclasses.\n }\n}\n"]}
|