@relu-interactives/spatial-ecs 0.2.20 → 0.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/{System-BjwOBx81.d.cts → System-me3iAcMF.d.cts} +5 -1
  2. package/dist/{System-BjwOBx81.d.ts → System-me3iAcMF.d.ts} +5 -1
  3. package/dist/{Video-B9z5AtIf.d.ts → Video-DHnxjGhW.d.ts} +1 -1
  4. package/dist/{Video-B8yVI1tF.d.cts → Video-U9hAnf9y.d.cts} +1 -1
  5. package/dist/{chunk-67MFQDHX.js → chunk-5U3YS4JD.js} +196 -33
  6. package/dist/chunk-5U3YS4JD.js.map +1 -0
  7. package/dist/{chunk-DY4ETMP2.js → chunk-AXRCGF63.js} +3 -3
  8. package/dist/{chunk-DY4ETMP2.js.map → chunk-AXRCGF63.js.map} +1 -1
  9. package/dist/{chunk-HUHN6IFD.js → chunk-K6KMKKJ6.js} +4 -4
  10. package/dist/{chunk-HUHN6IFD.js.map → chunk-K6KMKKJ6.js.map} +1 -1
  11. package/dist/{chunk-Z6OMYEXU.js → chunk-V7BNVTJW.js} +11 -3
  12. package/dist/chunk-V7BNVTJW.js.map +1 -0
  13. package/dist/components/index.cjs +9 -1
  14. package/dist/components/index.cjs.map +1 -1
  15. package/dist/components/index.d.cts +3 -3
  16. package/dist/components/index.d.ts +3 -3
  17. package/dist/components/index.js +1 -1
  18. package/dist/docs/guide/prefabs.md +24 -5
  19. package/dist/factories/index.d.cts +2 -2
  20. package/dist/factories/index.d.ts +2 -2
  21. package/dist/factories/index.js +3 -3
  22. package/dist/{index-LHLKpJhZ.d.cts → index-CZo5I5Gs.d.cts} +29 -13
  23. package/dist/{index-BBI2YdCu.d.ts → index-D7FSg0Au.d.ts} +29 -13
  24. package/dist/index.cjs +458 -40
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +108 -10
  27. package/dist/index.d.ts +108 -10
  28. package/dist/index.js +249 -11
  29. package/dist/index.js.map +1 -1
  30. package/dist/systems/index.cjs +26 -7
  31. package/dist/systems/index.cjs.map +1 -1
  32. package/dist/systems/index.d.cts +2 -2
  33. package/dist/systems/index.d.ts +2 -2
  34. package/dist/systems/index.js +3 -3
  35. package/dist/types.d.cts +1 -1
  36. package/dist/types.d.ts +1 -1
  37. package/dist/worldSnapshotUtils.d.cts +1 -1
  38. package/dist/worldSnapshotUtils.d.ts +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-67MFQDHX.js.map +0 -1
  41. package/dist/chunk-Z6OMYEXU.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/Component.ts","../core/worldSnapshotUtils.ts","../core/AnimationStateMachine.ts","../core/components/Animation.ts","../core/factories/components/AnimationFactory.ts","../core/components/Audio.ts","../core/factories/components/AudioComponentFactory.ts","../core/components/Camera.ts","../core/components/Object3DRef.ts","../core/factories/components/CameraFactory.ts","../core/components/Physics.ts","../core/components/MeshGeometry.ts","../core/factories/components/PhysicsFactory.ts","../core/components/Environment.ts","../core/factories/components/EnvironmentFactory.ts","../core/components/EntityType.ts","../core/factories/components/EntityTypeFactory.ts","../core/components/Image.ts","../core/factories/components/ImageComponentFactory.ts","../core/components/ImageTargetAnchor.ts","../core/factories/components/ImageTargetAnchorFactory.ts","../core/components/ImageTarget.ts","../core/factories/components/ImageTargetFactory.ts","../core/components/Light.ts","../core/factories/components/LightFactory.ts","../core/components/Material.ts","../core/factories/components/MaterialFactory.ts","../core/components/Mesh.ts","../core/factories/components/MeshFactory.ts","../core/factories/components/MeshGeometryFactory.ts","../core/components/Model.ts","../core/factories/components/ModelFactory.ts","../core/components/Name.ts","../core/factories/components/NameFactory.ts","../core/factories/components/Object3DRefFactory.ts","../core/components/ParentId.ts","../core/factories/components/ParentIdFactory.ts","../core/components/Postprocessing.ts","../core/factories/components/PostprocessingFactory.ts","../core/components/ScriptComponent.ts","../core/factories/components/ScriptComponentFactory.ts","../core/components/Selectable.ts","../core/factories/components/SelectableFactory.ts","../core/components/SelectionTransformState.ts","../core/factories/components/SelectionTransformStateFactory.ts","../core/components/Sprite.ts","../core/factories/components/SpriteFactory.ts","../core/components/Transform.ts","../core/factories/components/TransformFactory.ts","../core/components/InstancedMesh.ts","../core/factories/components/InstancedMeshComponentFactory.ts","../core/components/InstanceSlotComponent.ts","../core/factories/components/InstanceSlotComponentFactory.ts","../core/components/Video.ts","../core/factories/components/VideoFactory.ts","../core/factories/registerDefaultComponentFactories.ts","../core/utils/modelCache.ts","../core/systems/ObjectManagementSystem.ts","../core/factories/objects/shared.ts","../core/factories/objects/AudioFactory.ts","../core/factories/objects/CameraFactory.ts","../core/factories/objects/CapsuleFactory.ts","../core/factories/objects/CubeFactory.ts","../core/factories/objects/CylinderFactory.ts","../core/factories/objects/EmptyFactory.ts","../core/factories/objects/ImageFactory.ts","../core/factories/objects/ImageTargetFactory.ts","../core/factories/objects/InstancedMeshFactory.ts","../core/factories/objects/InstanceSlotFactory.ts","../core/factories/objects/lights/AmbientLightFactory.ts","../core/factories/objects/lights/AreaLightFactory.ts","../core/factories/objects/lights/DirectionalLightFactory.ts","../core/factories/objects/lights/PointLightFactory.ts","../core/factories/objects/lights/SpotLightFactory.ts","../core/utils/dracoDecoderPath.ts","../core/components/index.ts","../core/components/PrefabInstance.ts","../core/components/PrefabNode.ts","../core/factories/objects/ModelFactory.ts","../core/factories/objects/PlaneFactory.ts","../core/factories/objects/SpriteFactory.ts","../core/factories/objects/SphereFactory.ts","../core/factories/objects/VideoFactory.ts","../core/factories/registerDefaultFactories.ts","../core/prefab/collectEntitySubtree.ts","../core/hydration/readers.ts","../core/hydration/componentValues.ts","../core/hydration/parentLinks.ts","../core/hydration/postCreateComponents.ts","../core/hydration/animation.ts","../core/hydration/restoreComponentState.ts","../core/hydration/types.ts","../core/hydration/hydrateWorld.ts","../core/prefab/overrides.ts","../core/prefab/instantiateSubtree.ts","../core/prefab/types.ts","../core/prefab/spawnPrefab.ts","../core/systems/AnimationSystem.ts","../core/systems/CameraSyncSystem.ts","../core/systems/ObjectVisibilitySystem.ts","../core/systems/EnvironmentSyncSystem.ts","../core/systems/PostprocessingSyncSystem.ts","../core/systems/PhysicsSyncSystem.ts","../core/systems/keyboardKeys.ts","../core/systems/InputSystem.ts","../core/systems/LightSyncSystem.ts","../core/systems/MaterialSyncSystem.ts","../core/systems/MeshGeometrySystem.ts","../core/utils/loader.ts","../core/systems/InstancedMeshSystem.ts","../core/systems/RenderSystem.ts","../core/Behaviour.ts","../core/systems/ScriptBehaviourSystem.ts","../core/systems/TransformSyncSystem.ts","../core/systems/AudioSystem.ts","../core/systems/VideoSystem.ts","../core/World.ts","../core/prefab/snapshotIdUtils.ts","../core/prefab/serializeEntitySubtree.ts"],"names":["cloneObject","THREE","THREE2","material","THREE3","THREE4","toFiniteNumber","THREE6","toHexColor","THREE7","asRecord","toBoolean","Vector3","Euler","Quaternion","THREE8","cloneWithSkeleton","THREE9","THREE10","DEFAULT_NEAR","DEFAULT_FAR","DEFAULT_FOV","THREE11","THREE12","THREE13","THREE14","THREE15","THREE16","THREE17","THREE18","THREE19","THREE20","RectAreaLightHelper","THREE21","THREE22","THREE23","GLTFLoader","DRACOLoader","THREE24","THREE25","THREE26","THREE27","getOrCreateListener","THREE28","normalizeDistanceModel","options","THREE29","FBXLoader","entries","THREE30","THREE31","EffectComposer","RenderPass","BokehPass","THREE32","UnrealBloomPass","ShaderPass","VignetteShader","HueSaturationShader","SepiaShader","FilmPass","DotScreenPass","SSAOPass","GlitchPass","OutputPass","THREE33","body","THREE34","THREE35","THREE36","THREE38","count","geometry","instancedMesh","THREE39","clone","THREE40","THREE41","snapshotOptions","THREE42","THREE43"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Marker base class for every ECS component. Subclass `Component` to declare\n * a typed data container that systems can query.\n *\n * @remarks\n * Components own state only — runtime behaviour belongs in {@link Behaviour}\n * subclasses for user scripts. Keep fields plain (numbers, strings, vectors,\n * asset URLs).\n *\n * @category Components\n */\nexport class Component {}\n\n","import { Component } from \"./Component\";\nimport type { EntityId } from \"./types\";\n\nexport type ComponentClass<T extends Component> = new (...args: never[]) => T;\nexport type AnyComponent = Component;\n\nexport type WorldHistorySnapshot = {\n selectedEntityId: EntityId | null;\n entities: EntityId[];\n nextEntityId: number;\n components: Array<{\n componentType: ComponentClass<AnyComponent>;\n entries: Array<{\n entityId: EntityId;\n component: AnyComponent;\n }>;\n }>;\n};\n\nexport const DEBUG_CHANGE_IGNORED_SYSTEMS = new Set<string>([\n \"OrbitCameraSystem\",\n \"PhysicsSyncSystem\",\n]);\n\ntype NormalizeContext = {\n seen: WeakSet<object>;\n depth: number;\n maxDepth: number;\n};\n\nexport function normalizeDebugValue(\n value: unknown,\n ctx: NormalizeContext,\n): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n const valueType = typeof value;\n if (\n valueType === \"string\" ||\n valueType === \"number\" ||\n valueType === \"boolean\"\n ) {\n return value;\n }\n\n if (valueType === \"function\") {\n const fn = value as (...args: unknown[]) => unknown;\n return `[Function:${fn.name || \"anonymous\"}]`;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (valueType !== \"object\") {\n return String(value);\n }\n\n const objectValue = value as Record<string, unknown>;\n\n const constructorName =\n objectValue.constructor?.name && objectValue.constructor.name !== \"Object\"\n ? objectValue.constructor.name\n : null;\n\n if (constructorName === \"AnimationClip\") {\n return {\n __type: \"AnimationClip\",\n name: typeof objectValue.name === \"string\" ? objectValue.name : \"\",\n };\n }\n\n if (constructorName === \"AnimationStateMachine\") {\n const clipValue =\n objectValue.clip && typeof objectValue.clip === \"object\"\n ? (objectValue.clip as Record<string, unknown>)\n : null;\n\n return {\n __type: \"AnimationStateMachine\",\n name: typeof objectValue.name === \"string\" ? objectValue.name : \"\",\n loop: Boolean(objectValue.loop),\n isPlaying: Boolean(objectValue.isPlaying),\n isPaused: Boolean(objectValue.isPaused),\n clip: {\n __type: \"AnimationClip\",\n name: typeof clipValue?.name === \"string\" ? clipValue.name : \"\",\n },\n };\n }\n\n if (constructorName === \"AnimationComponent\") {\n const clips = Array.isArray(objectValue.clips)\n ? objectValue.clips\n .map((clip) => {\n if (!clip || typeof clip !== \"object\") {\n return null;\n }\n\n const clipValue = clip as Record<string, unknown>;\n return {\n __type: \"AnimationClip\",\n name: typeof clipValue.name === \"string\" ? clipValue.name : \"\",\n };\n })\n .filter((clip): clip is { __type: \"AnimationClip\"; name: string } => clip !== null)\n : [];\n\n const availableClips = Array.isArray(objectValue.availableClips)\n ? objectValue.availableClips.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n )\n : clips.map((clip) => clip.name).filter((name) => name.length > 0);\n\n const externalClipSources = Array.isArray(objectValue.externalClipSources)\n ? objectValue.externalClipSources.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n )\n : [];\n\n const states = Array.isArray(objectValue.states)\n ? objectValue.states\n .map((state) => {\n if (!state || typeof state !== \"object\") {\n return null;\n }\n\n const stateValue = state as Record<string, unknown>;\n const clipValue =\n stateValue.clip && typeof stateValue.clip === \"object\"\n ? (stateValue.clip as Record<string, unknown>)\n : null;\n\n const name = typeof stateValue.name === \"string\" ? stateValue.name : \"\";\n const clip = typeof clipValue?.name === \"string\" ? clipValue.name : \"\";\n if (!name || !clip) {\n return null;\n }\n\n return {\n name,\n clip,\n clipId:\n typeof stateValue.clipId === \"string\" && stateValue.clipId.length > 0\n ? stateValue.clipId\n : null,\n loop: Boolean(stateValue.loop),\n };\n })\n .filter(\n (\n state,\n ): state is {\n name: string;\n clip: string;\n clipId: string | null;\n loop: boolean;\n } => state !== null,\n )\n : [];\n\n const activeValue =\n objectValue.active && typeof objectValue.active === \"object\"\n ? (objectValue.active as Record<string, unknown>)\n : null;\n\n const activeStateName =\n typeof objectValue.activeStateName === \"string\"\n ? objectValue.activeStateName\n : typeof activeValue?.name === \"string\"\n ? activeValue.name\n : null;\n\n return {\n __type: \"AnimationComponent\",\n clips,\n availableClips,\n externalClipSources,\n states,\n activeStateName,\n paused: Boolean(objectValue.paused),\n reverse: Boolean(objectValue.reverse),\n timeScale:\n typeof objectValue.timeScale === \"number\" && Number.isFinite(objectValue.timeScale)\n ? objectValue.timeScale\n : 1,\n crossFadeDuration:\n typeof objectValue.crossFadeDuration === \"number\" &&\n Number.isFinite(objectValue.crossFadeDuration)\n ? Math.max(0, objectValue.crossFadeDuration)\n : 0,\n };\n }\n if (constructorName === \"InstanceSlotComponent\") {\n return {\n __type: \"InstanceSlotComponent\",\n groupEntityId:\n typeof objectValue.groupEntityId === \"number\"\n ? objectValue.groupEntityId\n : -1,\n slotIndex:\n typeof objectValue.slotIndex === \"number\"\n ? objectValue.slotIndex\n : 0,\n };\n }\n if (constructorName === \"InstancedMeshComponent\") {\n // Only serialize the authoring fields. The live `instancedMesh` Three.js\n // ref changes on every geometry rebuild and must not enter the debug\n // snapshot — doing so would cause WorldChangeDetectionSystem to flood\n // the undo history with spurious entries.\n const imCtx: NormalizeContext = {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n };\n return {\n __type: \"InstancedMeshComponent\",\n meshKind: typeof objectValue.meshKind === \"string\" ? objectValue.meshKind : \"cube\",\n modelPath: typeof objectValue.modelPath === \"string\" ? objectValue.modelPath : \"\",\n meshParameters: normalizeDebugValue(objectValue.meshParameters, imCtx),\n castShadow: Boolean(objectValue.castShadow),\n receiveShadow: Boolean(objectValue.receiveShadow),\n instanceEntityIds: Array.isArray(objectValue.instanceEntityIds)\n ? [...(objectValue.instanceEntityIds as number[])]\n : [],\n };\n }\n\n if (constructorName === \"PhysicsComponent\") {\n // `collider` Rapier references change every physics frame and must not\n // be included in the debug snapshot, otherwise the WorldChangeDetection-\n // System would detect a change every frame and flood the undo history.\n return {\n __type: \"PhysicsComponent\",\n values: normalizeDebugValue(objectValue.values, {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n }),\n };\n }\n\n if (constructorName === \"MaterialComponent\") {\n // Only serialize the authoring `values` state. The live Three.js\n // `material` / `materials` objects mutate after transparency is toggled\n // (shader recompilation flags, `needsUpdate`, etc.) and must not be\n // included in the debug snapshot — doing so causes the\n // WorldChangeDetectionSystem to detect a spurious change every frame.\n return {\n __type: \"MaterialComponent\",\n values: normalizeDebugValue(objectValue.values, {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n }),\n // Editor-managed material-asset linkage (plain strings/nulls).\n assetRefs: Array.isArray(objectValue.assetRefs)\n ? [...(objectValue.assetRefs as (string | null)[])]\n : [],\n };\n }\n\n if (constructorName === \"VideoComponent\") {\n // Only serialize `path` and `options`. The live runtime fields\n // (`object`, `videoElement`, `texture`, `material`, `audioNode`) change\n // during video load/playback and must not be included in the debug\n // snapshot — doing so causes WorldChangeDetectionSystem to detect a\n // spurious change on every frame while a video is loading or playing.\n return {\n __type: \"VideoComponent\",\n path: typeof objectValue.path === \"string\" ? objectValue.path : \"\",\n options: normalizeDebugValue(objectValue.options, {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n }),\n };\n }\n\n if (ctx.seen.has(objectValue)) {\n return \"[Circular]\";\n }\n\n if (ctx.depth >= ctx.maxDepth) {\n return constructorName\n ? `[MaxDepth:${constructorName}]`\n : \"[MaxDepth:Object]\";\n }\n\n if (objectValue.nodeType === 1 && typeof objectValue.tagName === \"string\") {\n return `[HTMLElement:${String(objectValue.tagName)}]`;\n }\n\n if (objectValue.isObject3D === true) {\n const position = objectValue.position as\n | { x?: number; y?: number; z?: number }\n | undefined;\n\n return {\n __type: \"Object3D\",\n objectType: objectValue.type,\n name: objectValue.name,\n uuid: objectValue.uuid,\n position:\n position &&\n typeof position.x === \"number\" &&\n typeof position.y === \"number\" &&\n typeof position.z === \"number\"\n ? {\n x: position.x,\n y: position.y,\n z: position.z,\n }\n : undefined,\n };\n }\n\n ctx.seen.add(objectValue);\n const nextContext: NormalizeContext = {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n };\n\n if (Array.isArray(objectValue)) {\n return objectValue.map((item) => normalizeDebugValue(item, nextContext));\n }\n\n if (objectValue instanceof Map) {\n return {\n __type: \"Map\",\n entries: [...objectValue.entries()].map(([key, mapValue]) => [\n normalizeDebugValue(key, nextContext),\n normalizeDebugValue(mapValue, nextContext),\n ]),\n };\n }\n\n if (objectValue instanceof Set) {\n return {\n __type: \"Set\",\n values: [...objectValue.values()].map((setValue) =>\n normalizeDebugValue(setValue, nextContext),\n ),\n };\n }\n\n const normalized: Record<string, unknown> = {};\n const keys = Object.keys(objectValue).sort((a, b) => a.localeCompare(b));\n for (const key of keys) {\n normalized[key] = normalizeDebugValue(objectValue[key], nextContext);\n }\n\n return constructorName\n ? {\n __type: constructorName,\n ...normalized,\n }\n : normalized;\n}\n\nfunction shouldPreserveReference(value: object): boolean {\n const objectValue = value as Record<string, unknown>;\n\n if (objectValue.isObject3D === true) {\n return true;\n }\n\n if (objectValue.nodeType === 1 && typeof objectValue.tagName === \"string\") {\n return true;\n }\n\n return false;\n}\n\nexport function cloneHistoryValue<T>(\n value: T,\n seen: WeakMap<object, unknown> = new WeakMap<object, unknown>(),\n): T {\n if (value === null || value === undefined) {\n return value;\n }\n\n const valueType = typeof value;\n if (\n valueType === \"string\" ||\n valueType === \"number\" ||\n valueType === \"boolean\" ||\n valueType === \"bigint\" ||\n valueType === \"symbol\" ||\n valueType === \"function\"\n ) {\n return value;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n\n if (valueType !== \"object\") {\n return value;\n }\n\n const objectValue = value as Record<string, unknown>;\n\n if (shouldPreserveReference(objectValue)) {\n return value;\n }\n\n const seenValue = seen.get(objectValue);\n if (seenValue !== undefined) {\n return seenValue as T;\n }\n\n if (Array.isArray(objectValue)) {\n const cloneArray: unknown[] = [];\n seen.set(objectValue, cloneArray);\n\n for (const item of objectValue) {\n cloneArray.push(cloneHistoryValue(item, seen));\n }\n\n return cloneArray as T;\n }\n\n const prototype = Object.getPrototypeOf(objectValue);\n const constructorName = objectValue.constructor?.name;\n const shouldCloneWithPrototype =\n objectValue instanceof Component ||\n prototype === Object.prototype ||\n prototype === null;\n\n if (!shouldCloneWithPrototype) {\n return value;\n }\n\n // Null out live Three.js refs on known components so history snapshots never\n // carry a stale/disposed reference that would cause ghost meshes on undo/redo.\n // InstancedMeshSystem tracks its own mesh ref internally for cleanup.\n if (constructorName === \"InstancedMeshComponent\") {\n const cloneObject = Object.create(prototype) as Record<string, unknown>;\n seen.set(objectValue, cloneObject);\n for (const key of Object.keys(objectValue)) {\n cloneObject[key] =\n key === \"instancedMesh\" ? null : cloneHistoryValue(objectValue[key], seen);\n }\n return cloneObject as T;\n }\n\n const cloneObject = Object.create(prototype) as Record<string, unknown>;\n seen.set(objectValue, cloneObject);\n\n for (const key of Object.keys(objectValue)) {\n cloneObject[key] = cloneHistoryValue(objectValue[key], seen);\n }\n\n return cloneObject as T;\n}\n","import type * as THREE from \"three\";\n\nexport interface StateMachine {\n name: string;\n clip: THREE.AnimationClip;\n clipId: string | null;\n loop: boolean;\n isPlaying: boolean;\n isPaused: boolean;\n onStart: () => void;\n onPlaying: () => void;\n onEnd: () => void;\n play: () => void;\n pause: () => void;\n stop: () => void;\n}\n\nexport type AnimationStateCallbacks = {\n onStart?: () => void;\n onPlaying?: () => void;\n onEnd?: () => void;\n};\n\nexport class AnimationStateMachine implements StateMachine {\n name: string;\n clip: THREE.AnimationClip;\n clipId: string | null;\n loop: boolean;\n isPlaying = false;\n isPaused = false;\n private callbacks: Required<AnimationStateCallbacks>;\n\n constructor(\n name: string,\n clip: THREE.AnimationClip,\n callbacks: AnimationStateCallbacks = {},\n loop = false,\n clipId: string | null = null,\n ) {\n this.name = name;\n this.clip = clip;\n this.clipId = clipId;\n this.loop = loop;\n this.callbacks = {\n onStart: callbacks.onStart ?? (() => {}),\n onPlaying: callbacks.onPlaying ?? (() => {}),\n onEnd: callbacks.onEnd ?? (() => {}),\n };\n }\n\n setCallbacks(callbacks: AnimationStateCallbacks): void {\n this.callbacks = {\n onStart: callbacks.onStart ?? this.callbacks.onStart,\n onPlaying: callbacks.onPlaying ?? this.callbacks.onPlaying,\n onEnd: callbacks.onEnd ?? this.callbacks.onEnd,\n };\n }\n\n setLoop(loop: boolean): void {\n this.loop = loop;\n }\n\n onStart(): void {\n this.callbacks.onStart();\n }\n\n onPlaying(): void {\n this.callbacks.onPlaying();\n }\n\n onEnd(): void {\n this.callbacks.onEnd();\n }\n\n play(): void {\n const wasPlaying = this.isPlaying;\n this.isPlaying = true;\n this.isPaused = false;\n\n if (!wasPlaying) {\n this.onStart();\n }\n\n this.onPlaying();\n }\n\n pause(): void {\n if (!this.isPlaying) {\n return;\n }\n\n this.isPlaying = false;\n this.isPaused = true;\n }\n\n stop(): void {\n const shouldNotifyEnd = this.isPlaying || this.isPaused;\n this.isPlaying = false;\n this.isPaused = false;\n\n if (shouldNotifyEnd) {\n this.onEnd();\n }\n }\n}\n\nexport class AnimationStateManager {\n private readonly states = new Map<string, AnimationStateMachine>();\n private activeState: AnimationStateMachine | null = null;\n\n addState(state: AnimationStateMachine): AnimationStateMachine {\n this.states.set(state.name, state);\n return state;\n }\n\n createState(\n name: string,\n clip: THREE.AnimationClip,\n callbacks: AnimationStateCallbacks = {},\n loop = false,\n clipId: string | null = null,\n ): AnimationStateMachine {\n const state = new AnimationStateMachine(name, clip, callbacks, loop, clipId);\n this.states.set(name, state);\n return state;\n }\n\n removeState(name: string): boolean {\n const state = this.states.get(name);\n if (!state) {\n return false;\n }\n\n if (this.activeState?.name === name) {\n this.activeState.stop();\n this.activeState = null;\n }\n\n return this.states.delete(name);\n }\n\n getState(name: string): AnimationStateMachine | null {\n return this.states.get(name) ?? null;\n }\n\n hasState(name: string): boolean {\n return this.states.has(name);\n }\n\n listStates(): AnimationStateMachine[] {\n return [...this.states.values()];\n }\n\n getActiveState(): AnimationStateMachine | null {\n return this.activeState;\n }\n\n switchState(name: string, autoPlay = true): AnimationStateMachine | null {\n const next = this.states.get(name) ?? null;\n if (!next) {\n return null;\n }\n\n if (this.activeState && this.activeState !== next) {\n this.activeState.stop();\n }\n\n this.activeState = next;\n if (autoPlay) {\n next.play();\n }\n\n return next;\n }\n\n playState(name?: string): boolean {\n const state = name ? this.switchState(name, false) : this.activeState;\n if (!state) {\n return false;\n }\n\n this.activeState = state;\n state.play();\n return true;\n }\n\n pauseState(name?: string): boolean {\n const state = name ? this.states.get(name) : this.activeState;\n if (!state) {\n return false;\n }\n\n state.pause();\n return true;\n }\n\n stopState(name?: string): boolean {\n const state = name ? this.states.get(name) : this.activeState;\n if (!state) {\n return false;\n }\n\n state.stop();\n if (!name || this.activeState?.name === name) {\n this.activeState = null;\n }\n return true;\n }\n\n clear(): void {\n this.stopState();\n this.states.clear();\n this.activeState = null;\n }\n}","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\nimport {\n AnimationStateManager,\n type AnimationStateMachine,\n} from \"../AnimationStateMachine\";\n\n/** Initializer for {@link AnimationComponent}. */\nexport type AnimationComponentOptions = {\n /** Initial set of clips imported from the entity's model. */\n clips?: THREE.AnimationClip[];\n /** URLs (or `localasset://` paths) of clips to load asynchronously and merge into the catalog. */\n externalClipSources?: string[];\n /** Name of the state to activate after construction. */\n activeState?: string | null;\n /** Whether playback starts paused. */\n paused?: boolean;\n /** Play the active clip in reverse. */\n reverse?: boolean;\n /** Time-scale multiplier (`1` = real-time). */\n timeScale?: number;\n /** Default cross-fade duration in seconds when switching states. */\n crossFadeDuration?: number;\n /** Predefined state machine entries (`name` -> clip binding). */\n states?: Array<{\n /** State name (must be unique). */\n name: string;\n /** Clip name to play in this state. */\n clip: string;\n /** Optional stable clip id used to disambiguate same-named clips. */\n clipId?: string;\n /** Loop the clip while in this state. */\n loop?: boolean;\n }>;\n};\n\n/** Catalog entry describing a clip available to the entity (from a model or an external source). */\nexport type AnimationClipCatalogEntry = {\n /** Stable id used to reference the clip from state machines. */\n id: string;\n /** Internal clip name as stored on the `THREE.AnimationClip`. */\n name: string;\n /** Display label shown in the inspector. */\n label: string;\n /** Underlying three.js clip. */\n clip: THREE.AnimationClip;\n /** Where this clip came from. */\n source: \"model\" | \"external\";\n /** Source URL/path for `external` clips; `null` for clips imported from a model. */\n sourceUrl: string | null;\n};\n\ntype ImportedClipEntry = {\n clip: THREE.AnimationClip;\n sourceUrl: string | null;\n};\n\n/**\n * Animation catalog and runtime state for an entity. Combines clips imported\n * from a model with externally added clips, exposes a state machine for\n * named transitions, and is queried each frame by the animation system to\n * advance mixer time.\n *\n * @remarks\n * Use the `addState` / `switchState` helpers rather than mutating the state\n * machine directly so the animation system observes transitions.\n *\n * @category Components\n */\nexport class AnimationComponent extends Component {\n private modelClips: THREE.AnimationClip[];\n private importedClips: ImportedClipEntry[];\n private clipById: Map<string, THREE.AnimationClip>;\n private clipEntriesById: Map<string, AnimationClipCatalogEntry>;\n\n /** Combined ordered list of clips (model + external) currently loaded. */\n clips: THREE.AnimationClip[];\n /** Per-clip metadata used by the inspector. */\n clipCatalog: AnimationClipCatalogEntry[];\n /** Display names of clips available for state-machine bindings. */\n availableClips: string[];\n /** URLs/paths of external clip sources (saved with the project). */\n externalClipSources: string[];\n /** Whether playback is currently paused. */\n paused: boolean;\n /** Play the active clip in reverse. */\n reverse: boolean;\n /** Playback speed multiplier (`1` = real-time). */\n timeScale: number;\n /** Default cross-fade duration in seconds when switching states. */\n crossFadeDuration: number;\n /** All state-machine entries authored on this entity. */\n states: AnimationStateMachine[];\n /** State currently being played, or `null` if none. */\n active: AnimationStateMachine | null;\n /** Name of the {@link active} state, or `null` if none. */\n activeStateName: string | null;\n /** Manager that drives state transitions; mutate via {@link addState}/{@link switchState}. */\n stateManager: AnimationStateManager;\n\n constructor(options: AnimationComponentOptions = {}) {\n super();\n\n this.modelClips = Array.isArray(options.clips) ? [...options.clips] : [];\n this.importedClips = [];\n this.clipById = new Map<string, THREE.AnimationClip>();\n this.clipEntriesById = new Map<string, AnimationClipCatalogEntry>();\n this.clips = [];\n this.clipCatalog = [];\n this.availableClips = [];\n this.externalClipSources = [];\n\n this.setExternalClipSources(options.externalClipSources ?? []);\n this.refreshClipCatalog();\n\n this.paused = options.paused ?? false;\n this.reverse = options.reverse ?? false;\n this.timeScale = options.timeScale ?? 1;\n this.crossFadeDuration = options.crossFadeDuration ?? 0;\n\n this.stateManager = new AnimationStateManager();\n this.states = this.stateManager.listStates();\n this.active = this.stateManager.getActiveState();\n this.activeStateName = this.active?.name ?? null;\n\n if (Array.isArray(options.states) && options.states.length > 0) {\n for (const entry of options.states) {\n this.addState(entry.name, entry.clip, entry.loop ?? false);\n }\n }\n // else {\n // for (const clip of this.clips) {\n // this.addState(clip.name || \"Default\", clip.name, false);\n // }\n // }\n\n if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n this.switchState(options.activeState, !this.paused);\n }\n }\n\n private refreshClipCatalog(): void {\n const catalog: AnimationClipCatalogEntry[] = [];\n const nameCounts = new Map<string, number>();\n const nextById = new Map<string, THREE.AnimationClip>();\n const nextEntriesById = new Map<string, AnimationClipCatalogEntry>();\n\n for (const [index, clip] of this.modelClips.entries()) {\n const name = typeof clip?.name === \"string\" && clip.name.length > 0\n ? clip.name\n : `Clip ${index + 1}`;\n const id = `model:${index}:${name}`;\n const count = (nameCounts.get(name) ?? 0) + 1;\n nameCounts.set(name, count);\n\n const entry: AnimationClipCatalogEntry = {\n id,\n name,\n label: count > 1 ? `${name} (${count})` : name,\n clip,\n source: \"model\",\n sourceUrl: null,\n };\n\n catalog.push(entry);\n nextById.set(id, clip);\n nextEntriesById.set(id, entry);\n }\n\n for (const [index, imported] of this.importedClips.entries()) {\n const clip = imported.clip;\n const name = typeof clip?.name === \"string\" && clip.name.length > 0\n ? clip.name\n : `Clip ${index + 1}`;\n const sourceUrl = imported.sourceUrl;\n const id = `external:${index}:${name}`;\n const count = (nameCounts.get(name) ?? 0) + 1;\n nameCounts.set(name, count);\n\n const sourceSuffix = sourceUrl\n ? sourceUrl.split(\"/\").pop() ?? sourceUrl\n : \"external\";\n\n const entry: AnimationClipCatalogEntry = {\n id,\n name,\n label:\n count > 1\n ? `${name} (${count}) • ${sourceSuffix}`\n : `${name} • ${sourceSuffix}`,\n clip,\n source: \"external\",\n sourceUrl,\n };\n\n catalog.push(entry);\n nextById.set(id, clip);\n nextEntriesById.set(id, entry);\n }\n\n this.clipById = nextById;\n this.clipEntriesById = nextEntriesById;\n this.clipCatalog = catalog;\n this.clips = catalog.map((entry) => entry.clip);\n this.availableClips = catalog.map((entry) => entry.name);\n }\n\n private refreshStateRefs(): void {\n this.states = this.stateManager.listStates();\n this.active = this.stateManager.getActiveState();\n this.activeStateName = this.active?.name ?? null;\n }\n\n private resolveClipRef(clipRef: string): { id: string; clip: THREE.AnimationClip } | null {\n const trimmed = clipRef.trim();\n if (!trimmed) {\n return null;\n }\n\n const byId = this.clipById.get(trimmed);\n if (byId) {\n return { id: trimmed, clip: byId };\n }\n\n const byName = this.clipCatalog.find((entry) => entry.name === trimmed);\n if (!byName) {\n return null;\n }\n\n return { id: byName.id, clip: byName.clip };\n }\n\n setModelClips(clips: THREE.AnimationClip[]): void {\n this.modelClips = Array.isArray(clips) ? [...clips] : [];\n this.refreshClipCatalog();\n }\n\n setImportedClips(\n clips: THREE.AnimationClip[] | ImportedClipEntry[],\n ): void {\n if (!Array.isArray(clips)) {\n this.importedClips = [];\n this.refreshClipCatalog();\n return;\n }\n\n this.importedClips = clips\n .map((entry) => {\n if (entry instanceof THREE.AnimationClip) {\n return { clip: entry, sourceUrl: null };\n }\n\n if (!entry || typeof entry !== \"object\") {\n return null;\n }\n\n const candidate = entry as Partial<ImportedClipEntry>;\n if (!(candidate.clip instanceof THREE.AnimationClip)) {\n return null;\n }\n\n return {\n clip: candidate.clip,\n sourceUrl:\n typeof candidate.sourceUrl === \"string\" && candidate.sourceUrl.length > 0\n ? candidate.sourceUrl\n : null,\n };\n })\n .filter((entry): entry is ImportedClipEntry => entry !== null);\n\n this.refreshClipCatalog();\n }\n\n setExternalClipSources(sources: string[]): void {\n if (!Array.isArray(sources)) {\n this.externalClipSources = [];\n return;\n }\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n for (const source of sources) {\n if (typeof source !== \"string\") {\n continue;\n }\n\n const trimmed = source.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n\n this.externalClipSources = normalized;\n }\n\n addState(name: string, clipRef: string, loop = false): AnimationStateMachine | null {\n if (!name.trim()) {\n return null;\n }\n\n const resolved = this.resolveClipRef(clipRef);\n if (!resolved) {\n return null;\n }\n\n const state = this.stateManager.createState(name, resolved.clip, {}, loop, resolved.id);\n this.refreshStateRefs();\n return state;\n }\n\n setStates(states: Array<{ name: string; clip: string; clipId?: string; loop?: boolean }>): void {\n const previousActive = this.activeStateName;\n this.stateManager.clear();\n\n for (const state of states) {\n if (!state.name.trim()) {\n continue;\n }\n\n let createdState: AnimationStateMachine | null = null;\n\n if (typeof state.clipId === \"string\" && state.clipId.trim().length > 0) {\n createdState = this.addState(state.name, state.clipId, Boolean(state.loop));\n }\n\n if (!createdState) {\n this.addState(state.name, state.clip, Boolean(state.loop));\n }\n }\n\n if (previousActive) {\n this.stateManager.switchState(previousActive, !this.paused);\n }\n\n this.refreshStateRefs();\n }\n\n getStateConfigs(): Array<{ name: string; clip: string; clipId: string | null; loop: boolean }> {\n return this.states.map((state) => ({\n name: state.name,\n clip: state.clip.name,\n clipId: state.clipId,\n loop: state.loop,\n }));\n }\n\n setActiveState(name: string | null, autoPlay = true): boolean {\n if (!name) {\n const stopped = this.stateManager.stopState();\n this.paused = true;\n this.refreshStateRefs();\n return stopped;\n }\n\n return this.switchState(name, autoPlay);\n }\n\n removeState(name: string): boolean {\n const removed = this.stateManager.removeState(name);\n if (removed) {\n this.refreshStateRefs();\n }\n return removed;\n }\n\n switchState(name: string, autoPlay = true): boolean {\n const state = this.stateManager.switchState(name, autoPlay);\n if (!state) {\n return false;\n }\n\n this.paused = !state.isPlaying;\n this.refreshStateRefs();\n return true;\n }\n\n playState(name?: string): boolean {\n const played = this.stateManager.playState(name);\n if (!played) {\n return false;\n }\n\n this.paused = false;\n this.refreshStateRefs();\n return true;\n }\n\n pauseState(name?: string): boolean {\n const paused = this.stateManager.pauseState(name);\n if (!paused) {\n return false;\n }\n\n this.paused = true;\n this.refreshStateRefs();\n return true;\n }\n\n stopState(name?: string): boolean {\n const stopped = this.stateManager.stopState(name);\n if (!stopped) {\n return false;\n }\n\n this.paused = true;\n this.refreshStateRefs();\n return true;\n }\n}\n","import { AnimationComponent } from \"../../components/Animation\";\nimport type { World } from \"../../World\";\n\nexport function createAnimationComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof AnimationComponent>\n): AnimationComponent {\n const component = new AnimationComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * @internal Default options applied when no override is provided.\n */\nconst DEFAULT_AUDIO_OPTIONS = {\n autoplay: false,\n loop: false,\n pitch: 1,\n volume: 1,\n positional: false,\n refDistance: 1,\n distanceModel: \"inverse\",\n rolloffFactor: 1,\n};\n\n/**\n * Plays an audio clip from `path`. Supports both global stereo (`positional:\n * false`) and 3D positional audio with the configured distance model.\n * Runtime fields (`object`, `audio`, `isPlaying`, `isPaused`) are recreated\n * when the project loads and are never persisted to saved snapshots.\n *\n * @category Components\n */\nexport class AudioComponent extends Component {\n /** Source URL or `localasset://` path of the audio file. */\n path: string;\n /**\n * Playback options.\n *\n * | Field | Default | Description |\n * |---|---|---|\n * | `autoplay` | `false` | Start playback as soon as the clip is loaded. |\n * | `loop` | `false` | Loop playback indefinitely. |\n * | `pitch` | `1` | Playback rate multiplier (`1` = normal speed/pitch). |\n * | `volume` | `1` | Linear gain in `[0, 1]`. |\n * | `positional` | `false` | When `true`, audio is spatialized using the entity's transform. |\n * | `refDistance` | `1` | Distance at which volume is unattenuated (positional only). |\n * | `distanceModel` | `\"inverse\"` | WebAudio distance model (`linear`, `inverse`, `exponential`). |\n * | `rolloffFactor` | `1` | How quickly volume falls off past `refDistance`. |\n */\n options: typeof DEFAULT_AUDIO_OPTIONS;\n /** Live three.js object hosting the audio (a parented `Audio`/`PositionalAudio`). `null` until built. */\n object: THREE.Object3D | null;\n /** Live three.js audio source. `null` until built. Recreated when the project loads. */\n audio: THREE.Audio<GainNode> | THREE.PositionalAudio | null;\n\n /**\n * Whether the audio should be playing. Managed by `AudioSystem` in preview.\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link play} / {@link stop}.\n */\n declare isPlaying: boolean;\n\n /**\n * Whether the audio is paused mid-playback (position is preserved).\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link pause} / {@link play} / {@link stop}.\n */\n declare isPaused: boolean;\n\n constructor(\n path: string,\n options: Partial<typeof DEFAULT_AUDIO_OPTIONS> = {},\n ) {\n super();\n this.path = path;\n this.options = {\n ...DEFAULT_AUDIO_OPTIONS,\n ...options,\n };\n this.object = null;\n this.audio = null;\n\n // Runtime-only playback state. Non-enumerable so these values are never\n // written into save data, debug snapshots, or undo history.\n Object.defineProperty(this, \"isPlaying\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n Object.defineProperty(this, \"isPaused\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n\n /**\n * Signals `AudioSystem` to start (or resume) playback.\n * Has no direct effect in the editor — `AudioSystem` drives the actual\n * THREE.js call in preview.\n */\n play(): void {\n this.isPlaying = true;\n this.isPaused = false;\n }\n\n /**\n * Signals `AudioSystem` to pause playback, preserving the current position.\n * Calling {@link play} afterwards resumes from where it paused.\n * No-op if not currently playing.\n */\n pause(): void {\n if (!this.isPlaying) return;\n this.isPlaying = false;\n this.isPaused = true;\n }\n\n /**\n * Signals `AudioSystem` to stop playback and reset the playback position.\n */\n stop(): void {\n this.isPlaying = false;\n this.isPaused = false;\n }\n}\n","import * as THREE from \"three\";\nimport { AudioComponent } from \"../../components/Audio\";\nimport type { World } from \"../../World\";\n\ntype CreateAudioComponentContext = {\n object?: THREE.Object3D | null;\n listener?: THREE.AudioListener | null;\n isEditor?: boolean;\n};\n\nfunction normalizeDistanceModel(\n distanceModel: string,\n): \"inverse\" | \"linear\" | \"exponential\" {\n const normalized = distanceModel.trim().toLowerCase();\n\n if (normalized === \"linear\" || normalized === \"exponential\") {\n return normalized;\n }\n\n return \"inverse\";\n}\n\nfunction createConfiguredAudio(\n listener: THREE.AudioListener,\n options: AudioComponent[\"options\"],\n): THREE.Audio<GainNode> | THREE.PositionalAudio {\n const sound = options.positional\n ? new THREE.PositionalAudio(listener)\n : new THREE.Audio(listener);\n\n sound.setLoop(options.loop);\n sound.setVolume(options.volume);\n sound.setPlaybackRate(options.pitch);\n\n if (sound instanceof THREE.PositionalAudio) {\n sound.setRefDistance(options.refDistance);\n sound.setDistanceModel(normalizeDistanceModel(options.distanceModel));\n sound.setRolloffFactor(options.rolloffFactor);\n }\n\n return sound;\n}\n\nfunction createAudioEditorHelper(): THREE.Object3D {\n if (typeof document === \"undefined\") {\n const geometry = new THREE.EdgesGeometry(\n new THREE.OctahedronGeometry(0.22, 0),\n );\n const material = new THREE.LineBasicMaterial({\n color: \"#8bc8ff\",\n transparent: true,\n opacity: 0.95,\n depthTest: false,\n });\n\n const fallback = new THREE.LineSegments(geometry, material);\n fallback.renderOrder = 10;\n fallback.userData.ecsHelper = true;\n fallback.visible = false;\n return fallback;\n }\n\n const size = 96;\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return new THREE.Object3D();\n }\n\n ctx.clearRect(0, 0, size, size);\n\n ctx.fillStyle = \"rgba(27, 35, 52, 0.9)\";\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, 36, 0, Math.PI * 2);\n ctx.fill();\n\n ctx.strokeStyle = \"rgba(137, 202, 255, 0.9)\";\n ctx.lineWidth = 4;\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, 36, 0, Math.PI * 2);\n ctx.stroke();\n\n ctx.fillStyle = \"#d9ecff\";\n ctx.beginPath();\n ctx.moveTo(33, 56);\n ctx.lineTo(43, 56);\n ctx.lineTo(54, 66);\n ctx.lineTo(54, 30);\n ctx.lineTo(43, 40);\n ctx.lineTo(33, 40);\n ctx.closePath();\n ctx.fill();\n\n ctx.strokeStyle = \"#7fd2ff\";\n ctx.lineWidth = 4;\n ctx.lineCap = \"round\";\n ctx.beginPath();\n ctx.arc(56, 48, 10, -0.8, 0.8);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(56, 48, 16, -0.8, 0.8);\n ctx.stroke();\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.needsUpdate = true;\n\n const material = new THREE.SpriteMaterial({\n map: texture,\n transparent: true,\n depthTest: false,\n });\n\n const helper = new THREE.Sprite(material);\n helper.scale.set(0.68, 0.68, 0.68);\n helper.renderOrder = 10;\n helper.userData.ecsHelper = true;\n helper.visible = false;\n\n return helper;\n}\n\nexport function createAudioComponent(\n world: World,\n entityId: number,\n path = \"\",\n options: Partial<AudioComponent[\"options\"]> = {},\n context?: CreateAudioComponentContext,\n): AudioComponent {\n const component = new AudioComponent(path, options);\n\n const anchor = context?.object ?? null;\n const listener = context?.listener ?? null;\n if (anchor && listener) {\n component.object = anchor;\n const sound = createConfiguredAudio(listener, component.options);\n\n if (context?.isEditor) {\n anchor.add(createAudioEditorHelper());\n }\n\n anchor.add(sound);\n component.audio = sound;\n }\n\n world.addComponent(entityId, component);\n return component;\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Runtime camera mode. `3d` is a free camera; `ar` is composited over a tracked image/face feed. */\nexport type CameraRuntimeType = \"3d\" | \"ar\";\n/** Projection model. */\nexport type CameraProjection = \"perspective\" | \"orthographic\";\n\n/** Optional initializer for {@link CameraComponent}. Any field omitted falls back to the defaults documented on the component. */\nexport type CameraComponentOptions = {\n /** Pre-built three.js camera. When omitted the component creates one from {@link projection}. */\n camera?: THREE.Camera;\n /** Runtime camera mode. */\n type?: CameraRuntimeType;\n /** Mark this camera as the default camera the renderer uses. */\n isDefault?: boolean;\n /** Projection model. */\n projection?: CameraProjection;\n /** Vertical field of view in **degrees** (perspective only). */\n fov?: number;\n /** Near clip plane in world units. */\n near?: number;\n /** Far clip plane in world units. */\n far?: number;\n /** Left edge of the orthographic frustum in world units. */\n left?: number;\n /** Right edge of the orthographic frustum in world units. */\n right?: number;\n /** Top edge of the orthographic frustum in world units. */\n top?: number;\n /** Bottom edge of the orthographic frustum in world units. */\n bottom?: number;\n /** Zoom multiplier (`1` = no zoom). */\n zoom?: number;\n};\n\nconst DEFAULT_FOV = 50;\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 2000;\nconst DEFAULT_ORTHO_LEFT = -5;\nconst DEFAULT_ORTHO_RIGHT = 5;\nconst DEFAULT_ORTHO_TOP = 5;\nconst DEFAULT_ORTHO_BOTTOM = -5;\nconst DEFAULT_ZOOM = 1;\n\nfunction inferProjection(camera: THREE.Camera | undefined): CameraProjection {\n if (camera instanceof THREE.OrthographicCamera) {\n return \"orthographic\";\n }\n\n return \"perspective\";\n}\n\nfunction readCameraNear(camera: THREE.Camera | undefined): number | null {\n if (\n camera &&\n \"near\" in camera &&\n typeof camera.near === \"number\" &&\n Number.isFinite(camera.near)\n ) {\n return camera.near;\n }\n\n return null;\n}\n\nfunction readCameraFar(camera: THREE.Camera | undefined): number | null {\n if (\n camera &&\n \"far\" in camera &&\n typeof camera.far === \"number\" &&\n Number.isFinite(camera.far)\n ) {\n return camera.far;\n }\n\n return null;\n}\n\nfunction inferFov(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.PerspectiveCamera && Number.isFinite(camera.fov)) {\n return camera.fov;\n }\n\n return DEFAULT_FOV;\n}\n\nfunction inferNear(camera: THREE.Camera | undefined): number {\n const near = readCameraNear(camera);\n if (near !== null) {\n return near;\n }\n\n return DEFAULT_NEAR;\n}\n\nfunction inferFar(camera: THREE.Camera | undefined): number {\n const far = readCameraFar(camera);\n if (far !== null) {\n return far;\n }\n\n return DEFAULT_FAR;\n}\n\nfunction inferOrthoLeft(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.left)) {\n return camera.left;\n }\n\n return DEFAULT_ORTHO_LEFT;\n}\n\nfunction inferOrthoRight(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.right)) {\n return camera.right;\n }\n\n return DEFAULT_ORTHO_RIGHT;\n}\n\nfunction inferOrthoTop(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.top)) {\n return camera.top;\n }\n\n return DEFAULT_ORTHO_TOP;\n}\n\nfunction inferOrthoBottom(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.bottom)) {\n return camera.bottom;\n }\n\n return DEFAULT_ORTHO_BOTTOM;\n}\n\nfunction inferZoom(camera: THREE.Camera | undefined): number {\n if (\n camera &&\n \"zoom\" in camera &&\n typeof camera.zoom === \"number\" &&\n Number.isFinite(camera.zoom)\n ) {\n return camera.zoom;\n }\n\n return DEFAULT_ZOOM;\n}\n\n/**\n * Camera entity state. Supports perspective and orthographic projections, a\n * `3d` or `ar` runtime type, and an `isDefault` flag for the camera that the\n * preview/editor renders through. Field-of-view, near/far, ortho frustum, and\n * zoom are persisted; the live `THREE.Camera` is recreated when the project loads.\n *\n * @category Components\n */\nexport class CameraComponent extends Component {\n /** Live three.js camera. Recreated when the project loads to match {@link projection}. */\n camera: THREE.Camera;\n /** Runtime camera mode (`3d` or `ar`). */\n type: CameraRuntimeType;\n /** When `true`, this is the active rendering camera. Only one camera per scene should be the default. */\n isDefault: boolean;\n /** Active projection model (`perspective` or `orthographic`). */\n projection: CameraProjection;\n /** Vertical field of view in **degrees**. Used when {@link projection} is `perspective`. */\n fov: number;\n /** Near clip plane in world units. */\n near: number;\n /** Far clip plane in world units. */\n far: number;\n /** Left edge of the orthographic frustum (orthographic only). */\n left: number;\n /** Right edge of the orthographic frustum (orthographic only). */\n right: number;\n /** Top edge of the orthographic frustum (orthographic only). */\n top: number;\n /** Bottom edge of the orthographic frustum (orthographic only). */\n bottom: number;\n /** Zoom multiplier applied to the projection. */\n zoom: number;\n\n constructor(payload: CameraComponentOptions = {}) {\n super();\n\n this.camera = payload.camera ?? new THREE.PerspectiveCamera();\n this.type = payload.type ?? \"3d\";\n this.isDefault = typeof payload.isDefault === \"boolean\" ? payload.isDefault : false;\n this.projection = payload.projection ?? inferProjection(payload.camera);\n this.fov =\n typeof payload.fov === \"number\" && Number.isFinite(payload.fov)\n ? payload.fov\n : inferFov(payload.camera);\n this.near =\n typeof payload.near === \"number\" && Number.isFinite(payload.near)\n ? payload.near\n : inferNear(payload.camera);\n this.far =\n typeof payload.far === \"number\" && Number.isFinite(payload.far)\n ? payload.far\n : inferFar(payload.camera);\n this.left =\n typeof payload.left === \"number\" && Number.isFinite(payload.left)\n ? payload.left\n : inferOrthoLeft(payload.camera);\n this.right =\n typeof payload.right === \"number\" && Number.isFinite(payload.right)\n ? payload.right\n : inferOrthoRight(payload.camera);\n this.top =\n typeof payload.top === \"number\" && Number.isFinite(payload.top)\n ? payload.top\n : inferOrthoTop(payload.camera);\n this.bottom =\n typeof payload.bottom === \"number\" && Number.isFinite(payload.bottom)\n ? payload.bottom\n : inferOrthoBottom(payload.camera);\n this.zoom =\n typeof payload.zoom === \"number\" && Number.isFinite(payload.zoom)\n ? payload.zoom\n : inferZoom(payload.camera);\n }\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Wraps the live `THREE.Object3D` for an entity. Almost every entity that\n * renders to the scene carries an `Object3DRef` so transform sync, selection,\n * and parenting systems can manipulate the underlying object.\n *\n * @remarks\n * The `object` reference may be replaced when assets finish loading. Read it\n * fresh inside system/script hooks rather than caching it across frames.\n *\n * @category Components\n */\nexport class Object3DRef extends Component {\n /** Live three.js object placed in the scene graph. May be replaced when assets finish loading. */\n object: THREE.Object3D;\n /** Whether the object is currently visible. Mirrors `object.visible` and is preserved across reloads. */\n visibility: boolean;\n\n constructor(object: THREE.Object3D, visibility?: boolean) {\n super();\n this.object = object;\n this.visibility =\n typeof visibility === \"boolean\" ? visibility : Boolean(object.visible);\n }\n}\n","import * as THREE from \"three\";\n\nimport { CameraComponent, type CameraComponentOptions } from \"../../components/Camera\";\nimport { Object3DRef } from \"../../components/Object3DRef\";\nimport type { World } from \"../../World\";\n\nexport function createCameraComponent(\n world: World,\n entityId: number,\n payload: CameraComponentOptions = {},\n): CameraComponent {\n const object = world.getComponent(entityId, Object3DRef)?.object;\n const objectCamera = object instanceof THREE.Camera ? object : undefined;\n\n const component = new CameraComponent({\n ...payload,\n camera: payload.camera ?? objectCamera,\n });\n\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\ntype RapierRigidBody = import(\"@dimforge/rapier3d-compat\").RigidBody;\ntype RapierCollider = import(\"@dimforge/rapier3d-compat\").Collider;\n\n// ---------------------------------------------------------------------------\n// Rigidbody\n// ---------------------------------------------------------------------------\n\n/**\n * Rigidbody body type:\n * - `dynamic`: simulated by physics; affected by forces and gravity.\n * - `fixed`: immovable static body.\n * - `kinematicPosition`: moved by setting next position; ignores forces.\n * - `kinematicVelocity`: moved by setting velocity; ignores forces.\n */\nexport type RigidbodyType =\n | \"dynamic\"\n | \"fixed\"\n | \"kinematicPosition\"\n | \"kinematicVelocity\";\n\n/** Authoring state for the rigidbody half of {@link PhysicsComponent}. Saved with the project. */\nexport type RigidbodyState = {\n /** When `false`, the body is removed from physics simulation but kept in state. */\n enabled: boolean;\n /** Body type. See {@link RigidbodyType}. */\n type: RigidbodyType;\n /** Mass in kilograms. Only meaningful for `dynamic` bodies. */\n mass: number;\n /** Damping applied to linear velocity each step (`0` = none). */\n linearDamping: number;\n /** Damping applied to angular velocity each step (`0` = none). */\n angularDamping: number;\n /** Scale factor applied to world gravity for this body (`1` = full gravity, `0` = floating). */\n gravityScale: number;\n /** Allow the body to sleep when at rest to save simulation cost. */\n canSleep: boolean;\n /** Enable continuous collision detection to prevent tunneling for fast bodies. */\n ccdEnabled: boolean;\n /** Master toggle: when `true`, all linear motion is locked. */\n lockTranslations: boolean;\n /** Lock translation along world X. */\n lockTranslationX: boolean;\n /** Lock translation along world Y. */\n lockTranslationY: boolean;\n /** Lock translation along world Z. */\n lockTranslationZ: boolean;\n /** Master toggle: when `true`, all rotation is locked. */\n lockRotations: boolean;\n /** Lock rotation around world X. */\n lockRotationX: boolean;\n /** Lock rotation around world Y. */\n lockRotationY: boolean;\n /** Lock rotation around world Z. */\n lockRotationZ: boolean;\n};\n\nexport const DEFAULT_RIGIDBODY_STATE: RigidbodyState = {\n enabled: true,\n type: \"dynamic\",\n mass: 1,\n linearDamping: 0,\n angularDamping: 0,\n gravityScale: 1,\n canSleep: true,\n ccdEnabled: false,\n lockTranslations: false,\n lockTranslationX: false,\n lockTranslationY: false,\n lockTranslationZ: false,\n lockRotations: false,\n lockRotationX: false,\n lockRotationY: false,\n lockRotationZ: false,\n};\n\n// ---------------------------------------------------------------------------\n// Collider\n// ---------------------------------------------------------------------------\n\n/** Collider primitive shape. `trimesh` derives geometry from the entity's mesh. */\nexport type ColliderShape =\n | \"cuboid\"\n | \"ball\"\n | \"capsule\"\n | \"cylinder\"\n | \"trimesh\";\n\n/** Authoring state for the collider half of {@link PhysicsComponent}. Only the size fields relevant to {@link ColliderState.shape} are read at simulation time. */\nexport type ColliderState = {\n /** When `false`, the collider is removed from physics simulation but kept in state. */\n enabled: boolean;\n /** Collider primitive shape. */\n shape: ColliderShape;\n /** Local offset of the collider relative to the entity's transform, in world units. */\n offsetPosition: {\n /** Offset along local X. */\n x: number;\n /** Offset along local Y. */\n y: number;\n /** Offset along local Z. */\n z: number;\n };\n /** Local rotation offset in **radians** (Euler XYZ). */\n offsetRotation: {\n /** Rotation around local X (radians). */\n x: number;\n /** Rotation around local Y (radians). */\n y: number;\n /** Rotation around local Z (radians). */\n z: number;\n };\n /** FULL edge lengths for `cuboid` shape (NOT half-extents), in unscaled local units — multiplied by the entity world scale at collider build time. */\n size: {\n /** Half-extent along X. */\n x: number;\n /** Half-extent along Y. */\n y: number;\n /** Half-extent along Z. */\n z: number;\n };\n /** Radius for `ball`, `capsule`, and `cylinder` shapes. */\n radius: number;\n /** Height for `capsule` (segment length between caps) and `cylinder`. */\n height: number;\n /** Bounciness in `[0, 1]`. `0` is no bounce; `1` is perfectly elastic. */\n restitution: number;\n /** Surface friction coefficient. `0` is frictionless. */\n friction: number;\n /** When `true`, the collider reports overlaps but does not generate contact responses. */\n isSensor: boolean;\n};\n\nexport const DEFAULT_COLLIDER_STATE: ColliderState = {\n enabled: true,\n shape: \"cuboid\",\n offsetPosition: {\n x: 0,\n y: 0,\n z: 0,\n },\n offsetRotation: {\n x: 0,\n y: 0,\n z: 0,\n },\n size: {\n x: 1,\n y: 1,\n z: 1,\n },\n radius: 0.5,\n height: 1,\n restitution: 0,\n friction: 0.5,\n isSensor: false,\n};\n\n// ---------------------------------------------------------------------------\n// PhysicsState\n// ---------------------------------------------------------------------------\n\n/** Combined authoring state for {@link PhysicsComponent}. Saved with the project. */\nexport type PhysicsState = {\n /** Rigid body settings. */\n rigidbody: RigidbodyState;\n /** Collider settings. */\n collider: ColliderState;\n};\n\nexport const DEFAULT_PHYSICS_STATE: PhysicsState = {\n rigidbody: DEFAULT_RIGIDBODY_STATE,\n collider: DEFAULT_COLLIDER_STATE,\n};\n\n// ---------------------------------------------------------------------------\n// Normalization helpers (private)\n// ---------------------------------------------------------------------------\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n return value;\n}\n\nfunction toBoolean(value: unknown, fallback: boolean): boolean {\n if (typeof value !== \"boolean\") {\n return fallback;\n }\n return value;\n}\n\nfunction toRigidbodyType(value: unknown, fallback: RigidbodyType): RigidbodyType {\n if (\n value === \"dynamic\" ||\n value === \"fixed\" ||\n value === \"kinematicPosition\" ||\n value === \"kinematicVelocity\"\n ) {\n return value;\n }\n return fallback;\n}\n\nfunction toColliderShape(value: unknown, fallback: ColliderShape): ColliderShape {\n if (\n value === \"cuboid\" ||\n value === \"ball\" ||\n value === \"capsule\" ||\n value === \"cylinder\" ||\n value === \"trimesh\"\n ) {\n return value;\n }\n return fallback;\n}\n\nfunction normalizeRigidbodyState(\n value: Partial<RigidbodyState> | undefined,\n): RigidbodyState {\n const source = asRecord(value);\n const defaults = DEFAULT_RIGIDBODY_STATE;\n // Legacy: if per-axis flags are absent, fall back to master toggle value.\n const legacyLockTranslations = toBoolean(\n source?.lockTranslations,\n defaults.lockTranslations,\n );\n const legacyLockRotations = toBoolean(\n source?.lockRotations,\n defaults.lockRotations,\n );\n\n const lockTranslationX = toBoolean(\n source?.lockTranslationX,\n legacyLockTranslations,\n );\n const lockTranslationY = toBoolean(\n source?.lockTranslationY,\n legacyLockTranslations,\n );\n const lockTranslationZ = toBoolean(\n source?.lockTranslationZ,\n legacyLockTranslations,\n );\n const lockRotationX = toBoolean(source?.lockRotationX, legacyLockRotations);\n const lockRotationY = toBoolean(source?.lockRotationY, legacyLockRotations);\n const lockRotationZ = toBoolean(source?.lockRotationZ, legacyLockRotations);\n\n return {\n enabled: toBoolean(source?.enabled, defaults.enabled),\n type: toRigidbodyType(source?.type, defaults.type),\n mass: Math.max(0.0001, toFiniteNumber(source?.mass, defaults.mass)),\n linearDamping: Math.max(\n 0,\n toFiniteNumber(source?.linearDamping, defaults.linearDamping),\n ),\n angularDamping: Math.max(\n 0,\n toFiniteNumber(source?.angularDamping, defaults.angularDamping),\n ),\n gravityScale: toFiniteNumber(source?.gravityScale, defaults.gravityScale),\n canSleep: toBoolean(source?.canSleep, defaults.canSleep),\n ccdEnabled: toBoolean(source?.ccdEnabled, defaults.ccdEnabled),\n lockTranslations: legacyLockTranslations,\n lockTranslationX,\n lockTranslationY,\n lockTranslationZ,\n lockRotations: legacyLockRotations,\n lockRotationX,\n lockRotationY,\n lockRotationZ,\n };\n}\n\nfunction normalizeColliderState(\n value: Partial<ColliderState> | undefined,\n): ColliderState {\n const source = asRecord(value);\n const defaults = DEFAULT_COLLIDER_STATE;\n const offsetPosition = asRecord(source?.offsetPosition);\n const offsetRotation = asRecord(source?.offsetRotation);\n const size = asRecord(source?.size);\n\n return {\n enabled: toBoolean(source?.enabled, defaults.enabled),\n shape: toColliderShape(source?.shape, defaults.shape),\n offsetPosition: {\n x: toFiniteNumber(offsetPosition?.x, defaults.offsetPosition.x),\n y: toFiniteNumber(offsetPosition?.y, defaults.offsetPosition.y),\n z: toFiniteNumber(offsetPosition?.z, defaults.offsetPosition.z),\n },\n offsetRotation: {\n x: toFiniteNumber(offsetRotation?.x, defaults.offsetRotation.x),\n y: toFiniteNumber(offsetRotation?.y, defaults.offsetRotation.y),\n z: toFiniteNumber(offsetRotation?.z, defaults.offsetRotation.z),\n },\n size: {\n x: Math.max(0.0001, toFiniteNumber(size?.x, defaults.size.x)),\n y: Math.max(0.0001, toFiniteNumber(size?.y, defaults.size.y)),\n z: Math.max(0.0001, toFiniteNumber(size?.z, defaults.size.z)),\n },\n radius: Math.max(0.0001, toFiniteNumber(source?.radius, defaults.radius)),\n height: Math.max(0.0001, toFiniteNumber(source?.height, defaults.height)),\n restitution: Math.max(0, toFiniteNumber(source?.restitution, defaults.restitution)),\n friction: Math.max(0, toFiniteNumber(source?.friction, defaults.friction)),\n isSensor: toBoolean(source?.isSensor, defaults.isSensor),\n };\n}\n\nexport function normalizePhysicsState(\n value: { rigidbody?: Partial<RigidbodyState>; collider?: Partial<ColliderState> } | undefined,\n): PhysicsState {\n const source = asRecord(value);\n return {\n rigidbody: normalizeRigidbodyState(\n (source?.rigidbody as Partial<RigidbodyState>) ?? undefined,\n ),\n collider: normalizeColliderState(\n (source?.collider as Partial<ColliderState>) ?? undefined,\n ),\n };\n}\n\n// ---------------------------------------------------------------------------\n// PhysicsComponent\n// ---------------------------------------------------------------------------\n\n/**\n * Unified physics component combining a Rapier rigid body and a Rapier\n * collider into a single authoring and runtime container.\n *\n * Use `values.rigidbody` to configure body type, mass, damping, locks, etc.\n * Use `values.collider` to configure collider shape, size, offset, material\n * properties, and sensor mode.\n *\n * The runtime `rigidBody` and `collider` references are created by the physics\n * system when the project loads and are `null` until physics is initialized.\n *\n * @category Components\n */\nexport class PhysicsComponent extends Component {\n /** Authoring state. Saved with the project. */\n values: PhysicsState;\n /** Live Rapier rigid body. `null` until physics is initialized. */\n rigidBody: RapierRigidBody | null;\n /** Live Rapier collider. `null` until physics is initialized. */\n collider: RapierCollider | null;\n\n constructor(values?: { rigidbody?: Partial<RigidbodyState>; collider?: Partial<ColliderState> }) {\n super();\n this.values = normalizePhysicsState(values);\n this.rigidBody = null;\n this.collider = null;\n }\n\n /**\n * Patch rigidbody and/or collider state. Each sub-object is deep-merged\n * with the current values via the respective normalizer.\n */\n setValues(patch: { rigidbody?: Partial<RigidbodyState>; collider?: Partial<ColliderState> }): void {\n this.values = normalizePhysicsState({\n rigidbody: { ...this.values.rigidbody, ...(patch.rigidbody ?? {}) },\n collider: { ...this.values.collider, ...(patch.collider ?? {}) },\n });\n }\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Editable primitive kinds the mesh-geometry system can rebuild on the fly. `model` is a passthrough placeholder for entities that own a loaded GLTF/GLB instead. */\nexport type EditableMeshObjectKind =\n | \"capsule\"\n | \"cube\"\n | \"cylinder\"\n | \"model\"\n | \"plane\"\n | \"sphere\";\n\n/** Box geometry parameters in world units. */\nexport type CubeMeshParameters = {\n /** Box width along X. */\n width: number;\n /** Box height along Y. */\n height: number;\n /** Box depth along Z. */\n depth: number;\n};\n\n/** Plane geometry parameters in world units. */\nexport type PlaneMeshParameters = {\n /** Plane width along X. */\n width: number;\n /** Plane height along Y. */\n height: number;\n};\n\n/** Radius-only primitive parameters (sphere). */\nexport type RadiusMeshParameters = {\n /** Sphere radius in world units. */\n radius: number;\n};\n\n/** Radius + height primitive parameters (capsule, cylinder). */\nexport type RadiusHeightMeshParameters = {\n /** Radius of the cap/cylinder cross-section. */\n radius: number;\n /** Length of the straight section between caps (capsule) or full height (cylinder). */\n height: number;\n};\n\n/** Empty parameter set for `model` entities. */\nexport type ModelMeshParameters = Record<string, never>;\n\n/** Map from {@link EditableMeshObjectKind} to its parameter shape. */\nexport type MeshGeometryParametersByKind = {\n capsule: RadiusHeightMeshParameters;\n cube: CubeMeshParameters;\n cylinder: RadiusHeightMeshParameters;\n model: ModelMeshParameters;\n plane: PlaneMeshParameters;\n sphere: RadiusMeshParameters;\n};\n\nexport type MeshGeometryParameters =\n MeshGeometryParametersByKind[EditableMeshObjectKind];\n\nexport const DEFAULT_MESH_GEOMETRY_PARAMETERS: MeshGeometryParametersByKind = {\n capsule: { radius: 0.5, height: 1 },\n cube: { width: 1, height: 1, depth: 1 },\n cylinder: { radius: 0.5, height: 1 },\n model: {},\n plane: { width: 100, height: 100 },\n sphere: { radius: 0.5 },\n};\n\nconst GEOMETRY_TYPE_BY_KIND: Record<EditableMeshObjectKind, string> = {\n capsule: \"CapsuleGeometry\",\n cube: \"BoxGeometry\",\n cylinder: \"CylinderGeometry\",\n model: \"Model\",\n plane: \"PlaneGeometry\",\n sphere: \"SphereGeometry\",\n};\n\n/**\n * Editable geometry parameters for primitive meshes (cube, sphere, plane,\n * capsule, cylinder) and the placeholder for `model` entities. Holds the\n * authoring values plus shadow casting/receiving flags. The mesh-geometry\n * system rebuilds the underlying `BufferGeometry` when parameters change.\n *\n * @category Components\n */\nexport class MeshGeometryComponent extends Component {\n /** Primitive kind (`cube`, `sphere`, `plane`, `capsule`, `cylinder`) or `model` for loaded assets. */\n readonly kind: EditableMeshObjectKind;\n /** Three.js geometry class name (e.g. `\"BoxGeometry\"`, `\"SphereGeometry\"`). Derived from {@link kind}. */\n readonly geometryType: string;\n /** Editable parameters whose shape depends on {@link kind}. The mesh-geometry system rebuilds geometry when these change. */\n parameters: MeshGeometryParameters;\n /** Live three.js object whose geometry is being managed. `null` until the object is built. */\n object: THREE.Object3D | null;\n /** Human-readable model name shown in the inspector for `model` entities; empty for primitives. */\n modelName: string;\n /** Whether the mesh casts shadows in the renderer. */\n castShadow: boolean;\n /** Whether the mesh receives shadows in the renderer. */\n receiveShadow: boolean;\n\n constructor(\n kind: EditableMeshObjectKind,\n object: THREE.Object3D | null,\n parameters?: Partial<MeshGeometryParameters>,\n options?: {\n modelName?: string;\n castShadow?: boolean;\n receiveShadow?: boolean;\n },\n ) {\n super();\n\n this.kind = kind;\n this.geometryType = GEOMETRY_TYPE_BY_KIND[kind];\n this.object = object;\n this.modelName = options?.modelName ?? \"\";\n this.castShadow = options?.castShadow ?? false;\n this.receiveShadow = options?.receiveShadow ?? false;\n\n switch (kind) {\n case \"cube\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,\n ...(parameters as Partial<CubeMeshParameters> | undefined),\n };\n break;\n case \"plane\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.plane,\n ...(parameters as Partial<PlaneMeshParameters> | undefined),\n };\n break;\n case \"sphere\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere,\n ...(parameters as Partial<RadiusMeshParameters> | undefined),\n };\n break;\n case \"cylinder\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder,\n ...(parameters as Partial<RadiusHeightMeshParameters> | undefined),\n };\n break;\n case \"capsule\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule,\n ...(parameters as Partial<RadiusHeightMeshParameters> | undefined),\n };\n break;\n case \"model\":\n this.parameters = {};\n break;\n }\n }\n}\n","import {\n PhysicsComponent,\n type ColliderState,\n type RigidbodyState,\n} from \"../../components/Physics\";\nimport {\n MeshGeometryComponent,\n type CubeMeshParameters,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"../../components/MeshGeometry\";\nimport type { World } from \"../../World\";\n\ntype PhysicsFactoryValues = {\n rigidbody?: Partial<RigidbodyState>;\n collider?: Partial<ColliderState>;\n};\n\n/**\n * Derive a collider that matches the entity's primitive geometry, so adding a\n * PhysicsComponent \"just works\" without hand-authoring dimensions.\n *\n * Collider dimensions are authored in unscaled local units (PhysicsSyncSystem\n * multiplies by world scale), and `size` holds FULL edge lengths — both of\n * which the mesh-geometry parameters already are, so they map 1:1.\n *\n * Returns null for models and unknown kinds — those keep the generic defaults\n * and should be sized explicitly from measured bounds.\n */\nfunction deriveColliderFromGeometry(\n world: World,\n entityId: number,\n): PhysicsFactoryValues | null {\n const meshGeometry = world.getComponent(entityId, MeshGeometryComponent);\n if (!meshGeometry) {\n return null;\n }\n\n switch (meshGeometry.kind) {\n case \"plane\": {\n const params = meshGeometry.parameters as PlaneMeshParameters;\n // PlaneGeometry lies in the local XY plane (the plane factory pre-rotates\n // the entity -90° on X to lay it flat), so the plane's normal is LOCAL Z.\n // The collider must therefore be a thin slab on Z — a thin Y slab would\n // stand up as a wall once the entity rotation is applied.\n return {\n collider: {\n shape: \"cuboid\",\n size: { x: params.width, y: params.height, z: 0.05 },\n },\n // An (effectively) zero-thickness sheet is only physically meaningful\n // as static geometry — planes are floors/walls, not dynamic bodies.\n rigidbody: { type: \"fixed\" },\n };\n }\n case \"cube\": {\n const params = meshGeometry.parameters as CubeMeshParameters;\n return {\n collider: {\n shape: \"cuboid\",\n size: { x: params.width, y: params.height, z: params.depth },\n },\n };\n }\n case \"sphere\": {\n const params = meshGeometry.parameters as RadiusMeshParameters;\n return { collider: { shape: \"ball\", radius: params.radius } };\n }\n case \"capsule\": {\n const params = meshGeometry.parameters as RadiusHeightMeshParameters;\n return {\n collider: {\n shape: \"capsule\",\n radius: params.radius,\n height: params.height,\n },\n };\n }\n case \"cylinder\": {\n const params = meshGeometry.parameters as RadiusHeightMeshParameters;\n return {\n collider: {\n shape: \"cylinder\",\n radius: params.radius,\n height: params.height,\n },\n };\n }\n default:\n return null;\n }\n}\n\nexport function createPhysicsComponent(\n world: World,\n entityId: number,\n values?: PhysicsFactoryValues,\n): PhysicsComponent {\n // Only derive when the caller supplied nothing: hydration/duplication pass\n // (or copy over) saved values, and explicit authoring wins untouched.\n const initial =\n values ?? deriveColliderFromGeometry(world, entityId) ?? undefined;\n const component = new PhysicsComponent(initial);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/** Skybox rendering modes. `none` disables skybox rendering entirely. */\nexport type EnvironmentSkyboxType = \"gradient\" | \"color\" | \"image\" | \"none\";\n/** Gradient distribution applied when {@link EnvironmentSkyboxState.type} is `\"gradient\"`. */\nexport type EnvironmentGradientEffect = \"radial\" | \"linear\" | \"angular\";\n/** Fog distance models. `none` disables fog. */\nexport type EnvironmentFogType = \"linear\" | \"exponential\" | \"none\";\n\n/** Skybox configuration. Only the fields relevant to {@link type} are read at render time. */\nexport type EnvironmentSkyboxState = {\n /** Active skybox mode. */\n type: EnvironmentSkyboxType;\n /** Solid color used when {@link type} is `\"color\"`. `#rrggbb`. */\n color: string;\n /** URL or `localasset://` path of the equirectangular image used when {@link type} is `\"image\"`. */\n imageUrl?: string;\n /** Gradient parameters used when {@link type} is `\"gradient\"`. */\n gradient: {\n /** Ordered list of color stops as `#rrggbb` strings. */\n colors: string[];\n /** Gradient distribution. */\n effect: EnvironmentGradientEffect;\n };\n};\n\n/** Fog configuration. Mirrors three.js `Fog` / `FogExp2`. */\nexport type EnvironmentFogState = {\n /** Active fog model. */\n type: EnvironmentFogType;\n /** Fog color as `#rrggbb`. */\n color: string;\n /** Linear-fog parameters used when {@link type} is `\"linear\"`. */\n linear: {\n /** Distance at which fog begins to take effect. */\n near: number;\n /** Distance at which fog reaches full opacity. */\n far: number;\n };\n /** Exponential-fog parameters used when {@link type} is `\"exponential\"`. */\n exponential: {\n /** Density coefficient. Higher values produce thicker fog. */\n density: number;\n };\n};\n\n/** World gravity vector applied by the physics system, in world units per second squared. */\nexport type EnvironmentGravityState = {\n /** Gravity along world X. */\n x: number;\n /** Gravity along world Y (negative pulls objects down). */\n y: number;\n /** Gravity along world Z. */\n z: number;\n};\n\n/** Aggregated authoring state owned by {@link Environment}. */\nexport type EnvironmentState = {\n /** Skybox configuration. */\n skybox: EnvironmentSkyboxState;\n /** Fog configuration. */\n fog: EnvironmentFogState;\n /** World gravity. */\n gravity: EnvironmentGravityState;\n /**\n * Fixed timestep (seconds) used by the physics accumulator loop.\n * Physics is stepped in fixed increments of this size each frame.\n * Default is `0.02` (50 Hz).\n */\n fixedTimeStep: number;\n};\n\nexport const DEFAULT_ENVIRONMENT_STATE: EnvironmentState = {\n skybox: {\n type: \"none\",\n color: \"#1e1e1e\",\n imageUrl: \"\",\n gradient: {\n colors: [\"#464766\", \"#657ea6\", \"#0f0e1a\"],\n effect: \"linear\",\n },\n },\n fog: {\n type: \"none\",\n color: \"#1e1e1e\",\n linear: {\n near: 1,\n far: 100,\n },\n exponential: {\n density: 0.002,\n },\n },\n gravity: {\n x: 0,\n y: -9.81,\n z: 0,\n },\n fixedTimeStep: 0.02,\n};\n\nfunction normalizeColors(colors: unknown): string[] {\n if (!Array.isArray(colors)) {\n return [...DEFAULT_ENVIRONMENT_STATE.skybox.gradient.colors];\n }\n\n const normalized = colors.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n );\n if (normalized.length === 0) {\n return [...DEFAULT_ENVIRONMENT_STATE.skybox.gradient.colors];\n }\n\n return normalized;\n}\n\nfunction normalizeGradientEffect(value: unknown): EnvironmentGradientEffect {\n if (value === \"radial\" || value === \"linear\" || value === \"angular\") {\n return value;\n }\n\n return DEFAULT_ENVIRONMENT_STATE.skybox.gradient.effect;\n}\n\nfunction normalizeSkyboxType(value: unknown): EnvironmentSkyboxType {\n if (value === \"gradient\" || value === \"color\" || value === \"none\") {\n return value;\n }\n\n if (value === \"image\" || value === \"Image\") {\n return \"image\";\n }\n\n return DEFAULT_ENVIRONMENT_STATE.skybox.type;\n}\n\nfunction normalizeFogType(value: unknown): EnvironmentFogType {\n if (value === \"linear\" || value === \"exponential\" || value === \"none\") {\n return value;\n }\n\n return DEFAULT_ENVIRONMENT_STATE.fog.type;\n}\n\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n\n return value;\n}\n\n/**\n * Scene environment settings: skybox (gradient/color/image), fog\n * (linear/exponential), and gravity vector for the physics world.\n * Singleton-style — attached to one environment entity per scene.\n *\n * Use `world.getEnvironmentComponent()` to access this component directly\n * from a Behaviour script. Mutate `values` to change settings at runtime;\n * `EnvironmentSyncSystem` applies the changes on the next frame.\n *\n * @category Components\n */\nexport class Environment extends Component {\n /** Aggregated environment authoring state (skybox, fog, gravity). Saved with the project. */\n values: EnvironmentState;\n\n constructor(values?: Partial<EnvironmentState>) {\n super();\n\n const skybox = values?.skybox;\n const fog = values?.fog;\n const gravity = values?.gravity;\n this.values = {\n skybox: {\n type: normalizeSkyboxType(skybox?.type),\n color:\n typeof skybox?.color === \"string\"\n ? skybox.color\n : DEFAULT_ENVIRONMENT_STATE.skybox.color,\n imageUrl:\n typeof skybox?.imageUrl === \"string\"\n ? skybox.imageUrl\n : DEFAULT_ENVIRONMENT_STATE.skybox.imageUrl,\n gradient: {\n colors: normalizeColors(skybox?.gradient?.colors),\n effect: normalizeGradientEffect(skybox?.gradient?.effect),\n },\n },\n fog: {\n type: normalizeFogType(fog?.type),\n color:\n typeof fog?.color === \"string\"\n ? fog.color\n : DEFAULT_ENVIRONMENT_STATE.fog.color,\n linear: {\n near: toFiniteNumber(\n fog?.linear?.near,\n DEFAULT_ENVIRONMENT_STATE.fog.linear.near,\n ),\n far: toFiniteNumber(\n fog?.linear?.far,\n DEFAULT_ENVIRONMENT_STATE.fog.linear.far,\n ),\n },\n exponential: {\n density: toFiniteNumber(\n fog?.exponential?.density,\n DEFAULT_ENVIRONMENT_STATE.fog.exponential.density,\n ),\n },\n },\n gravity: {\n x: toFiniteNumber(gravity?.x, DEFAULT_ENVIRONMENT_STATE.gravity.x),\n y: toFiniteNumber(gravity?.y, DEFAULT_ENVIRONMENT_STATE.gravity.y),\n z: toFiniteNumber(gravity?.z, DEFAULT_ENVIRONMENT_STATE.gravity.z),\n },\n fixedTimeStep: toFiniteNumber(\n values?.fixedTimeStep,\n DEFAULT_ENVIRONMENT_STATE.fixedTimeStep,\n ),\n };\n }\n}\n","import { Environment, type EnvironmentState } from \"../../components/Environment\";\nimport type { World } from \"../../World\";\n\nexport function createEnvironmentComponent(\n world: World,\n entityId: number,\n values?: Partial<EnvironmentState>,\n): Environment {\n const component = new Environment(values);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type { EcsEntityEditorKind, EcsEntityKind } from \"../types\";\n\n/**\n * Tags an entity with the kind it was created from (`cube`, `sphere`,\n * `model`, `directionalLight`, etc.). Factories use this to drive\n * kind-specific behavior; the editor inspector uses it to select component\n * editors.\n *\n * @category Components\n */\nexport class EntityType extends Component {\n /** Kind tag identifying which factory created this entity (e.g. `cube`, `directionalLight`, `model`). */\n value: EcsEntityKind | EcsEntityEditorKind;\n\n constructor(value: EcsEntityKind | EcsEntityEditorKind) {\n super();\n this.value = value;\n }\n}\n","import { EntityType } from \"../../components/EntityType\";\nimport type { World } from \"../../World\";\n\nexport function createEntityTypeComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof EntityType>\n): EntityType {\n const component = new EntityType(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Renders a 2D image as a textured quad in the scene. Width/height are in\n * world units. Texture loading is handled by the image system, which\n * populates {@link ImageComponent.texture} and {@link ImageComponent.object}\n * asynchronously.\n *\n * @category Components\n */\nexport class ImageComponent extends Component {\n /** Source URL or `localasset://` path of the image file. */\n path: string;\n /** Width of the rendered quad in world units. */\n width: number;\n /** Height of the rendered quad in world units. */\n height: number;\n /** Loaded texture, populated asynchronously by the image system. `null` until loaded. */\n texture: THREE.Texture | null;\n /** Live three.js object representing the textured quad. `null` until built. */\n object: THREE.Object3D | null;\n\n constructor(path: string, width: number = 1, height: number = 1) {\n super();\n this.path = path;\n this.width = width;\n this.height = height;\n this.texture = null;\n this.object = null;\n }\n}\n","import { ImageComponent } from \"../../components/Image\";\nimport type { World } from \"../../World\";\n\nexport function createImageComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ImageComponent>\n): ImageComponent {\n const component = new ImageComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/** Optional initializer for {@link ImageTargetAnchor}. */\nexport type ImageTargetAnchorOptions = {\n /** Id of the tracked target this anchor follows (matches `ImageTargetReference.id`). */\n targetId?: number | null;\n /** Optional canonical URL of the target image, used as a fallback identifier. */\n targetUrl?: string;\n};\n\n/**\n * Marks an entity as an anchor for an image-tracking target. The image\n * tracking system reveals the entity when the referenced target is found and\n * hides it when the target is lost.\n *\n * @category Components\n */\nexport class ImageTargetAnchor extends Component {\n /** Tracked target id this anchor follows. `null` when unbound. */\n targetId: number | null;\n /** Canonical target image URL, retained as a fallback identifier. */\n targetUrl?: string;\n\n constructor(options?: ImageTargetAnchorOptions) {\n super();\n this.targetId = options?.targetId ?? null;\n this.targetUrl = options?.targetUrl;\n }\n}\n","import { ImageTargetAnchor } from \"../../components/ImageTargetAnchor\";\nimport type { World } from \"../../World\";\n\nexport function createImageTargetAnchorComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ImageTargetAnchor>\n): ImageTargetAnchor {\n const component = new ImageTargetAnchor(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type * as THREE from \"three\";\n\n\n/** Single uploaded image used as input to the image-target compiler. */\nexport type ImageTargetReference = {\n /** Stable target id assigned at compile time. Referenced by {@link ImageTargetAnchor.targetId}. */\n id: number;\n /** Source image URL or `localasset://` path. */\n url: string;\n /** Image width in pixels. */\n width: number;\n /** Image height in pixels. */\n height: number;\n /** Local directory the source image is stored in (desktop projects). */\n storageDir?: string;\n /** Local file name for the source image (desktop projects). */\n fileName?: string;\n};\n\n/**\n * Image-tracking target metadata used by AR projects. Holds the source images\n * users uploaded plus the URL of the compiled `.mind` target file produced by\n * the image-target compiler. Pair with {@link ImageTargetAnchor} on child\n * entities that should appear when the target is detected.\n *\n * @category Components\n */\nexport class ImageTarget extends Component {\n /** Source images that were combined into the compiled `.mind` target. */\n targets: ImageTargetReference[];\n /** URL of the compiled `.mind` target file. Set after the image-target compiler finishes. */\n compiledTargetUrl?: string;\n /** Directory containing the compiled `.mind` file (desktop projects). */\n compiledTargetDir?: string;\n /** Optional preview texture used in the editor viewport. `null` when not assigned. */\n texture: THREE.Texture | null;\n /** Optional preview object placed in the editor viewport. `null` when not assigned. */\n object: THREE.Object3D | null;\n\n constructor(options?: {\n targets?: ImageTargetReference[];\n compiledTargetUrl?: string;\n compiledTargetDir?: string;\n }, texture?: THREE.Texture, object?: THREE.Object3D) {\n super();\n this.targets = options?.targets ?? [];\n this.compiledTargetUrl = options?.compiledTargetUrl;\n this.compiledTargetDir = options?.compiledTargetDir;\n this.texture = texture ?? null;\n this.object = object ?? null;\n }\n}\n","import { ImageTarget } from \"../../components/ImageTarget\";\nimport type { World } from \"../../World\";\n\nexport function createImageTargetComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ImageTarget>\n): ImageTarget {\n const component = new ImageTarget(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Authoring state for {@link LightComponent}. Common fields apply to every light kind; the optional fields are only meaningful for specific kinds. */\ntype LightValueState = {\n /** Light color as `#rrggbb` hex string. */\n color: string;\n /** Light intensity multiplier (units depend on three.js physically-correct mode). */\n intensity: number;\n /** Whether the light casts shadows. */\n castShadow: boolean;\n /** Whether the light is frustum-culled when off-screen. */\n frustumCulling: boolean;\n /** Maximum range; `0` means infinite. (PointLight, SpotLight) */\n distance?: number;\n /** Falloff exponent for distance attenuation. (PointLight, SpotLight) */\n decay?: number;\n /** Cone half-angle in **radians**. (SpotLight) */\n angle?: number;\n /** Soft-edge factor in `[0, 1]`; `0` is a hard edge. (SpotLight) */\n penumbra?: number;\n /** Rectangle width in world units. (RectAreaLight) */\n width?: number;\n /** Rectangle height in world units. (RectAreaLight) */\n height?: number;\n};\n\nfunction toHexColor(value: THREE.Color): string {\n return `#${value.getHexString()}`;\n}\n\nfunction createValueState(light: THREE.Light): LightValueState {\n const base: LightValueState = {\n color: toHexColor(light.color),\n intensity: light.intensity,\n castShadow: (light as THREE.Light & { castShadow?: boolean }).castShadow ?? false,\n frustumCulling: light.frustumCulled,\n };\n\n if (light instanceof THREE.PointLight) {\n base.distance = light.distance;\n base.decay = light.decay;\n } else if (light instanceof THREE.SpotLight) {\n base.distance = light.distance;\n base.decay = light.decay;\n base.angle = light.angle;\n base.penumbra = light.penumbra;\n } else if (light instanceof THREE.RectAreaLight) {\n base.width = light.width;\n base.height = light.height;\n }\n\n return base;\n}\n\n/**\n * Light source attached to an entity. `type` selects the underlying three.js\n * light class (directional, point, spot, ambient, hemisphere, rect-area).\n * `values` carries authoring state including color, intensity, and\n * type-specific fields (distance, decay, angle, penumbra, width, height).\n *\n * @category Components\n */\nexport class LightComponent extends Component {\n /** Live three.js light placed in the scene. Recreated when the project loads. */\n light: THREE.Light;\n /** Three.js class name of the light (e.g. `\"DirectionalLight\"`, `\"PointLight\"`, `\"SpotLight\"`). */\n type: string;\n /** Serialized authoring state. Saved with the project. */\n values: LightValueState;\n\n constructor(light: THREE.Light) {\n super();\n this.light = light;\n this.type = light.type;\n this.values = createValueState(light);\n }\n\n setValues(patch: Partial<LightValueState>): void {\n this.values = {\n ...this.values,\n ...patch,\n };\n }\n}\n\nexport type { LightValueState };\n","import { LightComponent } from \"../../components/Light\";\nimport type { World } from \"../../World\";\n\nexport function createLightComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof LightComponent>\n): LightComponent {\n const component = new LightComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Supported material classes. Each maps to a three.js `Mesh*Material` type. */\ntype MaterialTypeValue = \"standard\" | \"basic\" | \"phong\" | \"physical\";\n/** Texture sampling mode. `smooth` uses linear filtering; `sharp` uses nearest filtering for pixel-art look. */\ntype TextureFilteringValue = \"smooth\" | \"sharp\";\n\n/** Authoring state for a single slot in {@link MaterialComponent.values}. Mirrors the live three.js material so it can be re-applied when the project loads. */\ntype MaterialValueState = {\n /** Underlying material class. */\n type: MaterialTypeValue;\n /** Base color as `#rrggbb` hex string. */\n color: string;\n /** PBR roughness in `[0, 1]`. */\n roughness: number;\n /** PBR metalness in `[0, 1]`. */\n metalness: number;\n /** Multiplier applied to the normal map (uniform on both axes). */\n normalScale: number;\n /** Surface opacity in `[0, 1]`. Combine with {@link transparent} to enable alpha. */\n opacity: number;\n /** Emissive color as `#rrggbb` hex string. */\n emissive: string;\n /** Emissive intensity multiplier. */\n emissiveIntensity: number;\n /** Three.js `Side` enum value (`FrontSide`, `BackSide`, or `DoubleSide`). */\n side: number;\n /** Three.js `Blending` enum value. */\n blending: number;\n /** Whether depth testing is enabled. */\n depthTest: boolean;\n /** Whether depth writes are enabled. */\n depthWrite: boolean;\n /** Render as wireframe. */\n wireframe: boolean;\n /** Enable transparency (must be `true` for {@link opacity} < 1 to render correctly). */\n transparent: boolean;\n /** Color/diffuse texture URL. */\n textureMap?: string;\n /** Alpha (transparency) texture URL. */\n alphaTextureMap?: string;\n /** Tangent-space normal map URL. */\n normalMap?: string;\n /** Roughness map URL (red channel). */\n roughnessMap?: string;\n /** Metalness map URL (red channel). */\n metalnessMap?: string;\n /** Ambient occlusion map URL. */\n aoMap?: string;\n /** Emissive color map URL. */\n emissiveMap?: string;\n /** Bump map URL (height-based shading approximation). */\n bumpMap?: string;\n /** Displacement map URL (geometric vertex offset). */\n displacementMap?: string;\n /** Pre-baked light map URL. */\n lightMap?: string;\n /** Environment reflection map URL. */\n envMap?: string;\n /** Texture sampling mode applied to the color map. */\n textureFiltering: TextureFilteringValue;\n /** Whether mipmaps are generated for texture maps. */\n useMipmaps: boolean;\n};\n\nfunction toHexColor(value: unknown, fallback: string): string {\n if (\n value &&\n typeof value === \"object\" &&\n typeof (value as { getHexString?: () => string }).getHexString ===\n \"function\"\n ) {\n try {\n return `#${(value as { getHexString: () => string }).getHexString()}`;\n } catch {\n return fallback;\n }\n }\n\n return fallback;\n}\n\nfunction getMaterialType(material: THREE.Material): MaterialTypeValue {\n if (material instanceof THREE.MeshPhysicalMaterial) {\n return \"physical\";\n }\n\n if (material instanceof THREE.MeshPhongMaterial) {\n return \"phong\";\n }\n\n if (material instanceof THREE.MeshBasicMaterial) {\n return \"basic\";\n }\n\n return \"standard\";\n}\n\nfunction createMaterialValue(material: THREE.Material): MaterialValueState {\n const materialRecord = material as unknown as Record<string, unknown>;\n const normalScale = materialRecord.normalScale as\n | { x?: number; y?: number }\n | undefined;\n const map = materialRecord.map as THREE.Texture | undefined;\n\n return {\n type: getMaterialType(material),\n color: toHexColor(materialRecord.color, \"#ffffff\"),\n roughness:\n typeof materialRecord.roughness === \"number\" ? materialRecord.roughness : 0.5,\n metalness:\n typeof materialRecord.metalness === \"number\" ? materialRecord.metalness : 0.5,\n normalScale:\n typeof normalScale?.x === \"number\" ? normalScale.x : 1,\n opacity: typeof materialRecord.opacity === \"number\" ? materialRecord.opacity : 1,\n emissive: toHexColor(materialRecord.emissive, \"#000000\"),\n emissiveIntensity:\n typeof materialRecord.emissiveIntensity === \"number\"\n ? materialRecord.emissiveIntensity\n : 0,\n side: typeof materialRecord.side === \"number\" ? materialRecord.side : THREE.FrontSide,\n blending:\n typeof materialRecord.blending === \"number\"\n ? materialRecord.blending\n : THREE.NormalBlending,\n depthTest: materialRecord.depthTest !== false,\n depthWrite: materialRecord.depthWrite !== false,\n wireframe: Boolean(materialRecord.wireframe),\n transparent: Boolean(materialRecord.transparent),\n textureMap: map?.image ? map.source?.data?.currentSrc || map.image?.src : undefined,\n alphaTextureMap:\n (materialRecord.alphaMap as THREE.Texture | undefined)?.image?.src,\n normalMap:\n (materialRecord.normalMap as THREE.Texture | undefined)?.image?.src,\n roughnessMap:\n (materialRecord.roughnessMap as THREE.Texture | undefined)?.image?.src,\n metalnessMap:\n (materialRecord.metalnessMap as THREE.Texture | undefined)?.image?.src,\n aoMap: (materialRecord.aoMap as THREE.Texture | undefined)?.image?.src,\n emissiveMap:\n (materialRecord.emissiveMap as THREE.Texture | undefined)?.image?.src,\n bumpMap: (materialRecord.bumpMap as THREE.Texture | undefined)?.image?.src,\n displacementMap:\n (materialRecord.displacementMap as THREE.Texture | undefined)?.image?.src,\n lightMap: (materialRecord.lightMap as THREE.Texture | undefined)?.image?.src,\n envMap: (materialRecord.envMap as THREE.Texture | undefined)?.image?.src,\n textureFiltering:\n map?.magFilter === THREE.NearestFilter ? \"sharp\" : \"smooth\",\n useMipmaps: map?.generateMipmaps !== false,\n };\n}\n\nexport function defaultMaterialValue(): MaterialValueState {\n return {\n type: \"standard\",\n color: \"#ffffff\",\n roughness: 0.5,\n metalness: 0.5,\n normalScale: 1,\n opacity: 1,\n emissive: \"#000000\",\n emissiveIntensity: 0,\n side: THREE.FrontSide,\n blending: THREE.NormalBlending,\n depthTest: true,\n depthWrite: true,\n wireframe: false,\n transparent: false,\n textureFiltering: \"smooth\",\n useMipmaps: true,\n };\n}\n\n/**\n * Material catalog for an entity. Tracks the live three.js materials\n * (`materials`, `material`) plus serialized authoring state (`values[]`)\n * mirrored from the inspector. Supports `standard`, `basic`, `phong`, and\n * `physical` PBR types with optional texture map slots.\n *\n * @remarks\n * Use `setMaterials`, `updateValue`, `setMaterialType`, `setTextureFiltering`,\n * and `setUseMipmaps` to mutate state — these keep `values[]` and the live\n * three.js materials in sync. Texture URLs use the `localasset://` protocol\n * inside the editor.\n *\n * @category Components\n */\nexport class MaterialComponent extends Component {\n /** Live three.js materials currently bound to the entity's mesh (one per submesh). */\n materials: THREE.Material[];\n /** Convenience reference to `materials[0]`. `null` when no material is assigned. */\n material: THREE.Material | null;\n /** Serialized authoring state (one entry per material in {@link materials}). Saved with the project. */\n values: MaterialValueState[];\n /**\n * Editor-managed material-asset linkage, one entry per slot (parallel to\n * {@link values}). A `localasset://` URL of a `.material` asset file, or\n * `null`/absent for a local (unlinked) material. The editor materializes the\n * asset's values into {@link values} and keeps them in sync when the asset\n * is edited — rendering and the runtime read only {@link values} and ignore\n * this field. Saved with the project; survives material rebinds.\n */\n assetRefs: (string | null)[];\n\n constructor(materialOrMaterials: THREE.Material | THREE.Material[] = []) {\n super();\n\n this.materials = [];\n this.material = null;\n this.values = [];\n this.assetRefs = [];\n this.setMaterials(materialOrMaterials);\n }\n\n /** Link/unlink a slot to a material asset URL (editor bookkeeping only). */\n setAssetRef(index: number, url: string | null): void {\n if (index < 0) {\n return;\n }\n while (this.assetRefs.length <= index) {\n this.assetRefs.push(null);\n }\n this.assetRefs[index] = url;\n }\n\n /** The material-asset URL a slot is linked to, or null when local. */\n getAssetRef(index: number): string | null {\n return this.assetRefs[index] ?? null;\n }\n\n setMaterials(\n materialOrMaterials: THREE.Material | THREE.Material[] = [],\n ): void {\n this.materials = Array.isArray(materialOrMaterials)\n ? materialOrMaterials.filter(Boolean)\n : materialOrMaterials\n ? [materialOrMaterials]\n : [];\n\n this.material = this.materials[0] ?? null;\n this.values =\n this.materials.length > 0\n ? this.materials.map((material) => createMaterialValue(material))\n : [defaultMaterialValue()];\n }\n\n updateValue(index: number, patch: Partial<MaterialValueState>): void {\n if (index < 0) {\n return;\n }\n\n while (this.values.length <= index) {\n this.values.push(defaultMaterialValue());\n }\n\n this.values[index] = {\n ...this.values[index],\n ...patch,\n };\n }\n\n resetValue(index: number): void {\n if (index < 0) {\n return;\n }\n\n while (this.values.length <= index) {\n this.values.push(defaultMaterialValue());\n }\n\n const type = this.values[index]?.type ?? \"standard\";\n this.values[index] = {\n ...defaultMaterialValue(),\n type,\n };\n }\n\n setMaterialType(index: number, type: MaterialTypeValue): void {\n this.updateValue(index, { type });\n }\n\n setTextureFiltering(index: number, filtering: TextureFilteringValue): void {\n this.updateValue(index, { textureFiltering: filtering });\n }\n\n setUseMipmaps(index: number, enabled: boolean): void {\n this.updateValue(index, { useMipmaps: enabled });\n }\n}\n\nexport type { MaterialTypeValue, MaterialValueState, TextureFilteringValue };\n","import { MaterialComponent } from \"../../components/Material\";\nimport type { World } from \"../../World\";\n\nexport function createMaterialComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof MaterialComponent>\n): MaterialComponent {\n const component = new MaterialComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Holds the live three.js `Object3D` for an entity that renders as a primitive\n * mesh (cube, sphere, plane, capsule, cylinder). For loaded GLTF/GLB models\n * see {@link ModelComponent}; for the editable geometry parameters see\n * {@link MeshGeometryComponent}.\n *\n * @category Components\n */\nexport class MeshComponent extends Component {\n /** Underlying three.js mesh placed in the scene graph. */\n mesh: THREE.Object3D;\n\n constructor(mesh: THREE.Object3D) {\n super();\n this.mesh = mesh;\n }\n}\n","import { MeshComponent } from \"../../components/Mesh\";\nimport type { World } from \"../../World\";\n\nexport function createMeshComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof MeshComponent>\n): MeshComponent {\n const component = new MeshComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { MeshGeometryComponent } from \"../../components/MeshGeometry\";\nimport type { World } from \"../../World\";\n\nexport function createMeshGeometryComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof MeshGeometryComponent>\n): MeshGeometryComponent {\n const component = new MeshGeometryComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * References a GLTF/GLB asset loaded from `path`. The model loading system\n * resolves the asset asynchronously and populates {@link ModelComponent.object}\n * once available; loading is deferred-tolerant so the entity exists before\n * the model finishes loading.\n *\n * @category Components\n */\nexport class ModelComponent extends Component {\n /** Source URL or `localasset://` path of the GLTF/GLB asset. */\n path: string;\n /** Loaded model object, populated asynchronously by the model loader. `null` until loaded. */\n object: THREE.Object3D | null;\n\n constructor(path: string) {\n super();\n this.path = path;\n this.object = null;\n }\n}\n","import { ModelComponent } from \"../../components/Model\";\nimport type { World } from \"../../World\";\n\nexport function createModelComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ModelComponent>\n): ModelComponent {\n const component = new ModelComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/**\n * Human-readable name for an entity. Shown in the editor hierarchy panel and\n * preserved across save/reload.\n *\n * @category Components\n */\nexport class Name extends Component {\n /** Display name for the entity. Shown in the editor hierarchy. */\n value: string;\n\n constructor(value: string) {\n super();\n this.value = value;\n }\n}\n","import { Name } from \"../../components/Name\";\nimport type { World } from \"../../World\";\n\nexport function createNameComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof Name>\n): Name {\n const component = new Name(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Object3DRef } from \"../../components/Object3DRef\";\nimport type { World } from \"../../World\";\n\nexport function createObject3DRefComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof Object3DRef>\n): Object3DRef {\n const component = new Object3DRef(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type { EntityId } from \"../types\";\n\n/**\n * Records the parent entity id for hierarchical scene graphs. `null` means\n * the entity is at the world root. The `ObjectManagementSystem` reconciles\n * scene-graph parenting from this component each frame.\n *\n * @category Components\n */\nexport class ParentId extends Component {\n /** Parent entity id, or `null` for root-level entities. */\n value: EntityId | null;\n\n constructor(value: EntityId | null = null) {\n super();\n this.value = value;\n }\n}\n","import { ParentId } from \"../../components/ParentId\";\nimport type { World } from \"../../World\";\n\nexport function createParentIdComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ParentId>\n): ParentId {\n const component = new ParentId(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/** Aggregated post-processing effect chain authored on the scene environment. Each sub-effect has its own `enabled` flag plus per-effect parameters. */\nexport type PostprocessingState = {\n /** Master toggle. When `false` no post-processing is applied even if individual effects are enabled. */\n postEnabled: boolean;\n /** Depth-of-field (bokeh) effect. */\n dof: {\n /** Enable the effect. */\n enabled: boolean;\n /** Distance to the focal plane in world units. */\n focusDistance: number;\n /** Lens focal length controlling depth-of-field strength. */\n focalLength: number;\n /** Bokeh blur kernel scale. */\n bokehScale: number;\n };\n /** Bloom (HDR glow) effect. */\n bloom: {\n /** Enable the effect. */\n enabled: boolean;\n /** Strength of the bloom contribution. */\n intensity: number;\n /** Luminance threshold above which pixels bloom. */\n threshold: number;\n /** Blur radius applied to the bloom buffer. */\n radius: number;\n };\n /** Vignette (corner darkening) effect. */\n vignette: {\n /** Enable the effect. */\n enabled: boolean;\n /** Distance from screen center where the vignette begins. */\n offset: number;\n /** Maximum darkness applied at screen edges. */\n darkness: number;\n };\n /** Chromatic aberration (RGB channel offset) effect. */\n chromAberration: {\n /** Enable the effect. */\n enabled: boolean;\n /** Horizontal channel offset. */\n offsetX: number;\n /** Vertical channel offset. */\n offsetY: number;\n };\n /** Film-noise overlay. */\n noise: {\n /** Enable the effect. */\n enabled: boolean;\n /** Opacity of the noise layer in `[0, 1]`. */\n opacity: number;\n };\n /** Pixelation (mosaic) effect. */\n pixelation: {\n /** Enable the effect. */\n enabled: boolean;\n /** Pixel block size in screen pixels. */\n granularity: number;\n };\n /** Tone-mapping exposure control. */\n toneMapping: {\n /** Enable the effect. */\n enabled: boolean;\n /** Exposure multiplier applied before tone-mapping. */\n exposure: number;\n };\n /** Hue/saturation color grading. */\n hueSaturation: {\n /** Enable the effect. */\n enabled: boolean;\n /** Hue rotation in radians. */\n hue: number;\n /** Saturation offset (`0` = unchanged, `>0` = more saturated). */\n saturation: number;\n };\n /** Sepia color grade. */\n sepia: {\n /** Enable the effect. */\n enabled: boolean;\n /** Blend strength between original and sepia in `[0, 1]`. */\n intensity: number;\n };\n /** SMAA antialiasing pass. */\n smaa: {\n /** Enable the effect. */\n enabled: boolean;\n };\n /** Screen-space ambient occlusion. */\n ssao: {\n /** Enable the effect. */\n enabled: boolean;\n /** Strength of the AO contribution. */\n intensity: number;\n /** Sampling radius in world units. */\n radius: number;\n };\n /** Dot-screen (halftone) effect. */\n dotScreen: {\n /** Enable the effect. */\n enabled: boolean;\n /** Pattern scale (legacy field; use {@link scale} where available). */\n dotScreenScale: number;\n /** Pattern rotation in radians (legacy field; use {@link angle} where available). */\n dotScreenAngle: number;\n /** Pattern rotation in radians. */\n angle?: number;\n /** Pattern scale. */\n scale?: number;\n /** Three.js blend function override. */\n blendFunction?: number;\n /** Effect opacity in `[0, 1]`. */\n opacity?: number;\n };\n /** Glitch effect (digital corruption simulation). */\n glitch: {\n /** Enable the effect. */\n enabled: boolean;\n /** Three.js blend function override. */\n blendFunction?: number;\n /** RGB channel offset applied during a glitch burst. */\n chromaticAberrationOffset?: { x: number; y: number } | [number, number];\n /** `[min, max]` delay (seconds) between glitch bursts. */\n delay?: [number, number];\n /** `[min, max]` duration (seconds) of each glitch burst. */\n duration?: [number, number];\n /** Glitch displacement strength (scalar or per-axis). */\n strength?: number | { x: number; y: number };\n /** Size of the displacement texture sampled by the glitch shader. */\n dtSize?: number;\n /** Fraction of columns affected during a glitch burst. */\n columns?: number;\n /** Ratio between weak and strong glitch bursts. */\n ratio?: number;\n /** Glitch mode label (matches the postprocessing library's mode enum). */\n mode?: string;\n /** Force the glitch to remain active. */\n active?: boolean;\n };\n};\n\nexport const DEFAULT_POSTPROCESSING_STATE: PostprocessingState = {\n postEnabled: false,\n dof: {\n enabled: false,\n focusDistance: 0.015,\n focalLength: 0.018,\n bokehScale: 3,\n },\n bloom: {\n enabled: false,\n intensity: 1.2,\n threshold: 0.2,\n radius: 0.7,\n },\n vignette: {\n enabled: false,\n offset: 0.05,\n darkness: 1.2,\n },\n chromAberration: {\n enabled: false,\n offsetX: 0.003,\n offsetY: 0.003,\n },\n noise: {\n enabled: false,\n opacity: 0.12,\n },\n pixelation: {\n enabled: false,\n granularity: 6,\n },\n toneMapping: {\n enabled: false,\n exposure: 1.3,\n },\n hueSaturation: {\n enabled: false,\n hue: 0.05,\n saturation: 0.2,\n },\n sepia: {\n enabled: false,\n intensity: 0.5,\n },\n smaa: {\n enabled: false,\n },\n ssao: {\n enabled: false,\n intensity: 1.5,\n radius: 0.25,\n },\n dotScreen: {\n enabled: false,\n dotScreenScale: 1.2,\n dotScreenAngle: 1.57,\n scale: 1.2,\n angle: 1.57,\n blendFunction: undefined,\n opacity: undefined,\n },\n glitch: {\n enabled: false,\n blendFunction: undefined,\n chromaticAberrationOffset: undefined,\n delay: undefined,\n duration: undefined,\n strength: undefined,\n dtSize: undefined,\n columns: undefined,\n ratio: undefined,\n mode: undefined,\n active: undefined,\n },\n};\n\nfunction 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\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n\n return value;\n}\n\nfunction toBoolean(value: unknown, fallback: boolean): boolean {\n if (typeof value !== \"boolean\") {\n return fallback;\n }\n\n return value;\n}\n\nfunction normalizeNumberTuple(value: unknown): [number, number] | undefined {\n if (!Array.isArray(value) || value.length !== 2) {\n return undefined;\n }\n\n if (\n typeof value[0] !== \"number\" ||\n !Number.isFinite(value[0]) ||\n typeof value[1] !== \"number\" ||\n !Number.isFinite(value[1])\n ) {\n return undefined;\n }\n\n return [value[0], value[1]];\n}\n\nfunction normalizePostprocessing(\n value: Partial<PostprocessingState> | undefined,\n): PostprocessingState {\n const postprocessing = asRecord(value);\n const defaults = DEFAULT_POSTPROCESSING_STATE;\n\n const dof = asRecord(postprocessing?.dof);\n const bloom = asRecord(postprocessing?.bloom);\n const vignette = asRecord(postprocessing?.vignette);\n const chromAberration = asRecord(postprocessing?.chromAberration);\n const noise = asRecord(postprocessing?.noise);\n const pixelation = asRecord(postprocessing?.pixelation);\n const toneMapping = asRecord(postprocessing?.toneMapping);\n const hueSaturation = asRecord(postprocessing?.hueSaturation);\n const sepia = asRecord(postprocessing?.sepia);\n const smaa = asRecord(postprocessing?.smaa);\n const ssao = asRecord(postprocessing?.ssao);\n const dotScreen = asRecord(postprocessing?.dotScreen);\n const glitch = asRecord(postprocessing?.glitch);\n const glitchChromaticAberrationOffset = asRecord(\n glitch?.chromaticAberrationOffset,\n );\n const glitchStrength = asRecord(glitch?.strength);\n\n const dotScreenScale = toFiniteNumber(\n dotScreen?.dotScreenScale,\n defaults.dotScreen.dotScreenScale,\n );\n const dotScreenAngle = toFiniteNumber(\n dotScreen?.dotScreenAngle,\n defaults.dotScreen.dotScreenAngle,\n );\n\n const normalizedGlitchStrength =\n typeof glitch?.strength === \"number\" && Number.isFinite(glitch.strength)\n ? glitch.strength\n : glitchStrength &&\n typeof glitchStrength.x === \"number\" &&\n Number.isFinite(glitchStrength.x) &&\n typeof glitchStrength.y === \"number\" &&\n Number.isFinite(glitchStrength.y)\n ? { x: glitchStrength.x, y: glitchStrength.y }\n : undefined;\n\n const normalizedGlitchChromaticAberrationOffset =\n normalizeNumberTuple(glitch?.chromaticAberrationOffset) ??\n (glitchChromaticAberrationOffset &&\n typeof glitchChromaticAberrationOffset.x === \"number\" &&\n Number.isFinite(glitchChromaticAberrationOffset.x) &&\n typeof glitchChromaticAberrationOffset.y === \"number\" &&\n Number.isFinite(glitchChromaticAberrationOffset.y)\n ? {\n x: glitchChromaticAberrationOffset.x,\n y: glitchChromaticAberrationOffset.y,\n }\n : undefined);\n\n return {\n postEnabled: toBoolean(postprocessing?.postEnabled, defaults.postEnabled),\n dof: {\n enabled: toBoolean(dof?.enabled, defaults.dof.enabled),\n focusDistance: toFiniteNumber(dof?.focusDistance, defaults.dof.focusDistance),\n focalLength: toFiniteNumber(dof?.focalLength, defaults.dof.focalLength),\n bokehScale: toFiniteNumber(dof?.bokehScale, defaults.dof.bokehScale),\n },\n bloom: {\n enabled: toBoolean(bloom?.enabled, defaults.bloom.enabled),\n intensity: toFiniteNumber(bloom?.intensity, defaults.bloom.intensity),\n threshold: toFiniteNumber(bloom?.threshold, defaults.bloom.threshold),\n radius: toFiniteNumber(bloom?.radius, defaults.bloom.radius),\n },\n vignette: {\n enabled: toBoolean(vignette?.enabled, defaults.vignette.enabled),\n offset: toFiniteNumber(vignette?.offset, defaults.vignette.offset),\n darkness: toFiniteNumber(vignette?.darkness, defaults.vignette.darkness),\n },\n chromAberration: {\n enabled: toBoolean(chromAberration?.enabled, defaults.chromAberration.enabled),\n offsetX: toFiniteNumber(chromAberration?.offsetX, defaults.chromAberration.offsetX),\n offsetY: toFiniteNumber(chromAberration?.offsetY, defaults.chromAberration.offsetY),\n },\n noise: {\n enabled: toBoolean(noise?.enabled, defaults.noise.enabled),\n opacity: toFiniteNumber(noise?.opacity, defaults.noise.opacity),\n },\n pixelation: {\n enabled: toBoolean(pixelation?.enabled, defaults.pixelation.enabled),\n granularity: toFiniteNumber(pixelation?.granularity, defaults.pixelation.granularity),\n },\n toneMapping: {\n enabled: toBoolean(toneMapping?.enabled, defaults.toneMapping.enabled),\n exposure: toFiniteNumber(toneMapping?.exposure, defaults.toneMapping.exposure),\n },\n hueSaturation: {\n enabled: toBoolean(hueSaturation?.enabled, defaults.hueSaturation.enabled),\n hue: toFiniteNumber(hueSaturation?.hue, defaults.hueSaturation.hue),\n saturation: toFiniteNumber(\n hueSaturation?.saturation,\n defaults.hueSaturation.saturation,\n ),\n },\n sepia: {\n enabled: toBoolean(sepia?.enabled, defaults.sepia.enabled),\n intensity: toFiniteNumber(sepia?.intensity, defaults.sepia.intensity),\n },\n smaa: {\n enabled: toBoolean(smaa?.enabled, defaults.smaa.enabled),\n },\n ssao: {\n enabled: toBoolean(ssao?.enabled, defaults.ssao.enabled),\n intensity: toFiniteNumber(ssao?.intensity, defaults.ssao.intensity),\n radius: toFiniteNumber(ssao?.radius, defaults.ssao.radius),\n },\n dotScreen: {\n enabled: toBoolean(dotScreen?.enabled, defaults.dotScreen.enabled),\n dotScreenScale,\n dotScreenAngle,\n scale: toFiniteNumber(dotScreen?.scale, dotScreenScale),\n angle: toFiniteNumber(dotScreen?.angle, dotScreenAngle),\n blendFunction:\n typeof dotScreen?.blendFunction === \"number\" &&\n Number.isFinite(dotScreen.blendFunction)\n ? dotScreen.blendFunction\n : defaults.dotScreen.blendFunction,\n opacity:\n typeof dotScreen?.opacity === \"number\" && Number.isFinite(dotScreen.opacity)\n ? dotScreen.opacity\n : defaults.dotScreen.opacity,\n },\n glitch: {\n enabled: toBoolean(glitch?.enabled, defaults.glitch.enabled),\n blendFunction:\n typeof glitch?.blendFunction === \"number\" && Number.isFinite(glitch.blendFunction)\n ? glitch.blendFunction\n : defaults.glitch.blendFunction,\n chromaticAberrationOffset:\n normalizedGlitchChromaticAberrationOffset,\n delay: normalizeNumberTuple(glitch?.delay) ?? defaults.glitch.delay,\n duration: normalizeNumberTuple(glitch?.duration) ?? defaults.glitch.duration,\n strength: normalizedGlitchStrength,\n dtSize:\n typeof glitch?.dtSize === \"number\" && Number.isFinite(glitch.dtSize)\n ? glitch.dtSize\n : defaults.glitch.dtSize,\n columns:\n typeof glitch?.columns === \"number\" && Number.isFinite(glitch.columns)\n ? glitch.columns\n : defaults.glitch.columns,\n ratio:\n typeof glitch?.ratio === \"number\" && Number.isFinite(glitch.ratio)\n ? glitch.ratio\n : defaults.glitch.ratio,\n mode: typeof glitch?.mode === \"string\" ? glitch.mode : defaults.glitch.mode,\n active: toBoolean(glitch?.active, defaults.glitch.active ?? false),\n },\n };\n}\n\n/**\n * Postprocessing stack settings (depth-of-field, bloom, vignette, chromatic\n * aberration, noise, pixelation, tone mapping, hue/saturation, sepia, SMAA,\n *\n * Use `world.getPostprocessingComponent()` to access this component directly\n * from a Behaviour script. Mutate `values` to toggle effects or adjust\n * parameters at runtime; `PostprocessingSyncSystem` applies changes next frame.\n * SSAO, dot-screen, glitch). The render system applies enabled effects in a\n * `postprocessing`-library composer when `postEnabled` is `true`. Singleton-\n * style — attached to one entity per scene.\n *\n * @category Components\n */\nexport class Postprocessing extends Component {\n /** Aggregated post-processing state. Saved with the project. */\n values: PostprocessingState;\n\n constructor(values?: Partial<PostprocessingState>) {\n super();\n this.values = normalizePostprocessing(values);\n }\n}\n","import {\n Postprocessing,\n type PostprocessingState,\n} from \"../../components/Postprocessing\";\nimport type { World } from \"../../World\";\n\nexport function createPostprocessingComponent(\n world: World,\n entityId: number,\n values?: Partial<PostprocessingState>,\n): Postprocessing {\n const component = new Postprocessing(values);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/**\n * One script attached to an entity. Multiple entries may target a single\n * entity (different classes from the same or different files).\n */\nexport type ScriptEntry = {\n /** Owning entity id. */\n entityId: number;\n /** Class name exported by the script module (default export class name). */\n className: string;\n /** Compiled script URL (e.g. `localasset://.../scripts/foo.js`). */\n scriptUrl: string;\n /** When `false`, the script is skipped each frame. */\n enabled: boolean;\n /**\n * When `true`, the script is executed inside the editor (not just at preview/runtime).\n * Enables direct Three.js scene access via `this.world.getScene()` / `getCamera()` /\n * `getRenderer()` for logic the editor's object palette cannot produce (custom shaders,\n * procedural geometry, grass, etc.). Defaults to `false`.\n */\n executeInEditor?: boolean;\n /** Inspector-bound payload exposed to the script as `this.data`. */\n data: Record<string, unknown>;\n /** Last load/runtime status reported by `ScriptBehaviourSystem`. */\n runtimeState?: \"idle\" | \"loading\" | \"ready\" | \"error\";\n /** Optional human-readable status message (e.g. compile/load error). */\n runtimeMessage?: string;\n};\n\n/**\n * Component holding the list of {@link ScriptEntry | scripts} attached to an\n * entity. Loaded from the saved project; the runtime-side fields\n * (`scriptInstance`, `scriptInstances`) are non-enumerable so they never leak\n * into save data or undo history.\n *\n * @remarks\n * Authored scripts subclass {@link Behaviour}.\n *\n * @category Components\n */\nexport class ScriptComponent extends Component {\n /** Authored script entries attached to the entity. Each entry references a class by name plus its inspector field overrides. Saved with the project. */\n entries: ScriptEntry[];\n /** First live behaviour instance after compile/load. Non-enumerable, so it does not appear in save data. `null` when no script is loaded. */\n declare scriptInstance: unknown | null;\n /** Map of `entityId` to its compiled behaviour instance (one entry per script bound to the entity). Non-enumerable, so it does not appear in save data. */\n declare scriptInstances: Map<number, unknown>;\n\n constructor(entries: ScriptEntry[] = []) {\n super();\n\n this.entries = entries.map((entry) => ({\n entityId: typeof entry.entityId === \"number\" ? entry.entityId : 0,\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 executeInEditor: typeof entry.executeInEditor === \"boolean\" ? entry.executeInEditor : false,\n data:\n entry.data && typeof entry.data === \"object\" && !Array.isArray(entry.data)\n ? (entry.data as Record<string, unknown>)\n : {},\n runtimeState: entry.runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\" ? entry.runtimeMessage : undefined,\n }));\n\n // Runtime-only reference used by ScriptBehaviourSystem.\n // Keep non-enumerable so snapshots/history/hydration payloads remain stable.\n Object.defineProperty(this, \"scriptInstance\", {\n value: null,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n\n // Runtime-only map of all entry instances keyed by entryIndex.\n // Non-enumerable for the same reason as scriptInstance.\n Object.defineProperty(this, \"scriptInstances\", {\n value: new Map<number, unknown>(),\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n}\n","import { ScriptComponent, type ScriptEntry } from \"../../components/ScriptComponent\";\nimport type { World } from \"../../World\";\n\ntype ScriptComponentPayload = {\n entries?: Array<Partial<ScriptEntry>>;\n};\n\nexport function createScriptComponent(\n world: World,\n entityId: number,\n payload: ScriptComponentPayload = {},\n): ScriptComponent {\n const entries = Array.isArray(payload.entries)\n ? payload.entries.map((entry) => ({\n entityId,\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 && typeof entry.data === \"object\" && !Array.isArray(entry.data)\n ? (entry.data as Record<string, unknown>)\n : {},\n runtimeState: entry.runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\" ? entry.runtimeMessage : undefined,\n }))\n : [];\n\n const component = new ScriptComponent(entries);\n\n world.addComponent(entityId, component);\n return component;\n}","import { Component } from \"../Component\";\n\n/**\n * Toggles whether the editor selection system can pick this entity. When\n * `enabled` is `false`, the entity is excluded from raycast hit tests.\n *\n * @category Components\n */\nexport class Selectable extends Component {\n /** When `false`, the editor selection raycaster ignores this entity. */\n enabled: boolean;\n\n constructor(enabled = true) {\n super();\n this.enabled = enabled;\n }\n}\n","import { Selectable } from \"../../components/Selectable\";\nimport type { World } from \"../../World\";\n\nexport function createSelectableComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof Selectable>\n): Selectable {\n const component = new Selectable(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type { EntityId } from \"../types\";\n\n/** Active gizmo mode in the editor. */\nexport type TransformModeValue = \"translate\" | \"rotate\" | \"scale\";\n/** Reference frame for the active gizmo. */\nexport type TransformSpaceValue = \"world\" | \"local\";\n\n/**\n * Singleton-style component (attached once to a system entity) that mirrors\n * the editor's current transform-gizmo state into the ECS world. Persisted in\n * snapshots so undo/redo restores the exact gizmo configuration.\n *\n * @category Components\n */\nexport class SelectionTransformState extends Component {\n /** Active gizmo mode (`translate`, `rotate`, or `scale`). */\n transform: TransformModeValue;\n /** Reference frame for the gizmo (`world` or `local`). */\n space: TransformSpaceValue;\n /** Currently selected entity id, or `null` if nothing is selected. */\n selectedEntityId: EntityId | null;\n\n constructor(\n transform: TransformModeValue = \"translate\",\n space: TransformSpaceValue = \"world\",\n selectedEntityId: EntityId | null = null,\n ) {\n super();\n this.transform = transform;\n this.space = space;\n this.selectedEntityId = selectedEntityId;\n }\n}\n","import { SelectionTransformState } from \"../../components/SelectionTransformState\";\nimport type { World } from \"../../World\";\n\nexport function createSelectionTransformStateComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof SelectionTransformState>\n): SelectionTransformState {\n const component = new SelectionTransformState(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Camera-facing 2D sprite. Unlike {@link ImageComponent}, sprites use\n * `THREE.Sprite` and always render as billboards.\n *\n * @category Components\n */\nexport class SpriteComponent extends Component {\n /** Source URL or `localasset://` path of the sprite image. */\n path: string;\n /** Width of the sprite in world units. */\n width: number;\n /** Height of the sprite in world units. */\n height: number;\n /** Loaded texture, populated asynchronously. `null` until loaded. */\n texture: THREE.Texture | null;\n /** Live `THREE.Sprite` placed in the scene. `null` until built. */\n object: THREE.Sprite | null;\n\n constructor(path: string, width: number = 1, height: number = 1) {\n super();\n this.path = path;\n this.width = width;\n this.height = height;\n this.texture = null;\n this.object = null;\n }\n}\n","import { SpriteComponent } from \"../../components/Sprite\";\nimport type { World } from \"../../World\";\n\nexport function createSpriteComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof SpriteComponent>\n): SpriteComponent {\n const component = new SpriteComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport {\n Euler,\n Quaternion,\n Vector3,\n type EulerOrder,\n} from \"three\";\n\n/** Plain XYZ vector. All ECS transform fields use this shape rather than `THREE.Vector3` so they save cleanly with the project. */\nexport type Vec3 = {\n /** X component. */\n x: number;\n /** Y component. */\n y: number;\n /** Z component. */\n z: number;\n};\n\n/** Optional initial values passed to {@link TransformComponent}. Missing axes default to `0` for position/rotation and `1` for scale. */\nexport type TransformData = {\n /** Initial position (defaults to `{ 0, 0, 0 }`). */\n position?: Partial<Vec3>;\n /** Initial rotation in **radians** (defaults to `{ 0, 0, 0 }`). */\n rotation?: Partial<Vec3>;\n /** Initial scale (defaults to `{ 1, 1, 1 }`). */\n scale?: Partial<Vec3>;\n};\n\ntype TransformInput = Vector3 | Euler | Quaternion;\n\nfunction readXYZ(input: TransformInput): Vec3 {\n return {\n x: input.x,\n y: input.y,\n z: input.z,\n };\n}\n\n/**\n * Position, rotation, and scale of an entity in its parent's local space.\n *\n * @remarks\n * Rotation is stored in **radians** (Euler XYZ). The editor inspector converts\n * to/from degrees for display — do not store degrees in this component.\n * Mutations should go through the `setPosition` / `setRotation` / `setScale`\n * helpers so dependent systems pick up the change.\n *\n * @category Components\n */\nexport class TransformComponent extends Component {\n /** Local position relative to the parent (or world if no parent). */\n position: Vec3;\n /** Local rotation as Euler XYZ in **radians**. */\n rotation: Vec3;\n /** Local scale factors per axis (`1` = identity). */\n scale: Vec3;\n\n constructor(data: TransformData = {}) {\n super();\n\n const position = data.position ?? {};\n const rotation = data.rotation ?? {};\n const scale = data.scale ?? {};\n\n this.position = {\n x: position.x ?? 0,\n y: position.y ?? 0,\n z: position.z ?? 0,\n };\n\n this.rotation = {\n x: rotation.x ?? 0,\n y: rotation.y ?? 0,\n z: rotation.z ?? 0,\n };\n\n this.scale = {\n x: scale.x ?? 1,\n y: scale.y ?? 1,\n z: scale.z ?? 1,\n };\n }\n\n toPositionVector3(target = new Vector3()): Vector3 {\n return target.set(this.position.x, this.position.y, this.position.z);\n }\n\n toRotationEuler(\n target = new Euler(),\n order: EulerOrder = \"XYZ\",\n ): Euler {\n return target.set(this.rotation.x, this.rotation.y, this.rotation.z, order);\n }\n\n toRotationQuaternion(\n target = new Quaternion(),\n order: EulerOrder = \"XYZ\",\n ): Quaternion {\n const euler = new Euler(\n this.rotation.x,\n this.rotation.y,\n this.rotation.z,\n order,\n );\n return target.setFromEuler(euler);\n }\n\n toScaleVector3(target = new Vector3()): Vector3 {\n return target.set(this.scale.x, this.scale.y, this.scale.z);\n }\n\n setPosition(input: TransformInput): this {\n const next = readXYZ(input);\n this.position.x = next.x;\n this.position.y = next.y;\n this.position.z = next.z;\n return this;\n }\n\n setScale(input: TransformInput): this {\n const next = readXYZ(input);\n this.scale.x = next.x;\n this.scale.y = next.y;\n this.scale.z = next.z;\n return this;\n }\n\n setRotation(input: TransformInput, order: EulerOrder = \"XYZ\"): this {\n if (input instanceof Quaternion) {\n const euler = new Euler().setFromQuaternion(input, order);\n this.rotation.x = euler.x;\n this.rotation.y = euler.y;\n this.rotation.z = euler.z;\n return this;\n }\n\n const next = readXYZ(input);\n this.rotation.x = next.x;\n this.rotation.y = next.y;\n this.rotation.z = next.z;\n return this;\n }\n}\n","import { TransformComponent } from \"../../components/Transform\";\nimport type { World } from \"../../World\";\n\nexport function createTransformComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof TransformComponent>\n): TransformComponent {\n const component = new TransformComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\nimport type {\n CubeMeshParameters,\n MeshGeometryParameters,\n PlaneMeshParameters,\n RadiusHeightMeshParameters,\n RadiusMeshParameters,\n} from \"./MeshGeometry\";\nimport { DEFAULT_MESH_GEOMETRY_PARAMETERS } from \"./MeshGeometry\";\n\n/**\n * Per-instance transform stored inside {@link InstancedMeshComponent}.\n * All rotations are in radians.\n */\nexport type InstanceTransform = {\n position: { x: number; y: number; z: number };\n /** Euler rotation in radians (XYZ order). */\n rotation: { x: number; y: number; z: number };\n scale: { x: number; y: number; z: number };\n};\n\n/** Primitive geometry kinds and custom 3D model kind supported by instanced mesh rendering. */\nexport type InstancedMeshKind =\n | \"capsule\"\n | \"cube\"\n | \"cylinder\"\n | \"model\"\n | \"plane\"\n | \"sphere\";\n\n/** Default identity instance transform. */\nexport const DEFAULT_INSTANCE_TRANSFORM: InstanceTransform = {\n position: { x: 0, y: 0, z: 0 },\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n};\n\n/** Default geometry parameters per instanced mesh kind. For \"model\" kind, cube params are stored as a placeholder (unused). */\nexport const DEFAULT_INSTANCED_MESH_PARAMETERS: Record<\n InstancedMeshKind,\n MeshGeometryParameters\n> = {\n capsule: DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule,\n cube: DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,\n cylinder: DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder,\n model: DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,\n plane: DEFAULT_MESH_GEOMETRY_PARAMETERS.plane,\n sphere: DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere,\n};\n\n/**\n * Holds authored instanced-mesh data for an entity that renders as a\n * `THREE.InstancedMesh`. Supports primitive geometry kinds (cube, sphere,\n * plane, capsule, cylinder).\n *\n * The `instancedMesh` field is a live runtime reference that is **not**\n * serialized into snapshots — it is excluded by the snapshot normalizer in\n * `worldSnapshotUtils.ts` to prevent history churn.\n *\n * @category Components\n */\nexport class InstancedMeshComponent extends Component {\n /** Geometry kind for all instances. Use `\"model\"` for a custom GLTF/GLB asset. */\n meshKind: InstancedMeshKind;\n /**\n * Path to the GLTF/GLB asset when `meshKind === \"model\"`.\n * Serialized in snapshots and restored on hydration.\n */\n modelPath: string;\n /** Editable geometry parameters (width/height/depth, radius, etc.). Ignored when `meshKind === \"model\"`. */\n meshParameters: MeshGeometryParameters;\n /** Whether all instances cast shadows. */\n castShadow: boolean;\n /** Whether all instances receive shadows. */\n receiveShadow: boolean;\n /**\n * Ordered list of entity IDs for the instance slot entities owned by this group.\n * Each slot entity carries a `TransformComponent` that `InstancedMeshSystem`\n * reads every frame to build the per-instance matrix.\n */\n instanceEntityIds: number[];\n\n /**\n * Live runtime container managed by `InstancedMeshSystem`:\n * - For primitive kinds: a `THREE.InstancedMesh`.\n * - For `\"model\"` kind: a `THREE.Group` containing per-mesh `THREE.InstancedMesh` objects.\n * Excluded from snapshot serialization — do **not** read this in hydration code.\n */\n instancedMesh: THREE.Object3D | null;\n\n constructor(\n meshKind: InstancedMeshKind = \"cube\",\n meshParameters?: Partial<MeshGeometryParameters>,\n options?: {\n castShadow?: boolean;\n receiveShadow?: boolean;\n instanceEntityIds?: number[];\n modelPath?: string;\n },\n ) {\n super();\n this.meshKind = meshKind;\n this.modelPath = options?.modelPath ?? \"\";\n this.meshParameters = {\n ...DEFAULT_INSTANCED_MESH_PARAMETERS[meshKind],\n ...(meshParameters ?? {}),\n } as MeshGeometryParameters;\n this.castShadow = options?.castShadow ?? false;\n this.receiveShadow = options?.receiveShadow ?? false;\n this.instanceEntityIds = options?.instanceEntityIds ?? [];\n this.instancedMesh = null;\n }\n\n /** Sanitize and return a copy of the current mesh parameters with valid values. */\n getSanitizedParameters(): MeshGeometryParameters {\n const MIN_DIM = 0.01;\n const MIN_RAD = 0.001;\n const sanitize = (v: number, min: number) =>\n Number.isFinite(v) ? Math.max(min, v) : min;\n\n switch (this.meshKind) {\n case \"cube\": {\n const p = this.meshParameters as CubeMeshParameters;\n return {\n width: sanitize(p.width, MIN_DIM),\n height: sanitize(p.height, MIN_DIM),\n depth: sanitize(p.depth, MIN_DIM),\n };\n }\n case \"plane\": {\n const p = this.meshParameters as PlaneMeshParameters;\n return {\n width: sanitize(p.width, MIN_DIM),\n height: sanitize(p.height, MIN_DIM),\n };\n }\n case \"sphere\": {\n const p = this.meshParameters as RadiusMeshParameters;\n return { radius: sanitize(p.radius, MIN_RAD) };\n }\n case \"cylinder\":\n case \"capsule\": {\n const p = this.meshParameters as RadiusHeightMeshParameters;\n return {\n radius: sanitize(p.radius, MIN_RAD),\n height: sanitize(p.height, MIN_DIM),\n };\n }\n case \"model\":\n // No geometry parameters for model kind; return cube defaults as a placeholder.\n return DEFAULT_MESH_GEOMETRY_PARAMETERS.cube;\n }\n }\n}\n","import { InstancedMeshComponent } from \"../../components/InstancedMesh\";\nimport type { InstancedMeshKind } from \"../../components/InstancedMesh\";\nimport type { MeshGeometryParameters } from \"../../components/MeshGeometry\";\nimport type { World } from \"../../World\";\n\nexport function createInstancedMeshComponent(\n world: World,\n entityId: number,\n meshKind: InstancedMeshKind,\n meshParameters?: Partial<MeshGeometryParameters>,\n options?: {\n castShadow?: boolean;\n receiveShadow?: boolean;\n instanceEntityIds?: number[];\n modelPath?: string;\n },\n): InstancedMeshComponent {\n const component = new InstancedMeshComponent(meshKind, meshParameters, options);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/**\n * Marks an entity as an instance slot owned by an {@link InstancedMeshComponent} group entity.\n *\n * Instance slot entities are lightweight data containers — they carry\n * `TransformComponent` (the per-instance local transform) and this component,\n * but do **not** have an `Object3DRef`. Their transforms are consumed each\n * frame by `InstancedMeshSystem` to compose the instance matrix.\n *\n * @category Components\n */\nexport class InstanceSlotComponent extends Component {\n /** Entity ID of the owning `instancedMesh` group entity. */\n groupEntityId: number;\n /** Zero-based index of this slot within the group's `instanceEntityIds` array. */\n slotIndex: number;\n\n constructor(groupEntityId: number, slotIndex: number) {\n super();\n this.groupEntityId = groupEntityId;\n this.slotIndex = slotIndex;\n }\n}\n","import { InstanceSlotComponent } from \"../../components/InstanceSlotComponent\";\nimport type { World } from \"../../World\";\n\nexport function createInstanceSlotComponent(\n world: World,\n entityId: number,\n groupEntityId: number,\n slotIndex: number,\n): InstanceSlotComponent {\n const component = new InstanceSlotComponent(groupEntityId, slotIndex);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * @internal Default options applied when no override is provided.\n */\nconst DEFAULT_VIDEO_OPTIONS = {\n autoplay: false,\n loop: true,\n volume: 1,\n width: 1,\n height: 1,\n isGreenScreen: false,\n backgroundColor: \"#00ff00\",\n similarity: 0.4,\n smoothness: 0.08,\n spill: 0.12,\n /** When `true`, the video's audio stream is spatialized using the entity's transform. */\n positional: false,\n /** Distance at which volume is unattenuated (positional only). */\n refDistance: 1,\n /** WebAudio distance model (`linear`, `inverse`, `exponential`). Positional only. */\n distanceModel: \"inverse\",\n /** How quickly volume falls off past `refDistance`. Positional only. */\n rolloffFactor: 1,\n};\n\n/**\n * Plays a video file as a texture on a quad. Supports green-screen keying\n * (`isGreenScreen`, `backgroundColor`, `similarity`, `smoothness`, `spill`).\n * The video element, texture, and material are runtime-only and re-created\n * when the project loads.\n *\n * @category Components\n */\nexport class VideoComponent extends Component {\n /** Source URL or `localasset://` path of the video file. */\n path: string;\n /**\n * Playback + green-screen options.\n *\n * | Field | Default | Description |\n * |---|---|---|\n * | `autoplay` | `false` | Start playback as soon as the video is ready. |\n * | `loop` | `true` | Loop playback indefinitely. |\n * | `volume` | `1` | Linear gain in `[0, 1]`. |\n * | `width` | `1` | Quad width in world units. |\n * | `height` | `1` | Quad height in world units. |\n * | `isGreenScreen` | `false` | Enable chroma keying using the fields below. |\n * | `backgroundColor` | `\"#00ff00\"` | Color to key out (CSS color string). |\n * | `similarity` | `0.4` | How close a pixel must be to the key to be removed (`0`–`1`). |\n * | `smoothness` | `0.08` | Soft-edge thickness around the key threshold. |\n * | `spill` | `0.12` | Amount of color spill suppression near edges. |\n * | `positional` | `false` | When `true`, the video's audio stream is spatialized using the entity's 3D position. |\n * | `refDistance` | `1` | Distance at which volume is unattenuated (positional only). |\n * | `distanceModel` | `\"inverse\"` | WebAudio distance model (`linear`, `inverse`, `exponential`). Positional only. |\n * | `rolloffFactor` | `1` | How quickly volume falls off past `refDistance`. Positional only. |\n */\n options: typeof DEFAULT_VIDEO_OPTIONS;\n /** Live three.js object hosting the video quad. `null` until built. */\n object: THREE.Object3D | null;\n /** Underlying HTML video element. `null` until built. */\n videoElement: HTMLVideoElement | null;\n /** Three.js texture sampling the video element. `null` until built. */\n texture: THREE.VideoTexture | null;\n /** Material rendering the video texture (with green-screen shader when enabled). `null` until built. */\n material: THREE.Material | null;\n /**\n * THREE.js audio node connected to this video's audio stream via\n * `setMediaElementSource`. Present only in preview when the camera\n * listener is available. `null` in editor mode.\n */\n audioNode: THREE.Audio<GainNode> | THREE.PositionalAudio | null;\n\n /**\n * Whether the video should be playing. Managed by `VideoSystem` in preview.\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link play} / {@link stop}.\n */\n declare isPlaying: boolean;\n\n /**\n * Whether the video is paused mid-playback (position is preserved).\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link pause} / {@link play} / {@link stop}.\n */\n declare isPaused: boolean;\n\n constructor(\n path: string,\n options: Partial<typeof DEFAULT_VIDEO_OPTIONS> = {},\n ) {\n super();\n this.path = path;\n this.options = {\n ...DEFAULT_VIDEO_OPTIONS,\n ...options,\n };\n this.object = null;\n this.videoElement = null;\n this.texture = null;\n this.material = null;\n this.audioNode = null;\n\n // Runtime-only playback state. Non-enumerable so these values are never\n // written into save data, debug snapshots, or undo history.\n Object.defineProperty(this, \"isPlaying\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n Object.defineProperty(this, \"isPaused\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n\n /**\n * Signals `VideoSystem` to start (or resume) playback.\n * Has no direct effect in the editor — `VideoSystem` drives the actual\n * HTML video element call in preview.\n */\n play(): void {\n this.isPlaying = true;\n this.isPaused = false;\n }\n\n /**\n * Signals `VideoSystem` to pause playback, preserving the current position.\n * Calling {@link play} afterwards resumes from where it paused.\n * No-op if not currently playing.\n */\n pause(): void {\n if (!this.isPlaying) return;\n this.isPlaying = false;\n this.isPaused = true;\n }\n\n /**\n * Signals `VideoSystem` to stop playback and reset the playback position.\n */\n stop(): void {\n this.isPlaying = false;\n this.isPaused = false;\n }\n}\n","import { VideoComponent } from \"../../components/Video\";\nimport type { World } from \"../../World\";\n\nexport function createVideoComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof VideoComponent>\n): VideoComponent {\n const component = new VideoComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import {\n createAnimationComponent,\n createAudioComponent,\n createCameraComponent,\n createEnvironmentComponent,\n createEntityTypeComponent,\n createImageComponent,\n createImageTargetAnchorComponent,\n createImageTargetComponent,\n createInstancedMeshComponent,\n createLightComponent,\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n createModelComponent,\n createNameComponent,\n createObject3DRefComponent,\n createParentIdComponent,\n createPhysicsComponent,\n createPostprocessingComponent,\n createScriptComponent,\n createSelectableComponent,\n createSelectionTransformStateComponent,\n createSpriteComponent,\n createTransformComponent,\n createVideoComponent,\n} from \"./components\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\n\nexport function registerDefaultComponentFactories(\n objectManagementSystem: ObjectManagementSystem,\n): void {\n objectManagementSystem.registerComponentFactory(\"animation\", createAnimationComponent);\n objectManagementSystem.registerComponentFactory(\"audio\", createAudioComponent);\n objectManagementSystem.registerComponentFactory(\"camera\", createCameraComponent);\n objectManagementSystem.registerComponentFactory(\"physics\", createPhysicsComponent);\n objectManagementSystem.registerComponentFactory(\"environment\", createEnvironmentComponent);\n objectManagementSystem.registerComponentFactory(\"entityType\", createEntityTypeComponent);\n objectManagementSystem.registerComponentFactory(\"image\", createImageComponent);\n objectManagementSystem.registerComponentFactory(\n \"imageTargetAnchor\",\n createImageTargetAnchorComponent,\n );\n objectManagementSystem.registerComponentFactory(\"imageTarget\", createImageTargetComponent);\n objectManagementSystem.registerComponentFactory(\"light\", createLightComponent);\n objectManagementSystem.registerComponentFactory(\"material\", createMaterialComponent);\n objectManagementSystem.registerComponentFactory(\"mesh\", createMeshComponent);\n objectManagementSystem.registerComponentFactory(\n \"meshGeometry\",\n createMeshGeometryComponent,\n );\n objectManagementSystem.registerComponentFactory(\"model\", createModelComponent);\n objectManagementSystem.registerComponentFactory(\"name\", createNameComponent);\n objectManagementSystem.registerComponentFactory(\n \"object3DRef\",\n createObject3DRefComponent,\n );\n objectManagementSystem.registerComponentFactory(\"parentId\", createParentIdComponent);\n objectManagementSystem.registerComponentFactory(\n \"postprocessing\",\n createPostprocessingComponent,\n );\n\n objectManagementSystem.registerComponentFactory(\"script\", createScriptComponent);\n objectManagementSystem.registerComponentFactory(\"selectable\", createSelectableComponent);\n objectManagementSystem.registerComponentFactory(\n \"selectionTransformState\",\n createSelectionTransformStateComponent,\n );\n objectManagementSystem.registerComponentFactory(\"sprite\", createSpriteComponent);\n objectManagementSystem.registerComponentFactory(\"transform\", createTransformComponent);\n objectManagementSystem.registerComponentFactory(\"video\", createVideoComponent);\n objectManagementSystem.registerComponentFactory(\"instancedMesh\", createInstancedMeshComponent);\n}\n","import * as THREE from \"three\";\nimport type { GLTF } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { clone as cloneWithSkeleton } from \"three/examples/jsm/utils/SkeletonUtils.js\";\n\n/**\n * userData flag set on geometries/materials that back shared (cached) model\n * scenes. Entity disposal must skip these — other live clones and future\n * spawns reference the same GPU resources.\n */\nexport const SHARED_MODEL_RESOURCE_FLAG = \"spatialEcsSharedModelResource\";\n\nconst modelCache = new Map<string, Promise<GLTF>>();\n\nfunction markSharedResources(root: THREE.Object3D): void {\n root.traverse((child) => {\n if (!(child instanceof THREE.Mesh)) {\n return;\n }\n if (child.geometry) {\n child.geometry.userData[SHARED_MODEL_RESOURCE_FLAG] = true;\n }\n const materials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n for (const material of materials) {\n if (material) {\n material.userData[SHARED_MODEL_RESOURCE_FLAG] = true;\n }\n }\n });\n}\n\n/**\n * Load a GLTF once per URL and share the parsed result, so repeated spawns of\n * the same model skip both the fetch and the parse. The cached scene must\n * never be mounted directly (an Object3D has a single parent) — mount a\n * cloneModelScene() of it. Failed loads are evicted so a retry re-fetches.\n */\nexport function loadSharedGltf(\n url: string,\n load: () => Promise<GLTF>,\n): Promise<GLTF> {\n let pending = modelCache.get(url);\n if (!pending) {\n pending = load().then((gltf) => {\n markSharedResources(gltf.scene);\n return gltf;\n });\n pending.catch(() => {\n modelCache.delete(url);\n });\n modelCache.set(url, pending);\n }\n return pending;\n}\n\n/**\n * Skeleton-aware clone of a cached model scene for mounting. Geometries and\n * materials are shared with the cached original (marked via\n * SHARED_MODEL_RESOURCE_FLAG); the object hierarchy — including rebound\n * skeletons for skinned meshes — is fresh per call.\n */\nexport function cloneModelScene(scene: THREE.Object3D): THREE.Object3D {\n return cloneWithSkeleton(scene);\n}\n\n/**\n * Forget cached models (one URL, or everything). Subsequent loads fetch and\n * parse anew. Does not dispose GPU resources — live clones may still use them.\n */\nexport function clearModelCache(url?: string): void {\n if (typeof url === \"string\") {\n modelCache.delete(url);\n return;\n }\n modelCache.clear();\n}\n","import * as THREE from \"three\";\n\nimport { Object3DRef } from \"../components/Object3DRef\";\nimport { ParentId } from \"../components/ParentId\";\nimport type { TransformData } from \"../components/Transform\";\nimport { TransformComponent } from \"../components/Transform\";\nimport type { EcsSystem } from \"../System\";\nimport { SHARED_MODEL_RESOURCE_FLAG } from \"../utils/modelCache\";\nimport type { World } from \"../World\";\nimport type { EntityId, EcsEntityKind } from \"../types\";\n\nexport type CreatePayload = {\n name?: string;\n transform?: TransformData;\n parentId?: EntityId | null;\n path?: string;\n options?: Record<string, unknown>;\n camera?: Record<string, unknown>;\n useWorldCamera?: boolean;\n};\n\nexport type CreateContext = {\n world: World;\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n payload: CreatePayload;\n isEditor?: boolean;\n};\n\nexport type EntityFactory = (context: CreateContext) => EntityId;\n\nexport type EcsComponentFactoryKind =\n | \"animation\"\n | \"audio\"\n | \"camera\"\n | \"environment\"\n | \"entityType\"\n | \"image\"\n | \"imageTargetAnchor\"\n | \"imageTarget\"\n | \"light\"\n | \"material\"\n | \"mesh\"\n | \"meshGeometry\"\n | \"model\"\n | \"name\"\n | \"object3DRef\"\n | \"parentId\"\n | \"physics\"\n | \"postprocessing\"\n | \"script\"\n | \"selectable\"\n | \"selectionTransformState\"\n | \"sprite\"\n | \"transform\"\n | \"video\"\n | \"instancedMesh\";\n\nexport type ComponentFactory = (\n world: World,\n entityId: EntityId,\n ...args: any[]\n) => unknown;\n\ntype CreateRequest = {\n kind: EcsEntityKind;\n payload: CreatePayload;\n onCreated?: (entityId: EntityId) => void;\n};\n\nexport function createTransform(input?: TransformData): TransformComponent {\n return new TransformComponent(input);\n}\n\nexport function applyTransform(\n object: THREE.Object3D,\n transform: TransformComponent,\n): void {\n object.position.set(\n transform.position.x,\n transform.position.y,\n transform.position.z,\n );\n object.rotation.set(\n transform.rotation.x,\n transform.rotation.y,\n transform.rotation.z,\n );\n object.scale.set(transform.scale.x, transform.scale.y, transform.scale.z);\n}\n\nexport class ObjectManagementSystem implements EcsSystem {\n private readonly scene: THREE.Scene;\n private readonly camera: THREE.PerspectiveCamera;\n private readonly isEditor: boolean;\n private readonly registry = new Map<EcsEntityKind, EntityFactory>();\n private readonly componentRegistry = new Map<\n EcsComponentFactoryKind,\n ComponentFactory\n >();\n private readonly createQueue: CreateRequest[] = [];\n\n constructor(\n scene: THREE.Scene,\n camera: THREE.PerspectiveCamera,\n isEditor = false,\n ) {\n this.scene = scene;\n this.camera = camera;\n this.isEditor = isEditor;\n }\n\n register(kind: EcsEntityKind, factory: EntityFactory): void {\n this.registry.set(kind, factory);\n }\n\n registerComponentFactory(\n kind: EcsComponentFactoryKind,\n factory: ComponentFactory,\n ): void {\n this.componentRegistry.set(kind, factory);\n }\n\n getOrCreateAudioListener(): THREE.AudioListener {\n const existing = this.camera.userData.ecsAudioListener;\n if (existing instanceof THREE.AudioListener) {\n return existing;\n }\n\n const listener = new THREE.AudioListener();\n this.camera.add(listener);\n this.camera.userData.ecsAudioListener = listener;\n return listener;\n }\n\n isEditorMode(): boolean {\n return this.isEditor;\n }\n\n getComponentFactory(kind: EcsComponentFactoryKind): ComponentFactory | null {\n return this.componentRegistry.get(kind) ?? null;\n }\n\n createComponentNow(\n kind: EcsComponentFactoryKind,\n world: World,\n entityId: EntityId,\n ...args: any[]\n ): unknown {\n const factory = this.componentRegistry.get(kind);\n if (!factory) {\n throw new Error(`Unknown component kind: ${kind}`);\n }\n\n return factory(world, entityId, ...args);\n }\n\n requestCreate(\n kind: EcsEntityKind,\n payload: CreatePayload = {},\n onCreated?: (entityId: EntityId) => void,\n ): void {\n this.createQueue.push({ kind, payload, onCreated });\n }\n\n createNow(\n kind: EcsEntityKind,\n world: World,\n payload: CreatePayload = {},\n ): EntityId {\n const factory = this.registry.get(kind);\n if (!factory) {\n throw new Error(`Unknown object kind: ${kind}`);\n }\n\n const entityId = factory({\n world,\n scene: this.scene,\n camera: this.camera,\n payload,\n isEditor: this.isEditor,\n });\n\n const object = world.getComponent(entityId, Object3DRef)?.object;\n if (object) {\n object.userData.ecsKind = kind;\n }\n\n if (payload.parentId !== undefined) {\n world.addComponent(entityId, new ParentId(payload.parentId));\n }\n\n return entityId;\n }\n\n /**\n * Removes an entity from the ECS world and its associated `Object3D` from the\n * THREE.js scene graph.\n *\n * @param world - The world the entity belongs to.\n * @param entityId - The entity to remove.\n * @param dispose - When `true`, traverses the entity's `Object3D` subtree and\n * calls `.dispose()` on every `BufferGeometry` and `Material` found. Pass\n * `true` when the entity will not be reused and you want to free GPU memory\n * immediately (e.g. dynamically spawned objects). Defaults to `false`.\n * @returns `true` if the entity existed and was removed; `false` if the entity\n * was not found.\n *\n * @example\n * ```ts\n * // Remove from scene, keep GPU resources (safe if geometry is shared)\n * objects.deleteEntity(world, entityId);\n *\n * // Remove from scene and free GPU memory (use for one-off spawned objects)\n * objects.deleteEntity(world, entityId, true);\n * ```\n */\n deleteEntity(world: World, entityId: EntityId, dispose = false): boolean {\n if (!world.hasEntity(entityId)) {\n return false;\n }\n\n const object3d = world.getComponent(entityId, Object3DRef)?.object;\n if (object3d?.parent) {\n object3d.parent.remove(object3d);\n }\n\n if (dispose && object3d) {\n object3d.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n // Resources backing shared (cached) model scenes are skipped —\n // other live clones and future spawns reference the same objects.\n if (!child.geometry?.userData?.[SHARED_MODEL_RESOURCE_FLAG]) {\n child.geometry?.dispose();\n }\n const materials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n for (const mat of materials) {\n if (mat && !mat.userData?.[SHARED_MODEL_RESOURCE_FLAG]) {\n mat.dispose();\n }\n }\n }\n });\n }\n\n world.destroyEntity(entityId);\n return true;\n }\n\n setParent(\n world: World,\n entityId: EntityId,\n parentId: EntityId | null,\n options?: {\n preserveWorldTransform?: boolean;\n },\n ): boolean {\n if (!world.hasEntity(entityId)) {\n return false;\n }\n\n if (parentId !== null && !world.hasEntity(parentId)) {\n return false;\n }\n\n if (parentId === entityId) {\n return false;\n }\n\n let ancestor = parentId;\n while (ancestor !== null) {\n if (ancestor === entityId) {\n return false;\n }\n\n ancestor = world.getComponent(ancestor, ParentId)?.value ?? null;\n }\n\n const parentComponent = world.getComponent(entityId, ParentId);\n if (parentComponent) {\n if (parentComponent.value === parentId) {\n return false;\n }\n\n parentComponent.value = parentId;\n } else {\n world.addComponent(entityId, new ParentId(parentId));\n }\n\n const preserveWorldTransform = options?.preserveWorldTransform ?? true;\n if (preserveWorldTransform) {\n const object = world.getComponent(entityId, Object3DRef)?.object;\n const parentObject =\n parentId !== null\n ? world.getComponent(parentId, Object3DRef)?.object ?? null\n : null;\n\n if (object) {\n // Refresh matrixWorld before attach so world-space preservation is accurate.\n this.scene.updateMatrixWorld(true);\n\n if (parentObject && parentObject !== object) {\n parentObject.attach(object);\n } else {\n this.scene.attach(object);\n }\n\n object.updateMatrixWorld(true);\n this.syncTransformComponentFromObject(world, entityId, object);\n }\n }\n\n this.reconcileSceneFromWorld(world);\n return true;\n }\n\n private syncTransformComponentFromObject(\n world: World,\n entityId: EntityId,\n object: THREE.Object3D,\n ): void {\n const transform = world.getComponent(entityId, TransformComponent);\n if (!transform) {\n return;\n }\n\n transform.position.x = object.position.x;\n transform.position.y = object.position.y;\n transform.position.z = object.position.z;\n\n transform.rotation.x = object.rotation.x;\n transform.rotation.y = object.rotation.y;\n transform.rotation.z = object.rotation.z;\n\n transform.scale.x = object.scale.x;\n transform.scale.y = object.scale.y;\n transform.scale.z = object.scale.z;\n }\n\n reconcileSceneFromWorld(world: World): void {\n const worldObjects = new Map<EntityId, THREE.Object3D>();\n const entityIds = world.query(Object3DRef);\n\n for (const entityId of entityIds) {\n const object = world.getComponent(entityId, Object3DRef)?.object;\n if (!object) {\n continue;\n }\n\n worldObjects.set(entityId, object);\n }\n\n for (const child of [...this.scene.children]) {\n const entityId = child.userData?.entityId;\n if (typeof entityId === \"number\" && !world.hasEntity(entityId)) {\n this.scene.remove(child);\n }\n }\n\n for (const [entityId, object] of worldObjects.entries()) {\n const parentEntityId = world.getComponent(entityId, ParentId)?.value;\n const parentObject =\n typeof parentEntityId === \"number\"\n ? worldObjects.get(parentEntityId)\n : undefined;\n\n if (parentObject && parentObject !== object) {\n if (object.parent !== parentObject) {\n // Reconcile hierarchy from ParentId while keeping Transform as local source of truth.\n parentObject.add(object);\n object.updateMatrixWorld(true);\n }\n continue;\n }\n\n if (object.parent !== this.scene) {\n // Reconcile hierarchy from ParentId while keeping Transform as local source of truth.\n this.scene.add(object);\n object.updateMatrixWorld(true);\n }\n }\n }\n\n update(world: World): void {\n for (const request of this.createQueue.splice(0)) {\n const entityId = this.createNow(request.kind, world, request.payload);\n request.onCreated?.(entityId);\n }\n\n this.reconcileSceneFromWorld(world);\n }\n}\n","import type * as THREE from \"three\";\n\nimport type { TransformData } from \"../../components/Transform\";\nimport {\n createEntityTypeComponent,\n createNameComponent,\n createObject3DRefComponent,\n createParentIdComponent,\n createSelectableComponent,\n} from \"../components\";\n\nimport {\n applyTransform,\n createTransform,\n} from \"../../systems/ObjectManagementSystem\";\nimport type { EcsEntityKind, EntityId } from \"../../types\";\nimport type { World } from \"../../World\";\n\ntype CreateBaseEntityOptions = {\n label: string;\n entityType: EcsEntityKind;\n transformInput?: TransformData;\n parentId?: EntityId | null;\n};\n\nexport function createBaseEntity(\n world: World,\n object: THREE.Object3D,\n options: CreateBaseEntityOptions,\n): number {\n const entityId = world.createEntity();\n object.userData.entityId = entityId;\n\n const transform = createTransform(options.transformInput);\n applyTransform(object, transform);\n\n world.addComponent(entityId, transform);\n createObject3DRefComponent(world, entityId, object);\n createNameComponent(world, entityId, options.label);\n createEntityTypeComponent(world, entityId, options.entityType);\n createParentIdComponent(world, entityId, options.parentId ?? null);\n createSelectableComponent(world, entityId, true);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createAudioComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction getOrCreateListener(\n camera: THREE.PerspectiveCamera,\n): THREE.AudioListener {\n const existing = camera.userData.ecsAudioListener;\n if (existing instanceof THREE.AudioListener) {\n return existing;\n }\n\n const listener = new THREE.AudioListener();\n camera.add(listener);\n camera.userData.ecsAudioListener = listener;\n\n return listener;\n}\n\n\nexport function createAudio({\n world,\n scene,\n camera,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Audio\",\n entityType: \"audio\",\n transformInput: payload.transform,\n });\n\n const audio = createAudioComponent(\n world,\n entityId,\n payload.path ?? \"\",\n payload.options ?? {},\n {\n object: anchor,\n listener: getOrCreateListener(camera),\n isEditor,\n },\n );\n scene.add(anchor);\n\n if (!audio.path) {\n return entityId;\n }\n\n if (!isEditor) {\n const loader = new THREE.AudioLoader();\n loader.load(\n audio.path,\n (buffer) => {\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n const sound = audio.audio;\n if (!sound) {\n return;\n }\n\n sound.setBuffer(buffer);\n if (audio.options.autoplay) {\n audio.play();\n }\n },\n undefined,\n (error) => {\n console.error(`Failed to load audio: ${audio.path}`, error);\n },\n );\n }\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport type {\n CameraComponentOptions,\n CameraProjection,\n CameraRuntimeType,\n} from \"../../components/Camera\";\nimport { createCameraComponent } from \"../components\";\nimport { Object3DRef } from \"../../components/Object3DRef\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\ntype CameraCreateOptions = {\n type?: CameraRuntimeType;\n isDefault?: boolean;\n projection?: CameraProjection;\n fov?: number;\n near?: number;\n far?: number;\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n zoom?: number;\n};\n\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 2000;\nconst DEFAULT_FOV = 50;\nconst DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT = 5;\n\nfunction readViewportAspect(): number {\n if (typeof window === \"undefined\") {\n return 1;\n }\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n if (\n Number.isFinite(width) &&\n Number.isFinite(height) &&\n width > 0 &&\n height > 0\n ) {\n return width / height;\n }\n\n return 1;\n}\n\nfunction toCameraCreateOptions(input: unknown): CameraCreateOptions {\n if (!input || typeof input !== \"object\") {\n return {};\n }\n\n const value = input as Record<string, unknown>;\n\n const type =\n value.type === \"3d\" || value.type === \"ar\"\n ? value.type\n : undefined;\n\n const projection =\n value.projection === \"orthographic\" || value.projection === \"perspective\"\n ? value.projection\n : undefined;\n\n return {\n type,\n isDefault: typeof value.isDefault === \"boolean\" ? value.isDefault : undefined,\n projection,\n fov: typeof value.fov === \"number\" && Number.isFinite(value.fov) ? value.fov : undefined,\n near:\n typeof value.near === \"number\" && Number.isFinite(value.near)\n ? value.near\n : undefined,\n far: typeof value.far === \"number\" && Number.isFinite(value.far) ? value.far : undefined,\n left:\n typeof value.left === \"number\" && Number.isFinite(value.left)\n ? value.left\n : undefined,\n right:\n typeof value.right === \"number\" && Number.isFinite(value.right)\n ? value.right\n : undefined,\n top:\n typeof value.top === \"number\" && Number.isFinite(value.top)\n ? value.top\n : undefined,\n bottom:\n typeof value.bottom === \"number\" && Number.isFinite(value.bottom)\n ? value.bottom\n : undefined,\n zoom:\n typeof value.zoom === \"number\" && Number.isFinite(value.zoom)\n ? value.zoom\n : undefined,\n };\n}\n\nfunction resolveCameraCreateOptions(payload: {\n options?: unknown;\n camera?: unknown;\n}): CameraCreateOptions {\n // Prefer new payload.options shape, but support legacy payload.camera for\n // backward compatibility with older editor/serialized payloads.\n const next = toCameraCreateOptions(payload.options);\n\n if (payload.options && typeof payload.options === \"object\") {\n return next;\n }\n\n return toCameraCreateOptions(payload.camera);\n}\n\nfunction applyCameraSettings(camera: THREE.Camera, options: CameraCreateOptions): void {\n const near = typeof options.near === \"number\" ? options.near : DEFAULT_NEAR;\n const far = typeof options.far === \"number\" ? options.far : DEFAULT_FAR;\n const projection = options.projection;\n\n if (camera instanceof THREE.PerspectiveCamera) {\n if (!projection || projection === \"perspective\") {\n camera.fov = typeof options.fov === \"number\" ? options.fov : DEFAULT_FOV;\n }\n\n camera.aspect = readViewportAspect();\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n return;\n }\n\n if (camera instanceof THREE.OrthographicCamera) {\n camera.left =\n typeof options.left === \"number\"\n ? options.left\n : -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.right =\n typeof options.right === \"number\"\n ? options.right\n : DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.top =\n typeof options.top === \"number\"\n ? options.top\n : DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.bottom =\n typeof options.bottom === \"number\"\n ? options.bottom\n : -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.zoom = typeof options.zoom === \"number\" ? options.zoom : 1;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n }\n}\n\nfunction createCameraObject(options: CameraCreateOptions): THREE.Camera {\n const projection = options.projection ?? \"perspective\";\n const near = options.near ?? DEFAULT_NEAR;\n const far = options.far ?? DEFAULT_FAR;\n\n if (projection === \"orthographic\") {\n const top = options.top ?? DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const bottom = options.bottom ?? -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const left = options.left ?? -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const right = options.right ?? DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const camera = new THREE.OrthographicCamera(\n left,\n right,\n top,\n bottom,\n near,\n far,\n );\n\n camera.zoom = options.zoom ?? 1;\n camera.updateProjectionMatrix();\n return camera;\n }\n\n return new THREE.PerspectiveCamera(\n options.fov ?? DEFAULT_FOV,\n readViewportAspect(),\n near,\n far,\n );\n}\n\nexport function createCamera({ world, scene, camera, payload, isEditor }: CreateContext): number {\n const options = resolveCameraCreateOptions(payload);\n const useWorldCamera = !isEditor && (payload.useWorldCamera === true || Boolean(options.isDefault));\n const object = useWorldCamera ? camera : createCameraObject(options);\n\n const entityId = createBaseEntity(world, object, {\n label: payload.name ?? \"Camera\",\n entityType: \"camera\",\n transformInput: payload.transform,\n });\n\n const objectRef = world.getComponent(entityId, Object3DRef);\n if (objectRef?.object instanceof THREE.Camera) {\n objectRef.object.userData.entityId = entityId;\n }\n\n const componentOptions: CameraComponentOptions = {\n camera: object,\n type: options.type,\n isDefault: options.isDefault,\n projection: options.projection,\n fov: options.fov,\n near: options.near,\n far: options.far,\n left: options.left,\n right: options.right,\n top: options.top,\n bottom: options.bottom,\n zoom: options.zoom,\n };\n\n const component = createCameraComponent(world, entityId, componentOptions);\n\n if (useWorldCamera) {\n applyCameraSettings(object, options);\n } else {\n applyCameraSettings(object, options);\n\n if (isEditor && component.isDefault) {\n const helper = new THREE.CameraHelper(object);\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n object.add(helper);\n }\n\n scene.add(object);\n }\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createCapsule({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const geometry = new THREE.CapsuleGeometry(0.5, 1, 4, 8);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Capsule\",\n entityType: \"capsule\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"capsule\", mesh, {\n radius: 0.5,\n height: 1,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n scene.add(mesh);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createCube({ world, scene, payload }: CreateContext): number {\n const geometry = new THREE.BoxGeometry(1, 1, 1);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Cube\",\n entityType: \"cube\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"cube\", mesh, {\n width: 1,\n height: 1,\n depth: 1,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n\n scene.add(mesh);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createCylinder({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const geometry = new THREE.CylinderGeometry(0.5, 0.5, 1, 20);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Cylinder\",\n entityType: \"cylinder\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"cylinder\", mesh, {\n radius: 0.5,\n height: 1,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n scene.add(mesh);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction createEmptyEditorHelper(): THREE.LineSegments {\n const geometry = new THREE.EdgesGeometry(new THREE.BoxGeometry(0.1, 0.1, 0.1));\n const material = new THREE.LineBasicMaterial({\n color: \"#7f8ea3\",\n transparent: true,\n opacity: 0.9,\n depthTest: false,\n });\n\n const helper = new THREE.LineSegments(geometry, material);\n helper.renderOrder = 10;\n helper.userData.ecsHelper = true;\n\n return helper;\n}\n\nexport function createEmpty({ world, scene, payload, isEditor }: CreateContext): number {\n const object = new THREE.Group();\n\n const entityId = createBaseEntity(world, object, {\n label: payload.name ?? \"Empty\",\n entityType: \"empty\",\n transformInput: payload.transform,\n });\n\n // if (isEditor) {\n // object.add(createEmptyEditorHelper());\n // }\n\n scene.add(object);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createImageComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createImage({ world, scene, payload }: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const imagePath = payload.path ?? \"\";\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Image\",\n entityType: \"image\",\n transformInput: payload.transform,\n });\n\n const image = createImageComponent(world, entityId, imagePath);\n image.object = anchor;\n scene.add(anchor);\n\n if (!imagePath) {\n return entityId;\n }\n\n const loader = new THREE.TextureLoader();\n loader.load(\n imagePath,\n (texture) => {\n if (!world.hasEntity(entityId)) {\n texture.dispose();\n return;\n }\n\n const material = new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n });\n const geometry = new THREE.PlaneGeometry(1, 1);\n const plane = new THREE.Mesh(geometry, material);\n plane.userData.entityId = entityId;\n\n const textureImage = texture.image as { width?: number; height?: number } | undefined;\n const width = textureImage?.width ?? 1;\n const height = textureImage?.height ?? 1;\n const aspect = height > 0 ? width / height : 1;\n\n image.width = width;\n image.height = height;\n\n plane.scale.set(aspect, 1, 1);\n\n anchor.add(plane);\n image.texture = texture;\n image.object = plane;\n },\n undefined,\n (error) => {\n console.error(`Failed to load image: ${imagePath}`, error);\n },\n );\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n type ImageTarget,\n type ImageTargetReference,\n} from \"../../components/ImageTarget\";\nimport { createImageTargetComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\ntype ImageTargetOptions = {\n targets?: ImageTargetReference[];\n compiledTargetUrl?: string;\n compiledTargetDir?: string;\n};\n\nfunction toImageTargetOptions(input: unknown): ImageTargetOptions {\n if (!input || typeof input !== \"object\") {\n return {};\n }\n\n const value = input as {\n targets?: unknown;\n compiledTargetUrl?: unknown;\n compiledTargetDir?: unknown;\n };\n\n const targets = Array.isArray(value.targets)\n ? value.targets.filter((target): target is ImageTargetReference => {\n if (!target || typeof target !== \"object\") {\n return false;\n }\n\n const candidate = target as Partial<ImageTargetReference>;\n return (\n typeof candidate.id === \"number\" &&\n Number.isFinite(candidate.id) &&\n typeof candidate.url === \"string\" &&\n candidate.url.length > 0 &&\n typeof candidate.width === \"number\" &&\n Number.isFinite(candidate.width) &&\n typeof candidate.height === \"number\" &&\n Number.isFinite(candidate.height)\n );\n })\n : undefined;\n\n return {\n targets,\n compiledTargetUrl:\n typeof value.compiledTargetUrl === \"string\"\n ? value.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof value.compiledTargetDir === \"string\"\n ? value.compiledTargetDir\n : undefined,\n };\n}\n\nexport function createImageTarget({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const imagePath = payload.path ?? \"\";\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Image Target\",\n entityType: \"imageTarget\",\n transformInput: payload.transform,\n });\n\n const targetOptions = toImageTargetOptions(payload.options);\n const imageTarget: ImageTarget = createImageTargetComponent(\n world,\n entityId,\n targetOptions,\n );\n scene.add(anchor);\n\n // Only editor sessions should load and render image planes for targets.\n if (!isEditor || !imagePath) {\n return entityId;\n }\n\n const loader = new THREE.TextureLoader();\n loader.load(\n imagePath,\n (texture) => {\n if (!world.hasEntity(entityId)) {\n texture.dispose();\n return;\n }\n\n const material = new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n });\n const geometry = new THREE.PlaneGeometry(1, 1);\n const plane = new THREE.Mesh(geometry, material);\n plane.userData.entityId = entityId;\n\n const textureImage = texture.image as\n | { width?: number; height?: number }\n | undefined;\n const width = textureImage?.width ?? 1;\n const height = textureImage?.height ?? 1;\n const aspect = height > 0 ? width / height : 1;\n\n plane.scale.set(aspect, 1, 1);\n\n anchor.add(plane);\n imageTarget.texture = texture;\n imageTarget.object = plane;\n },\n undefined,\n (error) => {\n console.error(`Failed to load image target: ${imagePath}`, error);\n },\n );\n\n return entityId;\n}","import * as THREE from \"three\";\n\nimport {\n type InstancedMeshKind,\n type InstanceTransform,\n DEFAULT_INSTANCE_TRANSFORM,\n} from \"../../components/InstancedMesh\";\nimport { EntityType } from \"../../components/EntityType\";\nimport { Name } from \"../../components/Name\";\nimport { ParentId } from \"../../components/ParentId\";\nimport { Selectable } from \"../../components/Selectable\";\nimport { TransformComponent } from \"../../components/Transform\";\nimport { InstanceSlotComponent } from \"../../components/InstanceSlotComponent\";\nimport type { MeshGeometryParameters } from \"../../components/MeshGeometry\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createTransform } from \"../../systems/ObjectManagementSystem\";\nimport { createInstancedMeshComponent } from \"../components/InstancedMeshComponentFactory\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction isInstancedMeshKind(value: unknown): value is InstancedMeshKind {\n return (\n value === \"cube\" ||\n value === \"sphere\" ||\n value === \"plane\" ||\n value === \"cylinder\" ||\n value === \"capsule\" ||\n value === \"model\"\n );\n}\n\n/**\n * Creates a lightweight instance-slot entity for the given group, using the\n * provided transform data. Does NOT add an `Object3DRef` — instance slots are\n * pure data entities whose transform is read by `InstancedMeshSystem`.\n */\nfunction createInstanceSlotEntity(\n world: Parameters<typeof createBaseEntity>[0],\n groupEntityId: number,\n slotIndex: number,\n label: string,\n transform?: InstanceTransform,\n): number {\n const instanceEntityId = world.createEntity();\n world.addComponent(instanceEntityId, new Name(label));\n world.addComponent(\n instanceEntityId,\n createTransform(\n transform\n ? {\n position: transform.position,\n rotation: transform.rotation,\n scale: transform.scale,\n }\n : undefined,\n ),\n );\n world.addComponent(\n instanceEntityId,\n new InstanceSlotComponent(groupEntityId, slotIndex),\n );\n world.addComponent(instanceEntityId, new EntityType(\"instanceSlot\"));\n world.addComponent(instanceEntityId, new Selectable(true));\n world.addComponent(instanceEntityId, new ParentId(groupEntityId));\n return instanceEntityId;\n}\n\nexport function createInstancedMesh({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const opts = payload.options ?? {};\n const meshKind: InstancedMeshKind = isInstancedMeshKind(opts.meshKind)\n ? (opts.meshKind as InstancedMeshKind)\n : \"cube\";\n\n const meshParameters =\n opts.meshParameters && typeof opts.meshParameters === \"object\"\n ? (opts.meshParameters as Partial<MeshGeometryParameters>)\n : undefined;\n\n const castShadow =\n typeof opts.castShadow === \"boolean\" ? opts.castShadow : false;\n const receiveShadow =\n typeof opts.receiveShadow === \"boolean\" ? opts.receiveShadow : false;\n const modelPath =\n typeof opts.modelPath === \"string\" ? opts.modelPath : undefined;\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Instanced Mesh\",\n entityType: \"instancedMesh\",\n transformInput: payload.transform,\n });\n\n // Determine instance entity IDs.\n // Three cases:\n // 1. `opts.instanceEntityIds` is present (new-format hydration) — skip child creation.\n // 2. `opts.instances` is present (old-format migration) — create a slot entity per legacy transform.\n // 3. Neither — fresh creation from UI: create one default slot entity.\n let instanceEntityIds: number[] = [];\n\n if (Array.isArray(opts.instanceEntityIds)) {\n // New hydration format — child entities are already in snapshot.entities and\n // will be created separately. Leave instanceEntityIds empty here; it will be\n // populated by restoreComponentState + remapped by restorePostCreateComponents.\n instanceEntityIds = [];\n } else if (Array.isArray(opts.instances) && (opts.instances as InstanceTransform[]).length > 0) {\n // Old snapshot migration: create a slot entity for each legacy InstanceTransform.\n const legacyInstances = opts.instances as InstanceTransform[];\n for (let i = 0; i < legacyInstances.length; i++) {\n const slotId = createInstanceSlotEntity(\n world,\n entityId,\n i,\n `Instance ${i + 1}`,\n legacyInstances[i],\n );\n instanceEntityIds.push(slotId);\n }\n } else {\n // Fresh creation: one default instance.\n const slotId = createInstanceSlotEntity(\n world,\n entityId,\n 0,\n \"Instance 1\",\n { ...DEFAULT_INSTANCE_TRANSFORM },\n );\n instanceEntityIds = [slotId];\n }\n\n createInstancedMeshComponent(world, entityId, meshKind, meshParameters, {\n castShadow,\n receiveShadow,\n instanceEntityIds,\n modelPath,\n });\n\n scene.add(anchor);\n return entityId;\n}\n","import { EntityType } from \"../../components/EntityType\";\nimport { Name } from \"../../components/Name\";\nimport { ParentId } from \"../../components/ParentId\";\nimport { Selectable } from \"../../components/Selectable\";\nimport { TransformComponent } from \"../../components/Transform\";\nimport { InstanceSlotComponent } from \"../../components/InstanceSlotComponent\";\nimport { createTransform } from \"../../systems/ObjectManagementSystem\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\n\n/**\n * Creates a lightweight instance-slot entity.\n *\n * Instance slot entities carry `TransformComponent` and `InstanceSlotComponent`\n * but intentionally do **not** have an `Object3DRef` — they are pure data\n * containers whose transform is consumed by `InstancedMeshSystem` to build\n * instance matrices. They appear in the hierarchy as children of the owning\n * `instancedMesh` group entity.\n */\nexport function createInstanceSlot({ world, payload }: CreateContext): number {\n const opts = payload.options ?? {};\n const groupEntityId =\n typeof opts.groupEntityId === \"number\" ? opts.groupEntityId : -1;\n const slotIndex =\n typeof opts.slotIndex === \"number\" ? opts.slotIndex : 0;\n\n const entityId = world.createEntity();\n\n world.addComponent(\n entityId,\n new Name(payload.name ?? `Instance ${slotIndex + 1}`),\n );\n world.addComponent(entityId, createTransform(payload.transform));\n world.addComponent(entityId, new InstanceSlotComponent(groupEntityId, slotIndex));\n world.addComponent(entityId, new EntityType(\"instanceSlot\"));\n world.addComponent(entityId, new Selectable(true));\n // ParentId is applied by applyParentLinks during hydration, or set directly\n // by the instanced mesh factory / runtime when creating fresh instances.\n world.addComponent(entityId, new ParentId(groupEntityId !== -1 ? groupEntityId : null));\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createAmbientLight({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const light = new THREE.AmbientLight(\"#ffffff\", 0.6);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Ambient Light\",\n entityType: \"ambientLight\",\n transformInput: payload.transform,\n });\n\n createLightComponent(world, entityId, light);\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\nimport { RectAreaLightHelper } from \"three/examples/jsm/helpers/RectAreaLightHelper.js\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createAreaLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.RectAreaLight(\"#ffffff\", 5, 4, 4);\n light.lookAt(0, 0, 0);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Area Light\",\n entityType: \"areaLight\",\n transformInput: payload.transform ?? {\n position: { x: 0, y: 4, z: 0 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new RectAreaLightHelper(light, \"#fb7185\");\n helper.onBeforeRender = () => {\n helper.updateMatrixWorld(true);\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createDirectionalLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.DirectionalLight(\"#ffffff\", 1.5);\n light.castShadow = true;\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Directional Light\",\n entityType: \"directionalLight\",\n transformInput: payload.transform ?? {\n position: { x: 3, y: 6, z: 4 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new THREE.DirectionalLightHelper(light, 1.8, \"#38bdf8\");\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createPointLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.PointLight(\"#ffffff\", 1, 10);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Point Light\",\n entityType: \"pointLight\",\n transformInput: payload.transform ?? {\n position: { x: 2, y: 3, z: 2 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new THREE.PointLightHelper(light, 0.35, \"#fbbf24\");\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createSpotLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.SpotLight(\"#ffffff\", 1, 20, Math.PI / 6, 0.1, 1);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Spot Light\",\n entityType: \"spotLight\",\n transformInput: payload.transform ?? {\n position: { x: 2, y: 5, z: 2 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new THREE.SpotLightHelper(light, \"#f59e0b\");\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","const LOCAL_DRACO_DECODER_RELATIVE_PATH = \"./assets/draco/\";\nexport const DRACO_DECODER_CDN_PATH =\n \"https://www.gstatic.com/draco/versioned/decoders/1.5.7/\";\n\nlet dracoDecoderPathOverride: string | null = null;\n\n/**\n * Override where the DRACO decoder files (draco_wasm_wrapper.js,\n * draco_decoder.wasm, draco_decoder.js) are fetched from. Embedding apps\n * whose bundlers relocate this package's chunks — making the default\n * import.meta.url resolution point at a location that is never populated —\n * should call this before any model loads. The path must end with \"/\".\n * Pass null to restore the default resolution.\n */\nexport function setDracoDecoderPath(path: string | null): void {\n dracoDecoderPathOverride = path;\n}\n\nfunction isBlockedBrowserFileUrl(url: string): boolean {\n return url.startsWith(\"file://\");\n}\n\nexport function resolveDracoDecoderPath(): string {\n if (dracoDecoderPathOverride) {\n return dracoDecoderPathOverride;\n }\n\n try {\n // Prefer vendored decoder assets shipped with this package.\n const resolvedPath = new URL(\n LOCAL_DRACO_DECODER_RELATIVE_PATH,\n import.meta.url,\n ).toString();\n\n // Browser loaders cannot fetch file:// resources from package install paths.\n // Fall back to CDN decoders when bundlers emit file URLs for node_modules assets.\n if (isBlockedBrowserFileUrl(resolvedPath)) {\n return DRACO_DECODER_CDN_PATH;\n }\n\n return resolvedPath;\n } catch {\n // Fallback keeps compatibility in runtimes that cannot resolve package-relative URLs.\n return DRACO_DECODER_CDN_PATH;\n }\n}\n","export {\n AnimationComponent,\n type AnimationComponentOptions,\n} from \"./Animation\";\nexport {\n CameraComponent,\n type CameraComponentOptions,\n type CameraProjection,\n type CameraRuntimeType,\n} from \"./Camera\";\nexport { AudioComponent } from \"./Audio\";\nexport {\n DEFAULT_ENVIRONMENT_STATE,\n Environment,\n type EnvironmentFogState,\n type EnvironmentFogType,\n type EnvironmentGradientEffect,\n type EnvironmentSkyboxState,\n type EnvironmentSkyboxType,\n type EnvironmentState,\n} from \"./Environment\";\nexport {\n DEFAULT_POSTPROCESSING_STATE,\n Postprocessing,\n type PostprocessingState,\n} from \"./Postprocessing\";\nexport {\n InstancedMeshComponent,\n DEFAULT_INSTANCE_TRANSFORM,\n DEFAULT_INSTANCED_MESH_PARAMETERS,\n type InstanceTransform,\n type InstancedMeshKind,\n} from \"./InstancedMesh\";\nexport { InstanceSlotComponent } from \"./InstanceSlotComponent\";\nexport {\n PhysicsComponent,\n type PhysicsState,\n DEFAULT_PHYSICS_STATE,\n type RigidbodyState,\n type RigidbodyType,\n DEFAULT_RIGIDBODY_STATE,\n type ColliderShape,\n type ColliderState,\n DEFAULT_COLLIDER_STATE,\n normalizePhysicsState,\n} from \"./Physics\";\nexport { EntityType } from \"./EntityType\";\nexport { ImageComponent } from \"./Image\";\nexport { ImageTarget, type ImageTargetReference } from \"./ImageTarget\";\nexport {\n ImageTargetAnchor,\n type ImageTargetAnchorOptions,\n} from \"./ImageTargetAnchor\";\nexport { LightComponent, type LightValueState } from \"./Light\";\nexport {\n defaultMaterialValue,\n MaterialComponent,\n type MaterialTypeValue,\n type MaterialValueState,\n type TextureFilteringValue,\n} from \"./Material\";\nexport { MeshComponent } from \"./Mesh\";\nexport {\n DEFAULT_MESH_GEOMETRY_PARAMETERS,\n MeshGeometryComponent,\n type CubeMeshParameters,\n type EditableMeshObjectKind,\n type MeshGeometryParameters,\n type MeshGeometryParametersByKind,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"./MeshGeometry\";\nexport { ModelComponent } from \"./Model\";\nexport { Name } from \"./Name\";\nexport { Object3DRef } from \"./Object3DRef\";\nexport { ParentId } from \"./ParentId\";\nexport { PrefabInstance } from \"./PrefabInstance\";\nexport { PrefabNode } from \"./PrefabNode\";\nexport { ScriptComponent, type ScriptEntry } from \"./ScriptComponent\";\nexport { Selectable } from \"./Selectable\";\n\nexport { SpriteComponent } from \"./Sprite\";\nexport {\n SelectionTransformState,\n type TransformModeValue,\n type TransformSpaceValue,\n} from \"./SelectionTransformState\";\nexport { TransformComponent, type TransformData, type Vec3 } from \"./Transform\";\nexport { VideoComponent } from \"./Video\";\n","import { Component } from \"../Component\";\n\n/**\n * Marks the ROOT entity of a prefab instance and records its link to the\n * source `.prefab` asset plus the instance's per-property overrides.\n *\n * `overrides` is a flat list of encoded strings so it survives snapshot\n * serialization at any depth:\n *\n * ```\n * \"<nodeId>|<ComponentName>|<slash/separated/path>\"\n * \"<nodeId>|<ComponentName>|\" // empty path = whole component overridden\n * ```\n *\n * e.g. `\"9f2c…|MaterialComponent|values/0/color\"`.\n *\n * Overridden paths keep their per-instance values when the prefab asset is\n * re-applied; everything else syncs from the file. The instance root's\n * Transform, Name, and ParentId are implicitly per-instance and never appear\n * here. Overrides are an editor-side concern — the runtime never resolves\n * them (scene-placed instances are fully materialized; runtime spawns are\n * fresh copies of the file).\n *\n * @category Components\n */\nexport class PrefabInstance extends Component {\n /** URL of the source `.prefab` asset (`localasset://…` inside the editor). */\n url: string;\n /** Encoded override paths — see class docs for the format. */\n overrides: string[];\n\n constructor(url: string, overrides: string[] = []) {\n super();\n this.url = url;\n this.overrides = overrides;\n }\n}\n","import { Component } from \"../Component\";\n\n/**\n * Stable identity for an entity that originated from a prefab asset.\n *\n * Every entity serialized into a `.prefab` file carries a `PrefabNode` with a\n * uuid `nodeId`. Hydrating the prefab (editor instantiate or runtime spawn)\n * restores the component, so each instance entity can be matched back to its\n * prefab-file counterpart regardless of live entity ids. The per-property\n * override system diffs and merges in nodeId-space.\n *\n * Node ids are unique within one prefab subtree — two instances of the same\n * prefab intentionally share nodeIds.\n *\n * @category Components\n */\nexport class PrefabNode extends Component {\n /** Stable uuid identifying this entity within its prefab definition. */\n nodeId: string;\n\n constructor(nodeId: string) {\n super();\n this.nodeId = nodeId;\n }\n}\n","import * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader.js\";\nimport { GLTFLoader, type GLTF } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { resolveDracoDecoderPath } from \"../../utils/dracoDecoderPath\";\nimport { cloneModelScene, loadSharedGltf } from \"../../utils/modelCache\";\n\nimport {\n createAnimationComponent,\n createMeshGeometryComponent,\n createModelComponent,\n} from \"../components\";\nimport { AnimationComponent } from \"../../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction getModelFileName(path: string): string {\n const segments = path.split(/[\\\\/]/).filter(Boolean);\n return segments[segments.length - 1] ?? \"\";\n}\n\nfunction createModelLoader(): GLTFLoader {\n const loader = new GLTFLoader();\n\n try {\n const dracoLoader = new DRACOLoader();\n // Resolved per loader so a setDracoDecoderPath() override made after\n // module load still takes effect. Keep decoder version aligned with the\n // three.js runtime used by the app.\n dracoLoader.setDecoderPath(resolveDracoDecoderPath());\n loader.setDRACOLoader(dracoLoader);\n } catch (error) {\n console.warn(\"DRACOLoader could not be configured. Loading non-Draco models only.\", error);\n }\n\n return loader;\n}\n\nfunction collectModelMaterials(rootObject: THREE.Object3D): THREE.Material[] {\n const materialSet = new Set<THREE.Material>();\n\n rootObject.traverse((child) => {\n const asMesh = child as THREE.Mesh;\n if (!asMesh.material) {\n return;\n }\n\n if (Array.isArray(asMesh.material)) {\n for (const material of asMesh.material) {\n if (material) {\n materialSet.add(material);\n }\n }\n return;\n }\n\n materialSet.add(asMesh.material);\n });\n\n return [...materialSet];\n}\n\nexport function createModel({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const modelPath = payload.path ?? \"\";\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Model\",\n entityType: \"model\",\n transformInput: payload.transform,\n });\n\n const model = createModelComponent(world, entityId, modelPath);\n const meshGeometry = createMeshGeometryComponent(world, entityId, \"model\", anchor, {}, {\n modelName: getModelFileName(modelPath),\n castShadow: false,\n receiveShadow: false,\n });\n\n model.object = anchor;\n scene.add(anchor);\n\n if (!modelPath) {\n return entityId;\n }\n\n const attachLoadedModel = (gltf: GLTF, object: THREE.Object3D) => {\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n object.userData.entityId = entityId;\n object.traverse((child) => {\n child.userData.entityId = entityId;\n });\n\n anchor.add(object);\n model.object = object;\n meshGeometry.object = object;\n\n if (gltf.animations.length > 0) {\n let animation = world.getComponent(entityId, AnimationComponent);\n\n if (!animation) {\n animation = createAnimationComponent(world, entityId, {\n clips: gltf.animations,\n externalClipSources: [],\n paused: false,\n reverse: false,\n timeScale: 1,\n crossFadeDuration: 0,\n });\n }\n\n animation.setModelClips(gltf.animations);\n }\n };\n\n const onLoadError = (error: unknown) => {\n console.error(`Failed to load model: ${modelPath}`, error);\n };\n\n if (isEditor) {\n // Editor sessions can re-import an asset under the same URL, which a\n // shared cache would mask with stale content — load fresh per spawn.\n createModelLoader().load(\n modelPath,\n (gltf) => attachLoadedModel(gltf, gltf.scene),\n undefined,\n onLoadError,\n );\n } else {\n // Runtime: parse each model URL once and mount skeleton-aware clones, so\n // repeated spawns (and script-driven respawns) skip fetch and parse.\n loadSharedGltf(\n modelPath,\n () =>\n new Promise<GLTF>((resolve, reject) => {\n createModelLoader().load(modelPath, resolve, undefined, reject);\n }),\n )\n .then((gltf) => attachLoadedModel(gltf, cloneModelScene(gltf.scene)))\n .catch(onLoadError);\n }\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createPlane({ world, scene, payload }: CreateContext): number {\n const geometry = new THREE.PlaneGeometry(100, 100);\n const material = new THREE.MeshStandardMaterial({\n color: \"#ffffff\",\n side: THREE.DoubleSide,\n });\n\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(\n world,\n mesh,\n {\n label: payload.name ?? \"Plane\",\n entityType: \"plane\",\n transformInput: {\n position: payload.transform?.position,\n rotation: payload.transform?.rotation ?? {\n x: -Math.PI / 2,\n y: 0,\n z: 0,\n },\n scale: payload.transform?.scale,\n },\n },\n );\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"plane\", mesh, {\n width: 10,\n height: 10,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n\n scene.add(mesh);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createSpriteComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createSprite({ world, scene, payload }: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const imagePath = payload.path ?? \"\";\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Sprite\",\n entityType: \"sprite\",\n transformInput: payload.transform,\n });\n\n const spriteComponent = createSpriteComponent(world, entityId, imagePath);\n scene.add(anchor);\n\n if (!imagePath) {\n return entityId;\n }\n\n const loader = new THREE.TextureLoader();\n loader.load(\n imagePath,\n (texture) => {\n if (!world.hasEntity(entityId)) {\n texture.dispose();\n return;\n }\n\n const material = new THREE.SpriteMaterial({\n map: texture,\n transparent: true,\n });\n const sprite = new THREE.Sprite(material);\n sprite.userData.entityId = entityId;\n\n const textureImage = texture.image as { width?: number; height?: number } | undefined;\n spriteComponent.width = textureImage?.width ?? 1;\n spriteComponent.height = textureImage?.height ?? 1;\n\n anchor.add(sprite);\n spriteComponent.texture = texture;\n spriteComponent.object = sprite;\n },\n undefined,\n (error) => {\n console.error(`Failed to load sprite: ${imagePath}`, error);\n },\n );\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createSphere({ world, scene, payload }: CreateContext): number {\n const geometry = new THREE.SphereGeometry(0.5, 24, 24);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Sphere\",\n entityType: \"sphere\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"sphere\", mesh, {\n radius: 0.5,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n\n scene.add(mesh);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createVideoComponent } from \"../components\";\nimport type { VideoComponent } from \"../../components/Video\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction getOrCreateListener(\n camera: THREE.PerspectiveCamera,\n): THREE.AudioListener {\n const existing = camera.userData.ecsAudioListener;\n if (existing instanceof THREE.AudioListener) {\n return existing;\n }\n\n const listener = new THREE.AudioListener();\n camera.add(listener);\n camera.userData.ecsAudioListener = listener;\n\n return listener;\n}\n\nfunction normalizeDistanceModel(\n value: string,\n): \"inverse\" | \"linear\" | \"exponential\" {\n const v = value.trim().toLowerCase();\n if (v === \"linear\" || v === \"exponential\") return v;\n return \"inverse\";\n}\n\ntype DistanceVideoOptions = VideoComponent[\"options\"];\n\nfunction toBool(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction toNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n\n return value;\n}\n\nfunction toColor(value: unknown, fallback: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return fallback;\n }\n\n return value;\n}\n\nfunction normalizeOptions(\n input: Record<string, unknown> | undefined,\n): DistanceVideoOptions {\n return {\n autoplay: toBool(input?.autoplay, false),\n loop: toBool(input?.loop, true),\n volume: Math.max(0, Math.min(1, toNumber(input?.volume, 1))),\n width: Math.max(0.01, toNumber(input?.width, 1)),\n height: Math.max(0.01, toNumber(input?.height, 1)),\n isGreenScreen: toBool(input?.isGreenScreen, false),\n backgroundColor: toColor(input?.backgroundColor, \"#00ff00\"),\n similarity: Math.max(0.01, Math.min(1, toNumber(input?.similarity, 0.4))),\n smoothness: Math.max(0.001, Math.min(1, toNumber(input?.smoothness, 0.08))),\n spill: Math.max(0, Math.min(1, toNumber(input?.spill, 0.12))),\n positional: toBool(input?.positional, false),\n refDistance: Math.max(0, toNumber(input?.refDistance, 1)),\n distanceModel: toColor(input?.distanceModel, \"inverse\"),\n rolloffFactor: Math.max(0, toNumber(input?.rolloffFactor, 1)),\n };\n}\n\nfunction createChromaMaterial(\n texture: THREE.VideoTexture,\n options: DistanceVideoOptions,\n): THREE.ShaderMaterial {\n return new THREE.ShaderMaterial({\n uniforms: {\n tex: { value: texture },\n keyColor: { value: new THREE.Color(options.backgroundColor) },\n similarity: { value: options.similarity },\n smoothness: { value: options.smoothness },\n spill: { value: options.spill },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform sampler2D tex;\n uniform vec3 keyColor;\n uniform float similarity;\n uniform float smoothness;\n uniform float spill;\n varying vec2 vUv;\n\n void main() {\n vec4 texel = texture2D(tex, vUv);\n float chromaDist = distance(texel.rgb, keyColor);\n float alpha = smoothstep(similarity, similarity + smoothness, chromaDist);\n\n float spillFactor = smoothstep(similarity, similarity + spill + smoothness, chromaDist);\n vec3 despilled = mix(vec3(dot(texel.rgb, vec3(0.299, 0.587, 0.114))), texel.rgb, spillFactor);\n\n gl_FragColor = vec4(despilled, texel.a * alpha);\n }\n `,\n transparent: true,\n side: THREE.DoubleSide,\n });\n}\n\nfunction createStandardMaterial(\n texture: THREE.VideoTexture,\n): THREE.MeshBasicMaterial {\n return new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n });\n}\n\nfunction createVideoMesh(\n entityId: number,\n texture: THREE.VideoTexture,\n options: DistanceVideoOptions,\n): { mesh: THREE.Mesh; material: THREE.Material } {\n const geometry = new THREE.PlaneGeometry(1, 1);\n const material = options.isGreenScreen\n ? createChromaMaterial(texture, options)\n : createStandardMaterial(texture);\n const mesh = new THREE.Mesh(geometry, material);\n\n mesh.userData.entityId = entityId;\n mesh.scale.set(options.width, options.height, 1);\n\n return { mesh, material };\n}\n\nfunction applyMetadataSizing(\n video: HTMLVideoElement,\n mesh: THREE.Mesh,\n options: DistanceVideoOptions,\n): void {\n const width = video.videoWidth;\n const height = video.videoHeight;\n if (width <= 0 || height <= 0) {\n return;\n }\n\n // Respect explicit option sizing. Otherwise fall back to video aspect.\n const nextWidth = options.width > 0 ? options.width : width / height;\n const nextHeight = options.height > 0 ? options.height : 1;\n\n mesh.scale.set(nextWidth, nextHeight, 1);\n}\n\nfunction createVideoElement(\n path: string,\n options: DistanceVideoOptions,\n): HTMLVideoElement {\n const video = document.createElement(\"video\");\n video.src = path;\n video.crossOrigin = \"anonymous\";\n video.loop = options.loop;\n video.playsInline = true;\n video.preload = \"auto\";\n video.volume = options.volume;\n\n return video;\n}\n\nexport function createVideo({\n world,\n scene,\n camera,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n const path = payload.path ?? \"\";\n const options = normalizeOptions(payload.options);\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Video\",\n entityType: \"video\",\n transformInput: payload.transform,\n });\n\n const videoComponent = createVideoComponent(world, entityId, path, options);\n videoComponent.object = anchor;\n scene.add(anchor);\n\n if (!path || typeof document === \"undefined\") {\n return entityId;\n }\n\n const video = createVideoElement(path, options);\n const texture = new THREE.VideoTexture(video);\n texture.colorSpace = THREE.SRGBColorSpace;\n texture.needsUpdate = true;\n\n const { mesh, material } = createVideoMesh(entityId, texture, options);\n anchor.add(mesh);\n\n videoComponent.videoElement = video;\n videoComponent.texture = texture;\n videoComponent.material = material;\n videoComponent.object = mesh;\n\n video.addEventListener(\"loadedmetadata\", () => {\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n applyMetadataSizing(video, mesh, options);\n });\n\n // Route audio through the Web Audio API only when positional audio is\n // requested. Positional audio requires Web Audio for spatialization.\n // Non-positional video leaves the native <video> audio path intact so\n // the browser can play audio without needing the AudioContext to be\n // in \"running\" state (it is suspended until a user gesture).\n if (!isEditor && options.positional) {\n const listener = getOrCreateListener(camera);\n const audioNode = new THREE.PositionalAudio(listener);\n\n audioNode.setVolume(options.volume);\n audioNode.setRefDistance(options.refDistance);\n audioNode.setDistanceModel(normalizeDistanceModel(options.distanceModel));\n audioNode.setRolloffFactor(options.rolloffFactor);\n\n // Connects the video element's audio into the Web Audio graph.\n // After this call, video.volume acts as a pre-gain before the node —\n // reset it to 1 so the audioNode's own gain is the single source of truth.\n audioNode.setMediaElementSource(video);\n video.volume = 1;\n\n anchor.add(audioNode);\n videoComponent.audioNode = audioNode;\n }\n\n if (options.autoplay) {\n videoComponent.play(); // sets isPlaying flag; VideoSystem drives actual play()\n }\n\n return entityId;\n}\n","import type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport { createAudio } from \"./objects/AudioFactory\";\nimport { createCamera } from \"./objects/CameraFactory\";\nimport { createCapsule } from \"./objects/CapsuleFactory\";\nimport { createCube } from \"./objects/CubeFactory\";\nimport { createCylinder } from \"./objects/CylinderFactory\";\nimport { createEmpty } from \"./objects/EmptyFactory\";\nimport { createImage } from \"./objects/ImageFactory\";\nimport { createImageTarget } from \"./objects/ImageTargetFactory\";\nimport { createInstancedMesh } from \"./objects/InstancedMeshFactory\";\nimport { createInstanceSlot } from \"./objects/InstanceSlotFactory\";\nimport { createAmbientLight } from \"./objects/lights/AmbientLightFactory\";\nimport { createAreaLight } from \"./objects/lights/AreaLightFactory\";\nimport { createDirectionalLight } from \"./objects/lights/DirectionalLightFactory\";\nimport { createPointLight } from \"./objects/lights/PointLightFactory\";\nimport { createSpotLight } from \"./objects/lights/SpotLightFactory\";\nimport { createModel } from \"./objects/ModelFactory\";\nimport { createPlane } from \"./objects/PlaneFactory\";\nimport { createSprite } from \"./objects/SpriteFactory\";\nimport { createSphere } from \"./objects/SphereFactory\";\nimport { createVideo } from \"./objects/VideoFactory\";\nimport { registerDefaultComponentFactories } from \"./registerDefaultComponentFactories\";\n\nexport function registerDefaultFactories(\n objectManagementSystem: ObjectManagementSystem,\n): void {\n objectManagementSystem.register(\"cube\", createCube);\n objectManagementSystem.register(\"sphere\", createSphere);\n objectManagementSystem.register(\"plane\", createPlane);\n objectManagementSystem.register(\"capsule\", createCapsule);\n objectManagementSystem.register(\"cylinder\", createCylinder);\n objectManagementSystem.register(\"empty\", createEmpty);\n objectManagementSystem.register(\"model\", createModel);\n objectManagementSystem.register(\"image\", createImage);\n objectManagementSystem.register(\"imageTarget\", createImageTarget);\n objectManagementSystem.register(\"instancedMesh\", createInstancedMesh);\n objectManagementSystem.register(\"instanceSlot\", createInstanceSlot);\n objectManagementSystem.register(\"sprite\", createSprite);\n objectManagementSystem.register(\"audio\", createAudio);\n objectManagementSystem.register(\"camera\", createCamera);\n objectManagementSystem.register(\"video\", createVideo);\n objectManagementSystem.register(\"ambientLight\", createAmbientLight);\n objectManagementSystem.register(\"directionalLight\", createDirectionalLight);\n objectManagementSystem.register(\"pointLight\", createPointLight);\n objectManagementSystem.register(\"spotLight\", createSpotLight);\n objectManagementSystem.register(\"areaLight\", createAreaLight);\n\n registerDefaultComponentFactories(objectManagementSystem);\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 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 type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { EcsWorldStateSnapshotLike } from \"./types\";\nimport { asRecord, readByComponent } from \"./readers\";\n\nexport function applyParentLinks(\n snapshot: EcsWorldStateSnapshotLike,\n idMap: Map<number, number>,\n objectManagementSystem: ObjectManagementSystem,\n world: World,\n): void {\n const parentValues = readByComponent(snapshot.components, \"ParentId\");\n\n for (const [sourceEntityId, parentValue] of parentValues.entries()) {\n const targetEntityId = idMap.get(sourceEntityId);\n if (targetEntityId === undefined) {\n continue;\n }\n\n const parentRecord = asRecord(parentValue);\n const sourceParentId =\n parentRecord && typeof parentRecord.value === \"number\"\n ? parentRecord.value\n : null;\n\n if (sourceParentId === null) {\n objectManagementSystem.setParent(world, targetEntityId, null, {\n preserveWorldTransform: false,\n });\n continue;\n }\n\n const mappedParentId = idMap.get(sourceParentId);\n objectManagementSystem.setParent(world, targetEntityId, mappedParentId ?? null, {\n preserveWorldTransform: false,\n });\n }\n}\n","import { Object3DRef, ScriptComponent, InstancedMeshComponent } from \"../components\";\nimport { InstanceSlotComponent } from \"../components/InstanceSlotComponent\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { ComponentValueMaps } from \"./types\";\nimport { asRecord } from \"./readers\";\n\nfunction remapEntityRefsInScriptData(\n data: Record<string, unknown>,\n idMap: Map<number, number>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const v = value as Record<string, unknown>;\n if (v.type === \"entity\" && typeof v.value === \"number\") {\n result[key] = { ...v, value: idMap.get(v.value) ?? v.value };\n } else if (\n v.type === \"component\" &&\n v.value !== null &&\n typeof v.value === \"object\" &&\n !Array.isArray(v.value) &&\n typeof (v.value as Record<string, unknown>).entityId === \"number\"\n ) {\n const ref = v.value as Record<string, unknown>;\n result[key] = {\n ...v,\n value: { ...ref, entityId: idMap.get(ref.entityId as number) ?? ref.entityId },\n };\n } else {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function restorePostCreateComponents(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceEntityId: number,\n entityType: string | null,\n values: ComponentValueMaps,\n idMap: Map<number, number>,\n): void {\n const objectRef = world.getComponent(targetEntityId, Object3DRef)?.object ?? null;\n\n const sourceAudio = asRecord(values.audioValues.get(sourceEntityId));\n if (sourceAudio && entityType !== \"audio\") {\n const sourceOptions = asRecord(sourceAudio.options) ?? {};\n\n objectManagementSystem.createComponentNow(\n \"audio\",\n world,\n targetEntityId,\n typeof sourceAudio.path === \"string\" ? sourceAudio.path : \"\",\n sourceOptions,\n {\n object: objectRef,\n listener: objectManagementSystem.getOrCreateAudioListener(),\n isEditor: objectManagementSystem.isEditorMode(),\n },\n );\n }\n\n const sourceImageTarget = asRecord(values.imageTargetValues.get(sourceEntityId));\n if (sourceImageTarget && entityType !== \"imageTarget\") {\n objectManagementSystem.createComponentNow(\n \"imageTarget\",\n world,\n targetEntityId,\n {\n targets: Array.isArray(sourceImageTarget.targets)\n ? sourceImageTarget.targets\n : [],\n compiledTargetUrl:\n typeof sourceImageTarget.compiledTargetUrl === \"string\"\n ? sourceImageTarget.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof sourceImageTarget.compiledTargetDir === \"string\"\n ? sourceImageTarget.compiledTargetDir\n : undefined,\n },\n );\n }\n\n const sourceImageTargetAnchor = asRecord(values.imageTargetAnchorValues.get(sourceEntityId));\n if (sourceImageTargetAnchor) {\n // ImageTargetAnchor.targetId references ImageTarget.targets[].id, not an entity id.\n // Preserve the id directly; idMap remapping is only valid for entity references.\n const mappedTargetId =\n typeof sourceImageTargetAnchor.targetId === \"number\" &&\n Number.isFinite(sourceImageTargetAnchor.targetId)\n ? sourceImageTargetAnchor.targetId\n : null;\n\n objectManagementSystem.createComponentNow(\"imageTargetAnchor\", world, targetEntityId, {\n targetId: mappedTargetId,\n targetUrl:\n typeof sourceImageTargetAnchor.targetUrl === \"string\"\n ? sourceImageTargetAnchor.targetUrl\n : undefined,\n });\n }\n\n const sourceScript = asRecord(values.scriptValues.get(sourceEntityId));\n if (sourceScript) {\n const entries = Array.isArray(sourceScript.entries)\n ? sourceScript.entries\n .map((entry) => asRecord(entry))\n .filter((entry): entry is Record<string, unknown> => Boolean(entry))\n .map((entry) => {\n const runtimeState: \"idle\" | \"loading\" | \"ready\" | \"error\" | undefined =\n entry.runtimeState === \"idle\" ||\n entry.runtimeState === \"loading\" ||\n entry.runtimeState === \"ready\" ||\n entry.runtimeState === \"error\"\n ? entry.runtimeState\n : undefined;\n\n return {\n entityId: targetEntityId,\n className: typeof entry.className === \"string\" ? entry.className : \"\",\n scriptUrl: typeof entry.scriptUrl === \"string\" ? entry.scriptUrl : \"\",\n enabled: typeof entry.enabled === \"boolean\" ? entry.enabled : true,\n data:\n entry.data &&\n typeof entry.data === \"object\" &&\n !Array.isArray(entry.data)\n ? remapEntityRefsInScriptData(entry.data as Record<string, unknown>, idMap)\n : {},\n runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\"\n ? entry.runtimeMessage\n : undefined,\n };\n })\n .filter((entry) => entry.className || entry.scriptUrl)\n : [];\n\n if (!entries.length) {\n return;\n }\n\n world.addComponent(\n targetEntityId,\n new ScriptComponent(entries),\n );\n }\n\n // Remap InstancedMeshComponent.instanceEntityIds from snapshot IDs → live IDs.\n {\n const imComponent = world.getComponent(targetEntityId, InstancedMeshComponent);\n if (imComponent && imComponent.instanceEntityIds.length > 0) {\n imComponent.instanceEntityIds = imComponent.instanceEntityIds.map(\n (oldId) => idMap.get(oldId) ?? oldId,\n );\n }\n }\n\n // Remap InstanceSlotComponent.groupEntityId from snapshot ID → live ID.\n {\n const slotComponent = world.getComponent(targetEntityId, InstanceSlotComponent);\n if (slotComponent && slotComponent.groupEntityId !== -1) {\n slotComponent.groupEntityId =\n idMap.get(slotComponent.groupEntityId) ?? slotComponent.groupEntityId;\n }\n }\n}\n","import {\n AnimationComponent,\n type AnimationComponentOptions,\n} from \"../components\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport { asRecord, readBoolean, readNumber } from \"./readers\";\n\nfunction readAnimationClipName(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n if (typeof record.name === \"string\") {\n return record.name;\n }\n\n return null;\n}\n\nfunction readAnimationStates(value: unknown): NonNullable<\n AnimationComponentOptions[\"states\"]\n> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const states: NonNullable<AnimationComponentOptions[\"states\"]> = [];\n\n for (const entry of value) {\n const state = asRecord(entry);\n if (!state) {\n continue;\n }\n\n const name = typeof state.name === \"string\" ? state.name : null;\n const clip = readAnimationClipName(state.clip);\n if (!name || !clip) {\n continue;\n }\n\n states.push({\n name,\n clip,\n clipId: typeof state.clipId === \"string\" ? state.clipId : undefined,\n loop: typeof state.loop === \"boolean\" ? state.loop : false,\n });\n }\n\n return states;\n}\n\nfunction readAnimationClipSources(\n value: unknown,\n): NonNullable<AnimationComponentOptions[\"externalClipSources\"]> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const seen = new Set<string>();\n const sources: string[] = [];\n for (const entry of value) {\n if (typeof entry !== \"string\") {\n continue;\n }\n\n const trimmed = entry.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n sources.push(trimmed);\n }\n\n return sources;\n}\n\nfunction toAnimationOptions(\n sourceAnimation: Record<string, unknown>,\n): AnimationComponentOptions {\n const paused = readBoolean(sourceAnimation.paused);\n const reverse = readBoolean(sourceAnimation.reverse);\n const timeScale = readNumber(sourceAnimation.timeScale);\n const crossFadeDuration = readNumber(sourceAnimation.crossFadeDuration);\n const states = readAnimationStates(sourceAnimation.states);\n const externalClipSources = readAnimationClipSources(\n sourceAnimation.externalClipSources,\n );\n const activeStateName =\n typeof sourceAnimation.activeStateName === \"string\"\n ? sourceAnimation.activeStateName\n : typeof sourceAnimation.activeState === \"string\"\n ? sourceAnimation.activeState\n : typeof (sourceAnimation.active as { name?: unknown } | undefined)?.name ===\n \"string\"\n ? ((sourceAnimation.active as { name: string }).name ?? null)\n : null;\n\n return {\n paused,\n reverse,\n timeScale,\n crossFadeDuration,\n states,\n externalClipSources,\n activeState: activeStateName,\n };\n}\n\nexport function restoreAnimationComponent(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceAnimation: Record<string, unknown>,\n): void {\n const options = toAnimationOptions(sourceAnimation);\n let animation = world.getComponent(targetEntityId, AnimationComponent);\n\n if (!animation) {\n objectManagementSystem.createComponentNow(\n \"animation\",\n world,\n targetEntityId,\n options,\n );\n animation = world.getComponent(targetEntityId, AnimationComponent);\n }\n\n if (!animation) {\n return;\n }\n\n const availableClips = Array.isArray(sourceAnimation.availableClips)\n ? sourceAnimation.availableClips.filter(\n (clip): clip is string => typeof clip === \"string\" && clip.length > 0,\n )\n : [];\n if (availableClips.length > 0) {\n animation.availableClips = [...availableClips];\n }\n\n if (Array.isArray(options.externalClipSources)) {\n animation.setExternalClipSources(options.externalClipSources);\n }\n\n const states = options.states ?? [];\n const hasClips = Array.isArray(animation.clips) && animation.clips.length > 0;\n if (!hasClips) {\n (\n animation as AnimationComponent & {\n __pendingHydratedOptions?: AnimationComponentOptions;\n }\n ).__pendingHydratedOptions = options;\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.paused === \"boolean\") {\n animation.paused = options.paused;\n }\n\n return;\n }\n\n if (states.length > 0) {\n animation.setStates(states);\n }\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.setActiveState(options.activeState, !options.paused);\n }\n\n if (typeof options.paused === \"boolean\") {\n if (options.paused) {\n animation.pauseState();\n } else if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.playState(options.activeState);\n }\n }\n}\n","import {\n AudioComponent,\n CameraComponent,\n Environment,\n type EnvironmentState,\n ImageComponent,\n ImageTarget,\n InstancedMeshComponent,\n LightComponent,\n MaterialComponent,\n MeshGeometryComponent,\n ModelComponent,\n Name,\n Object3DRef,\n PhysicsComponent,\n Postprocessing,\n 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(sourcePrefabInstance.url, overrides),\n );\n }\n }\n}\n","import type { EcsEntityKind } from \"../types\";\n\nexport type HydrationPayload = {\n name?: string;\n transform?: {\n position?: { x?: number; y?: number; z?: number };\n rotation?: { x?: number; y?: number; z?: number };\n scale?: { x?: number; y?: number; z?: number };\n };\n path?: string;\n options?: Record<string, unknown>;\n useWorldCamera?: boolean;\n};\n\nexport type ComponentValueMaps = {\n object3DRefValues: Map<number, unknown>;\n nameValues: Map<number, unknown>;\n transformValues: Map<number, unknown>;\n modelValues: Map<number, unknown>;\n imageValues: Map<number, unknown>;\n spriteValues: Map<number, unknown>;\n videoValues: Map<number, unknown>;\n cameraValues: Map<number, unknown>;\n environmentValues: Map<number, unknown>;\n postprocessingValues: Map<number, unknown>;\n audioValues: Map<number, unknown>;\n imageTargetValues: Map<number, unknown>;\n lightValues: Map<number, unknown>;\n materialValues: Map<number, unknown>;\n meshGeometryValues: Map<number, unknown>;\n selectableValues: Map<number, unknown>;\n physicsValues: Map<number, unknown>;\n animationValues: Map<number, unknown>;\n imageTargetAnchorValues: Map<number, unknown>;\n scriptValues: Map<number, unknown>;\n instancedMeshValues: Map<number, unknown>;\n instanceSlotValues: Map<number, unknown>;\n 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]);\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 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 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 * 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 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/**\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 * - 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 const data = asRecord(entry.data) ?? {};\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 {\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: canonicalData,\n };\n }),\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 === \"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 * v1 policies: components missing on the instance produce no override\n * (apply re-adds them); components/nodes only on the instance are local\n * additions and produce no override (apply never touches them).\n */\nexport function computeInstanceOverrides(\n baseSnapshot: SubtreeSnapshot,\n instanceSnapshot: SubtreeSnapshot,\n): string[] {\n const baseMaps = buildNodeMapsFromSnapshot(baseSnapshot);\n const instanceMaps = buildNodeMapsFromSnapshot(instanceSnapshot);\n const baseByEntity = indexSnapshotByEntity(baseSnapshot);\n const instanceByEntity = indexSnapshotByEntity(instanceSnapshot);\n\n const overrides: string[] = [];\n\n for (const [nodeId, instanceEntityId] of instanceMaps.nodeToId) {\n const baseEntityId = baseMaps.nodeToId.get(nodeId);\n if (baseEntityId === undefined) {\n continue; // node only exists on the instance — local addition\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 = nodeId === baseMaps.rootNodeId;\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 — v1: apply re-adds, no override\n }\n\n const baseCanonical = canonicalizeComponentValue(\n componentName,\n baseRaw,\n baseMaps.idToNode,\n );\n const instanceCanonical = canonicalizeComponentValue(\n componentName,\n instanceRaw,\n instanceMaps.idToNode,\n );\n\n for (const path of collectDiffPaths(baseCanonical, instanceCanonical)) {\n overrides.push(encodeOverride(nodeId, 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 plus the instance-link component (a prefab FILE carrying\n * a PrefabInstance would be a nested prefab, unsupported in v1). Creation\n * guards should prevent these from ever reaching a file; this is defense\n * in depth for hand-edited files.\n */\nconst INSTANTIATE_EXCLUDED_COMPONENTS = new Set([\n \"Environment\",\n \"Postprocessing\",\n \"SelectionTransformState\",\n \"PrefabInstance\",\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 safeSnapshot: SubtreeSnapshot = {\n entities: snapshot.entities,\n components: snapshot.components.filter(\n (block) => !INSTANTIATE_EXCLUDED_COMPONENTS.has(block.component),\n ),\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 type { SubtreeSnapshot } from \"./snapshotIdUtils\";\n\nexport const PREFAB_FILE_VERSION = 1;\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\nconst resolveUrl = (url: string): string =>\n prefabAssetUrlResolver ? prefabAssetUrlResolver(url) : url;\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 * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader.js\";\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader.js\";\nimport { GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader.js\";\n\nimport { AnimationComponent, ModelComponent } from \"../components\";\nimport type { AnimationComponentOptions } from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport { resolveDracoDecoderPath } from \"../utils/dracoDecoderPath\";\nimport type { World } from \"../World\";\n\ntype AnimationRuntime = {\n rootUuid: string;\n mixer: THREE.AnimationMixer;\n actions: Map<string, THREE.AnimationAction>;\n clipNameToIds: Map<string, string[]>;\n activeClipId: string | null;\n clipSignature: string;\n sourceSignature: string;\n sourceToken: number;\n importedSourceClips: Map<string, THREE.AnimationClip[]>;\n pendingSources: Set<string>;\n};\n\ntype RuntimeClipEntry = {\n id: string;\n name: string;\n clip: THREE.AnimationClip;\n};\n\ntype PendingHydratedAnimationOptions = Pick<\n AnimationComponentOptions,\n | \"paused\"\n | \"reverse\"\n | \"timeScale\"\n | \"crossFadeDuration\"\n | \"activeState\"\n | \"states\"\n | \"externalClipSources\"\n>;\n\nfunction createClipSourceLoader(): GLTFLoader {\n const loader = new GLTFLoader();\n\n try {\n const dracoLoader = new DRACOLoader();\n dracoLoader.setDecoderPath(resolveDracoDecoderPath());\n loader.setDRACOLoader(dracoLoader);\n } catch (error) {\n console.warn(\"DRACOLoader could not be configured for clip source loading.\", error);\n }\n\n return loader;\n}\n\nfunction normalizeDeltaTime(deltaTime: number): number {\n return Number.isFinite(deltaTime) ? Math.max(0, deltaTime) : 0;\n}\n\nfunction sanitizeTimeScale(timeScale: number): number {\n if (!Number.isFinite(timeScale) || Math.abs(timeScale) < 0.0001) {\n return 1;\n }\n\n return Math.abs(timeScale);\n}\n\nfunction sanitizeCrossFadeDuration(duration: number): number {\n if (!Number.isFinite(duration) || duration < 0) {\n return 0;\n }\n\n return duration;\n}\n\nfunction buildClipSignature(entries: RuntimeClipEntry[]): string {\n return entries\n .map((entry) => entry.id)\n .sort((a, b) => a.localeCompare(b))\n .join(\"|\");\n}\n\nfunction readRuntimeClipEntries(animation: AnimationComponent): RuntimeClipEntry[] {\n if (Array.isArray(animation.clipCatalog) && animation.clipCatalog.length > 0) {\n return animation.clipCatalog.map((entry) => ({\n id: entry.id,\n name: entry.name,\n clip: entry.clip,\n }));\n }\n\n if (!Array.isArray(animation.clips)) {\n return [];\n }\n\n return animation.clips\n .map((clip, index) => {\n const name = typeof clip?.name === \"string\" ? clip.name : \"\";\n if (!name) {\n return null;\n }\n\n return {\n id: `legacy:${index}:${name}`,\n name,\n clip,\n };\n })\n .filter((entry): entry is RuntimeClipEntry => entry !== null);\n}\n\nfunction normalizeClipSources(value: unknown): string[] {\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 extractFileExtension(url: string): string {\n const clean = url.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = clean.split(\".\").pop();\n return typeof ext === \"string\" ? ext.toLowerCase() : \"\";\n}\n\nfunction createActions(\n mixer: THREE.AnimationMixer,\n entries: RuntimeClipEntry[],\n): {\n actions: Map<string, THREE.AnimationAction>;\n clipNameToIds: Map<string, string[]>;\n} {\n const actions = new Map<string, THREE.AnimationAction>();\n const clipNameToIds = new Map<string, string[]>();\n\n for (const entry of entries) {\n if (!entry.name) {\n continue;\n }\n\n actions.set(entry.id, mixer.clipAction(entry.clip));\n\n const ids = clipNameToIds.get(entry.name) ?? [];\n ids.push(entry.id);\n clipNameToIds.set(entry.name, ids);\n }\n\n return { actions, clipNameToIds };\n}\n\nfunction stopAllActions(runtime: AnimationRuntime): void {\n runtime.actions.forEach((action) => {\n action.stop();\n });\n runtime.mixer.stopAllAction();\n runtime.activeClipId = null;\n}\n\nfunction transitionToClip(\n runtime: AnimationRuntime,\n nextClipId: string | null,\n crossFadeDuration: number,\n): void {\n if (runtime.activeClipId === nextClipId) {\n return;\n }\n\n const previousAction = runtime.activeClipId\n ? runtime.actions.get(runtime.activeClipId)\n : undefined;\n const nextAction = nextClipId ? runtime.actions.get(nextClipId) : undefined;\n\n if (!nextAction) {\n if (previousAction) {\n previousAction.stop();\n }\n runtime.activeClipId = null;\n return;\n }\n\n if (!previousAction || previousAction === nextAction) {\n nextAction.reset();\n nextAction.play();\n runtime.activeClipId = nextClipId;\n return;\n }\n\n if (crossFadeDuration > 0) {\n nextAction.reset();\n nextAction.play();\n previousAction.crossFadeTo(nextAction, crossFadeDuration, true);\n } else {\n previousAction.stop();\n nextAction.reset();\n nextAction.play();\n }\n\n runtime.activeClipId = nextClipId;\n}\n\nfunction applyActionState(\n action: THREE.AnimationAction,\n component: AnimationComponent,\n paused: boolean,\n shouldLoop: boolean,\n): void {\n const loopMode = shouldLoop ? THREE.LoopRepeat : THREE.LoopOnce;\n const repetitions = shouldLoop ? Infinity : 1;\n action.setLoop(loopMode, repetitions);\n action.clampWhenFinished = !shouldLoop;\n action.paused = paused;\n\n const direction = component.reverse ? -1 : 1;\n action.setEffectiveTimeScale(sanitizeTimeScale(component.timeScale) * direction);\n}\n\nfunction applyPendingHydratedOptions(component: AnimationComponent, runtime?: AnimationRuntime): void {\n const pending = (\n component as AnimationComponent & {\n __pendingHydratedOptions?: PendingHydratedAnimationOptions;\n }\n ).__pendingHydratedOptions;\n\n if (!pending) {\n return;\n }\n\n if (Array.isArray(pending.externalClipSources)) {\n component.setExternalClipSources(pending.externalClipSources);\n }\n\n if (!Array.isArray(component.clips) || component.clips.length === 0) {\n return;\n }\n\n if (runtime && runtime.pendingSources.size > 0) {\n return;\n }\n\n const states = Array.isArray(pending.states) ? pending.states : [];\n if (states.length > 0) {\n component.setStates(states);\n }\n\n if (typeof pending.reverse === \"boolean\") {\n component.reverse = pending.reverse;\n }\n\n if (typeof pending.timeScale === \"number\" && Number.isFinite(pending.timeScale)) {\n component.timeScale = pending.timeScale;\n }\n\n if (\n typeof pending.crossFadeDuration === \"number\" &&\n Number.isFinite(pending.crossFadeDuration)\n ) {\n component.crossFadeDuration = Math.max(0, pending.crossFadeDuration);\n }\n\n if (typeof pending.activeState === \"string\" && pending.activeState.length > 0) {\n component.setActiveState(pending.activeState, !pending.paused);\n }\n\n if (typeof pending.paused === \"boolean\") {\n if (pending.paused) {\n component.pauseState(pending.activeState ?? undefined);\n } else {\n component.playState(pending.activeState ?? undefined);\n }\n }\n\n delete (\n component as AnimationComponent & {\n __pendingHydratedOptions?: PendingHydratedAnimationOptions;\n }\n ).__pendingHydratedOptions;\n}\n\nexport class AnimationSystem implements EcsSystem {\n private readonly runtimeByEntity = new Map<number, AnimationRuntime>();\n private readonly gltfLoader = createClipSourceLoader();\n private readonly fbxLoader = new FBXLoader();\n\n private async loadClipsFromSource(sourceUrl: string): Promise<THREE.AnimationClip[]> {\n const ext = extractFileExtension(sourceUrl);\n\n if (ext === \"fbx\") {\n return new Promise((resolve, reject) => {\n this.fbxLoader.load(\n sourceUrl,\n (object) => {\n const clips = Array.isArray(object.animations) ? object.animations : [];\n resolve(clips);\n },\n undefined,\n reject,\n );\n });\n }\n\n if (ext === \"glb\" || ext === \"gltf\") {\n return new Promise((resolve, reject) => {\n this.gltfLoader.load(\n sourceUrl,\n (gltf) => {\n const clips = Array.isArray(gltf.animations) ? gltf.animations : [];\n resolve(clips);\n },\n undefined,\n reject,\n );\n });\n }\n\n return [];\n }\n\n private refreshExternalClipSources(\n world: World,\n entityId: number,\n animation: AnimationComponent,\n runtime: AnimationRuntime,\n ): void {\n const normalizedSources = normalizeClipSources(animation.externalClipSources);\n const sourceSignature = normalizedSources.join(\"|\");\n\n if (runtime.sourceSignature !== sourceSignature) {\n runtime.sourceSignature = sourceSignature;\n runtime.sourceToken += 1;\n runtime.pendingSources.clear();\n runtime.importedSourceClips.clear();\n animation.setImportedClips([]);\n }\n\n const sourceSet = new Set(normalizedSources);\n for (const loadedSource of runtime.importedSourceClips.keys()) {\n if (!sourceSet.has(loadedSource)) {\n runtime.importedSourceClips.delete(loadedSource);\n }\n }\n\n const mergedLoadedClips = [...runtime.importedSourceClips.values()].flat();\n animation.setImportedClips(\n normalizedSources.flatMap((sourceUrl) => {\n const clipsForSource = runtime.importedSourceClips.get(sourceUrl) ?? [];\n return clipsForSource.map((clip) => ({ clip, sourceUrl }));\n }),\n );\n\n for (const sourceUrl of normalizedSources) {\n if (\n runtime.importedSourceClips.has(sourceUrl) ||\n runtime.pendingSources.has(sourceUrl)\n ) {\n continue;\n }\n\n runtime.pendingSources.add(sourceUrl);\n const sourceToken = runtime.sourceToken;\n\n void this.loadClipsFromSource(sourceUrl)\n .then((clips) => {\n const currentRuntime = this.runtimeByEntity.get(entityId);\n if (!currentRuntime || currentRuntime.sourceToken !== sourceToken) {\n return;\n }\n\n currentRuntime.pendingSources.delete(sourceUrl);\n currentRuntime.importedSourceClips.set(sourceUrl, clips);\n\n const currentAnimation = world.getComponent(entityId, AnimationComponent);\n if (!currentAnimation) {\n return;\n }\n\n currentAnimation.setImportedClips(\n normalizedSources.flatMap((url) => {\n const clipsForSource = currentRuntime.importedSourceClips.get(url) ?? [];\n return clipsForSource.map((clip) => ({ clip, sourceUrl: url }));\n }),\n );\n })\n .catch((error) => {\n const currentRuntime = this.runtimeByEntity.get(entityId);\n if (!currentRuntime || currentRuntime.sourceToken !== sourceToken) {\n return;\n }\n\n currentRuntime.pendingSources.delete(sourceUrl);\n currentRuntime.importedSourceClips.delete(sourceUrl);\n console.warn(`Failed to load animation source: ${sourceUrl}`, error);\n });\n }\n }\n\n private release(entityId: number): void {\n const runtime = this.runtimeByEntity.get(entityId);\n if (!runtime) {\n return;\n }\n\n stopAllActions(runtime);\n this.runtimeByEntity.delete(entityId);\n }\n\n update(world: World, deltaTime: number): void {\n const entityIds = world.query(AnimationComponent, ModelComponent);\n const alive = new Set<number>(entityIds);\n\n for (const trackedEntityId of this.runtimeByEntity.keys()) {\n if (!alive.has(trackedEntityId)) {\n this.release(trackedEntityId);\n }\n }\n\n const step = normalizeDeltaTime(deltaTime);\n\n for (const entityId of entityIds) {\n const animation = world.getComponent(entityId, AnimationComponent);\n const model = world.getComponent(entityId, ModelComponent);\n const root = model?.object ?? null;\n\n if (!animation || !model || !root) {\n this.release(entityId);\n continue;\n }\n\n const existing = this.runtimeByEntity.get(entityId);\n let runtime = existing;\n\n if (!runtime || runtime.rootUuid !== root.uuid) {\n if (runtime) {\n stopAllActions(runtime);\n }\n\n const mixer = new THREE.AnimationMixer(root);\n const entries = readRuntimeClipEntries(animation);\n const indexedActions = createActions(mixer, entries);\n runtime = {\n rootUuid: root.uuid,\n mixer,\n actions: indexedActions.actions,\n clipNameToIds: indexedActions.clipNameToIds,\n activeClipId: null,\n clipSignature: buildClipSignature(entries),\n sourceSignature: \"\",\n sourceToken: 0,\n importedSourceClips: new Map<string, THREE.AnimationClip[]>(),\n pendingSources: new Set<string>(),\n };\n\n this.runtimeByEntity.set(entityId, runtime);\n }\n\n this.refreshExternalClipSources(world, entityId, animation, runtime);\n\n applyPendingHydratedOptions(animation, runtime);\n\n // Skip playback updates for invisible entities. The runtime and clip catalog\n // are still maintained so animation resumes immediately on visibility restore.\n if (!world.isEntityVisible(entityId)) {\n continue;\n }\n\n const entries = readRuntimeClipEntries(animation);\n const clipSignature = buildClipSignature(entries);\n if (runtime.clipSignature !== clipSignature) {\n stopAllActions(runtime);\n const indexedActions = createActions(runtime.mixer, entries);\n runtime.actions = indexedActions.actions;\n runtime.clipNameToIds = indexedActions.clipNameToIds;\n runtime.clipSignature = clipSignature;\n }\n\n if (runtime.actions.size === 0) {\n continue;\n }\n\n const activeState = animation.active;\n const stateClipId =\n typeof activeState?.clipId === \"string\" && activeState.clipId.length > 0\n ? activeState.clipId\n : null;\n const stateClipName = activeState?.clip.name ?? null;\n const fallbackClipId =\n stateClipName && runtime.clipNameToIds.has(stateClipName)\n ? runtime.clipNameToIds.get(stateClipName)?.[0] ?? null\n : null;\n const nextClipId =\n stateClipId && runtime.actions.has(stateClipId)\n ? stateClipId\n : fallbackClipId && runtime.actions.has(fallbackClipId)\n ? fallbackClipId\n : null;\n const hasActiveState = Boolean(activeState);\n const isPaused = hasActiveState\n ? !(activeState?.isPlaying ?? false)\n : animation.paused;\n\n if (hasActiveState) {\n animation.paused = isPaused;\n }\n\n transitionToClip(\n runtime,\n nextClipId,\n sanitizeCrossFadeDuration(animation.crossFadeDuration),\n );\n\n if (!runtime.activeClipId) {\n continue;\n }\n\n const action = runtime.actions.get(runtime.activeClipId);\n if (!action) {\n continue;\n }\n\n applyActionState(action, animation, isPaused, Boolean(activeState?.loop));\n\n if (animation.reverse && action.time <= 0) {\n action.time = action.getClip().duration;\n }\n\n runtime.mixer.update(step);\n\n if (activeState?.isPlaying) {\n activeState.onPlaying();\n }\n }\n }\n\n dispose(): void {\n for (const runtime of this.runtimeByEntity.values()) {\n stopAllActions(runtime);\n }\n\n this.runtimeByEntity.clear();\n }\n}\n","import * as THREE from \"three\";\n\nimport { CameraComponent } from \"../components/Camera\";\nimport { Object3DRef } from \"../components/Object3DRef\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_NEAR = 0.001;\nconst MIN_FAR_DELTA = 0.001;\nconst MIN_FOV = 1;\nconst MAX_FOV = 179;\nconst MIN_ZOOM = 0.001;\n\nfunction clampNear(value: number): number {\n if (!Number.isFinite(value)) {\n return MIN_NEAR;\n }\n\n return Math.max(MIN_NEAR, value);\n}\n\nfunction clampFar(value: number, near: number): number {\n if (!Number.isFinite(value)) {\n return near + 1000;\n }\n\n return Math.max(near + MIN_FAR_DELTA, value);\n}\n\nfunction clampFov(value: number): number {\n if (!Number.isFinite(value)) {\n return 50;\n }\n\n return Math.min(MAX_FOV, Math.max(MIN_FOV, value));\n}\n\nfunction clampZoom(value: number): number {\n if (!Number.isFinite(value)) {\n return 1;\n }\n\n return Math.max(MIN_ZOOM, value);\n}\n\nfunction normalizeOrthoBounds(component: CameraComponent): void {\n let left = Number.isFinite(component.left) ? component.left : -5;\n let right = Number.isFinite(component.right) ? component.right : 5;\n let top = Number.isFinite(component.top) ? component.top : 5;\n let bottom = Number.isFinite(component.bottom) ? component.bottom : -5;\n\n if (right <= left) {\n right = left + 0.01;\n }\n\n if (top <= bottom) {\n top = bottom + 0.01;\n }\n\n component.left = left;\n component.right = right;\n component.top = top;\n component.bottom = bottom;\n}\n\nfunction isPerspectiveCamera(camera: THREE.Camera): camera is THREE.PerspectiveCamera {\n return camera instanceof THREE.PerspectiveCamera;\n}\n\nfunction isOrthographicCamera(camera: THREE.Camera): camera is THREE.OrthographicCamera {\n return camera instanceof THREE.OrthographicCamera;\n}\n\nfunction readWindowAspect(): number | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n if (\n Number.isFinite(width) &&\n Number.isFinite(height) &&\n width > 0 &&\n height > 0\n ) {\n return width / height;\n }\n\n return null;\n}\n\nfunction buildSignature(\n component: CameraComponent,\n camera: THREE.Camera,\n windowAspect: number | null,\n): string {\n return [\n component.type,\n component.isDefault,\n component.projection,\n component.fov,\n component.near,\n component.far,\n component.left,\n component.right,\n component.top,\n component.bottom,\n component.zoom,\n windowAspect ?? \"na\",\n camera.uuid,\n ].join(\"|\");\n}\n\nexport class CameraSyncSystem implements EcsSystem {\n private readonly signatures = new Map<number, string>();\n\n update(world: World): void {\n const entityIds = world.query(CameraComponent, Object3DRef);\n const windowAspect = readWindowAspect();\n\n const alive = new Set(entityIds);\n for (const trackedId of this.signatures.keys()) {\n if (!alive.has(trackedId)) {\n this.signatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const component = world.getComponent(entityId, CameraComponent);\n const objectRef = world.getComponent(entityId, Object3DRef);\n if (!component || !objectRef) {\n continue;\n }\n\n const camera = objectRef.object;\n if (!(camera instanceof THREE.Camera)) {\n continue;\n }\n\n const nextSignature = buildSignature(component, camera, windowAspect);\n if (this.signatures.get(entityId) === nextSignature) {\n continue;\n }\n\n const near = clampNear(component.near);\n const far = clampFar(component.far, near);\n component.near = near;\n component.far = far;\n\n if (isPerspectiveCamera(camera)) {\n camera.fov = clampFov(component.fov);\n component.fov = camera.fov;\n if (windowAspect !== null) {\n camera.aspect = windowAspect;\n }\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n } else if (isOrthographicCamera(camera)) {\n normalizeOrthoBounds(component);\n camera.left = component.left;\n camera.right = component.right;\n camera.top = component.top;\n camera.bottom = component.bottom;\n camera.zoom = clampZoom(component.zoom);\n component.zoom = camera.zoom;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n }\n\n component.camera = camera;\n this.signatures.set(entityId, buildSignature(component, camera, windowAspect));\n }\n }\n}\n","import { Object3DRef } from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nexport class ObjectVisibilitySystem implements EcsSystem {\n update(world: World): void {\n const entityIds = world.query(Object3DRef);\n\n for (const entityId of entityIds) {\n const objectRef = world.getComponent(entityId, Object3DRef);\n const object = objectRef?.object;\n if (!objectRef || !object) {\n continue;\n }\n\n const targetVisibility = Boolean(objectRef.visibility);\n if (object.visible !== targetVisibility) {\n object.visible = targetVisibility;\n }\n }\n }\n}\n","import * as THREE from \"three\";\n\nimport { Environment } from \"../components/Environment\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_FOG_DELTA = 0.001;\nconst MIN_DENSITY = 0;\n\nfunction createGradientTexture(\n effect: \"radial\" | \"linear\" | \"angular\",\n colors: string[],\n): THREE.Texture {\n if (typeof document === \"undefined\") {\n const pixel = new Uint8Array([30, 30, 30, 255]);\n const fallback = new THREE.DataTexture(pixel, 1, 1, THREE.RGBAFormat);\n fallback.needsUpdate = true;\n return fallback;\n }\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = 512;\n canvas.height = 512;\n\n const context = canvas.getContext(\"2d\");\n if (!context) {\n const fallback = new THREE.CanvasTexture(canvas);\n fallback.needsUpdate = true;\n return fallback;\n }\n\n const safeColors = colors.length > 0 ? colors : [\"#0f172a\", \"#334155\"];\n const lastIndex = Math.max(1, safeColors.length - 1);\n\n let gradient: CanvasGradient;\n if (effect === \"radial\") {\n gradient = context.createRadialGradient(256, 256, 16, 256, 256, 320);\n } else if (effect === \"angular\") {\n gradient = context.createLinearGradient(0, 0, 512, 512);\n } else {\n gradient = context.createLinearGradient(0, 0, 0, 512);\n }\n\n for (let index = 0; index < safeColors.length; index += 1) {\n gradient.addColorStop(index / lastIndex, safeColors[index]);\n }\n\n context.fillStyle = gradient;\n context.fillRect(0, 0, 512, 512);\n\n if (effect === \"angular\") {\n context.globalCompositeOperation = \"overlay\";\n const overlay = context.createRadialGradient(256, 256, 32, 256, 256, 340);\n overlay.addColorStop(0, \"rgba(255,255,255,0.25)\");\n overlay.addColorStop(1, \"rgba(0,0,0,0.2)\");\n context.fillStyle = overlay;\n context.fillRect(0, 0, 512, 512);\n context.globalCompositeOperation = \"source-over\";\n }\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.colorSpace = THREE.SRGBColorSpace;\n texture.needsUpdate = true;\n return texture;\n}\n\nexport class EnvironmentSyncSystem implements EcsSystem {\n private readonly scene: THREE.Scene;\n private readonly textureLoader = new THREE.TextureLoader();\n private signature: string | null = null;\n private activeTexture: THREE.Texture | null = null;\n private pendingImageUrl: string | null = null;\n\n constructor(scene: THREE.Scene) {\n this.scene = scene;\n }\n\n private disposeActiveTexture(): void {\n if (this.activeTexture) {\n this.activeTexture.dispose();\n this.activeTexture = null;\n }\n }\n\n private applySkybox(component: Environment): void {\n const skybox = component.values.skybox;\n\n if (skybox.type === \"none\") {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n this.scene.background = null;\n return;\n }\n\n if (skybox.type === \"color\") {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n this.scene.background = new THREE.Color(skybox.color || \"#1e1e1e\");\n return;\n }\n\n if (skybox.type === \"gradient\") {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n const texture = createGradientTexture(\n skybox.gradient.effect,\n skybox.gradient.colors,\n );\n this.activeTexture = texture;\n this.scene.background = texture;\n return;\n }\n\n const imageUrl = skybox.imageUrl?.trim() ?? \"\";\n if (!imageUrl) {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n this.scene.background = null;\n return;\n }\n\n if (this.pendingImageUrl === imageUrl && this.activeTexture) {\n this.scene.background = this.activeTexture;\n return;\n }\n\n this.disposeActiveTexture();\n this.pendingImageUrl = imageUrl;\n this.textureLoader.load(\n imageUrl,\n (texture) => {\n if (this.pendingImageUrl !== imageUrl) {\n texture.dispose();\n return;\n }\n\n texture.colorSpace = THREE.SRGBColorSpace;\n this.activeTexture = texture;\n this.scene.background = texture;\n },\n undefined,\n () => {\n if (this.pendingImageUrl === imageUrl) {\n this.pendingImageUrl = null;\n this.scene.background = null;\n }\n },\n );\n }\n\n private applyFog(component: Environment): void {\n const fog = component.values.fog;\n\n if (fog.type === \"none\") {\n this.scene.fog = null;\n return;\n }\n\n const fogColor = new THREE.Color(fog.color || \"#1e1e1e\");\n if (fog.type === \"linear\") {\n const near = Number.isFinite(fog.linear.near) ? fog.linear.near : 1;\n const farCandidate = Number.isFinite(fog.linear.far) ? fog.linear.far : near + 10;\n const far = Math.max(near + MIN_FOG_DELTA, farCandidate);\n this.scene.fog = new THREE.Fog(fogColor, near, far);\n return;\n }\n\n const density = Number.isFinite(fog.exponential.density)\n ? Math.max(MIN_DENSITY, fog.exponential.density)\n : 0.002;\n this.scene.fog = new THREE.FogExp2(fogColor, density);\n }\n\n update(world: World): void {\n const entityIds = world.query(Environment);\n if (entityIds.length === 0) {\n if (this.signature !== null) {\n this.signature = null;\n this.pendingImageUrl = null;\n this.disposeActiveTexture();\n this.scene.background = null;\n this.scene.fog = null;\n }\n return;\n }\n\n const entityId = entityIds[0];\n const environment = world.getComponent(entityId, Environment);\n if (!environment) {\n return;\n }\n\n const nextSignature = JSON.stringify(environment.values);\n if (this.signature === nextSignature) {\n return;\n }\n\n this.signature = nextSignature;\n this.applySkybox(environment);\n this.applyFog(environment);\n }\n\n dispose(): void {\n this.pendingImageUrl = null;\n this.disposeActiveTexture();\n }\n}\n","import { Postprocessing } from \"../components/Postprocessing\";\nimport type { PostprocessingState } from \"../components/Postprocessing\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\nimport * as THREE from \"three\";\nimport { EffectComposer } from \"three/examples/jsm/postprocessing/EffectComposer.js\";\nimport { RenderPass } from \"three/examples/jsm/postprocessing/RenderPass.js\";\nimport { UnrealBloomPass } from \"three/examples/jsm/postprocessing/UnrealBloomPass.js\";\nimport { DotScreenPass } from \"three/examples/jsm/postprocessing/DotScreenPass.js\";\nimport { GlitchPass } from \"three/examples/jsm/postprocessing/GlitchPass.js\";\nimport { FilmPass } from \"three/examples/jsm/postprocessing/FilmPass.js\";\nimport { BokehPass } from \"three/examples/jsm/postprocessing/BokehPass.js\";\nimport { SSAOPass } from \"three/examples/jsm/postprocessing/SSAOPass.js\";\nimport { ShaderPass } from \"three/examples/jsm/postprocessing/ShaderPass.js\";\nimport { OutputPass } from \"three/examples/jsm/postprocessing/OutputPass.js\";\nimport { HueSaturationShader } from \"three/examples/jsm/shaders/HueSaturationShader.js\";\nimport { SepiaShader } from \"three/examples/jsm/shaders/SepiaShader.js\";\nimport { VignetteShader } from \"three/examples/jsm/shaders/VignetteShader.js\";\n\nexport class PostprocessingSyncSystem implements EcsSystem {\n private readonly renderer: THREE.WebGLRenderer;\n private readonly scene: THREE.Scene;\n private readonly camera: THREE.PerspectiveCamera;\n private signature: string | null = null;\n private composer: EffectComposer | null = null;\n private composerEnabled = false;\n\n constructor(\n renderer: THREE.WebGLRenderer,\n scene: THREE.Scene,\n camera: THREE.PerspectiveCamera,\n ) {\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n }\n\n private setComposerEnabled(enabled: boolean): void {\n this.composerEnabled = enabled;\n this.scene.userData.ecsPostprocessingComposerActive = enabled;\n if (!enabled) {\n delete this.scene.userData.ecsPostprocessingComposer;\n }\n }\n\n private disposeComposer(): void {\n if (!this.composer) {\n this.setComposerEnabled(false);\n return;\n }\n\n const maybeComposer = this.composer as unknown as {\n passes?: Array<{ dispose?: () => void }>;\n dispose?: () => void;\n };\n\n if (Array.isArray(maybeComposer.passes)) {\n for (const pass of maybeComposer.passes) {\n pass.dispose?.();\n }\n }\n\n maybeComposer.dispose?.();\n this.composer = null;\n this.setComposerEnabled(false);\n }\n\n private buildComposer(values: PostprocessingState): void {\n this.disposeComposer();\n\n if (!values.postEnabled) {\n return;\n }\n\n const composer = new EffectComposer(this.renderer);\n composer.addPass(new RenderPass(this.scene, this.camera));\n\n if (values.dof.enabled) {\n composer.addPass(\n new BokehPass(this.scene, this.camera, {\n focus: values.dof.focusDistance,\n aperture: Math.max(0, values.dof.focalLength),\n maxblur: Math.max(0, values.dof.bokehScale),\n }),\n );\n }\n\n if (values.bloom.enabled) {\n const size = this.renderer.getSize(new THREE.Vector2());\n composer.addPass(\n new UnrealBloomPass(\n new THREE.Vector2(size.width, size.height),\n values.bloom.intensity,\n values.bloom.radius,\n values.bloom.threshold,\n ),\n );\n }\n\n if (values.vignette.enabled) {\n const pass = new ShaderPass(VignetteShader);\n const offset = pass.uniforms.offset;\n const darkness = pass.uniforms.darkness;\n if (offset) {\n offset.value = values.vignette.offset;\n }\n if (darkness) {\n darkness.value = values.vignette.darkness;\n }\n composer.addPass(pass);\n }\n\n if (values.hueSaturation.enabled) {\n const pass = new ShaderPass(HueSaturationShader);\n const hue = pass.uniforms.hue;\n const saturation = pass.uniforms.saturation;\n if (hue) {\n hue.value = values.hueSaturation.hue;\n }\n if (saturation) {\n saturation.value = values.hueSaturation.saturation;\n }\n composer.addPass(pass);\n }\n\n if (values.sepia.enabled) {\n const pass = new ShaderPass(SepiaShader);\n const amount = pass.uniforms.amount;\n if (amount) {\n amount.value = values.sepia.intensity;\n }\n composer.addPass(pass);\n }\n\n if (values.noise.enabled) {\n composer.addPass(new FilmPass(values.noise.opacity));\n }\n\n if (values.dotScreen.enabled) {\n composer.addPass(\n new DotScreenPass(\n new THREE.Vector2(0, 0),\n values.dotScreen.angle ?? values.dotScreen.dotScreenAngle,\n values.dotScreen.scale ?? values.dotScreen.dotScreenScale,\n ),\n );\n }\n\n if (values.ssao.enabled) {\n const pass = new SSAOPass(this.scene, this.camera);\n pass.kernelRadius = values.ssao.radius;\n pass.minDistance = 0.001;\n pass.maxDistance = Math.max(0.01, values.ssao.intensity);\n composer.addPass(pass);\n }\n\n if (values.glitch.enabled) {\n const pass = new GlitchPass();\n pass.enabled = true;\n pass.goWild = Boolean(values.glitch.active);\n composer.addPass(pass);\n }\n\n composer.addPass(new OutputPass());\n this.composer = composer;\n this.scene.userData.ecsPostprocessingComposer = composer;\n this.setComposerEnabled(true);\n }\n\n update(world: World): void {\n const entityIds = world.query(Postprocessing);\n if (entityIds.length === 0) {\n if (this.signature !== null) {\n this.signature = null;\n this.disposeComposer();\n delete this.scene.userData.ecsPostprocessing;\n }\n return;\n }\n\n const postprocessing = world.getComponent(entityIds[0], Postprocessing);\n if (!postprocessing) {\n return;\n }\n\n const nextSignature = JSON.stringify(postprocessing.values);\n if (this.signature === nextSignature) {\n return;\n }\n\n this.signature = nextSignature;\n this.buildComposer(postprocessing.values);\n\n this.scene.userData.ecsPostprocessing = postprocessing.values;\n }\n\n dispose(): void {\n this.signature = null;\n this.disposeComposer();\n delete this.scene.userData.ecsPostprocessing;\n delete this.scene.userData.ecsPostprocessingComposerActive;\n delete this.scene.userData.ecsPostprocessingComposer;\n }\n}\n","import * as THREE from \"three\";\n\nimport {\n type ColliderState,\n Environment,\n Object3DRef,\n PhysicsComponent,\n type RigidbodyState,\n TransformComponent,\n} from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\ntype RapierModule = typeof import(\"@dimforge/rapier3d-compat\");\n\ntype BodyType = RigidbodyState[\"type\"];\ntype EntityId = number;\ntype TriMeshData = {\n vertices: Float32Array;\n indices: Uint32Array;\n signature: string;\n};\n\nconst MIN_SIZE = 0.0001;\n\nfunction toBodyType(\n RAPIER: RapierModule,\n bodyType: BodyType,\n): import(\"@dimforge/rapier3d-compat\").RigidBodyType {\n switch (bodyType) {\n case \"fixed\":\n return RAPIER.RigidBodyType.Fixed;\n case \"kinematicPosition\":\n return RAPIER.RigidBodyType.KinematicPositionBased;\n case \"kinematicVelocity\":\n return RAPIER.RigidBodyType.KinematicVelocityBased;\n case \"dynamic\":\n default:\n return RAPIER.RigidBodyType.Dynamic;\n }\n}\n\nfunction createRigidBodyDesc(\n RAPIER: RapierModule,\n bodyType: BodyType,\n): import(\"@dimforge/rapier3d-compat\").RigidBodyDesc {\n if (bodyType === \"fixed\") {\n return RAPIER.RigidBodyDesc.fixed();\n }\n\n if (bodyType === \"kinematicPosition\") {\n return RAPIER.RigidBodyDesc.kinematicPositionBased();\n }\n\n if (bodyType === \"kinematicVelocity\") {\n return RAPIER.RigidBodyDesc.kinematicVelocityBased();\n }\n\n return RAPIER.RigidBodyDesc.dynamic();\n}\n\nfunction computeColliderState(\n colliderValues: ColliderState,\n object: THREE.Object3D | null,\n): ColliderState {\n if (!object) {\n return colliderValues;\n }\n\n const scale = new THREE.Vector3();\n object.getWorldScale(scale);\n\n return {\n ...colliderValues,\n size: {\n x: Math.max(MIN_SIZE, colliderValues.size.x * Math.abs(scale.x || 1)),\n y: Math.max(MIN_SIZE, colliderValues.size.y * Math.abs(scale.y || 1)),\n z: Math.max(MIN_SIZE, colliderValues.size.z * Math.abs(scale.z || 1)),\n },\n radius: Math.max(\n MIN_SIZE,\n colliderValues.radius *\n Math.max(Math.abs(scale.x || 1), Math.abs(scale.z || 1), 1),\n ),\n height: Math.max(MIN_SIZE, colliderValues.height * Math.abs(scale.y || 1)),\n };\n}\n\nfunction createColliderDesc(\n RAPIER: RapierModule,\n values: ColliderState,\n triMeshData: TriMeshData | null,\n): import(\"@dimforge/rapier3d-compat\").ColliderDesc {\n let desc: import(\"@dimforge/rapier3d-compat\").ColliderDesc;\n\n if (values.shape === \"trimesh\" && triMeshData) {\n desc = RAPIER.ColliderDesc.trimesh(\n triMeshData.vertices,\n triMeshData.indices,\n );\n } else if (values.shape === \"ball\") {\n desc = RAPIER.ColliderDesc.ball(Math.max(MIN_SIZE, values.radius));\n } else if (values.shape === \"capsule\") {\n desc = RAPIER.ColliderDesc.capsule(\n Math.max(MIN_SIZE, values.height / 2),\n Math.max(MIN_SIZE, values.radius),\n );\n } else if (values.shape === \"cylinder\") {\n desc = RAPIER.ColliderDesc.cylinder(\n Math.max(MIN_SIZE, values.height / 2),\n Math.max(MIN_SIZE, values.radius),\n );\n } else {\n desc = RAPIER.ColliderDesc.cuboid(\n Math.max(MIN_SIZE, values.size.x / 2),\n Math.max(MIN_SIZE, values.size.y / 2),\n Math.max(MIN_SIZE, values.size.z / 2),\n );\n }\n\n desc.setRestitution(Math.max(0, values.restitution));\n desc.setFriction(Math.max(0, values.friction));\n desc.setSensor(values.isSensor);\n\n desc.setTranslation(\n values.offsetPosition.x,\n values.offsetPosition.y,\n values.offsetPosition.z,\n );\n\n const offsetQuaternion = new THREE.Quaternion().setFromEuler(\n new THREE.Euler(\n values.offsetRotation.x,\n values.offsetRotation.y,\n values.offsetRotation.z,\n ),\n );\n desc.setRotation(offsetQuaternion);\n\n return desc;\n}\n\nfunction findFirstMeshWithGeometry(object: THREE.Object3D): THREE.Mesh | null {\n if (object instanceof THREE.Mesh && object.geometry) {\n return object;\n }\n\n let found: THREE.Mesh | null = null;\n object.traverse((child) => {\n if (found) {\n return;\n }\n\n if (child instanceof THREE.Mesh && child.geometry) {\n found = child;\n }\n });\n\n return found;\n}\n\nfunction createTriMeshData(object: THREE.Object3D | null): TriMeshData | null {\n if (!object) {\n return null;\n }\n\n const mesh = findFirstMeshWithGeometry(object);\n if (!mesh) {\n return null;\n }\n\n const geometry = mesh.geometry;\n const positionAttribute = geometry.getAttribute(\"position\");\n if (!positionAttribute || positionAttribute.itemSize < 3) {\n return null;\n }\n\n const positionCount = positionAttribute.count;\n if (positionCount < 3) {\n return null;\n }\n\n object.updateWorldMatrix(true, true);\n mesh.updateWorldMatrix(true, true);\n\n const worldToObject = new THREE.Matrix4().copy(object.matrixWorld).invert();\n const relativeMatrix = new THREE.Matrix4().multiplyMatrices(\n worldToObject,\n mesh.matrixWorld,\n );\n\n const vertices = new Float32Array(positionCount * 3);\n const point = new THREE.Vector3();\n for (let index = 0; index < positionCount; index += 1) {\n point\n .set(\n positionAttribute.getX(index),\n positionAttribute.getY(index),\n positionAttribute.getZ(index),\n )\n .applyMatrix4(relativeMatrix);\n\n const outputIndex = index * 3;\n vertices[outputIndex] = point.x;\n vertices[outputIndex + 1] = point.y;\n vertices[outputIndex + 2] = point.z;\n }\n\n const indexAttribute = geometry.getIndex();\n let indices: Uint32Array;\n if (indexAttribute) {\n indices = new Uint32Array(indexAttribute.count);\n for (let index = 0; index < indexAttribute.count; index += 1) {\n indices[index] = indexAttribute.getX(index);\n }\n } else {\n const triangleIndexCount = Math.floor(positionCount / 3) * 3;\n if (triangleIndexCount < 3) {\n return null;\n }\n\n indices = new Uint32Array(triangleIndexCount);\n for (let index = 0; index < triangleIndexCount; index += 1) {\n indices[index] = index;\n }\n }\n\n const matrixSignature = relativeMatrix.elements\n .map((value) => value.toFixed(5))\n .join(\",\");\n return {\n vertices,\n indices,\n signature: `${mesh.uuid}:${geometry.uuid}:${positionCount}:${indices.length}:${matrixSignature}`,\n };\n}\n\nfunction syncBodyFromTransform(\n body: import(\"@dimforge/rapier3d-compat\").RigidBody,\n transform: TransformComponent,\n): void {\n const quaternion = new THREE.Quaternion().setFromEuler(\n new THREE.Euler(transform.rotation.x, transform.rotation.y, transform.rotation.z),\n );\n\n body.setTranslation(\n {\n x: transform.position.x,\n y: transform.position.y,\n z: transform.position.z,\n },\n true,\n );\n body.setRotation(\n {\n x: quaternion.x,\n y: quaternion.y,\n z: quaternion.z,\n w: quaternion.w,\n },\n true,\n );\n}\n\nfunction syncTransformFromBody(\n transform: TransformComponent,\n body: import(\"@dimforge/rapier3d-compat\").RigidBody,\n): void {\n const position = body.translation();\n const rotation = body.rotation();\n\n transform.position.x = position.x;\n transform.position.y = position.y;\n transform.position.z = position.z;\n\n const euler = new THREE.Euler().setFromQuaternion(\n new THREE.Quaternion(rotation.x, rotation.y, rotation.z, rotation.w),\n );\n\n transform.rotation.x = euler.x;\n transform.rotation.y = euler.y;\n transform.rotation.z = euler.z;\n}\n\nexport class PhysicsSyncSystem implements EcsSystem {\n private readonly rigidBodyHandles = new Map<EntityId, number>();\n private readonly colliderHandles = new Map<EntityId, number>();\n private readonly rigidBodySignatures = new Map<EntityId, string>();\n private readonly colliderSignatures = new Map<EntityId, string>();\n private readonly isEditorMode: boolean;\n private rapier: RapierModule | null = null;\n private isBootstrappingWorld = false;\n private accumulator = 0;\n\n constructor(options?: { isEditor?: boolean }) {\n this.isEditorMode = options?.isEditor ?? false;\n }\n\n private async ensurePhysicsWorld(world: World): Promise<void> {\n if (this.rapier || this.isBootstrappingWorld) {\n return;\n }\n\n this.isBootstrappingWorld = true;\n try {\n const environmentEntityId = world.query(Environment)[0];\n const environment =\n typeof environmentEntityId === \"number\"\n ? world.getComponent(environmentEntityId, Environment)\n : undefined;\n\n const gravity = environment?.values.gravity;\n const rapierWorld = await world.createPhysicsWorld({\n gravity: {\n x: gravity?.x,\n y: gravity?.y,\n z: gravity?.z,\n },\n });\n if (!rapierWorld) {\n return;\n }\n\n const moduleValue = await world.getRapierModule();\n this.rapier = moduleValue;\n } finally {\n this.isBootstrappingWorld = false;\n }\n }\n\n private removeEntityPhysics(\n physicsWorld: import(\"@dimforge/rapier3d-compat\").World,\n entityId: EntityId,\n ): void {\n const rigidBodyHandle = this.rigidBodyHandles.get(entityId);\n if (typeof rigidBodyHandle === \"number\") {\n const rigidBody = physicsWorld.getRigidBody(rigidBodyHandle);\n if (rigidBody) {\n physicsWorld.removeRigidBody(rigidBody);\n }\n }\n\n this.rigidBodyHandles.delete(entityId);\n this.colliderHandles.delete(entityId);\n this.rigidBodySignatures.delete(entityId);\n this.colliderSignatures.delete(entityId);\n }\n\n update(world: World, deltaTime: number): void {\n if (!this.rapier || !world.getPhysicsWorld()) {\n void this.ensurePhysicsWorld(world);\n return;\n }\n\n const physicsWorld = world.getPhysicsWorld();\n if (!physicsWorld) {\n return;\n }\n\n const entities = world.query(TransformComponent, PhysicsComponent);\n const activeEntities = new Set<EntityId>(entities);\n\n for (const entityId of this.rigidBodyHandles.keys()) {\n if (!activeEntities.has(entityId)) {\n this.removeEntityPhysics(physicsWorld, entityId);\n }\n }\n\n for (const entityId of entities) {\n const transform = world.getComponent(entityId, TransformComponent);\n const physics = world.getComponent(entityId, PhysicsComponent);\n const object = world.getComponent(entityId, Object3DRef)?.object ?? null;\n if (!transform || !physics) {\n continue;\n }\n\n if (!physics.values.rigidbody.enabled) {\n this.removeEntityPhysics(physicsWorld, entityId);\n physics.rigidBody = null;\n physics.collider = null;\n continue;\n }\n\n const rigidBodySignature = JSON.stringify(physics.values.rigidbody);\n const previousRigidBodySignature = this.rigidBodySignatures.get(entityId);\n const hasRigidBody = this.rigidBodyHandles.has(entityId);\n const shouldRecreateBody =\n !hasRigidBody || previousRigidBodySignature !== rigidBodySignature;\n\n if (shouldRecreateBody) {\n this.removeEntityPhysics(physicsWorld, entityId);\n\n const lockTranslationX =\n physics.values.rigidbody.lockTranslations || physics.values.rigidbody.lockTranslationX;\n const lockTranslationY =\n physics.values.rigidbody.lockTranslations || physics.values.rigidbody.lockTranslationY;\n const lockTranslationZ =\n physics.values.rigidbody.lockTranslations || physics.values.rigidbody.lockTranslationZ;\n const lockRotationX =\n physics.values.rigidbody.lockRotations || physics.values.rigidbody.lockRotationX;\n const lockRotationY =\n physics.values.rigidbody.lockRotations || physics.values.rigidbody.lockRotationY;\n const lockRotationZ =\n physics.values.rigidbody.lockRotations || physics.values.rigidbody.lockRotationZ;\n\n const bodyType = this.isEditorMode ? \"fixed\" : physics.values.rigidbody.type;\n const bodyDesc = createRigidBodyDesc(this.rapier, bodyType)\n .setLinearDamping(physics.values.rigidbody.linearDamping)\n .setAngularDamping(physics.values.rigidbody.angularDamping)\n .setGravityScale(physics.values.rigidbody.gravityScale)\n .setCanSleep(physics.values.rigidbody.canSleep)\n .setCcdEnabled(physics.values.rigidbody.ccdEnabled)\n .enabledTranslations(\n !lockTranslationX,\n !lockTranslationY,\n !lockTranslationZ,\n )\n .enabledRotations(\n !lockRotationX,\n !lockRotationY,\n !lockRotationZ,\n );\n\n bodyDesc.setTranslation(\n transform.position.x,\n transform.position.y,\n transform.position.z,\n );\n\n const quaternion = new THREE.Quaternion().setFromEuler(\n new THREE.Euler(\n transform.rotation.x,\n transform.rotation.y,\n transform.rotation.z,\n ),\n );\n bodyDesc.setRotation(quaternion);\n\n const body = physicsWorld.createRigidBody(bodyDesc);\n if (!this.isEditorMode && physics.values.rigidbody.type === \"dynamic\") {\n body.setAdditionalMass(physics.values.rigidbody.mass, true);\n }\n\n this.rigidBodyHandles.set(entityId, body.handle);\n this.rigidBodySignatures.set(entityId, rigidBodySignature);\n physics.rigidBody = body;\n }\n\n const rigidBodyHandle = this.rigidBodyHandles.get(entityId);\n if (typeof rigidBodyHandle !== \"number\") {\n continue;\n }\n\n const body = physicsWorld.getRigidBody(rigidBodyHandle);\n if (!body) {\n this.removeEntityPhysics(physicsWorld, entityId);\n physics.rigidBody = null;\n physics.collider = null;\n continue;\n }\n\n physics.rigidBody = body;\n\n if (this.isEditorMode || physics.values.rigidbody.type !== \"dynamic\") {\n syncBodyFromTransform(body, transform);\n }\n\n const effectiveCollider = computeColliderState(physics.values.collider, object);\n const triMeshData =\n effectiveCollider.shape === \"trimesh\" ? createTriMeshData(object) : null;\n\n if (!effectiveCollider || !effectiveCollider.enabled) {\n const colliderHandle = this.colliderHandles.get(entityId);\n if (typeof colliderHandle === \"number\") {\n const existingCollider = physicsWorld.getCollider(colliderHandle);\n if (existingCollider) {\n physicsWorld.removeCollider(existingCollider, true);\n }\n }\n this.colliderHandles.delete(entityId);\n this.colliderSignatures.delete(entityId);\n physics.collider = null;\n continue;\n }\n\n const colliderSignature = `${JSON.stringify(effectiveCollider)}:${triMeshData?.signature ?? \"\"}`;\n const previousColliderSignature = this.colliderSignatures.get(entityId);\n if (\n !this.colliderHandles.has(entityId) ||\n previousColliderSignature !== colliderSignature\n ) {\n const previousColliderHandle = this.colliderHandles.get(entityId);\n if (typeof previousColliderHandle === \"number\") {\n const previousCollider = physicsWorld.getCollider(previousColliderHandle);\n if (previousCollider) {\n physicsWorld.removeCollider(previousCollider, true);\n }\n }\n\n const colliderDesc = createColliderDesc(\n this.rapier,\n effectiveCollider,\n triMeshData,\n );\n const createdCollider = physicsWorld.createCollider(colliderDesc, body);\n this.colliderHandles.set(entityId, createdCollider.handle);\n this.colliderSignatures.set(entityId, colliderSignature);\n physics.collider = createdCollider;\n } else {\n const colliderHandle = this.colliderHandles.get(entityId);\n physics.collider =\n typeof colliderHandle === \"number\"\n ? (physicsWorld.getCollider(colliderHandle) ?? null)\n : null;\n }\n }\n\n if (!this.isEditorMode) {\n const environmentEntityId = world.query(Environment)[0];\n const environment =\n typeof environmentEntityId === \"number\"\n ? world.getComponent(environmentEntityId, Environment)\n : undefined;\n const fixedTimeStep =\n typeof environment?.values.fixedTimeStep === \"number\" &&\n environment.values.fixedTimeStep > 0\n ? environment.values.fixedTimeStep\n : 0.02;\n\n const clampedDelta =\n Number.isFinite(deltaTime) && deltaTime > 0\n ? Math.min(deltaTime, 0.1)\n : fixedTimeStep;\n\n this.accumulator += clampedDelta;\n\n while (this.accumulator >= fixedTimeStep) {\n physicsWorld.integrationParameters.dt = fixedTimeStep;\n physicsWorld.step();\n this.accumulator -= fixedTimeStep;\n }\n }\n\n for (const entityId of entities) {\n const physics = world.getComponent(entityId, PhysicsComponent);\n const transform = world.getComponent(entityId, TransformComponent);\n if (\n !physics ||\n !transform ||\n this.isEditorMode ||\n physics.values.rigidbody.type !== \"dynamic\"\n ) {\n continue;\n }\n\n const rigidBodyHandle = this.rigidBodyHandles.get(entityId);\n if (typeof rigidBodyHandle !== \"number\") {\n continue;\n }\n\n const body = physicsWorld.getRigidBody(rigidBodyHandle);\n if (!body) {\n continue;\n }\n\n syncTransformFromBody(transform, body);\n }\n }\n\n dispose(world: World): void {\n const physicsWorld = world.getPhysicsWorld();\n if (physicsWorld) {\n for (const entityId of this.rigidBodyHandles.keys()) {\n this.removeEntityPhysics(physicsWorld, entityId);\n }\n }\n\n this.rigidBodyHandles.clear();\n this.colliderHandles.clear();\n this.rigidBodySignatures.clear();\n this.colliderSignatures.clear();\n this.accumulator = 0;\n }\n}\n","export const KeyboardKeys = {\n A: \"a\",\n B: \"b\",\n C: \"c\",\n D: \"d\",\n E: \"e\",\n F: \"f\",\n G: \"g\",\n H: \"h\",\n I: \"i\",\n J: \"j\",\n K: \"k\",\n L: \"l\",\n M: \"m\",\n N: \"n\",\n O: \"o\",\n P: \"p\",\n Q: \"q\",\n R: \"r\",\n S: \"s\",\n T: \"t\",\n U: \"u\",\n V: \"v\",\n W: \"w\",\n X: \"x\",\n Y: \"y\",\n Z: \"z\",\n Digit0: \"0\",\n Digit1: \"1\",\n Digit2: \"2\",\n Digit3: \"3\",\n Digit4: \"4\",\n Digit5: \"5\",\n Digit6: \"6\",\n Digit7: \"7\",\n Digit8: \"8\",\n Digit9: \"9\",\n Space: \" \",\n Enter: \"enter\",\n Escape: \"escape\",\n Tab: \"tab\",\n Backspace: \"backspace\",\n Delete: \"delete\",\n Insert: \"insert\",\n Home: \"home\",\n End: \"end\",\n PageUp: \"pageup\",\n PageDown: \"pagedown\",\n ArrowUp: \"arrowup\",\n ArrowDown: \"arrowdown\",\n ArrowLeft: \"arrowleft\",\n ArrowRight: \"arrowright\",\n Shift: \"shift\",\n ShiftLeft: \"shiftleft\",\n ShiftRight: \"shiftright\",\n Control: \"control\",\n ControlLeft: \"controlleft\",\n ControlRight: \"controlright\",\n Alt: \"alt\",\n Meta: \"meta\",\n CapsLock: \"capslock\",\n NumLock: \"numlock\",\n ScrollLock: \"scrolllock\",\n Pause: \"pause\",\n PrintScreen: \"printscreen\",\n ContextMenu: \"contextmenu\",\n Minus: \"-\",\n Equal: \"=\",\n BracketLeft: \"[\",\n BracketRight: \"]\",\n Backslash: \"\\\\\",\n Semicolon: \";\",\n Quote: \"'\",\n Backquote: \"`\",\n Comma: \",\",\n Period: \".\",\n Slash: \"/\",\n F1: \"f1\",\n F2: \"f2\",\n F3: \"f3\",\n F4: \"f4\",\n F5: \"f5\",\n F6: \"f6\",\n F7: \"f7\",\n F8: \"f8\",\n F9: \"f9\",\n F10: \"f10\",\n F11: \"f11\",\n F12: \"f12\",\n} as const;\n\nexport type KeyboardKey = (typeof KeyboardKeys)[keyof typeof KeyboardKeys];","import type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\nimport type { KeyboardKey } from \"./keyboardKeys\";\n\nfunction normalizeKey(key: KeyboardKey | string): string {\n return key.toLowerCase();\n}\n\nexport type MouseButton = \"left\" | \"middle\" | \"right\";\n\nfunction normalizeMouseButton(button: MouseButton | number | string): number {\n if (typeof button === \"number\") {\n return button;\n }\n\n const normalized = button.toLowerCase();\n if (normalized === \"left\") {\n return 0;\n }\n\n if (normalized === \"middle\" || normalized === \"scroll\") {\n return 1;\n }\n\n if (normalized === \"right\") {\n return 2;\n }\n\n return Number.NaN;\n}\n\nexport class InputSystem implements EcsSystem {\n private readonly held = new Set<string>();\n private readonly down = new Set<string>();\n private readonly up = new Set<string>();\n private readonly pendingDown = new Set<string>();\n private readonly pendingUp = new Set<string>();\n\n private readonly heldMouse = new Set<number>();\n private readonly downMouse = new Set<number>();\n private readonly upMouse = new Set<number>();\n private readonly pendingMouseDown = new Set<number>();\n private readonly pendingMouseUp = new Set<number>();\n\n private scrollDeltaX = 0;\n private scrollDeltaY = 0;\n private pendingScrollDeltaX = 0;\n private pendingScrollDeltaY = 0;\n private mouseDeltaX = 0;\n private mouseDeltaY = 0;\n private pendingMouseDeltaX = 0;\n private pendingMouseDeltaY = 0;\n private mousePosition = { x: 0, y: 0 };\n private pointerLockElement: HTMLElement | null = null;\n private pendingPointerLockRequest = false;\n\n private resolvePointerBounds(): { minX: number; minY: number; maxX: number; maxY: number } {\n const targetElement = this.pointerLockElement;\n if (targetElement) {\n const rect = targetElement.getBoundingClientRect();\n return {\n minX: rect.left,\n minY: rect.top,\n maxX: rect.right,\n maxY: rect.bottom,\n };\n }\n\n return {\n minX: 0,\n minY: 0,\n maxX: typeof window !== \"undefined\" ? window.innerWidth : 0,\n maxY: typeof window !== \"undefined\" ? window.innerHeight : 0,\n };\n }\n\n private onKeyDown = (event: KeyboardEvent): void => {\n const key = normalizeKey(event.key);\n const code = normalizeKey(event.code);\n\n if (!this.held.has(key)) {\n this.pendingDown.add(key);\n }\n\n this.held.add(key);\n\n // Also track event.code so left/right variants (e.g. ShiftLeft, ControlRight)\n // can be distinguished independently of event.key.\n if (code !== key) {\n if (!this.held.has(code)) {\n this.pendingDown.add(code);\n }\n this.held.add(code);\n }\n };\n\n private onKeyUp = (event: KeyboardEvent): void => {\n const key = normalizeKey(event.key);\n const code = normalizeKey(event.code);\n\n this.held.delete(key);\n this.pendingUp.add(key);\n\n if (code !== key) {\n this.held.delete(code);\n this.pendingUp.add(code);\n }\n };\n\n private onWindowBlur = (): void => {\n this.clearAll();\n };\n\n private onMouseDown = (event: MouseEvent): void => {\n const button = event.button;\n\n if (!this.heldMouse.has(button)) {\n this.pendingMouseDown.add(button);\n }\n\n this.heldMouse.add(button);\n\n // If a behaviour called lockMousePointer() outside a gesture context (e.g. from\n // update()), honour the deferred request now — we are synchronously inside a\n // trusted mousedown event, so Safari will allow the pointer lock.\n if (this.pendingPointerLockRequest) {\n this.pendingPointerLockRequest = false;\n const targetElement = this.pointerLockElement ?? document.body;\n if (targetElement && typeof targetElement.requestPointerLock === \"function\") {\n const result = targetElement.requestPointerLock();\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n }\n }\n };\n\n private onMouseUp = (event: MouseEvent): void => {\n const button = event.button;\n\n this.heldMouse.delete(button);\n this.pendingMouseUp.add(button);\n };\n\n private onMouseWheel = (event: WheelEvent): void => {\n this.pendingScrollDeltaX += event.deltaX;\n this.pendingScrollDeltaY += event.deltaY;\n };\n\n private onMouseMove = (event: MouseEvent): void => {\n if (this.isMousePointerLocked()) {\n this.pendingMouseDeltaX += event.movementX;\n this.pendingMouseDeltaY += event.movementY;\n this.mousePosition = {\n x: this.mousePosition.x + event.movementX,\n y: this.mousePosition.y + event.movementY,\n };\n return;\n }\n\n this.pendingMouseDeltaX += event.movementX;\n this.pendingMouseDeltaY += event.movementY;\n\n this.mousePosition = {\n x: event.clientX,\n y: event.clientY,\n };\n };\n\n private onPointerLockChange = (): void => {\n if (!this.isMousePointerLocked()) {\n return;\n }\n\n const bounds = this.resolvePointerBounds();\n this.mousePosition = {\n x: (bounds.minX + bounds.maxX) / 2,\n y: (bounds.minY + bounds.maxY) / 2,\n };\n };\n\n private onPointerLockError = (): void => {\n // No-op by default; callers can inspect lock state via isMousePointerLocked().\n };\n\n constructor() {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.addEventListener(\"keydown\", this.onKeyDown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n window.addEventListener(\"mousedown\", this.onMouseDown);\n window.addEventListener(\"mouseup\", this.onMouseUp);\n document.addEventListener(\"mousemove\", this.onMouseMove);\n window.addEventListener(\"wheel\", this.onMouseWheel, { passive: true });\n window.addEventListener(\"blur\", this.onWindowBlur);\n document.addEventListener(\"pointerlockchange\", this.onPointerLockChange);\n document.addEventListener(\"pointerlockerror\", this.onPointerLockError);\n }\n\n setPointerLockElement(element: HTMLElement | null): void {\n this.pointerLockElement = element;\n }\n\n lockMousePointer(): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const targetElement = this.pointerLockElement ?? document.body;\n if (!targetElement || typeof targetElement.requestPointerLock !== \"function\") {\n return false;\n }\n\n try {\n const result = targetElement.requestPointerLock();\n // Modern browsers (including Safari) return a Promise. If it rejects\n // (e.g. called outside a user gesture on Safari), set a flag so the\n // lock is automatically requested on the next mousedown event, which\n // is always a trusted user gesture.\n if (result instanceof Promise) {\n result.catch(() => {\n this.pendingPointerLockRequest = true;\n });\n }\n return true;\n } catch {\n return false;\n }\n }\n\n unlockMousePointer(): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n // Cancel any deferred lock request so we don't immediately re-lock on next click.\n this.pendingPointerLockRequest = false;\n\n if (!document.pointerLockElement || typeof document.exitPointerLock !== \"function\") {\n return false;\n }\n\n document.exitPointerLock();\n return true;\n }\n\n isMousePointerLocked(): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const activePointerLockElement = document.pointerLockElement;\n if (!activePointerLockElement) {\n return false;\n }\n\n if (!this.pointerLockElement) {\n return true;\n }\n\n return activePointerLockElement === this.pointerLockElement;\n }\n\n getKey(key: KeyboardKey | string): boolean {\n return this.held.has(normalizeKey(key));\n }\n\n getKeyDown(key: KeyboardKey | string): boolean {\n return this.down.has(normalizeKey(key));\n }\n\n getKeyUp(key: KeyboardKey | string): boolean {\n return this.up.has(normalizeKey(key));\n }\n\n consumePressed(key: KeyboardKey | string): boolean {\n const normalized = normalizeKey(key);\n if (!this.down.has(normalized)) {\n return false;\n }\n\n this.down.delete(normalized);\n return true;\n }\n\n getMouse(button: MouseButton | number | string): boolean {\n const normalizedButton = normalizeMouseButton(button);\n if (!Number.isInteger(normalizedButton)) {\n return false;\n }\n\n return this.heldMouse.has(normalizedButton);\n }\n\n getMouseDown(button: MouseButton | number | string): boolean {\n const normalizedButton = normalizeMouseButton(button);\n if (!Number.isInteger(normalizedButton)) {\n return false;\n }\n\n return this.downMouse.has(normalizedButton);\n }\n\n getMouseUp(button: MouseButton | number | string): boolean {\n const normalizedButton = normalizeMouseButton(button);\n if (!Number.isInteger(normalizedButton)) {\n return false;\n }\n\n return this.upMouse.has(normalizedButton);\n }\n\n getScrollClick(): boolean {\n return this.getMouse(\"middle\");\n }\n\n getScrollClickDown(): boolean {\n return this.getMouseDown(\"middle\");\n }\n\n getScrollClickUp(): boolean {\n return this.getMouseUp(\"middle\");\n }\n\n getScrollDelta(): { x: number; y: number } {\n return {\n x: this.scrollDeltaX,\n y: this.scrollDeltaY,\n };\n }\n\n consumeScrollDelta(): { x: number; y: number } {\n const delta = this.getScrollDelta();\n this.scrollDeltaX = 0;\n this.scrollDeltaY = 0;\n return delta;\n }\n\n getMousePosition(): { x: number; y: number } {\n return {\n x: this.mousePosition.x,\n y: this.mousePosition.y,\n };\n }\n\n getMouseDelta(): { x: number; y: number } {\n return {\n x: this.mouseDeltaX,\n y: this.mouseDeltaY,\n };\n }\n\n consumeMouseDelta(): { x: number; y: number } {\n const delta = this.getMouseDelta();\n this.mouseDeltaX = 0;\n this.mouseDeltaY = 0;\n return delta;\n }\n\n update(_world: World, _deltaTime: number): void {\n this.down.clear();\n this.up.clear();\n this.downMouse.clear();\n this.upMouse.clear();\n this.scrollDeltaX = this.pendingScrollDeltaX;\n this.scrollDeltaY = this.pendingScrollDeltaY;\n this.mouseDeltaX = this.pendingMouseDeltaX;\n this.mouseDeltaY = this.pendingMouseDeltaY;\n\n for (const key of this.pendingDown) {\n this.down.add(key);\n }\n\n for (const key of this.pendingUp) {\n this.up.add(key);\n }\n\n for (const button of this.pendingMouseDown) {\n this.downMouse.add(button);\n }\n\n for (const button of this.pendingMouseUp) {\n this.upMouse.add(button);\n }\n\n this.pendingDown.clear();\n this.pendingUp.clear();\n this.pendingMouseDown.clear();\n this.pendingMouseUp.clear();\n this.pendingScrollDeltaX = 0;\n this.pendingScrollDeltaY = 0;\n this.pendingMouseDeltaX = 0;\n this.pendingMouseDeltaY = 0;\n }\n\n dispose(): void {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"keydown\", this.onKeyDown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n window.removeEventListener(\"mousedown\", this.onMouseDown);\n window.removeEventListener(\"mouseup\", this.onMouseUp);\n document.removeEventListener(\"mousemove\", this.onMouseMove);\n window.removeEventListener(\"wheel\", this.onMouseWheel);\n window.removeEventListener(\"blur\", this.onWindowBlur);\n document.removeEventListener(\"pointerlockchange\", this.onPointerLockChange);\n document.removeEventListener(\"pointerlockerror\", this.onPointerLockError);\n }\n\n this.clearAll();\n }\n\n private clearAll(): void {\n this.held.clear();\n this.down.clear();\n this.up.clear();\n this.pendingDown.clear();\n this.pendingUp.clear();\n this.heldMouse.clear();\n this.downMouse.clear();\n this.upMouse.clear();\n this.pendingMouseDown.clear();\n this.pendingMouseUp.clear();\n this.scrollDeltaX = 0;\n this.scrollDeltaY = 0;\n this.pendingScrollDeltaX = 0;\n this.pendingScrollDeltaY = 0;\n this.mouseDeltaX = 0;\n this.mouseDeltaY = 0;\n this.pendingMouseDeltaX = 0;\n this.pendingMouseDeltaY = 0;\n this.mousePosition = { x: 0, y: 0 };\n }\n}\n\n\n","import * as THREE from \"three\";\n\nimport { LightComponent } from \"../components/Light\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_LIGHT_DISTANCE = 0;\nconst MIN_LIGHT_INTENSITY = 0;\nconst MIN_AREA_SIZE = 0.01;\n\nfunction applyLightValues(lightComponent: LightComponent): void {\n const { light, values } = lightComponent;\n\n if (typeof values.color === \"string\") {\n light.color.set(values.color);\n }\n\n if (Number.isFinite(values.intensity)) {\n light.intensity = Math.max(MIN_LIGHT_INTENSITY, values.intensity);\n }\n\n light.frustumCulled = Boolean(values.frustumCulling);\n\n if (\"castShadow\" in light) {\n (light as THREE.Light & { castShadow: boolean }).castShadow = Boolean(\n values.castShadow,\n );\n }\n\n if (light instanceof THREE.PointLight) {\n if (typeof values.distance === \"number\" && Number.isFinite(values.distance)) {\n light.distance = Math.max(MIN_LIGHT_DISTANCE, values.distance);\n }\n\n if (typeof values.decay === \"number\" && Number.isFinite(values.decay)) {\n light.decay = Math.max(0, values.decay);\n }\n }\n\n if (light instanceof THREE.SpotLight) {\n if (typeof values.distance === \"number\" && Number.isFinite(values.distance)) {\n light.distance = Math.max(MIN_LIGHT_DISTANCE, values.distance);\n }\n\n if (typeof values.decay === \"number\" && Number.isFinite(values.decay)) {\n light.decay = Math.max(0, values.decay);\n }\n\n if (typeof values.angle === \"number\" && Number.isFinite(values.angle)) {\n light.angle = Math.max(0, Math.min(Math.PI / 2, values.angle));\n }\n\n if (typeof values.penumbra === \"number\" && Number.isFinite(values.penumbra)) {\n light.penumbra = Math.max(0, Math.min(1, values.penumbra));\n }\n }\n\n if (light instanceof THREE.RectAreaLight) {\n if (typeof values.width === \"number\" && Number.isFinite(values.width)) {\n light.width = Math.max(MIN_AREA_SIZE, values.width);\n }\n\n if (typeof values.height === \"number\" && Number.isFinite(values.height)) {\n light.height = Math.max(MIN_AREA_SIZE, values.height);\n }\n }\n}\n\nexport class LightSyncSystem implements EcsSystem {\n private readonly signatures = new Map<number, string>();\n\n update(world: World): void {\n const entityIds = world.query(LightComponent);\n\n const alive = new Set(entityIds);\n for (const trackedId of this.signatures.keys()) {\n if (!alive.has(trackedId)) {\n this.signatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const lightComponent = world.getComponent(entityId, LightComponent);\n if (!lightComponent) {\n continue;\n }\n\n const signature = JSON.stringify(lightComponent.values);\n if (this.signatures.get(entityId) === signature) {\n continue;\n }\n\n applyLightValues(lightComponent);\n this.signatures.set(entityId, signature);\n }\n }\n}\n","import * as THREE from \"three\";\n\nimport {\n MaterialComponent,\n type MaterialTypeValue,\n type MaterialValueState,\n Object3DRef,\n type TextureFilteringValue,\n} from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\ntype MaterialWithValues = {\n material: THREE.Material | null;\n materials: THREE.Material[];\n values: MaterialValueState[];\n};\n\nconst materialTextureKeyMap: Record<string, string> = {\n textureMap: \"map\",\n alphaTextureMap: \"alphaMap\",\n};\n\nconst materialTextureSlots = [\n \"map\",\n \"alphaMap\",\n \"normalMap\",\n \"roughnessMap\",\n \"metalnessMap\",\n \"aoMap\",\n \"emissiveMap\",\n \"bumpMap\",\n \"displacementMap\",\n \"lightMap\",\n \"envMap\",\n] as const;\n\nfunction resolveMaterialPropertyKey(key: string): string {\n return materialTextureKeyMap[key] ?? key;\n}\n\nfunction createMaterialByType(type: MaterialTypeValue): THREE.Material {\n if (type === \"basic\") {\n return new THREE.MeshBasicMaterial();\n }\n\n if (type === \"phong\") {\n return new THREE.MeshPhongMaterial();\n }\n\n if (type === \"physical\") {\n return new THREE.MeshPhysicalMaterial();\n }\n\n return new THREE.MeshStandardMaterial();\n}\n\nfunction replaceMaterialAcrossObject(\n object: THREE.Object3D,\n previous: THREE.Material,\n next: THREE.Material,\n): void {\n object.traverse((child) => {\n const mesh = child as THREE.Mesh;\n const currentMaterial = mesh.material;\n if (!currentMaterial) {\n return;\n }\n\n if (Array.isArray(currentMaterial)) {\n let changed = false;\n const updated = currentMaterial.map((material) => {\n if (material === previous) {\n changed = true;\n return next;\n }\n\n return material;\n });\n\n if (changed) {\n mesh.material = updated;\n }\n return;\n }\n\n if (currentMaterial === previous) {\n mesh.material = next;\n }\n });\n}\n\nfunction extractObjectMaterials(object: THREE.Object3D): THREE.Material[] {\n const materials: THREE.Material[] = [];\n\n object.traverse((child) => {\n const mesh = child as THREE.Mesh;\n const currentMaterial = mesh.material;\n if (!currentMaterial) {\n return;\n }\n\n const addMaterial = (material: THREE.Material) => {\n if (!materials.includes(material)) {\n materials.push(material);\n }\n };\n\n if (Array.isArray(currentMaterial)) {\n for (const material of currentMaterial) {\n addMaterial(material);\n }\n return;\n }\n\n addMaterial(currentMaterial);\n });\n\n return materials;\n}\n\nfunction applyTextureFiltering(\n material: THREE.Material,\n filtering: TextureFilteringValue,\n): void {\n const sharp = filtering === \"sharp\";\n const target = material as unknown as Record<string, unknown>;\n\n for (const slot of materialTextureSlots) {\n const texture = target[slot] as THREE.Texture | null | undefined;\n if (!texture || !(texture instanceof THREE.Texture)) {\n continue;\n }\n\n const useMipmaps = texture.generateMipmaps !== false;\n texture.magFilter = sharp ? THREE.NearestFilter : THREE.LinearFilter;\n texture.minFilter = useMipmaps\n ? sharp\n ? THREE.NearestMipmapNearestFilter\n : THREE.LinearMipmapLinearFilter\n : sharp\n ? THREE.NearestFilter\n : THREE.LinearFilter;\n texture.needsUpdate = true;\n }\n\n material.needsUpdate = true;\n}\n\nfunction setTextureMipmaps(material: THREE.Material, enabled: boolean): void {\n const target = material as unknown as Record<string, unknown>;\n\n for (const slot of materialTextureSlots) {\n const texture = target[slot] as THREE.Texture | null | undefined;\n if (!texture || !(texture instanceof THREE.Texture)) {\n continue;\n }\n\n texture.generateMipmaps = enabled;\n\n const sharp = texture.magFilter === THREE.NearestFilter;\n texture.minFilter = enabled\n ? sharp\n ? THREE.NearestMipmapNearestFilter\n : THREE.LinearMipmapLinearFilter\n : sharp\n ? THREE.NearestFilter\n : THREE.LinearFilter;\n\n texture.needsUpdate = true;\n }\n\n material.needsUpdate = true;\n}\n\nfunction assignMaterialTexture(\n material: THREE.Material,\n rawKey: string,\n url: string,\n textureCache: Map<string, THREE.Texture>,\n): void {\n const target = material as unknown as Record<string, unknown>;\n const key = resolveMaterialPropertyKey(rawKey);\n\n let texture = textureCache.get(url);\n if (!texture) {\n texture = new THREE.TextureLoader().load(url);\n textureCache.set(url, texture);\n }\n\n target[key] = texture;\n}\n\nfunction clearMaterialTexture(material: THREE.Material, rawKey: string): void {\n const target = material as unknown as Record<string, unknown>;\n const key = resolveMaterialPropertyKey(rawKey);\n target[key] = null;\n}\n\nfunction applyMaterialState(\n material: THREE.Material,\n value: MaterialValueState,\n textureCache: Map<string, THREE.Texture>,\n): void {\n const target = material as unknown as Record<string, unknown>;\n\n if (\n target.color &&\n typeof (target.color as { set?: (nextValue: string) => void }).set ===\n \"function\"\n ) {\n (target.color as { set: (nextValue: string) => void }).set(value.color);\n }\n\n if (typeof target.roughness === \"number\") {\n target.roughness = value.roughness;\n }\n\n if (typeof target.metalness === \"number\") {\n target.metalness = value.metalness;\n }\n\n if (\n target.normalScale &&\n typeof (target.normalScale as { set?: (x: number, y: number) => void })\n .set === \"function\"\n ) {\n (target.normalScale as { set: (x: number, y: number) => void }).set(\n value.normalScale,\n value.normalScale,\n );\n }\n\n target.opacity = value.opacity;\n\n if (\n target.emissive &&\n typeof (target.emissive as { set?: (nextValue: string) => void }).set ===\n \"function\"\n ) {\n (target.emissive as { set: (nextValue: string) => void }).set(value.emissive);\n }\n\n if (typeof target.emissiveIntensity === \"number\") {\n target.emissiveIntensity = value.emissiveIntensity;\n }\n\n target.side = value.side;\n target.blending = value.blending;\n target.depthTest = value.depthTest;\n target.depthWrite = value.depthWrite;\n target.wireframe = value.wireframe;\n target.transparent = value.transparent;\n\n const textureEntries: Array<[string, string | undefined]> = [\n [\"textureMap\", value.textureMap],\n [\"alphaTextureMap\", value.alphaTextureMap],\n [\"normalMap\", value.normalMap],\n [\"roughnessMap\", value.roughnessMap],\n [\"metalnessMap\", value.metalnessMap],\n [\"aoMap\", value.aoMap],\n [\"emissiveMap\", value.emissiveMap],\n [\"bumpMap\", value.bumpMap],\n [\"displacementMap\", value.displacementMap],\n [\"lightMap\", value.lightMap],\n [\"envMap\", value.envMap],\n ];\n\n for (const [key, url] of textureEntries) {\n if (typeof url === \"string\" && url.length > 0) {\n assignMaterialTexture(material, key, url, textureCache);\n } else {\n clearMaterialTexture(material, key);\n }\n }\n\n applyTextureFiltering(material, value.textureFiltering);\n setTextureMipmaps(material, value.useMipmaps);\n material.needsUpdate = true;\n}\n\nexport class MaterialSyncSystem implements EcsSystem {\n private readonly signatures = new Map<number, string>();\n private readonly textureCache = new Map<string, THREE.Texture>();\n\n update(world: World): void {\n const entityIds = world.query(MaterialComponent);\n\n const alive = new Set(entityIds);\n for (const trackedId of this.signatures.keys()) {\n if (!alive.has(trackedId)) {\n this.signatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const materialComponent = world.getComponent(\n entityId,\n MaterialComponent,\n ) as MaterialWithValues | undefined;\n if (!materialComponent) {\n continue;\n }\n\n const signature = JSON.stringify(materialComponent.values);\n if (this.signatures.get(entityId) === signature) {\n continue;\n }\n\n const object = world.getComponent(entityId, Object3DRef)?.object;\n const objectMaterials = object ? extractObjectMaterials(object) : [];\n for (let index = 0; index < materialComponent.values.length; index += 1) {\n const value = materialComponent.values[index];\n if (!value) {\n continue;\n }\n\n const previousMaterial = materialComponent.materials[index];\n if (!previousMaterial) {\n continue;\n }\n\n // Undo/redo can restore component material references that differ from\n // what meshes currently hold. Rebind by slot index so subsequent state\n // writes always target the rendered material instance.\n if (object) {\n const currentObjectMaterial = objectMaterials[index];\n if (\n currentObjectMaterial &&\n currentObjectMaterial !== previousMaterial\n ) {\n replaceMaterialAcrossObject(\n object,\n currentObjectMaterial,\n previousMaterial,\n );\n objectMaterials[index] = previousMaterial;\n }\n }\n\n const nextType = createMaterialByType(value.type).type;\n let targetMaterial = previousMaterial;\n\n if (previousMaterial.type !== nextType) {\n const replacement = createMaterialByType(value.type);\n if (object) {\n replaceMaterialAcrossObject(object, previousMaterial, replacement);\n objectMaterials[index] = replacement;\n }\n materialComponent.materials[index] = replacement;\n targetMaterial = replacement;\n if (index === 0) {\n materialComponent.material = replacement;\n }\n previousMaterial.dispose();\n }\n\n applyMaterialState(targetMaterial, value, this.textureCache);\n }\n\n this.signatures.set(entityId, JSON.stringify(materialComponent.values));\n }\n }\n\n dispose(): void {\n for (const texture of this.textureCache.values()) {\n texture.dispose();\n }\n\n this.textureCache.clear();\n this.signatures.clear();\n }\n}\n","import * as THREE from \"three\";\n\nimport {\n type CubeMeshParameters,\n DEFAULT_MESH_GEOMETRY_PARAMETERS,\n type MeshGeometryParameters,\n MeshGeometryComponent,\n Object3DRef,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_DIMENSION = 0.01;\nconst MIN_RADIUS = 0.001;\n\nfunction sanitizeDimension(value: number): number {\n return Number.isFinite(value)\n ? Math.max(MIN_DIMENSION, value)\n : MIN_DIMENSION;\n}\n\nfunction sanitizeRadius(value: number): number {\n return Number.isFinite(value) ? Math.max(MIN_RADIUS, value) : MIN_RADIUS;\n}\n\nfunction sanitizeMeshParameters(\n component: MeshGeometryComponent,\n): MeshGeometryParameters {\n switch (component.kind) {\n case \"cube\": {\n const params = component.parameters as Partial<CubeMeshParameters>;\n const fallback = DEFAULT_MESH_GEOMETRY_PARAMETERS.cube;\n return {\n width: sanitizeDimension(params.width ?? fallback.width),\n height: sanitizeDimension(params.height ?? fallback.height),\n depth: sanitizeDimension(params.depth ?? fallback.depth),\n };\n }\n case \"plane\": {\n const params = component.parameters as Partial<PlaneMeshParameters>;\n const fallback = DEFAULT_MESH_GEOMETRY_PARAMETERS.plane;\n return {\n width: sanitizeDimension(params.width ?? fallback.width),\n height: sanitizeDimension(params.height ?? fallback.height),\n };\n }\n case \"sphere\": {\n const params = component.parameters as Partial<RadiusMeshParameters>;\n const fallback = DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere;\n return {\n radius: sanitizeRadius(params.radius ?? fallback.radius),\n };\n }\n case \"cylinder\":\n case \"capsule\": {\n const params = component.parameters as Partial<RadiusHeightMeshParameters>;\n const fallback =\n component.kind === \"cylinder\"\n ? DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder\n : DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule;\n return {\n radius: sanitizeRadius(params.radius ?? fallback.radius),\n height: sanitizeDimension(params.height ?? fallback.height),\n };\n }\n case \"model\":\n return {};\n }\n}\n\nfunction resolvePrimaryMesh(object: THREE.Object3D | null): THREE.Mesh | null {\n if (!object) {\n return null;\n }\n\n if (object instanceof THREE.Mesh) {\n return object;\n }\n\n let found: THREE.Mesh | null = null;\n object.traverse((child: THREE.Object3D) => {\n if (!found && child instanceof THREE.Mesh) {\n found = child;\n }\n });\n\n return found;\n}\n\nfunction applyGeometry(component: MeshGeometryComponent): void {\n if (component.kind === \"model\") {\n return;\n }\n\n const mesh = resolvePrimaryMesh(component.object);\n if (!mesh) {\n return;\n }\n\n const sanitized = sanitizeMeshParameters(component);\n component.parameters = sanitized;\n\n let nextGeometry: THREE.BufferGeometry;\n\n switch (component.kind) {\n case \"cube\": {\n const params = sanitized as CubeMeshParameters;\n nextGeometry = new THREE.BoxGeometry(params.width, params.height, params.depth);\n break;\n }\n case \"plane\": {\n const params = sanitized as PlaneMeshParameters;\n nextGeometry = new THREE.PlaneGeometry(params.width, params.height);\n break;\n }\n case \"sphere\": {\n const params = sanitized as RadiusMeshParameters;\n nextGeometry = new THREE.SphereGeometry(params.radius, 24, 24);\n break;\n }\n case \"cylinder\": {\n const params = sanitized as RadiusHeightMeshParameters;\n nextGeometry = new THREE.CylinderGeometry(\n params.radius,\n params.radius,\n params.height,\n 20,\n );\n break;\n }\n case \"capsule\": {\n const params = sanitized as RadiusHeightMeshParameters;\n nextGeometry = new THREE.CapsuleGeometry(params.radius, params.height, 4, 8);\n break;\n }\n default:\n return;\n }\n\n const previousGeometry = mesh.geometry;\n mesh.geometry = nextGeometry;\n previousGeometry.dispose();\n}\n\nfunction applyShadowFlags(component: MeshGeometryComponent): void {\n if (!component.object) {\n return;\n }\n\n component.object.traverse((child: THREE.Object3D) => {\n if (child instanceof THREE.Mesh) {\n child.castShadow = component.castShadow;\n child.receiveShadow = component.receiveShadow;\n }\n });\n}\n\nexport class MeshGeometrySystem implements EcsSystem {\n private readonly geometrySignatures = new Map<number, string>();\n private readonly shadowSignatures = new Map<number, string>();\n\n update(world: World): void {\n const entityIds = world.query(MeshGeometryComponent);\n\n const alive = new Set<number>(entityIds);\n for (const trackedId of this.geometrySignatures.keys()) {\n if (!alive.has(trackedId)) {\n this.geometrySignatures.delete(trackedId);\n this.shadowSignatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const meshGeometry = world.getComponent(\n entityId,\n MeshGeometryComponent,\n ) as MeshGeometryComponent | undefined;\n if (!meshGeometry) {\n continue;\n }\n\n if (!meshGeometry.object) {\n const objectRef = world.getComponent(entityId, Object3DRef);\n if (objectRef?.object) {\n meshGeometry.object = objectRef.object;\n }\n }\n\n const geometrySignature = `${meshGeometry.kind}:${JSON.stringify(meshGeometry.parameters)}:${meshGeometry.object?.uuid ?? \"\"}`;\n const shadowSignature = `${meshGeometry.castShadow}:${meshGeometry.receiveShadow}:${meshGeometry.object?.uuid ?? \"\"}`;\n\n if (this.geometrySignatures.get(entityId) !== geometrySignature) {\n applyGeometry(meshGeometry);\n this.geometrySignatures.set(\n entityId,\n `${meshGeometry.kind}:${JSON.stringify(meshGeometry.parameters)}:${meshGeometry.object?.uuid ?? \"\"}`,\n );\n }\n\n if (this.shadowSignatures.get(entityId) !== shadowSignature) {\n applyShadowFlags(meshGeometry);\n this.shadowSignatures.set(entityId, shadowSignature);\n }\n }\n }\n}\n","\nimport * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader.js\";\nimport { GLTFLoader, type GLTF } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { resolveDracoDecoderPath } from \"./dracoDecoderPath\";\n\nexport const loadGLTF = (path: string): Promise<GLTF> => {\n return new Promise((resolve, reject) => {\n const loader = new GLTFLoader();\n try {\n // Configure DRACOLoader so GLTFLoader can decode DRACO-compressed meshes.\n const dracoLoader = new DRACOLoader();\n // Resolved per call so a setDracoDecoderPath() override made after\n // module load still takes effect.\n dracoLoader.setDecoderPath(resolveDracoDecoderPath());\n loader.setDRACOLoader(dracoLoader);\n } catch (error) {\n // If DRACOLoader isn't available for any reason, proceed without it.\n // GLTFLoader will throw if the file actually contains DRACO-compressed data.\n console.debug(\"DRACOLoader setup failed or unavailable\", error);\n }\n\n loader.load(\n path,\n (gltf: GLTF) => {\n resolve(gltf);\n },\n undefined,\n (error: unknown) => {\n console.debug(\"GLTFLoader failed to load\", error);\n reject(error);\n },\n );\n });\n};\n\nexport const loadAudio = (path: string): Promise<AudioBuffer> => {\n return new Promise((resolve, reject) => {\n const loader = new THREE.AudioLoader();\n loader.load(\n path,\n (buffer: AudioBuffer) => {\n resolve(buffer);\n },\n undefined,\n (error: unknown) => {\n reject(error);\n },\n );\n });\n};\n\nexport const loadVideo = (path: string): Promise<HTMLVideoElement> => {\n return new Promise((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.addEventListener(\"loadedmetadata\", () => {\n video.setAttribute(\"playsinline\", \"\");\n resolve(video);\n });\n video.addEventListener(\"error\", () => {\n reject(new Error(`Failed to load video: ${path}`));\n });\n video.src = path;\n });\n};\n\nexport const loadTexture = (path: string): Promise<THREE.Texture> => {\n return new Promise((resolve, reject) => {\n const loader = new THREE.TextureLoader();\n loader.load(\n path,\n (texture: THREE.Texture) => {\n resolve(texture);\n },\n undefined,\n (error: unknown) => {\n reject(error);\n },\n );\n });\n};\n\nexport const loadTextures = (paths: string[]): Promise<THREE.Texture[]> => {\n const loader = new THREE.TextureLoader();\n const promises: Array<Promise<THREE.Texture>> = [];\n for (let i = 0; i < paths.length; i++) {\n promises.push(\n new Promise((resolve, reject) => {\n loader.load(\n paths[i],\n (texture: THREE.Texture) => {\n resolve(texture);\n },\n undefined,\n (error: unknown) => {\n reject(error);\n },\n );\n }),\n );\n }\n return Promise.all(promises);\n};\n","import * as THREE from \"three\";\n\nimport { Object3DRef, TransformComponent } from \"../components\";\nimport { InstancedMeshComponent } from \"../components/InstancedMesh\";\nimport {\n type CubeMeshParameters,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"../components/MeshGeometry\";\nimport { loadGLTF } from \"../utils/loader\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\n// ---------------------------------------------------------------------------\n// Geometry helpers (primitive kinds)\n// ---------------------------------------------------------------------------\n\nfunction buildGeometry(component: InstancedMeshComponent): THREE.BufferGeometry {\n const p = component.getSanitizedParameters();\n\n switch (component.meshKind) {\n case \"cube\": {\n const params = p as CubeMeshParameters;\n return new THREE.BoxGeometry(params.width, params.height, params.depth);\n }\n case \"plane\": {\n const params = p as PlaneMeshParameters;\n return new THREE.PlaneGeometry(params.width, params.height);\n }\n case \"sphere\": {\n const params = p as RadiusMeshParameters;\n return new THREE.SphereGeometry(params.radius, 24, 24);\n }\n case \"cylinder\": {\n const params = p as RadiusHeightMeshParameters;\n return new THREE.CylinderGeometry(params.radius, params.radius, params.height, 20);\n }\n case \"capsule\": {\n const params = p as RadiusHeightMeshParameters;\n return new THREE.CapsuleGeometry(params.radius, params.height, 4, 8);\n }\n default:\n return new THREE.BoxGeometry(1, 1, 1);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Matrix composition helper\n// ---------------------------------------------------------------------------\n\nconst _position = new THREE.Vector3();\nconst _quaternion = new THREE.Quaternion();\nconst _euler = new THREE.Euler();\nconst _scale = new THREE.Vector3();\nconst _matrix = new THREE.Matrix4();\nconst _modelMatrix = new THREE.Matrix4();\n\nfunction instanceTransformFromComponent(\n transform: TransformComponent,\n out: THREE.Matrix4,\n): void {\n _position.set(transform.position.x, transform.position.y, transform.position.z);\n _euler.set(transform.rotation.x, transform.rotation.y, transform.rotation.z, \"XYZ\");\n _quaternion.setFromEuler(_euler);\n _scale.set(transform.scale.x, transform.scale.y, transform.scale.z);\n out.compose(_position, _quaternion, _scale);\n}\n\n// ---------------------------------------------------------------------------\n// Dispose helpers\n// ---------------------------------------------------------------------------\n\nfunction disposePrimitiveInstancedMesh(mesh: THREE.InstancedMesh): void {\n mesh.geometry.dispose();\n if (Array.isArray(mesh.material)) {\n for (const m of mesh.material) {\n m.dispose();\n }\n } else {\n (mesh.material as THREE.Material).dispose();\n }\n}\n\nfunction disposeModelGroup(group: THREE.Object3D): void {\n group.traverse((child) => {\n const im = child as THREE.InstancedMesh;\n if (im.isInstancedMesh) {\n im.geometry.dispose();\n if (Array.isArray(im.material)) {\n for (const m of im.material) {\n m.dispose();\n }\n } else {\n (im.material as THREE.Material).dispose();\n }\n }\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-mesh entry for model kind\n// ---------------------------------------------------------------------------\n\ntype ModelMeshEntry = {\n localMatrix: THREE.Matrix4;\n instancedMesh: THREE.InstancedMesh;\n};\n\n// ---------------------------------------------------------------------------\n// InstancedMeshSystem\n// ---------------------------------------------------------------------------\n\n/**\n * Maintains the runtime geometry for entities with an {@link InstancedMeshComponent}.\n *\n * - **Primitive kinds** (`cube`, `sphere`, `plane`, `cylinder`, `capsule`): creates a single\n * `THREE.InstancedMesh` on the anchor and writes per-instance matrices every frame.\n * - **Model kind** (`model`): asynchronously loads the GLTF/GLB at `comp.modelPath`, traverses\n * the scene to collect all `THREE.Mesh` nodes, and creates one `THREE.InstancedMesh` per mesh\n * (preserving the mesh's local transform and original materials). All sub-meshes are grouped\n * under a `THREE.Group` stored in `comp.instancedMesh`. Per-instance matrices are composed as\n * `instanceTransform × meshLocalMatrix` every frame.\n *\n * Geometry is rebuilt whenever the signature (`meshKind:parameters:instanceCount` for primitives,\n * `model:path:instanceCount` for model kind) changes.\n */\nexport class InstancedMeshSystem implements EcsSystem {\n /** Signature tracking for geometry + instance count changes. */\n private readonly geometrySignatures = new Map<number, string>();\n /** Signature being loaded per entity. Maps entityId → geometrySignature in-flight.\n * Prevents re-dispatching a load every frame while comp.instancedMesh is still null. */\n private readonly loadingSignatures = new Map<number, string>();\n /** Per-mesh data for model kind, populated after GLTF load. */\n private readonly modelMeshEntries = new Map<number, ModelMeshEntry[]>();\n /**\n * System-internal ref to the Three.js mesh/group most recently placed on\n * the anchor by this system. Used for cleanup on rebuild instead of\n * `comp.instancedMesh`, which can be stale (pointing to a disposed mesh)\n * after an undo/redo restores a history snapshot captured at an earlier\n * geometry configuration. Relying on the stale comp ref would skip removal\n * of the current live mesh → ghost mesh in the scene.\n */\n private readonly trackedMeshes = new Map<number, THREE.Object3D>();\n\n update(world: World): void {\n const entityIds = world.query(InstancedMeshComponent);\n\n // Prune stale tracking for destroyed entities.\n const alive = new Set<number>(entityIds);\n for (const trackedId of this.geometrySignatures.keys()) {\n if (!alive.has(trackedId)) this.geometrySignatures.delete(trackedId);\n }\n for (const trackedId of this.loadingSignatures.keys()) {\n if (!alive.has(trackedId)) this.loadingSignatures.delete(trackedId);\n }\n for (const trackedId of this.modelMeshEntries.keys()) {\n if (!alive.has(trackedId)) this.modelMeshEntries.delete(trackedId);\n }\n for (const trackedId of this.trackedMeshes.keys()) {\n if (!alive.has(trackedId)) this.trackedMeshes.delete(trackedId);\n }\n\n for (const entityId of entityIds) {\n const comp = world.getComponent(\n entityId,\n InstancedMeshComponent,\n ) as InstancedMeshComponent | undefined;\n if (!comp) continue;\n\n const objectRef = world.getComponent(entityId, Object3DRef);\n const anchor: THREE.Object3D | null = objectRef?.object ?? null;\n if (!anchor) continue;\n\n const instanceCount = comp.instanceEntityIds.length;\n const geometrySignature =\n comp.meshKind === \"model\"\n ? `model:${comp.modelPath}:${instanceCount}`\n : `${comp.meshKind}:${JSON.stringify(comp.meshParameters)}:${instanceCount}`;\n\n // Re-sync comp.instancedMesh from system tracking when it has been\n // nulled out by an undo/redo snapshot restore (cloneHistoryValue sets it\n // to null to prevent stale Three.js refs in history). Without this the\n // every-frame matrix-update path below would crash on a null ref.\n if (comp.instancedMesh === null) {\n const tracked = this.trackedMeshes.get(entityId);\n if (tracked) {\n comp.instancedMesh = tracked;\n }\n }\n\n // While a load for the current signature is in-flight, instancedMesh stays null\n // but we must NOT treat that as \"needsRebuild\" — doing so would clear loadingSignatures\n // and re-dispatch the load every frame, causing duplicate groups in the scene.\n // Use trackedMeshes (system-internal) instead of comp.instancedMesh: after an\n // undo/redo the component ref is null (cleared by cloneHistoryValue) even when\n // the mesh hasn't changed, so relying on comp.instancedMesh would force a needless\n // rebuild (and disposal/creation cycle) on every transform undo.\n const pendingLoadSignature = this.loadingSignatures.get(entityId);\n const needsRebuild =\n (!this.trackedMeshes.has(entityId) || this.geometrySignatures.get(entityId) !== geometrySignature) &&\n pendingLoadSignature !== geometrySignature;\n\n if (needsRebuild) {\n // Dispose previous container using the system-internal tracked ref.\n // comp.instancedMesh may point to a stale/disposed mesh after an\n // undo/redo restores a snapshot — using it for cleanup would leave the\n // current live mesh in the anchor, producing a ghost.\n const trackedMesh = this.trackedMeshes.get(entityId);\n if (trackedMesh) {\n anchor.remove(trackedMesh);\n if ((trackedMesh as THREE.InstancedMesh).isInstancedMesh) {\n disposePrimitiveInstancedMesh(trackedMesh as THREE.InstancedMesh);\n } else {\n disposeModelGroup(trackedMesh);\n }\n this.trackedMeshes.delete(entityId);\n }\n comp.instancedMesh = null;\n\n // Cancel an in-flight load only when the target signature changed\n // (e.g. user changed path or instance count). Preserve the slot when\n // rebuilding for any other reason to avoid re-dispatching.\n if (pendingLoadSignature !== undefined && pendingLoadSignature !== geometrySignature) {\n this.loadingSignatures.delete(entityId);\n this.modelMeshEntries.delete(entityId);\n }\n\n // No instances — record the empty signature so we don't re-enter every frame,\n // but skip geometry creation (existing mesh already disposed above).\n if (instanceCount === 0) {\n this.geometrySignatures.set(entityId, geometrySignature);\n continue;\n }\n\n if (comp.meshKind === \"model\") {\n // Async GLTF load — skip this entity until the load completes.\n if (comp.modelPath && !this.loadingSignatures.has(entityId)) {\n this.loadingSignatures.set(entityId, geometrySignature);\n const targetSignature = geometrySignature;\n const targetEntityId = entityId;\n\n loadGLTF(comp.modelPath)\n .then((gltf) => {\n // Guard: entity still alive.\n if (!world.hasEntity(targetEntityId)) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n const currentComp = world.getComponent(\n targetEntityId,\n InstancedMeshComponent,\n ) as InstancedMeshComponent | undefined;\n if (!currentComp) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n // Guard: signature unchanged (no path/count change during load).\n const currentSig = `model:${currentComp.modelPath}:${currentComp.instanceEntityIds.length}`;\n if (currentSig !== targetSignature) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n const currentRef = world.getComponent(targetEntityId, Object3DRef);\n const currentAnchor: THREE.Object3D | null = currentRef?.object ?? null;\n if (!currentAnchor) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n // Safety: remove any stale mesh set by a concurrent load that\n // raced to completion before this one.\n if (currentComp.instancedMesh) {\n currentAnchor.remove(currentComp.instancedMesh);\n disposeModelGroup(currentComp.instancedMesh);\n currentComp.instancedMesh = null;\n }\n\n const count = Math.max(1, currentComp.instanceEntityIds.length);\n const entries: ModelMeshEntry[] = [];\n\n // Ensure world matrices are up to date before extracting local transforms.\n gltf.scene.updateWorldMatrix(true, true);\n\n gltf.scene.traverse((child) => {\n const meshChild = child as THREE.Mesh;\n if (!meshChild.isMesh) return;\n\n const geometry = meshChild.geometry.clone();\n const sourceMaterial = Array.isArray(meshChild.material)\n ? (meshChild.material as THREE.Material[]).map((m) => m.clone())\n : (meshChild.material as THREE.Material).clone();\n\n meshChild.updateWorldMatrix(true, false);\n const localMatrix = meshChild.matrixWorld.clone();\n\n const instancedMesh = new THREE.InstancedMesh(\n geometry,\n Array.isArray(sourceMaterial)\n ? (sourceMaterial as THREE.Material[])\n : (sourceMaterial as THREE.Material),\n count,\n );\n instancedMesh.castShadow = currentComp.castShadow;\n instancedMesh.receiveShadow = currentComp.receiveShadow;\n\n for (let i = 0; i < count; i++) {\n const instanceEntityId = currentComp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n _modelMatrix.multiplyMatrices(_matrix, localMatrix);\n instancedMesh.setMatrixAt(i, _modelMatrix);\n }\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n entries.push({ localMatrix, instancedMesh });\n });\n\n if (entries.length === 0) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n const group = new THREE.Group();\n for (const entry of entries) {\n group.add(entry.instancedMesh);\n }\n\n currentAnchor.add(group);\n currentComp.instancedMesh = group;\n this.modelMeshEntries.set(targetEntityId, entries);\n this.geometrySignatures.set(targetEntityId, targetSignature);\n this.trackedMeshes.set(targetEntityId, group);\n this.loadingSignatures.delete(targetEntityId);\n })\n .catch(() => {\n this.loadingSignatures.delete(targetEntityId);\n });\n }\n // Skip synchronous build for model kind — wait for async load.\n continue;\n }\n\n // --- Primitive kinds: synchronous build ---\n const count = instanceCount;\n const geometry = buildGeometry(comp);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const instancedMesh = new THREE.InstancedMesh(geometry, material, count);\n instancedMesh.castShadow = comp.castShadow;\n instancedMesh.receiveShadow = comp.receiveShadow;\n\n for (let i = 0; i < count; i++) {\n const instanceEntityId = comp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n instancedMesh.setMatrixAt(i, _matrix);\n }\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n anchor.add(instancedMesh);\n comp.instancedMesh = instancedMesh;\n this.trackedMeshes.set(entityId, instancedMesh);\n this.geometrySignatures.set(entityId, geometrySignature);\n } else {\n // --- Every-frame matrix update ---\n if (comp.meshKind === \"model\") {\n const entries = this.modelMeshEntries.get(entityId);\n if (entries) {\n const count = comp.instanceEntityIds.length;\n for (const entry of entries) {\n for (let i = 0; i < count; i++) {\n const instanceEntityId = comp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n _modelMatrix.multiplyMatrices(_matrix, entry.localMatrix);\n entry.instancedMesh.setMatrixAt(i, _modelMatrix);\n }\n entry.instancedMesh.instanceMatrix.needsUpdate = true;\n entry.instancedMesh.castShadow = comp.castShadow;\n entry.instancedMesh.receiveShadow = comp.receiveShadow;\n }\n }\n } else {\n const im = comp.instancedMesh as THREE.InstancedMesh;\n const count = comp.instanceEntityIds.length;\n for (let i = 0; i < count; i++) {\n const instanceEntityId = comp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n im.setMatrixAt(i, _matrix);\n }\n im.instanceMatrix.needsUpdate = true;\n im.castShadow = comp.castShadow;\n im.receiveShadow = comp.receiveShadow;\n }\n }\n }\n }\n}\n","import type * as THREE from \"three\";\n\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nexport class RenderSystem implements EcsSystem {\n private readonly renderer: THREE.WebGLRenderer;\n private readonly scene: THREE.Scene;\n private readonly camera: THREE.PerspectiveCamera;\n private readonly afterRender?: () => void;\n\n constructor(\n renderer: THREE.WebGLRenderer,\n scene: THREE.Scene,\n camera: THREE.PerspectiveCamera,\n afterRender?: () => void,\n ) {\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n this.afterRender = afterRender;\n }\n\n update(_world: World): void {\n if (this.scene.userData.ecsPostprocessingComposerActive === true) {\n const composer = this.scene.userData.ecsPostprocessingComposer as\n | {\n setSize: (width: number, height: number) => void;\n render: () => void;\n }\n | undefined;\n\n if (composer) {\n const width = Math.max(1, this.renderer.domElement.clientWidth);\n const height = Math.max(1, this.renderer.domElement.clientHeight);\n composer.setSize(width, height);\n composer.render();\n } else {\n this.renderer.render(this.scene, this.camera);\n }\n\n this.afterRender?.();\n return;\n }\n\n this.renderer.render(this.scene, this.camera);\n this.afterRender?.();\n }\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 * 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 scripts**: By default, `Behaviour` subclasses do not run inside the\n * editor. Set `executeInEditor: true` on the script entry in the inspector to\n * enable the full lifecycle (`init` → `onUpdate` → `dispose`) while the editor\n * is open. This gives direct access to the Three.js scene, camera, and renderer\n * via {@link World.getScene}, {@link World.getCamera}, and\n * {@link World.getRenderer} — useful for custom shaders, procedural geometry,\n * grass, and any Three.js feature the editor's object palette does not expose.\n * Avoid mutating ECS component state every frame in editor mode, as it creates\n * undo history entries on every tick.\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 */\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 * 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.\n *\n * @remarks\n * Also called in editor mode when `executeInEditor` is `true` on the script\n * entry.\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.\n *\n * @remarks\n * Also called every frame in editor mode when `executeInEditor` is `true`.\n * Access the Three.js scene with `this.world.getScene()` for editor-only\n * rendering work such as custom shaders or procedural geometry.\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","import * as THREE from \"three\";\nimport { Behaviour } from \"../Behaviour\";\nimport { Component } from \"../Component\";\nimport { ScriptComponent } from \"../components\";\nimport type { ScriptEntry } from \"../components/ScriptComponent\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\ntype BehaviourCtor = new (\n world: World,\n entityId: number,\n component: Component | Record<string, unknown>,\n) => Behaviour;\n\ntype ActiveScript = {\n entityId: number;\n scriptComponent: ScriptComponent;\n entryIndex: number;\n scriptEntry: ScriptEntry;\n};\n\ntype ScriptInstanceRecord = {\n entityId: number;\n scriptUrl: string;\n className: string;\n entryIndex: number;\n behaviour: Behaviour;\n rawData: Record<string, unknown>;\n};\n\nfunction toErrorMessage(error: unknown): string {\n const sanitize = (value: string): string =>\n value\n .replace(/localasset:\\/\\/[^/]+\\//g, \"localasset://\")\n .replace(/\\/Users\\/[^\\s)]+/g, \"[local path]\");\n\n if (error instanceof Error && error.message) {\n return sanitize(error.message);\n }\n\n if (typeof error === \"string\" && error) {\n return sanitize(error);\n }\n\n return \"Unknown script error.\";\n}\n\nfunction buildInstanceKey(entityId: number, scriptUrl: string, className: string): string {\n return `${entityId}:${scriptUrl}:${className}`;\n}\n\nfunction resolveBehaviourCtor(\n moduleValue: Record<string, unknown>,\n className: string,\n): BehaviourCtor | 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 Behaviour)) {\n // Fallback: esbuild may bundle a second copy of @relu-interactives/spatial-ecs into\n // the script blob, breaking the instanceof identity check. The static __reluBehaviourClass\n // marker is inherited through the class prototype chain, so it survives the identity split.\n const isBehaviourSubclass =\n !!(candidate as { __reluBehaviourClass?: unknown }).__reluBehaviourClass;\n if (!isBehaviourSubclass) {\n return null;\n }\n }\n\n return candidate as BehaviourCtor;\n}\n\nfunction 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(defaultValue: unknown, currentValue: unknown): 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\n if (typeof defaultValue === \"string\") {\n return typeof currentValue === \"string\" ? currentValue : defaultValue;\n }\n\n if (typeof defaultValue === \"boolean\") {\n return typeof currentValue === \"boolean\" ? currentValue : defaultValue;\n }\n\n if (defaultValue === null) {\n return currentValue !== undefined ? currentValue : null;\n }\n\n return typeof currentValue === \"undefined\" ? defaultValue : currentValue;\n}\n\nfunction mergeDataByCurrentDefaults(\n defaults: Record<string, unknown>,\n current: Record<string, unknown>,\n): Record<string, unknown> {\n const next: Record<string, unknown> = {};\n\n for (const key of Object.keys(defaults)) {\n next[key] = mergeValueByDefaultShape(defaults[key], current[key]);\n }\n\n return next;\n}\n\nfunction isRawEntityInput(value: unknown): 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(components: Component[], componentKind: string): 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\nfunction resolveInputData(world: World, rawData: Record<string, unknown>): 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 = 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\nfunction serializeDataForStorage(\n rawData: Record<string, unknown>,\n behaviourData: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...behaviourData };\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\nfunction normalizeEntry(\n value: Partial<ScriptEntry> | undefined,\n fallbackEntityId: number,\n): ScriptEntry {\n return {\n entityId: typeof value?.entityId === \"number\" ? value.entityId : fallbackEntityId,\n className: typeof value?.className === \"string\" ? value.className : \"\",\n scriptUrl: typeof value?.scriptUrl === \"string\" ? value.scriptUrl : \"\",\n enabled: typeof value?.enabled === \"boolean\" ? value.enabled : true,\n executeInEditor: typeof value?.executeInEditor === \"boolean\" ? value.executeInEditor : false,\n data: normalizeScriptData(value?.data),\n runtimeState:\n value?.runtimeState === \"idle\" ||\n value?.runtimeState === \"loading\" ||\n value?.runtimeState === \"ready\" ||\n value?.runtimeState === \"error\"\n ? value.runtimeState\n : undefined,\n runtimeMessage: typeof value?.runtimeMessage === \"string\" ? value.runtimeMessage : undefined,\n };\n}\n\nfunction readScriptEntries(component: ScriptComponent, entityId: number): ScriptEntry[] {\n if (Array.isArray(component.entries) && component.entries.length > 0) {\n return component.entries\n .map((entry) => normalizeEntry(entry as Partial<ScriptEntry>, entityId))\n .filter((entry) => entry.className || entry.scriptUrl);\n }\n\n return [];\n}\n\nfunction writeScriptEntries(component: ScriptComponent, entries: ScriptEntry[]): void {\n const normalized = entries.map((entry) => normalizeEntry(entry, entry.entityId));\n component.entries = normalized;\n\n const active = normalized[0];\n if (!active) {\n component.scriptInstance = null;\n }\n}\n\ntype ModuleLoader = (scriptUrl: string) => Promise<Record<string, unknown>>;\n\nasync function defaultModuleLoader(scriptUrl: string): Promise<Record<string, unknown>> {\n return (await import(/* webpackIgnore: true */ scriptUrl)) as Record<string, unknown>;\n}\n\n/**\n * Optional context that enables raycast-based onSelect / onDeselect dispatch.\n * When provided, pointer/touch taps on the canvas fire a raycast against the\n * scene. If the hit object (or any ancestor) carries userData.entityId, every\n * Behaviour instance for that entity receives onSelect(); the previously\n * selected entity's instances receive onDeselect().\n */\nexport type SelectionContext = {\n camera: THREE.Camera;\n scene: THREE.Scene;\n domElement: HTMLElement;\n};\n\nexport class ScriptBehaviourSystem implements EcsSystem {\n private instances = new Map<string, ScriptInstanceRecord>();\n private loading = new Map<string, Promise<void>>();\n private readonly moduleLoader: ModuleLoader;\n\n // Raycast-based onSelect / onDeselect support\n private readonly selectionCtx: SelectionContext | null;\n private readonly raycaster: THREE.Raycaster;\n private readonly ndcPointer: THREE.Vector2;\n private selectedEntityId: number | null = null;\n // undefined = nothing queued; null = queued \"deselect all\"; number = queued entity\n private pendingEntityId: number | null | undefined = undefined;\n private pointerDownPos: { x: number; y: number } | null = null;\n private static readonly CLICK_THRESHOLD = 6;\n\n constructor(moduleLoader?: ModuleLoader, selectionContext?: SelectionContext) {\n this.moduleLoader = moduleLoader ?? defaultModuleLoader;\n this.selectionCtx = selectionContext ?? null;\n this.raycaster = new THREE.Raycaster();\n this.ndcPointer = new THREE.Vector2();\n if (this.selectionCtx) {\n this.selectionCtx.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.selectionCtx.domElement.addEventListener(\"pointerup\", this.onPointerUp);\n }\n }\n\n // ── Raycast selection helpers ──────────────────────────────────────────────\n\n /** Walk up the object hierarchy to find the nearest userData.entityId. */\n private resolveEntityId(object: THREE.Object3D): number | null {\n let current: THREE.Object3D | null = object;\n while (current) {\n const id = current.userData?.entityId;\n if (typeof id === \"number\") return id;\n current = current.parent;\n }\n return null;\n }\n\n /** Convert client (screen) coordinates to normalised device coordinates. */\n private toNdc(clientX: number, clientY: number): void {\n if (!this.selectionCtx) return;\n const rect = this.selectionCtx.domElement.getBoundingClientRect();\n this.ndcPointer.x = ((clientX - rect.left) / rect.width) * 2 - 1;\n this.ndcPointer.y = -((clientY - rect.top) / rect.height) * 2 + 1;\n }\n\n /** Fire raycast and queue the result to be dispatched in the next update(). */\n private queueRaycast(clientX: number, clientY: number): void {\n if (!this.selectionCtx) return;\n this.toNdc(clientX, clientY);\n this.raycaster.setFromCamera(this.ndcPointer, this.selectionCtx.camera);\n const hits = this.raycaster.intersectObjects(this.selectionCtx.scene.children, true);\n for (const hit of hits) {\n // Skip editor-only helpers (grid, transform gizmo, etc.)\n if (hit.object.userData?.ecsPreviewHidden) continue;\n const entityId = this.resolveEntityId(hit.object);\n if (entityId !== null) {\n this.pendingEntityId = entityId;\n return;\n }\n }\n // Clicked empty space → queue deselect\n this.pendingEntityId = null;\n }\n\n private onPointerDown = (event: PointerEvent): void => {\n this.pointerDownPos = { x: event.clientX, y: event.clientY };\n };\n\n private onPointerUp = (event: PointerEvent): void => {\n if (!this.pointerDownPos) return;\n const dx = event.clientX - this.pointerDownPos.x;\n const dy = event.clientY - this.pointerDownPos.y;\n this.pointerDownPos = null;\n // Ignore drag gestures — only fire for taps / clicks\n if (Math.sqrt(dx * dx + dy * dy) > ScriptBehaviourSystem.CLICK_THRESHOLD) return;\n this.queueRaycast(event.clientX, event.clientY);\n };\n\n /**\n * Apply a queued selection change.\n * Calls onDeselect() on all behaviours of the previous entity and\n * onSelect() on all behaviours of the newly selected entity.\n */\n private applySelection(nextEntityId: number | null): void {\n if (nextEntityId === this.selectedEntityId) return;\n const prevEntityId = this.selectedEntityId;\n this.selectedEntityId = nextEntityId;\n\n if (prevEntityId !== null) {\n for (const record of this.instances.values()) {\n if (record.entityId === prevEntityId) {\n try {\n record.behaviour.onDeselect();\n } catch {}\n }\n }\n }\n\n if (nextEntityId !== null) {\n for (const record of this.instances.values()) {\n if (record.entityId === nextEntityId) {\n try {\n record.behaviour.onSelect();\n } catch {}\n }\n }\n }\n }\n\n // ── ECS lifecycle ──────────────────────────────────────────────────────────\n\n update(world: World, deltaTime: number): void {\n // Dispatch any queued raycast selection before running behaviour updates\n if (this.pendingEntityId !== undefined) {\n const next = this.pendingEntityId;\n this.pendingEntityId = undefined;\n this.applySelection(next);\n }\n\n const active = new Map<string, ActiveScript>();\n const entityIds = world.query(ScriptComponent);\n\n for (const entityId of entityIds) {\n const scriptComponent = world.getComponent(entityId, ScriptComponent);\n if (!scriptComponent) {\n continue;\n }\n\n const entries = readScriptEntries(scriptComponent, entityId);\n if (entries.length === 0) {\n scriptComponent.scriptInstance = null;\n continue;\n }\n\n const nextEntries = [...entries];\n let hasEnabledScript = false;\n\n for (let entryIndex = 0; entryIndex < nextEntries.length; entryIndex += 1) {\n const entry = nextEntries[entryIndex];\n // In editor mode, only run scripts that have explicitly opted in via executeInEditor.\n const skipInEditor = world.isEditorMode() && !entry.executeInEditor;\n if (!entry.enabled || !entry.scriptUrl || skipInEditor) {\n nextEntries[entryIndex] = {\n ...entry,\n runtimeState: skipInEditor ? \"idle\" : \"idle\",\n runtimeMessage: undefined,\n };\n continue;\n }\n\n hasEnabledScript = true;\n const key = buildInstanceKey(entityId, entry.scriptUrl, entry.className);\n active.set(key, {\n entityId,\n scriptComponent,\n entryIndex,\n scriptEntry: entry,\n });\n }\n\n writeScriptEntries(scriptComponent, nextEntries);\n if (!hasEnabledScript) {\n scriptComponent.scriptInstance = null;\n }\n }\n\n for (const [key, record] of this.instances.entries()) {\n const script = active.get(key);\n if (!script) {\n const liveComponent = world.getComponent(record.entityId, ScriptComponent);\n if (liveComponent) {\n if (record.entryIndex === 0) {\n liveComponent.scriptInstance = null;\n }\n liveComponent.scriptInstances.delete(record.entryIndex);\n }\n\n record.behaviour.dispose?.(world);\n this.instances.delete(key);\n continue;\n }\n\n const entries = readScriptEntries(script.scriptComponent, script.entityId);\n const liveEntry = entries[script.entryIndex];\n if (!liveEntry) {\n record.behaviour.dispose?.(world);\n this.instances.delete(key);\n continue;\n }\n\n // Skip behaviour update for invisible entities. The instance is kept alive\n // so scripts resume immediately when the entity becomes visible again.\n if (!world.isEntityVisible(record.entityId)) {\n continue;\n }\n\n try {\n script.scriptComponent.scriptInstance =\n script.entryIndex === 0 ? record.behaviour : script.scriptComponent.scriptInstance;\n script.scriptComponent.scriptInstances.set(script.entryIndex, record.behaviour);\n\n entries[script.entryIndex] = {\n ...liveEntry,\n data: serializeDataForStorage(record.rawData, normalizeScriptData(record.behaviour.data)),\n };\n\n record.behaviour.update(world, deltaTime);\n\n entries[script.entryIndex] = {\n ...entries[script.entryIndex],\n data: serializeDataForStorage(record.rawData, normalizeScriptData(record.behaviour.data)),\n runtimeState: \"ready\",\n runtimeMessage: undefined,\n };\n writeScriptEntries(script.scriptComponent, entries);\n } catch (error) {\n entries[script.entryIndex] = {\n ...entries[script.entryIndex],\n runtimeState: \"error\",\n runtimeMessage: toErrorMessage(error),\n };\n writeScriptEntries(script.scriptComponent, entries);\n if (script.entryIndex === 0) {\n script.scriptComponent.scriptInstance = null;\n }\n record.behaviour.dispose?.(world);\n this.instances.delete(key);\n }\n }\n\n // If the selected entity no longer has any loaded behaviour instances,\n // clear the selection so stale state does not persist.\n if (this.selectedEntityId !== null) {\n let stillActive = false;\n for (const record of this.instances.values()) {\n if (record.entityId === this.selectedEntityId) {\n stillActive = true;\n break;\n }\n }\n if (!stillActive) {\n this.selectedEntityId = null;\n }\n }\n\n for (const [key, script] of active.entries()) {\n if (this.instances.has(key) || this.loading.has(key)) {\n continue;\n }\n\n const entries = readScriptEntries(script.scriptComponent, script.entityId);\n const targetEntry = entries[script.entryIndex];\n if (targetEntry) {\n entries[script.entryIndex] = {\n ...targetEntry,\n runtimeState: \"loading\",\n runtimeMessage: undefined,\n };\n writeScriptEntries(script.scriptComponent, entries);\n }\n\n const promise = this.loadBehaviour(world, script)\n .catch((error) => {\n const liveEntries = readScriptEntries(script.scriptComponent, script.entityId);\n const liveEntry = liveEntries[script.entryIndex];\n if (liveEntry) {\n liveEntries[script.entryIndex] = {\n ...liveEntry,\n runtimeState: \"error\",\n runtimeMessage: \"Failed to load script.\",\n };\n writeScriptEntries(script.scriptComponent, liveEntries);\n }\n if (script.entryIndex === 0) {\n script.scriptComponent.scriptInstance = null;\n }\n console.error(\n `[ScriptBehaviourSystem] Failed loading script ${script.scriptEntry.className}`,\n error,\n );\n })\n .finally(() => {\n this.loading.delete(key);\n });\n\n this.loading.set(key, promise);\n }\n\n for (const key of this.loading.keys()) {\n if (active.has(key)) {\n continue;\n }\n\n this.loading.delete(key);\n }\n }\n\n dispose(world: World): void {\n if (this.selectionCtx) {\n this.selectionCtx.domElement.removeEventListener(\"pointerdown\", this.onPointerDown);\n this.selectionCtx.domElement.removeEventListener(\"pointerup\", this.onPointerUp);\n }\n\n for (const record of this.instances.values()) {\n const liveComponent = world.getComponent(record.entityId, ScriptComponent);\n if (liveComponent) {\n if (record.entryIndex === 0) {\n liveComponent.scriptInstance = null;\n }\n liveComponent.scriptInstances.delete(record.entryIndex);\n }\n\n record.behaviour.dispose?.(world);\n }\n\n this.instances.clear();\n this.loading.clear();\n }\n\n private async loadBehaviour(world: World, script: ActiveScript): Promise<void> {\n const { entityId, scriptComponent, entryIndex, scriptEntry } = script;\n const key = buildInstanceKey(\n entityId,\n scriptEntry.scriptUrl,\n scriptEntry.className,\n );\n\n const moduleValue = await this.moduleLoader(scriptEntry.scriptUrl);\n\n const ctor = resolveBehaviourCtor(moduleValue, scriptEntry.className);\n if (!ctor) {\n throw new Error(\n `Missing Behaviour export '${scriptEntry.className}' in ${scriptEntry.scriptUrl}`,\n );\n }\n\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n const liveComponent = world.getComponent(entityId, ScriptComponent);\n\n if (!liveComponent) {\n return;\n }\n\n const liveEntries = readScriptEntries(liveComponent, entityId);\n const liveEntry = liveEntries[entryIndex];\n\n if (\n !liveEntry ||\n !liveEntry.enabled ||\n !liveEntry.scriptUrl ||\n liveEntry.scriptUrl !== scriptEntry.scriptUrl ||\n liveEntry.className !== scriptEntry.className\n ) {\n return;\n }\n\n const currentData = normalizeScriptData(liveEntry.data);\n\n let behaviour: Behaviour;\n try {\n // Prefer undefined so Behaviour does not preempt script class defaults.\n behaviour = new ctor(\n world,\n entityId,\n undefined as unknown as Record<string, unknown>,\n );\n } catch {\n // Fallback for scripts that require a component object in constructor.\n behaviour = new ctor(world, entityId, currentData);\n }\n\n const defaults = normalizeScriptData(behaviour.data);\n const mergedData = mergeDataByCurrentDefaults(defaults, currentData);\n const resolvedData = resolveInputData(world, mergedData);\n\n behaviour.data = resolvedData;\n\n if (!world.isEditorMode() || liveEntry.executeInEditor === true) {\n (behaviour as unknown as { init(): void }).init();\n }\n\n liveEntries[entryIndex] = {\n ...liveEntry,\n data: mergedData,\n runtimeState: \"ready\",\n runtimeMessage: undefined,\n };\n writeScriptEntries(liveComponent, liveEntries);\n if (entryIndex === 0) {\n liveComponent.scriptInstance = behaviour;\n }\n liveComponent.scriptInstances.set(entryIndex, behaviour);\n this.instances.set(key, {\n entityId,\n scriptUrl: scriptEntry.scriptUrl,\n className: scriptEntry.className,\n entryIndex,\n behaviour,\n rawData: mergedData,\n });\n }\n}\n","import { Object3DRef } from \"../components/Object3DRef\";\nimport { TransformComponent } from \"../components/Transform\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\nimport { applyTransform } from \"./ObjectManagementSystem\";\n\nexport class TransformSyncSystem implements EcsSystem {\n update(world: World): void {\n const entities = world.query(TransformComponent, Object3DRef);\n\n for (const entityId of entities) {\n const transform = world.getComponent(entityId, TransformComponent);\n const object = world.getComponent(entityId, Object3DRef)?.object;\n\n if (!transform || !object) {\n continue;\n }\n\n applyTransform(object, transform);\n object.updateMatrixWorld(true);\n }\n }\n}\n","import * as THREE from \"three\";\n\nimport { AudioComponent } from \"../components/Audio\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\n/** Subset of `AudioComponent.options` that the system syncs to THREE.js every frame. */\ntype TrackedAudioOptions = {\n loop: boolean;\n pitch: number;\n volume: number;\n refDistance: number;\n distanceModel: string;\n rolloffFactor: number;\n};\n\nfunction snapshotOptions(opts: AudioComponent[\"options\"]): TrackedAudioOptions {\n return {\n loop: opts.loop,\n pitch: opts.pitch,\n volume: opts.volume,\n refDistance: opts.refDistance,\n distanceModel: opts.distanceModel,\n rolloffFactor: opts.rolloffFactor,\n };\n}\n\n/**\n * Reconciles `AudioComponent` state with the underlying THREE.js audio objects\n * each frame.\n *\n * **Playback** — drives `play()`, `pause()`, and `stop()` on the THREE.js\n * audio node based on the `isPlaying` / `isPaused` flags set by\n * `AudioComponent.play()`, `.pause()`, and `.stop()`.\n *\n * **Option sync** — detects changes to `loop`, `pitch`, `volume`,\n * `refDistance`, `distanceModel`, and `rolloffFactor` and applies them live.\n * Changes take effect on the next frame, so scripts and inspector edits during\n * runtime are reflected without reloading the scene.\n *\n * Only active in **preview** mode (`isEditor: true` makes every update a\n * no-op so the editor is unaffected).\n *\n * @category Systems\n */\nexport class AudioSystem implements EcsSystem {\n private readonly isEditor: boolean;\n /** THREE.js `isPlaying` state captured at the end of the previous frame. */\n private readonly prevPlayingState = new Map<number, boolean>();\n /** Snapshot of options applied in the previous frame, for change detection. */\n private readonly prevOptions = new Map<number, TrackedAudioOptions>();\n /** Tracks entities that were stopped due to invisibility. */\n private readonly stoppedDueToInvisibility = new Set<number>();\n\n constructor({ isEditor = false }: { isEditor?: boolean } = {}) {\n this.isEditor = isEditor;\n }\n\n update(world: World, _deltaTime: number): void {\n if (this.isEditor) return;\n\n const entities = world.query(AudioComponent);\n\n // Track which entities are still alive so we can prune stale map entries.\n const liveEntityIds = new Set(entities);\n\n for (const entityId of entities) {\n const component = world.getComponent(entityId, AudioComponent);\n if (!component?.audio) continue;\n\n const sound = component.audio;\n\n // Skip audio updates for invisible entities; stop any sound that is\n // currently playing so it does not continue while the entity is hidden.\n // Track that we stopped it so we can resume when visibility is restored.\n if (!world.isEntityVisible(entityId)) {\n if (sound.isPlaying) {\n sound.stop();\n this.stoppedDueToInvisibility.add(entityId);\n }\n continue;\n }\n\n // Entity is visible — if we previously stopped it due to invisibility,\n // resume playback now and clear the flag.\n if (this.stoppedDueToInvisibility.has(entityId)) {\n this.stoppedDueToInvisibility.delete(entityId);\n // If the component still wants to play, restart the audio.\n if (component.isPlaying && !sound.isPlaying && sound.buffer) {\n sound.play();\n }\n }\n\n // --- Option sync ---------------------------------------------------\n this._syncOptions(entityId, component, sound);\n\n // --- Playback reconciliation ----------------------------------------\n const prevWasPlaying = this.prevPlayingState.get(entityId) ?? false;\n\n // Detect natural audio end: THREE.js stopped on its own (e.g. a\n // non-looping clip finished) while the component still believes it is\n // playing. Skip this check if we stopped due to invisibility.\n if (\n prevWasPlaying &&\n !sound.isPlaying &&\n component.isPlaying &&\n !component.isPaused &&\n !this.stoppedDueToInvisibility.has(entityId)\n ) {\n component.isPlaying = false;\n }\n\n if (component.isPlaying && !sound.isPlaying) {\n // Wait for a buffer to be available; the system will retry each frame\n // until it is ready, so autoplay / programmatic play always fires.\n if (sound.buffer) {\n sound.play();\n }\n } else if (!component.isPlaying && sound.isPlaying) {\n if (component.isPaused) {\n sound.pause();\n } else {\n sound.stop();\n }\n }\n\n this.prevPlayingState.set(entityId, sound.isPlaying);\n }\n\n // Remove tracking entries for entities that no longer exist.\n for (const entityId of this.prevPlayingState.keys()) {\n if (!liveEntityIds.has(entityId)) {\n this.prevPlayingState.delete(entityId);\n this.prevOptions.delete(entityId);\n this.stoppedDueToInvisibility.delete(entityId);\n }\n }\n }\n\n /** Apply any changed options from the component to the THREE.js audio node. */\n private _syncOptions(\n entityId: number,\n component: AudioComponent,\n sound: THREE.Audio<GainNode> | THREE.PositionalAudio,\n ): void {\n const opts = component.options;\n const prev = this.prevOptions.get(entityId);\n\n if (!prev || prev.loop !== opts.loop) {\n sound.setLoop(opts.loop);\n }\n\n if (!prev || prev.pitch !== opts.pitch) {\n sound.setPlaybackRate(opts.pitch);\n }\n\n if (!prev || prev.volume !== opts.volume) {\n sound.setVolume(opts.volume);\n }\n\n // Positional-only properties — guarded by both the options flag and the\n // THREE.js class check so neither can cause a spurious call.\n if (opts.positional && sound instanceof THREE.PositionalAudio) {\n if (!prev || prev.refDistance !== opts.refDistance) {\n sound.setRefDistance(opts.refDistance);\n }\n\n if (!prev || prev.distanceModel !== opts.distanceModel) {\n sound.setDistanceModel(opts.distanceModel as DistanceModelType);\n }\n\n if (!prev || prev.rolloffFactor !== opts.rolloffFactor) {\n sound.setRolloffFactor(opts.rolloffFactor);\n }\n }\n\n this.prevOptions.set(entityId, snapshotOptions(opts));\n }\n\n dispose(_world: World): void {\n this.prevPlayingState.clear();\n this.prevOptions.clear();\n this.stoppedDueToInvisibility.clear();\n }\n}\n","import * as THREE from \"three\";\n\nimport { VideoComponent } from \"../components/Video\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\n/** Subset of `VideoComponent.options` the system syncs to the DOM / mesh each frame. */\ntype TrackedVideoOptions = {\n loop: boolean;\n volume: number;\n width: number;\n height: number;\n backgroundColor: string;\n similarity: number;\n smoothness: number;\n spill: number;\n positional: boolean;\n refDistance: number;\n distanceModel: string;\n rolloffFactor: number;\n};\n\n/** Playback intent captured from the previous frame for transition detection. */\ntype PrevVideoIntent = {\n isPlaying: boolean;\n isPaused: boolean;\n};\n\nfunction snapshotOptions(opts: VideoComponent[\"options\"]): TrackedVideoOptions {\n return {\n loop: opts.loop,\n volume: opts.volume,\n width: opts.width,\n height: opts.height,\n backgroundColor: opts.backgroundColor,\n similarity: opts.similarity,\n smoothness: opts.smoothness,\n spill: opts.spill,\n positional: opts.positional,\n refDistance: opts.refDistance,\n distanceModel: opts.distanceModel,\n rolloffFactor: opts.rolloffFactor,\n };\n}\n\n/**\n * Reconciles `VideoComponent` state with the underlying HTML video element\n * and THREE.js mesh/material each frame.\n *\n * **Playback** — drives `play()`, `pause()`, and stop (pause + seek to 0) on\n * the HTML `<video>` element based on the `isPlaying` / `isPaused` flags set\n * by `VideoComponent.play()`, `.pause()`, and `.stop()`.\n *\n * **Option sync** — detects changes to `loop`, `volume`, `width`, `height`,\n * and green-screen shader uniforms (`backgroundColor`, `similarity`,\n * `smoothness`, `spill`) and applies them live without a scene reload.\n *\n * Only active in **preview** mode (`isEditor: true` makes every update a\n * no-op so the editor is unaffected).\n *\n * @category Systems\n */\nexport class VideoSystem implements EcsSystem {\n private readonly isEditor: boolean;\n /** Playback intent captured at the end of the previous frame. */\n private readonly prevIntent = new Map<number, PrevVideoIntent>();\n /** Snapshot of options applied in the previous frame, for change detection. */\n private readonly prevOptions = new Map<number, TrackedVideoOptions>();\n /** Tracks entities that were manually paused due to invisibility. */\n private readonly pausedDueToInvisibility = new Set<number>();\n\n constructor({ isEditor = false }: { isEditor?: boolean } = {}) {\n this.isEditor = isEditor;\n }\n\n update(world: World, _deltaTime: number): void {\n if (this.isEditor) return;\n\n const entities = world.query(VideoComponent);\n\n // Track which entities are still alive so we can prune stale map entries.\n const liveEntityIds = new Set(entities);\n\n for (const entityId of entities) {\n const component = world.getComponent(entityId, VideoComponent);\n if (!component?.videoElement) continue;\n\n const video = component.videoElement;\n\n // Skip video updates for invisible entities; pause playback so the video\n // does not continue running while the entity is hidden. Track that we\n // manually paused it so we can resume when visibility is restored.\n if (!world.isEntityVisible(entityId)) {\n if (!video.paused) {\n video.pause();\n this.pausedDueToInvisibility.add(entityId);\n }\n continue;\n }\n\n // Entity is visible — if we previously paused it due to invisibility,\n // resume playback now and clear the flag.\n if (this.pausedDueToInvisibility.has(entityId)) {\n this.pausedDueToInvisibility.delete(entityId);\n // If the component still wants to play, resume the video element.\n if (component.isPlaying && video.paused) {\n video.play().catch(() => {});\n }\n }\n\n // --- Option sync ---------------------------------------------------\n this._syncOptions(entityId, component, video);\n\n // --- Playback reconciliation ----------------------------------------\n const prev = this.prevIntent.get(entityId) ?? { isPlaying: false, isPaused: false };\n\n // Detect natural video end: the element paused on its own (non-looping\n // clip finished) while the component still believes it is playing.\n // Skip this check if we manually paused due to invisibility.\n if (\n prev.isPlaying &&\n video.paused &&\n !video.seeking &&\n component.isPlaying &&\n !component.isPaused &&\n !this.pausedDueToInvisibility.has(entityId)\n ) {\n component.isPlaying = false;\n }\n\n const isStoppedNow = !component.isPlaying && !component.isPaused;\n const wasStoppedPrev = !prev.isPlaying && !prev.isPaused;\n // True only on the first frame after `stop()` is called — used to reset\n // currentTime exactly once rather than every frame.\n const justStopped = !wasStoppedPrev && isStoppedNow;\n\n if (component.isPlaying) {\n if (video.paused) {\n // play() returns a Promise; browsers may reject it due to autoplay\n // policy. The flag stays true so the system retries next frame.\n video.play().catch(() => {});\n }\n } else if (component.isPaused) {\n if (!video.paused) {\n video.pause();\n }\n } else {\n // Stopped state — pause and reset position.\n if (!video.paused) {\n video.pause();\n }\n if (justStopped) {\n video.currentTime = 0;\n }\n }\n\n this.prevIntent.set(entityId, {\n isPlaying: component.isPlaying,\n isPaused: component.isPaused,\n });\n }\n\n // Remove tracking entries for entities that no longer exist.\n for (const entityId of this.prevIntent.keys()) {\n if (!liveEntityIds.has(entityId)) {\n this.prevIntent.delete(entityId);\n this.prevOptions.delete(entityId);\n this.pausedDueToInvisibility.delete(entityId);\n }\n }\n }\n\n /** Apply any changed options from the component to the video element and mesh. */\n private _syncOptions(\n entityId: number,\n component: VideoComponent,\n video: HTMLVideoElement,\n ): void {\n const opts = component.options;\n const prev = this.prevOptions.get(entityId);\n\n if (!prev || prev.loop !== opts.loop) {\n video.loop = opts.loop;\n }\n\n // Volume: prefer the Web Audio gain node when present so that positional\n // attenuation is applied correctly. Fall back to the HTML element directly\n // when no audio node exists (e.g. in editor mode, should rarely occur here\n // since VideoSystem is a no-op in editor).\n if (!prev || prev.volume !== opts.volume) {\n if (component.audioNode) {\n component.audioNode.setVolume(Math.max(0, Math.min(1, opts.volume)));\n } else {\n video.volume = Math.max(0, Math.min(1, opts.volume));\n }\n }\n\n // Mesh scale for width / height.\n if ((!prev || prev.width !== opts.width || prev.height !== opts.height) && component.object) {\n component.object.scale.set(opts.width, opts.height, 1);\n }\n\n // Green-screen shader uniforms — only when the material is a ShaderMaterial.\n const material = component.material;\n if (material instanceof THREE.ShaderMaterial) {\n if (!prev || prev.backgroundColor !== opts.backgroundColor) {\n (material.uniforms.keyColor.value as THREE.Color).set(opts.backgroundColor);\n }\n\n if (!prev || prev.similarity !== opts.similarity) {\n material.uniforms.similarity.value = opts.similarity;\n }\n\n if (!prev || prev.smoothness !== opts.smoothness) {\n material.uniforms.smoothness.value = opts.smoothness;\n }\n\n if (!prev || prev.spill !== opts.spill) {\n material.uniforms.spill.value = opts.spill;\n }\n }\n\n // Positional audio options — only when the audioNode is a PositionalAudio.\n if (opts.positional && component.audioNode instanceof THREE.PositionalAudio) {\n const posAudio = component.audioNode;\n\n if (!prev || prev.refDistance !== opts.refDistance) {\n posAudio.setRefDistance(opts.refDistance);\n }\n\n if (!prev || prev.distanceModel !== opts.distanceModel) {\n posAudio.setDistanceModel(opts.distanceModel as DistanceModelType);\n }\n\n if (!prev || prev.rolloffFactor !== opts.rolloffFactor) {\n posAudio.setRolloffFactor(opts.rolloffFactor);\n }\n }\n\n this.prevOptions.set(entityId, snapshotOptions(opts));\n }\n\n dispose(_world: World): void {\n this.prevIntent.clear();\n this.prevOptions.clear();\n this.pausedDueToInvisibility.clear();\n }\n}\n","import * as THREE from \"three\";\nimport type * as RAPIER from \"@dimforge/rapier3d-compat\";\nimport {\n cloneHistoryValue,\n DEBUG_CHANGE_IGNORED_SYSTEMS,\n normalizeDebugValue,\n type AnyComponent,\n type ComponentClass,\n type WorldHistorySnapshot,\n} from \"./worldSnapshotUtils\";\nimport type { Component } from \"./Component\";\nimport type { EcsSystem } from \"./System\";\nimport type { EntityId, IntersectionResult, SelectionListener, Vec3 } from \"./types\";\nimport { registerDefaultFactories } from \"./factories\";\nimport {\n despawnPrefab,\n spawnPrefab,\n type SpawnPrefabOptions,\n type SpawnPrefabSource,\n} from \"./prefab/spawnPrefab\";\nimport {\n Environment,\n EntityType,\n Name,\n Object3DRef,\n ParentId,\n Postprocessing,\n ScriptComponent,\n SelectionTransformState,\n} from \"./components\";\nimport {\n AnimationSystem,\n AudioSystem,\n VideoSystem,\n CameraSyncSystem,\n EnvironmentSyncSystem,\n PostprocessingSyncSystem,\n LightSyncSystem,\n MaterialSyncSystem,\n MeshGeometrySystem,\n InstancedMeshSystem,\n ObjectManagementSystem,\n ObjectVisibilitySystem,\n PhysicsSyncSystem,\n TransformSyncSystem,\n RenderSystem,\n InputSystem,\n type KeyboardKey,\n type MouseButton,\n} from \"./systems\";\n\ntype StoreListener = () => void;\nexport type WorldFeatureFlags = {\n supportSkybox?: boolean;\n supportPostprocessing?: boolean;\n};\n\ntype WorldEntityView = {\n name: string;\n entityId: number;\n object: THREE.Object3D | null;\n type: string;\n components: Component[];\n};\n\nexport class World {\n private nextEntityId = 1;\n private entities = new Set<EntityId>();\n private systems: EcsSystem[] = [];\n private selectionListeners = new Set<SelectionListener>();\n private storeListeners = new Set<StoreListener>();\n\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private readonly featureFlags: {\n supportSkybox: boolean;\n supportPostprocessing: boolean;\n };\n\n private components = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n private inputSystem: InputSystem | null = null;\n private objectManagementSystem: ObjectManagementSystem | null = null;\n private environmentSyncSystem: EnvironmentSyncSystem | null = null;\n private postprocessingSyncSystem: PostprocessingSyncSystem | null = null;\n private rapierModule: typeof RAPIER | null = null;\n private rapierModulePromise: Promise<typeof RAPIER> | null = null;\n private physicsWorld: RAPIER.World | null = null;\n\n private isEditor = false;\n private paused = false;\n\n constructor(options: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n renderer: THREE.WebGLRenderer;\n featureFlags?: WorldFeatureFlags;\n }) {\n this.scene = options.scene;\n this.camera = options.camera;\n this.renderer = options.renderer;\n this.featureFlags = {\n supportSkybox: options.featureFlags?.supportSkybox ?? true,\n supportPostprocessing:\n options.featureFlags?.supportPostprocessing ?? true,\n };\n\n // Ensure runtime previews render mesh and light shadow settings consistently.\n this.renderer.shadowMap.enabled = true;\n }\n\n createEntity(): EntityId {\n const entityId = this.nextEntityId;\n this.nextEntityId += 1;\n this.entities.add(entityId);\n this.emitStoreChanged();\n return entityId;\n }\n\n destroyEntity(entityId: EntityId): void {\n if (!this.entities.has(entityId)) {\n return;\n }\n\n this.entities.delete(entityId);\n\n for (const store of this.components.values()) {\n store.delete(entityId);\n }\n\n if (this.getSelectedEntity() === entityId) {\n this.setSelectedEntity(null);\n }\n\n this.emitStoreChanged();\n }\n\n private getSelectionState(): SelectionTransformState | undefined {\n const entityId = this.query(SelectionTransformState)[0];\n if (entityId === undefined) {\n return undefined;\n }\n\n return this.getComponent(entityId, SelectionTransformState);\n }\n\n hasEntity(entityId: EntityId): boolean {\n return this.entities.has(entityId);\n }\n\n getEntities(): EntityId[] {\n return [...this.entities];\n }\n\n getEntityCount(): number {\n return this.entities.size;\n }\n\n addComponent<T extends Component>(entityId: EntityId, component: T): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n this.emitStoreChanged();\n }\n\n addComponents<T extends Component>(\n entityId: EntityId,\n components: T[],\n ): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n for (const component of components) {\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n }\n\n this.emitStoreChanged();\n }\n\n removeComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): void {\n this.components.get(componentType)?.delete(entityId);\n this.emitStoreChanged();\n }\n\n getComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): T | undefined {\n return this.components.get(componentType)?.get(entityId) as T | undefined;\n }\n\n hasComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): boolean {\n return this.components.get(componentType)?.has(entityId) ?? false;\n }\n\n query(...componentTypes: ComponentClass<AnyComponent>[]): EntityId[] {\n return [...this.entities].filter((entityId) =>\n componentTypes.every((componentType) =>\n this.components.get(componentType)?.has(entityId),\n ),\n );\n }\n\n /**\n * Returns `true` if the entity is currently visible (its `Object3DRef.visibility`\n * is `true`), or if the entity has no `Object3DRef` component (entities without a\n * scene object are always considered active). Systems use this to skip per-entity\n * updates for hidden objects.\n */\n isEntityVisible(entityId: EntityId): boolean {\n const objectRef = this.getComponent(entityId, Object3DRef);\n return objectRef ? objectRef.visibility : true;\n }\n\n getInputSystem(): EcsSystem | null {\n if (this.inputSystem !== null) return this.inputSystem;\n\n const inputSystem = this.systems.find(\n (system) => system.constructor.name === \"InputSystem\",\n );\n\n this.inputSystem = inputSystem as InputSystem;\n\n return inputSystem ?? null;\n }\n\n getKeyDown(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyDown(key);\n }\n\n getKeyUp(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyUp(key);\n }\n\n getKey(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKey(key);\n }\n\n getMouse(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouse(button);\n }\n\n getMouseDown(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseDown(button);\n }\n\n getMouseUp(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseUp(button);\n }\n\n getScrollClick(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClick();\n }\n\n getScrollClickDown(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickDown();\n }\n\n getScrollClickUp(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickUp();\n }\n\n getScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getScrollDelta();\n }\n\n consumeScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeScrollDelta();\n }\n\n getMousePosition(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMousePosition();\n }\n\n getMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMouseDelta();\n }\n\n consumeMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeMouseDelta();\n }\n\n async getRapierModule(): Promise<typeof RAPIER> {\n if (this.rapierModule) {\n return this.rapierModule;\n }\n\n if (!this.rapierModulePromise) {\n this.rapierModulePromise = import(\"@dimforge/rapier3d-compat\").then(\n async (moduleValue) => {\n await moduleValue.init();\n this.rapierModule = moduleValue;\n return moduleValue;\n },\n );\n }\n\n return this.rapierModulePromise;\n }\n\n getPhysicsWorld(): RAPIER.World | null {\n return this.physicsWorld;\n }\n\n setPhysicsWorld(physicsWorld: RAPIER.World | null): void {\n this.physicsWorld = physicsWorld;\n }\n\n async createPhysicsWorld(options?: {\n gravity?: { x?: number; y?: number; z?: number };\n }): Promise<RAPIER.World | null> {\n if (this.physicsWorld) {\n return this.physicsWorld;\n }\n\n const RAPIER = await this.getRapierModule();\n const gravity = options?.gravity;\n const gravityVector = new RAPIER.Vector3(\n typeof gravity?.x === \"number\" ? gravity.x : 0,\n typeof gravity?.y === \"number\" ? gravity.y : -9.81,\n typeof gravity?.z === \"number\" ? gravity.z : 0,\n );\n\n this.physicsWorld = new RAPIER.World(gravityVector);\n return this.physicsWorld;\n }\n\n lockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).lockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (typeof this.renderer.domElement.requestPointerLock !== \"function\") {\n return false;\n }\n\n try {\n const result = this.renderer.domElement.requestPointerLock();\n // Modern browsers (including Safari) return a Promise that rejects\n // when the call happens outside a user gesture. Absorb the rejection\n // so it does not surface as an unhandled promise rejection.\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n return true;\n } catch {\n return false;\n }\n }\n\n unlockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n return (inputSystem as InputSystem).unlockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (\n !document.pointerLockElement ||\n typeof document.exitPointerLock !== \"function\"\n ) {\n return false;\n }\n\n document.exitPointerLock();\n return true;\n }\n\n isMousePointerLocked(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).isMousePointerLocked();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n return document.pointerLockElement === this.renderer.domElement;\n }\n\n getSystem<T extends EcsSystem>(system: T): T {\n const resolvedSystem = this.systems.find((candidate) => {\n return (\n candidate === system || candidate.constructor === system.constructor\n );\n });\n\n if (!resolvedSystem) {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n throw new Error(\n `System '${systemName}' is not registered in this world.`,\n );\n }\n\n return resolvedSystem as T;\n }\n\n hasSystem<T extends EcsSystem>(system: T): boolean {\n return (\n this.systems.includes(system) ||\n this.systems.some(\n (candidate) => candidate.constructor === system.constructor,\n )\n );\n }\n\n addSystem(system: EcsSystem): void {\n this.systems.push(system);\n }\n\n addSystems(systems: EcsSystem[]): void {\n for (const system of systems) {\n this.addSystem(system);\n }\n }\n\n setup({ systems, isEditor }: { systems: EcsSystem[]; isEditor?: boolean }): {\n objectManagementSystem: ObjectManagementSystem;\n transformSyncSystem: TransformSyncSystem;\n renderSystem: RenderSystem;\n } {\n const objectManagementSystem = new ObjectManagementSystem(\n this.scene,\n this.camera,\n isEditor ?? false,\n );\n const meshGeometrySystem = new MeshGeometrySystem();\n const instancedMeshSystem = new InstancedMeshSystem();\n const environmentSyncSystem = this.featureFlags.supportSkybox\n ? new EnvironmentSyncSystem(this.scene)\n : null;\n const postprocessingSyncSystem = this.featureFlags.supportPostprocessing\n ? new PostprocessingSyncSystem(this.renderer, this.scene, this.camera)\n : null;\n const lightSyncSystem = new LightSyncSystem();\n const materialSyncSystem = new MaterialSyncSystem();\n const physicsSyncSystem = new PhysicsSyncSystem({\n isEditor: isEditor ?? false,\n });\n const animationSystem = new AnimationSystem();\n const audioSystem = new AudioSystem({ isEditor: isEditor ?? false });\n const videoSystem = new VideoSystem({ isEditor: isEditor ?? false });\n const cameraSyncSystem = new CameraSyncSystem();\n const transformSyncSystem = new TransformSyncSystem();\n const objectVisibilitySystem = new ObjectVisibilitySystem();\n const renderSystem = new RenderSystem(\n this.renderer,\n this.scene,\n this.camera,\n );\n\n registerDefaultFactories(objectManagementSystem);\n\n this.inputSystem = null;\n\n const coreSystems: EcsSystem[] = [\n objectManagementSystem,\n meshGeometrySystem,\n instancedMeshSystem,\n ];\n\n if (environmentSyncSystem) {\n coreSystems.push(environmentSyncSystem);\n }\n\n if (postprocessingSyncSystem) {\n coreSystems.push(postprocessingSyncSystem);\n }\n\n this.addSystems([\n ...coreSystems,\n physicsSyncSystem,\n ...systems,\n objectVisibilitySystem,\n lightSyncSystem,\n materialSyncSystem,\n animationSystem,\n audioSystem,\n videoSystem,\n cameraSyncSystem,\n transformSyncSystem,\n renderSystem,\n ]);\n\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n }\n\n this.isEditor = isEditor ?? false;\n\n this.objectManagementSystem = objectManagementSystem;\n this.environmentSyncSystem = environmentSyncSystem;\n this.postprocessingSyncSystem = postprocessingSyncSystem;\n\n return {\n objectManagementSystem,\n transformSyncSystem,\n renderSystem,\n };\n }\n\n isEditorMode(): boolean {\n return this.isEditor;\n }\n\n /**\n * Pauses world simulation. While paused, `update()` skips all system ticks so\n * physics, animation, scripts, and rendering stop advancing. The last rendered\n * frame remains frozen on-screen.\n *\n * Call {@link resume} to continue.\n */\n pause(): void {\n this.paused = true;\n }\n\n /**\n * Resumes world simulation after a previous {@link pause} call.\n * Has no effect if the world is not paused.\n */\n resume(): void {\n this.paused = false;\n }\n\n /**\n * Returns `true` if the world is currently paused.\n *\n * @example\n * ```ts\n * if (this.world.isPaused()) {\n * this.world.resume();\n * }\n * ```\n */\n isPaused(): boolean {\n return this.paused;\n }\n\n getScene(): THREE.Scene {\n return this.scene;\n }\n\n getCamera(): THREE.PerspectiveCamera {\n return this.camera;\n }\n\n getRenderer(): THREE.WebGLRenderer {\n return this.renderer;\n }\n\n update(deltaTime: number): void {\n if (this.paused) return;\n for (const system of this.systems) {\n system.update(this, deltaTime);\n }\n }\n\n dispose(): void {\n for (const system of this.systems) {\n system.dispose?.(this);\n }\n\n this.selectionListeners.clear();\n this.storeListeners.clear();\n this.physicsWorld = null;\n this.systems = [];\n this.paused = false;\n }\n\n setSelectedEntity(entityId: EntityId | null): void {\n const state = this.getSelectionState();\n if (!state) {\n return;\n }\n\n const nextEntityId =\n entityId !== null && this.entities.has(entityId) ? entityId : null;\n\n if (state.selectedEntityId === nextEntityId) {\n return;\n }\n\n state.selectedEntityId = nextEntityId;\n\n for (const listener of this.selectionListeners) {\n listener(nextEntityId);\n }\n\n this.emitStoreChanged();\n }\n\n getSelectedEntity(): EntityId | null {\n return this.getSelectionState()?.selectedEntityId ?? null;\n }\n\n private getEntityComponents(entityId: EntityId): Component[] {\n const components: Component[] = [];\n\n for (const store of this.components.values()) {\n const component = store.get(entityId);\n if (component) {\n components.push(component);\n }\n }\n\n return components;\n }\n\n private getEntityName(entityId: EntityId): string {\n const nameComponent = this.getComponent(entityId, Name);\n const name = nameComponent?.value?.trim();\n\n if (name) {\n return name;\n }\n\n return `Entity ${entityId}`;\n }\n\n private getEntityType(entityId: EntityId): string {\n const typeComponent = this.getComponent(entityId, EntityType);\n const type = typeComponent?.value?.trim();\n\n if (type) {\n return type;\n }\n\n return `EntityType ${entityId}`;\n }\n\n private getObject3d(entityId: EntityId): THREE.Object3D | null {\n const object3DRefComponent = this.getComponent(entityId, Object3DRef);\n const object = object3DRefComponent?.object;\n\n if (object) {\n return object;\n }\n\n return null;\n }\n\n private toEntityView(entityId: EntityId): WorldEntityView {\n return {\n entityId,\n name: this.getEntityName(entityId),\n object: this.getObject3d(entityId),\n type: this.getEntityType(entityId),\n components: this.getEntityComponents(entityId),\n };\n }\n\n getEntitiesByComponent(component: Component): WorldEntityView[] {\n const componentType = component.constructor as ComponentClass<AnyComponent>;\n const entityStore = this.components.get(componentType);\n\n if (!entityStore) {\n return [];\n }\n\n return [...entityStore.keys()]\n .filter((entityId) => this.entities.has(entityId))\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n getEntitiesByName(name: string): WorldEntityView[] {\n const searchName = name.trim();\n if (!searchName) {\n return [];\n }\n\n return this.getAllEntities().filter((entity) => entity.name === searchName);\n }\n\n getEntityByName(name: string): WorldEntityView | null {\n const [entity] = this.getEntitiesByName(name);\n return entity ?? null;\n }\n\n getEntityById(entityId: number): WorldEntityView | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n return this.toEntityView(entityId);\n }\n\n getEntitiesChildren(entityId: EntityId): WorldEntityView[] {\n const children: WorldEntityView[] = [];\n const entitiesWithParent = this.query(ParentId);\n \n for (const childId of entitiesWithParent) {\n const parentIdComponent = this.getComponent(childId, ParentId);\n if (parentIdComponent?.value === entityId) {\n children.push(this.toEntityView(childId));\n }\n }\n \n return children;\n }\n\n getEntitiesParent(entityId: EntityId): WorldEntityView | null {\n const parentIdComponent = this.getComponent(entityId, ParentId);\n \n if (!parentIdComponent || parentIdComponent.value === null) {\n return null;\n }\n \n return this.getEntityById(parentIdComponent.value);\n }\n\n /**\n * Instantiate a prefab asset into this world at runtime — see\n * {@link spawnPrefab}. Convenience wrapper so scripts and embedding apps\n * can spawn without reaching for the object management system.\n */\n spawnPrefab(\n source: SpawnPrefabSource,\n options?: SpawnPrefabOptions,\n ): Promise<EntityId> {\n return spawnPrefab(this, source, options);\n }\n\n /** Remove a spawned prefab instance (root + descendants). */\n despawnPrefab(rootEntityId: EntityId): number {\n return despawnPrefab(this, rootEntityId);\n }\n\n getObjectManagementSystem(): ObjectManagementSystem {\n if (this.objectManagementSystem) return this.objectManagementSystem;\n\n const objectManagementSystem = this.systems.find(\n (system) => system.constructor.name === \"ObjectManagementSystem\",\n );\n\n this.objectManagementSystem = objectManagementSystem as ObjectManagementSystem;\n\n return this.objectManagementSystem;\n }\n\n /**\n * Returns the singleton {@link Environment} component for the scene, or\n * `undefined` if no environment entity exists yet.\n *\n * Mutate `component.values` directly to change skybox, fog, or gravity at\n * runtime — `EnvironmentSyncSystem` picks up the changes next frame.\n *\n * @example\n * ```ts\n * const env = this.world.getEnvironmentComponent();\n * if (env) {\n * env.values.fog.type = \"exponential\";\n * env.values.fog.exponential.density = 0.01;\n * }\n * ```\n */\n getEnvironmentComponent(): Environment | undefined {\n const entityId = this.query(Environment)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Environment);\n }\n\n /**\n * Returns the singleton {@link Postprocessing} component for the scene, or\n * `undefined` if no postprocessing entity exists yet.\n *\n * Mutate `component.values` directly to enable/disable effects or tweak\n * parameters at runtime — `PostprocessingSyncSystem` picks up the changes\n * next frame.\n *\n * @example\n * ```ts\n * const pp = this.world.getPostprocessingComponent();\n * if (pp) {\n * pp.values.bloom.enabled = true;\n * pp.values.bloom.intensity = 2.0;\n * }\n * ```\n */\n getPostprocessingComponent(): Postprocessing | undefined {\n const entityId = this.query(Postprocessing)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Postprocessing);\n }\n\n /**\n * Cast a ray from `origin` along `direction` and return every intersected\n * entity-bound mesh, sorted by distance. Each result is a standard\n * `THREE.Intersection` augmented with the owning `entityId` (or `null` if\n * the hit object is not part of any tracked entity).\n *\n * @param origin - World-space origin of the ray (`THREE.Vector3` or\n * `{ x, y, z }`).\n * @param direction - World-space direction of the ray. Will be normalized\n * internally; magnitude is ignored.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycast(\n * { x: 0, y: 1, z: 0 },\n * { x: 0, y: 0, z: -1 },\n * );\n * if (hits[0]?.entityId !== null) {\n * console.log(\"hit entity\", hits[0].entityId, \"at\", hits[0].point);\n * }\n * ```\n */\n raycast(\n origin: Vec3,\n direction: Vec3,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const rayOrigin = new THREE.Vector3(origin.x, origin.y, origin.z);\n const rayDirection = new THREE.Vector3(\n direction.x,\n direction.y,\n direction.z,\n );\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n rayDirection.normalize();\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections.map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n );\n }\n\n /**\n * Cast a ray from an entity's world-space position along its forward\n * direction (the +Z axis of its world matrix). Returns intersected\n * entity-bound meshes sorted by distance, with the source entity itself\n * filtered out so the ray does not hit the caster.\n *\n * @param entityId - Entity to cast the ray from. Must have an `Object3DRef`.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycastFrom(this.entityId, 0, 50);\n * const closest = hits[0];\n * if (closest && closest.entityId !== null) {\n * console.log(\"looking at\", closest.entityId);\n * }\n * ```\n */\n raycastFrom(\n entityId: EntityId,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const sourceObject = this.getObject3d(entityId);\n if (!sourceObject) {\n return [];\n }\n\n const rayOrigin = new THREE.Vector3();\n const rayDirection = new THREE.Vector3();\n sourceObject.getWorldPosition(rayOrigin);\n sourceObject.getWorldDirection(rayDirection);\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections\n .map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n )\n .filter((result) => result.entityId !== entityId);\n }\n\n private buildObjectToEntityMap(): Map<THREE.Object3D, EntityId> {\n const map = new Map<THREE.Object3D, EntityId>();\n const store = this.components.get(\n Object3DRef as unknown as ComponentClass<AnyComponent>,\n );\n\n if (!store) {\n return map;\n }\n\n for (const [entityId, component] of store) {\n const object = (component as Object3DRef).object;\n if (object) {\n map.set(object, entityId);\n }\n }\n\n return map;\n }\n\n private resolveEntityForObject(\n object: THREE.Object3D,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): EntityId | null {\n let current: THREE.Object3D | null = object;\n while (current) {\n const entityId = objectToEntity.get(current);\n if (entityId !== undefined) {\n return entityId;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private toIntersectionResult(\n intersection: THREE.Intersection,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): IntersectionResult {\n return {\n entityId: this.resolveEntityForObject(\n intersection.object,\n objectToEntity,\n ),\n threeResult: intersection,\n };\n }\n\n getEntityScript<T = unknown>(entityId: number): T | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent || scriptComponent.scriptInstance === null) {\n return null;\n }\n\n return scriptComponent.scriptInstance as T;\n }\n\n getScripts<T = unknown>(className: string): T[] {\n const normalizedClassName = className.trim();\n if (!normalizedClassName) {\n return [];\n }\n\n const scriptEntityIds = this.query(ScriptComponent);\n const instances: T[] = [];\n\n for (const entityId of scriptEntityIds) {\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent) {\n continue;\n }\n\n const hasClassMatch = Array.isArray(scriptComponent.entries)\n ? scriptComponent.entries.some((entry) => {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n\n const classNameValue = (entry as { className?: unknown }).className;\n return (\n typeof classNameValue === \"string\" &&\n classNameValue === normalizedClassName\n );\n })\n : false;\n\n if (!hasClassMatch) {\n continue;\n }\n\n if (scriptComponent.scriptInstance !== null) {\n instances.push(scriptComponent.scriptInstance as T);\n }\n }\n\n return instances;\n }\n\n getScript<T = unknown>(className: string): T | null {\n const [instance] = this.getScripts<T>(className);\n return instance ?? null;\n }\n\n getAllEntities(): WorldEntityView[] {\n return [...this.entities]\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n onSelectionChanged(listener: SelectionListener): () => void {\n this.selectionListeners.add(listener);\n\n return () => {\n this.selectionListeners.delete(listener);\n };\n }\n\n subscribe(listener: StoreListener): () => void {\n this.storeListeners.add(listener);\n\n return () => {\n this.storeListeners.delete(listener);\n };\n }\n\n getDebugSnapshot(maxDepth = 3): unknown {\n const components = [...this.components.entries()]\n .map(([componentClass, store]) => {\n return {\n component: componentClass.name,\n entries: [...store.entries()]\n .map(([entityId, component]) => {\n return {\n entityId,\n value: normalizeDebugValue(component, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n })\n .sort((a, b) => a.entityId - b.entityId),\n };\n })\n .sort((a, b) => a.component.localeCompare(b.component));\n\n const systems = this.systems\n .map((system) => {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n return {\n system,\n systemName,\n };\n })\n .filter(({ systemName }) => !DEBUG_CHANGE_IGNORED_SYSTEMS.has(systemName))\n .map(({ system, systemName }) => {\n return {\n system: systemName,\n state: normalizeDebugValue(system, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n });\n\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities].sort((a, b) => a - b),\n nextEntityId: this.nextEntityId,\n components,\n systems,\n };\n }\n\n getDebugSignature(maxDepth = 3): string {\n return JSON.stringify(this.getDebugSnapshot(maxDepth));\n }\n\n /**\n * Serialize ONLY the given entities into the same columnar\n * `{entities, components}` shape as {@link getDebugSnapshot} (no systems,\n * no selection). Used by prefab/scene subtree serialization.\n */\n getEntitiesSnapshot(\n entityIds: EntityId[],\n maxDepth = 10,\n ): {\n entities: number[];\n components: Array<{\n component: string;\n entries: Array<{ entityId: number; value: unknown }>;\n }>;\n } {\n const idSet = new Set(entityIds);\n\n const components = [...this.components.entries()]\n .map(([componentClass, store]) => {\n return {\n component: componentClass.name,\n entries: [...store.entries()]\n .filter(([entityId]) => idSet.has(entityId))\n .map(([entityId, component]) => {\n return {\n entityId,\n value: normalizeDebugValue(component, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n })\n .sort((a, b) => a.entityId - b.entityId),\n };\n })\n .filter(({ entries }) => entries.length > 0)\n .sort((a, b) => a.component.localeCompare(b.component));\n\n return {\n entities: [...this.entities]\n .filter((entityId) => idSet.has(entityId))\n .sort((a, b) => a - b),\n components,\n };\n }\n\n createHistorySnapshot(): WorldHistorySnapshot {\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities],\n nextEntityId: this.nextEntityId,\n components: [...this.components.entries()].map(\n ([componentType, store]) => {\n return {\n componentType,\n entries: [...store.entries()].map(([entityId, component]) => {\n return {\n entityId,\n component: cloneHistoryValue(component),\n };\n }),\n };\n },\n ),\n };\n }\n\n applyHistorySnapshot(snapshot: WorldHistorySnapshot): void {\n const previousSelectedEntityId = this.getSelectedEntity();\n\n this.nextEntityId = snapshot.nextEntityId;\n this.entities = new Set(snapshot.entities);\n\n const nextComponents = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n for (const componentBlock of snapshot.components) {\n const store = new Map<EntityId, AnyComponent>();\n for (const entry of componentBlock.entries) {\n if (!this.entities.has(entry.entityId)) {\n continue;\n }\n\n store.set(entry.entityId, cloneHistoryValue(entry.component));\n }\n\n nextComponents.set(componentBlock.componentType, store);\n }\n\n this.components = nextComponents;\n\n const selectionState = this.getSelectionState();\n const nextSelectedEntityId =\n snapshot.selectedEntityId !== null &&\n this.entities.has(snapshot.selectedEntityId)\n ? snapshot.selectedEntityId\n : null;\n\n if (selectionState) {\n selectionState.selectedEntityId = nextSelectedEntityId;\n }\n\n const selectionChanged = previousSelectedEntityId !== nextSelectedEntityId;\n\n if (selectionChanged) {\n for (const listener of this.selectionListeners) {\n listener(nextSelectedEntityId);\n }\n }\n\n this.emitStoreChanged();\n }\n\n private emitStoreChanged(): void {\n for (const listener of this.storeListeners) {\n listener();\n }\n }\n}\n","/**\n * Snapshot-space entity-id walking/remapping.\n *\n * This module is the single source of truth for WHERE entity ids live inside\n * a serialized world snapshot:\n * - `ParentId.value`\n * - `ScriptComponent.entries[].data` EntityInput (`{type:\"entity\", value}`)\n * and ComponentInput (`{type:\"component\", value:{entityId, …}}`)\n * - `InstancedMeshComponent.instanceEntityIds[]`\n * - `InstanceSlotComponent.groupEntityId`\n *\n * Any new id-bearing component field must be added here — serialization,\n * instantiation and the override differ all route through this walker.\n */\n\nexport type SubtreeSnapshot = {\n entities: number[];\n components: Array<{\n component: string;\n entries: Array<{ entityId: number; value: unknown }>;\n }>;\n};\n\nexport type ExternalRefWarning = {\n /** Entity id (in the INPUT snapshot's id space) holding the reference. */\n entityId: number;\n component: string;\n /** Slash-separated path of the reference inside the component value. */\n path: string;\n /** The referenced entity id that falls outside the id map. */\n targetId: number;\n};\n\nexport type RemapSnapshotOptions = {\n /**\n * What to do with references to entities NOT present in the id map:\n * - \"null\": replace the reference with null and record a warning\n * (prefab-file serialization — external refs must not leak).\n * - \"keep\": leave the raw id untouched and record a warning.\n * Default: \"keep\".\n */\n externalRefPolicy?: \"null\" | \"keep\";\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n\nfunction remapScriptData(\n data: Record<string, unknown>,\n idMap: Map<number, number>,\n nullExternal: boolean,\n onExternal: (path: string, targetId: number) => void,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n const record = asRecord(value);\n if (!record) {\n result[key] = value;\n continue;\n }\n\n if (record.type === \"entity\" && typeof record.value === \"number\") {\n const mapped = idMap.get(record.value);\n if (mapped !== undefined) {\n result[key] = { ...record, value: mapped };\n } else {\n onExternal(`data/${key}`, record.value);\n result[key] = nullExternal ? { ...record, value: null } : value;\n }\n continue;\n }\n\n const componentRef = asRecord(record.value);\n if (\n record.type === \"component\" &&\n componentRef &&\n typeof componentRef.entityId === \"number\"\n ) {\n const mapped = idMap.get(componentRef.entityId);\n if (mapped !== undefined) {\n result[key] = {\n ...record,\n value: { ...componentRef, entityId: mapped },\n };\n } else {\n onExternal(`data/${key}`, componentRef.entityId);\n result[key] = nullExternal ? { ...record, value: null } : value;\n }\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Return a deep-cloned snapshot with every entity id (entity list, entry\n * keys, and all id-bearing component fields) remapped through `idMap`.\n * References to ids missing from the map follow `externalRefPolicy` and are\n * reported in `warnings` (with ids in the INPUT snapshot's id space).\n */\nexport function remapSnapshotEntityIds(\n snapshot: SubtreeSnapshot,\n idMap: Map<number, number>,\n options?: RemapSnapshotOptions,\n): { snapshot: SubtreeSnapshot; warnings: ExternalRefWarning[] } {\n const nullExternal = options?.externalRefPolicy === \"null\";\n const warnings: ExternalRefWarning[] = [];\n\n const entities = snapshot.entities.map(\n (entityId) => idMap.get(entityId) ?? entityId,\n );\n\n const components = snapshot.components.map((block) => {\n const entries = block.entries.map((entry) => {\n const sourceEntityId = entry.entityId;\n const mappedEntityId = idMap.get(sourceEntityId) ?? sourceEntityId;\n const warn = (path: string, targetId: number) => {\n warnings.push({\n entityId: sourceEntityId,\n component: block.component,\n path,\n targetId,\n });\n };\n\n // Deep clone so callers never share references with the input.\n let value: unknown = structuredClone(entry.value);\n const record = asRecord(value);\n\n if (block.component === \"ParentId\" && record) {\n if (typeof record.value === \"number\") {\n const mapped = idMap.get(record.value);\n if (mapped !== undefined) {\n record.value = mapped;\n } else {\n warn(\"value\", record.value);\n if (nullExternal) {\n record.value = null;\n }\n }\n }\n } else if (block.component === \"ScriptComponent\" && record) {\n if (Array.isArray(record.entries)) {\n record.entries = record.entries.map((rawEntry, index) => {\n const entryRecord = asRecord(rawEntry);\n if (!entryRecord) {\n return rawEntry;\n }\n const data = asRecord(entryRecord.data);\n if (!data) {\n return rawEntry;\n }\n return {\n ...entryRecord,\n data: remapScriptData(data, idMap, nullExternal, (path, target) =>\n warn(`entries/${index}/${path}`, target),\n ),\n };\n });\n }\n } else if (block.component === \"InstancedMeshComponent\" && record) {\n if (Array.isArray(record.instanceEntityIds)) {\n const remapped: number[] = [];\n record.instanceEntityIds.forEach((rawId, index) => {\n if (typeof rawId !== \"number\") {\n return;\n }\n const mapped = idMap.get(rawId);\n if (mapped !== undefined) {\n remapped.push(mapped);\n } else {\n warn(`instanceEntityIds/${index}`, rawId);\n if (!nullExternal) {\n remapped.push(rawId);\n }\n }\n });\n record.instanceEntityIds = remapped;\n }\n } else if (block.component === \"InstanceSlotComponent\" && record) {\n if (\n typeof record.groupEntityId === \"number\" &&\n record.groupEntityId !== -1\n ) {\n const mapped = idMap.get(record.groupEntityId);\n if (mapped !== undefined) {\n record.groupEntityId = mapped;\n } else {\n warn(\"groupEntityId\", record.groupEntityId);\n if (nullExternal) {\n record.groupEntityId = -1;\n }\n }\n }\n }\n\n value = record ?? value;\n return { entityId: mappedEntityId, value };\n });\n\n return { component: block.component, entries };\n });\n\n return { snapshot: { entities, components }, warnings };\n}\n","import type { EntityId } from \"../types\";\nimport type { World } from \"../World\";\nimport { collectEntitySubtree } from \"./collectEntitySubtree\";\nimport {\n remapSnapshotEntityIds,\n type ExternalRefWarning,\n type SubtreeSnapshot,\n} from \"./snapshotIdUtils\";\n\n/**\n * Components that never belong inside a prefab/scene-subtree file:\n * scene singletons and editor/session-local state. `PrefabInstance` is the\n * link FROM a scene instance TO its asset — the asset itself must not carry\n * one (that would be a nested-prefab reference, unsupported in v1).\n */\nconst SUBTREE_EXCLUDED_COMPONENTS = new Set([\n \"Environment\",\n \"Postprocessing\",\n \"SelectionTransformState\",\n \"PrefabInstance\",\n]);\n\nexport type SerializeEntitySubtreeResult = {\n snapshot: SubtreeSnapshot;\n /**\n * References that pointed OUTSIDE the subtree and were nulled out\n * (ids are LIVE world ids so callers can name the offending entities).\n * The root's own external parent link is nulled silently — it is expected.\n */\n warnings: ExternalRefWarning[];\n /** Component types stripped because they are scene singletons. */\n strippedComponents: string[];\n};\n\n/**\n * Serialize `rootId` + all descendants into a self-contained snapshot:\n * entity ids renumbered 1..N in BFS parent-first order, all internal id\n * references remapped, external references nulled + reported, root ParentId\n * forced to null. The result is directly consumable by\n * `hydrateWorldFromSnapshotDetailed` / `instantiateSubtree`.\n */\nexport function serializeEntitySubtree(\n world: World,\n rootId: EntityId,\n options?: { maxDepth?: number },\n): SerializeEntitySubtreeResult {\n const orderedIds = collectEntitySubtree(world, [rootId]);\n const raw = world.getEntitiesSnapshot(orderedIds, options?.maxDepth ?? 10);\n\n const strippedComponents: string[] = [];\n const components = raw.components.filter((block) => {\n if (SUBTREE_EXCLUDED_COMPONENTS.has(block.component)) {\n strippedComponents.push(block.component);\n return false;\n }\n return true;\n });\n\n // Renumber 1..N in BFS parent-first order for deterministic, diff-friendly\n // files (raw.entities is numerically sorted — use the traversal order).\n const idMap = new Map<number, number>();\n orderedIds.forEach((liveId, index) => {\n idMap.set(liveId, index + 1);\n });\n\n const { snapshot, warnings } = remapSnapshotEntityIds(\n { entities: orderedIds.slice(), components },\n idMap,\n { externalRefPolicy: \"null\" },\n );\n\n // The root's parent naturally lives outside the subtree: null it silently.\n const rootFileId = 1;\n const parentBlock = snapshot.components.find(\n (block) => block.component === \"ParentId\",\n );\n const rootParentEntry = parentBlock?.entries.find(\n (entry) => entry.entityId === rootFileId,\n );\n if (\n rootParentEntry &&\n rootParentEntry.value !== null &&\n typeof rootParentEntry.value === \"object\"\n ) {\n (rootParentEntry.value as Record<string, unknown>).value = null;\n }\n\n const filteredWarnings = warnings.filter(\n (warning) =>\n !(warning.component === \"ParentId\" && warning.entityId === rootId),\n );\n\n return { snapshot, warnings: filteredWarnings, strippedComponents };\n}\n"]}
1
+ {"version":3,"sources":["../core/Component.ts","../core/worldSnapshotUtils.ts","../core/AnimationStateMachine.ts","../core/components/Animation.ts","../core/factories/components/AnimationFactory.ts","../core/components/Audio.ts","../core/factories/components/AudioComponentFactory.ts","../core/components/Camera.ts","../core/components/Object3DRef.ts","../core/factories/components/CameraFactory.ts","../core/components/Physics.ts","../core/components/MeshGeometry.ts","../core/factories/components/PhysicsFactory.ts","../core/components/Environment.ts","../core/factories/components/EnvironmentFactory.ts","../core/components/EntityType.ts","../core/factories/components/EntityTypeFactory.ts","../core/components/Image.ts","../core/factories/components/ImageComponentFactory.ts","../core/components/ImageTargetAnchor.ts","../core/factories/components/ImageTargetAnchorFactory.ts","../core/components/ImageTarget.ts","../core/factories/components/ImageTargetFactory.ts","../core/components/Light.ts","../core/factories/components/LightFactory.ts","../core/components/Material.ts","../core/factories/components/MaterialFactory.ts","../core/components/Mesh.ts","../core/factories/components/MeshFactory.ts","../core/factories/components/MeshGeometryFactory.ts","../core/components/Model.ts","../core/factories/components/ModelFactory.ts","../core/components/Name.ts","../core/factories/components/NameFactory.ts","../core/factories/components/Object3DRefFactory.ts","../core/components/ParentId.ts","../core/factories/components/ParentIdFactory.ts","../core/components/Postprocessing.ts","../core/factories/components/PostprocessingFactory.ts","../core/components/ScriptComponent.ts","../core/factories/components/ScriptComponentFactory.ts","../core/components/Selectable.ts","../core/factories/components/SelectableFactory.ts","../core/components/SelectionTransformState.ts","../core/factories/components/SelectionTransformStateFactory.ts","../core/components/Sprite.ts","../core/factories/components/SpriteFactory.ts","../core/components/Transform.ts","../core/factories/components/TransformFactory.ts","../core/components/InstancedMesh.ts","../core/factories/components/InstancedMeshComponentFactory.ts","../core/components/InstanceSlotComponent.ts","../core/factories/components/InstanceSlotComponentFactory.ts","../core/components/Video.ts","../core/factories/components/VideoFactory.ts","../core/factories/registerDefaultComponentFactories.ts","../core/utils/modelCache.ts","../core/systems/ObjectManagementSystem.ts","../core/factories/objects/shared.ts","../core/factories/objects/AudioFactory.ts","../core/factories/objects/CameraFactory.ts","../core/factories/objects/CapsuleFactory.ts","../core/factories/objects/CubeFactory.ts","../core/factories/objects/CylinderFactory.ts","../core/factories/objects/EmptyFactory.ts","../core/factories/objects/ImageFactory.ts","../core/factories/objects/ImageTargetFactory.ts","../core/factories/objects/InstancedMeshFactory.ts","../core/factories/objects/InstanceSlotFactory.ts","../core/factories/objects/lights/AmbientLightFactory.ts","../core/factories/objects/lights/AreaLightFactory.ts","../core/factories/objects/lights/DirectionalLightFactory.ts","../core/factories/objects/lights/PointLightFactory.ts","../core/factories/objects/lights/SpotLightFactory.ts","../core/utils/dracoDecoderPath.ts","../core/components/index.ts","../core/components/PrefabInstance.ts","../core/components/PrefabNode.ts","../core/factories/objects/ModelFactory.ts","../core/factories/objects/PlaneFactory.ts","../core/factories/objects/SpriteFactory.ts","../core/factories/objects/SphereFactory.ts","../core/factories/objects/VideoFactory.ts","../core/factories/registerDefaultFactories.ts","../core/prefab/collectEntitySubtree.ts","../core/hydration/readers.ts","../core/hydration/componentValues.ts","../core/hydration/parentLinks.ts","../core/hydration/postCreateComponents.ts","../core/hydration/animation.ts","../core/hydration/restoreComponentState.ts","../core/hydration/types.ts","../core/hydration/hydrateWorld.ts","../core/prefab/nodeKeys.ts","../core/prefab/overrides.ts","../core/prefab/instantiateSubtree.ts","../core/prefab/types.ts","../core/prefab/spawnPrefab.ts","../core/systems/AnimationSystem.ts","../core/systems/CameraSyncSystem.ts","../core/systems/ObjectVisibilitySystem.ts","../core/systems/EnvironmentSyncSystem.ts","../core/systems/PostprocessingSyncSystem.ts","../core/systems/PhysicsSyncSystem.ts","../core/systems/keyboardKeys.ts","../core/systems/InputSystem.ts","../core/systems/LightSyncSystem.ts","../core/systems/MaterialSyncSystem.ts","../core/systems/MeshGeometrySystem.ts","../core/utils/loader.ts","../core/systems/InstancedMeshSystem.ts","../core/systems/RenderSystem.ts","../core/Behaviour.ts","../core/systems/ScriptBehaviourSystem.ts","../core/systems/TransformSyncSystem.ts","../core/systems/AudioSystem.ts","../core/systems/VideoSystem.ts","../core/World.ts","../core/prefab/snapshotIdUtils.ts","../core/prefab/applyPrefabToSnapshot.ts","../core/prefab/dependencies.ts","../core/prefab/serializeEntitySubtree.ts"],"names":["cloneObject","THREE","THREE2","material","THREE3","THREE4","toFiniteNumber","THREE6","toHexColor","THREE7","asRecord","toBoolean","Vector3","Euler","Quaternion","THREE8","cloneWithSkeleton","THREE9","THREE10","DEFAULT_NEAR","DEFAULT_FAR","DEFAULT_FOV","THREE11","THREE12","THREE13","THREE14","THREE15","THREE16","THREE17","THREE18","THREE19","THREE20","RectAreaLightHelper","THREE21","THREE22","THREE23","GLTFLoader","DRACOLoader","THREE24","THREE25","THREE26","THREE27","getOrCreateListener","THREE28","normalizeDistanceModel","options","THREE29","FBXLoader","entries","THREE30","THREE31","EffectComposer","RenderPass","BokehPass","THREE32","UnrealBloomPass","ShaderPass","VignetteShader","HueSaturationShader","SepiaShader","FilmPass","DotScreenPass","SSAOPass","GlitchPass","OutputPass","THREE33","body","THREE34","THREE35","THREE36","THREE38","count","geometry","instancedMesh","THREE39","clone","THREE40","THREE41","snapshotOptions","THREE42","THREE43"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Marker base class for every ECS component. Subclass `Component` to declare\n * a typed data container that systems can query.\n *\n * @remarks\n * Components own state only — runtime behaviour belongs in {@link Behaviour}\n * subclasses for user scripts. Keep fields plain (numbers, strings, vectors,\n * asset URLs).\n *\n * @category Components\n */\nexport class Component {}\n\n","import { Component } from \"./Component\";\nimport type { EntityId } from \"./types\";\n\nexport type ComponentClass<T extends Component> = new (...args: never[]) => T;\nexport type AnyComponent = Component;\n\nexport type WorldHistorySnapshot = {\n selectedEntityId: EntityId | null;\n entities: EntityId[];\n nextEntityId: number;\n components: Array<{\n componentType: ComponentClass<AnyComponent>;\n entries: Array<{\n entityId: EntityId;\n component: AnyComponent;\n }>;\n }>;\n};\n\nexport const DEBUG_CHANGE_IGNORED_SYSTEMS = new Set<string>([\n \"OrbitCameraSystem\",\n \"PhysicsSyncSystem\",\n]);\n\ntype NormalizeContext = {\n seen: WeakSet<object>;\n depth: number;\n maxDepth: number;\n};\n\nexport function normalizeDebugValue(\n value: unknown,\n ctx: NormalizeContext,\n): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n const valueType = typeof value;\n if (\n valueType === \"string\" ||\n valueType === \"number\" ||\n valueType === \"boolean\"\n ) {\n return value;\n }\n\n if (valueType === \"function\") {\n const fn = value as (...args: unknown[]) => unknown;\n return `[Function:${fn.name || \"anonymous\"}]`;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (valueType !== \"object\") {\n return String(value);\n }\n\n const objectValue = value as Record<string, unknown>;\n\n const constructorName =\n objectValue.constructor?.name && objectValue.constructor.name !== \"Object\"\n ? objectValue.constructor.name\n : null;\n\n if (constructorName === \"AnimationClip\") {\n return {\n __type: \"AnimationClip\",\n name: typeof objectValue.name === \"string\" ? objectValue.name : \"\",\n };\n }\n\n if (constructorName === \"AnimationStateMachine\") {\n const clipValue =\n objectValue.clip && typeof objectValue.clip === \"object\"\n ? (objectValue.clip as Record<string, unknown>)\n : null;\n\n return {\n __type: \"AnimationStateMachine\",\n name: typeof objectValue.name === \"string\" ? objectValue.name : \"\",\n loop: Boolean(objectValue.loop),\n isPlaying: Boolean(objectValue.isPlaying),\n isPaused: Boolean(objectValue.isPaused),\n clip: {\n __type: \"AnimationClip\",\n name: typeof clipValue?.name === \"string\" ? clipValue.name : \"\",\n },\n };\n }\n\n if (constructorName === \"AnimationComponent\") {\n const clips = Array.isArray(objectValue.clips)\n ? objectValue.clips\n .map((clip) => {\n if (!clip || typeof clip !== \"object\") {\n return null;\n }\n\n const clipValue = clip as Record<string, unknown>;\n return {\n __type: \"AnimationClip\",\n name: typeof clipValue.name === \"string\" ? clipValue.name : \"\",\n };\n })\n .filter((clip): clip is { __type: \"AnimationClip\"; name: string } => clip !== null)\n : [];\n\n const availableClips = Array.isArray(objectValue.availableClips)\n ? objectValue.availableClips.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n )\n : clips.map((clip) => clip.name).filter((name) => name.length > 0);\n\n const externalClipSources = Array.isArray(objectValue.externalClipSources)\n ? objectValue.externalClipSources.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n )\n : [];\n\n const states = Array.isArray(objectValue.states)\n ? objectValue.states\n .map((state) => {\n if (!state || typeof state !== \"object\") {\n return null;\n }\n\n const stateValue = state as Record<string, unknown>;\n const clipValue =\n stateValue.clip && typeof stateValue.clip === \"object\"\n ? (stateValue.clip as Record<string, unknown>)\n : null;\n\n const name = typeof stateValue.name === \"string\" ? stateValue.name : \"\";\n const clip = typeof clipValue?.name === \"string\" ? clipValue.name : \"\";\n if (!name || !clip) {\n return null;\n }\n\n return {\n name,\n clip,\n clipId:\n typeof stateValue.clipId === \"string\" && stateValue.clipId.length > 0\n ? stateValue.clipId\n : null,\n loop: Boolean(stateValue.loop),\n };\n })\n .filter(\n (\n state,\n ): state is {\n name: string;\n clip: string;\n clipId: string | null;\n loop: boolean;\n } => state !== null,\n )\n : [];\n\n const activeValue =\n objectValue.active && typeof objectValue.active === \"object\"\n ? (objectValue.active as Record<string, unknown>)\n : null;\n\n const activeStateName =\n typeof objectValue.activeStateName === \"string\"\n ? objectValue.activeStateName\n : typeof activeValue?.name === \"string\"\n ? activeValue.name\n : null;\n\n return {\n __type: \"AnimationComponent\",\n clips,\n availableClips,\n externalClipSources,\n states,\n activeStateName,\n paused: Boolean(objectValue.paused),\n reverse: Boolean(objectValue.reverse),\n timeScale:\n typeof objectValue.timeScale === \"number\" && Number.isFinite(objectValue.timeScale)\n ? objectValue.timeScale\n : 1,\n crossFadeDuration:\n typeof objectValue.crossFadeDuration === \"number\" &&\n Number.isFinite(objectValue.crossFadeDuration)\n ? Math.max(0, objectValue.crossFadeDuration)\n : 0,\n };\n }\n if (constructorName === \"InstanceSlotComponent\") {\n return {\n __type: \"InstanceSlotComponent\",\n groupEntityId:\n typeof objectValue.groupEntityId === \"number\"\n ? objectValue.groupEntityId\n : -1,\n slotIndex:\n typeof objectValue.slotIndex === \"number\"\n ? objectValue.slotIndex\n : 0,\n };\n }\n if (constructorName === \"InstancedMeshComponent\") {\n // Only serialize the authoring fields. The live `instancedMesh` Three.js\n // ref changes on every geometry rebuild and must not enter the debug\n // snapshot — doing so would cause WorldChangeDetectionSystem to flood\n // the undo history with spurious entries.\n const imCtx: NormalizeContext = {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n };\n return {\n __type: \"InstancedMeshComponent\",\n meshKind: typeof objectValue.meshKind === \"string\" ? objectValue.meshKind : \"cube\",\n modelPath: typeof objectValue.modelPath === \"string\" ? objectValue.modelPath : \"\",\n meshParameters: normalizeDebugValue(objectValue.meshParameters, imCtx),\n castShadow: Boolean(objectValue.castShadow),\n receiveShadow: Boolean(objectValue.receiveShadow),\n instanceEntityIds: Array.isArray(objectValue.instanceEntityIds)\n ? [...(objectValue.instanceEntityIds as number[])]\n : [],\n };\n }\n\n if (constructorName === \"PhysicsComponent\") {\n // `collider` Rapier references change every physics frame and must not\n // be included in the debug snapshot, otherwise the WorldChangeDetection-\n // System would detect a change every frame and flood the undo history.\n return {\n __type: \"PhysicsComponent\",\n values: normalizeDebugValue(objectValue.values, {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n }),\n };\n }\n\n if (constructorName === \"MaterialComponent\") {\n // Only serialize the authoring `values` state. The live Three.js\n // `material` / `materials` objects mutate after transparency is toggled\n // (shader recompilation flags, `needsUpdate`, etc.) and must not be\n // included in the debug snapshot — doing so causes the\n // WorldChangeDetectionSystem to detect a spurious change every frame.\n return {\n __type: \"MaterialComponent\",\n values: normalizeDebugValue(objectValue.values, {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n }),\n // Editor-managed material-asset linkage (plain strings/nulls).\n assetRefs: Array.isArray(objectValue.assetRefs)\n ? [...(objectValue.assetRefs as (string | null)[])]\n : [],\n };\n }\n\n if (constructorName === \"VideoComponent\") {\n // Only serialize `path` and `options`. The live runtime fields\n // (`object`, `videoElement`, `texture`, `material`, `audioNode`) change\n // during video load/playback and must not be included in the debug\n // snapshot — doing so causes WorldChangeDetectionSystem to detect a\n // spurious change on every frame while a video is loading or playing.\n return {\n __type: \"VideoComponent\",\n path: typeof objectValue.path === \"string\" ? objectValue.path : \"\",\n options: normalizeDebugValue(objectValue.options, {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n }),\n };\n }\n\n if (ctx.seen.has(objectValue)) {\n return \"[Circular]\";\n }\n\n if (ctx.depth >= ctx.maxDepth) {\n return constructorName\n ? `[MaxDepth:${constructorName}]`\n : \"[MaxDepth:Object]\";\n }\n\n if (objectValue.nodeType === 1 && typeof objectValue.tagName === \"string\") {\n return `[HTMLElement:${String(objectValue.tagName)}]`;\n }\n\n if (objectValue.isObject3D === true) {\n const position = objectValue.position as\n | { x?: number; y?: number; z?: number }\n | undefined;\n\n return {\n __type: \"Object3D\",\n objectType: objectValue.type,\n name: objectValue.name,\n uuid: objectValue.uuid,\n position:\n position &&\n typeof position.x === \"number\" &&\n typeof position.y === \"number\" &&\n typeof position.z === \"number\"\n ? {\n x: position.x,\n y: position.y,\n z: position.z,\n }\n : undefined,\n };\n }\n\n ctx.seen.add(objectValue);\n const nextContext: NormalizeContext = {\n seen: ctx.seen,\n depth: ctx.depth + 1,\n maxDepth: ctx.maxDepth,\n };\n\n if (Array.isArray(objectValue)) {\n return objectValue.map((item) => normalizeDebugValue(item, nextContext));\n }\n\n if (objectValue instanceof Map) {\n return {\n __type: \"Map\",\n entries: [...objectValue.entries()].map(([key, mapValue]) => [\n normalizeDebugValue(key, nextContext),\n normalizeDebugValue(mapValue, nextContext),\n ]),\n };\n }\n\n if (objectValue instanceof Set) {\n return {\n __type: \"Set\",\n values: [...objectValue.values()].map((setValue) =>\n normalizeDebugValue(setValue, nextContext),\n ),\n };\n }\n\n const normalized: Record<string, unknown> = {};\n const keys = Object.keys(objectValue).sort((a, b) => a.localeCompare(b));\n for (const key of keys) {\n normalized[key] = normalizeDebugValue(objectValue[key], nextContext);\n }\n\n return constructorName\n ? {\n __type: constructorName,\n ...normalized,\n }\n : normalized;\n}\n\nfunction shouldPreserveReference(value: object): boolean {\n const objectValue = value as Record<string, unknown>;\n\n if (objectValue.isObject3D === true) {\n return true;\n }\n\n if (objectValue.nodeType === 1 && typeof objectValue.tagName === \"string\") {\n return true;\n }\n\n return false;\n}\n\nexport function cloneHistoryValue<T>(\n value: T,\n seen: WeakMap<object, unknown> = new WeakMap<object, unknown>(),\n): T {\n if (value === null || value === undefined) {\n return value;\n }\n\n const valueType = typeof value;\n if (\n valueType === \"string\" ||\n valueType === \"number\" ||\n valueType === \"boolean\" ||\n valueType === \"bigint\" ||\n valueType === \"symbol\" ||\n valueType === \"function\"\n ) {\n return value;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n\n if (valueType !== \"object\") {\n return value;\n }\n\n const objectValue = value as Record<string, unknown>;\n\n if (shouldPreserveReference(objectValue)) {\n return value;\n }\n\n const seenValue = seen.get(objectValue);\n if (seenValue !== undefined) {\n return seenValue as T;\n }\n\n if (Array.isArray(objectValue)) {\n const cloneArray: unknown[] = [];\n seen.set(objectValue, cloneArray);\n\n for (const item of objectValue) {\n cloneArray.push(cloneHistoryValue(item, seen));\n }\n\n return cloneArray as T;\n }\n\n const prototype = Object.getPrototypeOf(objectValue);\n const constructorName = objectValue.constructor?.name;\n const shouldCloneWithPrototype =\n objectValue instanceof Component ||\n prototype === Object.prototype ||\n prototype === null;\n\n if (!shouldCloneWithPrototype) {\n return value;\n }\n\n // Null out live Three.js refs on known components so history snapshots never\n // carry a stale/disposed reference that would cause ghost meshes on undo/redo.\n // InstancedMeshSystem tracks its own mesh ref internally for cleanup.\n if (constructorName === \"InstancedMeshComponent\") {\n const cloneObject = Object.create(prototype) as Record<string, unknown>;\n seen.set(objectValue, cloneObject);\n for (const key of Object.keys(objectValue)) {\n cloneObject[key] =\n key === \"instancedMesh\" ? null : cloneHistoryValue(objectValue[key], seen);\n }\n return cloneObject as T;\n }\n\n const cloneObject = Object.create(prototype) as Record<string, unknown>;\n seen.set(objectValue, cloneObject);\n\n for (const key of Object.keys(objectValue)) {\n cloneObject[key] = cloneHistoryValue(objectValue[key], seen);\n }\n\n return cloneObject as T;\n}\n","import type * as THREE from \"three\";\n\nexport interface StateMachine {\n name: string;\n clip: THREE.AnimationClip;\n clipId: string | null;\n loop: boolean;\n isPlaying: boolean;\n isPaused: boolean;\n onStart: () => void;\n onPlaying: () => void;\n onEnd: () => void;\n play: () => void;\n pause: () => void;\n stop: () => void;\n}\n\nexport type AnimationStateCallbacks = {\n onStart?: () => void;\n onPlaying?: () => void;\n onEnd?: () => void;\n};\n\nexport class AnimationStateMachine implements StateMachine {\n name: string;\n clip: THREE.AnimationClip;\n clipId: string | null;\n loop: boolean;\n isPlaying = false;\n isPaused = false;\n private callbacks: Required<AnimationStateCallbacks>;\n\n constructor(\n name: string,\n clip: THREE.AnimationClip,\n callbacks: AnimationStateCallbacks = {},\n loop = false,\n clipId: string | null = null,\n ) {\n this.name = name;\n this.clip = clip;\n this.clipId = clipId;\n this.loop = loop;\n this.callbacks = {\n onStart: callbacks.onStart ?? (() => {}),\n onPlaying: callbacks.onPlaying ?? (() => {}),\n onEnd: callbacks.onEnd ?? (() => {}),\n };\n }\n\n setCallbacks(callbacks: AnimationStateCallbacks): void {\n this.callbacks = {\n onStart: callbacks.onStart ?? this.callbacks.onStart,\n onPlaying: callbacks.onPlaying ?? this.callbacks.onPlaying,\n onEnd: callbacks.onEnd ?? this.callbacks.onEnd,\n };\n }\n\n setLoop(loop: boolean): void {\n this.loop = loop;\n }\n\n onStart(): void {\n this.callbacks.onStart();\n }\n\n onPlaying(): void {\n this.callbacks.onPlaying();\n }\n\n onEnd(): void {\n this.callbacks.onEnd();\n }\n\n play(): void {\n const wasPlaying = this.isPlaying;\n this.isPlaying = true;\n this.isPaused = false;\n\n if (!wasPlaying) {\n this.onStart();\n }\n\n this.onPlaying();\n }\n\n pause(): void {\n if (!this.isPlaying) {\n return;\n }\n\n this.isPlaying = false;\n this.isPaused = true;\n }\n\n stop(): void {\n const shouldNotifyEnd = this.isPlaying || this.isPaused;\n this.isPlaying = false;\n this.isPaused = false;\n\n if (shouldNotifyEnd) {\n this.onEnd();\n }\n }\n}\n\nexport class AnimationStateManager {\n private readonly states = new Map<string, AnimationStateMachine>();\n private activeState: AnimationStateMachine | null = null;\n\n addState(state: AnimationStateMachine): AnimationStateMachine {\n this.states.set(state.name, state);\n return state;\n }\n\n createState(\n name: string,\n clip: THREE.AnimationClip,\n callbacks: AnimationStateCallbacks = {},\n loop = false,\n clipId: string | null = null,\n ): AnimationStateMachine {\n const state = new AnimationStateMachine(name, clip, callbacks, loop, clipId);\n this.states.set(name, state);\n return state;\n }\n\n removeState(name: string): boolean {\n const state = this.states.get(name);\n if (!state) {\n return false;\n }\n\n if (this.activeState?.name === name) {\n this.activeState.stop();\n this.activeState = null;\n }\n\n return this.states.delete(name);\n }\n\n getState(name: string): AnimationStateMachine | null {\n return this.states.get(name) ?? null;\n }\n\n hasState(name: string): boolean {\n return this.states.has(name);\n }\n\n listStates(): AnimationStateMachine[] {\n return [...this.states.values()];\n }\n\n getActiveState(): AnimationStateMachine | null {\n return this.activeState;\n }\n\n switchState(name: string, autoPlay = true): AnimationStateMachine | null {\n const next = this.states.get(name) ?? null;\n if (!next) {\n return null;\n }\n\n if (this.activeState && this.activeState !== next) {\n this.activeState.stop();\n }\n\n this.activeState = next;\n if (autoPlay) {\n next.play();\n }\n\n return next;\n }\n\n playState(name?: string): boolean {\n const state = name ? this.switchState(name, false) : this.activeState;\n if (!state) {\n return false;\n }\n\n this.activeState = state;\n state.play();\n return true;\n }\n\n pauseState(name?: string): boolean {\n const state = name ? this.states.get(name) : this.activeState;\n if (!state) {\n return false;\n }\n\n state.pause();\n return true;\n }\n\n stopState(name?: string): boolean {\n const state = name ? this.states.get(name) : this.activeState;\n if (!state) {\n return false;\n }\n\n state.stop();\n if (!name || this.activeState?.name === name) {\n this.activeState = null;\n }\n return true;\n }\n\n clear(): void {\n this.stopState();\n this.states.clear();\n this.activeState = null;\n }\n}","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\nimport {\n AnimationStateManager,\n type AnimationStateMachine,\n} from \"../AnimationStateMachine\";\n\n/** Initializer for {@link AnimationComponent}. */\nexport type AnimationComponentOptions = {\n /** Initial set of clips imported from the entity's model. */\n clips?: THREE.AnimationClip[];\n /** URLs (or `localasset://` paths) of clips to load asynchronously and merge into the catalog. */\n externalClipSources?: string[];\n /** Name of the state to activate after construction. */\n activeState?: string | null;\n /** Whether playback starts paused. */\n paused?: boolean;\n /** Play the active clip in reverse. */\n reverse?: boolean;\n /** Time-scale multiplier (`1` = real-time). */\n timeScale?: number;\n /** Default cross-fade duration in seconds when switching states. */\n crossFadeDuration?: number;\n /** Predefined state machine entries (`name` -> clip binding). */\n states?: Array<{\n /** State name (must be unique). */\n name: string;\n /** Clip name to play in this state. */\n clip: string;\n /** Optional stable clip id used to disambiguate same-named clips. */\n clipId?: string;\n /** Loop the clip while in this state. */\n loop?: boolean;\n }>;\n};\n\n/** Catalog entry describing a clip available to the entity (from a model or an external source). */\nexport type AnimationClipCatalogEntry = {\n /** Stable id used to reference the clip from state machines. */\n id: string;\n /** Internal clip name as stored on the `THREE.AnimationClip`. */\n name: string;\n /** Display label shown in the inspector. */\n label: string;\n /** Underlying three.js clip. */\n clip: THREE.AnimationClip;\n /** Where this clip came from. */\n source: \"model\" | \"external\";\n /** Source URL/path for `external` clips; `null` for clips imported from a model. */\n sourceUrl: string | null;\n};\n\ntype ImportedClipEntry = {\n clip: THREE.AnimationClip;\n sourceUrl: string | null;\n};\n\n/**\n * Animation catalog and runtime state for an entity. Combines clips imported\n * from a model with externally added clips, exposes a state machine for\n * named transitions, and is queried each frame by the animation system to\n * advance mixer time.\n *\n * @remarks\n * Use the `addState` / `switchState` helpers rather than mutating the state\n * machine directly so the animation system observes transitions.\n *\n * @category Components\n */\nexport class AnimationComponent extends Component {\n private modelClips: THREE.AnimationClip[];\n private importedClips: ImportedClipEntry[];\n private clipById: Map<string, THREE.AnimationClip>;\n private clipEntriesById: Map<string, AnimationClipCatalogEntry>;\n\n /** Combined ordered list of clips (model + external) currently loaded. */\n clips: THREE.AnimationClip[];\n /** Per-clip metadata used by the inspector. */\n clipCatalog: AnimationClipCatalogEntry[];\n /** Display names of clips available for state-machine bindings. */\n availableClips: string[];\n /** URLs/paths of external clip sources (saved with the project). */\n externalClipSources: string[];\n /** Whether playback is currently paused. */\n paused: boolean;\n /** Play the active clip in reverse. */\n reverse: boolean;\n /** Playback speed multiplier (`1` = real-time). */\n timeScale: number;\n /** Default cross-fade duration in seconds when switching states. */\n crossFadeDuration: number;\n /** All state-machine entries authored on this entity. */\n states: AnimationStateMachine[];\n /** State currently being played, or `null` if none. */\n active: AnimationStateMachine | null;\n /** Name of the {@link active} state, or `null` if none. */\n activeStateName: string | null;\n /** Manager that drives state transitions; mutate via {@link addState}/{@link switchState}. */\n stateManager: AnimationStateManager;\n\n constructor(options: AnimationComponentOptions = {}) {\n super();\n\n this.modelClips = Array.isArray(options.clips) ? [...options.clips] : [];\n this.importedClips = [];\n this.clipById = new Map<string, THREE.AnimationClip>();\n this.clipEntriesById = new Map<string, AnimationClipCatalogEntry>();\n this.clips = [];\n this.clipCatalog = [];\n this.availableClips = [];\n this.externalClipSources = [];\n\n this.setExternalClipSources(options.externalClipSources ?? []);\n this.refreshClipCatalog();\n\n this.paused = options.paused ?? false;\n this.reverse = options.reverse ?? false;\n this.timeScale = options.timeScale ?? 1;\n this.crossFadeDuration = options.crossFadeDuration ?? 0;\n\n this.stateManager = new AnimationStateManager();\n this.states = this.stateManager.listStates();\n this.active = this.stateManager.getActiveState();\n this.activeStateName = this.active?.name ?? null;\n\n if (Array.isArray(options.states) && options.states.length > 0) {\n for (const entry of options.states) {\n this.addState(entry.name, entry.clip, entry.loop ?? false);\n }\n }\n // else {\n // for (const clip of this.clips) {\n // this.addState(clip.name || \"Default\", clip.name, false);\n // }\n // }\n\n if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n this.switchState(options.activeState, !this.paused);\n }\n }\n\n private refreshClipCatalog(): void {\n const catalog: AnimationClipCatalogEntry[] = [];\n const nameCounts = new Map<string, number>();\n const nextById = new Map<string, THREE.AnimationClip>();\n const nextEntriesById = new Map<string, AnimationClipCatalogEntry>();\n\n for (const [index, clip] of this.modelClips.entries()) {\n const name = typeof clip?.name === \"string\" && clip.name.length > 0\n ? clip.name\n : `Clip ${index + 1}`;\n const id = `model:${index}:${name}`;\n const count = (nameCounts.get(name) ?? 0) + 1;\n nameCounts.set(name, count);\n\n const entry: AnimationClipCatalogEntry = {\n id,\n name,\n label: count > 1 ? `${name} (${count})` : name,\n clip,\n source: \"model\",\n sourceUrl: null,\n };\n\n catalog.push(entry);\n nextById.set(id, clip);\n nextEntriesById.set(id, entry);\n }\n\n for (const [index, imported] of this.importedClips.entries()) {\n const clip = imported.clip;\n const name = typeof clip?.name === \"string\" && clip.name.length > 0\n ? clip.name\n : `Clip ${index + 1}`;\n const sourceUrl = imported.sourceUrl;\n const id = `external:${index}:${name}`;\n const count = (nameCounts.get(name) ?? 0) + 1;\n nameCounts.set(name, count);\n\n const sourceSuffix = sourceUrl\n ? sourceUrl.split(\"/\").pop() ?? sourceUrl\n : \"external\";\n\n const entry: AnimationClipCatalogEntry = {\n id,\n name,\n label:\n count > 1\n ? `${name} (${count}) • ${sourceSuffix}`\n : `${name} • ${sourceSuffix}`,\n clip,\n source: \"external\",\n sourceUrl,\n };\n\n catalog.push(entry);\n nextById.set(id, clip);\n nextEntriesById.set(id, entry);\n }\n\n this.clipById = nextById;\n this.clipEntriesById = nextEntriesById;\n this.clipCatalog = catalog;\n this.clips = catalog.map((entry) => entry.clip);\n this.availableClips = catalog.map((entry) => entry.name);\n }\n\n private refreshStateRefs(): void {\n this.states = this.stateManager.listStates();\n this.active = this.stateManager.getActiveState();\n this.activeStateName = this.active?.name ?? null;\n }\n\n private resolveClipRef(clipRef: string): { id: string; clip: THREE.AnimationClip } | null {\n const trimmed = clipRef.trim();\n if (!trimmed) {\n return null;\n }\n\n const byId = this.clipById.get(trimmed);\n if (byId) {\n return { id: trimmed, clip: byId };\n }\n\n const byName = this.clipCatalog.find((entry) => entry.name === trimmed);\n if (!byName) {\n return null;\n }\n\n return { id: byName.id, clip: byName.clip };\n }\n\n setModelClips(clips: THREE.AnimationClip[]): void {\n this.modelClips = Array.isArray(clips) ? [...clips] : [];\n this.refreshClipCatalog();\n }\n\n setImportedClips(\n clips: THREE.AnimationClip[] | ImportedClipEntry[],\n ): void {\n if (!Array.isArray(clips)) {\n this.importedClips = [];\n this.refreshClipCatalog();\n return;\n }\n\n this.importedClips = clips\n .map((entry) => {\n if (entry instanceof THREE.AnimationClip) {\n return { clip: entry, sourceUrl: null };\n }\n\n if (!entry || typeof entry !== \"object\") {\n return null;\n }\n\n const candidate = entry as Partial<ImportedClipEntry>;\n if (!(candidate.clip instanceof THREE.AnimationClip)) {\n return null;\n }\n\n return {\n clip: candidate.clip,\n sourceUrl:\n typeof candidate.sourceUrl === \"string\" && candidate.sourceUrl.length > 0\n ? candidate.sourceUrl\n : null,\n };\n })\n .filter((entry): entry is ImportedClipEntry => entry !== null);\n\n this.refreshClipCatalog();\n }\n\n setExternalClipSources(sources: string[]): void {\n if (!Array.isArray(sources)) {\n this.externalClipSources = [];\n return;\n }\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n for (const source of sources) {\n if (typeof source !== \"string\") {\n continue;\n }\n\n const trimmed = source.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n\n this.externalClipSources = normalized;\n }\n\n addState(name: string, clipRef: string, loop = false): AnimationStateMachine | null {\n if (!name.trim()) {\n return null;\n }\n\n const resolved = this.resolveClipRef(clipRef);\n if (!resolved) {\n return null;\n }\n\n const state = this.stateManager.createState(name, resolved.clip, {}, loop, resolved.id);\n this.refreshStateRefs();\n return state;\n }\n\n setStates(states: Array<{ name: string; clip: string; clipId?: string; loop?: boolean }>): void {\n const previousActive = this.activeStateName;\n this.stateManager.clear();\n\n for (const state of states) {\n if (!state.name.trim()) {\n continue;\n }\n\n let createdState: AnimationStateMachine | null = null;\n\n if (typeof state.clipId === \"string\" && state.clipId.trim().length > 0) {\n createdState = this.addState(state.name, state.clipId, Boolean(state.loop));\n }\n\n if (!createdState) {\n this.addState(state.name, state.clip, Boolean(state.loop));\n }\n }\n\n if (previousActive) {\n this.stateManager.switchState(previousActive, !this.paused);\n }\n\n this.refreshStateRefs();\n }\n\n getStateConfigs(): Array<{ name: string; clip: string; clipId: string | null; loop: boolean }> {\n return this.states.map((state) => ({\n name: state.name,\n clip: state.clip.name,\n clipId: state.clipId,\n loop: state.loop,\n }));\n }\n\n setActiveState(name: string | null, autoPlay = true): boolean {\n if (!name) {\n const stopped = this.stateManager.stopState();\n this.paused = true;\n this.refreshStateRefs();\n return stopped;\n }\n\n return this.switchState(name, autoPlay);\n }\n\n removeState(name: string): boolean {\n const removed = this.stateManager.removeState(name);\n if (removed) {\n this.refreshStateRefs();\n }\n return removed;\n }\n\n switchState(name: string, autoPlay = true): boolean {\n const state = this.stateManager.switchState(name, autoPlay);\n if (!state) {\n return false;\n }\n\n this.paused = !state.isPlaying;\n this.refreshStateRefs();\n return true;\n }\n\n playState(name?: string): boolean {\n const played = this.stateManager.playState(name);\n if (!played) {\n return false;\n }\n\n this.paused = false;\n this.refreshStateRefs();\n return true;\n }\n\n pauseState(name?: string): boolean {\n const paused = this.stateManager.pauseState(name);\n if (!paused) {\n return false;\n }\n\n this.paused = true;\n this.refreshStateRefs();\n return true;\n }\n\n stopState(name?: string): boolean {\n const stopped = this.stateManager.stopState(name);\n if (!stopped) {\n return false;\n }\n\n this.paused = true;\n this.refreshStateRefs();\n return true;\n }\n}\n","import { AnimationComponent } from \"../../components/Animation\";\nimport type { World } from \"../../World\";\n\nexport function createAnimationComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof AnimationComponent>\n): AnimationComponent {\n const component = new AnimationComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * @internal Default options applied when no override is provided.\n */\nconst DEFAULT_AUDIO_OPTIONS = {\n autoplay: false,\n loop: false,\n pitch: 1,\n volume: 1,\n positional: false,\n refDistance: 1,\n distanceModel: \"inverse\",\n rolloffFactor: 1,\n};\n\n/**\n * Plays an audio clip from `path`. Supports both global stereo (`positional:\n * false`) and 3D positional audio with the configured distance model.\n * Runtime fields (`object`, `audio`, `isPlaying`, `isPaused`) are recreated\n * when the project loads and are never persisted to saved snapshots.\n *\n * @category Components\n */\nexport class AudioComponent extends Component {\n /** Source URL or `localasset://` path of the audio file. */\n path: string;\n /**\n * Playback options.\n *\n * | Field | Default | Description |\n * |---|---|---|\n * | `autoplay` | `false` | Start playback as soon as the clip is loaded. |\n * | `loop` | `false` | Loop playback indefinitely. |\n * | `pitch` | `1` | Playback rate multiplier (`1` = normal speed/pitch). |\n * | `volume` | `1` | Linear gain in `[0, 1]`. |\n * | `positional` | `false` | When `true`, audio is spatialized using the entity's transform. |\n * | `refDistance` | `1` | Distance at which volume is unattenuated (positional only). |\n * | `distanceModel` | `\"inverse\"` | WebAudio distance model (`linear`, `inverse`, `exponential`). |\n * | `rolloffFactor` | `1` | How quickly volume falls off past `refDistance`. |\n */\n options: typeof DEFAULT_AUDIO_OPTIONS;\n /** Live three.js object hosting the audio (a parented `Audio`/`PositionalAudio`). `null` until built. */\n object: THREE.Object3D | null;\n /** Live three.js audio source. `null` until built. Recreated when the project loads. */\n audio: THREE.Audio<GainNode> | THREE.PositionalAudio | null;\n\n /**\n * Whether the audio should be playing. Managed by `AudioSystem` in preview.\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link play} / {@link stop}.\n */\n declare isPlaying: boolean;\n\n /**\n * Whether the audio is paused mid-playback (position is preserved).\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link pause} / {@link play} / {@link stop}.\n */\n declare isPaused: boolean;\n\n constructor(\n path: string,\n options: Partial<typeof DEFAULT_AUDIO_OPTIONS> = {},\n ) {\n super();\n this.path = path;\n this.options = {\n ...DEFAULT_AUDIO_OPTIONS,\n ...options,\n };\n this.object = null;\n this.audio = null;\n\n // Runtime-only playback state. Non-enumerable so these values are never\n // written into save data, debug snapshots, or undo history.\n Object.defineProperty(this, \"isPlaying\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n Object.defineProperty(this, \"isPaused\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n\n /**\n * Signals `AudioSystem` to start (or resume) playback.\n * Has no direct effect in the editor — `AudioSystem` drives the actual\n * THREE.js call in preview.\n */\n play(): void {\n this.isPlaying = true;\n this.isPaused = false;\n }\n\n /**\n * Signals `AudioSystem` to pause playback, preserving the current position.\n * Calling {@link play} afterwards resumes from where it paused.\n * No-op if not currently playing.\n */\n pause(): void {\n if (!this.isPlaying) return;\n this.isPlaying = false;\n this.isPaused = true;\n }\n\n /**\n * Signals `AudioSystem` to stop playback and reset the playback position.\n */\n stop(): void {\n this.isPlaying = false;\n this.isPaused = false;\n }\n}\n","import * as THREE from \"three\";\nimport { AudioComponent } from \"../../components/Audio\";\nimport type { World } from \"../../World\";\n\ntype CreateAudioComponentContext = {\n object?: THREE.Object3D | null;\n listener?: THREE.AudioListener | null;\n isEditor?: boolean;\n};\n\nfunction normalizeDistanceModel(\n distanceModel: string,\n): \"inverse\" | \"linear\" | \"exponential\" {\n const normalized = distanceModel.trim().toLowerCase();\n\n if (normalized === \"linear\" || normalized === \"exponential\") {\n return normalized;\n }\n\n return \"inverse\";\n}\n\nfunction createConfiguredAudio(\n listener: THREE.AudioListener,\n options: AudioComponent[\"options\"],\n): THREE.Audio<GainNode> | THREE.PositionalAudio {\n const sound = options.positional\n ? new THREE.PositionalAudio(listener)\n : new THREE.Audio(listener);\n\n sound.setLoop(options.loop);\n sound.setVolume(options.volume);\n sound.setPlaybackRate(options.pitch);\n\n if (sound instanceof THREE.PositionalAudio) {\n sound.setRefDistance(options.refDistance);\n sound.setDistanceModel(normalizeDistanceModel(options.distanceModel));\n sound.setRolloffFactor(options.rolloffFactor);\n }\n\n return sound;\n}\n\nfunction createAudioEditorHelper(): THREE.Object3D {\n if (typeof document === \"undefined\") {\n const geometry = new THREE.EdgesGeometry(\n new THREE.OctahedronGeometry(0.22, 0),\n );\n const material = new THREE.LineBasicMaterial({\n color: \"#8bc8ff\",\n transparent: true,\n opacity: 0.95,\n depthTest: false,\n });\n\n const fallback = new THREE.LineSegments(geometry, material);\n fallback.renderOrder = 10;\n fallback.userData.ecsHelper = true;\n fallback.visible = false;\n return fallback;\n }\n\n const size = 96;\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return new THREE.Object3D();\n }\n\n ctx.clearRect(0, 0, size, size);\n\n ctx.fillStyle = \"rgba(27, 35, 52, 0.9)\";\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, 36, 0, Math.PI * 2);\n ctx.fill();\n\n ctx.strokeStyle = \"rgba(137, 202, 255, 0.9)\";\n ctx.lineWidth = 4;\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, 36, 0, Math.PI * 2);\n ctx.stroke();\n\n ctx.fillStyle = \"#d9ecff\";\n ctx.beginPath();\n ctx.moveTo(33, 56);\n ctx.lineTo(43, 56);\n ctx.lineTo(54, 66);\n ctx.lineTo(54, 30);\n ctx.lineTo(43, 40);\n ctx.lineTo(33, 40);\n ctx.closePath();\n ctx.fill();\n\n ctx.strokeStyle = \"#7fd2ff\";\n ctx.lineWidth = 4;\n ctx.lineCap = \"round\";\n ctx.beginPath();\n ctx.arc(56, 48, 10, -0.8, 0.8);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(56, 48, 16, -0.8, 0.8);\n ctx.stroke();\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.needsUpdate = true;\n\n const material = new THREE.SpriteMaterial({\n map: texture,\n transparent: true,\n depthTest: false,\n });\n\n const helper = new THREE.Sprite(material);\n helper.scale.set(0.68, 0.68, 0.68);\n helper.renderOrder = 10;\n helper.userData.ecsHelper = true;\n helper.visible = false;\n\n return helper;\n}\n\nexport function createAudioComponent(\n world: World,\n entityId: number,\n path = \"\",\n options: Partial<AudioComponent[\"options\"]> = {},\n context?: CreateAudioComponentContext,\n): AudioComponent {\n const component = new AudioComponent(path, options);\n\n const anchor = context?.object ?? null;\n const listener = context?.listener ?? null;\n if (anchor && listener) {\n component.object = anchor;\n const sound = createConfiguredAudio(listener, component.options);\n\n if (context?.isEditor) {\n anchor.add(createAudioEditorHelper());\n }\n\n anchor.add(sound);\n component.audio = sound;\n }\n\n world.addComponent(entityId, component);\n return component;\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Runtime camera mode. `3d` is a free camera; `ar` is composited over a tracked image/face feed. */\nexport type CameraRuntimeType = \"3d\" | \"ar\";\n/** Projection model. */\nexport type CameraProjection = \"perspective\" | \"orthographic\";\n\n/** Optional initializer for {@link CameraComponent}. Any field omitted falls back to the defaults documented on the component. */\nexport type CameraComponentOptions = {\n /** Pre-built three.js camera. When omitted the component creates one from {@link projection}. */\n camera?: THREE.Camera;\n /** Runtime camera mode. */\n type?: CameraRuntimeType;\n /** Mark this camera as the default camera the renderer uses. */\n isDefault?: boolean;\n /** Projection model. */\n projection?: CameraProjection;\n /** Vertical field of view in **degrees** (perspective only). */\n fov?: number;\n /** Near clip plane in world units. */\n near?: number;\n /** Far clip plane in world units. */\n far?: number;\n /** Left edge of the orthographic frustum in world units. */\n left?: number;\n /** Right edge of the orthographic frustum in world units. */\n right?: number;\n /** Top edge of the orthographic frustum in world units. */\n top?: number;\n /** Bottom edge of the orthographic frustum in world units. */\n bottom?: number;\n /** Zoom multiplier (`1` = no zoom). */\n zoom?: number;\n};\n\nconst DEFAULT_FOV = 50;\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 2000;\nconst DEFAULT_ORTHO_LEFT = -5;\nconst DEFAULT_ORTHO_RIGHT = 5;\nconst DEFAULT_ORTHO_TOP = 5;\nconst DEFAULT_ORTHO_BOTTOM = -5;\nconst DEFAULT_ZOOM = 1;\n\nfunction inferProjection(camera: THREE.Camera | undefined): CameraProjection {\n if (camera instanceof THREE.OrthographicCamera) {\n return \"orthographic\";\n }\n\n return \"perspective\";\n}\n\nfunction readCameraNear(camera: THREE.Camera | undefined): number | null {\n if (\n camera &&\n \"near\" in camera &&\n typeof camera.near === \"number\" &&\n Number.isFinite(camera.near)\n ) {\n return camera.near;\n }\n\n return null;\n}\n\nfunction readCameraFar(camera: THREE.Camera | undefined): number | null {\n if (\n camera &&\n \"far\" in camera &&\n typeof camera.far === \"number\" &&\n Number.isFinite(camera.far)\n ) {\n return camera.far;\n }\n\n return null;\n}\n\nfunction inferFov(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.PerspectiveCamera && Number.isFinite(camera.fov)) {\n return camera.fov;\n }\n\n return DEFAULT_FOV;\n}\n\nfunction inferNear(camera: THREE.Camera | undefined): number {\n const near = readCameraNear(camera);\n if (near !== null) {\n return near;\n }\n\n return DEFAULT_NEAR;\n}\n\nfunction inferFar(camera: THREE.Camera | undefined): number {\n const far = readCameraFar(camera);\n if (far !== null) {\n return far;\n }\n\n return DEFAULT_FAR;\n}\n\nfunction inferOrthoLeft(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.left)) {\n return camera.left;\n }\n\n return DEFAULT_ORTHO_LEFT;\n}\n\nfunction inferOrthoRight(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.right)) {\n return camera.right;\n }\n\n return DEFAULT_ORTHO_RIGHT;\n}\n\nfunction inferOrthoTop(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.top)) {\n return camera.top;\n }\n\n return DEFAULT_ORTHO_TOP;\n}\n\nfunction inferOrthoBottom(camera: THREE.Camera | undefined): number {\n if (camera instanceof THREE.OrthographicCamera && Number.isFinite(camera.bottom)) {\n return camera.bottom;\n }\n\n return DEFAULT_ORTHO_BOTTOM;\n}\n\nfunction inferZoom(camera: THREE.Camera | undefined): number {\n if (\n camera &&\n \"zoom\" in camera &&\n typeof camera.zoom === \"number\" &&\n Number.isFinite(camera.zoom)\n ) {\n return camera.zoom;\n }\n\n return DEFAULT_ZOOM;\n}\n\n/**\n * Camera entity state. Supports perspective and orthographic projections, a\n * `3d` or `ar` runtime type, and an `isDefault` flag for the camera that the\n * preview/editor renders through. Field-of-view, near/far, ortho frustum, and\n * zoom are persisted; the live `THREE.Camera` is recreated when the project loads.\n *\n * @category Components\n */\nexport class CameraComponent extends Component {\n /** Live three.js camera. Recreated when the project loads to match {@link projection}. */\n camera: THREE.Camera;\n /** Runtime camera mode (`3d` or `ar`). */\n type: CameraRuntimeType;\n /** When `true`, this is the active rendering camera. Only one camera per scene should be the default. */\n isDefault: boolean;\n /** Active projection model (`perspective` or `orthographic`). */\n projection: CameraProjection;\n /** Vertical field of view in **degrees**. Used when {@link projection} is `perspective`. */\n fov: number;\n /** Near clip plane in world units. */\n near: number;\n /** Far clip plane in world units. */\n far: number;\n /** Left edge of the orthographic frustum (orthographic only). */\n left: number;\n /** Right edge of the orthographic frustum (orthographic only). */\n right: number;\n /** Top edge of the orthographic frustum (orthographic only). */\n top: number;\n /** Bottom edge of the orthographic frustum (orthographic only). */\n bottom: number;\n /** Zoom multiplier applied to the projection. */\n zoom: number;\n\n constructor(payload: CameraComponentOptions = {}) {\n super();\n\n this.camera = payload.camera ?? new THREE.PerspectiveCamera();\n this.type = payload.type ?? \"3d\";\n this.isDefault = typeof payload.isDefault === \"boolean\" ? payload.isDefault : false;\n this.projection = payload.projection ?? inferProjection(payload.camera);\n this.fov =\n typeof payload.fov === \"number\" && Number.isFinite(payload.fov)\n ? payload.fov\n : inferFov(payload.camera);\n this.near =\n typeof payload.near === \"number\" && Number.isFinite(payload.near)\n ? payload.near\n : inferNear(payload.camera);\n this.far =\n typeof payload.far === \"number\" && Number.isFinite(payload.far)\n ? payload.far\n : inferFar(payload.camera);\n this.left =\n typeof payload.left === \"number\" && Number.isFinite(payload.left)\n ? payload.left\n : inferOrthoLeft(payload.camera);\n this.right =\n typeof payload.right === \"number\" && Number.isFinite(payload.right)\n ? payload.right\n : inferOrthoRight(payload.camera);\n this.top =\n typeof payload.top === \"number\" && Number.isFinite(payload.top)\n ? payload.top\n : inferOrthoTop(payload.camera);\n this.bottom =\n typeof payload.bottom === \"number\" && Number.isFinite(payload.bottom)\n ? payload.bottom\n : inferOrthoBottom(payload.camera);\n this.zoom =\n typeof payload.zoom === \"number\" && Number.isFinite(payload.zoom)\n ? payload.zoom\n : inferZoom(payload.camera);\n }\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Wraps the live `THREE.Object3D` for an entity. Almost every entity that\n * renders to the scene carries an `Object3DRef` so transform sync, selection,\n * and parenting systems can manipulate the underlying object.\n *\n * @remarks\n * The `object` reference may be replaced when assets finish loading. Read it\n * fresh inside system/script hooks rather than caching it across frames.\n *\n * @category Components\n */\nexport class Object3DRef extends Component {\n /** Live three.js object placed in the scene graph. May be replaced when assets finish loading. */\n object: THREE.Object3D;\n /** Whether the object is currently visible. Mirrors `object.visible` and is preserved across reloads. */\n visibility: boolean;\n\n constructor(object: THREE.Object3D, visibility?: boolean) {\n super();\n this.object = object;\n this.visibility =\n typeof visibility === \"boolean\" ? visibility : Boolean(object.visible);\n }\n}\n","import * as THREE from \"three\";\n\nimport { CameraComponent, type CameraComponentOptions } from \"../../components/Camera\";\nimport { Object3DRef } from \"../../components/Object3DRef\";\nimport type { World } from \"../../World\";\n\nexport function createCameraComponent(\n world: World,\n entityId: number,\n payload: CameraComponentOptions = {},\n): CameraComponent {\n const object = world.getComponent(entityId, Object3DRef)?.object;\n const objectCamera = object instanceof THREE.Camera ? object : undefined;\n\n const component = new CameraComponent({\n ...payload,\n camera: payload.camera ?? objectCamera,\n });\n\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\ntype RapierRigidBody = import(\"@dimforge/rapier3d-compat\").RigidBody;\ntype RapierCollider = import(\"@dimforge/rapier3d-compat\").Collider;\n\n// ---------------------------------------------------------------------------\n// Rigidbody\n// ---------------------------------------------------------------------------\n\n/**\n * Rigidbody body type:\n * - `dynamic`: simulated by physics; affected by forces and gravity.\n * - `fixed`: immovable static body.\n * - `kinematicPosition`: moved by setting next position; ignores forces.\n * - `kinematicVelocity`: moved by setting velocity; ignores forces.\n */\nexport type RigidbodyType =\n | \"dynamic\"\n | \"fixed\"\n | \"kinematicPosition\"\n | \"kinematicVelocity\";\n\n/** Authoring state for the rigidbody half of {@link PhysicsComponent}. Saved with the project. */\nexport type RigidbodyState = {\n /** When `false`, the body is removed from physics simulation but kept in state. */\n enabled: boolean;\n /** Body type. See {@link RigidbodyType}. */\n type: RigidbodyType;\n /** Mass in kilograms. Only meaningful for `dynamic` bodies. */\n mass: number;\n /** Damping applied to linear velocity each step (`0` = none). */\n linearDamping: number;\n /** Damping applied to angular velocity each step (`0` = none). */\n angularDamping: number;\n /** Scale factor applied to world gravity for this body (`1` = full gravity, `0` = floating). */\n gravityScale: number;\n /** Allow the body to sleep when at rest to save simulation cost. */\n canSleep: boolean;\n /** Enable continuous collision detection to prevent tunneling for fast bodies. */\n ccdEnabled: boolean;\n /** Master toggle: when `true`, all linear motion is locked. */\n lockTranslations: boolean;\n /** Lock translation along world X. */\n lockTranslationX: boolean;\n /** Lock translation along world Y. */\n lockTranslationY: boolean;\n /** Lock translation along world Z. */\n lockTranslationZ: boolean;\n /** Master toggle: when `true`, all rotation is locked. */\n lockRotations: boolean;\n /** Lock rotation around world X. */\n lockRotationX: boolean;\n /** Lock rotation around world Y. */\n lockRotationY: boolean;\n /** Lock rotation around world Z. */\n lockRotationZ: boolean;\n};\n\nexport const DEFAULT_RIGIDBODY_STATE: RigidbodyState = {\n enabled: true,\n type: \"dynamic\",\n mass: 1,\n linearDamping: 0,\n angularDamping: 0,\n gravityScale: 1,\n canSleep: true,\n ccdEnabled: false,\n lockTranslations: false,\n lockTranslationX: false,\n lockTranslationY: false,\n lockTranslationZ: false,\n lockRotations: false,\n lockRotationX: false,\n lockRotationY: false,\n lockRotationZ: false,\n};\n\n// ---------------------------------------------------------------------------\n// Collider\n// ---------------------------------------------------------------------------\n\n/** Collider primitive shape. `trimesh` derives geometry from the entity's mesh. */\nexport type ColliderShape =\n | \"cuboid\"\n | \"ball\"\n | \"capsule\"\n | \"cylinder\"\n | \"trimesh\";\n\n/** Authoring state for the collider half of {@link PhysicsComponent}. Only the size fields relevant to {@link ColliderState.shape} are read at simulation time. */\nexport type ColliderState = {\n /** When `false`, the collider is removed from physics simulation but kept in state. */\n enabled: boolean;\n /** Collider primitive shape. */\n shape: ColliderShape;\n /** Local offset of the collider relative to the entity's transform, in world units. */\n offsetPosition: {\n /** Offset along local X. */\n x: number;\n /** Offset along local Y. */\n y: number;\n /** Offset along local Z. */\n z: number;\n };\n /** Local rotation offset in **radians** (Euler XYZ). */\n offsetRotation: {\n /** Rotation around local X (radians). */\n x: number;\n /** Rotation around local Y (radians). */\n y: number;\n /** Rotation around local Z (radians). */\n z: number;\n };\n /** FULL edge lengths for `cuboid` shape (NOT half-extents), in unscaled local units — multiplied by the entity world scale at collider build time. */\n size: {\n /** Half-extent along X. */\n x: number;\n /** Half-extent along Y. */\n y: number;\n /** Half-extent along Z. */\n z: number;\n };\n /** Radius for `ball`, `capsule`, and `cylinder` shapes. */\n radius: number;\n /** Height for `capsule` (segment length between caps) and `cylinder`. */\n height: number;\n /** Bounciness in `[0, 1]`. `0` is no bounce; `1` is perfectly elastic. */\n restitution: number;\n /** Surface friction coefficient. `0` is frictionless. */\n friction: number;\n /** When `true`, the collider reports overlaps but does not generate contact responses. */\n isSensor: boolean;\n};\n\nexport const DEFAULT_COLLIDER_STATE: ColliderState = {\n enabled: true,\n shape: \"cuboid\",\n offsetPosition: {\n x: 0,\n y: 0,\n z: 0,\n },\n offsetRotation: {\n x: 0,\n y: 0,\n z: 0,\n },\n size: {\n x: 1,\n y: 1,\n z: 1,\n },\n radius: 0.5,\n height: 1,\n restitution: 0,\n friction: 0.5,\n isSensor: false,\n};\n\n// ---------------------------------------------------------------------------\n// PhysicsState\n// ---------------------------------------------------------------------------\n\n/** Combined authoring state for {@link PhysicsComponent}. Saved with the project. */\nexport type PhysicsState = {\n /** Rigid body settings. */\n rigidbody: RigidbodyState;\n /** Collider settings. */\n collider: ColliderState;\n};\n\nexport const DEFAULT_PHYSICS_STATE: PhysicsState = {\n rigidbody: DEFAULT_RIGIDBODY_STATE,\n collider: DEFAULT_COLLIDER_STATE,\n};\n\n// ---------------------------------------------------------------------------\n// Normalization helpers (private)\n// ---------------------------------------------------------------------------\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n return value;\n}\n\nfunction toBoolean(value: unknown, fallback: boolean): boolean {\n if (typeof value !== \"boolean\") {\n return fallback;\n }\n return value;\n}\n\nfunction toRigidbodyType(value: unknown, fallback: RigidbodyType): RigidbodyType {\n if (\n value === \"dynamic\" ||\n value === \"fixed\" ||\n value === \"kinematicPosition\" ||\n value === \"kinematicVelocity\"\n ) {\n return value;\n }\n return fallback;\n}\n\nfunction toColliderShape(value: unknown, fallback: ColliderShape): ColliderShape {\n if (\n value === \"cuboid\" ||\n value === \"ball\" ||\n value === \"capsule\" ||\n value === \"cylinder\" ||\n value === \"trimesh\"\n ) {\n return value;\n }\n return fallback;\n}\n\nfunction normalizeRigidbodyState(\n value: Partial<RigidbodyState> | undefined,\n): RigidbodyState {\n const source = asRecord(value);\n const defaults = DEFAULT_RIGIDBODY_STATE;\n // Legacy: if per-axis flags are absent, fall back to master toggle value.\n const legacyLockTranslations = toBoolean(\n source?.lockTranslations,\n defaults.lockTranslations,\n );\n const legacyLockRotations = toBoolean(\n source?.lockRotations,\n defaults.lockRotations,\n );\n\n const lockTranslationX = toBoolean(\n source?.lockTranslationX,\n legacyLockTranslations,\n );\n const lockTranslationY = toBoolean(\n source?.lockTranslationY,\n legacyLockTranslations,\n );\n const lockTranslationZ = toBoolean(\n source?.lockTranslationZ,\n legacyLockTranslations,\n );\n const lockRotationX = toBoolean(source?.lockRotationX, legacyLockRotations);\n const lockRotationY = toBoolean(source?.lockRotationY, legacyLockRotations);\n const lockRotationZ = toBoolean(source?.lockRotationZ, legacyLockRotations);\n\n return {\n enabled: toBoolean(source?.enabled, defaults.enabled),\n type: toRigidbodyType(source?.type, defaults.type),\n mass: Math.max(0.0001, toFiniteNumber(source?.mass, defaults.mass)),\n linearDamping: Math.max(\n 0,\n toFiniteNumber(source?.linearDamping, defaults.linearDamping),\n ),\n angularDamping: Math.max(\n 0,\n toFiniteNumber(source?.angularDamping, defaults.angularDamping),\n ),\n gravityScale: toFiniteNumber(source?.gravityScale, defaults.gravityScale),\n canSleep: toBoolean(source?.canSleep, defaults.canSleep),\n ccdEnabled: toBoolean(source?.ccdEnabled, defaults.ccdEnabled),\n lockTranslations: legacyLockTranslations,\n lockTranslationX,\n lockTranslationY,\n lockTranslationZ,\n lockRotations: legacyLockRotations,\n lockRotationX,\n lockRotationY,\n lockRotationZ,\n };\n}\n\nfunction normalizeColliderState(\n value: Partial<ColliderState> | undefined,\n): ColliderState {\n const source = asRecord(value);\n const defaults = DEFAULT_COLLIDER_STATE;\n const offsetPosition = asRecord(source?.offsetPosition);\n const offsetRotation = asRecord(source?.offsetRotation);\n const size = asRecord(source?.size);\n\n return {\n enabled: toBoolean(source?.enabled, defaults.enabled),\n shape: toColliderShape(source?.shape, defaults.shape),\n offsetPosition: {\n x: toFiniteNumber(offsetPosition?.x, defaults.offsetPosition.x),\n y: toFiniteNumber(offsetPosition?.y, defaults.offsetPosition.y),\n z: toFiniteNumber(offsetPosition?.z, defaults.offsetPosition.z),\n },\n offsetRotation: {\n x: toFiniteNumber(offsetRotation?.x, defaults.offsetRotation.x),\n y: toFiniteNumber(offsetRotation?.y, defaults.offsetRotation.y),\n z: toFiniteNumber(offsetRotation?.z, defaults.offsetRotation.z),\n },\n size: {\n x: Math.max(0.0001, toFiniteNumber(size?.x, defaults.size.x)),\n y: Math.max(0.0001, toFiniteNumber(size?.y, defaults.size.y)),\n z: Math.max(0.0001, toFiniteNumber(size?.z, defaults.size.z)),\n },\n radius: Math.max(0.0001, toFiniteNumber(source?.radius, defaults.radius)),\n height: Math.max(0.0001, toFiniteNumber(source?.height, defaults.height)),\n restitution: Math.max(0, toFiniteNumber(source?.restitution, defaults.restitution)),\n friction: Math.max(0, toFiniteNumber(source?.friction, defaults.friction)),\n isSensor: toBoolean(source?.isSensor, defaults.isSensor),\n };\n}\n\nexport function normalizePhysicsState(\n value: { rigidbody?: Partial<RigidbodyState>; collider?: Partial<ColliderState> } | undefined,\n): PhysicsState {\n const source = asRecord(value);\n return {\n rigidbody: normalizeRigidbodyState(\n (source?.rigidbody as Partial<RigidbodyState>) ?? undefined,\n ),\n collider: normalizeColliderState(\n (source?.collider as Partial<ColliderState>) ?? undefined,\n ),\n };\n}\n\n// ---------------------------------------------------------------------------\n// PhysicsComponent\n// ---------------------------------------------------------------------------\n\n/**\n * Unified physics component combining a Rapier rigid body and a Rapier\n * collider into a single authoring and runtime container.\n *\n * Use `values.rigidbody` to configure body type, mass, damping, locks, etc.\n * Use `values.collider` to configure collider shape, size, offset, material\n * properties, and sensor mode.\n *\n * The runtime `rigidBody` and `collider` references are created by the physics\n * system when the project loads and are `null` until physics is initialized.\n *\n * @category Components\n */\nexport class PhysicsComponent extends Component {\n /** Authoring state. Saved with the project. */\n values: PhysicsState;\n /** Live Rapier rigid body. `null` until physics is initialized. */\n rigidBody: RapierRigidBody | null;\n /** Live Rapier collider. `null` until physics is initialized. */\n collider: RapierCollider | null;\n\n constructor(values?: { rigidbody?: Partial<RigidbodyState>; collider?: Partial<ColliderState> }) {\n super();\n this.values = normalizePhysicsState(values);\n this.rigidBody = null;\n this.collider = null;\n }\n\n /**\n * Patch rigidbody and/or collider state. Each sub-object is deep-merged\n * with the current values via the respective normalizer.\n */\n setValues(patch: { rigidbody?: Partial<RigidbodyState>; collider?: Partial<ColliderState> }): void {\n this.values = normalizePhysicsState({\n rigidbody: { ...this.values.rigidbody, ...(patch.rigidbody ?? {}) },\n collider: { ...this.values.collider, ...(patch.collider ?? {}) },\n });\n }\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Editable primitive kinds the mesh-geometry system can rebuild on the fly. `model` is a passthrough placeholder for entities that own a loaded GLTF/GLB instead. */\nexport type EditableMeshObjectKind =\n | \"capsule\"\n | \"cube\"\n | \"cylinder\"\n | \"model\"\n | \"plane\"\n | \"sphere\";\n\n/** Box geometry parameters in world units. */\nexport type CubeMeshParameters = {\n /** Box width along X. */\n width: number;\n /** Box height along Y. */\n height: number;\n /** Box depth along Z. */\n depth: number;\n};\n\n/** Plane geometry parameters in world units. */\nexport type PlaneMeshParameters = {\n /** Plane width along X. */\n width: number;\n /** Plane height along Y. */\n height: number;\n};\n\n/** Radius-only primitive parameters (sphere). */\nexport type RadiusMeshParameters = {\n /** Sphere radius in world units. */\n radius: number;\n};\n\n/** Radius + height primitive parameters (capsule, cylinder). */\nexport type RadiusHeightMeshParameters = {\n /** Radius of the cap/cylinder cross-section. */\n radius: number;\n /** Length of the straight section between caps (capsule) or full height (cylinder). */\n height: number;\n};\n\n/** Empty parameter set for `model` entities. */\nexport type ModelMeshParameters = Record<string, never>;\n\n/** Map from {@link EditableMeshObjectKind} to its parameter shape. */\nexport type MeshGeometryParametersByKind = {\n capsule: RadiusHeightMeshParameters;\n cube: CubeMeshParameters;\n cylinder: RadiusHeightMeshParameters;\n model: ModelMeshParameters;\n plane: PlaneMeshParameters;\n sphere: RadiusMeshParameters;\n};\n\nexport type MeshGeometryParameters =\n MeshGeometryParametersByKind[EditableMeshObjectKind];\n\nexport const DEFAULT_MESH_GEOMETRY_PARAMETERS: MeshGeometryParametersByKind = {\n capsule: { radius: 0.5, height: 1 },\n cube: { width: 1, height: 1, depth: 1 },\n cylinder: { radius: 0.5, height: 1 },\n model: {},\n plane: { width: 100, height: 100 },\n sphere: { radius: 0.5 },\n};\n\nconst GEOMETRY_TYPE_BY_KIND: Record<EditableMeshObjectKind, string> = {\n capsule: \"CapsuleGeometry\",\n cube: \"BoxGeometry\",\n cylinder: \"CylinderGeometry\",\n model: \"Model\",\n plane: \"PlaneGeometry\",\n sphere: \"SphereGeometry\",\n};\n\n/**\n * Editable geometry parameters for primitive meshes (cube, sphere, plane,\n * capsule, cylinder) and the placeholder for `model` entities. Holds the\n * authoring values plus shadow casting/receiving flags. The mesh-geometry\n * system rebuilds the underlying `BufferGeometry` when parameters change.\n *\n * @category Components\n */\nexport class MeshGeometryComponent extends Component {\n /** Primitive kind (`cube`, `sphere`, `plane`, `capsule`, `cylinder`) or `model` for loaded assets. */\n readonly kind: EditableMeshObjectKind;\n /** Three.js geometry class name (e.g. `\"BoxGeometry\"`, `\"SphereGeometry\"`). Derived from {@link kind}. */\n readonly geometryType: string;\n /** Editable parameters whose shape depends on {@link kind}. The mesh-geometry system rebuilds geometry when these change. */\n parameters: MeshGeometryParameters;\n /** Live three.js object whose geometry is being managed. `null` until the object is built. */\n object: THREE.Object3D | null;\n /** Human-readable model name shown in the inspector for `model` entities; empty for primitives. */\n modelName: string;\n /** Whether the mesh casts shadows in the renderer. */\n castShadow: boolean;\n /** Whether the mesh receives shadows in the renderer. */\n receiveShadow: boolean;\n\n constructor(\n kind: EditableMeshObjectKind,\n object: THREE.Object3D | null,\n parameters?: Partial<MeshGeometryParameters>,\n options?: {\n modelName?: string;\n castShadow?: boolean;\n receiveShadow?: boolean;\n },\n ) {\n super();\n\n this.kind = kind;\n this.geometryType = GEOMETRY_TYPE_BY_KIND[kind];\n this.object = object;\n this.modelName = options?.modelName ?? \"\";\n this.castShadow = options?.castShadow ?? false;\n this.receiveShadow = options?.receiveShadow ?? false;\n\n switch (kind) {\n case \"cube\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,\n ...(parameters as Partial<CubeMeshParameters> | undefined),\n };\n break;\n case \"plane\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.plane,\n ...(parameters as Partial<PlaneMeshParameters> | undefined),\n };\n break;\n case \"sphere\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere,\n ...(parameters as Partial<RadiusMeshParameters> | undefined),\n };\n break;\n case \"cylinder\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder,\n ...(parameters as Partial<RadiusHeightMeshParameters> | undefined),\n };\n break;\n case \"capsule\":\n this.parameters = {\n ...DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule,\n ...(parameters as Partial<RadiusHeightMeshParameters> | undefined),\n };\n break;\n case \"model\":\n this.parameters = {};\n break;\n }\n }\n}\n","import {\n PhysicsComponent,\n type ColliderState,\n type RigidbodyState,\n} from \"../../components/Physics\";\nimport {\n MeshGeometryComponent,\n type CubeMeshParameters,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"../../components/MeshGeometry\";\nimport type { World } from \"../../World\";\n\ntype PhysicsFactoryValues = {\n rigidbody?: Partial<RigidbodyState>;\n collider?: Partial<ColliderState>;\n};\n\n/**\n * Derive a collider that matches the entity's primitive geometry, so adding a\n * PhysicsComponent \"just works\" without hand-authoring dimensions.\n *\n * Collider dimensions are authored in unscaled local units (PhysicsSyncSystem\n * multiplies by world scale), and `size` holds FULL edge lengths — both of\n * which the mesh-geometry parameters already are, so they map 1:1.\n *\n * Returns null for models and unknown kinds — those keep the generic defaults\n * and should be sized explicitly from measured bounds.\n */\nfunction deriveColliderFromGeometry(\n world: World,\n entityId: number,\n): PhysicsFactoryValues | null {\n const meshGeometry = world.getComponent(entityId, MeshGeometryComponent);\n if (!meshGeometry) {\n return null;\n }\n\n switch (meshGeometry.kind) {\n case \"plane\": {\n const params = meshGeometry.parameters as PlaneMeshParameters;\n // PlaneGeometry lies in the local XY plane (the plane factory pre-rotates\n // the entity -90° on X to lay it flat), so the plane's normal is LOCAL Z.\n // The collider must therefore be a thin slab on Z — a thin Y slab would\n // stand up as a wall once the entity rotation is applied.\n return {\n collider: {\n shape: \"cuboid\",\n size: { x: params.width, y: params.height, z: 0.05 },\n },\n // An (effectively) zero-thickness sheet is only physically meaningful\n // as static geometry — planes are floors/walls, not dynamic bodies.\n rigidbody: { type: \"fixed\" },\n };\n }\n case \"cube\": {\n const params = meshGeometry.parameters as CubeMeshParameters;\n return {\n collider: {\n shape: \"cuboid\",\n size: { x: params.width, y: params.height, z: params.depth },\n },\n };\n }\n case \"sphere\": {\n const params = meshGeometry.parameters as RadiusMeshParameters;\n return { collider: { shape: \"ball\", radius: params.radius } };\n }\n case \"capsule\": {\n const params = meshGeometry.parameters as RadiusHeightMeshParameters;\n return {\n collider: {\n shape: \"capsule\",\n radius: params.radius,\n height: params.height,\n },\n };\n }\n case \"cylinder\": {\n const params = meshGeometry.parameters as RadiusHeightMeshParameters;\n return {\n collider: {\n shape: \"cylinder\",\n radius: params.radius,\n height: params.height,\n },\n };\n }\n default:\n return null;\n }\n}\n\nexport function createPhysicsComponent(\n world: World,\n entityId: number,\n values?: PhysicsFactoryValues,\n): PhysicsComponent {\n // Only derive when the caller supplied nothing: hydration/duplication pass\n // (or copy over) saved values, and explicit authoring wins untouched.\n const initial =\n values ?? deriveColliderFromGeometry(world, entityId) ?? undefined;\n const component = new PhysicsComponent(initial);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/** Skybox rendering modes. `none` disables skybox rendering entirely. */\nexport type EnvironmentSkyboxType = \"gradient\" | \"color\" | \"image\" | \"none\";\n/** Gradient distribution applied when {@link EnvironmentSkyboxState.type} is `\"gradient\"`. */\nexport type EnvironmentGradientEffect = \"radial\" | \"linear\" | \"angular\";\n/** Fog distance models. `none` disables fog. */\nexport type EnvironmentFogType = \"linear\" | \"exponential\" | \"none\";\n\n/** Skybox configuration. Only the fields relevant to {@link type} are read at render time. */\nexport type EnvironmentSkyboxState = {\n /** Active skybox mode. */\n type: EnvironmentSkyboxType;\n /** Solid color used when {@link type} is `\"color\"`. `#rrggbb`. */\n color: string;\n /** URL or `localasset://` path of the equirectangular image used when {@link type} is `\"image\"`. */\n imageUrl?: string;\n /** Gradient parameters used when {@link type} is `\"gradient\"`. */\n gradient: {\n /** Ordered list of color stops as `#rrggbb` strings. */\n colors: string[];\n /** Gradient distribution. */\n effect: EnvironmentGradientEffect;\n };\n};\n\n/** Fog configuration. Mirrors three.js `Fog` / `FogExp2`. */\nexport type EnvironmentFogState = {\n /** Active fog model. */\n type: EnvironmentFogType;\n /** Fog color as `#rrggbb`. */\n color: string;\n /** Linear-fog parameters used when {@link type} is `\"linear\"`. */\n linear: {\n /** Distance at which fog begins to take effect. */\n near: number;\n /** Distance at which fog reaches full opacity. */\n far: number;\n };\n /** Exponential-fog parameters used when {@link type} is `\"exponential\"`. */\n exponential: {\n /** Density coefficient. Higher values produce thicker fog. */\n density: number;\n };\n};\n\n/** World gravity vector applied by the physics system, in world units per second squared. */\nexport type EnvironmentGravityState = {\n /** Gravity along world X. */\n x: number;\n /** Gravity along world Y (negative pulls objects down). */\n y: number;\n /** Gravity along world Z. */\n z: number;\n};\n\n/** Aggregated authoring state owned by {@link Environment}. */\nexport type EnvironmentState = {\n /** Skybox configuration. */\n skybox: EnvironmentSkyboxState;\n /** Fog configuration. */\n fog: EnvironmentFogState;\n /** World gravity. */\n gravity: EnvironmentGravityState;\n /**\n * Fixed timestep (seconds) used by the physics accumulator loop.\n * Physics is stepped in fixed increments of this size each frame.\n * Default is `0.02` (50 Hz).\n */\n fixedTimeStep: number;\n};\n\nexport const DEFAULT_ENVIRONMENT_STATE: EnvironmentState = {\n skybox: {\n type: \"none\",\n color: \"#1e1e1e\",\n imageUrl: \"\",\n gradient: {\n colors: [\"#464766\", \"#657ea6\", \"#0f0e1a\"],\n effect: \"linear\",\n },\n },\n fog: {\n type: \"none\",\n color: \"#1e1e1e\",\n linear: {\n near: 1,\n far: 100,\n },\n exponential: {\n density: 0.002,\n },\n },\n gravity: {\n x: 0,\n y: -9.81,\n z: 0,\n },\n fixedTimeStep: 0.02,\n};\n\nfunction normalizeColors(colors: unknown): string[] {\n if (!Array.isArray(colors)) {\n return [...DEFAULT_ENVIRONMENT_STATE.skybox.gradient.colors];\n }\n\n const normalized = colors.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n );\n if (normalized.length === 0) {\n return [...DEFAULT_ENVIRONMENT_STATE.skybox.gradient.colors];\n }\n\n return normalized;\n}\n\nfunction normalizeGradientEffect(value: unknown): EnvironmentGradientEffect {\n if (value === \"radial\" || value === \"linear\" || value === \"angular\") {\n return value;\n }\n\n return DEFAULT_ENVIRONMENT_STATE.skybox.gradient.effect;\n}\n\nfunction normalizeSkyboxType(value: unknown): EnvironmentSkyboxType {\n if (value === \"gradient\" || value === \"color\" || value === \"none\") {\n return value;\n }\n\n if (value === \"image\" || value === \"Image\") {\n return \"image\";\n }\n\n return DEFAULT_ENVIRONMENT_STATE.skybox.type;\n}\n\nfunction normalizeFogType(value: unknown): EnvironmentFogType {\n if (value === \"linear\" || value === \"exponential\" || value === \"none\") {\n return value;\n }\n\n return DEFAULT_ENVIRONMENT_STATE.fog.type;\n}\n\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n\n return value;\n}\n\n/**\n * Scene environment settings: skybox (gradient/color/image), fog\n * (linear/exponential), and gravity vector for the physics world.\n * Singleton-style — attached to one environment entity per scene.\n *\n * Use `world.getEnvironmentComponent()` to access this component directly\n * from a Behaviour script. Mutate `values` to change settings at runtime;\n * `EnvironmentSyncSystem` applies the changes on the next frame.\n *\n * @category Components\n */\nexport class Environment extends Component {\n /** Aggregated environment authoring state (skybox, fog, gravity). Saved with the project. */\n values: EnvironmentState;\n\n constructor(values?: Partial<EnvironmentState>) {\n super();\n\n const skybox = values?.skybox;\n const fog = values?.fog;\n const gravity = values?.gravity;\n this.values = {\n skybox: {\n type: normalizeSkyboxType(skybox?.type),\n color:\n typeof skybox?.color === \"string\"\n ? skybox.color\n : DEFAULT_ENVIRONMENT_STATE.skybox.color,\n imageUrl:\n typeof skybox?.imageUrl === \"string\"\n ? skybox.imageUrl\n : DEFAULT_ENVIRONMENT_STATE.skybox.imageUrl,\n gradient: {\n colors: normalizeColors(skybox?.gradient?.colors),\n effect: normalizeGradientEffect(skybox?.gradient?.effect),\n },\n },\n fog: {\n type: normalizeFogType(fog?.type),\n color:\n typeof fog?.color === \"string\"\n ? fog.color\n : DEFAULT_ENVIRONMENT_STATE.fog.color,\n linear: {\n near: toFiniteNumber(\n fog?.linear?.near,\n DEFAULT_ENVIRONMENT_STATE.fog.linear.near,\n ),\n far: toFiniteNumber(\n fog?.linear?.far,\n DEFAULT_ENVIRONMENT_STATE.fog.linear.far,\n ),\n },\n exponential: {\n density: toFiniteNumber(\n fog?.exponential?.density,\n DEFAULT_ENVIRONMENT_STATE.fog.exponential.density,\n ),\n },\n },\n gravity: {\n x: toFiniteNumber(gravity?.x, DEFAULT_ENVIRONMENT_STATE.gravity.x),\n y: toFiniteNumber(gravity?.y, DEFAULT_ENVIRONMENT_STATE.gravity.y),\n z: toFiniteNumber(gravity?.z, DEFAULT_ENVIRONMENT_STATE.gravity.z),\n },\n fixedTimeStep: toFiniteNumber(\n values?.fixedTimeStep,\n DEFAULT_ENVIRONMENT_STATE.fixedTimeStep,\n ),\n };\n }\n}\n","import { Environment, type EnvironmentState } from \"../../components/Environment\";\nimport type { World } from \"../../World\";\n\nexport function createEnvironmentComponent(\n world: World,\n entityId: number,\n values?: Partial<EnvironmentState>,\n): Environment {\n const component = new Environment(values);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type { EcsEntityEditorKind, EcsEntityKind } from \"../types\";\n\n/**\n * Tags an entity with the kind it was created from (`cube`, `sphere`,\n * `model`, `directionalLight`, etc.). Factories use this to drive\n * kind-specific behavior; the editor inspector uses it to select component\n * editors.\n *\n * @category Components\n */\nexport class EntityType extends Component {\n /** Kind tag identifying which factory created this entity (e.g. `cube`, `directionalLight`, `model`). */\n value: EcsEntityKind | EcsEntityEditorKind;\n\n constructor(value: EcsEntityKind | EcsEntityEditorKind) {\n super();\n this.value = value;\n }\n}\n","import { EntityType } from \"../../components/EntityType\";\nimport type { World } from \"../../World\";\n\nexport function createEntityTypeComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof EntityType>\n): EntityType {\n const component = new EntityType(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Renders a 2D image as a textured quad in the scene. Width/height are in\n * world units. Texture loading is handled by the image system, which\n * populates {@link ImageComponent.texture} and {@link ImageComponent.object}\n * asynchronously.\n *\n * @category Components\n */\nexport class ImageComponent extends Component {\n /** Source URL or `localasset://` path of the image file. */\n path: string;\n /** Width of the rendered quad in world units. */\n width: number;\n /** Height of the rendered quad in world units. */\n height: number;\n /** Loaded texture, populated asynchronously by the image system. `null` until loaded. */\n texture: THREE.Texture | null;\n /** Live three.js object representing the textured quad. `null` until built. */\n object: THREE.Object3D | null;\n\n constructor(path: string, width: number = 1, height: number = 1) {\n super();\n this.path = path;\n this.width = width;\n this.height = height;\n this.texture = null;\n this.object = null;\n }\n}\n","import { ImageComponent } from \"../../components/Image\";\nimport type { World } from \"../../World\";\n\nexport function createImageComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ImageComponent>\n): ImageComponent {\n const component = new ImageComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/** Optional initializer for {@link ImageTargetAnchor}. */\nexport type ImageTargetAnchorOptions = {\n /** Id of the tracked target this anchor follows (matches `ImageTargetReference.id`). */\n targetId?: number | null;\n /** Optional canonical URL of the target image, used as a fallback identifier. */\n targetUrl?: string;\n};\n\n/**\n * Marks an entity as an anchor for an image-tracking target. The image\n * tracking system reveals the entity when the referenced target is found and\n * hides it when the target is lost.\n *\n * @category Components\n */\nexport class ImageTargetAnchor extends Component {\n /** Tracked target id this anchor follows. `null` when unbound. */\n targetId: number | null;\n /** Canonical target image URL, retained as a fallback identifier. */\n targetUrl?: string;\n\n constructor(options?: ImageTargetAnchorOptions) {\n super();\n this.targetId = options?.targetId ?? null;\n this.targetUrl = options?.targetUrl;\n }\n}\n","import { ImageTargetAnchor } from \"../../components/ImageTargetAnchor\";\nimport type { World } from \"../../World\";\n\nexport function createImageTargetAnchorComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ImageTargetAnchor>\n): ImageTargetAnchor {\n const component = new ImageTargetAnchor(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type * as THREE from \"three\";\n\n\n/** Single uploaded image used as input to the image-target compiler. */\nexport type ImageTargetReference = {\n /** Stable target id assigned at compile time. Referenced by {@link ImageTargetAnchor.targetId}. */\n id: number;\n /** Source image URL or `localasset://` path. */\n url: string;\n /** Image width in pixels. */\n width: number;\n /** Image height in pixels. */\n height: number;\n /** Local directory the source image is stored in (desktop projects). */\n storageDir?: string;\n /** Local file name for the source image (desktop projects). */\n fileName?: string;\n};\n\n/**\n * Image-tracking target metadata used by AR projects. Holds the source images\n * users uploaded plus the URL of the compiled `.mind` target file produced by\n * the image-target compiler. Pair with {@link ImageTargetAnchor} on child\n * entities that should appear when the target is detected.\n *\n * @category Components\n */\nexport class ImageTarget extends Component {\n /** Source images that were combined into the compiled `.mind` target. */\n targets: ImageTargetReference[];\n /** URL of the compiled `.mind` target file. Set after the image-target compiler finishes. */\n compiledTargetUrl?: string;\n /** Directory containing the compiled `.mind` file (desktop projects). */\n compiledTargetDir?: string;\n /** Optional preview texture used in the editor viewport. `null` when not assigned. */\n texture: THREE.Texture | null;\n /** Optional preview object placed in the editor viewport. `null` when not assigned. */\n object: THREE.Object3D | null;\n\n constructor(options?: {\n targets?: ImageTargetReference[];\n compiledTargetUrl?: string;\n compiledTargetDir?: string;\n }, texture?: THREE.Texture, object?: THREE.Object3D) {\n super();\n this.targets = options?.targets ?? [];\n this.compiledTargetUrl = options?.compiledTargetUrl;\n this.compiledTargetDir = options?.compiledTargetDir;\n this.texture = texture ?? null;\n this.object = object ?? null;\n }\n}\n","import { ImageTarget } from \"../../components/ImageTarget\";\nimport type { World } from \"../../World\";\n\nexport function createImageTargetComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ImageTarget>\n): ImageTarget {\n const component = new ImageTarget(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Authoring state for {@link LightComponent}. Common fields apply to every light kind; the optional fields are only meaningful for specific kinds. */\ntype LightValueState = {\n /** Light color as `#rrggbb` hex string. */\n color: string;\n /** Light intensity multiplier (units depend on three.js physically-correct mode). */\n intensity: number;\n /** Whether the light casts shadows. */\n castShadow: boolean;\n /** Whether the light is frustum-culled when off-screen. */\n frustumCulling: boolean;\n /** Maximum range; `0` means infinite. (PointLight, SpotLight) */\n distance?: number;\n /** Falloff exponent for distance attenuation. (PointLight, SpotLight) */\n decay?: number;\n /** Cone half-angle in **radians**. (SpotLight) */\n angle?: number;\n /** Soft-edge factor in `[0, 1]`; `0` is a hard edge. (SpotLight) */\n penumbra?: number;\n /** Rectangle width in world units. (RectAreaLight) */\n width?: number;\n /** Rectangle height in world units. (RectAreaLight) */\n height?: number;\n};\n\nfunction toHexColor(value: THREE.Color): string {\n return `#${value.getHexString()}`;\n}\n\nfunction createValueState(light: THREE.Light): LightValueState {\n const base: LightValueState = {\n color: toHexColor(light.color),\n intensity: light.intensity,\n castShadow: (light as THREE.Light & { castShadow?: boolean }).castShadow ?? false,\n frustumCulling: light.frustumCulled,\n };\n\n if (light instanceof THREE.PointLight) {\n base.distance = light.distance;\n base.decay = light.decay;\n } else if (light instanceof THREE.SpotLight) {\n base.distance = light.distance;\n base.decay = light.decay;\n base.angle = light.angle;\n base.penumbra = light.penumbra;\n } else if (light instanceof THREE.RectAreaLight) {\n base.width = light.width;\n base.height = light.height;\n }\n\n return base;\n}\n\n/**\n * Light source attached to an entity. `type` selects the underlying three.js\n * light class (directional, point, spot, ambient, hemisphere, rect-area).\n * `values` carries authoring state including color, intensity, and\n * type-specific fields (distance, decay, angle, penumbra, width, height).\n *\n * @category Components\n */\nexport class LightComponent extends Component {\n /** Live three.js light placed in the scene. Recreated when the project loads. */\n light: THREE.Light;\n /** Three.js class name of the light (e.g. `\"DirectionalLight\"`, `\"PointLight\"`, `\"SpotLight\"`). */\n type: string;\n /** Serialized authoring state. Saved with the project. */\n values: LightValueState;\n\n constructor(light: THREE.Light) {\n super();\n this.light = light;\n this.type = light.type;\n this.values = createValueState(light);\n }\n\n setValues(patch: Partial<LightValueState>): void {\n this.values = {\n ...this.values,\n ...patch,\n };\n }\n}\n\nexport type { LightValueState };\n","import { LightComponent } from \"../../components/Light\";\nimport type { World } from \"../../World\";\n\nexport function createLightComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof LightComponent>\n): LightComponent {\n const component = new LightComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/** Supported material classes. Each maps to a three.js `Mesh*Material` type. */\ntype MaterialTypeValue = \"standard\" | \"basic\" | \"phong\" | \"physical\";\n/** Texture sampling mode. `smooth` uses linear filtering; `sharp` uses nearest filtering for pixel-art look. */\ntype TextureFilteringValue = \"smooth\" | \"sharp\";\n\n/** Authoring state for a single slot in {@link MaterialComponent.values}. Mirrors the live three.js material so it can be re-applied when the project loads. */\ntype MaterialValueState = {\n /** Underlying material class. */\n type: MaterialTypeValue;\n /** Base color as `#rrggbb` hex string. */\n color: string;\n /** PBR roughness in `[0, 1]`. */\n roughness: number;\n /** PBR metalness in `[0, 1]`. */\n metalness: number;\n /** Multiplier applied to the normal map (uniform on both axes). */\n normalScale: number;\n /** Surface opacity in `[0, 1]`. Combine with {@link transparent} to enable alpha. */\n opacity: number;\n /** Emissive color as `#rrggbb` hex string. */\n emissive: string;\n /** Emissive intensity multiplier. */\n emissiveIntensity: number;\n /** Three.js `Side` enum value (`FrontSide`, `BackSide`, or `DoubleSide`). */\n side: number;\n /** Three.js `Blending` enum value. */\n blending: number;\n /** Whether depth testing is enabled. */\n depthTest: boolean;\n /** Whether depth writes are enabled. */\n depthWrite: boolean;\n /** Render as wireframe. */\n wireframe: boolean;\n /** Enable transparency (must be `true` for {@link opacity} < 1 to render correctly). */\n transparent: boolean;\n /** Color/diffuse texture URL. */\n textureMap?: string;\n /** Alpha (transparency) texture URL. */\n alphaTextureMap?: string;\n /** Tangent-space normal map URL. */\n normalMap?: string;\n /** Roughness map URL (red channel). */\n roughnessMap?: string;\n /** Metalness map URL (red channel). */\n metalnessMap?: string;\n /** Ambient occlusion map URL. */\n aoMap?: string;\n /** Emissive color map URL. */\n emissiveMap?: string;\n /** Bump map URL (height-based shading approximation). */\n bumpMap?: string;\n /** Displacement map URL (geometric vertex offset). */\n displacementMap?: string;\n /** Pre-baked light map URL. */\n lightMap?: string;\n /** Environment reflection map URL. */\n envMap?: string;\n /** Texture sampling mode applied to the color map. */\n textureFiltering: TextureFilteringValue;\n /** Whether mipmaps are generated for texture maps. */\n useMipmaps: boolean;\n};\n\nfunction toHexColor(value: unknown, fallback: string): string {\n if (\n value &&\n typeof value === \"object\" &&\n typeof (value as { getHexString?: () => string }).getHexString ===\n \"function\"\n ) {\n try {\n return `#${(value as { getHexString: () => string }).getHexString()}`;\n } catch {\n return fallback;\n }\n }\n\n return fallback;\n}\n\nfunction getMaterialType(material: THREE.Material): MaterialTypeValue {\n if (material instanceof THREE.MeshPhysicalMaterial) {\n return \"physical\";\n }\n\n if (material instanceof THREE.MeshPhongMaterial) {\n return \"phong\";\n }\n\n if (material instanceof THREE.MeshBasicMaterial) {\n return \"basic\";\n }\n\n return \"standard\";\n}\n\nfunction createMaterialValue(material: THREE.Material): MaterialValueState {\n const materialRecord = material as unknown as Record<string, unknown>;\n const normalScale = materialRecord.normalScale as\n | { x?: number; y?: number }\n | undefined;\n const map = materialRecord.map as THREE.Texture | undefined;\n\n return {\n type: getMaterialType(material),\n color: toHexColor(materialRecord.color, \"#ffffff\"),\n roughness:\n typeof materialRecord.roughness === \"number\" ? materialRecord.roughness : 0.5,\n metalness:\n typeof materialRecord.metalness === \"number\" ? materialRecord.metalness : 0.5,\n normalScale:\n typeof normalScale?.x === \"number\" ? normalScale.x : 1,\n opacity: typeof materialRecord.opacity === \"number\" ? materialRecord.opacity : 1,\n emissive: toHexColor(materialRecord.emissive, \"#000000\"),\n emissiveIntensity:\n typeof materialRecord.emissiveIntensity === \"number\"\n ? materialRecord.emissiveIntensity\n : 0,\n side: typeof materialRecord.side === \"number\" ? materialRecord.side : THREE.FrontSide,\n blending:\n typeof materialRecord.blending === \"number\"\n ? materialRecord.blending\n : THREE.NormalBlending,\n depthTest: materialRecord.depthTest !== false,\n depthWrite: materialRecord.depthWrite !== false,\n wireframe: Boolean(materialRecord.wireframe),\n transparent: Boolean(materialRecord.transparent),\n textureMap: map?.image ? map.source?.data?.currentSrc || map.image?.src : undefined,\n alphaTextureMap:\n (materialRecord.alphaMap as THREE.Texture | undefined)?.image?.src,\n normalMap:\n (materialRecord.normalMap as THREE.Texture | undefined)?.image?.src,\n roughnessMap:\n (materialRecord.roughnessMap as THREE.Texture | undefined)?.image?.src,\n metalnessMap:\n (materialRecord.metalnessMap as THREE.Texture | undefined)?.image?.src,\n aoMap: (materialRecord.aoMap as THREE.Texture | undefined)?.image?.src,\n emissiveMap:\n (materialRecord.emissiveMap as THREE.Texture | undefined)?.image?.src,\n bumpMap: (materialRecord.bumpMap as THREE.Texture | undefined)?.image?.src,\n displacementMap:\n (materialRecord.displacementMap as THREE.Texture | undefined)?.image?.src,\n lightMap: (materialRecord.lightMap as THREE.Texture | undefined)?.image?.src,\n envMap: (materialRecord.envMap as THREE.Texture | undefined)?.image?.src,\n textureFiltering:\n map?.magFilter === THREE.NearestFilter ? \"sharp\" : \"smooth\",\n useMipmaps: map?.generateMipmaps !== false,\n };\n}\n\nexport function defaultMaterialValue(): MaterialValueState {\n return {\n type: \"standard\",\n color: \"#ffffff\",\n roughness: 0.5,\n metalness: 0.5,\n normalScale: 1,\n opacity: 1,\n emissive: \"#000000\",\n emissiveIntensity: 0,\n side: THREE.FrontSide,\n blending: THREE.NormalBlending,\n depthTest: true,\n depthWrite: true,\n wireframe: false,\n transparent: false,\n textureFiltering: \"smooth\",\n useMipmaps: true,\n };\n}\n\n/**\n * Material catalog for an entity. Tracks the live three.js materials\n * (`materials`, `material`) plus serialized authoring state (`values[]`)\n * mirrored from the inspector. Supports `standard`, `basic`, `phong`, and\n * `physical` PBR types with optional texture map slots.\n *\n * @remarks\n * Use `setMaterials`, `updateValue`, `setMaterialType`, `setTextureFiltering`,\n * and `setUseMipmaps` to mutate state — these keep `values[]` and the live\n * three.js materials in sync. Texture URLs use the `localasset://` protocol\n * inside the editor.\n *\n * @category Components\n */\nexport class MaterialComponent extends Component {\n /** Live three.js materials currently bound to the entity's mesh (one per submesh). */\n materials: THREE.Material[];\n /** Convenience reference to `materials[0]`. `null` when no material is assigned. */\n material: THREE.Material | null;\n /** Serialized authoring state (one entry per material in {@link materials}). Saved with the project. */\n values: MaterialValueState[];\n /**\n * Editor-managed material-asset linkage, one entry per slot (parallel to\n * {@link values}). A `localasset://` URL of a `.material` asset file, or\n * `null`/absent for a local (unlinked) material. The editor materializes the\n * asset's values into {@link values} and keeps them in sync when the asset\n * is edited — rendering and the runtime read only {@link values} and ignore\n * this field. Saved with the project; survives material rebinds.\n */\n assetRefs: (string | null)[];\n\n constructor(materialOrMaterials: THREE.Material | THREE.Material[] = []) {\n super();\n\n this.materials = [];\n this.material = null;\n this.values = [];\n this.assetRefs = [];\n this.setMaterials(materialOrMaterials);\n }\n\n /** Link/unlink a slot to a material asset URL (editor bookkeeping only). */\n setAssetRef(index: number, url: string | null): void {\n if (index < 0) {\n return;\n }\n while (this.assetRefs.length <= index) {\n this.assetRefs.push(null);\n }\n this.assetRefs[index] = url;\n }\n\n /** The material-asset URL a slot is linked to, or null when local. */\n getAssetRef(index: number): string | null {\n return this.assetRefs[index] ?? null;\n }\n\n setMaterials(\n materialOrMaterials: THREE.Material | THREE.Material[] = [],\n ): void {\n this.materials = Array.isArray(materialOrMaterials)\n ? materialOrMaterials.filter(Boolean)\n : materialOrMaterials\n ? [materialOrMaterials]\n : [];\n\n this.material = this.materials[0] ?? null;\n this.values =\n this.materials.length > 0\n ? this.materials.map((material) => createMaterialValue(material))\n : [defaultMaterialValue()];\n }\n\n updateValue(index: number, patch: Partial<MaterialValueState>): void {\n if (index < 0) {\n return;\n }\n\n while (this.values.length <= index) {\n this.values.push(defaultMaterialValue());\n }\n\n this.values[index] = {\n ...this.values[index],\n ...patch,\n };\n }\n\n resetValue(index: number): void {\n if (index < 0) {\n return;\n }\n\n while (this.values.length <= index) {\n this.values.push(defaultMaterialValue());\n }\n\n const type = this.values[index]?.type ?? \"standard\";\n this.values[index] = {\n ...defaultMaterialValue(),\n type,\n };\n }\n\n setMaterialType(index: number, type: MaterialTypeValue): void {\n this.updateValue(index, { type });\n }\n\n setTextureFiltering(index: number, filtering: TextureFilteringValue): void {\n this.updateValue(index, { textureFiltering: filtering });\n }\n\n setUseMipmaps(index: number, enabled: boolean): void {\n this.updateValue(index, { useMipmaps: enabled });\n }\n}\n\nexport type { MaterialTypeValue, MaterialValueState, TextureFilteringValue };\n","import { MaterialComponent } from \"../../components/Material\";\nimport type { World } from \"../../World\";\n\nexport function createMaterialComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof MaterialComponent>\n): MaterialComponent {\n const component = new MaterialComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Holds the live three.js `Object3D` for an entity that renders as a primitive\n * mesh (cube, sphere, plane, capsule, cylinder). For loaded GLTF/GLB models\n * see {@link ModelComponent}; for the editable geometry parameters see\n * {@link MeshGeometryComponent}.\n *\n * @category Components\n */\nexport class MeshComponent extends Component {\n /** Underlying three.js mesh placed in the scene graph. */\n mesh: THREE.Object3D;\n\n constructor(mesh: THREE.Object3D) {\n super();\n this.mesh = mesh;\n }\n}\n","import { MeshComponent } from \"../../components/Mesh\";\nimport type { World } from \"../../World\";\n\nexport function createMeshComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof MeshComponent>\n): MeshComponent {\n const component = new MeshComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { MeshGeometryComponent } from \"../../components/MeshGeometry\";\nimport type { World } from \"../../World\";\n\nexport function createMeshGeometryComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof MeshGeometryComponent>\n): MeshGeometryComponent {\n const component = new MeshGeometryComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * References a GLTF/GLB asset loaded from `path`. The model loading system\n * resolves the asset asynchronously and populates {@link ModelComponent.object}\n * once available; loading is deferred-tolerant so the entity exists before\n * the model finishes loading.\n *\n * @category Components\n */\nexport class ModelComponent extends Component {\n /** Source URL or `localasset://` path of the GLTF/GLB asset. */\n path: string;\n /** Loaded model object, populated asynchronously by the model loader. `null` until loaded. */\n object: THREE.Object3D | null;\n\n constructor(path: string) {\n super();\n this.path = path;\n this.object = null;\n }\n}\n","import { ModelComponent } from \"../../components/Model\";\nimport type { World } from \"../../World\";\n\nexport function createModelComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ModelComponent>\n): ModelComponent {\n const component = new ModelComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/**\n * Human-readable name for an entity. Shown in the editor hierarchy panel and\n * preserved across save/reload.\n *\n * @category Components\n */\nexport class Name extends Component {\n /** Display name for the entity. Shown in the editor hierarchy. */\n value: string;\n\n constructor(value: string) {\n super();\n this.value = value;\n }\n}\n","import { Name } from \"../../components/Name\";\nimport type { World } from \"../../World\";\n\nexport function createNameComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof Name>\n): Name {\n const component = new Name(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Object3DRef } from \"../../components/Object3DRef\";\nimport type { World } from \"../../World\";\n\nexport function createObject3DRefComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof Object3DRef>\n): Object3DRef {\n const component = new Object3DRef(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type { EntityId } from \"../types\";\n\n/**\n * Records the parent entity id for hierarchical scene graphs. `null` means\n * the entity is at the world root. The `ObjectManagementSystem` reconciles\n * scene-graph parenting from this component each frame.\n *\n * @category Components\n */\nexport class ParentId extends Component {\n /** Parent entity id, or `null` for root-level entities. */\n value: EntityId | null;\n\n constructor(value: EntityId | null = null) {\n super();\n this.value = value;\n }\n}\n","import { ParentId } from \"../../components/ParentId\";\nimport type { World } from \"../../World\";\n\nexport function createParentIdComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof ParentId>\n): ParentId {\n const component = new ParentId(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/** Aggregated post-processing effect chain authored on the scene environment. Each sub-effect has its own `enabled` flag plus per-effect parameters. */\nexport type PostprocessingState = {\n /** Master toggle. When `false` no post-processing is applied even if individual effects are enabled. */\n postEnabled: boolean;\n /** Depth-of-field (bokeh) effect. */\n dof: {\n /** Enable the effect. */\n enabled: boolean;\n /** Distance to the focal plane in world units. */\n focusDistance: number;\n /** Lens focal length controlling depth-of-field strength. */\n focalLength: number;\n /** Bokeh blur kernel scale. */\n bokehScale: number;\n };\n /** Bloom (HDR glow) effect. */\n bloom: {\n /** Enable the effect. */\n enabled: boolean;\n /** Strength of the bloom contribution. */\n intensity: number;\n /** Luminance threshold above which pixels bloom. */\n threshold: number;\n /** Blur radius applied to the bloom buffer. */\n radius: number;\n };\n /** Vignette (corner darkening) effect. */\n vignette: {\n /** Enable the effect. */\n enabled: boolean;\n /** Distance from screen center where the vignette begins. */\n offset: number;\n /** Maximum darkness applied at screen edges. */\n darkness: number;\n };\n /** Chromatic aberration (RGB channel offset) effect. */\n chromAberration: {\n /** Enable the effect. */\n enabled: boolean;\n /** Horizontal channel offset. */\n offsetX: number;\n /** Vertical channel offset. */\n offsetY: number;\n };\n /** Film-noise overlay. */\n noise: {\n /** Enable the effect. */\n enabled: boolean;\n /** Opacity of the noise layer in `[0, 1]`. */\n opacity: number;\n };\n /** Pixelation (mosaic) effect. */\n pixelation: {\n /** Enable the effect. */\n enabled: boolean;\n /** Pixel block size in screen pixels. */\n granularity: number;\n };\n /** Tone-mapping exposure control. */\n toneMapping: {\n /** Enable the effect. */\n enabled: boolean;\n /** Exposure multiplier applied before tone-mapping. */\n exposure: number;\n };\n /** Hue/saturation color grading. */\n hueSaturation: {\n /** Enable the effect. */\n enabled: boolean;\n /** Hue rotation in radians. */\n hue: number;\n /** Saturation offset (`0` = unchanged, `>0` = more saturated). */\n saturation: number;\n };\n /** Sepia color grade. */\n sepia: {\n /** Enable the effect. */\n enabled: boolean;\n /** Blend strength between original and sepia in `[0, 1]`. */\n intensity: number;\n };\n /** SMAA antialiasing pass. */\n smaa: {\n /** Enable the effect. */\n enabled: boolean;\n };\n /** Screen-space ambient occlusion. */\n ssao: {\n /** Enable the effect. */\n enabled: boolean;\n /** Strength of the AO contribution. */\n intensity: number;\n /** Sampling radius in world units. */\n radius: number;\n };\n /** Dot-screen (halftone) effect. */\n dotScreen: {\n /** Enable the effect. */\n enabled: boolean;\n /** Pattern scale (legacy field; use {@link scale} where available). */\n dotScreenScale: number;\n /** Pattern rotation in radians (legacy field; use {@link angle} where available). */\n dotScreenAngle: number;\n /** Pattern rotation in radians. */\n angle?: number;\n /** Pattern scale. */\n scale?: number;\n /** Three.js blend function override. */\n blendFunction?: number;\n /** Effect opacity in `[0, 1]`. */\n opacity?: number;\n };\n /** Glitch effect (digital corruption simulation). */\n glitch: {\n /** Enable the effect. */\n enabled: boolean;\n /** Three.js blend function override. */\n blendFunction?: number;\n /** RGB channel offset applied during a glitch burst. */\n chromaticAberrationOffset?: { x: number; y: number } | [number, number];\n /** `[min, max]` delay (seconds) between glitch bursts. */\n delay?: [number, number];\n /** `[min, max]` duration (seconds) of each glitch burst. */\n duration?: [number, number];\n /** Glitch displacement strength (scalar or per-axis). */\n strength?: number | { x: number; y: number };\n /** Size of the displacement texture sampled by the glitch shader. */\n dtSize?: number;\n /** Fraction of columns affected during a glitch burst. */\n columns?: number;\n /** Ratio between weak and strong glitch bursts. */\n ratio?: number;\n /** Glitch mode label (matches the postprocessing library's mode enum). */\n mode?: string;\n /** Force the glitch to remain active. */\n active?: boolean;\n };\n};\n\nexport const DEFAULT_POSTPROCESSING_STATE: PostprocessingState = {\n postEnabled: false,\n dof: {\n enabled: false,\n focusDistance: 0.015,\n focalLength: 0.018,\n bokehScale: 3,\n },\n bloom: {\n enabled: false,\n intensity: 1.2,\n threshold: 0.2,\n radius: 0.7,\n },\n vignette: {\n enabled: false,\n offset: 0.05,\n darkness: 1.2,\n },\n chromAberration: {\n enabled: false,\n offsetX: 0.003,\n offsetY: 0.003,\n },\n noise: {\n enabled: false,\n opacity: 0.12,\n },\n pixelation: {\n enabled: false,\n granularity: 6,\n },\n toneMapping: {\n enabled: false,\n exposure: 1.3,\n },\n hueSaturation: {\n enabled: false,\n hue: 0.05,\n saturation: 0.2,\n },\n sepia: {\n enabled: false,\n intensity: 0.5,\n },\n smaa: {\n enabled: false,\n },\n ssao: {\n enabled: false,\n intensity: 1.5,\n radius: 0.25,\n },\n dotScreen: {\n enabled: false,\n dotScreenScale: 1.2,\n dotScreenAngle: 1.57,\n scale: 1.2,\n angle: 1.57,\n blendFunction: undefined,\n opacity: undefined,\n },\n glitch: {\n enabled: false,\n blendFunction: undefined,\n chromaticAberrationOffset: undefined,\n delay: undefined,\n duration: undefined,\n strength: undefined,\n dtSize: undefined,\n columns: undefined,\n ratio: undefined,\n mode: undefined,\n active: undefined,\n },\n};\n\nfunction 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\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n\n return value;\n}\n\nfunction toBoolean(value: unknown, fallback: boolean): boolean {\n if (typeof value !== \"boolean\") {\n return fallback;\n }\n\n return value;\n}\n\nfunction normalizeNumberTuple(value: unknown): [number, number] | undefined {\n if (!Array.isArray(value) || value.length !== 2) {\n return undefined;\n }\n\n if (\n typeof value[0] !== \"number\" ||\n !Number.isFinite(value[0]) ||\n typeof value[1] !== \"number\" ||\n !Number.isFinite(value[1])\n ) {\n return undefined;\n }\n\n return [value[0], value[1]];\n}\n\nfunction normalizePostprocessing(\n value: Partial<PostprocessingState> | undefined,\n): PostprocessingState {\n const postprocessing = asRecord(value);\n const defaults = DEFAULT_POSTPROCESSING_STATE;\n\n const dof = asRecord(postprocessing?.dof);\n const bloom = asRecord(postprocessing?.bloom);\n const vignette = asRecord(postprocessing?.vignette);\n const chromAberration = asRecord(postprocessing?.chromAberration);\n const noise = asRecord(postprocessing?.noise);\n const pixelation = asRecord(postprocessing?.pixelation);\n const toneMapping = asRecord(postprocessing?.toneMapping);\n const hueSaturation = asRecord(postprocessing?.hueSaturation);\n const sepia = asRecord(postprocessing?.sepia);\n const smaa = asRecord(postprocessing?.smaa);\n const ssao = asRecord(postprocessing?.ssao);\n const dotScreen = asRecord(postprocessing?.dotScreen);\n const glitch = asRecord(postprocessing?.glitch);\n const glitchChromaticAberrationOffset = asRecord(\n glitch?.chromaticAberrationOffset,\n );\n const glitchStrength = asRecord(glitch?.strength);\n\n const dotScreenScale = toFiniteNumber(\n dotScreen?.dotScreenScale,\n defaults.dotScreen.dotScreenScale,\n );\n const dotScreenAngle = toFiniteNumber(\n dotScreen?.dotScreenAngle,\n defaults.dotScreen.dotScreenAngle,\n );\n\n const normalizedGlitchStrength =\n typeof glitch?.strength === \"number\" && Number.isFinite(glitch.strength)\n ? glitch.strength\n : glitchStrength &&\n typeof glitchStrength.x === \"number\" &&\n Number.isFinite(glitchStrength.x) &&\n typeof glitchStrength.y === \"number\" &&\n Number.isFinite(glitchStrength.y)\n ? { x: glitchStrength.x, y: glitchStrength.y }\n : undefined;\n\n const normalizedGlitchChromaticAberrationOffset =\n normalizeNumberTuple(glitch?.chromaticAberrationOffset) ??\n (glitchChromaticAberrationOffset &&\n typeof glitchChromaticAberrationOffset.x === \"number\" &&\n Number.isFinite(glitchChromaticAberrationOffset.x) &&\n typeof glitchChromaticAberrationOffset.y === \"number\" &&\n Number.isFinite(glitchChromaticAberrationOffset.y)\n ? {\n x: glitchChromaticAberrationOffset.x,\n y: glitchChromaticAberrationOffset.y,\n }\n : undefined);\n\n return {\n postEnabled: toBoolean(postprocessing?.postEnabled, defaults.postEnabled),\n dof: {\n enabled: toBoolean(dof?.enabled, defaults.dof.enabled),\n focusDistance: toFiniteNumber(dof?.focusDistance, defaults.dof.focusDistance),\n focalLength: toFiniteNumber(dof?.focalLength, defaults.dof.focalLength),\n bokehScale: toFiniteNumber(dof?.bokehScale, defaults.dof.bokehScale),\n },\n bloom: {\n enabled: toBoolean(bloom?.enabled, defaults.bloom.enabled),\n intensity: toFiniteNumber(bloom?.intensity, defaults.bloom.intensity),\n threshold: toFiniteNumber(bloom?.threshold, defaults.bloom.threshold),\n radius: toFiniteNumber(bloom?.radius, defaults.bloom.radius),\n },\n vignette: {\n enabled: toBoolean(vignette?.enabled, defaults.vignette.enabled),\n offset: toFiniteNumber(vignette?.offset, defaults.vignette.offset),\n darkness: toFiniteNumber(vignette?.darkness, defaults.vignette.darkness),\n },\n chromAberration: {\n enabled: toBoolean(chromAberration?.enabled, defaults.chromAberration.enabled),\n offsetX: toFiniteNumber(chromAberration?.offsetX, defaults.chromAberration.offsetX),\n offsetY: toFiniteNumber(chromAberration?.offsetY, defaults.chromAberration.offsetY),\n },\n noise: {\n enabled: toBoolean(noise?.enabled, defaults.noise.enabled),\n opacity: toFiniteNumber(noise?.opacity, defaults.noise.opacity),\n },\n pixelation: {\n enabled: toBoolean(pixelation?.enabled, defaults.pixelation.enabled),\n granularity: toFiniteNumber(pixelation?.granularity, defaults.pixelation.granularity),\n },\n toneMapping: {\n enabled: toBoolean(toneMapping?.enabled, defaults.toneMapping.enabled),\n exposure: toFiniteNumber(toneMapping?.exposure, defaults.toneMapping.exposure),\n },\n hueSaturation: {\n enabled: toBoolean(hueSaturation?.enabled, defaults.hueSaturation.enabled),\n hue: toFiniteNumber(hueSaturation?.hue, defaults.hueSaturation.hue),\n saturation: toFiniteNumber(\n hueSaturation?.saturation,\n defaults.hueSaturation.saturation,\n ),\n },\n sepia: {\n enabled: toBoolean(sepia?.enabled, defaults.sepia.enabled),\n intensity: toFiniteNumber(sepia?.intensity, defaults.sepia.intensity),\n },\n smaa: {\n enabled: toBoolean(smaa?.enabled, defaults.smaa.enabled),\n },\n ssao: {\n enabled: toBoolean(ssao?.enabled, defaults.ssao.enabled),\n intensity: toFiniteNumber(ssao?.intensity, defaults.ssao.intensity),\n radius: toFiniteNumber(ssao?.radius, defaults.ssao.radius),\n },\n dotScreen: {\n enabled: toBoolean(dotScreen?.enabled, defaults.dotScreen.enabled),\n dotScreenScale,\n dotScreenAngle,\n scale: toFiniteNumber(dotScreen?.scale, dotScreenScale),\n angle: toFiniteNumber(dotScreen?.angle, dotScreenAngle),\n blendFunction:\n typeof dotScreen?.blendFunction === \"number\" &&\n Number.isFinite(dotScreen.blendFunction)\n ? dotScreen.blendFunction\n : defaults.dotScreen.blendFunction,\n opacity:\n typeof dotScreen?.opacity === \"number\" && Number.isFinite(dotScreen.opacity)\n ? dotScreen.opacity\n : defaults.dotScreen.opacity,\n },\n glitch: {\n enabled: toBoolean(glitch?.enabled, defaults.glitch.enabled),\n blendFunction:\n typeof glitch?.blendFunction === \"number\" && Number.isFinite(glitch.blendFunction)\n ? glitch.blendFunction\n : defaults.glitch.blendFunction,\n chromaticAberrationOffset:\n normalizedGlitchChromaticAberrationOffset,\n delay: normalizeNumberTuple(glitch?.delay) ?? defaults.glitch.delay,\n duration: normalizeNumberTuple(glitch?.duration) ?? defaults.glitch.duration,\n strength: normalizedGlitchStrength,\n dtSize:\n typeof glitch?.dtSize === \"number\" && Number.isFinite(glitch.dtSize)\n ? glitch.dtSize\n : defaults.glitch.dtSize,\n columns:\n typeof glitch?.columns === \"number\" && Number.isFinite(glitch.columns)\n ? glitch.columns\n : defaults.glitch.columns,\n ratio:\n typeof glitch?.ratio === \"number\" && Number.isFinite(glitch.ratio)\n ? glitch.ratio\n : defaults.glitch.ratio,\n mode: typeof glitch?.mode === \"string\" ? glitch.mode : defaults.glitch.mode,\n active: toBoolean(glitch?.active, defaults.glitch.active ?? false),\n },\n };\n}\n\n/**\n * Postprocessing stack settings (depth-of-field, bloom, vignette, chromatic\n * aberration, noise, pixelation, tone mapping, hue/saturation, sepia, SMAA,\n *\n * Use `world.getPostprocessingComponent()` to access this component directly\n * from a Behaviour script. Mutate `values` to toggle effects or adjust\n * parameters at runtime; `PostprocessingSyncSystem` applies changes next frame.\n * SSAO, dot-screen, glitch). The render system applies enabled effects in a\n * `postprocessing`-library composer when `postEnabled` is `true`. Singleton-\n * style — attached to one entity per scene.\n *\n * @category Components\n */\nexport class Postprocessing extends Component {\n /** Aggregated post-processing state. Saved with the project. */\n values: PostprocessingState;\n\n constructor(values?: Partial<PostprocessingState>) {\n super();\n this.values = normalizePostprocessing(values);\n }\n}\n","import {\n Postprocessing,\n type PostprocessingState,\n} from \"../../components/Postprocessing\";\nimport type { World } from \"../../World\";\n\nexport function createPostprocessingComponent(\n world: World,\n entityId: number,\n values?: Partial<PostprocessingState>,\n): Postprocessing {\n const component = new Postprocessing(values);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/**\n * One script attached to an entity. Multiple entries may target a single\n * entity (different classes from the same or different files).\n */\nexport type ScriptEntry = {\n /** Owning entity id. */\n entityId: number;\n /** Class name exported by the script module (default export class name). */\n className: string;\n /** Compiled script URL (e.g. `localasset://.../scripts/foo.js`). */\n scriptUrl: string;\n /** When `false`, the script is skipped each frame. */\n enabled: boolean;\n /**\n * When `true`, the script is executed inside the editor (not just at preview/runtime).\n * Enables direct Three.js scene access via `this.world.getScene()` / `getCamera()` /\n * `getRenderer()` for logic the editor's object palette cannot produce (custom shaders,\n * procedural geometry, grass, etc.). Defaults to `false`.\n */\n executeInEditor?: boolean;\n /** Inspector-bound payload exposed to the script as `this.data`. */\n data: Record<string, unknown>;\n /** Last load/runtime status reported by `ScriptBehaviourSystem`. */\n runtimeState?: \"idle\" | \"loading\" | \"ready\" | \"error\";\n /** Optional human-readable status message (e.g. compile/load error). */\n runtimeMessage?: string;\n};\n\n/**\n * Component holding the list of {@link ScriptEntry | scripts} attached to an\n * entity. Loaded from the saved project; the runtime-side fields\n * (`scriptInstance`, `scriptInstances`) are non-enumerable so they never leak\n * into save data or undo history.\n *\n * @remarks\n * Authored scripts subclass {@link Behaviour}.\n *\n * @category Components\n */\nexport class ScriptComponent extends Component {\n /** Authored script entries attached to the entity. Each entry references a class by name plus its inspector field overrides. Saved with the project. */\n entries: ScriptEntry[];\n /** First live behaviour instance after compile/load. Non-enumerable, so it does not appear in save data. `null` when no script is loaded. */\n declare scriptInstance: unknown | null;\n /** Map of `entityId` to its compiled behaviour instance (one entry per script bound to the entity). Non-enumerable, so it does not appear in save data. */\n declare scriptInstances: Map<number, unknown>;\n\n constructor(entries: ScriptEntry[] = []) {\n super();\n\n this.entries = entries.map((entry) => ({\n entityId: typeof entry.entityId === \"number\" ? entry.entityId : 0,\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 executeInEditor: typeof entry.executeInEditor === \"boolean\" ? entry.executeInEditor : false,\n data:\n entry.data && typeof entry.data === \"object\" && !Array.isArray(entry.data)\n ? (entry.data as Record<string, unknown>)\n : {},\n runtimeState: entry.runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\" ? entry.runtimeMessage : undefined,\n }));\n\n // Runtime-only reference used by ScriptBehaviourSystem.\n // Keep non-enumerable so snapshots/history/hydration payloads remain stable.\n Object.defineProperty(this, \"scriptInstance\", {\n value: null,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n\n // Runtime-only map of all entry instances keyed by entryIndex.\n // Non-enumerable for the same reason as scriptInstance.\n Object.defineProperty(this, \"scriptInstances\", {\n value: new Map<number, unknown>(),\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n}\n","import { ScriptComponent, type ScriptEntry } from \"../../components/ScriptComponent\";\nimport type { World } from \"../../World\";\n\ntype ScriptComponentPayload = {\n entries?: Array<Partial<ScriptEntry>>;\n};\n\nexport function createScriptComponent(\n world: World,\n entityId: number,\n payload: ScriptComponentPayload = {},\n): ScriptComponent {\n const entries = Array.isArray(payload.entries)\n ? payload.entries.map((entry) => ({\n entityId,\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 && typeof entry.data === \"object\" && !Array.isArray(entry.data)\n ? (entry.data as Record<string, unknown>)\n : {},\n runtimeState: entry.runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\" ? entry.runtimeMessage : undefined,\n }))\n : [];\n\n const component = new ScriptComponent(entries);\n\n world.addComponent(entityId, component);\n return component;\n}","import { Component } from \"../Component\";\n\n/**\n * Toggles whether the editor selection system can pick this entity. When\n * `enabled` is `false`, the entity is excluded from raycast hit tests.\n *\n * @category Components\n */\nexport class Selectable extends Component {\n /** When `false`, the editor selection raycaster ignores this entity. */\n enabled: boolean;\n\n constructor(enabled = true) {\n super();\n this.enabled = enabled;\n }\n}\n","import { Selectable } from \"../../components/Selectable\";\nimport type { World } from \"../../World\";\n\nexport function createSelectableComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof Selectable>\n): Selectable {\n const component = new Selectable(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport type { EntityId } from \"../types\";\n\n/** Active gizmo mode in the editor. */\nexport type TransformModeValue = \"translate\" | \"rotate\" | \"scale\";\n/** Reference frame for the active gizmo. */\nexport type TransformSpaceValue = \"world\" | \"local\";\n\n/**\n * Singleton-style component (attached once to a system entity) that mirrors\n * the editor's current transform-gizmo state into the ECS world. Persisted in\n * snapshots so undo/redo restores the exact gizmo configuration.\n *\n * @category Components\n */\nexport class SelectionTransformState extends Component {\n /** Active gizmo mode (`translate`, `rotate`, or `scale`). */\n transform: TransformModeValue;\n /** Reference frame for the gizmo (`world` or `local`). */\n space: TransformSpaceValue;\n /** Currently selected entity id, or `null` if nothing is selected. */\n selectedEntityId: EntityId | null;\n\n constructor(\n transform: TransformModeValue = \"translate\",\n space: TransformSpaceValue = \"world\",\n selectedEntityId: EntityId | null = null,\n ) {\n super();\n this.transform = transform;\n this.space = space;\n this.selectedEntityId = selectedEntityId;\n }\n}\n","import { SelectionTransformState } from \"../../components/SelectionTransformState\";\nimport type { World } from \"../../World\";\n\nexport function createSelectionTransformStateComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof SelectionTransformState>\n): SelectionTransformState {\n const component = new SelectionTransformState(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * Camera-facing 2D sprite. Unlike {@link ImageComponent}, sprites use\n * `THREE.Sprite` and always render as billboards.\n *\n * @category Components\n */\nexport class SpriteComponent extends Component {\n /** Source URL or `localasset://` path of the sprite image. */\n path: string;\n /** Width of the sprite in world units. */\n width: number;\n /** Height of the sprite in world units. */\n height: number;\n /** Loaded texture, populated asynchronously. `null` until loaded. */\n texture: THREE.Texture | null;\n /** Live `THREE.Sprite` placed in the scene. `null` until built. */\n object: THREE.Sprite | null;\n\n constructor(path: string, width: number = 1, height: number = 1) {\n super();\n this.path = path;\n this.width = width;\n this.height = height;\n this.texture = null;\n this.object = null;\n }\n}\n","import { SpriteComponent } from \"../../components/Sprite\";\nimport type { World } from \"../../World\";\n\nexport function createSpriteComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof SpriteComponent>\n): SpriteComponent {\n const component = new SpriteComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\nimport {\n Euler,\n Quaternion,\n Vector3,\n type EulerOrder,\n} from \"three\";\n\n/** Plain XYZ vector. All ECS transform fields use this shape rather than `THREE.Vector3` so they save cleanly with the project. */\nexport type Vec3 = {\n /** X component. */\n x: number;\n /** Y component. */\n y: number;\n /** Z component. */\n z: number;\n};\n\n/** Optional initial values passed to {@link TransformComponent}. Missing axes default to `0` for position/rotation and `1` for scale. */\nexport type TransformData = {\n /** Initial position (defaults to `{ 0, 0, 0 }`). */\n position?: Partial<Vec3>;\n /** Initial rotation in **radians** (defaults to `{ 0, 0, 0 }`). */\n rotation?: Partial<Vec3>;\n /** Initial scale (defaults to `{ 1, 1, 1 }`). */\n scale?: Partial<Vec3>;\n};\n\ntype TransformInput = Vector3 | Euler | Quaternion;\n\nfunction readXYZ(input: TransformInput): Vec3 {\n return {\n x: input.x,\n y: input.y,\n z: input.z,\n };\n}\n\n/**\n * Position, rotation, and scale of an entity in its parent's local space.\n *\n * @remarks\n * Rotation is stored in **radians** (Euler XYZ). The editor inspector converts\n * to/from degrees for display — do not store degrees in this component.\n * Mutations should go through the `setPosition` / `setRotation` / `setScale`\n * helpers so dependent systems pick up the change.\n *\n * @category Components\n */\nexport class TransformComponent extends Component {\n /** Local position relative to the parent (or world if no parent). */\n position: Vec3;\n /** Local rotation as Euler XYZ in **radians**. */\n rotation: Vec3;\n /** Local scale factors per axis (`1` = identity). */\n scale: Vec3;\n\n constructor(data: TransformData = {}) {\n super();\n\n const position = data.position ?? {};\n const rotation = data.rotation ?? {};\n const scale = data.scale ?? {};\n\n this.position = {\n x: position.x ?? 0,\n y: position.y ?? 0,\n z: position.z ?? 0,\n };\n\n this.rotation = {\n x: rotation.x ?? 0,\n y: rotation.y ?? 0,\n z: rotation.z ?? 0,\n };\n\n this.scale = {\n x: scale.x ?? 1,\n y: scale.y ?? 1,\n z: scale.z ?? 1,\n };\n }\n\n toPositionVector3(target = new Vector3()): Vector3 {\n return target.set(this.position.x, this.position.y, this.position.z);\n }\n\n toRotationEuler(\n target = new Euler(),\n order: EulerOrder = \"XYZ\",\n ): Euler {\n return target.set(this.rotation.x, this.rotation.y, this.rotation.z, order);\n }\n\n toRotationQuaternion(\n target = new Quaternion(),\n order: EulerOrder = \"XYZ\",\n ): Quaternion {\n const euler = new Euler(\n this.rotation.x,\n this.rotation.y,\n this.rotation.z,\n order,\n );\n return target.setFromEuler(euler);\n }\n\n toScaleVector3(target = new Vector3()): Vector3 {\n return target.set(this.scale.x, this.scale.y, this.scale.z);\n }\n\n setPosition(input: TransformInput): this {\n const next = readXYZ(input);\n this.position.x = next.x;\n this.position.y = next.y;\n this.position.z = next.z;\n return this;\n }\n\n setScale(input: TransformInput): this {\n const next = readXYZ(input);\n this.scale.x = next.x;\n this.scale.y = next.y;\n this.scale.z = next.z;\n return this;\n }\n\n setRotation(input: TransformInput, order: EulerOrder = \"XYZ\"): this {\n if (input instanceof Quaternion) {\n const euler = new Euler().setFromQuaternion(input, order);\n this.rotation.x = euler.x;\n this.rotation.y = euler.y;\n this.rotation.z = euler.z;\n return this;\n }\n\n const next = readXYZ(input);\n this.rotation.x = next.x;\n this.rotation.y = next.y;\n this.rotation.z = next.z;\n return this;\n }\n}\n","import { TransformComponent } from \"../../components/Transform\";\nimport type { World } from \"../../World\";\n\nexport function createTransformComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof TransformComponent>\n): TransformComponent {\n const component = new TransformComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\nimport type {\n CubeMeshParameters,\n MeshGeometryParameters,\n PlaneMeshParameters,\n RadiusHeightMeshParameters,\n RadiusMeshParameters,\n} from \"./MeshGeometry\";\nimport { DEFAULT_MESH_GEOMETRY_PARAMETERS } from \"./MeshGeometry\";\n\n/**\n * Per-instance transform stored inside {@link InstancedMeshComponent}.\n * All rotations are in radians.\n */\nexport type InstanceTransform = {\n position: { x: number; y: number; z: number };\n /** Euler rotation in radians (XYZ order). */\n rotation: { x: number; y: number; z: number };\n scale: { x: number; y: number; z: number };\n};\n\n/** Primitive geometry kinds and custom 3D model kind supported by instanced mesh rendering. */\nexport type InstancedMeshKind =\n | \"capsule\"\n | \"cube\"\n | \"cylinder\"\n | \"model\"\n | \"plane\"\n | \"sphere\";\n\n/** Default identity instance transform. */\nexport const DEFAULT_INSTANCE_TRANSFORM: InstanceTransform = {\n position: { x: 0, y: 0, z: 0 },\n rotation: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n};\n\n/** Default geometry parameters per instanced mesh kind. For \"model\" kind, cube params are stored as a placeholder (unused). */\nexport const DEFAULT_INSTANCED_MESH_PARAMETERS: Record<\n InstancedMeshKind,\n MeshGeometryParameters\n> = {\n capsule: DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule,\n cube: DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,\n cylinder: DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder,\n model: DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,\n plane: DEFAULT_MESH_GEOMETRY_PARAMETERS.plane,\n sphere: DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere,\n};\n\n/**\n * Holds authored instanced-mesh data for an entity that renders as a\n * `THREE.InstancedMesh`. Supports primitive geometry kinds (cube, sphere,\n * plane, capsule, cylinder).\n *\n * The `instancedMesh` field is a live runtime reference that is **not**\n * serialized into snapshots — it is excluded by the snapshot normalizer in\n * `worldSnapshotUtils.ts` to prevent history churn.\n *\n * @category Components\n */\nexport class InstancedMeshComponent extends Component {\n /** Geometry kind for all instances. Use `\"model\"` for a custom GLTF/GLB asset. */\n meshKind: InstancedMeshKind;\n /**\n * Path to the GLTF/GLB asset when `meshKind === \"model\"`.\n * Serialized in snapshots and restored on hydration.\n */\n modelPath: string;\n /** Editable geometry parameters (width/height/depth, radius, etc.). Ignored when `meshKind === \"model\"`. */\n meshParameters: MeshGeometryParameters;\n /** Whether all instances cast shadows. */\n castShadow: boolean;\n /** Whether all instances receive shadows. */\n receiveShadow: boolean;\n /**\n * Ordered list of entity IDs for the instance slot entities owned by this group.\n * Each slot entity carries a `TransformComponent` that `InstancedMeshSystem`\n * reads every frame to build the per-instance matrix.\n */\n instanceEntityIds: number[];\n\n /**\n * Live runtime container managed by `InstancedMeshSystem`:\n * - For primitive kinds: a `THREE.InstancedMesh`.\n * - For `\"model\"` kind: a `THREE.Group` containing per-mesh `THREE.InstancedMesh` objects.\n * Excluded from snapshot serialization — do **not** read this in hydration code.\n */\n instancedMesh: THREE.Object3D | null;\n\n constructor(\n meshKind: InstancedMeshKind = \"cube\",\n meshParameters?: Partial<MeshGeometryParameters>,\n options?: {\n castShadow?: boolean;\n receiveShadow?: boolean;\n instanceEntityIds?: number[];\n modelPath?: string;\n },\n ) {\n super();\n this.meshKind = meshKind;\n this.modelPath = options?.modelPath ?? \"\";\n this.meshParameters = {\n ...DEFAULT_INSTANCED_MESH_PARAMETERS[meshKind],\n ...(meshParameters ?? {}),\n } as MeshGeometryParameters;\n this.castShadow = options?.castShadow ?? false;\n this.receiveShadow = options?.receiveShadow ?? false;\n this.instanceEntityIds = options?.instanceEntityIds ?? [];\n this.instancedMesh = null;\n }\n\n /** Sanitize and return a copy of the current mesh parameters with valid values. */\n getSanitizedParameters(): MeshGeometryParameters {\n const MIN_DIM = 0.01;\n const MIN_RAD = 0.001;\n const sanitize = (v: number, min: number) =>\n Number.isFinite(v) ? Math.max(min, v) : min;\n\n switch (this.meshKind) {\n case \"cube\": {\n const p = this.meshParameters as CubeMeshParameters;\n return {\n width: sanitize(p.width, MIN_DIM),\n height: sanitize(p.height, MIN_DIM),\n depth: sanitize(p.depth, MIN_DIM),\n };\n }\n case \"plane\": {\n const p = this.meshParameters as PlaneMeshParameters;\n return {\n width: sanitize(p.width, MIN_DIM),\n height: sanitize(p.height, MIN_DIM),\n };\n }\n case \"sphere\": {\n const p = this.meshParameters as RadiusMeshParameters;\n return { radius: sanitize(p.radius, MIN_RAD) };\n }\n case \"cylinder\":\n case \"capsule\": {\n const p = this.meshParameters as RadiusHeightMeshParameters;\n return {\n radius: sanitize(p.radius, MIN_RAD),\n height: sanitize(p.height, MIN_DIM),\n };\n }\n case \"model\":\n // No geometry parameters for model kind; return cube defaults as a placeholder.\n return DEFAULT_MESH_GEOMETRY_PARAMETERS.cube;\n }\n }\n}\n","import { InstancedMeshComponent } from \"../../components/InstancedMesh\";\nimport type { InstancedMeshKind } from \"../../components/InstancedMesh\";\nimport type { MeshGeometryParameters } from \"../../components/MeshGeometry\";\nimport type { World } from \"../../World\";\n\nexport function createInstancedMeshComponent(\n world: World,\n entityId: number,\n meshKind: InstancedMeshKind,\n meshParameters?: Partial<MeshGeometryParameters>,\n options?: {\n castShadow?: boolean;\n receiveShadow?: boolean;\n instanceEntityIds?: number[];\n modelPath?: string;\n },\n): InstancedMeshComponent {\n const component = new InstancedMeshComponent(meshKind, meshParameters, options);\n world.addComponent(entityId, component);\n return component;\n}\n","import { Component } from \"../Component\";\n\n/**\n * Marks an entity as an instance slot owned by an {@link InstancedMeshComponent} group entity.\n *\n * Instance slot entities are lightweight data containers — they carry\n * `TransformComponent` (the per-instance local transform) and this component,\n * but do **not** have an `Object3DRef`. Their transforms are consumed each\n * frame by `InstancedMeshSystem` to compose the instance matrix.\n *\n * @category Components\n */\nexport class InstanceSlotComponent extends Component {\n /** Entity ID of the owning `instancedMesh` group entity. */\n groupEntityId: number;\n /** Zero-based index of this slot within the group's `instanceEntityIds` array. */\n slotIndex: number;\n\n constructor(groupEntityId: number, slotIndex: number) {\n super();\n this.groupEntityId = groupEntityId;\n this.slotIndex = slotIndex;\n }\n}\n","import { InstanceSlotComponent } from \"../../components/InstanceSlotComponent\";\nimport type { World } from \"../../World\";\n\nexport function createInstanceSlotComponent(\n world: World,\n entityId: number,\n groupEntityId: number,\n slotIndex: number,\n): InstanceSlotComponent {\n const component = new InstanceSlotComponent(groupEntityId, slotIndex);\n world.addComponent(entityId, component);\n return component;\n}\n","import type * as THREE from \"three\";\n\nimport { Component } from \"../Component\";\n\n/**\n * @internal Default options applied when no override is provided.\n */\nconst DEFAULT_VIDEO_OPTIONS = {\n autoplay: false,\n loop: true,\n volume: 1,\n width: 1,\n height: 1,\n isGreenScreen: false,\n backgroundColor: \"#00ff00\",\n similarity: 0.4,\n smoothness: 0.08,\n spill: 0.12,\n /** When `true`, the video's audio stream is spatialized using the entity's transform. */\n positional: false,\n /** Distance at which volume is unattenuated (positional only). */\n refDistance: 1,\n /** WebAudio distance model (`linear`, `inverse`, `exponential`). Positional only. */\n distanceModel: \"inverse\",\n /** How quickly volume falls off past `refDistance`. Positional only. */\n rolloffFactor: 1,\n};\n\n/**\n * Plays a video file as a texture on a quad. Supports green-screen keying\n * (`isGreenScreen`, `backgroundColor`, `similarity`, `smoothness`, `spill`).\n * The video element, texture, and material are runtime-only and re-created\n * when the project loads.\n *\n * @category Components\n */\nexport class VideoComponent extends Component {\n /** Source URL or `localasset://` path of the video file. */\n path: string;\n /**\n * Playback + green-screen options.\n *\n * | Field | Default | Description |\n * |---|---|---|\n * | `autoplay` | `false` | Start playback as soon as the video is ready. |\n * | `loop` | `true` | Loop playback indefinitely. |\n * | `volume` | `1` | Linear gain in `[0, 1]`. |\n * | `width` | `1` | Quad width in world units. |\n * | `height` | `1` | Quad height in world units. |\n * | `isGreenScreen` | `false` | Enable chroma keying using the fields below. |\n * | `backgroundColor` | `\"#00ff00\"` | Color to key out (CSS color string). |\n * | `similarity` | `0.4` | How close a pixel must be to the key to be removed (`0`–`1`). |\n * | `smoothness` | `0.08` | Soft-edge thickness around the key threshold. |\n * | `spill` | `0.12` | Amount of color spill suppression near edges. |\n * | `positional` | `false` | When `true`, the video's audio stream is spatialized using the entity's 3D position. |\n * | `refDistance` | `1` | Distance at which volume is unattenuated (positional only). |\n * | `distanceModel` | `\"inverse\"` | WebAudio distance model (`linear`, `inverse`, `exponential`). Positional only. |\n * | `rolloffFactor` | `1` | How quickly volume falls off past `refDistance`. Positional only. |\n */\n options: typeof DEFAULT_VIDEO_OPTIONS;\n /** Live three.js object hosting the video quad. `null` until built. */\n object: THREE.Object3D | null;\n /** Underlying HTML video element. `null` until built. */\n videoElement: HTMLVideoElement | null;\n /** Three.js texture sampling the video element. `null` until built. */\n texture: THREE.VideoTexture | null;\n /** Material rendering the video texture (with green-screen shader when enabled). `null` until built. */\n material: THREE.Material | null;\n /**\n * THREE.js audio node connected to this video's audio stream via\n * `setMediaElementSource`. Present only in preview when the camera\n * listener is available. `null` in editor mode.\n */\n audioNode: THREE.Audio<GainNode> | THREE.PositionalAudio | null;\n\n /**\n * Whether the video should be playing. Managed by `VideoSystem` in preview.\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link play} / {@link stop}.\n */\n declare isPlaying: boolean;\n\n /**\n * Whether the video is paused mid-playback (position is preserved).\n * Non-enumerable — not persisted to snapshots or save data.\n * Set via {@link pause} / {@link play} / {@link stop}.\n */\n declare isPaused: boolean;\n\n constructor(\n path: string,\n options: Partial<typeof DEFAULT_VIDEO_OPTIONS> = {},\n ) {\n super();\n this.path = path;\n this.options = {\n ...DEFAULT_VIDEO_OPTIONS,\n ...options,\n };\n this.object = null;\n this.videoElement = null;\n this.texture = null;\n this.material = null;\n this.audioNode = null;\n\n // Runtime-only playback state. Non-enumerable so these values are never\n // written into save data, debug snapshots, or undo history.\n Object.defineProperty(this, \"isPlaying\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n Object.defineProperty(this, \"isPaused\", {\n value: false,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n\n /**\n * Signals `VideoSystem` to start (or resume) playback.\n * Has no direct effect in the editor — `VideoSystem` drives the actual\n * HTML video element call in preview.\n */\n play(): void {\n this.isPlaying = true;\n this.isPaused = false;\n }\n\n /**\n * Signals `VideoSystem` to pause playback, preserving the current position.\n * Calling {@link play} afterwards resumes from where it paused.\n * No-op if not currently playing.\n */\n pause(): void {\n if (!this.isPlaying) return;\n this.isPlaying = false;\n this.isPaused = true;\n }\n\n /**\n * Signals `VideoSystem` to stop playback and reset the playback position.\n */\n stop(): void {\n this.isPlaying = false;\n this.isPaused = false;\n }\n}\n","import { VideoComponent } from \"../../components/Video\";\nimport type { World } from \"../../World\";\n\nexport function createVideoComponent(\n world: World,\n entityId: number,\n ...args: ConstructorParameters<typeof VideoComponent>\n): VideoComponent {\n const component = new VideoComponent(...args);\n world.addComponent(entityId, component);\n return component;\n}\n","import {\n createAnimationComponent,\n createAudioComponent,\n createCameraComponent,\n createEnvironmentComponent,\n createEntityTypeComponent,\n createImageComponent,\n createImageTargetAnchorComponent,\n createImageTargetComponent,\n createInstancedMeshComponent,\n createLightComponent,\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n createModelComponent,\n createNameComponent,\n createObject3DRefComponent,\n createParentIdComponent,\n createPhysicsComponent,\n createPostprocessingComponent,\n createScriptComponent,\n createSelectableComponent,\n createSelectionTransformStateComponent,\n createSpriteComponent,\n createTransformComponent,\n createVideoComponent,\n} from \"./components\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\n\nexport function registerDefaultComponentFactories(\n objectManagementSystem: ObjectManagementSystem,\n): void {\n objectManagementSystem.registerComponentFactory(\"animation\", createAnimationComponent);\n objectManagementSystem.registerComponentFactory(\"audio\", createAudioComponent);\n objectManagementSystem.registerComponentFactory(\"camera\", createCameraComponent);\n objectManagementSystem.registerComponentFactory(\"physics\", createPhysicsComponent);\n objectManagementSystem.registerComponentFactory(\"environment\", createEnvironmentComponent);\n objectManagementSystem.registerComponentFactory(\"entityType\", createEntityTypeComponent);\n objectManagementSystem.registerComponentFactory(\"image\", createImageComponent);\n objectManagementSystem.registerComponentFactory(\n \"imageTargetAnchor\",\n createImageTargetAnchorComponent,\n );\n objectManagementSystem.registerComponentFactory(\"imageTarget\", createImageTargetComponent);\n objectManagementSystem.registerComponentFactory(\"light\", createLightComponent);\n objectManagementSystem.registerComponentFactory(\"material\", createMaterialComponent);\n objectManagementSystem.registerComponentFactory(\"mesh\", createMeshComponent);\n objectManagementSystem.registerComponentFactory(\n \"meshGeometry\",\n createMeshGeometryComponent,\n );\n objectManagementSystem.registerComponentFactory(\"model\", createModelComponent);\n objectManagementSystem.registerComponentFactory(\"name\", createNameComponent);\n objectManagementSystem.registerComponentFactory(\n \"object3DRef\",\n createObject3DRefComponent,\n );\n objectManagementSystem.registerComponentFactory(\"parentId\", createParentIdComponent);\n objectManagementSystem.registerComponentFactory(\n \"postprocessing\",\n createPostprocessingComponent,\n );\n\n objectManagementSystem.registerComponentFactory(\"script\", createScriptComponent);\n objectManagementSystem.registerComponentFactory(\"selectable\", createSelectableComponent);\n objectManagementSystem.registerComponentFactory(\n \"selectionTransformState\",\n createSelectionTransformStateComponent,\n );\n objectManagementSystem.registerComponentFactory(\"sprite\", createSpriteComponent);\n objectManagementSystem.registerComponentFactory(\"transform\", createTransformComponent);\n objectManagementSystem.registerComponentFactory(\"video\", createVideoComponent);\n objectManagementSystem.registerComponentFactory(\"instancedMesh\", createInstancedMeshComponent);\n}\n","import * as THREE from \"three\";\nimport type { GLTF } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { clone as cloneWithSkeleton } from \"three/examples/jsm/utils/SkeletonUtils.js\";\n\n/**\n * userData flag set on geometries/materials that back shared (cached) model\n * scenes. Entity disposal must skip these — other live clones and future\n * spawns reference the same GPU resources.\n */\nexport const SHARED_MODEL_RESOURCE_FLAG = \"spatialEcsSharedModelResource\";\n\nconst modelCache = new Map<string, Promise<GLTF>>();\n\nfunction markSharedResources(root: THREE.Object3D): void {\n root.traverse((child) => {\n if (!(child instanceof THREE.Mesh)) {\n return;\n }\n if (child.geometry) {\n child.geometry.userData[SHARED_MODEL_RESOURCE_FLAG] = true;\n }\n const materials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n for (const material of materials) {\n if (material) {\n material.userData[SHARED_MODEL_RESOURCE_FLAG] = true;\n }\n }\n });\n}\n\n/**\n * Load a GLTF once per URL and share the parsed result, so repeated spawns of\n * the same model skip both the fetch and the parse. The cached scene must\n * never be mounted directly (an Object3D has a single parent) — mount a\n * cloneModelScene() of it. Failed loads are evicted so a retry re-fetches.\n */\nexport function loadSharedGltf(\n url: string,\n load: () => Promise<GLTF>,\n): Promise<GLTF> {\n let pending = modelCache.get(url);\n if (!pending) {\n pending = load().then((gltf) => {\n markSharedResources(gltf.scene);\n return gltf;\n });\n pending.catch(() => {\n modelCache.delete(url);\n });\n modelCache.set(url, pending);\n }\n return pending;\n}\n\n/**\n * Skeleton-aware clone of a cached model scene for mounting. Geometries and\n * materials are shared with the cached original (marked via\n * SHARED_MODEL_RESOURCE_FLAG); the object hierarchy — including rebound\n * skeletons for skinned meshes — is fresh per call.\n */\nexport function cloneModelScene(scene: THREE.Object3D): THREE.Object3D {\n return cloneWithSkeleton(scene);\n}\n\n/**\n * Forget cached models (one URL, or everything). Subsequent loads fetch and\n * parse anew. Does not dispose GPU resources — live clones may still use them.\n */\nexport function clearModelCache(url?: string): void {\n if (typeof url === \"string\") {\n modelCache.delete(url);\n return;\n }\n modelCache.clear();\n}\n","import * as THREE from \"three\";\n\nimport { Object3DRef } from \"../components/Object3DRef\";\nimport { ParentId } from \"../components/ParentId\";\nimport type { TransformData } from \"../components/Transform\";\nimport { TransformComponent } from \"../components/Transform\";\nimport type { EcsSystem } from \"../System\";\nimport { SHARED_MODEL_RESOURCE_FLAG } from \"../utils/modelCache\";\nimport type { World } from \"../World\";\nimport type { EntityId, EcsEntityKind } from \"../types\";\n\nexport type CreatePayload = {\n name?: string;\n transform?: TransformData;\n parentId?: EntityId | null;\n path?: string;\n options?: Record<string, unknown>;\n camera?: Record<string, unknown>;\n useWorldCamera?: boolean;\n};\n\nexport type CreateContext = {\n world: World;\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n payload: CreatePayload;\n isEditor?: boolean;\n};\n\nexport type EntityFactory = (context: CreateContext) => EntityId;\n\nexport type EcsComponentFactoryKind =\n | \"animation\"\n | \"audio\"\n | \"camera\"\n | \"environment\"\n | \"entityType\"\n | \"image\"\n | \"imageTargetAnchor\"\n | \"imageTarget\"\n | \"light\"\n | \"material\"\n | \"mesh\"\n | \"meshGeometry\"\n | \"model\"\n | \"name\"\n | \"object3DRef\"\n | \"parentId\"\n | \"physics\"\n | \"postprocessing\"\n | \"script\"\n | \"selectable\"\n | \"selectionTransformState\"\n | \"sprite\"\n | \"transform\"\n | \"video\"\n | \"instancedMesh\";\n\nexport type ComponentFactory = (\n world: World,\n entityId: EntityId,\n ...args: any[]\n) => unknown;\n\ntype CreateRequest = {\n kind: EcsEntityKind;\n payload: CreatePayload;\n onCreated?: (entityId: EntityId) => void;\n};\n\nexport function createTransform(input?: TransformData): TransformComponent {\n return new TransformComponent(input);\n}\n\nexport function applyTransform(\n object: THREE.Object3D,\n transform: TransformComponent,\n): void {\n object.position.set(\n transform.position.x,\n transform.position.y,\n transform.position.z,\n );\n object.rotation.set(\n transform.rotation.x,\n transform.rotation.y,\n transform.rotation.z,\n );\n object.scale.set(transform.scale.x, transform.scale.y, transform.scale.z);\n}\n\nexport class ObjectManagementSystem implements EcsSystem {\n private readonly scene: THREE.Scene;\n private readonly camera: THREE.PerspectiveCamera;\n private readonly isEditor: boolean;\n private readonly registry = new Map<EcsEntityKind, EntityFactory>();\n private readonly componentRegistry = new Map<\n EcsComponentFactoryKind,\n ComponentFactory\n >();\n private readonly createQueue: CreateRequest[] = [];\n\n constructor(\n scene: THREE.Scene,\n camera: THREE.PerspectiveCamera,\n isEditor = false,\n ) {\n this.scene = scene;\n this.camera = camera;\n this.isEditor = isEditor;\n }\n\n register(kind: EcsEntityKind, factory: EntityFactory): void {\n this.registry.set(kind, factory);\n }\n\n registerComponentFactory(\n kind: EcsComponentFactoryKind,\n factory: ComponentFactory,\n ): void {\n this.componentRegistry.set(kind, factory);\n }\n\n getOrCreateAudioListener(): THREE.AudioListener {\n const existing = this.camera.userData.ecsAudioListener;\n if (existing instanceof THREE.AudioListener) {\n return existing;\n }\n\n const listener = new THREE.AudioListener();\n this.camera.add(listener);\n this.camera.userData.ecsAudioListener = listener;\n return listener;\n }\n\n isEditorMode(): boolean {\n return this.isEditor;\n }\n\n getComponentFactory(kind: EcsComponentFactoryKind): ComponentFactory | null {\n return this.componentRegistry.get(kind) ?? null;\n }\n\n createComponentNow(\n kind: EcsComponentFactoryKind,\n world: World,\n entityId: EntityId,\n ...args: any[]\n ): unknown {\n const factory = this.componentRegistry.get(kind);\n if (!factory) {\n throw new Error(`Unknown component kind: ${kind}`);\n }\n\n return factory(world, entityId, ...args);\n }\n\n requestCreate(\n kind: EcsEntityKind,\n payload: CreatePayload = {},\n onCreated?: (entityId: EntityId) => void,\n ): void {\n this.createQueue.push({ kind, payload, onCreated });\n }\n\n createNow(\n kind: EcsEntityKind,\n world: World,\n payload: CreatePayload = {},\n ): EntityId {\n const factory = this.registry.get(kind);\n if (!factory) {\n throw new Error(`Unknown object kind: ${kind}`);\n }\n\n const entityId = factory({\n world,\n scene: this.scene,\n camera: this.camera,\n payload,\n isEditor: this.isEditor,\n });\n\n const object = world.getComponent(entityId, Object3DRef)?.object;\n if (object) {\n object.userData.ecsKind = kind;\n }\n\n if (payload.parentId !== undefined) {\n world.addComponent(entityId, new ParentId(payload.parentId));\n }\n\n return entityId;\n }\n\n /**\n * Removes an entity from the ECS world and its associated `Object3D` from the\n * THREE.js scene graph.\n *\n * @param world - The world the entity belongs to.\n * @param entityId - The entity to remove.\n * @param dispose - When `true`, traverses the entity's `Object3D` subtree and\n * calls `.dispose()` on every `BufferGeometry` and `Material` found. Pass\n * `true` when the entity will not be reused and you want to free GPU memory\n * immediately (e.g. dynamically spawned objects). Defaults to `false`.\n * @returns `true` if the entity existed and was removed; `false` if the entity\n * was not found.\n *\n * @example\n * ```ts\n * // Remove from scene, keep GPU resources (safe if geometry is shared)\n * objects.deleteEntity(world, entityId);\n *\n * // Remove from scene and free GPU memory (use for one-off spawned objects)\n * objects.deleteEntity(world, entityId, true);\n * ```\n */\n deleteEntity(world: World, entityId: EntityId, dispose = false): boolean {\n if (!world.hasEntity(entityId)) {\n return false;\n }\n\n const object3d = world.getComponent(entityId, Object3DRef)?.object;\n if (object3d?.parent) {\n object3d.parent.remove(object3d);\n }\n\n if (dispose && object3d) {\n object3d.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n // Resources backing shared (cached) model scenes are skipped —\n // other live clones and future spawns reference the same objects.\n if (!child.geometry?.userData?.[SHARED_MODEL_RESOURCE_FLAG]) {\n child.geometry?.dispose();\n }\n const materials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n for (const mat of materials) {\n if (mat && !mat.userData?.[SHARED_MODEL_RESOURCE_FLAG]) {\n mat.dispose();\n }\n }\n }\n });\n }\n\n world.destroyEntity(entityId);\n return true;\n }\n\n setParent(\n world: World,\n entityId: EntityId,\n parentId: EntityId | null,\n options?: {\n preserveWorldTransform?: boolean;\n },\n ): boolean {\n if (!world.hasEntity(entityId)) {\n return false;\n }\n\n if (parentId !== null && !world.hasEntity(parentId)) {\n return false;\n }\n\n if (parentId === entityId) {\n return false;\n }\n\n let ancestor = parentId;\n while (ancestor !== null) {\n if (ancestor === entityId) {\n return false;\n }\n\n ancestor = world.getComponent(ancestor, ParentId)?.value ?? null;\n }\n\n const parentComponent = world.getComponent(entityId, ParentId);\n if (parentComponent) {\n if (parentComponent.value === parentId) {\n return false;\n }\n\n parentComponent.value = parentId;\n } else {\n world.addComponent(entityId, new ParentId(parentId));\n }\n\n const preserveWorldTransform = options?.preserveWorldTransform ?? true;\n if (preserveWorldTransform) {\n const object = world.getComponent(entityId, Object3DRef)?.object;\n const parentObject =\n parentId !== null\n ? world.getComponent(parentId, Object3DRef)?.object ?? null\n : null;\n\n if (object) {\n // Refresh matrixWorld before attach so world-space preservation is accurate.\n this.scene.updateMatrixWorld(true);\n\n if (parentObject && parentObject !== object) {\n parentObject.attach(object);\n } else {\n this.scene.attach(object);\n }\n\n object.updateMatrixWorld(true);\n this.syncTransformComponentFromObject(world, entityId, object);\n }\n }\n\n this.reconcileSceneFromWorld(world);\n return true;\n }\n\n private syncTransformComponentFromObject(\n world: World,\n entityId: EntityId,\n object: THREE.Object3D,\n ): void {\n const transform = world.getComponent(entityId, TransformComponent);\n if (!transform) {\n return;\n }\n\n transform.position.x = object.position.x;\n transform.position.y = object.position.y;\n transform.position.z = object.position.z;\n\n transform.rotation.x = object.rotation.x;\n transform.rotation.y = object.rotation.y;\n transform.rotation.z = object.rotation.z;\n\n transform.scale.x = object.scale.x;\n transform.scale.y = object.scale.y;\n transform.scale.z = object.scale.z;\n }\n\n reconcileSceneFromWorld(world: World): void {\n const worldObjects = new Map<EntityId, THREE.Object3D>();\n const entityIds = world.query(Object3DRef);\n\n for (const entityId of entityIds) {\n const object = world.getComponent(entityId, Object3DRef)?.object;\n if (!object) {\n continue;\n }\n\n worldObjects.set(entityId, object);\n }\n\n for (const child of [...this.scene.children]) {\n const entityId = child.userData?.entityId;\n if (typeof entityId === \"number\" && !world.hasEntity(entityId)) {\n this.scene.remove(child);\n }\n }\n\n for (const [entityId, object] of worldObjects.entries()) {\n const parentEntityId = world.getComponent(entityId, ParentId)?.value;\n const parentObject =\n typeof parentEntityId === \"number\"\n ? worldObjects.get(parentEntityId)\n : undefined;\n\n if (parentObject && parentObject !== object) {\n if (object.parent !== parentObject) {\n // Reconcile hierarchy from ParentId while keeping Transform as local source of truth.\n parentObject.add(object);\n object.updateMatrixWorld(true);\n }\n continue;\n }\n\n if (object.parent !== this.scene) {\n // Reconcile hierarchy from ParentId while keeping Transform as local source of truth.\n this.scene.add(object);\n object.updateMatrixWorld(true);\n }\n }\n }\n\n update(world: World): void {\n for (const request of this.createQueue.splice(0)) {\n const entityId = this.createNow(request.kind, world, request.payload);\n request.onCreated?.(entityId);\n }\n\n this.reconcileSceneFromWorld(world);\n }\n}\n","import type * as THREE from \"three\";\n\nimport type { TransformData } from \"../../components/Transform\";\nimport {\n createEntityTypeComponent,\n createNameComponent,\n createObject3DRefComponent,\n createParentIdComponent,\n createSelectableComponent,\n} from \"../components\";\n\nimport {\n applyTransform,\n createTransform,\n} from \"../../systems/ObjectManagementSystem\";\nimport type { EcsEntityKind, EntityId } from \"../../types\";\nimport type { World } from \"../../World\";\n\ntype CreateBaseEntityOptions = {\n label: string;\n entityType: EcsEntityKind;\n transformInput?: TransformData;\n parentId?: EntityId | null;\n};\n\nexport function createBaseEntity(\n world: World,\n object: THREE.Object3D,\n options: CreateBaseEntityOptions,\n): number {\n const entityId = world.createEntity();\n object.userData.entityId = entityId;\n\n const transform = createTransform(options.transformInput);\n applyTransform(object, transform);\n\n world.addComponent(entityId, transform);\n createObject3DRefComponent(world, entityId, object);\n createNameComponent(world, entityId, options.label);\n createEntityTypeComponent(world, entityId, options.entityType);\n createParentIdComponent(world, entityId, options.parentId ?? null);\n createSelectableComponent(world, entityId, true);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createAudioComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction getOrCreateListener(\n camera: THREE.PerspectiveCamera,\n): THREE.AudioListener {\n const existing = camera.userData.ecsAudioListener;\n if (existing instanceof THREE.AudioListener) {\n return existing;\n }\n\n const listener = new THREE.AudioListener();\n camera.add(listener);\n camera.userData.ecsAudioListener = listener;\n\n return listener;\n}\n\n\nexport function createAudio({\n world,\n scene,\n camera,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Audio\",\n entityType: \"audio\",\n transformInput: payload.transform,\n });\n\n const audio = createAudioComponent(\n world,\n entityId,\n payload.path ?? \"\",\n payload.options ?? {},\n {\n object: anchor,\n listener: getOrCreateListener(camera),\n isEditor,\n },\n );\n scene.add(anchor);\n\n if (!audio.path) {\n return entityId;\n }\n\n if (!isEditor) {\n const loader = new THREE.AudioLoader();\n loader.load(\n audio.path,\n (buffer) => {\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n const sound = audio.audio;\n if (!sound) {\n return;\n }\n\n sound.setBuffer(buffer);\n if (audio.options.autoplay) {\n audio.play();\n }\n },\n undefined,\n (error) => {\n console.error(`Failed to load audio: ${audio.path}`, error);\n },\n );\n }\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport type {\n CameraComponentOptions,\n CameraProjection,\n CameraRuntimeType,\n} from \"../../components/Camera\";\nimport { createCameraComponent } from \"../components\";\nimport { Object3DRef } from \"../../components/Object3DRef\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\ntype CameraCreateOptions = {\n type?: CameraRuntimeType;\n isDefault?: boolean;\n projection?: CameraProjection;\n fov?: number;\n near?: number;\n far?: number;\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n zoom?: number;\n};\n\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 2000;\nconst DEFAULT_FOV = 50;\nconst DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT = 5;\n\nfunction readViewportAspect(): number {\n if (typeof window === \"undefined\") {\n return 1;\n }\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n if (\n Number.isFinite(width) &&\n Number.isFinite(height) &&\n width > 0 &&\n height > 0\n ) {\n return width / height;\n }\n\n return 1;\n}\n\nfunction toCameraCreateOptions(input: unknown): CameraCreateOptions {\n if (!input || typeof input !== \"object\") {\n return {};\n }\n\n const value = input as Record<string, unknown>;\n\n const type =\n value.type === \"3d\" || value.type === \"ar\"\n ? value.type\n : undefined;\n\n const projection =\n value.projection === \"orthographic\" || value.projection === \"perspective\"\n ? value.projection\n : undefined;\n\n return {\n type,\n isDefault: typeof value.isDefault === \"boolean\" ? value.isDefault : undefined,\n projection,\n fov: typeof value.fov === \"number\" && Number.isFinite(value.fov) ? value.fov : undefined,\n near:\n typeof value.near === \"number\" && Number.isFinite(value.near)\n ? value.near\n : undefined,\n far: typeof value.far === \"number\" && Number.isFinite(value.far) ? value.far : undefined,\n left:\n typeof value.left === \"number\" && Number.isFinite(value.left)\n ? value.left\n : undefined,\n right:\n typeof value.right === \"number\" && Number.isFinite(value.right)\n ? value.right\n : undefined,\n top:\n typeof value.top === \"number\" && Number.isFinite(value.top)\n ? value.top\n : undefined,\n bottom:\n typeof value.bottom === \"number\" && Number.isFinite(value.bottom)\n ? value.bottom\n : undefined,\n zoom:\n typeof value.zoom === \"number\" && Number.isFinite(value.zoom)\n ? value.zoom\n : undefined,\n };\n}\n\nfunction resolveCameraCreateOptions(payload: {\n options?: unknown;\n camera?: unknown;\n}): CameraCreateOptions {\n // Prefer new payload.options shape, but support legacy payload.camera for\n // backward compatibility with older editor/serialized payloads.\n const next = toCameraCreateOptions(payload.options);\n\n if (payload.options && typeof payload.options === \"object\") {\n return next;\n }\n\n return toCameraCreateOptions(payload.camera);\n}\n\nfunction applyCameraSettings(camera: THREE.Camera, options: CameraCreateOptions): void {\n const near = typeof options.near === \"number\" ? options.near : DEFAULT_NEAR;\n const far = typeof options.far === \"number\" ? options.far : DEFAULT_FAR;\n const projection = options.projection;\n\n if (camera instanceof THREE.PerspectiveCamera) {\n if (!projection || projection === \"perspective\") {\n camera.fov = typeof options.fov === \"number\" ? options.fov : DEFAULT_FOV;\n }\n\n camera.aspect = readViewportAspect();\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n return;\n }\n\n if (camera instanceof THREE.OrthographicCamera) {\n camera.left =\n typeof options.left === \"number\"\n ? options.left\n : -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.right =\n typeof options.right === \"number\"\n ? options.right\n : DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.top =\n typeof options.top === \"number\"\n ? options.top\n : DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.bottom =\n typeof options.bottom === \"number\"\n ? options.bottom\n : -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n camera.zoom = typeof options.zoom === \"number\" ? options.zoom : 1;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n }\n}\n\nfunction createCameraObject(options: CameraCreateOptions): THREE.Camera {\n const projection = options.projection ?? \"perspective\";\n const near = options.near ?? DEFAULT_NEAR;\n const far = options.far ?? DEFAULT_FAR;\n\n if (projection === \"orthographic\") {\n const top = options.top ?? DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const bottom = options.bottom ?? -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const left = options.left ?? -DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const right = options.right ?? DEFAULT_ORTHOGRAPHIC_HALF_HEIGHT;\n const camera = new THREE.OrthographicCamera(\n left,\n right,\n top,\n bottom,\n near,\n far,\n );\n\n camera.zoom = options.zoom ?? 1;\n camera.updateProjectionMatrix();\n return camera;\n }\n\n return new THREE.PerspectiveCamera(\n options.fov ?? DEFAULT_FOV,\n readViewportAspect(),\n near,\n far,\n );\n}\n\nexport function createCamera({ world, scene, camera, payload, isEditor }: CreateContext): number {\n const options = resolveCameraCreateOptions(payload);\n const useWorldCamera = !isEditor && (payload.useWorldCamera === true || Boolean(options.isDefault));\n const object = useWorldCamera ? camera : createCameraObject(options);\n\n const entityId = createBaseEntity(world, object, {\n label: payload.name ?? \"Camera\",\n entityType: \"camera\",\n transformInput: payload.transform,\n });\n\n const objectRef = world.getComponent(entityId, Object3DRef);\n if (objectRef?.object instanceof THREE.Camera) {\n objectRef.object.userData.entityId = entityId;\n }\n\n const componentOptions: CameraComponentOptions = {\n camera: object,\n type: options.type,\n isDefault: options.isDefault,\n projection: options.projection,\n fov: options.fov,\n near: options.near,\n far: options.far,\n left: options.left,\n right: options.right,\n top: options.top,\n bottom: options.bottom,\n zoom: options.zoom,\n };\n\n const component = createCameraComponent(world, entityId, componentOptions);\n\n if (useWorldCamera) {\n applyCameraSettings(object, options);\n } else {\n applyCameraSettings(object, options);\n\n if (isEditor && component.isDefault) {\n const helper = new THREE.CameraHelper(object);\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n object.add(helper);\n }\n\n scene.add(object);\n }\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createCapsule({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const geometry = new THREE.CapsuleGeometry(0.5, 1, 4, 8);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Capsule\",\n entityType: \"capsule\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"capsule\", mesh, {\n radius: 0.5,\n height: 1,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n scene.add(mesh);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createCube({ world, scene, payload }: CreateContext): number {\n const geometry = new THREE.BoxGeometry(1, 1, 1);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Cube\",\n entityType: \"cube\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"cube\", mesh, {\n width: 1,\n height: 1,\n depth: 1,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n\n scene.add(mesh);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createCylinder({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const geometry = new THREE.CylinderGeometry(0.5, 0.5, 1, 20);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Cylinder\",\n entityType: \"cylinder\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"cylinder\", mesh, {\n radius: 0.5,\n height: 1,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n scene.add(mesh);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction createEmptyEditorHelper(): THREE.LineSegments {\n const geometry = new THREE.EdgesGeometry(new THREE.BoxGeometry(0.1, 0.1, 0.1));\n const material = new THREE.LineBasicMaterial({\n color: \"#7f8ea3\",\n transparent: true,\n opacity: 0.9,\n depthTest: false,\n });\n\n const helper = new THREE.LineSegments(geometry, material);\n helper.renderOrder = 10;\n helper.userData.ecsHelper = true;\n\n return helper;\n}\n\nexport function createEmpty({ world, scene, payload, isEditor }: CreateContext): number {\n const object = new THREE.Group();\n\n const entityId = createBaseEntity(world, object, {\n label: payload.name ?? \"Empty\",\n entityType: \"empty\",\n transformInput: payload.transform,\n });\n\n // if (isEditor) {\n // object.add(createEmptyEditorHelper());\n // }\n\n scene.add(object);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createImageComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createImage({ world, scene, payload }: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const imagePath = payload.path ?? \"\";\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Image\",\n entityType: \"image\",\n transformInput: payload.transform,\n });\n\n const image = createImageComponent(world, entityId, imagePath);\n image.object = anchor;\n scene.add(anchor);\n\n if (!imagePath) {\n return entityId;\n }\n\n const loader = new THREE.TextureLoader();\n loader.load(\n imagePath,\n (texture) => {\n if (!world.hasEntity(entityId)) {\n texture.dispose();\n return;\n }\n\n const material = new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n });\n const geometry = new THREE.PlaneGeometry(1, 1);\n const plane = new THREE.Mesh(geometry, material);\n plane.userData.entityId = entityId;\n\n const textureImage = texture.image as { width?: number; height?: number } | undefined;\n const width = textureImage?.width ?? 1;\n const height = textureImage?.height ?? 1;\n const aspect = height > 0 ? width / height : 1;\n\n image.width = width;\n image.height = height;\n\n plane.scale.set(aspect, 1, 1);\n\n anchor.add(plane);\n image.texture = texture;\n image.object = plane;\n },\n undefined,\n (error) => {\n console.error(`Failed to load image: ${imagePath}`, error);\n },\n );\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n type ImageTarget,\n type ImageTargetReference,\n} from \"../../components/ImageTarget\";\nimport { createImageTargetComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\ntype ImageTargetOptions = {\n targets?: ImageTargetReference[];\n compiledTargetUrl?: string;\n compiledTargetDir?: string;\n};\n\nfunction toImageTargetOptions(input: unknown): ImageTargetOptions {\n if (!input || typeof input !== \"object\") {\n return {};\n }\n\n const value = input as {\n targets?: unknown;\n compiledTargetUrl?: unknown;\n compiledTargetDir?: unknown;\n };\n\n const targets = Array.isArray(value.targets)\n ? value.targets.filter((target): target is ImageTargetReference => {\n if (!target || typeof target !== \"object\") {\n return false;\n }\n\n const candidate = target as Partial<ImageTargetReference>;\n return (\n typeof candidate.id === \"number\" &&\n Number.isFinite(candidate.id) &&\n typeof candidate.url === \"string\" &&\n candidate.url.length > 0 &&\n typeof candidate.width === \"number\" &&\n Number.isFinite(candidate.width) &&\n typeof candidate.height === \"number\" &&\n Number.isFinite(candidate.height)\n );\n })\n : undefined;\n\n return {\n targets,\n compiledTargetUrl:\n typeof value.compiledTargetUrl === \"string\"\n ? value.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof value.compiledTargetDir === \"string\"\n ? value.compiledTargetDir\n : undefined,\n };\n}\n\nexport function createImageTarget({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const imagePath = payload.path ?? \"\";\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Image Target\",\n entityType: \"imageTarget\",\n transformInput: payload.transform,\n });\n\n const targetOptions = toImageTargetOptions(payload.options);\n const imageTarget: ImageTarget = createImageTargetComponent(\n world,\n entityId,\n targetOptions,\n );\n scene.add(anchor);\n\n // Only editor sessions should load and render image planes for targets.\n if (!isEditor || !imagePath) {\n return entityId;\n }\n\n const loader = new THREE.TextureLoader();\n loader.load(\n imagePath,\n (texture) => {\n if (!world.hasEntity(entityId)) {\n texture.dispose();\n return;\n }\n\n const material = new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n });\n const geometry = new THREE.PlaneGeometry(1, 1);\n const plane = new THREE.Mesh(geometry, material);\n plane.userData.entityId = entityId;\n\n const textureImage = texture.image as\n | { width?: number; height?: number }\n | undefined;\n const width = textureImage?.width ?? 1;\n const height = textureImage?.height ?? 1;\n const aspect = height > 0 ? width / height : 1;\n\n plane.scale.set(aspect, 1, 1);\n\n anchor.add(plane);\n imageTarget.texture = texture;\n imageTarget.object = plane;\n },\n undefined,\n (error) => {\n console.error(`Failed to load image target: ${imagePath}`, error);\n },\n );\n\n return entityId;\n}","import * as THREE from \"three\";\n\nimport {\n type InstancedMeshKind,\n type InstanceTransform,\n DEFAULT_INSTANCE_TRANSFORM,\n} from \"../../components/InstancedMesh\";\nimport { EntityType } from \"../../components/EntityType\";\nimport { Name } from \"../../components/Name\";\nimport { ParentId } from \"../../components/ParentId\";\nimport { Selectable } from \"../../components/Selectable\";\nimport { TransformComponent } from \"../../components/Transform\";\nimport { InstanceSlotComponent } from \"../../components/InstanceSlotComponent\";\nimport type { MeshGeometryParameters } from \"../../components/MeshGeometry\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createTransform } from \"../../systems/ObjectManagementSystem\";\nimport { createInstancedMeshComponent } from \"../components/InstancedMeshComponentFactory\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction isInstancedMeshKind(value: unknown): value is InstancedMeshKind {\n return (\n value === \"cube\" ||\n value === \"sphere\" ||\n value === \"plane\" ||\n value === \"cylinder\" ||\n value === \"capsule\" ||\n value === \"model\"\n );\n}\n\n/**\n * Creates a lightweight instance-slot entity for the given group, using the\n * provided transform data. Does NOT add an `Object3DRef` — instance slots are\n * pure data entities whose transform is read by `InstancedMeshSystem`.\n */\nfunction createInstanceSlotEntity(\n world: Parameters<typeof createBaseEntity>[0],\n groupEntityId: number,\n slotIndex: number,\n label: string,\n transform?: InstanceTransform,\n): number {\n const instanceEntityId = world.createEntity();\n world.addComponent(instanceEntityId, new Name(label));\n world.addComponent(\n instanceEntityId,\n createTransform(\n transform\n ? {\n position: transform.position,\n rotation: transform.rotation,\n scale: transform.scale,\n }\n : undefined,\n ),\n );\n world.addComponent(\n instanceEntityId,\n new InstanceSlotComponent(groupEntityId, slotIndex),\n );\n world.addComponent(instanceEntityId, new EntityType(\"instanceSlot\"));\n world.addComponent(instanceEntityId, new Selectable(true));\n world.addComponent(instanceEntityId, new ParentId(groupEntityId));\n return instanceEntityId;\n}\n\nexport function createInstancedMesh({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const opts = payload.options ?? {};\n const meshKind: InstancedMeshKind = isInstancedMeshKind(opts.meshKind)\n ? (opts.meshKind as InstancedMeshKind)\n : \"cube\";\n\n const meshParameters =\n opts.meshParameters && typeof opts.meshParameters === \"object\"\n ? (opts.meshParameters as Partial<MeshGeometryParameters>)\n : undefined;\n\n const castShadow =\n typeof opts.castShadow === \"boolean\" ? opts.castShadow : false;\n const receiveShadow =\n typeof opts.receiveShadow === \"boolean\" ? opts.receiveShadow : false;\n const modelPath =\n typeof opts.modelPath === \"string\" ? opts.modelPath : undefined;\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Instanced Mesh\",\n entityType: \"instancedMesh\",\n transformInput: payload.transform,\n });\n\n // Determine instance entity IDs.\n // Three cases:\n // 1. `opts.instanceEntityIds` is present (new-format hydration) — skip child creation.\n // 2. `opts.instances` is present (old-format migration) — create a slot entity per legacy transform.\n // 3. Neither — fresh creation from UI: create one default slot entity.\n let instanceEntityIds: number[] = [];\n\n if (Array.isArray(opts.instanceEntityIds)) {\n // New hydration format — child entities are already in snapshot.entities and\n // will be created separately. Leave instanceEntityIds empty here; it will be\n // populated by restoreComponentState + remapped by restorePostCreateComponents.\n instanceEntityIds = [];\n } else if (Array.isArray(opts.instances) && (opts.instances as InstanceTransform[]).length > 0) {\n // Old snapshot migration: create a slot entity for each legacy InstanceTransform.\n const legacyInstances = opts.instances as InstanceTransform[];\n for (let i = 0; i < legacyInstances.length; i++) {\n const slotId = createInstanceSlotEntity(\n world,\n entityId,\n i,\n `Instance ${i + 1}`,\n legacyInstances[i],\n );\n instanceEntityIds.push(slotId);\n }\n } else {\n // Fresh creation: one default instance.\n const slotId = createInstanceSlotEntity(\n world,\n entityId,\n 0,\n \"Instance 1\",\n { ...DEFAULT_INSTANCE_TRANSFORM },\n );\n instanceEntityIds = [slotId];\n }\n\n createInstancedMeshComponent(world, entityId, meshKind, meshParameters, {\n castShadow,\n receiveShadow,\n instanceEntityIds,\n modelPath,\n });\n\n scene.add(anchor);\n return entityId;\n}\n","import { EntityType } from \"../../components/EntityType\";\nimport { Name } from \"../../components/Name\";\nimport { ParentId } from \"../../components/ParentId\";\nimport { Selectable } from \"../../components/Selectable\";\nimport { TransformComponent } from \"../../components/Transform\";\nimport { InstanceSlotComponent } from \"../../components/InstanceSlotComponent\";\nimport { createTransform } from \"../../systems/ObjectManagementSystem\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\n\n/**\n * Creates a lightweight instance-slot entity.\n *\n * Instance slot entities carry `TransformComponent` and `InstanceSlotComponent`\n * but intentionally do **not** have an `Object3DRef` — they are pure data\n * containers whose transform is consumed by `InstancedMeshSystem` to build\n * instance matrices. They appear in the hierarchy as children of the owning\n * `instancedMesh` group entity.\n */\nexport function createInstanceSlot({ world, payload }: CreateContext): number {\n const opts = payload.options ?? {};\n const groupEntityId =\n typeof opts.groupEntityId === \"number\" ? opts.groupEntityId : -1;\n const slotIndex =\n typeof opts.slotIndex === \"number\" ? opts.slotIndex : 0;\n\n const entityId = world.createEntity();\n\n world.addComponent(\n entityId,\n new Name(payload.name ?? `Instance ${slotIndex + 1}`),\n );\n world.addComponent(entityId, createTransform(payload.transform));\n world.addComponent(entityId, new InstanceSlotComponent(groupEntityId, slotIndex));\n world.addComponent(entityId, new EntityType(\"instanceSlot\"));\n world.addComponent(entityId, new Selectable(true));\n // ParentId is applied by applyParentLinks during hydration, or set directly\n // by the instanced mesh factory / runtime when creating fresh instances.\n world.addComponent(entityId, new ParentId(groupEntityId !== -1 ? groupEntityId : null));\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createAmbientLight({\n world,\n scene,\n payload,\n}: CreateContext): number {\n const light = new THREE.AmbientLight(\"#ffffff\", 0.6);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Ambient Light\",\n entityType: \"ambientLight\",\n transformInput: payload.transform,\n });\n\n createLightComponent(world, entityId, light);\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\nimport { RectAreaLightHelper } from \"three/examples/jsm/helpers/RectAreaLightHelper.js\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createAreaLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.RectAreaLight(\"#ffffff\", 5, 4, 4);\n light.lookAt(0, 0, 0);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Area Light\",\n entityType: \"areaLight\",\n transformInput: payload.transform ?? {\n position: { x: 0, y: 4, z: 0 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new RectAreaLightHelper(light, \"#fb7185\");\n helper.onBeforeRender = () => {\n helper.updateMatrixWorld(true);\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createDirectionalLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.DirectionalLight(\"#ffffff\", 1.5);\n light.castShadow = true;\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Directional Light\",\n entityType: \"directionalLight\",\n transformInput: payload.transform ?? {\n position: { x: 3, y: 6, z: 4 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new THREE.DirectionalLightHelper(light, 1.8, \"#38bdf8\");\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createPointLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.PointLight(\"#ffffff\", 1, 10);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Point Light\",\n entityType: \"pointLight\",\n transformInput: payload.transform ?? {\n position: { x: 2, y: 3, z: 2 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new THREE.PointLightHelper(light, 0.35, \"#fbbf24\");\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createLightComponent } from \"../../components\";\nimport type { CreateContext } from \"../../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"../shared\";\n\nexport function createSpotLight({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const light = new THREE.SpotLight(\"#ffffff\", 1, 20, Math.PI / 6, 0.1, 1);\n\n const entityId = createBaseEntity(world, light, {\n label: payload.name ?? \"Spot Light\",\n entityType: \"spotLight\",\n transformInput: payload.transform ?? {\n position: { x: 2, y: 5, z: 2 },\n },\n });\n\n createLightComponent(world, entityId, light);\n\n if (isEditor) {\n const helper = new THREE.SpotLightHelper(light, \"#f59e0b\");\n helper.onBeforeRender = () => {\n helper.update();\n };\n helper.userData.ecsHelper = true;\n helper.visible = false;\n light.add(helper);\n }\n\n scene.add(light);\n\n return entityId;\n}\n","const LOCAL_DRACO_DECODER_RELATIVE_PATH = \"./assets/draco/\";\nexport const DRACO_DECODER_CDN_PATH =\n \"https://www.gstatic.com/draco/versioned/decoders/1.5.7/\";\n\nlet dracoDecoderPathOverride: string | null = null;\n\n/**\n * Override where the DRACO decoder files (draco_wasm_wrapper.js,\n * draco_decoder.wasm, draco_decoder.js) are fetched from. Embedding apps\n * whose bundlers relocate this package's chunks — making the default\n * import.meta.url resolution point at a location that is never populated —\n * should call this before any model loads. The path must end with \"/\".\n * Pass null to restore the default resolution.\n */\nexport function setDracoDecoderPath(path: string | null): void {\n dracoDecoderPathOverride = path;\n}\n\nfunction isBlockedBrowserFileUrl(url: string): boolean {\n return url.startsWith(\"file://\");\n}\n\nexport function resolveDracoDecoderPath(): string {\n if (dracoDecoderPathOverride) {\n return dracoDecoderPathOverride;\n }\n\n try {\n // Prefer vendored decoder assets shipped with this package.\n const resolvedPath = new URL(\n LOCAL_DRACO_DECODER_RELATIVE_PATH,\n import.meta.url,\n ).toString();\n\n // Browser loaders cannot fetch file:// resources from package install paths.\n // Fall back to CDN decoders when bundlers emit file URLs for node_modules assets.\n if (isBlockedBrowserFileUrl(resolvedPath)) {\n return DRACO_DECODER_CDN_PATH;\n }\n\n return resolvedPath;\n } catch {\n // Fallback keeps compatibility in runtimes that cannot resolve package-relative URLs.\n return DRACO_DECODER_CDN_PATH;\n }\n}\n","export {\n AnimationComponent,\n type AnimationComponentOptions,\n} from \"./Animation\";\nexport {\n CameraComponent,\n type CameraComponentOptions,\n type CameraProjection,\n type CameraRuntimeType,\n} from \"./Camera\";\nexport { AudioComponent } from \"./Audio\";\nexport {\n DEFAULT_ENVIRONMENT_STATE,\n Environment,\n type EnvironmentFogState,\n type EnvironmentFogType,\n type EnvironmentGradientEffect,\n type EnvironmentSkyboxState,\n type EnvironmentSkyboxType,\n type EnvironmentState,\n} from \"./Environment\";\nexport {\n DEFAULT_POSTPROCESSING_STATE,\n Postprocessing,\n type PostprocessingState,\n} from \"./Postprocessing\";\nexport {\n InstancedMeshComponent,\n DEFAULT_INSTANCE_TRANSFORM,\n DEFAULT_INSTANCED_MESH_PARAMETERS,\n type InstanceTransform,\n type InstancedMeshKind,\n} from \"./InstancedMesh\";\nexport { InstanceSlotComponent } from \"./InstanceSlotComponent\";\nexport {\n PhysicsComponent,\n type PhysicsState,\n DEFAULT_PHYSICS_STATE,\n type RigidbodyState,\n type RigidbodyType,\n DEFAULT_RIGIDBODY_STATE,\n type ColliderShape,\n type ColliderState,\n DEFAULT_COLLIDER_STATE,\n normalizePhysicsState,\n} from \"./Physics\";\nexport { EntityType } from \"./EntityType\";\nexport { ImageComponent } from \"./Image\";\nexport { ImageTarget, type ImageTargetReference } from \"./ImageTarget\";\nexport {\n ImageTargetAnchor,\n type ImageTargetAnchorOptions,\n} from \"./ImageTargetAnchor\";\nexport { LightComponent, type LightValueState } from \"./Light\";\nexport {\n defaultMaterialValue,\n MaterialComponent,\n type MaterialTypeValue,\n type MaterialValueState,\n type TextureFilteringValue,\n} from \"./Material\";\nexport { MeshComponent } from \"./Mesh\";\nexport {\n DEFAULT_MESH_GEOMETRY_PARAMETERS,\n MeshGeometryComponent,\n type CubeMeshParameters,\n type EditableMeshObjectKind,\n type MeshGeometryParameters,\n type MeshGeometryParametersByKind,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"./MeshGeometry\";\nexport { ModelComponent } from \"./Model\";\nexport { Name } from \"./Name\";\nexport { Object3DRef } from \"./Object3DRef\";\nexport { ParentId } from \"./ParentId\";\nexport { PrefabInstance } from \"./PrefabInstance\";\nexport { PrefabNode } from \"./PrefabNode\";\nexport { ScriptComponent, type ScriptEntry } from \"./ScriptComponent\";\nexport { Selectable } from \"./Selectable\";\n\nexport { SpriteComponent } from \"./Sprite\";\nexport {\n SelectionTransformState,\n type TransformModeValue,\n type TransformSpaceValue,\n} from \"./SelectionTransformState\";\nexport { TransformComponent, type TransformData, type Vec3 } from \"./Transform\";\nexport { VideoComponent } from \"./Video\";\n","import { Component } from \"../Component\";\n\nconst generateInstanceId = (): string => {\n try {\n return crypto.randomUUID();\n } catch {\n // Non-secure-context fallback — uniqueness within a document is enough.\n return `i-${Math.random().toString(36).slice(2, 10)}${Date.now().toString(36)}`;\n }\n};\n\n/**\n * Marks the ROOT entity of a prefab instance and records its link to the\n * source `.prefab` asset plus the instance's per-property overrides.\n *\n * Instances may appear in a scene OR nested inside another prefab's file\n * (nested prefabs): the nested root keeps the child prefab's `PrefabNode`\n * identity AND this link. `instanceId` is a per-placement uuid that scopes\n * node identity across nesting — two nested instances of the same prefab\n * share nodeIds but never instanceIds, so override keys stay unambiguous.\n *\n * `overrides` is a flat list of encoded strings so it survives snapshot\n * serialization at any depth:\n *\n * ```\n * \"<nodeKey>|<ComponentName>|<slash/separated/path>\"\n * \"<nodeKey>|<ComponentName>|\" // empty path = whole component overridden\n * \"<nodeKey>|+node|\" // marker: node added by the HOST document\n * // inside a nested region (never deleted by\n * // file patching)\n * ```\n *\n * where `<nodeKey>` is the entity's `PrefabNode.nodeId` prefixed by the\n * `instanceId` chain of any nested instance roots between the scope root and\n * the entity (e.g. `\"9f2c…\"` for direct children, `\"<iB>/<bNode>\"` inside a\n * nested instance). Overridden paths keep their per-instance values when the\n * prefab asset is re-applied; everything else syncs from the file. The\n * instance root's Transform, Name, and ParentId are implicitly per-instance\n * and never appear here. Overrides are an editor-side concern — the runtime\n * never resolves them (scene-placed instances are fully materialized;\n * runtime spawns are fresh copies of the file).\n *\n * @category Components\n */\nexport class PrefabInstance extends Component {\n /** URL of the source `.prefab` asset (`localasset://…` inside the editor). */\n url: string;\n /** Encoded override paths — see class docs for the format. */\n overrides: string[];\n /**\n * Per-placement uuid scoping node identity across nesting. Stable for the\n * lifetime of the placement (persisted; survives applies) so override keys\n * referencing nested content stay valid.\n */\n instanceId: string;\n\n constructor(url: string, overrides: string[] = [], instanceId?: string) {\n super();\n this.url = url;\n this.overrides = overrides;\n this.instanceId =\n typeof instanceId === \"string\" && instanceId.length > 0\n ? instanceId\n : generateInstanceId();\n }\n}\n","import { Component } from \"../Component\";\n\n/**\n * Stable identity for an entity that originated from a prefab asset.\n *\n * Every entity serialized into a `.prefab` file carries a `PrefabNode` with a\n * uuid `nodeId`. Hydrating the prefab (editor instantiate or runtime spawn)\n * restores the component, so each instance entity can be matched back to its\n * prefab-file counterpart regardless of live entity ids. The per-property\n * override system diffs and merges in nodeId-space.\n *\n * Node ids are unique within one prefab subtree — two instances of the same\n * prefab intentionally share nodeIds.\n *\n * @category Components\n */\nexport class PrefabNode extends Component {\n /** Stable uuid identifying this entity within its prefab definition. */\n nodeId: string;\n\n constructor(nodeId: string) {\n super();\n this.nodeId = nodeId;\n }\n}\n","import * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader.js\";\nimport { GLTFLoader, type GLTF } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { resolveDracoDecoderPath } from \"../../utils/dracoDecoderPath\";\nimport { cloneModelScene, loadSharedGltf } from \"../../utils/modelCache\";\n\nimport {\n createAnimationComponent,\n createMeshGeometryComponent,\n createModelComponent,\n} from \"../components\";\nimport { AnimationComponent } from \"../../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction getModelFileName(path: string): string {\n const segments = path.split(/[\\\\/]/).filter(Boolean);\n return segments[segments.length - 1] ?? \"\";\n}\n\nfunction createModelLoader(): GLTFLoader {\n const loader = new GLTFLoader();\n\n try {\n const dracoLoader = new DRACOLoader();\n // Resolved per loader so a setDracoDecoderPath() override made after\n // module load still takes effect. Keep decoder version aligned with the\n // three.js runtime used by the app.\n dracoLoader.setDecoderPath(resolveDracoDecoderPath());\n loader.setDRACOLoader(dracoLoader);\n } catch (error) {\n console.warn(\"DRACOLoader could not be configured. Loading non-Draco models only.\", error);\n }\n\n return loader;\n}\n\nfunction collectModelMaterials(rootObject: THREE.Object3D): THREE.Material[] {\n const materialSet = new Set<THREE.Material>();\n\n rootObject.traverse((child) => {\n const asMesh = child as THREE.Mesh;\n if (!asMesh.material) {\n return;\n }\n\n if (Array.isArray(asMesh.material)) {\n for (const material of asMesh.material) {\n if (material) {\n materialSet.add(material);\n }\n }\n return;\n }\n\n materialSet.add(asMesh.material);\n });\n\n return [...materialSet];\n}\n\nexport function createModel({\n world,\n scene,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const modelPath = payload.path ?? \"\";\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Model\",\n entityType: \"model\",\n transformInput: payload.transform,\n });\n\n const model = createModelComponent(world, entityId, modelPath);\n const meshGeometry = createMeshGeometryComponent(world, entityId, \"model\", anchor, {}, {\n modelName: getModelFileName(modelPath),\n castShadow: false,\n receiveShadow: false,\n });\n\n model.object = anchor;\n scene.add(anchor);\n\n if (!modelPath) {\n return entityId;\n }\n\n const attachLoadedModel = (gltf: GLTF, object: THREE.Object3D) => {\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n object.userData.entityId = entityId;\n object.traverse((child) => {\n child.userData.entityId = entityId;\n });\n\n anchor.add(object);\n model.object = object;\n meshGeometry.object = object;\n\n if (gltf.animations.length > 0) {\n let animation = world.getComponent(entityId, AnimationComponent);\n\n if (!animation) {\n animation = createAnimationComponent(world, entityId, {\n clips: gltf.animations,\n externalClipSources: [],\n paused: false,\n reverse: false,\n timeScale: 1,\n crossFadeDuration: 0,\n });\n }\n\n animation.setModelClips(gltf.animations);\n }\n };\n\n const onLoadError = (error: unknown) => {\n console.error(`Failed to load model: ${modelPath}`, error);\n };\n\n if (isEditor) {\n // Editor sessions can re-import an asset under the same URL, which a\n // shared cache would mask with stale content — load fresh per spawn.\n createModelLoader().load(\n modelPath,\n (gltf) => attachLoadedModel(gltf, gltf.scene),\n undefined,\n onLoadError,\n );\n } else {\n // Runtime: parse each model URL once and mount skeleton-aware clones, so\n // repeated spawns (and script-driven respawns) skip fetch and parse.\n loadSharedGltf(\n modelPath,\n () =>\n new Promise<GLTF>((resolve, reject) => {\n createModelLoader().load(modelPath, resolve, undefined, reject);\n }),\n )\n .then((gltf) => attachLoadedModel(gltf, cloneModelScene(gltf.scene)))\n .catch(onLoadError);\n }\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createPlane({ world, scene, payload }: CreateContext): number {\n const geometry = new THREE.PlaneGeometry(100, 100);\n const material = new THREE.MeshStandardMaterial({\n color: \"#ffffff\",\n side: THREE.DoubleSide,\n });\n\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(\n world,\n mesh,\n {\n label: payload.name ?? \"Plane\",\n entityType: \"plane\",\n transformInput: {\n position: payload.transform?.position,\n rotation: payload.transform?.rotation ?? {\n x: -Math.PI / 2,\n y: 0,\n z: 0,\n },\n scale: payload.transform?.scale,\n },\n },\n );\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"plane\", mesh, {\n width: 10,\n height: 10,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n\n scene.add(mesh);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createSpriteComponent } from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createSprite({ world, scene, payload }: CreateContext): number {\n const anchor = new THREE.Object3D();\n\n const imagePath = payload.path ?? \"\";\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Sprite\",\n entityType: \"sprite\",\n transformInput: payload.transform,\n });\n\n const spriteComponent = createSpriteComponent(world, entityId, imagePath);\n scene.add(anchor);\n\n if (!imagePath) {\n return entityId;\n }\n\n const loader = new THREE.TextureLoader();\n loader.load(\n imagePath,\n (texture) => {\n if (!world.hasEntity(entityId)) {\n texture.dispose();\n return;\n }\n\n const material = new THREE.SpriteMaterial({\n map: texture,\n transparent: true,\n });\n const sprite = new THREE.Sprite(material);\n sprite.userData.entityId = entityId;\n\n const textureImage = texture.image as { width?: number; height?: number } | undefined;\n spriteComponent.width = textureImage?.width ?? 1;\n spriteComponent.height = textureImage?.height ?? 1;\n\n anchor.add(sprite);\n spriteComponent.texture = texture;\n spriteComponent.object = sprite;\n },\n undefined,\n (error) => {\n console.error(`Failed to load sprite: ${imagePath}`, error);\n },\n );\n\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport {\n createMaterialComponent,\n createMeshComponent,\n createMeshGeometryComponent,\n} from \"../components\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nexport function createSphere({ world, scene, payload }: CreateContext): number {\n const geometry = new THREE.SphereGeometry(0.5, 24, 24);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const mesh = new THREE.Mesh(geometry, material);\n\n const entityId = createBaseEntity(world, mesh, {\n label: payload.name ?? \"Sphere\",\n entityType: \"sphere\",\n transformInput: payload.transform,\n });\n\n createMeshComponent(world, entityId, mesh);\n createMaterialComponent(world, entityId, material);\n createMeshGeometryComponent(world, entityId, \"sphere\", mesh, {\n radius: 0.5,\n }, {\n castShadow: false,\n receiveShadow: false,\n });\n\n scene.add(mesh);\n return entityId;\n}\n","import * as THREE from \"three\";\n\nimport { createVideoComponent } from \"../components\";\nimport type { VideoComponent } from \"../../components/Video\";\nimport type { CreateContext } from \"../../systems/ObjectManagementSystem\";\nimport { createBaseEntity } from \"./shared\";\n\nfunction getOrCreateListener(\n camera: THREE.PerspectiveCamera,\n): THREE.AudioListener {\n const existing = camera.userData.ecsAudioListener;\n if (existing instanceof THREE.AudioListener) {\n return existing;\n }\n\n const listener = new THREE.AudioListener();\n camera.add(listener);\n camera.userData.ecsAudioListener = listener;\n\n return listener;\n}\n\nfunction normalizeDistanceModel(\n value: string,\n): \"inverse\" | \"linear\" | \"exponential\" {\n const v = value.trim().toLowerCase();\n if (v === \"linear\" || v === \"exponential\") return v;\n return \"inverse\";\n}\n\ntype DistanceVideoOptions = VideoComponent[\"options\"];\n\nfunction toBool(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction toNumber(value: unknown, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n\n return value;\n}\n\nfunction toColor(value: unknown, fallback: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return fallback;\n }\n\n return value;\n}\n\nfunction normalizeOptions(\n input: Record<string, unknown> | undefined,\n): DistanceVideoOptions {\n return {\n autoplay: toBool(input?.autoplay, false),\n loop: toBool(input?.loop, true),\n volume: Math.max(0, Math.min(1, toNumber(input?.volume, 1))),\n width: Math.max(0.01, toNumber(input?.width, 1)),\n height: Math.max(0.01, toNumber(input?.height, 1)),\n isGreenScreen: toBool(input?.isGreenScreen, false),\n backgroundColor: toColor(input?.backgroundColor, \"#00ff00\"),\n similarity: Math.max(0.01, Math.min(1, toNumber(input?.similarity, 0.4))),\n smoothness: Math.max(0.001, Math.min(1, toNumber(input?.smoothness, 0.08))),\n spill: Math.max(0, Math.min(1, toNumber(input?.spill, 0.12))),\n positional: toBool(input?.positional, false),\n refDistance: Math.max(0, toNumber(input?.refDistance, 1)),\n distanceModel: toColor(input?.distanceModel, \"inverse\"),\n rolloffFactor: Math.max(0, toNumber(input?.rolloffFactor, 1)),\n };\n}\n\nfunction createChromaMaterial(\n texture: THREE.VideoTexture,\n options: DistanceVideoOptions,\n): THREE.ShaderMaterial {\n return new THREE.ShaderMaterial({\n uniforms: {\n tex: { value: texture },\n keyColor: { value: new THREE.Color(options.backgroundColor) },\n similarity: { value: options.similarity },\n smoothness: { value: options.smoothness },\n spill: { value: options.spill },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform sampler2D tex;\n uniform vec3 keyColor;\n uniform float similarity;\n uniform float smoothness;\n uniform float spill;\n varying vec2 vUv;\n\n void main() {\n vec4 texel = texture2D(tex, vUv);\n float chromaDist = distance(texel.rgb, keyColor);\n float alpha = smoothstep(similarity, similarity + smoothness, chromaDist);\n\n float spillFactor = smoothstep(similarity, similarity + spill + smoothness, chromaDist);\n vec3 despilled = mix(vec3(dot(texel.rgb, vec3(0.299, 0.587, 0.114))), texel.rgb, spillFactor);\n\n gl_FragColor = vec4(despilled, texel.a * alpha);\n }\n `,\n transparent: true,\n side: THREE.DoubleSide,\n });\n}\n\nfunction createStandardMaterial(\n texture: THREE.VideoTexture,\n): THREE.MeshBasicMaterial {\n return new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n });\n}\n\nfunction createVideoMesh(\n entityId: number,\n texture: THREE.VideoTexture,\n options: DistanceVideoOptions,\n): { mesh: THREE.Mesh; material: THREE.Material } {\n const geometry = new THREE.PlaneGeometry(1, 1);\n const material = options.isGreenScreen\n ? createChromaMaterial(texture, options)\n : createStandardMaterial(texture);\n const mesh = new THREE.Mesh(geometry, material);\n\n mesh.userData.entityId = entityId;\n mesh.scale.set(options.width, options.height, 1);\n\n return { mesh, material };\n}\n\nfunction applyMetadataSizing(\n video: HTMLVideoElement,\n mesh: THREE.Mesh,\n options: DistanceVideoOptions,\n): void {\n const width = video.videoWidth;\n const height = video.videoHeight;\n if (width <= 0 || height <= 0) {\n return;\n }\n\n // Respect explicit option sizing. Otherwise fall back to video aspect.\n const nextWidth = options.width > 0 ? options.width : width / height;\n const nextHeight = options.height > 0 ? options.height : 1;\n\n mesh.scale.set(nextWidth, nextHeight, 1);\n}\n\nfunction createVideoElement(\n path: string,\n options: DistanceVideoOptions,\n): HTMLVideoElement {\n const video = document.createElement(\"video\");\n video.src = path;\n video.crossOrigin = \"anonymous\";\n video.loop = options.loop;\n video.playsInline = true;\n video.preload = \"auto\";\n video.volume = options.volume;\n\n return video;\n}\n\nexport function createVideo({\n world,\n scene,\n camera,\n payload,\n isEditor,\n}: CreateContext): number {\n const anchor = new THREE.Object3D();\n const path = payload.path ?? \"\";\n const options = normalizeOptions(payload.options);\n\n const entityId = createBaseEntity(world, anchor, {\n label: payload.name ?? \"Video\",\n entityType: \"video\",\n transformInput: payload.transform,\n });\n\n const videoComponent = createVideoComponent(world, entityId, path, options);\n videoComponent.object = anchor;\n scene.add(anchor);\n\n if (!path || typeof document === \"undefined\") {\n return entityId;\n }\n\n const video = createVideoElement(path, options);\n const texture = new THREE.VideoTexture(video);\n texture.colorSpace = THREE.SRGBColorSpace;\n texture.needsUpdate = true;\n\n const { mesh, material } = createVideoMesh(entityId, texture, options);\n anchor.add(mesh);\n\n videoComponent.videoElement = video;\n videoComponent.texture = texture;\n videoComponent.material = material;\n videoComponent.object = mesh;\n\n video.addEventListener(\"loadedmetadata\", () => {\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n applyMetadataSizing(video, mesh, options);\n });\n\n // Route audio through the Web Audio API only when positional audio is\n // requested. Positional audio requires Web Audio for spatialization.\n // Non-positional video leaves the native <video> audio path intact so\n // the browser can play audio without needing the AudioContext to be\n // in \"running\" state (it is suspended until a user gesture).\n if (!isEditor && options.positional) {\n const listener = getOrCreateListener(camera);\n const audioNode = new THREE.PositionalAudio(listener);\n\n audioNode.setVolume(options.volume);\n audioNode.setRefDistance(options.refDistance);\n audioNode.setDistanceModel(normalizeDistanceModel(options.distanceModel));\n audioNode.setRolloffFactor(options.rolloffFactor);\n\n // Connects the video element's audio into the Web Audio graph.\n // After this call, video.volume acts as a pre-gain before the node —\n // reset it to 1 so the audioNode's own gain is the single source of truth.\n audioNode.setMediaElementSource(video);\n video.volume = 1;\n\n anchor.add(audioNode);\n videoComponent.audioNode = audioNode;\n }\n\n if (options.autoplay) {\n videoComponent.play(); // sets isPlaying flag; VideoSystem drives actual play()\n }\n\n return entityId;\n}\n","import type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport { createAudio } from \"./objects/AudioFactory\";\nimport { createCamera } from \"./objects/CameraFactory\";\nimport { createCapsule } from \"./objects/CapsuleFactory\";\nimport { createCube } from \"./objects/CubeFactory\";\nimport { createCylinder } from \"./objects/CylinderFactory\";\nimport { createEmpty } from \"./objects/EmptyFactory\";\nimport { createImage } from \"./objects/ImageFactory\";\nimport { createImageTarget } from \"./objects/ImageTargetFactory\";\nimport { createInstancedMesh } from \"./objects/InstancedMeshFactory\";\nimport { createInstanceSlot } from \"./objects/InstanceSlotFactory\";\nimport { createAmbientLight } from \"./objects/lights/AmbientLightFactory\";\nimport { createAreaLight } from \"./objects/lights/AreaLightFactory\";\nimport { createDirectionalLight } from \"./objects/lights/DirectionalLightFactory\";\nimport { createPointLight } from \"./objects/lights/PointLightFactory\";\nimport { createSpotLight } from \"./objects/lights/SpotLightFactory\";\nimport { createModel } from \"./objects/ModelFactory\";\nimport { createPlane } from \"./objects/PlaneFactory\";\nimport { createSprite } from \"./objects/SpriteFactory\";\nimport { createSphere } from \"./objects/SphereFactory\";\nimport { createVideo } from \"./objects/VideoFactory\";\nimport { registerDefaultComponentFactories } from \"./registerDefaultComponentFactories\";\n\nexport function registerDefaultFactories(\n objectManagementSystem: ObjectManagementSystem,\n): void {\n objectManagementSystem.register(\"cube\", createCube);\n objectManagementSystem.register(\"sphere\", createSphere);\n objectManagementSystem.register(\"plane\", createPlane);\n objectManagementSystem.register(\"capsule\", createCapsule);\n objectManagementSystem.register(\"cylinder\", createCylinder);\n objectManagementSystem.register(\"empty\", createEmpty);\n objectManagementSystem.register(\"model\", createModel);\n objectManagementSystem.register(\"image\", createImage);\n objectManagementSystem.register(\"imageTarget\", createImageTarget);\n objectManagementSystem.register(\"instancedMesh\", createInstancedMesh);\n objectManagementSystem.register(\"instanceSlot\", createInstanceSlot);\n objectManagementSystem.register(\"sprite\", createSprite);\n objectManagementSystem.register(\"audio\", createAudio);\n objectManagementSystem.register(\"camera\", createCamera);\n objectManagementSystem.register(\"video\", createVideo);\n objectManagementSystem.register(\"ambientLight\", createAmbientLight);\n objectManagementSystem.register(\"directionalLight\", createDirectionalLight);\n objectManagementSystem.register(\"pointLight\", createPointLight);\n objectManagementSystem.register(\"spotLight\", createSpotLight);\n objectManagementSystem.register(\"areaLight\", createAreaLight);\n\n registerDefaultComponentFactories(objectManagementSystem);\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 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 type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { EcsWorldStateSnapshotLike } from \"./types\";\nimport { asRecord, readByComponent } from \"./readers\";\n\nexport function applyParentLinks(\n snapshot: EcsWorldStateSnapshotLike,\n idMap: Map<number, number>,\n objectManagementSystem: ObjectManagementSystem,\n world: World,\n): void {\n const parentValues = readByComponent(snapshot.components, \"ParentId\");\n\n for (const [sourceEntityId, parentValue] of parentValues.entries()) {\n const targetEntityId = idMap.get(sourceEntityId);\n if (targetEntityId === undefined) {\n continue;\n }\n\n const parentRecord = asRecord(parentValue);\n const sourceParentId =\n parentRecord && typeof parentRecord.value === \"number\"\n ? parentRecord.value\n : null;\n\n if (sourceParentId === null) {\n objectManagementSystem.setParent(world, targetEntityId, null, {\n preserveWorldTransform: false,\n });\n continue;\n }\n\n const mappedParentId = idMap.get(sourceParentId);\n objectManagementSystem.setParent(world, targetEntityId, mappedParentId ?? null, {\n preserveWorldTransform: false,\n });\n }\n}\n","import { Object3DRef, ScriptComponent, InstancedMeshComponent } from \"../components\";\nimport { InstanceSlotComponent } from \"../components/InstanceSlotComponent\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport type { ComponentValueMaps } from \"./types\";\nimport { asRecord } from \"./readers\";\n\nfunction remapEntityRefsInScriptData(\n data: Record<string, unknown>,\n idMap: Map<number, number>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const v = value as Record<string, unknown>;\n if (v.type === \"entity\" && typeof v.value === \"number\") {\n result[key] = { ...v, value: idMap.get(v.value) ?? v.value };\n } else if (\n v.type === \"component\" &&\n v.value !== null &&\n typeof v.value === \"object\" &&\n !Array.isArray(v.value) &&\n typeof (v.value as Record<string, unknown>).entityId === \"number\"\n ) {\n const ref = v.value as Record<string, unknown>;\n result[key] = {\n ...v,\n value: { ...ref, entityId: idMap.get(ref.entityId as number) ?? ref.entityId },\n };\n } else {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function restorePostCreateComponents(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceEntityId: number,\n entityType: string | null,\n values: ComponentValueMaps,\n idMap: Map<number, number>,\n): void {\n const objectRef = world.getComponent(targetEntityId, Object3DRef)?.object ?? null;\n\n const sourceAudio = asRecord(values.audioValues.get(sourceEntityId));\n if (sourceAudio && entityType !== \"audio\") {\n const sourceOptions = asRecord(sourceAudio.options) ?? {};\n\n objectManagementSystem.createComponentNow(\n \"audio\",\n world,\n targetEntityId,\n typeof sourceAudio.path === \"string\" ? sourceAudio.path : \"\",\n sourceOptions,\n {\n object: objectRef,\n listener: objectManagementSystem.getOrCreateAudioListener(),\n isEditor: objectManagementSystem.isEditorMode(),\n },\n );\n }\n\n const sourceImageTarget = asRecord(values.imageTargetValues.get(sourceEntityId));\n if (sourceImageTarget && entityType !== \"imageTarget\") {\n objectManagementSystem.createComponentNow(\n \"imageTarget\",\n world,\n targetEntityId,\n {\n targets: Array.isArray(sourceImageTarget.targets)\n ? sourceImageTarget.targets\n : [],\n compiledTargetUrl:\n typeof sourceImageTarget.compiledTargetUrl === \"string\"\n ? sourceImageTarget.compiledTargetUrl\n : undefined,\n compiledTargetDir:\n typeof sourceImageTarget.compiledTargetDir === \"string\"\n ? sourceImageTarget.compiledTargetDir\n : undefined,\n },\n );\n }\n\n const sourceImageTargetAnchor = asRecord(values.imageTargetAnchorValues.get(sourceEntityId));\n if (sourceImageTargetAnchor) {\n // ImageTargetAnchor.targetId references ImageTarget.targets[].id, not an entity id.\n // Preserve the id directly; idMap remapping is only valid for entity references.\n const mappedTargetId =\n typeof sourceImageTargetAnchor.targetId === \"number\" &&\n Number.isFinite(sourceImageTargetAnchor.targetId)\n ? sourceImageTargetAnchor.targetId\n : null;\n\n objectManagementSystem.createComponentNow(\"imageTargetAnchor\", world, targetEntityId, {\n targetId: mappedTargetId,\n targetUrl:\n typeof sourceImageTargetAnchor.targetUrl === \"string\"\n ? sourceImageTargetAnchor.targetUrl\n : undefined,\n });\n }\n\n const sourceScript = asRecord(values.scriptValues.get(sourceEntityId));\n if (sourceScript) {\n const entries = Array.isArray(sourceScript.entries)\n ? sourceScript.entries\n .map((entry) => asRecord(entry))\n .filter((entry): entry is Record<string, unknown> => Boolean(entry))\n .map((entry) => {\n const runtimeState: \"idle\" | \"loading\" | \"ready\" | \"error\" | undefined =\n entry.runtimeState === \"idle\" ||\n entry.runtimeState === \"loading\" ||\n entry.runtimeState === \"ready\" ||\n entry.runtimeState === \"error\"\n ? entry.runtimeState\n : undefined;\n\n return {\n entityId: targetEntityId,\n className: typeof entry.className === \"string\" ? entry.className : \"\",\n scriptUrl: typeof entry.scriptUrl === \"string\" ? entry.scriptUrl : \"\",\n enabled: typeof entry.enabled === \"boolean\" ? entry.enabled : true,\n data:\n entry.data &&\n typeof entry.data === \"object\" &&\n !Array.isArray(entry.data)\n ? remapEntityRefsInScriptData(entry.data as Record<string, unknown>, idMap)\n : {},\n runtimeState,\n runtimeMessage:\n typeof entry.runtimeMessage === \"string\"\n ? entry.runtimeMessage\n : undefined,\n };\n })\n .filter((entry) => entry.className || entry.scriptUrl)\n : [];\n\n if (!entries.length) {\n return;\n }\n\n world.addComponent(\n targetEntityId,\n new ScriptComponent(entries),\n );\n }\n\n // Remap InstancedMeshComponent.instanceEntityIds from snapshot IDs → live IDs.\n {\n const imComponent = world.getComponent(targetEntityId, InstancedMeshComponent);\n if (imComponent && imComponent.instanceEntityIds.length > 0) {\n imComponent.instanceEntityIds = imComponent.instanceEntityIds.map(\n (oldId) => idMap.get(oldId) ?? oldId,\n );\n }\n }\n\n // Remap InstanceSlotComponent.groupEntityId from snapshot ID → live ID.\n {\n const slotComponent = world.getComponent(targetEntityId, InstanceSlotComponent);\n if (slotComponent && slotComponent.groupEntityId !== -1) {\n slotComponent.groupEntityId =\n idMap.get(slotComponent.groupEntityId) ?? slotComponent.groupEntityId;\n }\n }\n}\n","import {\n AnimationComponent,\n type AnimationComponentOptions,\n} from \"../components\";\nimport type { ObjectManagementSystem } from \"../systems/ObjectManagementSystem\";\nimport type { World } from \"../World\";\nimport { asRecord, readBoolean, readNumber } from \"./readers\";\n\nfunction readAnimationClipName(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n if (typeof record.name === \"string\") {\n return record.name;\n }\n\n return null;\n}\n\nfunction readAnimationStates(value: unknown): NonNullable<\n AnimationComponentOptions[\"states\"]\n> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const states: NonNullable<AnimationComponentOptions[\"states\"]> = [];\n\n for (const entry of value) {\n const state = asRecord(entry);\n if (!state) {\n continue;\n }\n\n const name = typeof state.name === \"string\" ? state.name : null;\n const clip = readAnimationClipName(state.clip);\n if (!name || !clip) {\n continue;\n }\n\n states.push({\n name,\n clip,\n clipId: typeof state.clipId === \"string\" ? state.clipId : undefined,\n loop: typeof state.loop === \"boolean\" ? state.loop : false,\n });\n }\n\n return states;\n}\n\nfunction readAnimationClipSources(\n value: unknown,\n): NonNullable<AnimationComponentOptions[\"externalClipSources\"]> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const seen = new Set<string>();\n const sources: string[] = [];\n for (const entry of value) {\n if (typeof entry !== \"string\") {\n continue;\n }\n\n const trimmed = entry.trim();\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n sources.push(trimmed);\n }\n\n return sources;\n}\n\nfunction toAnimationOptions(\n sourceAnimation: Record<string, unknown>,\n): AnimationComponentOptions {\n const paused = readBoolean(sourceAnimation.paused);\n const reverse = readBoolean(sourceAnimation.reverse);\n const timeScale = readNumber(sourceAnimation.timeScale);\n const crossFadeDuration = readNumber(sourceAnimation.crossFadeDuration);\n const states = readAnimationStates(sourceAnimation.states);\n const externalClipSources = readAnimationClipSources(\n sourceAnimation.externalClipSources,\n );\n const activeStateName =\n typeof sourceAnimation.activeStateName === \"string\"\n ? sourceAnimation.activeStateName\n : typeof sourceAnimation.activeState === \"string\"\n ? sourceAnimation.activeState\n : typeof (sourceAnimation.active as { name?: unknown } | undefined)?.name ===\n \"string\"\n ? ((sourceAnimation.active as { name: string }).name ?? null)\n : null;\n\n return {\n paused,\n reverse,\n timeScale,\n crossFadeDuration,\n states,\n externalClipSources,\n activeState: activeStateName,\n };\n}\n\nexport function restoreAnimationComponent(\n world: World,\n objectManagementSystem: ObjectManagementSystem,\n targetEntityId: number,\n sourceAnimation: Record<string, unknown>,\n): void {\n const options = toAnimationOptions(sourceAnimation);\n let animation = world.getComponent(targetEntityId, AnimationComponent);\n\n if (!animation) {\n objectManagementSystem.createComponentNow(\n \"animation\",\n world,\n targetEntityId,\n options,\n );\n animation = world.getComponent(targetEntityId, AnimationComponent);\n }\n\n if (!animation) {\n return;\n }\n\n const availableClips = Array.isArray(sourceAnimation.availableClips)\n ? sourceAnimation.availableClips.filter(\n (clip): clip is string => typeof clip === \"string\" && clip.length > 0,\n )\n : [];\n if (availableClips.length > 0) {\n animation.availableClips = [...availableClips];\n }\n\n if (Array.isArray(options.externalClipSources)) {\n animation.setExternalClipSources(options.externalClipSources);\n }\n\n const states = options.states ?? [];\n const hasClips = Array.isArray(animation.clips) && animation.clips.length > 0;\n if (!hasClips) {\n (\n animation as AnimationComponent & {\n __pendingHydratedOptions?: AnimationComponentOptions;\n }\n ).__pendingHydratedOptions = options;\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.paused === \"boolean\") {\n animation.paused = options.paused;\n }\n\n return;\n }\n\n if (states.length > 0) {\n animation.setStates(states);\n }\n\n if (typeof options.reverse === \"boolean\") {\n animation.reverse = options.reverse;\n }\n\n if (typeof options.timeScale === \"number\") {\n animation.timeScale = options.timeScale;\n }\n\n if (typeof options.crossFadeDuration === \"number\") {\n animation.crossFadeDuration = options.crossFadeDuration;\n }\n\n if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.setActiveState(options.activeState, !options.paused);\n }\n\n if (typeof options.paused === \"boolean\") {\n if (options.paused) {\n animation.pauseState();\n } else if (typeof options.activeState === \"string\" && options.activeState.length > 0) {\n animation.playState(options.activeState);\n }\n }\n}\n","import {\n AudioComponent,\n CameraComponent,\n Environment,\n type EnvironmentState,\n ImageComponent,\n ImageTarget,\n InstancedMeshComponent,\n LightComponent,\n MaterialComponent,\n MeshGeometryComponent,\n ModelComponent,\n Name,\n Object3DRef,\n PhysicsComponent,\n Postprocessing,\n 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 name?: string;\n transform?: {\n position?: { x?: number; y?: number; z?: number };\n rotation?: { x?: number; y?: number; z?: number };\n scale?: { x?: number; y?: number; z?: number };\n };\n path?: string;\n options?: Record<string, unknown>;\n useWorldCamera?: boolean;\n};\n\nexport type ComponentValueMaps = {\n object3DRefValues: Map<number, unknown>;\n nameValues: Map<number, unknown>;\n transformValues: Map<number, unknown>;\n modelValues: Map<number, unknown>;\n imageValues: Map<number, unknown>;\n spriteValues: Map<number, unknown>;\n videoValues: Map<number, unknown>;\n cameraValues: Map<number, unknown>;\n environmentValues: Map<number, unknown>;\n postprocessingValues: Map<number, unknown>;\n audioValues: Map<number, unknown>;\n imageTargetValues: Map<number, unknown>;\n lightValues: Map<number, unknown>;\n materialValues: Map<number, unknown>;\n meshGeometryValues: Map<number, unknown>;\n selectableValues: Map<number, unknown>;\n physicsValues: Map<number, unknown>;\n animationValues: Map<number, unknown>;\n imageTargetAnchorValues: Map<number, unknown>;\n scriptValues: Map<number, unknown>;\n instancedMeshValues: Map<number, unknown>;\n instanceSlotValues: Map<number, unknown>;\n 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]);\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 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 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/**\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 * - 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 const data = asRecord(entry.data) ?? {};\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 {\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: canonicalData,\n };\n }),\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 === \"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\nconst resolveUrl = (url: string): string =>\n prefabAssetUrlResolver ? prefabAssetUrlResolver(url) : url;\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 * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader.js\";\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader.js\";\nimport { GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader.js\";\n\nimport { AnimationComponent, ModelComponent } from \"../components\";\nimport type { AnimationComponentOptions } from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport { resolveDracoDecoderPath } from \"../utils/dracoDecoderPath\";\nimport type { World } from \"../World\";\n\ntype AnimationRuntime = {\n rootUuid: string;\n mixer: THREE.AnimationMixer;\n actions: Map<string, THREE.AnimationAction>;\n clipNameToIds: Map<string, string[]>;\n activeClipId: string | null;\n clipSignature: string;\n sourceSignature: string;\n sourceToken: number;\n importedSourceClips: Map<string, THREE.AnimationClip[]>;\n pendingSources: Set<string>;\n};\n\ntype RuntimeClipEntry = {\n id: string;\n name: string;\n clip: THREE.AnimationClip;\n};\n\ntype PendingHydratedAnimationOptions = Pick<\n AnimationComponentOptions,\n | \"paused\"\n | \"reverse\"\n | \"timeScale\"\n | \"crossFadeDuration\"\n | \"activeState\"\n | \"states\"\n | \"externalClipSources\"\n>;\n\nfunction createClipSourceLoader(): GLTFLoader {\n const loader = new GLTFLoader();\n\n try {\n const dracoLoader = new DRACOLoader();\n dracoLoader.setDecoderPath(resolveDracoDecoderPath());\n loader.setDRACOLoader(dracoLoader);\n } catch (error) {\n console.warn(\"DRACOLoader could not be configured for clip source loading.\", error);\n }\n\n return loader;\n}\n\nfunction normalizeDeltaTime(deltaTime: number): number {\n return Number.isFinite(deltaTime) ? Math.max(0, deltaTime) : 0;\n}\n\nfunction sanitizeTimeScale(timeScale: number): number {\n if (!Number.isFinite(timeScale) || Math.abs(timeScale) < 0.0001) {\n return 1;\n }\n\n return Math.abs(timeScale);\n}\n\nfunction sanitizeCrossFadeDuration(duration: number): number {\n if (!Number.isFinite(duration) || duration < 0) {\n return 0;\n }\n\n return duration;\n}\n\nfunction buildClipSignature(entries: RuntimeClipEntry[]): string {\n return entries\n .map((entry) => entry.id)\n .sort((a, b) => a.localeCompare(b))\n .join(\"|\");\n}\n\nfunction readRuntimeClipEntries(animation: AnimationComponent): RuntimeClipEntry[] {\n if (Array.isArray(animation.clipCatalog) && animation.clipCatalog.length > 0) {\n return animation.clipCatalog.map((entry) => ({\n id: entry.id,\n name: entry.name,\n clip: entry.clip,\n }));\n }\n\n if (!Array.isArray(animation.clips)) {\n return [];\n }\n\n return animation.clips\n .map((clip, index) => {\n const name = typeof clip?.name === \"string\" ? clip.name : \"\";\n if (!name) {\n return null;\n }\n\n return {\n id: `legacy:${index}:${name}`,\n name,\n clip,\n };\n })\n .filter((entry): entry is RuntimeClipEntry => entry !== null);\n}\n\nfunction normalizeClipSources(value: unknown): string[] {\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 extractFileExtension(url: string): string {\n const clean = url.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = clean.split(\".\").pop();\n return typeof ext === \"string\" ? ext.toLowerCase() : \"\";\n}\n\nfunction createActions(\n mixer: THREE.AnimationMixer,\n entries: RuntimeClipEntry[],\n): {\n actions: Map<string, THREE.AnimationAction>;\n clipNameToIds: Map<string, string[]>;\n} {\n const actions = new Map<string, THREE.AnimationAction>();\n const clipNameToIds = new Map<string, string[]>();\n\n for (const entry of entries) {\n if (!entry.name) {\n continue;\n }\n\n actions.set(entry.id, mixer.clipAction(entry.clip));\n\n const ids = clipNameToIds.get(entry.name) ?? [];\n ids.push(entry.id);\n clipNameToIds.set(entry.name, ids);\n }\n\n return { actions, clipNameToIds };\n}\n\nfunction stopAllActions(runtime: AnimationRuntime): void {\n runtime.actions.forEach((action) => {\n action.stop();\n });\n runtime.mixer.stopAllAction();\n runtime.activeClipId = null;\n}\n\nfunction transitionToClip(\n runtime: AnimationRuntime,\n nextClipId: string | null,\n crossFadeDuration: number,\n): void {\n if (runtime.activeClipId === nextClipId) {\n return;\n }\n\n const previousAction = runtime.activeClipId\n ? runtime.actions.get(runtime.activeClipId)\n : undefined;\n const nextAction = nextClipId ? runtime.actions.get(nextClipId) : undefined;\n\n if (!nextAction) {\n if (previousAction) {\n previousAction.stop();\n }\n runtime.activeClipId = null;\n return;\n }\n\n if (!previousAction || previousAction === nextAction) {\n nextAction.reset();\n nextAction.play();\n runtime.activeClipId = nextClipId;\n return;\n }\n\n if (crossFadeDuration > 0) {\n nextAction.reset();\n nextAction.play();\n previousAction.crossFadeTo(nextAction, crossFadeDuration, true);\n } else {\n previousAction.stop();\n nextAction.reset();\n nextAction.play();\n }\n\n runtime.activeClipId = nextClipId;\n}\n\nfunction applyActionState(\n action: THREE.AnimationAction,\n component: AnimationComponent,\n paused: boolean,\n shouldLoop: boolean,\n): void {\n const loopMode = shouldLoop ? THREE.LoopRepeat : THREE.LoopOnce;\n const repetitions = shouldLoop ? Infinity : 1;\n action.setLoop(loopMode, repetitions);\n action.clampWhenFinished = !shouldLoop;\n action.paused = paused;\n\n const direction = component.reverse ? -1 : 1;\n action.setEffectiveTimeScale(sanitizeTimeScale(component.timeScale) * direction);\n}\n\nfunction applyPendingHydratedOptions(component: AnimationComponent, runtime?: AnimationRuntime): void {\n const pending = (\n component as AnimationComponent & {\n __pendingHydratedOptions?: PendingHydratedAnimationOptions;\n }\n ).__pendingHydratedOptions;\n\n if (!pending) {\n return;\n }\n\n if (Array.isArray(pending.externalClipSources)) {\n component.setExternalClipSources(pending.externalClipSources);\n }\n\n if (!Array.isArray(component.clips) || component.clips.length === 0) {\n return;\n }\n\n if (runtime && runtime.pendingSources.size > 0) {\n return;\n }\n\n const states = Array.isArray(pending.states) ? pending.states : [];\n if (states.length > 0) {\n component.setStates(states);\n }\n\n if (typeof pending.reverse === \"boolean\") {\n component.reverse = pending.reverse;\n }\n\n if (typeof pending.timeScale === \"number\" && Number.isFinite(pending.timeScale)) {\n component.timeScale = pending.timeScale;\n }\n\n if (\n typeof pending.crossFadeDuration === \"number\" &&\n Number.isFinite(pending.crossFadeDuration)\n ) {\n component.crossFadeDuration = Math.max(0, pending.crossFadeDuration);\n }\n\n if (typeof pending.activeState === \"string\" && pending.activeState.length > 0) {\n component.setActiveState(pending.activeState, !pending.paused);\n }\n\n if (typeof pending.paused === \"boolean\") {\n if (pending.paused) {\n component.pauseState(pending.activeState ?? undefined);\n } else {\n component.playState(pending.activeState ?? undefined);\n }\n }\n\n delete (\n component as AnimationComponent & {\n __pendingHydratedOptions?: PendingHydratedAnimationOptions;\n }\n ).__pendingHydratedOptions;\n}\n\nexport class AnimationSystem implements EcsSystem {\n private readonly runtimeByEntity = new Map<number, AnimationRuntime>();\n private readonly gltfLoader = createClipSourceLoader();\n private readonly fbxLoader = new FBXLoader();\n\n private async loadClipsFromSource(sourceUrl: string): Promise<THREE.AnimationClip[]> {\n const ext = extractFileExtension(sourceUrl);\n\n if (ext === \"fbx\") {\n return new Promise((resolve, reject) => {\n this.fbxLoader.load(\n sourceUrl,\n (object) => {\n const clips = Array.isArray(object.animations) ? object.animations : [];\n resolve(clips);\n },\n undefined,\n reject,\n );\n });\n }\n\n if (ext === \"glb\" || ext === \"gltf\") {\n return new Promise((resolve, reject) => {\n this.gltfLoader.load(\n sourceUrl,\n (gltf) => {\n const clips = Array.isArray(gltf.animations) ? gltf.animations : [];\n resolve(clips);\n },\n undefined,\n reject,\n );\n });\n }\n\n return [];\n }\n\n private refreshExternalClipSources(\n world: World,\n entityId: number,\n animation: AnimationComponent,\n runtime: AnimationRuntime,\n ): void {\n const normalizedSources = normalizeClipSources(animation.externalClipSources);\n const sourceSignature = normalizedSources.join(\"|\");\n\n if (runtime.sourceSignature !== sourceSignature) {\n runtime.sourceSignature = sourceSignature;\n runtime.sourceToken += 1;\n runtime.pendingSources.clear();\n runtime.importedSourceClips.clear();\n animation.setImportedClips([]);\n }\n\n const sourceSet = new Set(normalizedSources);\n for (const loadedSource of runtime.importedSourceClips.keys()) {\n if (!sourceSet.has(loadedSource)) {\n runtime.importedSourceClips.delete(loadedSource);\n }\n }\n\n const mergedLoadedClips = [...runtime.importedSourceClips.values()].flat();\n animation.setImportedClips(\n normalizedSources.flatMap((sourceUrl) => {\n const clipsForSource = runtime.importedSourceClips.get(sourceUrl) ?? [];\n return clipsForSource.map((clip) => ({ clip, sourceUrl }));\n }),\n );\n\n for (const sourceUrl of normalizedSources) {\n if (\n runtime.importedSourceClips.has(sourceUrl) ||\n runtime.pendingSources.has(sourceUrl)\n ) {\n continue;\n }\n\n runtime.pendingSources.add(sourceUrl);\n const sourceToken = runtime.sourceToken;\n\n void this.loadClipsFromSource(sourceUrl)\n .then((clips) => {\n const currentRuntime = this.runtimeByEntity.get(entityId);\n if (!currentRuntime || currentRuntime.sourceToken !== sourceToken) {\n return;\n }\n\n currentRuntime.pendingSources.delete(sourceUrl);\n currentRuntime.importedSourceClips.set(sourceUrl, clips);\n\n const currentAnimation = world.getComponent(entityId, AnimationComponent);\n if (!currentAnimation) {\n return;\n }\n\n currentAnimation.setImportedClips(\n normalizedSources.flatMap((url) => {\n const clipsForSource = currentRuntime.importedSourceClips.get(url) ?? [];\n return clipsForSource.map((clip) => ({ clip, sourceUrl: url }));\n }),\n );\n })\n .catch((error) => {\n const currentRuntime = this.runtimeByEntity.get(entityId);\n if (!currentRuntime || currentRuntime.sourceToken !== sourceToken) {\n return;\n }\n\n currentRuntime.pendingSources.delete(sourceUrl);\n currentRuntime.importedSourceClips.delete(sourceUrl);\n console.warn(`Failed to load animation source: ${sourceUrl}`, error);\n });\n }\n }\n\n private release(entityId: number): void {\n const runtime = this.runtimeByEntity.get(entityId);\n if (!runtime) {\n return;\n }\n\n stopAllActions(runtime);\n this.runtimeByEntity.delete(entityId);\n }\n\n update(world: World, deltaTime: number): void {\n const entityIds = world.query(AnimationComponent, ModelComponent);\n const alive = new Set<number>(entityIds);\n\n for (const trackedEntityId of this.runtimeByEntity.keys()) {\n if (!alive.has(trackedEntityId)) {\n this.release(trackedEntityId);\n }\n }\n\n const step = normalizeDeltaTime(deltaTime);\n\n for (const entityId of entityIds) {\n const animation = world.getComponent(entityId, AnimationComponent);\n const model = world.getComponent(entityId, ModelComponent);\n const root = model?.object ?? null;\n\n if (!animation || !model || !root) {\n this.release(entityId);\n continue;\n }\n\n const existing = this.runtimeByEntity.get(entityId);\n let runtime = existing;\n\n if (!runtime || runtime.rootUuid !== root.uuid) {\n if (runtime) {\n stopAllActions(runtime);\n }\n\n const mixer = new THREE.AnimationMixer(root);\n const entries = readRuntimeClipEntries(animation);\n const indexedActions = createActions(mixer, entries);\n runtime = {\n rootUuid: root.uuid,\n mixer,\n actions: indexedActions.actions,\n clipNameToIds: indexedActions.clipNameToIds,\n activeClipId: null,\n clipSignature: buildClipSignature(entries),\n sourceSignature: \"\",\n sourceToken: 0,\n importedSourceClips: new Map<string, THREE.AnimationClip[]>(),\n pendingSources: new Set<string>(),\n };\n\n this.runtimeByEntity.set(entityId, runtime);\n }\n\n this.refreshExternalClipSources(world, entityId, animation, runtime);\n\n applyPendingHydratedOptions(animation, runtime);\n\n // Skip playback updates for invisible entities. The runtime and clip catalog\n // are still maintained so animation resumes immediately on visibility restore.\n if (!world.isEntityVisible(entityId)) {\n continue;\n }\n\n const entries = readRuntimeClipEntries(animation);\n const clipSignature = buildClipSignature(entries);\n if (runtime.clipSignature !== clipSignature) {\n stopAllActions(runtime);\n const indexedActions = createActions(runtime.mixer, entries);\n runtime.actions = indexedActions.actions;\n runtime.clipNameToIds = indexedActions.clipNameToIds;\n runtime.clipSignature = clipSignature;\n }\n\n if (runtime.actions.size === 0) {\n continue;\n }\n\n const activeState = animation.active;\n const stateClipId =\n typeof activeState?.clipId === \"string\" && activeState.clipId.length > 0\n ? activeState.clipId\n : null;\n const stateClipName = activeState?.clip.name ?? null;\n const fallbackClipId =\n stateClipName && runtime.clipNameToIds.has(stateClipName)\n ? runtime.clipNameToIds.get(stateClipName)?.[0] ?? null\n : null;\n const nextClipId =\n stateClipId && runtime.actions.has(stateClipId)\n ? stateClipId\n : fallbackClipId && runtime.actions.has(fallbackClipId)\n ? fallbackClipId\n : null;\n const hasActiveState = Boolean(activeState);\n const isPaused = hasActiveState\n ? !(activeState?.isPlaying ?? false)\n : animation.paused;\n\n if (hasActiveState) {\n animation.paused = isPaused;\n }\n\n transitionToClip(\n runtime,\n nextClipId,\n sanitizeCrossFadeDuration(animation.crossFadeDuration),\n );\n\n if (!runtime.activeClipId) {\n continue;\n }\n\n const action = runtime.actions.get(runtime.activeClipId);\n if (!action) {\n continue;\n }\n\n applyActionState(action, animation, isPaused, Boolean(activeState?.loop));\n\n if (animation.reverse && action.time <= 0) {\n action.time = action.getClip().duration;\n }\n\n runtime.mixer.update(step);\n\n if (activeState?.isPlaying) {\n activeState.onPlaying();\n }\n }\n }\n\n dispose(): void {\n for (const runtime of this.runtimeByEntity.values()) {\n stopAllActions(runtime);\n }\n\n this.runtimeByEntity.clear();\n }\n}\n","import * as THREE from \"three\";\n\nimport { CameraComponent } from \"../components/Camera\";\nimport { Object3DRef } from \"../components/Object3DRef\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_NEAR = 0.001;\nconst MIN_FAR_DELTA = 0.001;\nconst MIN_FOV = 1;\nconst MAX_FOV = 179;\nconst MIN_ZOOM = 0.001;\n\nfunction clampNear(value: number): number {\n if (!Number.isFinite(value)) {\n return MIN_NEAR;\n }\n\n return Math.max(MIN_NEAR, value);\n}\n\nfunction clampFar(value: number, near: number): number {\n if (!Number.isFinite(value)) {\n return near + 1000;\n }\n\n return Math.max(near + MIN_FAR_DELTA, value);\n}\n\nfunction clampFov(value: number): number {\n if (!Number.isFinite(value)) {\n return 50;\n }\n\n return Math.min(MAX_FOV, Math.max(MIN_FOV, value));\n}\n\nfunction clampZoom(value: number): number {\n if (!Number.isFinite(value)) {\n return 1;\n }\n\n return Math.max(MIN_ZOOM, value);\n}\n\nfunction normalizeOrthoBounds(component: CameraComponent): void {\n let left = Number.isFinite(component.left) ? component.left : -5;\n let right = Number.isFinite(component.right) ? component.right : 5;\n let top = Number.isFinite(component.top) ? component.top : 5;\n let bottom = Number.isFinite(component.bottom) ? component.bottom : -5;\n\n if (right <= left) {\n right = left + 0.01;\n }\n\n if (top <= bottom) {\n top = bottom + 0.01;\n }\n\n component.left = left;\n component.right = right;\n component.top = top;\n component.bottom = bottom;\n}\n\nfunction isPerspectiveCamera(camera: THREE.Camera): camera is THREE.PerspectiveCamera {\n return camera instanceof THREE.PerspectiveCamera;\n}\n\nfunction isOrthographicCamera(camera: THREE.Camera): camera is THREE.OrthographicCamera {\n return camera instanceof THREE.OrthographicCamera;\n}\n\nfunction readWindowAspect(): number | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n if (\n Number.isFinite(width) &&\n Number.isFinite(height) &&\n width > 0 &&\n height > 0\n ) {\n return width / height;\n }\n\n return null;\n}\n\nfunction buildSignature(\n component: CameraComponent,\n camera: THREE.Camera,\n windowAspect: number | null,\n): string {\n return [\n component.type,\n component.isDefault,\n component.projection,\n component.fov,\n component.near,\n component.far,\n component.left,\n component.right,\n component.top,\n component.bottom,\n component.zoom,\n windowAspect ?? \"na\",\n camera.uuid,\n ].join(\"|\");\n}\n\nexport class CameraSyncSystem implements EcsSystem {\n private readonly signatures = new Map<number, string>();\n\n update(world: World): void {\n const entityIds = world.query(CameraComponent, Object3DRef);\n const windowAspect = readWindowAspect();\n\n const alive = new Set(entityIds);\n for (const trackedId of this.signatures.keys()) {\n if (!alive.has(trackedId)) {\n this.signatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const component = world.getComponent(entityId, CameraComponent);\n const objectRef = world.getComponent(entityId, Object3DRef);\n if (!component || !objectRef) {\n continue;\n }\n\n const camera = objectRef.object;\n if (!(camera instanceof THREE.Camera)) {\n continue;\n }\n\n const nextSignature = buildSignature(component, camera, windowAspect);\n if (this.signatures.get(entityId) === nextSignature) {\n continue;\n }\n\n const near = clampNear(component.near);\n const far = clampFar(component.far, near);\n component.near = near;\n component.far = far;\n\n if (isPerspectiveCamera(camera)) {\n camera.fov = clampFov(component.fov);\n component.fov = camera.fov;\n if (windowAspect !== null) {\n camera.aspect = windowAspect;\n }\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n } else if (isOrthographicCamera(camera)) {\n normalizeOrthoBounds(component);\n camera.left = component.left;\n camera.right = component.right;\n camera.top = component.top;\n camera.bottom = component.bottom;\n camera.zoom = clampZoom(component.zoom);\n component.zoom = camera.zoom;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n }\n\n component.camera = camera;\n this.signatures.set(entityId, buildSignature(component, camera, windowAspect));\n }\n }\n}\n","import { Object3DRef } from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nexport class ObjectVisibilitySystem implements EcsSystem {\n update(world: World): void {\n const entityIds = world.query(Object3DRef);\n\n for (const entityId of entityIds) {\n const objectRef = world.getComponent(entityId, Object3DRef);\n const object = objectRef?.object;\n if (!objectRef || !object) {\n continue;\n }\n\n const targetVisibility = Boolean(objectRef.visibility);\n if (object.visible !== targetVisibility) {\n object.visible = targetVisibility;\n }\n }\n }\n}\n","import * as THREE from \"three\";\n\nimport { Environment } from \"../components/Environment\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_FOG_DELTA = 0.001;\nconst MIN_DENSITY = 0;\n\nfunction createGradientTexture(\n effect: \"radial\" | \"linear\" | \"angular\",\n colors: string[],\n): THREE.Texture {\n if (typeof document === \"undefined\") {\n const pixel = new Uint8Array([30, 30, 30, 255]);\n const fallback = new THREE.DataTexture(pixel, 1, 1, THREE.RGBAFormat);\n fallback.needsUpdate = true;\n return fallback;\n }\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = 512;\n canvas.height = 512;\n\n const context = canvas.getContext(\"2d\");\n if (!context) {\n const fallback = new THREE.CanvasTexture(canvas);\n fallback.needsUpdate = true;\n return fallback;\n }\n\n const safeColors = colors.length > 0 ? colors : [\"#0f172a\", \"#334155\"];\n const lastIndex = Math.max(1, safeColors.length - 1);\n\n let gradient: CanvasGradient;\n if (effect === \"radial\") {\n gradient = context.createRadialGradient(256, 256, 16, 256, 256, 320);\n } else if (effect === \"angular\") {\n gradient = context.createLinearGradient(0, 0, 512, 512);\n } else {\n gradient = context.createLinearGradient(0, 0, 0, 512);\n }\n\n for (let index = 0; index < safeColors.length; index += 1) {\n gradient.addColorStop(index / lastIndex, safeColors[index]);\n }\n\n context.fillStyle = gradient;\n context.fillRect(0, 0, 512, 512);\n\n if (effect === \"angular\") {\n context.globalCompositeOperation = \"overlay\";\n const overlay = context.createRadialGradient(256, 256, 32, 256, 256, 340);\n overlay.addColorStop(0, \"rgba(255,255,255,0.25)\");\n overlay.addColorStop(1, \"rgba(0,0,0,0.2)\");\n context.fillStyle = overlay;\n context.fillRect(0, 0, 512, 512);\n context.globalCompositeOperation = \"source-over\";\n }\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.colorSpace = THREE.SRGBColorSpace;\n texture.needsUpdate = true;\n return texture;\n}\n\nexport class EnvironmentSyncSystem implements EcsSystem {\n private readonly scene: THREE.Scene;\n private readonly textureLoader = new THREE.TextureLoader();\n private signature: string | null = null;\n private activeTexture: THREE.Texture | null = null;\n private pendingImageUrl: string | null = null;\n\n constructor(scene: THREE.Scene) {\n this.scene = scene;\n }\n\n private disposeActiveTexture(): void {\n if (this.activeTexture) {\n this.activeTexture.dispose();\n this.activeTexture = null;\n }\n }\n\n private applySkybox(component: Environment): void {\n const skybox = component.values.skybox;\n\n if (skybox.type === \"none\") {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n this.scene.background = null;\n return;\n }\n\n if (skybox.type === \"color\") {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n this.scene.background = new THREE.Color(skybox.color || \"#1e1e1e\");\n return;\n }\n\n if (skybox.type === \"gradient\") {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n const texture = createGradientTexture(\n skybox.gradient.effect,\n skybox.gradient.colors,\n );\n this.activeTexture = texture;\n this.scene.background = texture;\n return;\n }\n\n const imageUrl = skybox.imageUrl?.trim() ?? \"\";\n if (!imageUrl) {\n this.disposeActiveTexture();\n this.pendingImageUrl = null;\n this.scene.background = null;\n return;\n }\n\n if (this.pendingImageUrl === imageUrl && this.activeTexture) {\n this.scene.background = this.activeTexture;\n return;\n }\n\n this.disposeActiveTexture();\n this.pendingImageUrl = imageUrl;\n this.textureLoader.load(\n imageUrl,\n (texture) => {\n if (this.pendingImageUrl !== imageUrl) {\n texture.dispose();\n return;\n }\n\n texture.colorSpace = THREE.SRGBColorSpace;\n this.activeTexture = texture;\n this.scene.background = texture;\n },\n undefined,\n () => {\n if (this.pendingImageUrl === imageUrl) {\n this.pendingImageUrl = null;\n this.scene.background = null;\n }\n },\n );\n }\n\n private applyFog(component: Environment): void {\n const fog = component.values.fog;\n\n if (fog.type === \"none\") {\n this.scene.fog = null;\n return;\n }\n\n const fogColor = new THREE.Color(fog.color || \"#1e1e1e\");\n if (fog.type === \"linear\") {\n const near = Number.isFinite(fog.linear.near) ? fog.linear.near : 1;\n const farCandidate = Number.isFinite(fog.linear.far) ? fog.linear.far : near + 10;\n const far = Math.max(near + MIN_FOG_DELTA, farCandidate);\n this.scene.fog = new THREE.Fog(fogColor, near, far);\n return;\n }\n\n const density = Number.isFinite(fog.exponential.density)\n ? Math.max(MIN_DENSITY, fog.exponential.density)\n : 0.002;\n this.scene.fog = new THREE.FogExp2(fogColor, density);\n }\n\n update(world: World): void {\n const entityIds = world.query(Environment);\n if (entityIds.length === 0) {\n if (this.signature !== null) {\n this.signature = null;\n this.pendingImageUrl = null;\n this.disposeActiveTexture();\n this.scene.background = null;\n this.scene.fog = null;\n }\n return;\n }\n\n const entityId = entityIds[0];\n const environment = world.getComponent(entityId, Environment);\n if (!environment) {\n return;\n }\n\n const nextSignature = JSON.stringify(environment.values);\n if (this.signature === nextSignature) {\n return;\n }\n\n this.signature = nextSignature;\n this.applySkybox(environment);\n this.applyFog(environment);\n }\n\n dispose(): void {\n this.pendingImageUrl = null;\n this.disposeActiveTexture();\n }\n}\n","import { Postprocessing } from \"../components/Postprocessing\";\nimport type { PostprocessingState } from \"../components/Postprocessing\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\nimport * as THREE from \"three\";\nimport { EffectComposer } from \"three/examples/jsm/postprocessing/EffectComposer.js\";\nimport { RenderPass } from \"three/examples/jsm/postprocessing/RenderPass.js\";\nimport { UnrealBloomPass } from \"three/examples/jsm/postprocessing/UnrealBloomPass.js\";\nimport { DotScreenPass } from \"three/examples/jsm/postprocessing/DotScreenPass.js\";\nimport { GlitchPass } from \"three/examples/jsm/postprocessing/GlitchPass.js\";\nimport { FilmPass } from \"three/examples/jsm/postprocessing/FilmPass.js\";\nimport { BokehPass } from \"three/examples/jsm/postprocessing/BokehPass.js\";\nimport { SSAOPass } from \"three/examples/jsm/postprocessing/SSAOPass.js\";\nimport { ShaderPass } from \"three/examples/jsm/postprocessing/ShaderPass.js\";\nimport { OutputPass } from \"three/examples/jsm/postprocessing/OutputPass.js\";\nimport { HueSaturationShader } from \"three/examples/jsm/shaders/HueSaturationShader.js\";\nimport { SepiaShader } from \"three/examples/jsm/shaders/SepiaShader.js\";\nimport { VignetteShader } from \"three/examples/jsm/shaders/VignetteShader.js\";\n\nexport class PostprocessingSyncSystem implements EcsSystem {\n private readonly renderer: THREE.WebGLRenderer;\n private readonly scene: THREE.Scene;\n private readonly camera: THREE.PerspectiveCamera;\n private signature: string | null = null;\n private composer: EffectComposer | null = null;\n private composerEnabled = false;\n\n constructor(\n renderer: THREE.WebGLRenderer,\n scene: THREE.Scene,\n camera: THREE.PerspectiveCamera,\n ) {\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n }\n\n private setComposerEnabled(enabled: boolean): void {\n this.composerEnabled = enabled;\n this.scene.userData.ecsPostprocessingComposerActive = enabled;\n if (!enabled) {\n delete this.scene.userData.ecsPostprocessingComposer;\n }\n }\n\n private disposeComposer(): void {\n if (!this.composer) {\n this.setComposerEnabled(false);\n return;\n }\n\n const maybeComposer = this.composer as unknown as {\n passes?: Array<{ dispose?: () => void }>;\n dispose?: () => void;\n };\n\n if (Array.isArray(maybeComposer.passes)) {\n for (const pass of maybeComposer.passes) {\n pass.dispose?.();\n }\n }\n\n maybeComposer.dispose?.();\n this.composer = null;\n this.setComposerEnabled(false);\n }\n\n private buildComposer(values: PostprocessingState): void {\n this.disposeComposer();\n\n if (!values.postEnabled) {\n return;\n }\n\n const composer = new EffectComposer(this.renderer);\n composer.addPass(new RenderPass(this.scene, this.camera));\n\n if (values.dof.enabled) {\n composer.addPass(\n new BokehPass(this.scene, this.camera, {\n focus: values.dof.focusDistance,\n aperture: Math.max(0, values.dof.focalLength),\n maxblur: Math.max(0, values.dof.bokehScale),\n }),\n );\n }\n\n if (values.bloom.enabled) {\n const size = this.renderer.getSize(new THREE.Vector2());\n composer.addPass(\n new UnrealBloomPass(\n new THREE.Vector2(size.width, size.height),\n values.bloom.intensity,\n values.bloom.radius,\n values.bloom.threshold,\n ),\n );\n }\n\n if (values.vignette.enabled) {\n const pass = new ShaderPass(VignetteShader);\n const offset = pass.uniforms.offset;\n const darkness = pass.uniforms.darkness;\n if (offset) {\n offset.value = values.vignette.offset;\n }\n if (darkness) {\n darkness.value = values.vignette.darkness;\n }\n composer.addPass(pass);\n }\n\n if (values.hueSaturation.enabled) {\n const pass = new ShaderPass(HueSaturationShader);\n const hue = pass.uniforms.hue;\n const saturation = pass.uniforms.saturation;\n if (hue) {\n hue.value = values.hueSaturation.hue;\n }\n if (saturation) {\n saturation.value = values.hueSaturation.saturation;\n }\n composer.addPass(pass);\n }\n\n if (values.sepia.enabled) {\n const pass = new ShaderPass(SepiaShader);\n const amount = pass.uniforms.amount;\n if (amount) {\n amount.value = values.sepia.intensity;\n }\n composer.addPass(pass);\n }\n\n if (values.noise.enabled) {\n composer.addPass(new FilmPass(values.noise.opacity));\n }\n\n if (values.dotScreen.enabled) {\n composer.addPass(\n new DotScreenPass(\n new THREE.Vector2(0, 0),\n values.dotScreen.angle ?? values.dotScreen.dotScreenAngle,\n values.dotScreen.scale ?? values.dotScreen.dotScreenScale,\n ),\n );\n }\n\n if (values.ssao.enabled) {\n const pass = new SSAOPass(this.scene, this.camera);\n pass.kernelRadius = values.ssao.radius;\n pass.minDistance = 0.001;\n pass.maxDistance = Math.max(0.01, values.ssao.intensity);\n composer.addPass(pass);\n }\n\n if (values.glitch.enabled) {\n const pass = new GlitchPass();\n pass.enabled = true;\n pass.goWild = Boolean(values.glitch.active);\n composer.addPass(pass);\n }\n\n composer.addPass(new OutputPass());\n this.composer = composer;\n this.scene.userData.ecsPostprocessingComposer = composer;\n this.setComposerEnabled(true);\n }\n\n update(world: World): void {\n const entityIds = world.query(Postprocessing);\n if (entityIds.length === 0) {\n if (this.signature !== null) {\n this.signature = null;\n this.disposeComposer();\n delete this.scene.userData.ecsPostprocessing;\n }\n return;\n }\n\n const postprocessing = world.getComponent(entityIds[0], Postprocessing);\n if (!postprocessing) {\n return;\n }\n\n const nextSignature = JSON.stringify(postprocessing.values);\n if (this.signature === nextSignature) {\n return;\n }\n\n this.signature = nextSignature;\n this.buildComposer(postprocessing.values);\n\n this.scene.userData.ecsPostprocessing = postprocessing.values;\n }\n\n dispose(): void {\n this.signature = null;\n this.disposeComposer();\n delete this.scene.userData.ecsPostprocessing;\n delete this.scene.userData.ecsPostprocessingComposerActive;\n delete this.scene.userData.ecsPostprocessingComposer;\n }\n}\n","import * as THREE from \"three\";\n\nimport {\n type ColliderState,\n Environment,\n Object3DRef,\n PhysicsComponent,\n type RigidbodyState,\n TransformComponent,\n} from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\ntype RapierModule = typeof import(\"@dimforge/rapier3d-compat\");\n\ntype BodyType = RigidbodyState[\"type\"];\ntype EntityId = number;\ntype TriMeshData = {\n vertices: Float32Array;\n indices: Uint32Array;\n signature: string;\n};\n\nconst MIN_SIZE = 0.0001;\n\nfunction toBodyType(\n RAPIER: RapierModule,\n bodyType: BodyType,\n): import(\"@dimforge/rapier3d-compat\").RigidBodyType {\n switch (bodyType) {\n case \"fixed\":\n return RAPIER.RigidBodyType.Fixed;\n case \"kinematicPosition\":\n return RAPIER.RigidBodyType.KinematicPositionBased;\n case \"kinematicVelocity\":\n return RAPIER.RigidBodyType.KinematicVelocityBased;\n case \"dynamic\":\n default:\n return RAPIER.RigidBodyType.Dynamic;\n }\n}\n\nfunction createRigidBodyDesc(\n RAPIER: RapierModule,\n bodyType: BodyType,\n): import(\"@dimforge/rapier3d-compat\").RigidBodyDesc {\n if (bodyType === \"fixed\") {\n return RAPIER.RigidBodyDesc.fixed();\n }\n\n if (bodyType === \"kinematicPosition\") {\n return RAPIER.RigidBodyDesc.kinematicPositionBased();\n }\n\n if (bodyType === \"kinematicVelocity\") {\n return RAPIER.RigidBodyDesc.kinematicVelocityBased();\n }\n\n return RAPIER.RigidBodyDesc.dynamic();\n}\n\nfunction computeColliderState(\n colliderValues: ColliderState,\n object: THREE.Object3D | null,\n): ColliderState {\n if (!object) {\n return colliderValues;\n }\n\n const scale = new THREE.Vector3();\n object.getWorldScale(scale);\n\n return {\n ...colliderValues,\n size: {\n x: Math.max(MIN_SIZE, colliderValues.size.x * Math.abs(scale.x || 1)),\n y: Math.max(MIN_SIZE, colliderValues.size.y * Math.abs(scale.y || 1)),\n z: Math.max(MIN_SIZE, colliderValues.size.z * Math.abs(scale.z || 1)),\n },\n radius: Math.max(\n MIN_SIZE,\n colliderValues.radius *\n Math.max(Math.abs(scale.x || 1), Math.abs(scale.z || 1), 1),\n ),\n height: Math.max(MIN_SIZE, colliderValues.height * Math.abs(scale.y || 1)),\n };\n}\n\nfunction createColliderDesc(\n RAPIER: RapierModule,\n values: ColliderState,\n triMeshData: TriMeshData | null,\n): import(\"@dimforge/rapier3d-compat\").ColliderDesc {\n let desc: import(\"@dimforge/rapier3d-compat\").ColliderDesc;\n\n if (values.shape === \"trimesh\" && triMeshData) {\n desc = RAPIER.ColliderDesc.trimesh(\n triMeshData.vertices,\n triMeshData.indices,\n );\n } else if (values.shape === \"ball\") {\n desc = RAPIER.ColliderDesc.ball(Math.max(MIN_SIZE, values.radius));\n } else if (values.shape === \"capsule\") {\n desc = RAPIER.ColliderDesc.capsule(\n Math.max(MIN_SIZE, values.height / 2),\n Math.max(MIN_SIZE, values.radius),\n );\n } else if (values.shape === \"cylinder\") {\n desc = RAPIER.ColliderDesc.cylinder(\n Math.max(MIN_SIZE, values.height / 2),\n Math.max(MIN_SIZE, values.radius),\n );\n } else {\n desc = RAPIER.ColliderDesc.cuboid(\n Math.max(MIN_SIZE, values.size.x / 2),\n Math.max(MIN_SIZE, values.size.y / 2),\n Math.max(MIN_SIZE, values.size.z / 2),\n );\n }\n\n desc.setRestitution(Math.max(0, values.restitution));\n desc.setFriction(Math.max(0, values.friction));\n desc.setSensor(values.isSensor);\n\n desc.setTranslation(\n values.offsetPosition.x,\n values.offsetPosition.y,\n values.offsetPosition.z,\n );\n\n const offsetQuaternion = new THREE.Quaternion().setFromEuler(\n new THREE.Euler(\n values.offsetRotation.x,\n values.offsetRotation.y,\n values.offsetRotation.z,\n ),\n );\n desc.setRotation(offsetQuaternion);\n\n return desc;\n}\n\nfunction findFirstMeshWithGeometry(object: THREE.Object3D): THREE.Mesh | null {\n if (object instanceof THREE.Mesh && object.geometry) {\n return object;\n }\n\n let found: THREE.Mesh | null = null;\n object.traverse((child) => {\n if (found) {\n return;\n }\n\n if (child instanceof THREE.Mesh && child.geometry) {\n found = child;\n }\n });\n\n return found;\n}\n\nfunction createTriMeshData(object: THREE.Object3D | null): TriMeshData | null {\n if (!object) {\n return null;\n }\n\n const mesh = findFirstMeshWithGeometry(object);\n if (!mesh) {\n return null;\n }\n\n const geometry = mesh.geometry;\n const positionAttribute = geometry.getAttribute(\"position\");\n if (!positionAttribute || positionAttribute.itemSize < 3) {\n return null;\n }\n\n const positionCount = positionAttribute.count;\n if (positionCount < 3) {\n return null;\n }\n\n object.updateWorldMatrix(true, true);\n mesh.updateWorldMatrix(true, true);\n\n const worldToObject = new THREE.Matrix4().copy(object.matrixWorld).invert();\n const relativeMatrix = new THREE.Matrix4().multiplyMatrices(\n worldToObject,\n mesh.matrixWorld,\n );\n\n const vertices = new Float32Array(positionCount * 3);\n const point = new THREE.Vector3();\n for (let index = 0; index < positionCount; index += 1) {\n point\n .set(\n positionAttribute.getX(index),\n positionAttribute.getY(index),\n positionAttribute.getZ(index),\n )\n .applyMatrix4(relativeMatrix);\n\n const outputIndex = index * 3;\n vertices[outputIndex] = point.x;\n vertices[outputIndex + 1] = point.y;\n vertices[outputIndex + 2] = point.z;\n }\n\n const indexAttribute = geometry.getIndex();\n let indices: Uint32Array;\n if (indexAttribute) {\n indices = new Uint32Array(indexAttribute.count);\n for (let index = 0; index < indexAttribute.count; index += 1) {\n indices[index] = indexAttribute.getX(index);\n }\n } else {\n const triangleIndexCount = Math.floor(positionCount / 3) * 3;\n if (triangleIndexCount < 3) {\n return null;\n }\n\n indices = new Uint32Array(triangleIndexCount);\n for (let index = 0; index < triangleIndexCount; index += 1) {\n indices[index] = index;\n }\n }\n\n const matrixSignature = relativeMatrix.elements\n .map((value) => value.toFixed(5))\n .join(\",\");\n return {\n vertices,\n indices,\n signature: `${mesh.uuid}:${geometry.uuid}:${positionCount}:${indices.length}:${matrixSignature}`,\n };\n}\n\nfunction syncBodyFromTransform(\n body: import(\"@dimforge/rapier3d-compat\").RigidBody,\n transform: TransformComponent,\n): void {\n const quaternion = new THREE.Quaternion().setFromEuler(\n new THREE.Euler(transform.rotation.x, transform.rotation.y, transform.rotation.z),\n );\n\n body.setTranslation(\n {\n x: transform.position.x,\n y: transform.position.y,\n z: transform.position.z,\n },\n true,\n );\n body.setRotation(\n {\n x: quaternion.x,\n y: quaternion.y,\n z: quaternion.z,\n w: quaternion.w,\n },\n true,\n );\n}\n\nfunction syncTransformFromBody(\n transform: TransformComponent,\n body: import(\"@dimforge/rapier3d-compat\").RigidBody,\n): void {\n const position = body.translation();\n const rotation = body.rotation();\n\n transform.position.x = position.x;\n transform.position.y = position.y;\n transform.position.z = position.z;\n\n const euler = new THREE.Euler().setFromQuaternion(\n new THREE.Quaternion(rotation.x, rotation.y, rotation.z, rotation.w),\n );\n\n transform.rotation.x = euler.x;\n transform.rotation.y = euler.y;\n transform.rotation.z = euler.z;\n}\n\nexport class PhysicsSyncSystem implements EcsSystem {\n private readonly rigidBodyHandles = new Map<EntityId, number>();\n private readonly colliderHandles = new Map<EntityId, number>();\n private readonly rigidBodySignatures = new Map<EntityId, string>();\n private readonly colliderSignatures = new Map<EntityId, string>();\n private readonly isEditorMode: boolean;\n private rapier: RapierModule | null = null;\n private isBootstrappingWorld = false;\n private accumulator = 0;\n\n constructor(options?: { isEditor?: boolean }) {\n this.isEditorMode = options?.isEditor ?? false;\n }\n\n private async ensurePhysicsWorld(world: World): Promise<void> {\n if (this.rapier || this.isBootstrappingWorld) {\n return;\n }\n\n this.isBootstrappingWorld = true;\n try {\n const environmentEntityId = world.query(Environment)[0];\n const environment =\n typeof environmentEntityId === \"number\"\n ? world.getComponent(environmentEntityId, Environment)\n : undefined;\n\n const gravity = environment?.values.gravity;\n const rapierWorld = await world.createPhysicsWorld({\n gravity: {\n x: gravity?.x,\n y: gravity?.y,\n z: gravity?.z,\n },\n });\n if (!rapierWorld) {\n return;\n }\n\n const moduleValue = await world.getRapierModule();\n this.rapier = moduleValue;\n } finally {\n this.isBootstrappingWorld = false;\n }\n }\n\n private removeEntityPhysics(\n physicsWorld: import(\"@dimforge/rapier3d-compat\").World,\n entityId: EntityId,\n ): void {\n const rigidBodyHandle = this.rigidBodyHandles.get(entityId);\n if (typeof rigidBodyHandle === \"number\") {\n const rigidBody = physicsWorld.getRigidBody(rigidBodyHandle);\n if (rigidBody) {\n physicsWorld.removeRigidBody(rigidBody);\n }\n }\n\n this.rigidBodyHandles.delete(entityId);\n this.colliderHandles.delete(entityId);\n this.rigidBodySignatures.delete(entityId);\n this.colliderSignatures.delete(entityId);\n }\n\n update(world: World, deltaTime: number): void {\n if (!this.rapier || !world.getPhysicsWorld()) {\n void this.ensurePhysicsWorld(world);\n return;\n }\n\n const physicsWorld = world.getPhysicsWorld();\n if (!physicsWorld) {\n return;\n }\n\n const entities = world.query(TransformComponent, PhysicsComponent);\n const activeEntities = new Set<EntityId>(entities);\n\n for (const entityId of this.rigidBodyHandles.keys()) {\n if (!activeEntities.has(entityId)) {\n this.removeEntityPhysics(physicsWorld, entityId);\n }\n }\n\n for (const entityId of entities) {\n const transform = world.getComponent(entityId, TransformComponent);\n const physics = world.getComponent(entityId, PhysicsComponent);\n const object = world.getComponent(entityId, Object3DRef)?.object ?? null;\n if (!transform || !physics) {\n continue;\n }\n\n if (!physics.values.rigidbody.enabled) {\n this.removeEntityPhysics(physicsWorld, entityId);\n physics.rigidBody = null;\n physics.collider = null;\n continue;\n }\n\n const rigidBodySignature = JSON.stringify(physics.values.rigidbody);\n const previousRigidBodySignature = this.rigidBodySignatures.get(entityId);\n const hasRigidBody = this.rigidBodyHandles.has(entityId);\n const shouldRecreateBody =\n !hasRigidBody || previousRigidBodySignature !== rigidBodySignature;\n\n if (shouldRecreateBody) {\n this.removeEntityPhysics(physicsWorld, entityId);\n\n const lockTranslationX =\n physics.values.rigidbody.lockTranslations || physics.values.rigidbody.lockTranslationX;\n const lockTranslationY =\n physics.values.rigidbody.lockTranslations || physics.values.rigidbody.lockTranslationY;\n const lockTranslationZ =\n physics.values.rigidbody.lockTranslations || physics.values.rigidbody.lockTranslationZ;\n const lockRotationX =\n physics.values.rigidbody.lockRotations || physics.values.rigidbody.lockRotationX;\n const lockRotationY =\n physics.values.rigidbody.lockRotations || physics.values.rigidbody.lockRotationY;\n const lockRotationZ =\n physics.values.rigidbody.lockRotations || physics.values.rigidbody.lockRotationZ;\n\n const bodyType = this.isEditorMode ? \"fixed\" : physics.values.rigidbody.type;\n const bodyDesc = createRigidBodyDesc(this.rapier, bodyType)\n .setLinearDamping(physics.values.rigidbody.linearDamping)\n .setAngularDamping(physics.values.rigidbody.angularDamping)\n .setGravityScale(physics.values.rigidbody.gravityScale)\n .setCanSleep(physics.values.rigidbody.canSleep)\n .setCcdEnabled(physics.values.rigidbody.ccdEnabled)\n .enabledTranslations(\n !lockTranslationX,\n !lockTranslationY,\n !lockTranslationZ,\n )\n .enabledRotations(\n !lockRotationX,\n !lockRotationY,\n !lockRotationZ,\n );\n\n bodyDesc.setTranslation(\n transform.position.x,\n transform.position.y,\n transform.position.z,\n );\n\n const quaternion = new THREE.Quaternion().setFromEuler(\n new THREE.Euler(\n transform.rotation.x,\n transform.rotation.y,\n transform.rotation.z,\n ),\n );\n bodyDesc.setRotation(quaternion);\n\n const body = physicsWorld.createRigidBody(bodyDesc);\n if (!this.isEditorMode && physics.values.rigidbody.type === \"dynamic\") {\n body.setAdditionalMass(physics.values.rigidbody.mass, true);\n }\n\n this.rigidBodyHandles.set(entityId, body.handle);\n this.rigidBodySignatures.set(entityId, rigidBodySignature);\n physics.rigidBody = body;\n }\n\n const rigidBodyHandle = this.rigidBodyHandles.get(entityId);\n if (typeof rigidBodyHandle !== \"number\") {\n continue;\n }\n\n const body = physicsWorld.getRigidBody(rigidBodyHandle);\n if (!body) {\n this.removeEntityPhysics(physicsWorld, entityId);\n physics.rigidBody = null;\n physics.collider = null;\n continue;\n }\n\n physics.rigidBody = body;\n\n if (this.isEditorMode || physics.values.rigidbody.type !== \"dynamic\") {\n syncBodyFromTransform(body, transform);\n }\n\n const effectiveCollider = computeColliderState(physics.values.collider, object);\n const triMeshData =\n effectiveCollider.shape === \"trimesh\" ? createTriMeshData(object) : null;\n\n if (!effectiveCollider || !effectiveCollider.enabled) {\n const colliderHandle = this.colliderHandles.get(entityId);\n if (typeof colliderHandle === \"number\") {\n const existingCollider = physicsWorld.getCollider(colliderHandle);\n if (existingCollider) {\n physicsWorld.removeCollider(existingCollider, true);\n }\n }\n this.colliderHandles.delete(entityId);\n this.colliderSignatures.delete(entityId);\n physics.collider = null;\n continue;\n }\n\n const colliderSignature = `${JSON.stringify(effectiveCollider)}:${triMeshData?.signature ?? \"\"}`;\n const previousColliderSignature = this.colliderSignatures.get(entityId);\n if (\n !this.colliderHandles.has(entityId) ||\n previousColliderSignature !== colliderSignature\n ) {\n const previousColliderHandle = this.colliderHandles.get(entityId);\n if (typeof previousColliderHandle === \"number\") {\n const previousCollider = physicsWorld.getCollider(previousColliderHandle);\n if (previousCollider) {\n physicsWorld.removeCollider(previousCollider, true);\n }\n }\n\n const colliderDesc = createColliderDesc(\n this.rapier,\n effectiveCollider,\n triMeshData,\n );\n const createdCollider = physicsWorld.createCollider(colliderDesc, body);\n this.colliderHandles.set(entityId, createdCollider.handle);\n this.colliderSignatures.set(entityId, colliderSignature);\n physics.collider = createdCollider;\n } else {\n const colliderHandle = this.colliderHandles.get(entityId);\n physics.collider =\n typeof colliderHandle === \"number\"\n ? (physicsWorld.getCollider(colliderHandle) ?? null)\n : null;\n }\n }\n\n if (!this.isEditorMode) {\n const environmentEntityId = world.query(Environment)[0];\n const environment =\n typeof environmentEntityId === \"number\"\n ? world.getComponent(environmentEntityId, Environment)\n : undefined;\n const fixedTimeStep =\n typeof environment?.values.fixedTimeStep === \"number\" &&\n environment.values.fixedTimeStep > 0\n ? environment.values.fixedTimeStep\n : 0.02;\n\n const clampedDelta =\n Number.isFinite(deltaTime) && deltaTime > 0\n ? Math.min(deltaTime, 0.1)\n : fixedTimeStep;\n\n this.accumulator += clampedDelta;\n\n while (this.accumulator >= fixedTimeStep) {\n physicsWorld.integrationParameters.dt = fixedTimeStep;\n physicsWorld.step();\n this.accumulator -= fixedTimeStep;\n }\n }\n\n for (const entityId of entities) {\n const physics = world.getComponent(entityId, PhysicsComponent);\n const transform = world.getComponent(entityId, TransformComponent);\n if (\n !physics ||\n !transform ||\n this.isEditorMode ||\n physics.values.rigidbody.type !== \"dynamic\"\n ) {\n continue;\n }\n\n const rigidBodyHandle = this.rigidBodyHandles.get(entityId);\n if (typeof rigidBodyHandle !== \"number\") {\n continue;\n }\n\n const body = physicsWorld.getRigidBody(rigidBodyHandle);\n if (!body) {\n continue;\n }\n\n syncTransformFromBody(transform, body);\n }\n }\n\n dispose(world: World): void {\n const physicsWorld = world.getPhysicsWorld();\n if (physicsWorld) {\n for (const entityId of this.rigidBodyHandles.keys()) {\n this.removeEntityPhysics(physicsWorld, entityId);\n }\n }\n\n this.rigidBodyHandles.clear();\n this.colliderHandles.clear();\n this.rigidBodySignatures.clear();\n this.colliderSignatures.clear();\n this.accumulator = 0;\n }\n}\n","export const KeyboardKeys = {\n A: \"a\",\n B: \"b\",\n C: \"c\",\n D: \"d\",\n E: \"e\",\n F: \"f\",\n G: \"g\",\n H: \"h\",\n I: \"i\",\n J: \"j\",\n K: \"k\",\n L: \"l\",\n M: \"m\",\n N: \"n\",\n O: \"o\",\n P: \"p\",\n Q: \"q\",\n R: \"r\",\n S: \"s\",\n T: \"t\",\n U: \"u\",\n V: \"v\",\n W: \"w\",\n X: \"x\",\n Y: \"y\",\n Z: \"z\",\n Digit0: \"0\",\n Digit1: \"1\",\n Digit2: \"2\",\n Digit3: \"3\",\n Digit4: \"4\",\n Digit5: \"5\",\n Digit6: \"6\",\n Digit7: \"7\",\n Digit8: \"8\",\n Digit9: \"9\",\n Space: \" \",\n Enter: \"enter\",\n Escape: \"escape\",\n Tab: \"tab\",\n Backspace: \"backspace\",\n Delete: \"delete\",\n Insert: \"insert\",\n Home: \"home\",\n End: \"end\",\n PageUp: \"pageup\",\n PageDown: \"pagedown\",\n ArrowUp: \"arrowup\",\n ArrowDown: \"arrowdown\",\n ArrowLeft: \"arrowleft\",\n ArrowRight: \"arrowright\",\n Shift: \"shift\",\n ShiftLeft: \"shiftleft\",\n ShiftRight: \"shiftright\",\n Control: \"control\",\n ControlLeft: \"controlleft\",\n ControlRight: \"controlright\",\n Alt: \"alt\",\n Meta: \"meta\",\n CapsLock: \"capslock\",\n NumLock: \"numlock\",\n ScrollLock: \"scrolllock\",\n Pause: \"pause\",\n PrintScreen: \"printscreen\",\n ContextMenu: \"contextmenu\",\n Minus: \"-\",\n Equal: \"=\",\n BracketLeft: \"[\",\n BracketRight: \"]\",\n Backslash: \"\\\\\",\n Semicolon: \";\",\n Quote: \"'\",\n Backquote: \"`\",\n Comma: \",\",\n Period: \".\",\n Slash: \"/\",\n F1: \"f1\",\n F2: \"f2\",\n F3: \"f3\",\n F4: \"f4\",\n F5: \"f5\",\n F6: \"f6\",\n F7: \"f7\",\n F8: \"f8\",\n F9: \"f9\",\n F10: \"f10\",\n F11: \"f11\",\n F12: \"f12\",\n} as const;\n\nexport type KeyboardKey = (typeof KeyboardKeys)[keyof typeof KeyboardKeys];","import type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\nimport type { KeyboardKey } from \"./keyboardKeys\";\n\nfunction normalizeKey(key: KeyboardKey | string): string {\n return key.toLowerCase();\n}\n\nexport type MouseButton = \"left\" | \"middle\" | \"right\";\n\nfunction normalizeMouseButton(button: MouseButton | number | string): number {\n if (typeof button === \"number\") {\n return button;\n }\n\n const normalized = button.toLowerCase();\n if (normalized === \"left\") {\n return 0;\n }\n\n if (normalized === \"middle\" || normalized === \"scroll\") {\n return 1;\n }\n\n if (normalized === \"right\") {\n return 2;\n }\n\n return Number.NaN;\n}\n\nexport class InputSystem implements EcsSystem {\n private readonly held = new Set<string>();\n private readonly down = new Set<string>();\n private readonly up = new Set<string>();\n private readonly pendingDown = new Set<string>();\n private readonly pendingUp = new Set<string>();\n\n private readonly heldMouse = new Set<number>();\n private readonly downMouse = new Set<number>();\n private readonly upMouse = new Set<number>();\n private readonly pendingMouseDown = new Set<number>();\n private readonly pendingMouseUp = new Set<number>();\n\n private scrollDeltaX = 0;\n private scrollDeltaY = 0;\n private pendingScrollDeltaX = 0;\n private pendingScrollDeltaY = 0;\n private mouseDeltaX = 0;\n private mouseDeltaY = 0;\n private pendingMouseDeltaX = 0;\n private pendingMouseDeltaY = 0;\n private mousePosition = { x: 0, y: 0 };\n private pointerLockElement: HTMLElement | null = null;\n private pendingPointerLockRequest = false;\n\n private resolvePointerBounds(): { minX: number; minY: number; maxX: number; maxY: number } {\n const targetElement = this.pointerLockElement;\n if (targetElement) {\n const rect = targetElement.getBoundingClientRect();\n return {\n minX: rect.left,\n minY: rect.top,\n maxX: rect.right,\n maxY: rect.bottom,\n };\n }\n\n return {\n minX: 0,\n minY: 0,\n maxX: typeof window !== \"undefined\" ? window.innerWidth : 0,\n maxY: typeof window !== \"undefined\" ? window.innerHeight : 0,\n };\n }\n\n private onKeyDown = (event: KeyboardEvent): void => {\n const key = normalizeKey(event.key);\n const code = normalizeKey(event.code);\n\n if (!this.held.has(key)) {\n this.pendingDown.add(key);\n }\n\n this.held.add(key);\n\n // Also track event.code so left/right variants (e.g. ShiftLeft, ControlRight)\n // can be distinguished independently of event.key.\n if (code !== key) {\n if (!this.held.has(code)) {\n this.pendingDown.add(code);\n }\n this.held.add(code);\n }\n };\n\n private onKeyUp = (event: KeyboardEvent): void => {\n const key = normalizeKey(event.key);\n const code = normalizeKey(event.code);\n\n this.held.delete(key);\n this.pendingUp.add(key);\n\n if (code !== key) {\n this.held.delete(code);\n this.pendingUp.add(code);\n }\n };\n\n private onWindowBlur = (): void => {\n this.clearAll();\n };\n\n private onMouseDown = (event: MouseEvent): void => {\n const button = event.button;\n\n if (!this.heldMouse.has(button)) {\n this.pendingMouseDown.add(button);\n }\n\n this.heldMouse.add(button);\n\n // If a behaviour called lockMousePointer() outside a gesture context (e.g. from\n // update()), honour the deferred request now — we are synchronously inside a\n // trusted mousedown event, so Safari will allow the pointer lock.\n if (this.pendingPointerLockRequest) {\n this.pendingPointerLockRequest = false;\n const targetElement = this.pointerLockElement ?? document.body;\n if (targetElement && typeof targetElement.requestPointerLock === \"function\") {\n const result = targetElement.requestPointerLock();\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n }\n }\n };\n\n private onMouseUp = (event: MouseEvent): void => {\n const button = event.button;\n\n this.heldMouse.delete(button);\n this.pendingMouseUp.add(button);\n };\n\n private onMouseWheel = (event: WheelEvent): void => {\n this.pendingScrollDeltaX += event.deltaX;\n this.pendingScrollDeltaY += event.deltaY;\n };\n\n private onMouseMove = (event: MouseEvent): void => {\n if (this.isMousePointerLocked()) {\n this.pendingMouseDeltaX += event.movementX;\n this.pendingMouseDeltaY += event.movementY;\n this.mousePosition = {\n x: this.mousePosition.x + event.movementX,\n y: this.mousePosition.y + event.movementY,\n };\n return;\n }\n\n this.pendingMouseDeltaX += event.movementX;\n this.pendingMouseDeltaY += event.movementY;\n\n this.mousePosition = {\n x: event.clientX,\n y: event.clientY,\n };\n };\n\n private onPointerLockChange = (): void => {\n if (!this.isMousePointerLocked()) {\n return;\n }\n\n const bounds = this.resolvePointerBounds();\n this.mousePosition = {\n x: (bounds.minX + bounds.maxX) / 2,\n y: (bounds.minY + bounds.maxY) / 2,\n };\n };\n\n private onPointerLockError = (): void => {\n // No-op by default; callers can inspect lock state via isMousePointerLocked().\n };\n\n constructor() {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.addEventListener(\"keydown\", this.onKeyDown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n window.addEventListener(\"mousedown\", this.onMouseDown);\n window.addEventListener(\"mouseup\", this.onMouseUp);\n document.addEventListener(\"mousemove\", this.onMouseMove);\n window.addEventListener(\"wheel\", this.onMouseWheel, { passive: true });\n window.addEventListener(\"blur\", this.onWindowBlur);\n document.addEventListener(\"pointerlockchange\", this.onPointerLockChange);\n document.addEventListener(\"pointerlockerror\", this.onPointerLockError);\n }\n\n setPointerLockElement(element: HTMLElement | null): void {\n this.pointerLockElement = element;\n }\n\n lockMousePointer(): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const targetElement = this.pointerLockElement ?? document.body;\n if (!targetElement || typeof targetElement.requestPointerLock !== \"function\") {\n return false;\n }\n\n try {\n const result = targetElement.requestPointerLock();\n // Modern browsers (including Safari) return a Promise. If it rejects\n // (e.g. called outside a user gesture on Safari), set a flag so the\n // lock is automatically requested on the next mousedown event, which\n // is always a trusted user gesture.\n if (result instanceof Promise) {\n result.catch(() => {\n this.pendingPointerLockRequest = true;\n });\n }\n return true;\n } catch {\n return false;\n }\n }\n\n unlockMousePointer(): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n // Cancel any deferred lock request so we don't immediately re-lock on next click.\n this.pendingPointerLockRequest = false;\n\n if (!document.pointerLockElement || typeof document.exitPointerLock !== \"function\") {\n return false;\n }\n\n document.exitPointerLock();\n return true;\n }\n\n isMousePointerLocked(): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const activePointerLockElement = document.pointerLockElement;\n if (!activePointerLockElement) {\n return false;\n }\n\n if (!this.pointerLockElement) {\n return true;\n }\n\n return activePointerLockElement === this.pointerLockElement;\n }\n\n getKey(key: KeyboardKey | string): boolean {\n return this.held.has(normalizeKey(key));\n }\n\n getKeyDown(key: KeyboardKey | string): boolean {\n return this.down.has(normalizeKey(key));\n }\n\n getKeyUp(key: KeyboardKey | string): boolean {\n return this.up.has(normalizeKey(key));\n }\n\n consumePressed(key: KeyboardKey | string): boolean {\n const normalized = normalizeKey(key);\n if (!this.down.has(normalized)) {\n return false;\n }\n\n this.down.delete(normalized);\n return true;\n }\n\n getMouse(button: MouseButton | number | string): boolean {\n const normalizedButton = normalizeMouseButton(button);\n if (!Number.isInteger(normalizedButton)) {\n return false;\n }\n\n return this.heldMouse.has(normalizedButton);\n }\n\n getMouseDown(button: MouseButton | number | string): boolean {\n const normalizedButton = normalizeMouseButton(button);\n if (!Number.isInteger(normalizedButton)) {\n return false;\n }\n\n return this.downMouse.has(normalizedButton);\n }\n\n getMouseUp(button: MouseButton | number | string): boolean {\n const normalizedButton = normalizeMouseButton(button);\n if (!Number.isInteger(normalizedButton)) {\n return false;\n }\n\n return this.upMouse.has(normalizedButton);\n }\n\n getScrollClick(): boolean {\n return this.getMouse(\"middle\");\n }\n\n getScrollClickDown(): boolean {\n return this.getMouseDown(\"middle\");\n }\n\n getScrollClickUp(): boolean {\n return this.getMouseUp(\"middle\");\n }\n\n getScrollDelta(): { x: number; y: number } {\n return {\n x: this.scrollDeltaX,\n y: this.scrollDeltaY,\n };\n }\n\n consumeScrollDelta(): { x: number; y: number } {\n const delta = this.getScrollDelta();\n this.scrollDeltaX = 0;\n this.scrollDeltaY = 0;\n return delta;\n }\n\n getMousePosition(): { x: number; y: number } {\n return {\n x: this.mousePosition.x,\n y: this.mousePosition.y,\n };\n }\n\n getMouseDelta(): { x: number; y: number } {\n return {\n x: this.mouseDeltaX,\n y: this.mouseDeltaY,\n };\n }\n\n consumeMouseDelta(): { x: number; y: number } {\n const delta = this.getMouseDelta();\n this.mouseDeltaX = 0;\n this.mouseDeltaY = 0;\n return delta;\n }\n\n update(_world: World, _deltaTime: number): void {\n this.down.clear();\n this.up.clear();\n this.downMouse.clear();\n this.upMouse.clear();\n this.scrollDeltaX = this.pendingScrollDeltaX;\n this.scrollDeltaY = this.pendingScrollDeltaY;\n this.mouseDeltaX = this.pendingMouseDeltaX;\n this.mouseDeltaY = this.pendingMouseDeltaY;\n\n for (const key of this.pendingDown) {\n this.down.add(key);\n }\n\n for (const key of this.pendingUp) {\n this.up.add(key);\n }\n\n for (const button of this.pendingMouseDown) {\n this.downMouse.add(button);\n }\n\n for (const button of this.pendingMouseUp) {\n this.upMouse.add(button);\n }\n\n this.pendingDown.clear();\n this.pendingUp.clear();\n this.pendingMouseDown.clear();\n this.pendingMouseUp.clear();\n this.pendingScrollDeltaX = 0;\n this.pendingScrollDeltaY = 0;\n this.pendingMouseDeltaX = 0;\n this.pendingMouseDeltaY = 0;\n }\n\n dispose(): void {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"keydown\", this.onKeyDown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n window.removeEventListener(\"mousedown\", this.onMouseDown);\n window.removeEventListener(\"mouseup\", this.onMouseUp);\n document.removeEventListener(\"mousemove\", this.onMouseMove);\n window.removeEventListener(\"wheel\", this.onMouseWheel);\n window.removeEventListener(\"blur\", this.onWindowBlur);\n document.removeEventListener(\"pointerlockchange\", this.onPointerLockChange);\n document.removeEventListener(\"pointerlockerror\", this.onPointerLockError);\n }\n\n this.clearAll();\n }\n\n private clearAll(): void {\n this.held.clear();\n this.down.clear();\n this.up.clear();\n this.pendingDown.clear();\n this.pendingUp.clear();\n this.heldMouse.clear();\n this.downMouse.clear();\n this.upMouse.clear();\n this.pendingMouseDown.clear();\n this.pendingMouseUp.clear();\n this.scrollDeltaX = 0;\n this.scrollDeltaY = 0;\n this.pendingScrollDeltaX = 0;\n this.pendingScrollDeltaY = 0;\n this.mouseDeltaX = 0;\n this.mouseDeltaY = 0;\n this.pendingMouseDeltaX = 0;\n this.pendingMouseDeltaY = 0;\n this.mousePosition = { x: 0, y: 0 };\n }\n}\n\n\n","import * as THREE from \"three\";\n\nimport { LightComponent } from \"../components/Light\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_LIGHT_DISTANCE = 0;\nconst MIN_LIGHT_INTENSITY = 0;\nconst MIN_AREA_SIZE = 0.01;\n\nfunction applyLightValues(lightComponent: LightComponent): void {\n const { light, values } = lightComponent;\n\n if (typeof values.color === \"string\") {\n light.color.set(values.color);\n }\n\n if (Number.isFinite(values.intensity)) {\n light.intensity = Math.max(MIN_LIGHT_INTENSITY, values.intensity);\n }\n\n light.frustumCulled = Boolean(values.frustumCulling);\n\n if (\"castShadow\" in light) {\n (light as THREE.Light & { castShadow: boolean }).castShadow = Boolean(\n values.castShadow,\n );\n }\n\n if (light instanceof THREE.PointLight) {\n if (typeof values.distance === \"number\" && Number.isFinite(values.distance)) {\n light.distance = Math.max(MIN_LIGHT_DISTANCE, values.distance);\n }\n\n if (typeof values.decay === \"number\" && Number.isFinite(values.decay)) {\n light.decay = Math.max(0, values.decay);\n }\n }\n\n if (light instanceof THREE.SpotLight) {\n if (typeof values.distance === \"number\" && Number.isFinite(values.distance)) {\n light.distance = Math.max(MIN_LIGHT_DISTANCE, values.distance);\n }\n\n if (typeof values.decay === \"number\" && Number.isFinite(values.decay)) {\n light.decay = Math.max(0, values.decay);\n }\n\n if (typeof values.angle === \"number\" && Number.isFinite(values.angle)) {\n light.angle = Math.max(0, Math.min(Math.PI / 2, values.angle));\n }\n\n if (typeof values.penumbra === \"number\" && Number.isFinite(values.penumbra)) {\n light.penumbra = Math.max(0, Math.min(1, values.penumbra));\n }\n }\n\n if (light instanceof THREE.RectAreaLight) {\n if (typeof values.width === \"number\" && Number.isFinite(values.width)) {\n light.width = Math.max(MIN_AREA_SIZE, values.width);\n }\n\n if (typeof values.height === \"number\" && Number.isFinite(values.height)) {\n light.height = Math.max(MIN_AREA_SIZE, values.height);\n }\n }\n}\n\nexport class LightSyncSystem implements EcsSystem {\n private readonly signatures = new Map<number, string>();\n\n update(world: World): void {\n const entityIds = world.query(LightComponent);\n\n const alive = new Set(entityIds);\n for (const trackedId of this.signatures.keys()) {\n if (!alive.has(trackedId)) {\n this.signatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const lightComponent = world.getComponent(entityId, LightComponent);\n if (!lightComponent) {\n continue;\n }\n\n const signature = JSON.stringify(lightComponent.values);\n if (this.signatures.get(entityId) === signature) {\n continue;\n }\n\n applyLightValues(lightComponent);\n this.signatures.set(entityId, signature);\n }\n }\n}\n","import * as THREE from \"three\";\n\nimport {\n MaterialComponent,\n type MaterialTypeValue,\n type MaterialValueState,\n Object3DRef,\n type TextureFilteringValue,\n} from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\ntype MaterialWithValues = {\n material: THREE.Material | null;\n materials: THREE.Material[];\n values: MaterialValueState[];\n};\n\nconst materialTextureKeyMap: Record<string, string> = {\n textureMap: \"map\",\n alphaTextureMap: \"alphaMap\",\n};\n\nconst materialTextureSlots = [\n \"map\",\n \"alphaMap\",\n \"normalMap\",\n \"roughnessMap\",\n \"metalnessMap\",\n \"aoMap\",\n \"emissiveMap\",\n \"bumpMap\",\n \"displacementMap\",\n \"lightMap\",\n \"envMap\",\n] as const;\n\nfunction resolveMaterialPropertyKey(key: string): string {\n return materialTextureKeyMap[key] ?? key;\n}\n\nfunction createMaterialByType(type: MaterialTypeValue): THREE.Material {\n if (type === \"basic\") {\n return new THREE.MeshBasicMaterial();\n }\n\n if (type === \"phong\") {\n return new THREE.MeshPhongMaterial();\n }\n\n if (type === \"physical\") {\n return new THREE.MeshPhysicalMaterial();\n }\n\n return new THREE.MeshStandardMaterial();\n}\n\nfunction replaceMaterialAcrossObject(\n object: THREE.Object3D,\n previous: THREE.Material,\n next: THREE.Material,\n): void {\n object.traverse((child) => {\n const mesh = child as THREE.Mesh;\n const currentMaterial = mesh.material;\n if (!currentMaterial) {\n return;\n }\n\n if (Array.isArray(currentMaterial)) {\n let changed = false;\n const updated = currentMaterial.map((material) => {\n if (material === previous) {\n changed = true;\n return next;\n }\n\n return material;\n });\n\n if (changed) {\n mesh.material = updated;\n }\n return;\n }\n\n if (currentMaterial === previous) {\n mesh.material = next;\n }\n });\n}\n\nfunction extractObjectMaterials(object: THREE.Object3D): THREE.Material[] {\n const materials: THREE.Material[] = [];\n\n object.traverse((child) => {\n const mesh = child as THREE.Mesh;\n const currentMaterial = mesh.material;\n if (!currentMaterial) {\n return;\n }\n\n const addMaterial = (material: THREE.Material) => {\n if (!materials.includes(material)) {\n materials.push(material);\n }\n };\n\n if (Array.isArray(currentMaterial)) {\n for (const material of currentMaterial) {\n addMaterial(material);\n }\n return;\n }\n\n addMaterial(currentMaterial);\n });\n\n return materials;\n}\n\nfunction applyTextureFiltering(\n material: THREE.Material,\n filtering: TextureFilteringValue,\n): void {\n const sharp = filtering === \"sharp\";\n const target = material as unknown as Record<string, unknown>;\n\n for (const slot of materialTextureSlots) {\n const texture = target[slot] as THREE.Texture | null | undefined;\n if (!texture || !(texture instanceof THREE.Texture)) {\n continue;\n }\n\n const useMipmaps = texture.generateMipmaps !== false;\n texture.magFilter = sharp ? THREE.NearestFilter : THREE.LinearFilter;\n texture.minFilter = useMipmaps\n ? sharp\n ? THREE.NearestMipmapNearestFilter\n : THREE.LinearMipmapLinearFilter\n : sharp\n ? THREE.NearestFilter\n : THREE.LinearFilter;\n texture.needsUpdate = true;\n }\n\n material.needsUpdate = true;\n}\n\nfunction setTextureMipmaps(material: THREE.Material, enabled: boolean): void {\n const target = material as unknown as Record<string, unknown>;\n\n for (const slot of materialTextureSlots) {\n const texture = target[slot] as THREE.Texture | null | undefined;\n if (!texture || !(texture instanceof THREE.Texture)) {\n continue;\n }\n\n texture.generateMipmaps = enabled;\n\n const sharp = texture.magFilter === THREE.NearestFilter;\n texture.minFilter = enabled\n ? sharp\n ? THREE.NearestMipmapNearestFilter\n : THREE.LinearMipmapLinearFilter\n : sharp\n ? THREE.NearestFilter\n : THREE.LinearFilter;\n\n texture.needsUpdate = true;\n }\n\n material.needsUpdate = true;\n}\n\nfunction assignMaterialTexture(\n material: THREE.Material,\n rawKey: string,\n url: string,\n textureCache: Map<string, THREE.Texture>,\n): void {\n const target = material as unknown as Record<string, unknown>;\n const key = resolveMaterialPropertyKey(rawKey);\n\n let texture = textureCache.get(url);\n if (!texture) {\n texture = new THREE.TextureLoader().load(url);\n textureCache.set(url, texture);\n }\n\n target[key] = texture;\n}\n\nfunction clearMaterialTexture(material: THREE.Material, rawKey: string): void {\n const target = material as unknown as Record<string, unknown>;\n const key = resolveMaterialPropertyKey(rawKey);\n target[key] = null;\n}\n\nfunction applyMaterialState(\n material: THREE.Material,\n value: MaterialValueState,\n textureCache: Map<string, THREE.Texture>,\n): void {\n const target = material as unknown as Record<string, unknown>;\n\n if (\n target.color &&\n typeof (target.color as { set?: (nextValue: string) => void }).set ===\n \"function\"\n ) {\n (target.color as { set: (nextValue: string) => void }).set(value.color);\n }\n\n if (typeof target.roughness === \"number\") {\n target.roughness = value.roughness;\n }\n\n if (typeof target.metalness === \"number\") {\n target.metalness = value.metalness;\n }\n\n if (\n target.normalScale &&\n typeof (target.normalScale as { set?: (x: number, y: number) => void })\n .set === \"function\"\n ) {\n (target.normalScale as { set: (x: number, y: number) => void }).set(\n value.normalScale,\n value.normalScale,\n );\n }\n\n target.opacity = value.opacity;\n\n if (\n target.emissive &&\n typeof (target.emissive as { set?: (nextValue: string) => void }).set ===\n \"function\"\n ) {\n (target.emissive as { set: (nextValue: string) => void }).set(value.emissive);\n }\n\n if (typeof target.emissiveIntensity === \"number\") {\n target.emissiveIntensity = value.emissiveIntensity;\n }\n\n target.side = value.side;\n target.blending = value.blending;\n target.depthTest = value.depthTest;\n target.depthWrite = value.depthWrite;\n target.wireframe = value.wireframe;\n target.transparent = value.transparent;\n\n const textureEntries: Array<[string, string | undefined]> = [\n [\"textureMap\", value.textureMap],\n [\"alphaTextureMap\", value.alphaTextureMap],\n [\"normalMap\", value.normalMap],\n [\"roughnessMap\", value.roughnessMap],\n [\"metalnessMap\", value.metalnessMap],\n [\"aoMap\", value.aoMap],\n [\"emissiveMap\", value.emissiveMap],\n [\"bumpMap\", value.bumpMap],\n [\"displacementMap\", value.displacementMap],\n [\"lightMap\", value.lightMap],\n [\"envMap\", value.envMap],\n ];\n\n for (const [key, url] of textureEntries) {\n if (typeof url === \"string\" && url.length > 0) {\n assignMaterialTexture(material, key, url, textureCache);\n } else {\n clearMaterialTexture(material, key);\n }\n }\n\n applyTextureFiltering(material, value.textureFiltering);\n setTextureMipmaps(material, value.useMipmaps);\n material.needsUpdate = true;\n}\n\nexport class MaterialSyncSystem implements EcsSystem {\n private readonly signatures = new Map<number, string>();\n private readonly textureCache = new Map<string, THREE.Texture>();\n\n update(world: World): void {\n const entityIds = world.query(MaterialComponent);\n\n const alive = new Set(entityIds);\n for (const trackedId of this.signatures.keys()) {\n if (!alive.has(trackedId)) {\n this.signatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const materialComponent = world.getComponent(\n entityId,\n MaterialComponent,\n ) as MaterialWithValues | undefined;\n if (!materialComponent) {\n continue;\n }\n\n const signature = JSON.stringify(materialComponent.values);\n if (this.signatures.get(entityId) === signature) {\n continue;\n }\n\n const object = world.getComponent(entityId, Object3DRef)?.object;\n const objectMaterials = object ? extractObjectMaterials(object) : [];\n for (let index = 0; index < materialComponent.values.length; index += 1) {\n const value = materialComponent.values[index];\n if (!value) {\n continue;\n }\n\n const previousMaterial = materialComponent.materials[index];\n if (!previousMaterial) {\n continue;\n }\n\n // Undo/redo can restore component material references that differ from\n // what meshes currently hold. Rebind by slot index so subsequent state\n // writes always target the rendered material instance.\n if (object) {\n const currentObjectMaterial = objectMaterials[index];\n if (\n currentObjectMaterial &&\n currentObjectMaterial !== previousMaterial\n ) {\n replaceMaterialAcrossObject(\n object,\n currentObjectMaterial,\n previousMaterial,\n );\n objectMaterials[index] = previousMaterial;\n }\n }\n\n const nextType = createMaterialByType(value.type).type;\n let targetMaterial = previousMaterial;\n\n if (previousMaterial.type !== nextType) {\n const replacement = createMaterialByType(value.type);\n if (object) {\n replaceMaterialAcrossObject(object, previousMaterial, replacement);\n objectMaterials[index] = replacement;\n }\n materialComponent.materials[index] = replacement;\n targetMaterial = replacement;\n if (index === 0) {\n materialComponent.material = replacement;\n }\n previousMaterial.dispose();\n }\n\n applyMaterialState(targetMaterial, value, this.textureCache);\n }\n\n this.signatures.set(entityId, JSON.stringify(materialComponent.values));\n }\n }\n\n dispose(): void {\n for (const texture of this.textureCache.values()) {\n texture.dispose();\n }\n\n this.textureCache.clear();\n this.signatures.clear();\n }\n}\n","import * as THREE from \"three\";\n\nimport {\n type CubeMeshParameters,\n DEFAULT_MESH_GEOMETRY_PARAMETERS,\n type MeshGeometryParameters,\n MeshGeometryComponent,\n Object3DRef,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"../components\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nconst MIN_DIMENSION = 0.01;\nconst MIN_RADIUS = 0.001;\n\nfunction sanitizeDimension(value: number): number {\n return Number.isFinite(value)\n ? Math.max(MIN_DIMENSION, value)\n : MIN_DIMENSION;\n}\n\nfunction sanitizeRadius(value: number): number {\n return Number.isFinite(value) ? Math.max(MIN_RADIUS, value) : MIN_RADIUS;\n}\n\nfunction sanitizeMeshParameters(\n component: MeshGeometryComponent,\n): MeshGeometryParameters {\n switch (component.kind) {\n case \"cube\": {\n const params = component.parameters as Partial<CubeMeshParameters>;\n const fallback = DEFAULT_MESH_GEOMETRY_PARAMETERS.cube;\n return {\n width: sanitizeDimension(params.width ?? fallback.width),\n height: sanitizeDimension(params.height ?? fallback.height),\n depth: sanitizeDimension(params.depth ?? fallback.depth),\n };\n }\n case \"plane\": {\n const params = component.parameters as Partial<PlaneMeshParameters>;\n const fallback = DEFAULT_MESH_GEOMETRY_PARAMETERS.plane;\n return {\n width: sanitizeDimension(params.width ?? fallback.width),\n height: sanitizeDimension(params.height ?? fallback.height),\n };\n }\n case \"sphere\": {\n const params = component.parameters as Partial<RadiusMeshParameters>;\n const fallback = DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere;\n return {\n radius: sanitizeRadius(params.radius ?? fallback.radius),\n };\n }\n case \"cylinder\":\n case \"capsule\": {\n const params = component.parameters as Partial<RadiusHeightMeshParameters>;\n const fallback =\n component.kind === \"cylinder\"\n ? DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder\n : DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule;\n return {\n radius: sanitizeRadius(params.radius ?? fallback.radius),\n height: sanitizeDimension(params.height ?? fallback.height),\n };\n }\n case \"model\":\n return {};\n }\n}\n\nfunction resolvePrimaryMesh(object: THREE.Object3D | null): THREE.Mesh | null {\n if (!object) {\n return null;\n }\n\n if (object instanceof THREE.Mesh) {\n return object;\n }\n\n let found: THREE.Mesh | null = null;\n object.traverse((child: THREE.Object3D) => {\n if (!found && child instanceof THREE.Mesh) {\n found = child;\n }\n });\n\n return found;\n}\n\nfunction applyGeometry(component: MeshGeometryComponent): void {\n if (component.kind === \"model\") {\n return;\n }\n\n const mesh = resolvePrimaryMesh(component.object);\n if (!mesh) {\n return;\n }\n\n const sanitized = sanitizeMeshParameters(component);\n component.parameters = sanitized;\n\n let nextGeometry: THREE.BufferGeometry;\n\n switch (component.kind) {\n case \"cube\": {\n const params = sanitized as CubeMeshParameters;\n nextGeometry = new THREE.BoxGeometry(params.width, params.height, params.depth);\n break;\n }\n case \"plane\": {\n const params = sanitized as PlaneMeshParameters;\n nextGeometry = new THREE.PlaneGeometry(params.width, params.height);\n break;\n }\n case \"sphere\": {\n const params = sanitized as RadiusMeshParameters;\n nextGeometry = new THREE.SphereGeometry(params.radius, 24, 24);\n break;\n }\n case \"cylinder\": {\n const params = sanitized as RadiusHeightMeshParameters;\n nextGeometry = new THREE.CylinderGeometry(\n params.radius,\n params.radius,\n params.height,\n 20,\n );\n break;\n }\n case \"capsule\": {\n const params = sanitized as RadiusHeightMeshParameters;\n nextGeometry = new THREE.CapsuleGeometry(params.radius, params.height, 4, 8);\n break;\n }\n default:\n return;\n }\n\n const previousGeometry = mesh.geometry;\n mesh.geometry = nextGeometry;\n previousGeometry.dispose();\n}\n\nfunction applyShadowFlags(component: MeshGeometryComponent): void {\n if (!component.object) {\n return;\n }\n\n component.object.traverse((child: THREE.Object3D) => {\n if (child instanceof THREE.Mesh) {\n child.castShadow = component.castShadow;\n child.receiveShadow = component.receiveShadow;\n }\n });\n}\n\nexport class MeshGeometrySystem implements EcsSystem {\n private readonly geometrySignatures = new Map<number, string>();\n private readonly shadowSignatures = new Map<number, string>();\n\n update(world: World): void {\n const entityIds = world.query(MeshGeometryComponent);\n\n const alive = new Set<number>(entityIds);\n for (const trackedId of this.geometrySignatures.keys()) {\n if (!alive.has(trackedId)) {\n this.geometrySignatures.delete(trackedId);\n this.shadowSignatures.delete(trackedId);\n }\n }\n\n for (const entityId of entityIds) {\n const meshGeometry = world.getComponent(\n entityId,\n MeshGeometryComponent,\n ) as MeshGeometryComponent | undefined;\n if (!meshGeometry) {\n continue;\n }\n\n if (!meshGeometry.object) {\n const objectRef = world.getComponent(entityId, Object3DRef);\n if (objectRef?.object) {\n meshGeometry.object = objectRef.object;\n }\n }\n\n const geometrySignature = `${meshGeometry.kind}:${JSON.stringify(meshGeometry.parameters)}:${meshGeometry.object?.uuid ?? \"\"}`;\n const shadowSignature = `${meshGeometry.castShadow}:${meshGeometry.receiveShadow}:${meshGeometry.object?.uuid ?? \"\"}`;\n\n if (this.geometrySignatures.get(entityId) !== geometrySignature) {\n applyGeometry(meshGeometry);\n this.geometrySignatures.set(\n entityId,\n `${meshGeometry.kind}:${JSON.stringify(meshGeometry.parameters)}:${meshGeometry.object?.uuid ?? \"\"}`,\n );\n }\n\n if (this.shadowSignatures.get(entityId) !== shadowSignature) {\n applyShadowFlags(meshGeometry);\n this.shadowSignatures.set(entityId, shadowSignature);\n }\n }\n }\n}\n","\nimport * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader.js\";\nimport { GLTFLoader, type GLTF } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { resolveDracoDecoderPath } from \"./dracoDecoderPath\";\n\nexport const loadGLTF = (path: string): Promise<GLTF> => {\n return new Promise((resolve, reject) => {\n const loader = new GLTFLoader();\n try {\n // Configure DRACOLoader so GLTFLoader can decode DRACO-compressed meshes.\n const dracoLoader = new DRACOLoader();\n // Resolved per call so a setDracoDecoderPath() override made after\n // module load still takes effect.\n dracoLoader.setDecoderPath(resolveDracoDecoderPath());\n loader.setDRACOLoader(dracoLoader);\n } catch (error) {\n // If DRACOLoader isn't available for any reason, proceed without it.\n // GLTFLoader will throw if the file actually contains DRACO-compressed data.\n console.debug(\"DRACOLoader setup failed or unavailable\", error);\n }\n\n loader.load(\n path,\n (gltf: GLTF) => {\n resolve(gltf);\n },\n undefined,\n (error: unknown) => {\n console.debug(\"GLTFLoader failed to load\", error);\n reject(error);\n },\n );\n });\n};\n\nexport const loadAudio = (path: string): Promise<AudioBuffer> => {\n return new Promise((resolve, reject) => {\n const loader = new THREE.AudioLoader();\n loader.load(\n path,\n (buffer: AudioBuffer) => {\n resolve(buffer);\n },\n undefined,\n (error: unknown) => {\n reject(error);\n },\n );\n });\n};\n\nexport const loadVideo = (path: string): Promise<HTMLVideoElement> => {\n return new Promise((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.addEventListener(\"loadedmetadata\", () => {\n video.setAttribute(\"playsinline\", \"\");\n resolve(video);\n });\n video.addEventListener(\"error\", () => {\n reject(new Error(`Failed to load video: ${path}`));\n });\n video.src = path;\n });\n};\n\nexport const loadTexture = (path: string): Promise<THREE.Texture> => {\n return new Promise((resolve, reject) => {\n const loader = new THREE.TextureLoader();\n loader.load(\n path,\n (texture: THREE.Texture) => {\n resolve(texture);\n },\n undefined,\n (error: unknown) => {\n reject(error);\n },\n );\n });\n};\n\nexport const loadTextures = (paths: string[]): Promise<THREE.Texture[]> => {\n const loader = new THREE.TextureLoader();\n const promises: Array<Promise<THREE.Texture>> = [];\n for (let i = 0; i < paths.length; i++) {\n promises.push(\n new Promise((resolve, reject) => {\n loader.load(\n paths[i],\n (texture: THREE.Texture) => {\n resolve(texture);\n },\n undefined,\n (error: unknown) => {\n reject(error);\n },\n );\n }),\n );\n }\n return Promise.all(promises);\n};\n","import * as THREE from \"three\";\n\nimport { Object3DRef, TransformComponent } from \"../components\";\nimport { InstancedMeshComponent } from \"../components/InstancedMesh\";\nimport {\n type CubeMeshParameters,\n type PlaneMeshParameters,\n type RadiusHeightMeshParameters,\n type RadiusMeshParameters,\n} from \"../components/MeshGeometry\";\nimport { loadGLTF } from \"../utils/loader\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\n// ---------------------------------------------------------------------------\n// Geometry helpers (primitive kinds)\n// ---------------------------------------------------------------------------\n\nfunction buildGeometry(component: InstancedMeshComponent): THREE.BufferGeometry {\n const p = component.getSanitizedParameters();\n\n switch (component.meshKind) {\n case \"cube\": {\n const params = p as CubeMeshParameters;\n return new THREE.BoxGeometry(params.width, params.height, params.depth);\n }\n case \"plane\": {\n const params = p as PlaneMeshParameters;\n return new THREE.PlaneGeometry(params.width, params.height);\n }\n case \"sphere\": {\n const params = p as RadiusMeshParameters;\n return new THREE.SphereGeometry(params.radius, 24, 24);\n }\n case \"cylinder\": {\n const params = p as RadiusHeightMeshParameters;\n return new THREE.CylinderGeometry(params.radius, params.radius, params.height, 20);\n }\n case \"capsule\": {\n const params = p as RadiusHeightMeshParameters;\n return new THREE.CapsuleGeometry(params.radius, params.height, 4, 8);\n }\n default:\n return new THREE.BoxGeometry(1, 1, 1);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Matrix composition helper\n// ---------------------------------------------------------------------------\n\nconst _position = new THREE.Vector3();\nconst _quaternion = new THREE.Quaternion();\nconst _euler = new THREE.Euler();\nconst _scale = new THREE.Vector3();\nconst _matrix = new THREE.Matrix4();\nconst _modelMatrix = new THREE.Matrix4();\n\nfunction instanceTransformFromComponent(\n transform: TransformComponent,\n out: THREE.Matrix4,\n): void {\n _position.set(transform.position.x, transform.position.y, transform.position.z);\n _euler.set(transform.rotation.x, transform.rotation.y, transform.rotation.z, \"XYZ\");\n _quaternion.setFromEuler(_euler);\n _scale.set(transform.scale.x, transform.scale.y, transform.scale.z);\n out.compose(_position, _quaternion, _scale);\n}\n\n// ---------------------------------------------------------------------------\n// Dispose helpers\n// ---------------------------------------------------------------------------\n\nfunction disposePrimitiveInstancedMesh(mesh: THREE.InstancedMesh): void {\n mesh.geometry.dispose();\n if (Array.isArray(mesh.material)) {\n for (const m of mesh.material) {\n m.dispose();\n }\n } else {\n (mesh.material as THREE.Material).dispose();\n }\n}\n\nfunction disposeModelGroup(group: THREE.Object3D): void {\n group.traverse((child) => {\n const im = child as THREE.InstancedMesh;\n if (im.isInstancedMesh) {\n im.geometry.dispose();\n if (Array.isArray(im.material)) {\n for (const m of im.material) {\n m.dispose();\n }\n } else {\n (im.material as THREE.Material).dispose();\n }\n }\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-mesh entry for model kind\n// ---------------------------------------------------------------------------\n\ntype ModelMeshEntry = {\n localMatrix: THREE.Matrix4;\n instancedMesh: THREE.InstancedMesh;\n};\n\n// ---------------------------------------------------------------------------\n// InstancedMeshSystem\n// ---------------------------------------------------------------------------\n\n/**\n * Maintains the runtime geometry for entities with an {@link InstancedMeshComponent}.\n *\n * - **Primitive kinds** (`cube`, `sphere`, `plane`, `cylinder`, `capsule`): creates a single\n * `THREE.InstancedMesh` on the anchor and writes per-instance matrices every frame.\n * - **Model kind** (`model`): asynchronously loads the GLTF/GLB at `comp.modelPath`, traverses\n * the scene to collect all `THREE.Mesh` nodes, and creates one `THREE.InstancedMesh` per mesh\n * (preserving the mesh's local transform and original materials). All sub-meshes are grouped\n * under a `THREE.Group` stored in `comp.instancedMesh`. Per-instance matrices are composed as\n * `instanceTransform × meshLocalMatrix` every frame.\n *\n * Geometry is rebuilt whenever the signature (`meshKind:parameters:instanceCount` for primitives,\n * `model:path:instanceCount` for model kind) changes.\n */\nexport class InstancedMeshSystem implements EcsSystem {\n /** Signature tracking for geometry + instance count changes. */\n private readonly geometrySignatures = new Map<number, string>();\n /** Signature being loaded per entity. Maps entityId → geometrySignature in-flight.\n * Prevents re-dispatching a load every frame while comp.instancedMesh is still null. */\n private readonly loadingSignatures = new Map<number, string>();\n /** Per-mesh data for model kind, populated after GLTF load. */\n private readonly modelMeshEntries = new Map<number, ModelMeshEntry[]>();\n /**\n * System-internal ref to the Three.js mesh/group most recently placed on\n * the anchor by this system. Used for cleanup on rebuild instead of\n * `comp.instancedMesh`, which can be stale (pointing to a disposed mesh)\n * after an undo/redo restores a history snapshot captured at an earlier\n * geometry configuration. Relying on the stale comp ref would skip removal\n * of the current live mesh → ghost mesh in the scene.\n */\n private readonly trackedMeshes = new Map<number, THREE.Object3D>();\n\n update(world: World): void {\n const entityIds = world.query(InstancedMeshComponent);\n\n // Prune stale tracking for destroyed entities.\n const alive = new Set<number>(entityIds);\n for (const trackedId of this.geometrySignatures.keys()) {\n if (!alive.has(trackedId)) this.geometrySignatures.delete(trackedId);\n }\n for (const trackedId of this.loadingSignatures.keys()) {\n if (!alive.has(trackedId)) this.loadingSignatures.delete(trackedId);\n }\n for (const trackedId of this.modelMeshEntries.keys()) {\n if (!alive.has(trackedId)) this.modelMeshEntries.delete(trackedId);\n }\n for (const trackedId of this.trackedMeshes.keys()) {\n if (!alive.has(trackedId)) this.trackedMeshes.delete(trackedId);\n }\n\n for (const entityId of entityIds) {\n const comp = world.getComponent(\n entityId,\n InstancedMeshComponent,\n ) as InstancedMeshComponent | undefined;\n if (!comp) continue;\n\n const objectRef = world.getComponent(entityId, Object3DRef);\n const anchor: THREE.Object3D | null = objectRef?.object ?? null;\n if (!anchor) continue;\n\n const instanceCount = comp.instanceEntityIds.length;\n const geometrySignature =\n comp.meshKind === \"model\"\n ? `model:${comp.modelPath}:${instanceCount}`\n : `${comp.meshKind}:${JSON.stringify(comp.meshParameters)}:${instanceCount}`;\n\n // Re-sync comp.instancedMesh from system tracking when it has been\n // nulled out by an undo/redo snapshot restore (cloneHistoryValue sets it\n // to null to prevent stale Three.js refs in history). Without this the\n // every-frame matrix-update path below would crash on a null ref.\n if (comp.instancedMesh === null) {\n const tracked = this.trackedMeshes.get(entityId);\n if (tracked) {\n comp.instancedMesh = tracked;\n }\n }\n\n // While a load for the current signature is in-flight, instancedMesh stays null\n // but we must NOT treat that as \"needsRebuild\" — doing so would clear loadingSignatures\n // and re-dispatch the load every frame, causing duplicate groups in the scene.\n // Use trackedMeshes (system-internal) instead of comp.instancedMesh: after an\n // undo/redo the component ref is null (cleared by cloneHistoryValue) even when\n // the mesh hasn't changed, so relying on comp.instancedMesh would force a needless\n // rebuild (and disposal/creation cycle) on every transform undo.\n const pendingLoadSignature = this.loadingSignatures.get(entityId);\n const needsRebuild =\n (!this.trackedMeshes.has(entityId) || this.geometrySignatures.get(entityId) !== geometrySignature) &&\n pendingLoadSignature !== geometrySignature;\n\n if (needsRebuild) {\n // Dispose previous container using the system-internal tracked ref.\n // comp.instancedMesh may point to a stale/disposed mesh after an\n // undo/redo restores a snapshot — using it for cleanup would leave the\n // current live mesh in the anchor, producing a ghost.\n const trackedMesh = this.trackedMeshes.get(entityId);\n if (trackedMesh) {\n anchor.remove(trackedMesh);\n if ((trackedMesh as THREE.InstancedMesh).isInstancedMesh) {\n disposePrimitiveInstancedMesh(trackedMesh as THREE.InstancedMesh);\n } else {\n disposeModelGroup(trackedMesh);\n }\n this.trackedMeshes.delete(entityId);\n }\n comp.instancedMesh = null;\n\n // Cancel an in-flight load only when the target signature changed\n // (e.g. user changed path or instance count). Preserve the slot when\n // rebuilding for any other reason to avoid re-dispatching.\n if (pendingLoadSignature !== undefined && pendingLoadSignature !== geometrySignature) {\n this.loadingSignatures.delete(entityId);\n this.modelMeshEntries.delete(entityId);\n }\n\n // No instances — record the empty signature so we don't re-enter every frame,\n // but skip geometry creation (existing mesh already disposed above).\n if (instanceCount === 0) {\n this.geometrySignatures.set(entityId, geometrySignature);\n continue;\n }\n\n if (comp.meshKind === \"model\") {\n // Async GLTF load — skip this entity until the load completes.\n if (comp.modelPath && !this.loadingSignatures.has(entityId)) {\n this.loadingSignatures.set(entityId, geometrySignature);\n const targetSignature = geometrySignature;\n const targetEntityId = entityId;\n\n loadGLTF(comp.modelPath)\n .then((gltf) => {\n // Guard: entity still alive.\n if (!world.hasEntity(targetEntityId)) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n const currentComp = world.getComponent(\n targetEntityId,\n InstancedMeshComponent,\n ) as InstancedMeshComponent | undefined;\n if (!currentComp) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n // Guard: signature unchanged (no path/count change during load).\n const currentSig = `model:${currentComp.modelPath}:${currentComp.instanceEntityIds.length}`;\n if (currentSig !== targetSignature) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n const currentRef = world.getComponent(targetEntityId, Object3DRef);\n const currentAnchor: THREE.Object3D | null = currentRef?.object ?? null;\n if (!currentAnchor) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n // Safety: remove any stale mesh set by a concurrent load that\n // raced to completion before this one.\n if (currentComp.instancedMesh) {\n currentAnchor.remove(currentComp.instancedMesh);\n disposeModelGroup(currentComp.instancedMesh);\n currentComp.instancedMesh = null;\n }\n\n const count = Math.max(1, currentComp.instanceEntityIds.length);\n const entries: ModelMeshEntry[] = [];\n\n // Ensure world matrices are up to date before extracting local transforms.\n gltf.scene.updateWorldMatrix(true, true);\n\n gltf.scene.traverse((child) => {\n const meshChild = child as THREE.Mesh;\n if (!meshChild.isMesh) return;\n\n const geometry = meshChild.geometry.clone();\n const sourceMaterial = Array.isArray(meshChild.material)\n ? (meshChild.material as THREE.Material[]).map((m) => m.clone())\n : (meshChild.material as THREE.Material).clone();\n\n meshChild.updateWorldMatrix(true, false);\n const localMatrix = meshChild.matrixWorld.clone();\n\n const instancedMesh = new THREE.InstancedMesh(\n geometry,\n Array.isArray(sourceMaterial)\n ? (sourceMaterial as THREE.Material[])\n : (sourceMaterial as THREE.Material),\n count,\n );\n instancedMesh.castShadow = currentComp.castShadow;\n instancedMesh.receiveShadow = currentComp.receiveShadow;\n\n for (let i = 0; i < count; i++) {\n const instanceEntityId = currentComp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n _modelMatrix.multiplyMatrices(_matrix, localMatrix);\n instancedMesh.setMatrixAt(i, _modelMatrix);\n }\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n entries.push({ localMatrix, instancedMesh });\n });\n\n if (entries.length === 0) {\n this.loadingSignatures.delete(targetEntityId);\n return;\n }\n\n const group = new THREE.Group();\n for (const entry of entries) {\n group.add(entry.instancedMesh);\n }\n\n currentAnchor.add(group);\n currentComp.instancedMesh = group;\n this.modelMeshEntries.set(targetEntityId, entries);\n this.geometrySignatures.set(targetEntityId, targetSignature);\n this.trackedMeshes.set(targetEntityId, group);\n this.loadingSignatures.delete(targetEntityId);\n })\n .catch(() => {\n this.loadingSignatures.delete(targetEntityId);\n });\n }\n // Skip synchronous build for model kind — wait for async load.\n continue;\n }\n\n // --- Primitive kinds: synchronous build ---\n const count = instanceCount;\n const geometry = buildGeometry(comp);\n const material = new THREE.MeshStandardMaterial({ color: \"#ffffff\" });\n const instancedMesh = new THREE.InstancedMesh(geometry, material, count);\n instancedMesh.castShadow = comp.castShadow;\n instancedMesh.receiveShadow = comp.receiveShadow;\n\n for (let i = 0; i < count; i++) {\n const instanceEntityId = comp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n instancedMesh.setMatrixAt(i, _matrix);\n }\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n anchor.add(instancedMesh);\n comp.instancedMesh = instancedMesh;\n this.trackedMeshes.set(entityId, instancedMesh);\n this.geometrySignatures.set(entityId, geometrySignature);\n } else {\n // --- Every-frame matrix update ---\n if (comp.meshKind === \"model\") {\n const entries = this.modelMeshEntries.get(entityId);\n if (entries) {\n const count = comp.instanceEntityIds.length;\n for (const entry of entries) {\n for (let i = 0; i < count; i++) {\n const instanceEntityId = comp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n _modelMatrix.multiplyMatrices(_matrix, entry.localMatrix);\n entry.instancedMesh.setMatrixAt(i, _modelMatrix);\n }\n entry.instancedMesh.instanceMatrix.needsUpdate = true;\n entry.instancedMesh.castShadow = comp.castShadow;\n entry.instancedMesh.receiveShadow = comp.receiveShadow;\n }\n }\n } else {\n const im = comp.instancedMesh as THREE.InstancedMesh;\n const count = comp.instanceEntityIds.length;\n for (let i = 0; i < count; i++) {\n const instanceEntityId = comp.instanceEntityIds[i];\n const instTransform =\n instanceEntityId !== undefined\n ? (world.getComponent(instanceEntityId, TransformComponent) ?? null)\n : null;\n if (instTransform) {\n instanceTransformFromComponent(instTransform, _matrix);\n } else {\n _matrix.identity();\n }\n im.setMatrixAt(i, _matrix);\n }\n im.instanceMatrix.needsUpdate = true;\n im.castShadow = comp.castShadow;\n im.receiveShadow = comp.receiveShadow;\n }\n }\n }\n }\n}\n","import type * as THREE from \"three\";\n\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\nexport class RenderSystem implements EcsSystem {\n private readonly renderer: THREE.WebGLRenderer;\n private readonly scene: THREE.Scene;\n private readonly camera: THREE.PerspectiveCamera;\n private readonly afterRender?: () => void;\n\n constructor(\n renderer: THREE.WebGLRenderer,\n scene: THREE.Scene,\n camera: THREE.PerspectiveCamera,\n afterRender?: () => void,\n ) {\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n this.afterRender = afterRender;\n }\n\n update(_world: World): void {\n if (this.scene.userData.ecsPostprocessingComposerActive === true) {\n const composer = this.scene.userData.ecsPostprocessingComposer as\n | {\n setSize: (width: number, height: number) => void;\n render: () => void;\n }\n | undefined;\n\n if (composer) {\n const width = Math.max(1, this.renderer.domElement.clientWidth);\n const height = Math.max(1, this.renderer.domElement.clientHeight);\n composer.setSize(width, height);\n composer.render();\n } else {\n this.renderer.render(this.scene, this.camera);\n }\n\n this.afterRender?.();\n return;\n }\n\n this.renderer.render(this.scene, this.camera);\n this.afterRender?.();\n }\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 * 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 scripts**: By default, `Behaviour` subclasses do not run inside the\n * editor. Set `executeInEditor: true` on the script entry in the inspector to\n * enable the full lifecycle (`init` → `onUpdate` → `dispose`) while the editor\n * is open. This gives direct access to the Three.js scene, camera, and renderer\n * via {@link World.getScene}, {@link World.getCamera}, and\n * {@link World.getRenderer} — useful for custom shaders, procedural geometry,\n * grass, and any Three.js feature the editor's object palette does not expose.\n * Avoid mutating ECS component state every frame in editor mode, as it creates\n * undo history entries on every tick.\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 */\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 * 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.\n *\n * @remarks\n * Also called in editor mode when `executeInEditor` is `true` on the script\n * entry.\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.\n *\n * @remarks\n * Also called every frame in editor mode when `executeInEditor` is `true`.\n * Access the Three.js scene with `this.world.getScene()` for editor-only\n * rendering work such as custom shaders or procedural geometry.\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","import * as THREE from \"three\";\nimport { Behaviour } from \"../Behaviour\";\nimport { Component } from \"../Component\";\nimport { ScriptComponent } from \"../components\";\nimport type { ScriptEntry } from \"../components/ScriptComponent\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\ntype BehaviourCtor = new (\n world: World,\n entityId: number,\n component: Component | Record<string, unknown>,\n) => Behaviour;\n\ntype ActiveScript = {\n entityId: number;\n scriptComponent: ScriptComponent;\n entryIndex: number;\n scriptEntry: ScriptEntry;\n};\n\ntype ScriptInstanceRecord = {\n entityId: number;\n scriptUrl: string;\n className: string;\n entryIndex: number;\n behaviour: Behaviour;\n rawData: Record<string, unknown>;\n};\n\nfunction toErrorMessage(error: unknown): string {\n const sanitize = (value: string): string =>\n value\n .replace(/localasset:\\/\\/[^/]+\\//g, \"localasset://\")\n .replace(/\\/Users\\/[^\\s)]+/g, \"[local path]\");\n\n if (error instanceof Error && error.message) {\n return sanitize(error.message);\n }\n\n if (typeof error === \"string\" && error) {\n return sanitize(error);\n }\n\n return \"Unknown script error.\";\n}\n\nfunction buildInstanceKey(entityId: number, scriptUrl: string, className: string): string {\n return `${entityId}:${scriptUrl}:${className}`;\n}\n\nfunction resolveBehaviourCtor(\n moduleValue: Record<string, unknown>,\n className: string,\n): BehaviourCtor | 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 Behaviour)) {\n // Fallback: esbuild may bundle a second copy of @relu-interactives/spatial-ecs into\n // the script blob, breaking the instanceof identity check. The static __reluBehaviourClass\n // marker is inherited through the class prototype chain, so it survives the identity split.\n const isBehaviourSubclass =\n !!(candidate as { __reluBehaviourClass?: unknown }).__reluBehaviourClass;\n if (!isBehaviourSubclass) {\n return null;\n }\n }\n\n return candidate as BehaviourCtor;\n}\n\nfunction 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(defaultValue: unknown, currentValue: unknown): 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\n if (typeof defaultValue === \"string\") {\n return typeof currentValue === \"string\" ? currentValue : defaultValue;\n }\n\n if (typeof defaultValue === \"boolean\") {\n return typeof currentValue === \"boolean\" ? currentValue : defaultValue;\n }\n\n if (defaultValue === null) {\n return currentValue !== undefined ? currentValue : null;\n }\n\n return typeof currentValue === \"undefined\" ? defaultValue : currentValue;\n}\n\nfunction mergeDataByCurrentDefaults(\n defaults: Record<string, unknown>,\n current: Record<string, unknown>,\n): Record<string, unknown> {\n const next: Record<string, unknown> = {};\n\n for (const key of Object.keys(defaults)) {\n next[key] = mergeValueByDefaultShape(defaults[key], current[key]);\n }\n\n return next;\n}\n\nfunction isRawEntityInput(value: unknown): 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(components: Component[], componentKind: string): 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\nfunction resolveInputData(world: World, rawData: Record<string, unknown>): 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 = 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\nfunction serializeDataForStorage(\n rawData: Record<string, unknown>,\n behaviourData: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...behaviourData };\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\nfunction normalizeEntry(\n value: Partial<ScriptEntry> | undefined,\n fallbackEntityId: number,\n): ScriptEntry {\n return {\n entityId: typeof value?.entityId === \"number\" ? value.entityId : fallbackEntityId,\n className: typeof value?.className === \"string\" ? value.className : \"\",\n scriptUrl: typeof value?.scriptUrl === \"string\" ? value.scriptUrl : \"\",\n enabled: typeof value?.enabled === \"boolean\" ? value.enabled : true,\n executeInEditor: typeof value?.executeInEditor === \"boolean\" ? value.executeInEditor : false,\n data: normalizeScriptData(value?.data),\n runtimeState:\n value?.runtimeState === \"idle\" ||\n value?.runtimeState === \"loading\" ||\n value?.runtimeState === \"ready\" ||\n value?.runtimeState === \"error\"\n ? value.runtimeState\n : undefined,\n runtimeMessage: typeof value?.runtimeMessage === \"string\" ? value.runtimeMessage : undefined,\n };\n}\n\nfunction readScriptEntries(component: ScriptComponent, entityId: number): ScriptEntry[] {\n if (Array.isArray(component.entries) && component.entries.length > 0) {\n return component.entries\n .map((entry) => normalizeEntry(entry as Partial<ScriptEntry>, entityId))\n .filter((entry) => entry.className || entry.scriptUrl);\n }\n\n return [];\n}\n\nfunction writeScriptEntries(component: ScriptComponent, entries: ScriptEntry[]): void {\n const normalized = entries.map((entry) => normalizeEntry(entry, entry.entityId));\n component.entries = normalized;\n\n const active = normalized[0];\n if (!active) {\n component.scriptInstance = null;\n }\n}\n\ntype ModuleLoader = (scriptUrl: string) => Promise<Record<string, unknown>>;\n\nasync function defaultModuleLoader(scriptUrl: string): Promise<Record<string, unknown>> {\n return (await import(/* webpackIgnore: true */ scriptUrl)) as Record<string, unknown>;\n}\n\n/**\n * Optional context that enables raycast-based onSelect / onDeselect dispatch.\n * When provided, pointer/touch taps on the canvas fire a raycast against the\n * scene. If the hit object (or any ancestor) carries userData.entityId, every\n * Behaviour instance for that entity receives onSelect(); the previously\n * selected entity's instances receive onDeselect().\n */\nexport type SelectionContext = {\n camera: THREE.Camera;\n scene: THREE.Scene;\n domElement: HTMLElement;\n};\n\nexport class ScriptBehaviourSystem implements EcsSystem {\n private instances = new Map<string, ScriptInstanceRecord>();\n private loading = new Map<string, Promise<void>>();\n private readonly moduleLoader: ModuleLoader;\n\n // Raycast-based onSelect / onDeselect support\n private readonly selectionCtx: SelectionContext | null;\n private readonly raycaster: THREE.Raycaster;\n private readonly ndcPointer: THREE.Vector2;\n private selectedEntityId: number | null = null;\n // undefined = nothing queued; null = queued \"deselect all\"; number = queued entity\n private pendingEntityId: number | null | undefined = undefined;\n private pointerDownPos: { x: number; y: number } | null = null;\n private static readonly CLICK_THRESHOLD = 6;\n\n constructor(moduleLoader?: ModuleLoader, selectionContext?: SelectionContext) {\n this.moduleLoader = moduleLoader ?? defaultModuleLoader;\n this.selectionCtx = selectionContext ?? null;\n this.raycaster = new THREE.Raycaster();\n this.ndcPointer = new THREE.Vector2();\n if (this.selectionCtx) {\n this.selectionCtx.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.selectionCtx.domElement.addEventListener(\"pointerup\", this.onPointerUp);\n }\n }\n\n // ── Raycast selection helpers ──────────────────────────────────────────────\n\n /** Walk up the object hierarchy to find the nearest userData.entityId. */\n private resolveEntityId(object: THREE.Object3D): number | null {\n let current: THREE.Object3D | null = object;\n while (current) {\n const id = current.userData?.entityId;\n if (typeof id === \"number\") return id;\n current = current.parent;\n }\n return null;\n }\n\n /** Convert client (screen) coordinates to normalised device coordinates. */\n private toNdc(clientX: number, clientY: number): void {\n if (!this.selectionCtx) return;\n const rect = this.selectionCtx.domElement.getBoundingClientRect();\n this.ndcPointer.x = ((clientX - rect.left) / rect.width) * 2 - 1;\n this.ndcPointer.y = -((clientY - rect.top) / rect.height) * 2 + 1;\n }\n\n /** Fire raycast and queue the result to be dispatched in the next update(). */\n private queueRaycast(clientX: number, clientY: number): void {\n if (!this.selectionCtx) return;\n this.toNdc(clientX, clientY);\n this.raycaster.setFromCamera(this.ndcPointer, this.selectionCtx.camera);\n const hits = this.raycaster.intersectObjects(this.selectionCtx.scene.children, true);\n for (const hit of hits) {\n // Skip editor-only helpers (grid, transform gizmo, etc.)\n if (hit.object.userData?.ecsPreviewHidden) continue;\n const entityId = this.resolveEntityId(hit.object);\n if (entityId !== null) {\n this.pendingEntityId = entityId;\n return;\n }\n }\n // Clicked empty space → queue deselect\n this.pendingEntityId = null;\n }\n\n private onPointerDown = (event: PointerEvent): void => {\n this.pointerDownPos = { x: event.clientX, y: event.clientY };\n };\n\n private onPointerUp = (event: PointerEvent): void => {\n if (!this.pointerDownPos) return;\n const dx = event.clientX - this.pointerDownPos.x;\n const dy = event.clientY - this.pointerDownPos.y;\n this.pointerDownPos = null;\n // Ignore drag gestures — only fire for taps / clicks\n if (Math.sqrt(dx * dx + dy * dy) > ScriptBehaviourSystem.CLICK_THRESHOLD) return;\n this.queueRaycast(event.clientX, event.clientY);\n };\n\n /**\n * Apply a queued selection change.\n * Calls onDeselect() on all behaviours of the previous entity and\n * onSelect() on all behaviours of the newly selected entity.\n */\n private applySelection(nextEntityId: number | null): void {\n if (nextEntityId === this.selectedEntityId) return;\n const prevEntityId = this.selectedEntityId;\n this.selectedEntityId = nextEntityId;\n\n if (prevEntityId !== null) {\n for (const record of this.instances.values()) {\n if (record.entityId === prevEntityId) {\n try {\n record.behaviour.onDeselect();\n } catch {}\n }\n }\n }\n\n if (nextEntityId !== null) {\n for (const record of this.instances.values()) {\n if (record.entityId === nextEntityId) {\n try {\n record.behaviour.onSelect();\n } catch {}\n }\n }\n }\n }\n\n // ── ECS lifecycle ──────────────────────────────────────────────────────────\n\n update(world: World, deltaTime: number): void {\n // Dispatch any queued raycast selection before running behaviour updates\n if (this.pendingEntityId !== undefined) {\n const next = this.pendingEntityId;\n this.pendingEntityId = undefined;\n this.applySelection(next);\n }\n\n const active = new Map<string, ActiveScript>();\n const entityIds = world.query(ScriptComponent);\n\n for (const entityId of entityIds) {\n const scriptComponent = world.getComponent(entityId, ScriptComponent);\n if (!scriptComponent) {\n continue;\n }\n\n const entries = readScriptEntries(scriptComponent, entityId);\n if (entries.length === 0) {\n scriptComponent.scriptInstance = null;\n continue;\n }\n\n const nextEntries = [...entries];\n let hasEnabledScript = false;\n\n for (let entryIndex = 0; entryIndex < nextEntries.length; entryIndex += 1) {\n const entry = nextEntries[entryIndex];\n // In editor mode, only run scripts that have explicitly opted in via executeInEditor.\n const skipInEditor = world.isEditorMode() && !entry.executeInEditor;\n if (!entry.enabled || !entry.scriptUrl || skipInEditor) {\n nextEntries[entryIndex] = {\n ...entry,\n runtimeState: skipInEditor ? \"idle\" : \"idle\",\n runtimeMessage: undefined,\n };\n continue;\n }\n\n hasEnabledScript = true;\n const key = buildInstanceKey(entityId, entry.scriptUrl, entry.className);\n active.set(key, {\n entityId,\n scriptComponent,\n entryIndex,\n scriptEntry: entry,\n });\n }\n\n writeScriptEntries(scriptComponent, nextEntries);\n if (!hasEnabledScript) {\n scriptComponent.scriptInstance = null;\n }\n }\n\n for (const [key, record] of this.instances.entries()) {\n const script = active.get(key);\n if (!script) {\n const liveComponent = world.getComponent(record.entityId, ScriptComponent);\n if (liveComponent) {\n if (record.entryIndex === 0) {\n liveComponent.scriptInstance = null;\n }\n liveComponent.scriptInstances.delete(record.entryIndex);\n }\n\n record.behaviour.dispose?.(world);\n this.instances.delete(key);\n continue;\n }\n\n const entries = readScriptEntries(script.scriptComponent, script.entityId);\n const liveEntry = entries[script.entryIndex];\n if (!liveEntry) {\n record.behaviour.dispose?.(world);\n this.instances.delete(key);\n continue;\n }\n\n // Skip behaviour update for invisible entities. The instance is kept alive\n // so scripts resume immediately when the entity becomes visible again.\n if (!world.isEntityVisible(record.entityId)) {\n continue;\n }\n\n try {\n script.scriptComponent.scriptInstance =\n script.entryIndex === 0 ? record.behaviour : script.scriptComponent.scriptInstance;\n script.scriptComponent.scriptInstances.set(script.entryIndex, record.behaviour);\n\n entries[script.entryIndex] = {\n ...liveEntry,\n data: serializeDataForStorage(record.rawData, normalizeScriptData(record.behaviour.data)),\n };\n\n record.behaviour.update(world, deltaTime);\n\n entries[script.entryIndex] = {\n ...entries[script.entryIndex],\n data: serializeDataForStorage(record.rawData, normalizeScriptData(record.behaviour.data)),\n runtimeState: \"ready\",\n runtimeMessage: undefined,\n };\n writeScriptEntries(script.scriptComponent, entries);\n } catch (error) {\n entries[script.entryIndex] = {\n ...entries[script.entryIndex],\n runtimeState: \"error\",\n runtimeMessage: toErrorMessage(error),\n };\n writeScriptEntries(script.scriptComponent, entries);\n if (script.entryIndex === 0) {\n script.scriptComponent.scriptInstance = null;\n }\n record.behaviour.dispose?.(world);\n this.instances.delete(key);\n }\n }\n\n // If the selected entity no longer has any loaded behaviour instances,\n // clear the selection so stale state does not persist.\n if (this.selectedEntityId !== null) {\n let stillActive = false;\n for (const record of this.instances.values()) {\n if (record.entityId === this.selectedEntityId) {\n stillActive = true;\n break;\n }\n }\n if (!stillActive) {\n this.selectedEntityId = null;\n }\n }\n\n for (const [key, script] of active.entries()) {\n if (this.instances.has(key) || this.loading.has(key)) {\n continue;\n }\n\n const entries = readScriptEntries(script.scriptComponent, script.entityId);\n const targetEntry = entries[script.entryIndex];\n if (targetEntry) {\n entries[script.entryIndex] = {\n ...targetEntry,\n runtimeState: \"loading\",\n runtimeMessage: undefined,\n };\n writeScriptEntries(script.scriptComponent, entries);\n }\n\n const promise = this.loadBehaviour(world, script)\n .catch((error) => {\n const liveEntries = readScriptEntries(script.scriptComponent, script.entityId);\n const liveEntry = liveEntries[script.entryIndex];\n if (liveEntry) {\n liveEntries[script.entryIndex] = {\n ...liveEntry,\n runtimeState: \"error\",\n runtimeMessage: \"Failed to load script.\",\n };\n writeScriptEntries(script.scriptComponent, liveEntries);\n }\n if (script.entryIndex === 0) {\n script.scriptComponent.scriptInstance = null;\n }\n console.error(\n `[ScriptBehaviourSystem] Failed loading script ${script.scriptEntry.className}`,\n error,\n );\n })\n .finally(() => {\n this.loading.delete(key);\n });\n\n this.loading.set(key, promise);\n }\n\n for (const key of this.loading.keys()) {\n if (active.has(key)) {\n continue;\n }\n\n this.loading.delete(key);\n }\n }\n\n dispose(world: World): void {\n if (this.selectionCtx) {\n this.selectionCtx.domElement.removeEventListener(\"pointerdown\", this.onPointerDown);\n this.selectionCtx.domElement.removeEventListener(\"pointerup\", this.onPointerUp);\n }\n\n for (const record of this.instances.values()) {\n const liveComponent = world.getComponent(record.entityId, ScriptComponent);\n if (liveComponent) {\n if (record.entryIndex === 0) {\n liveComponent.scriptInstance = null;\n }\n liveComponent.scriptInstances.delete(record.entryIndex);\n }\n\n record.behaviour.dispose?.(world);\n }\n\n this.instances.clear();\n this.loading.clear();\n }\n\n private async loadBehaviour(world: World, script: ActiveScript): Promise<void> {\n const { entityId, scriptComponent, entryIndex, scriptEntry } = script;\n const key = buildInstanceKey(\n entityId,\n scriptEntry.scriptUrl,\n scriptEntry.className,\n );\n\n const moduleValue = await this.moduleLoader(scriptEntry.scriptUrl);\n\n const ctor = resolveBehaviourCtor(moduleValue, scriptEntry.className);\n if (!ctor) {\n throw new Error(\n `Missing Behaviour export '${scriptEntry.className}' in ${scriptEntry.scriptUrl}`,\n );\n }\n\n if (!world.hasEntity(entityId)) {\n return;\n }\n\n const liveComponent = world.getComponent(entityId, ScriptComponent);\n\n if (!liveComponent) {\n return;\n }\n\n const liveEntries = readScriptEntries(liveComponent, entityId);\n const liveEntry = liveEntries[entryIndex];\n\n if (\n !liveEntry ||\n !liveEntry.enabled ||\n !liveEntry.scriptUrl ||\n liveEntry.scriptUrl !== scriptEntry.scriptUrl ||\n liveEntry.className !== scriptEntry.className\n ) {\n return;\n }\n\n const currentData = normalizeScriptData(liveEntry.data);\n\n let behaviour: Behaviour;\n try {\n // Prefer undefined so Behaviour does not preempt script class defaults.\n behaviour = new ctor(\n world,\n entityId,\n undefined as unknown as Record<string, unknown>,\n );\n } catch {\n // Fallback for scripts that require a component object in constructor.\n behaviour = new ctor(world, entityId, currentData);\n }\n\n const defaults = normalizeScriptData(behaviour.data);\n const mergedData = mergeDataByCurrentDefaults(defaults, currentData);\n const resolvedData = resolveInputData(world, mergedData);\n\n behaviour.data = resolvedData;\n\n if (!world.isEditorMode() || liveEntry.executeInEditor === true) {\n (behaviour as unknown as { init(): void }).init();\n }\n\n liveEntries[entryIndex] = {\n ...liveEntry,\n data: mergedData,\n runtimeState: \"ready\",\n runtimeMessage: undefined,\n };\n writeScriptEntries(liveComponent, liveEntries);\n if (entryIndex === 0) {\n liveComponent.scriptInstance = behaviour;\n }\n liveComponent.scriptInstances.set(entryIndex, behaviour);\n this.instances.set(key, {\n entityId,\n scriptUrl: scriptEntry.scriptUrl,\n className: scriptEntry.className,\n entryIndex,\n behaviour,\n rawData: mergedData,\n });\n }\n}\n","import { Object3DRef } from \"../components/Object3DRef\";\nimport { TransformComponent } from \"../components/Transform\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\nimport { applyTransform } from \"./ObjectManagementSystem\";\n\nexport class TransformSyncSystem implements EcsSystem {\n update(world: World): void {\n const entities = world.query(TransformComponent, Object3DRef);\n\n for (const entityId of entities) {\n const transform = world.getComponent(entityId, TransformComponent);\n const object = world.getComponent(entityId, Object3DRef)?.object;\n\n if (!transform || !object) {\n continue;\n }\n\n applyTransform(object, transform);\n object.updateMatrixWorld(true);\n }\n }\n}\n","import * as THREE from \"three\";\n\nimport { AudioComponent } from \"../components/Audio\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\n/** Subset of `AudioComponent.options` that the system syncs to THREE.js every frame. */\ntype TrackedAudioOptions = {\n loop: boolean;\n pitch: number;\n volume: number;\n refDistance: number;\n distanceModel: string;\n rolloffFactor: number;\n};\n\nfunction snapshotOptions(opts: AudioComponent[\"options\"]): TrackedAudioOptions {\n return {\n loop: opts.loop,\n pitch: opts.pitch,\n volume: opts.volume,\n refDistance: opts.refDistance,\n distanceModel: opts.distanceModel,\n rolloffFactor: opts.rolloffFactor,\n };\n}\n\n/**\n * Reconciles `AudioComponent` state with the underlying THREE.js audio objects\n * each frame.\n *\n * **Playback** — drives `play()`, `pause()`, and `stop()` on the THREE.js\n * audio node based on the `isPlaying` / `isPaused` flags set by\n * `AudioComponent.play()`, `.pause()`, and `.stop()`.\n *\n * **Option sync** — detects changes to `loop`, `pitch`, `volume`,\n * `refDistance`, `distanceModel`, and `rolloffFactor` and applies them live.\n * Changes take effect on the next frame, so scripts and inspector edits during\n * runtime are reflected without reloading the scene.\n *\n * Only active in **preview** mode (`isEditor: true` makes every update a\n * no-op so the editor is unaffected).\n *\n * @category Systems\n */\nexport class AudioSystem implements EcsSystem {\n private readonly isEditor: boolean;\n /** THREE.js `isPlaying` state captured at the end of the previous frame. */\n private readonly prevPlayingState = new Map<number, boolean>();\n /** Snapshot of options applied in the previous frame, for change detection. */\n private readonly prevOptions = new Map<number, TrackedAudioOptions>();\n /** Tracks entities that were stopped due to invisibility. */\n private readonly stoppedDueToInvisibility = new Set<number>();\n\n constructor({ isEditor = false }: { isEditor?: boolean } = {}) {\n this.isEditor = isEditor;\n }\n\n update(world: World, _deltaTime: number): void {\n if (this.isEditor) return;\n\n const entities = world.query(AudioComponent);\n\n // Track which entities are still alive so we can prune stale map entries.\n const liveEntityIds = new Set(entities);\n\n for (const entityId of entities) {\n const component = world.getComponent(entityId, AudioComponent);\n if (!component?.audio) continue;\n\n const sound = component.audio;\n\n // Skip audio updates for invisible entities; stop any sound that is\n // currently playing so it does not continue while the entity is hidden.\n // Track that we stopped it so we can resume when visibility is restored.\n if (!world.isEntityVisible(entityId)) {\n if (sound.isPlaying) {\n sound.stop();\n this.stoppedDueToInvisibility.add(entityId);\n }\n continue;\n }\n\n // Entity is visible — if we previously stopped it due to invisibility,\n // resume playback now and clear the flag.\n if (this.stoppedDueToInvisibility.has(entityId)) {\n this.stoppedDueToInvisibility.delete(entityId);\n // If the component still wants to play, restart the audio.\n if (component.isPlaying && !sound.isPlaying && sound.buffer) {\n sound.play();\n }\n }\n\n // --- Option sync ---------------------------------------------------\n this._syncOptions(entityId, component, sound);\n\n // --- Playback reconciliation ----------------------------------------\n const prevWasPlaying = this.prevPlayingState.get(entityId) ?? false;\n\n // Detect natural audio end: THREE.js stopped on its own (e.g. a\n // non-looping clip finished) while the component still believes it is\n // playing. Skip this check if we stopped due to invisibility.\n if (\n prevWasPlaying &&\n !sound.isPlaying &&\n component.isPlaying &&\n !component.isPaused &&\n !this.stoppedDueToInvisibility.has(entityId)\n ) {\n component.isPlaying = false;\n }\n\n if (component.isPlaying && !sound.isPlaying) {\n // Wait for a buffer to be available; the system will retry each frame\n // until it is ready, so autoplay / programmatic play always fires.\n if (sound.buffer) {\n sound.play();\n }\n } else if (!component.isPlaying && sound.isPlaying) {\n if (component.isPaused) {\n sound.pause();\n } else {\n sound.stop();\n }\n }\n\n this.prevPlayingState.set(entityId, sound.isPlaying);\n }\n\n // Remove tracking entries for entities that no longer exist.\n for (const entityId of this.prevPlayingState.keys()) {\n if (!liveEntityIds.has(entityId)) {\n this.prevPlayingState.delete(entityId);\n this.prevOptions.delete(entityId);\n this.stoppedDueToInvisibility.delete(entityId);\n }\n }\n }\n\n /** Apply any changed options from the component to the THREE.js audio node. */\n private _syncOptions(\n entityId: number,\n component: AudioComponent,\n sound: THREE.Audio<GainNode> | THREE.PositionalAudio,\n ): void {\n const opts = component.options;\n const prev = this.prevOptions.get(entityId);\n\n if (!prev || prev.loop !== opts.loop) {\n sound.setLoop(opts.loop);\n }\n\n if (!prev || prev.pitch !== opts.pitch) {\n sound.setPlaybackRate(opts.pitch);\n }\n\n if (!prev || prev.volume !== opts.volume) {\n sound.setVolume(opts.volume);\n }\n\n // Positional-only properties — guarded by both the options flag and the\n // THREE.js class check so neither can cause a spurious call.\n if (opts.positional && sound instanceof THREE.PositionalAudio) {\n if (!prev || prev.refDistance !== opts.refDistance) {\n sound.setRefDistance(opts.refDistance);\n }\n\n if (!prev || prev.distanceModel !== opts.distanceModel) {\n sound.setDistanceModel(opts.distanceModel as DistanceModelType);\n }\n\n if (!prev || prev.rolloffFactor !== opts.rolloffFactor) {\n sound.setRolloffFactor(opts.rolloffFactor);\n }\n }\n\n this.prevOptions.set(entityId, snapshotOptions(opts));\n }\n\n dispose(_world: World): void {\n this.prevPlayingState.clear();\n this.prevOptions.clear();\n this.stoppedDueToInvisibility.clear();\n }\n}\n","import * as THREE from \"three\";\n\nimport { VideoComponent } from \"../components/Video\";\nimport type { EcsSystem } from \"../System\";\nimport type { World } from \"../World\";\n\n/** Subset of `VideoComponent.options` the system syncs to the DOM / mesh each frame. */\ntype TrackedVideoOptions = {\n loop: boolean;\n volume: number;\n width: number;\n height: number;\n backgroundColor: string;\n similarity: number;\n smoothness: number;\n spill: number;\n positional: boolean;\n refDistance: number;\n distanceModel: string;\n rolloffFactor: number;\n};\n\n/** Playback intent captured from the previous frame for transition detection. */\ntype PrevVideoIntent = {\n isPlaying: boolean;\n isPaused: boolean;\n};\n\nfunction snapshotOptions(opts: VideoComponent[\"options\"]): TrackedVideoOptions {\n return {\n loop: opts.loop,\n volume: opts.volume,\n width: opts.width,\n height: opts.height,\n backgroundColor: opts.backgroundColor,\n similarity: opts.similarity,\n smoothness: opts.smoothness,\n spill: opts.spill,\n positional: opts.positional,\n refDistance: opts.refDistance,\n distanceModel: opts.distanceModel,\n rolloffFactor: opts.rolloffFactor,\n };\n}\n\n/**\n * Reconciles `VideoComponent` state with the underlying HTML video element\n * and THREE.js mesh/material each frame.\n *\n * **Playback** — drives `play()`, `pause()`, and stop (pause + seek to 0) on\n * the HTML `<video>` element based on the `isPlaying` / `isPaused` flags set\n * by `VideoComponent.play()`, `.pause()`, and `.stop()`.\n *\n * **Option sync** — detects changes to `loop`, `volume`, `width`, `height`,\n * and green-screen shader uniforms (`backgroundColor`, `similarity`,\n * `smoothness`, `spill`) and applies them live without a scene reload.\n *\n * Only active in **preview** mode (`isEditor: true` makes every update a\n * no-op so the editor is unaffected).\n *\n * @category Systems\n */\nexport class VideoSystem implements EcsSystem {\n private readonly isEditor: boolean;\n /** Playback intent captured at the end of the previous frame. */\n private readonly prevIntent = new Map<number, PrevVideoIntent>();\n /** Snapshot of options applied in the previous frame, for change detection. */\n private readonly prevOptions = new Map<number, TrackedVideoOptions>();\n /** Tracks entities that were manually paused due to invisibility. */\n private readonly pausedDueToInvisibility = new Set<number>();\n\n constructor({ isEditor = false }: { isEditor?: boolean } = {}) {\n this.isEditor = isEditor;\n }\n\n update(world: World, _deltaTime: number): void {\n if (this.isEditor) return;\n\n const entities = world.query(VideoComponent);\n\n // Track which entities are still alive so we can prune stale map entries.\n const liveEntityIds = new Set(entities);\n\n for (const entityId of entities) {\n const component = world.getComponent(entityId, VideoComponent);\n if (!component?.videoElement) continue;\n\n const video = component.videoElement;\n\n // Skip video updates for invisible entities; pause playback so the video\n // does not continue running while the entity is hidden. Track that we\n // manually paused it so we can resume when visibility is restored.\n if (!world.isEntityVisible(entityId)) {\n if (!video.paused) {\n video.pause();\n this.pausedDueToInvisibility.add(entityId);\n }\n continue;\n }\n\n // Entity is visible — if we previously paused it due to invisibility,\n // resume playback now and clear the flag.\n if (this.pausedDueToInvisibility.has(entityId)) {\n this.pausedDueToInvisibility.delete(entityId);\n // If the component still wants to play, resume the video element.\n if (component.isPlaying && video.paused) {\n video.play().catch(() => {});\n }\n }\n\n // --- Option sync ---------------------------------------------------\n this._syncOptions(entityId, component, video);\n\n // --- Playback reconciliation ----------------------------------------\n const prev = this.prevIntent.get(entityId) ?? { isPlaying: false, isPaused: false };\n\n // Detect natural video end: the element paused on its own (non-looping\n // clip finished) while the component still believes it is playing.\n // Skip this check if we manually paused due to invisibility.\n if (\n prev.isPlaying &&\n video.paused &&\n !video.seeking &&\n component.isPlaying &&\n !component.isPaused &&\n !this.pausedDueToInvisibility.has(entityId)\n ) {\n component.isPlaying = false;\n }\n\n const isStoppedNow = !component.isPlaying && !component.isPaused;\n const wasStoppedPrev = !prev.isPlaying && !prev.isPaused;\n // True only on the first frame after `stop()` is called — used to reset\n // currentTime exactly once rather than every frame.\n const justStopped = !wasStoppedPrev && isStoppedNow;\n\n if (component.isPlaying) {\n if (video.paused) {\n // play() returns a Promise; browsers may reject it due to autoplay\n // policy. The flag stays true so the system retries next frame.\n video.play().catch(() => {});\n }\n } else if (component.isPaused) {\n if (!video.paused) {\n video.pause();\n }\n } else {\n // Stopped state — pause and reset position.\n if (!video.paused) {\n video.pause();\n }\n if (justStopped) {\n video.currentTime = 0;\n }\n }\n\n this.prevIntent.set(entityId, {\n isPlaying: component.isPlaying,\n isPaused: component.isPaused,\n });\n }\n\n // Remove tracking entries for entities that no longer exist.\n for (const entityId of this.prevIntent.keys()) {\n if (!liveEntityIds.has(entityId)) {\n this.prevIntent.delete(entityId);\n this.prevOptions.delete(entityId);\n this.pausedDueToInvisibility.delete(entityId);\n }\n }\n }\n\n /** Apply any changed options from the component to the video element and mesh. */\n private _syncOptions(\n entityId: number,\n component: VideoComponent,\n video: HTMLVideoElement,\n ): void {\n const opts = component.options;\n const prev = this.prevOptions.get(entityId);\n\n if (!prev || prev.loop !== opts.loop) {\n video.loop = opts.loop;\n }\n\n // Volume: prefer the Web Audio gain node when present so that positional\n // attenuation is applied correctly. Fall back to the HTML element directly\n // when no audio node exists (e.g. in editor mode, should rarely occur here\n // since VideoSystem is a no-op in editor).\n if (!prev || prev.volume !== opts.volume) {\n if (component.audioNode) {\n component.audioNode.setVolume(Math.max(0, Math.min(1, opts.volume)));\n } else {\n video.volume = Math.max(0, Math.min(1, opts.volume));\n }\n }\n\n // Mesh scale for width / height.\n if ((!prev || prev.width !== opts.width || prev.height !== opts.height) && component.object) {\n component.object.scale.set(opts.width, opts.height, 1);\n }\n\n // Green-screen shader uniforms — only when the material is a ShaderMaterial.\n const material = component.material;\n if (material instanceof THREE.ShaderMaterial) {\n if (!prev || prev.backgroundColor !== opts.backgroundColor) {\n (material.uniforms.keyColor.value as THREE.Color).set(opts.backgroundColor);\n }\n\n if (!prev || prev.similarity !== opts.similarity) {\n material.uniforms.similarity.value = opts.similarity;\n }\n\n if (!prev || prev.smoothness !== opts.smoothness) {\n material.uniforms.smoothness.value = opts.smoothness;\n }\n\n if (!prev || prev.spill !== opts.spill) {\n material.uniforms.spill.value = opts.spill;\n }\n }\n\n // Positional audio options — only when the audioNode is a PositionalAudio.\n if (opts.positional && component.audioNode instanceof THREE.PositionalAudio) {\n const posAudio = component.audioNode;\n\n if (!prev || prev.refDistance !== opts.refDistance) {\n posAudio.setRefDistance(opts.refDistance);\n }\n\n if (!prev || prev.distanceModel !== opts.distanceModel) {\n posAudio.setDistanceModel(opts.distanceModel as DistanceModelType);\n }\n\n if (!prev || prev.rolloffFactor !== opts.rolloffFactor) {\n posAudio.setRolloffFactor(opts.rolloffFactor);\n }\n }\n\n this.prevOptions.set(entityId, snapshotOptions(opts));\n }\n\n dispose(_world: World): void {\n this.prevIntent.clear();\n this.prevOptions.clear();\n this.pausedDueToInvisibility.clear();\n }\n}\n","import * as THREE from \"three\";\nimport type * as RAPIER from \"@dimforge/rapier3d-compat\";\nimport {\n cloneHistoryValue,\n DEBUG_CHANGE_IGNORED_SYSTEMS,\n normalizeDebugValue,\n type AnyComponent,\n type ComponentClass,\n type WorldHistorySnapshot,\n} from \"./worldSnapshotUtils\";\nimport type { Component } from \"./Component\";\nimport type { EcsSystem } from \"./System\";\nimport type { EntityId, IntersectionResult, SelectionListener, Vec3 } from \"./types\";\nimport { registerDefaultFactories } from \"./factories\";\nimport {\n despawnPrefab,\n spawnPrefab,\n type SpawnPrefabOptions,\n type SpawnPrefabSource,\n} from \"./prefab/spawnPrefab\";\nimport {\n Environment,\n EntityType,\n Name,\n Object3DRef,\n ParentId,\n Postprocessing,\n ScriptComponent,\n SelectionTransformState,\n} from \"./components\";\nimport {\n AnimationSystem,\n AudioSystem,\n VideoSystem,\n CameraSyncSystem,\n EnvironmentSyncSystem,\n PostprocessingSyncSystem,\n LightSyncSystem,\n MaterialSyncSystem,\n MeshGeometrySystem,\n InstancedMeshSystem,\n ObjectManagementSystem,\n ObjectVisibilitySystem,\n PhysicsSyncSystem,\n TransformSyncSystem,\n RenderSystem,\n InputSystem,\n type KeyboardKey,\n type MouseButton,\n} from \"./systems\";\n\ntype StoreListener = () => void;\nexport type WorldFeatureFlags = {\n supportSkybox?: boolean;\n supportPostprocessing?: boolean;\n};\n\ntype WorldEntityView = {\n name: string;\n entityId: number;\n object: THREE.Object3D | null;\n type: string;\n components: Component[];\n};\n\nexport class World {\n private nextEntityId = 1;\n private entities = new Set<EntityId>();\n private systems: EcsSystem[] = [];\n private selectionListeners = new Set<SelectionListener>();\n private storeListeners = new Set<StoreListener>();\n\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private readonly featureFlags: {\n supportSkybox: boolean;\n supportPostprocessing: boolean;\n };\n\n private components = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n private inputSystem: InputSystem | null = null;\n private objectManagementSystem: ObjectManagementSystem | null = null;\n private environmentSyncSystem: EnvironmentSyncSystem | null = null;\n private postprocessingSyncSystem: PostprocessingSyncSystem | null = null;\n private rapierModule: typeof RAPIER | null = null;\n private rapierModulePromise: Promise<typeof RAPIER> | null = null;\n private physicsWorld: RAPIER.World | null = null;\n\n private isEditor = false;\n private paused = false;\n\n constructor(options: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n renderer: THREE.WebGLRenderer;\n featureFlags?: WorldFeatureFlags;\n }) {\n this.scene = options.scene;\n this.camera = options.camera;\n this.renderer = options.renderer;\n this.featureFlags = {\n supportSkybox: options.featureFlags?.supportSkybox ?? true,\n supportPostprocessing:\n options.featureFlags?.supportPostprocessing ?? true,\n };\n\n // Ensure runtime previews render mesh and light shadow settings consistently.\n this.renderer.shadowMap.enabled = true;\n }\n\n createEntity(): EntityId {\n const entityId = this.nextEntityId;\n this.nextEntityId += 1;\n this.entities.add(entityId);\n this.emitStoreChanged();\n return entityId;\n }\n\n destroyEntity(entityId: EntityId): void {\n if (!this.entities.has(entityId)) {\n return;\n }\n\n this.entities.delete(entityId);\n\n for (const store of this.components.values()) {\n store.delete(entityId);\n }\n\n if (this.getSelectedEntity() === entityId) {\n this.setSelectedEntity(null);\n }\n\n this.emitStoreChanged();\n }\n\n private getSelectionState(): SelectionTransformState | undefined {\n const entityId = this.query(SelectionTransformState)[0];\n if (entityId === undefined) {\n return undefined;\n }\n\n return this.getComponent(entityId, SelectionTransformState);\n }\n\n hasEntity(entityId: EntityId): boolean {\n return this.entities.has(entityId);\n }\n\n getEntities(): EntityId[] {\n return [...this.entities];\n }\n\n getEntityCount(): number {\n return this.entities.size;\n }\n\n addComponent<T extends Component>(entityId: EntityId, component: T): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n this.emitStoreChanged();\n }\n\n addComponents<T extends Component>(\n entityId: EntityId,\n components: T[],\n ): void {\n if (!this.entities.has(entityId)) {\n throw new Error(`Cannot add component to missing entity ${entityId}`);\n }\n\n for (const component of components) {\n const componentType = component.constructor as ComponentClass<T>;\n\n if (!this.components.has(componentType)) {\n this.components.set(componentType, new Map<EntityId, AnyComponent>());\n }\n\n this.components.get(componentType)?.set(entityId, component);\n }\n\n this.emitStoreChanged();\n }\n\n removeComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): void {\n this.components.get(componentType)?.delete(entityId);\n this.emitStoreChanged();\n }\n\n getComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): T | undefined {\n return this.components.get(componentType)?.get(entityId) as T | undefined;\n }\n\n hasComponent<T extends Component>(\n entityId: EntityId,\n componentType: ComponentClass<T>,\n ): boolean {\n return this.components.get(componentType)?.has(entityId) ?? false;\n }\n\n query(...componentTypes: ComponentClass<AnyComponent>[]): EntityId[] {\n return [...this.entities].filter((entityId) =>\n componentTypes.every((componentType) =>\n this.components.get(componentType)?.has(entityId),\n ),\n );\n }\n\n /**\n * Returns `true` if the entity is currently visible (its `Object3DRef.visibility`\n * is `true`), or if the entity has no `Object3DRef` component (entities without a\n * scene object are always considered active). Systems use this to skip per-entity\n * updates for hidden objects.\n */\n isEntityVisible(entityId: EntityId): boolean {\n const objectRef = this.getComponent(entityId, Object3DRef);\n return objectRef ? objectRef.visibility : true;\n }\n\n getInputSystem(): EcsSystem | null {\n if (this.inputSystem !== null) return this.inputSystem;\n\n const inputSystem = this.systems.find(\n (system) => system.constructor.name === \"InputSystem\",\n );\n\n this.inputSystem = inputSystem as InputSystem;\n\n return inputSystem ?? null;\n }\n\n getKeyDown(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyDown(key);\n }\n\n getKeyUp(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKeyUp(key);\n }\n\n getKey(key: KeyboardKey): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getKey(key);\n }\n\n getMouse(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouse(button);\n }\n\n getMouseDown(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseDown(button);\n }\n\n getMouseUp(button: MouseButton | number | string): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getMouseUp(button);\n }\n\n getScrollClick(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClick();\n }\n\n getScrollClickDown(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickDown();\n }\n\n getScrollClickUp(): boolean {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return false;\n }\n\n return (inputSystem as InputSystem).getScrollClickUp();\n }\n\n getScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getScrollDelta();\n }\n\n consumeScrollDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeScrollDelta();\n }\n\n getMousePosition(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMousePosition();\n }\n\n getMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).getMouseDelta();\n }\n\n consumeMouseDelta(): { x: number; y: number } {\n const inputSystem = this.getInputSystem();\n if (!inputSystem) {\n return { x: 0, y: 0 };\n }\n\n return (inputSystem as InputSystem).consumeMouseDelta();\n }\n\n async getRapierModule(): Promise<typeof RAPIER> {\n if (this.rapierModule) {\n return this.rapierModule;\n }\n\n if (!this.rapierModulePromise) {\n this.rapierModulePromise = import(\"@dimforge/rapier3d-compat\").then(\n async (moduleValue) => {\n await moduleValue.init();\n this.rapierModule = moduleValue;\n return moduleValue;\n },\n );\n }\n\n return this.rapierModulePromise;\n }\n\n getPhysicsWorld(): RAPIER.World | null {\n return this.physicsWorld;\n }\n\n setPhysicsWorld(physicsWorld: RAPIER.World | null): void {\n this.physicsWorld = physicsWorld;\n }\n\n async createPhysicsWorld(options?: {\n gravity?: { x?: number; y?: number; z?: number };\n }): Promise<RAPIER.World | null> {\n if (this.physicsWorld) {\n return this.physicsWorld;\n }\n\n const RAPIER = await this.getRapierModule();\n const gravity = options?.gravity;\n const gravityVector = new RAPIER.Vector3(\n typeof gravity?.x === \"number\" ? gravity.x : 0,\n typeof gravity?.y === \"number\" ? gravity.y : -9.81,\n typeof gravity?.z === \"number\" ? gravity.z : 0,\n );\n\n this.physicsWorld = new RAPIER.World(gravityVector);\n return this.physicsWorld;\n }\n\n lockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).lockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (typeof this.renderer.domElement.requestPointerLock !== \"function\") {\n return false;\n }\n\n try {\n const result = this.renderer.domElement.requestPointerLock();\n // Modern browsers (including Safari) return a Promise that rejects\n // when the call happens outside a user gesture. Absorb the rejection\n // so it does not surface as an unhandled promise rejection.\n if (result instanceof Promise) {\n result.catch(() => {});\n }\n return true;\n } catch {\n return false;\n }\n }\n\n unlockMousePointer(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n return (inputSystem as InputSystem).unlockMousePointer();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n if (\n !document.pointerLockElement ||\n typeof document.exitPointerLock !== \"function\"\n ) {\n return false;\n }\n\n document.exitPointerLock();\n return true;\n }\n\n isMousePointerLocked(): boolean {\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n return (inputSystem as InputSystem).isMousePointerLocked();\n }\n\n if (typeof document === \"undefined\") {\n return false;\n }\n\n return document.pointerLockElement === this.renderer.domElement;\n }\n\n getSystem<T extends EcsSystem>(system: T): T {\n const resolvedSystem = this.systems.find((candidate) => {\n return (\n candidate === system || candidate.constructor === system.constructor\n );\n });\n\n if (!resolvedSystem) {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n throw new Error(\n `System '${systemName}' is not registered in this world.`,\n );\n }\n\n return resolvedSystem as T;\n }\n\n hasSystem<T extends EcsSystem>(system: T): boolean {\n return (\n this.systems.includes(system) ||\n this.systems.some(\n (candidate) => candidate.constructor === system.constructor,\n )\n );\n }\n\n addSystem(system: EcsSystem): void {\n this.systems.push(system);\n }\n\n addSystems(systems: EcsSystem[]): void {\n for (const system of systems) {\n this.addSystem(system);\n }\n }\n\n setup({ systems, isEditor }: { systems: EcsSystem[]; isEditor?: boolean }): {\n objectManagementSystem: ObjectManagementSystem;\n transformSyncSystem: TransformSyncSystem;\n renderSystem: RenderSystem;\n } {\n const objectManagementSystem = new ObjectManagementSystem(\n this.scene,\n this.camera,\n isEditor ?? false,\n );\n const meshGeometrySystem = new MeshGeometrySystem();\n const instancedMeshSystem = new InstancedMeshSystem();\n const environmentSyncSystem = this.featureFlags.supportSkybox\n ? new EnvironmentSyncSystem(this.scene)\n : null;\n const postprocessingSyncSystem = this.featureFlags.supportPostprocessing\n ? new PostprocessingSyncSystem(this.renderer, this.scene, this.camera)\n : null;\n const lightSyncSystem = new LightSyncSystem();\n const materialSyncSystem = new MaterialSyncSystem();\n const physicsSyncSystem = new PhysicsSyncSystem({\n isEditor: isEditor ?? false,\n });\n const animationSystem = new AnimationSystem();\n const audioSystem = new AudioSystem({ isEditor: isEditor ?? false });\n const videoSystem = new VideoSystem({ isEditor: isEditor ?? false });\n const cameraSyncSystem = new CameraSyncSystem();\n const transformSyncSystem = new TransformSyncSystem();\n const objectVisibilitySystem = new ObjectVisibilitySystem();\n const renderSystem = new RenderSystem(\n this.renderer,\n this.scene,\n this.camera,\n );\n\n registerDefaultFactories(objectManagementSystem);\n\n this.inputSystem = null;\n\n const coreSystems: EcsSystem[] = [\n objectManagementSystem,\n meshGeometrySystem,\n instancedMeshSystem,\n ];\n\n if (environmentSyncSystem) {\n coreSystems.push(environmentSyncSystem);\n }\n\n if (postprocessingSyncSystem) {\n coreSystems.push(postprocessingSyncSystem);\n }\n\n this.addSystems([\n ...coreSystems,\n physicsSyncSystem,\n ...systems,\n objectVisibilitySystem,\n lightSyncSystem,\n materialSyncSystem,\n animationSystem,\n audioSystem,\n videoSystem,\n cameraSyncSystem,\n transformSyncSystem,\n renderSystem,\n ]);\n\n const inputSystem = this.getInputSystem();\n if (inputSystem) {\n (inputSystem as InputSystem).setPointerLockElement(\n this.renderer.domElement,\n );\n }\n\n this.isEditor = isEditor ?? false;\n\n this.objectManagementSystem = objectManagementSystem;\n this.environmentSyncSystem = environmentSyncSystem;\n this.postprocessingSyncSystem = postprocessingSyncSystem;\n\n return {\n objectManagementSystem,\n transformSyncSystem,\n renderSystem,\n };\n }\n\n isEditorMode(): boolean {\n return this.isEditor;\n }\n\n /**\n * Pauses world simulation. While paused, `update()` skips all system ticks so\n * physics, animation, scripts, and rendering stop advancing. The last rendered\n * frame remains frozen on-screen.\n *\n * Call {@link resume} to continue.\n */\n pause(): void {\n this.paused = true;\n }\n\n /**\n * Resumes world simulation after a previous {@link pause} call.\n * Has no effect if the world is not paused.\n */\n resume(): void {\n this.paused = false;\n }\n\n /**\n * Returns `true` if the world is currently paused.\n *\n * @example\n * ```ts\n * if (this.world.isPaused()) {\n * this.world.resume();\n * }\n * ```\n */\n isPaused(): boolean {\n return this.paused;\n }\n\n getScene(): THREE.Scene {\n return this.scene;\n }\n\n getCamera(): THREE.PerspectiveCamera {\n return this.camera;\n }\n\n getRenderer(): THREE.WebGLRenderer {\n return this.renderer;\n }\n\n update(deltaTime: number): void {\n if (this.paused) return;\n for (const system of this.systems) {\n system.update(this, deltaTime);\n }\n }\n\n dispose(): void {\n for (const system of this.systems) {\n system.dispose?.(this);\n }\n\n this.selectionListeners.clear();\n this.storeListeners.clear();\n this.physicsWorld = null;\n this.systems = [];\n this.paused = false;\n }\n\n setSelectedEntity(entityId: EntityId | null): void {\n const state = this.getSelectionState();\n if (!state) {\n return;\n }\n\n const nextEntityId =\n entityId !== null && this.entities.has(entityId) ? entityId : null;\n\n if (state.selectedEntityId === nextEntityId) {\n return;\n }\n\n state.selectedEntityId = nextEntityId;\n\n for (const listener of this.selectionListeners) {\n listener(nextEntityId);\n }\n\n this.emitStoreChanged();\n }\n\n getSelectedEntity(): EntityId | null {\n return this.getSelectionState()?.selectedEntityId ?? null;\n }\n\n private getEntityComponents(entityId: EntityId): Component[] {\n const components: Component[] = [];\n\n for (const store of this.components.values()) {\n const component = store.get(entityId);\n if (component) {\n components.push(component);\n }\n }\n\n return components;\n }\n\n private getEntityName(entityId: EntityId): string {\n const nameComponent = this.getComponent(entityId, Name);\n const name = nameComponent?.value?.trim();\n\n if (name) {\n return name;\n }\n\n return `Entity ${entityId}`;\n }\n\n private getEntityType(entityId: EntityId): string {\n const typeComponent = this.getComponent(entityId, EntityType);\n const type = typeComponent?.value?.trim();\n\n if (type) {\n return type;\n }\n\n return `EntityType ${entityId}`;\n }\n\n private getObject3d(entityId: EntityId): THREE.Object3D | null {\n const object3DRefComponent = this.getComponent(entityId, Object3DRef);\n const object = object3DRefComponent?.object;\n\n if (object) {\n return object;\n }\n\n return null;\n }\n\n private toEntityView(entityId: EntityId): WorldEntityView {\n return {\n entityId,\n name: this.getEntityName(entityId),\n object: this.getObject3d(entityId),\n type: this.getEntityType(entityId),\n components: this.getEntityComponents(entityId),\n };\n }\n\n getEntitiesByComponent(component: Component): WorldEntityView[] {\n const componentType = component.constructor as ComponentClass<AnyComponent>;\n const entityStore = this.components.get(componentType);\n\n if (!entityStore) {\n return [];\n }\n\n return [...entityStore.keys()]\n .filter((entityId) => this.entities.has(entityId))\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n getEntitiesByName(name: string): WorldEntityView[] {\n const searchName = name.trim();\n if (!searchName) {\n return [];\n }\n\n return this.getAllEntities().filter((entity) => entity.name === searchName);\n }\n\n getEntityByName(name: string): WorldEntityView | null {\n const [entity] = this.getEntitiesByName(name);\n return entity ?? null;\n }\n\n getEntityById(entityId: number): WorldEntityView | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n return this.toEntityView(entityId);\n }\n\n getEntitiesChildren(entityId: EntityId): WorldEntityView[] {\n const children: WorldEntityView[] = [];\n const entitiesWithParent = this.query(ParentId);\n \n for (const childId of entitiesWithParent) {\n const parentIdComponent = this.getComponent(childId, ParentId);\n if (parentIdComponent?.value === entityId) {\n children.push(this.toEntityView(childId));\n }\n }\n \n return children;\n }\n\n getEntitiesParent(entityId: EntityId): WorldEntityView | null {\n const parentIdComponent = this.getComponent(entityId, ParentId);\n \n if (!parentIdComponent || parentIdComponent.value === null) {\n return null;\n }\n \n return this.getEntityById(parentIdComponent.value);\n }\n\n /**\n * Instantiate a prefab asset into this world at runtime — see\n * {@link spawnPrefab}. Convenience wrapper so scripts and embedding apps\n * can spawn without reaching for the object management system.\n */\n spawnPrefab(\n source: SpawnPrefabSource,\n options?: SpawnPrefabOptions,\n ): Promise<EntityId> {\n return spawnPrefab(this, source, options);\n }\n\n /** Remove a spawned prefab instance (root + descendants). */\n despawnPrefab(rootEntityId: EntityId): number {\n return despawnPrefab(this, rootEntityId);\n }\n\n getObjectManagementSystem(): ObjectManagementSystem {\n if (this.objectManagementSystem) return this.objectManagementSystem;\n\n const objectManagementSystem = this.systems.find(\n (system) => system.constructor.name === \"ObjectManagementSystem\",\n );\n\n this.objectManagementSystem = objectManagementSystem as ObjectManagementSystem;\n\n return this.objectManagementSystem;\n }\n\n /**\n * Returns the singleton {@link Environment} component for the scene, or\n * `undefined` if no environment entity exists yet.\n *\n * Mutate `component.values` directly to change skybox, fog, or gravity at\n * runtime — `EnvironmentSyncSystem` picks up the changes next frame.\n *\n * @example\n * ```ts\n * const env = this.world.getEnvironmentComponent();\n * if (env) {\n * env.values.fog.type = \"exponential\";\n * env.values.fog.exponential.density = 0.01;\n * }\n * ```\n */\n getEnvironmentComponent(): Environment | undefined {\n const entityId = this.query(Environment)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Environment);\n }\n\n /**\n * Returns the singleton {@link Postprocessing} component for the scene, or\n * `undefined` if no postprocessing entity exists yet.\n *\n * Mutate `component.values` directly to enable/disable effects or tweak\n * parameters at runtime — `PostprocessingSyncSystem` picks up the changes\n * next frame.\n *\n * @example\n * ```ts\n * const pp = this.world.getPostprocessingComponent();\n * if (pp) {\n * pp.values.bloom.enabled = true;\n * pp.values.bloom.intensity = 2.0;\n * }\n * ```\n */\n getPostprocessingComponent(): Postprocessing | undefined {\n const entityId = this.query(Postprocessing)[0];\n if (entityId === undefined) return undefined;\n return this.getComponent(entityId, Postprocessing);\n }\n\n /**\n * Cast a ray from `origin` along `direction` and return every intersected\n * entity-bound mesh, sorted by distance. Each result is a standard\n * `THREE.Intersection` augmented with the owning `entityId` (or `null` if\n * the hit object is not part of any tracked entity).\n *\n * @param origin - World-space origin of the ray (`THREE.Vector3` or\n * `{ x, y, z }`).\n * @param direction - World-space direction of the ray. Will be normalized\n * internally; magnitude is ignored.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycast(\n * { x: 0, y: 1, z: 0 },\n * { x: 0, y: 0, z: -1 },\n * );\n * if (hits[0]?.entityId !== null) {\n * console.log(\"hit entity\", hits[0].entityId, \"at\", hits[0].point);\n * }\n * ```\n */\n raycast(\n origin: Vec3,\n direction: Vec3,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const rayOrigin = new THREE.Vector3(origin.x, origin.y, origin.z);\n const rayDirection = new THREE.Vector3(\n direction.x,\n direction.y,\n direction.z,\n );\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n rayDirection.normalize();\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections.map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n );\n }\n\n /**\n * Cast a ray from an entity's world-space position along its forward\n * direction (the +Z axis of its world matrix). Returns intersected\n * entity-bound meshes sorted by distance, with the source entity itself\n * filtered out so the ray does not hit the caster.\n *\n * @param entityId - Entity to cast the ray from. Must have an `Object3DRef`.\n * @param near - Minimum hit distance from the origin. Defaults to `0`.\n * @param far - Maximum hit distance from the origin. Defaults to `Infinity`.\n *\n * @example\n * ```ts\n * const hits = world.raycastFrom(this.entityId, 0, 50);\n * const closest = hits[0];\n * if (closest && closest.entityId !== null) {\n * console.log(\"looking at\", closest.entityId);\n * }\n * ```\n */\n raycastFrom(\n entityId: EntityId,\n near = 0,\n far = Infinity,\n ): IntersectionResult[] {\n const sourceObject = this.getObject3d(entityId);\n if (!sourceObject) {\n return [];\n }\n\n const rayOrigin = new THREE.Vector3();\n const rayDirection = new THREE.Vector3();\n sourceObject.getWorldPosition(rayOrigin);\n sourceObject.getWorldDirection(rayDirection);\n\n if (rayDirection.lengthSq() === 0) {\n return [];\n }\n\n const raycaster = new THREE.Raycaster(rayOrigin, rayDirection, near, far);\n const intersections = raycaster.intersectObjects(\n this.scene.children,\n true,\n );\n\n const objectToEntity = this.buildObjectToEntityMap();\n\n return intersections\n .map((intersection) =>\n this.toIntersectionResult(intersection, objectToEntity),\n )\n .filter((result) => result.entityId !== entityId);\n }\n\n private buildObjectToEntityMap(): Map<THREE.Object3D, EntityId> {\n const map = new Map<THREE.Object3D, EntityId>();\n const store = this.components.get(\n Object3DRef as unknown as ComponentClass<AnyComponent>,\n );\n\n if (!store) {\n return map;\n }\n\n for (const [entityId, component] of store) {\n const object = (component as Object3DRef).object;\n if (object) {\n map.set(object, entityId);\n }\n }\n\n return map;\n }\n\n private resolveEntityForObject(\n object: THREE.Object3D,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): EntityId | null {\n let current: THREE.Object3D | null = object;\n while (current) {\n const entityId = objectToEntity.get(current);\n if (entityId !== undefined) {\n return entityId;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private toIntersectionResult(\n intersection: THREE.Intersection,\n objectToEntity: Map<THREE.Object3D, EntityId>,\n ): IntersectionResult {\n return {\n entityId: this.resolveEntityForObject(\n intersection.object,\n objectToEntity,\n ),\n threeResult: intersection,\n };\n }\n\n getEntityScript<T = unknown>(entityId: number): T | null {\n if (!this.entities.has(entityId)) {\n return null;\n }\n\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent || scriptComponent.scriptInstance === null) {\n return null;\n }\n\n return scriptComponent.scriptInstance as T;\n }\n\n getScripts<T = unknown>(className: string): T[] {\n const normalizedClassName = className.trim();\n if (!normalizedClassName) {\n return [];\n }\n\n const scriptEntityIds = this.query(ScriptComponent);\n const instances: T[] = [];\n\n for (const entityId of scriptEntityIds) {\n const scriptComponent = this.getComponent(entityId, ScriptComponent);\n if (!scriptComponent) {\n continue;\n }\n\n const hasClassMatch = Array.isArray(scriptComponent.entries)\n ? scriptComponent.entries.some((entry) => {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n\n const classNameValue = (entry as { className?: unknown }).className;\n return (\n typeof classNameValue === \"string\" &&\n classNameValue === normalizedClassName\n );\n })\n : false;\n\n if (!hasClassMatch) {\n continue;\n }\n\n if (scriptComponent.scriptInstance !== null) {\n instances.push(scriptComponent.scriptInstance as T);\n }\n }\n\n return instances;\n }\n\n getScript<T = unknown>(className: string): T | null {\n const [instance] = this.getScripts<T>(className);\n return instance ?? null;\n }\n\n getAllEntities(): WorldEntityView[] {\n return [...this.entities]\n .sort((a, b) => a - b)\n .map((entityId) => this.toEntityView(entityId));\n }\n\n onSelectionChanged(listener: SelectionListener): () => void {\n this.selectionListeners.add(listener);\n\n return () => {\n this.selectionListeners.delete(listener);\n };\n }\n\n subscribe(listener: StoreListener): () => void {\n this.storeListeners.add(listener);\n\n return () => {\n this.storeListeners.delete(listener);\n };\n }\n\n getDebugSnapshot(maxDepth = 3): unknown {\n const components = [...this.components.entries()]\n .map(([componentClass, store]) => {\n return {\n component: componentClass.name,\n entries: [...store.entries()]\n .map(([entityId, component]) => {\n return {\n entityId,\n value: normalizeDebugValue(component, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n })\n .sort((a, b) => a.entityId - b.entityId),\n };\n })\n .sort((a, b) => a.component.localeCompare(b.component));\n\n const systems = this.systems\n .map((system) => {\n const systemName = system.constructor?.name || \"AnonymousSystem\";\n return {\n system,\n systemName,\n };\n })\n .filter(({ systemName }) => !DEBUG_CHANGE_IGNORED_SYSTEMS.has(systemName))\n .map(({ system, systemName }) => {\n return {\n system: systemName,\n state: normalizeDebugValue(system, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n });\n\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities].sort((a, b) => a - b),\n nextEntityId: this.nextEntityId,\n components,\n systems,\n };\n }\n\n getDebugSignature(maxDepth = 3): string {\n return JSON.stringify(this.getDebugSnapshot(maxDepth));\n }\n\n /**\n * Serialize ONLY the given entities into the same columnar\n * `{entities, components}` shape as {@link getDebugSnapshot} (no systems,\n * no selection). Used by prefab/scene subtree serialization.\n */\n getEntitiesSnapshot(\n entityIds: EntityId[],\n maxDepth = 10,\n ): {\n entities: number[];\n components: Array<{\n component: string;\n entries: Array<{ entityId: number; value: unknown }>;\n }>;\n } {\n const idSet = new Set(entityIds);\n\n const components = [...this.components.entries()]\n .map(([componentClass, store]) => {\n return {\n component: componentClass.name,\n entries: [...store.entries()]\n .filter(([entityId]) => idSet.has(entityId))\n .map(([entityId, component]) => {\n return {\n entityId,\n value: normalizeDebugValue(component, {\n seen: new WeakSet<object>(),\n depth: 0,\n maxDepth,\n }),\n };\n })\n .sort((a, b) => a.entityId - b.entityId),\n };\n })\n .filter(({ entries }) => entries.length > 0)\n .sort((a, b) => a.component.localeCompare(b.component));\n\n return {\n entities: [...this.entities]\n .filter((entityId) => idSet.has(entityId))\n .sort((a, b) => a - b),\n components,\n };\n }\n\n createHistorySnapshot(): WorldHistorySnapshot {\n return {\n selectedEntityId: this.getSelectedEntity(),\n entities: [...this.entities],\n nextEntityId: this.nextEntityId,\n components: [...this.components.entries()].map(\n ([componentType, store]) => {\n return {\n componentType,\n entries: [...store.entries()].map(([entityId, component]) => {\n return {\n entityId,\n component: cloneHistoryValue(component),\n };\n }),\n };\n },\n ),\n };\n }\n\n applyHistorySnapshot(snapshot: WorldHistorySnapshot): void {\n const previousSelectedEntityId = this.getSelectedEntity();\n\n this.nextEntityId = snapshot.nextEntityId;\n this.entities = new Set(snapshot.entities);\n\n const nextComponents = new Map<\n ComponentClass<AnyComponent>,\n Map<EntityId, AnyComponent>\n >();\n\n for (const componentBlock of snapshot.components) {\n const store = new Map<EntityId, AnyComponent>();\n for (const entry of componentBlock.entries) {\n if (!this.entities.has(entry.entityId)) {\n continue;\n }\n\n store.set(entry.entityId, cloneHistoryValue(entry.component));\n }\n\n nextComponents.set(componentBlock.componentType, store);\n }\n\n this.components = nextComponents;\n\n const selectionState = this.getSelectionState();\n const nextSelectedEntityId =\n snapshot.selectedEntityId !== null &&\n this.entities.has(snapshot.selectedEntityId)\n ? snapshot.selectedEntityId\n : null;\n\n if (selectionState) {\n selectionState.selectedEntityId = nextSelectedEntityId;\n }\n\n const selectionChanged = previousSelectedEntityId !== nextSelectedEntityId;\n\n if (selectionChanged) {\n for (const listener of this.selectionListeners) {\n listener(nextSelectedEntityId);\n }\n }\n\n this.emitStoreChanged();\n }\n\n private emitStoreChanged(): void {\n for (const listener of this.storeListeners) {\n listener();\n }\n }\n}\n","/**\n * Snapshot-space entity-id walking/remapping.\n *\n * This module is the single source of truth for WHERE entity ids live inside\n * a serialized world snapshot:\n * - `ParentId.value`\n * - `ScriptComponent.entries[].data` EntityInput (`{type:\"entity\", value}`)\n * and ComponentInput (`{type:\"component\", value:{entityId, …}}`)\n * - `InstancedMeshComponent.instanceEntityIds[]`\n * - `InstanceSlotComponent.groupEntityId`\n *\n * Any new id-bearing component field must be added here — serialization,\n * instantiation and the override differ all route through this walker.\n */\n\nexport type SubtreeSnapshot = {\n entities: number[];\n components: Array<{\n component: string;\n entries: Array<{ entityId: number; value: unknown }>;\n }>;\n};\n\nexport type ExternalRefWarning = {\n /** Entity id (in the INPUT snapshot's id space) holding the reference. */\n entityId: number;\n component: string;\n /** Slash-separated path of the reference inside the component value. */\n path: string;\n /** The referenced entity id that falls outside the id map. */\n targetId: number;\n};\n\nexport type RemapSnapshotOptions = {\n /**\n * What to do with references to entities NOT present in the id map:\n * - \"null\": replace the reference with null and record a warning\n * (prefab-file serialization — external refs must not leak).\n * - \"keep\": leave the raw id untouched and record a warning.\n * Default: \"keep\".\n */\n externalRefPolicy?: \"null\" | \"keep\";\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n\nfunction remapScriptData(\n data: Record<string, unknown>,\n idMap: Map<number, number>,\n nullExternal: boolean,\n onExternal: (path: string, targetId: number) => void,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n const record = asRecord(value);\n if (!record) {\n result[key] = value;\n continue;\n }\n\n if (record.type === \"entity\" && typeof record.value === \"number\") {\n const mapped = idMap.get(record.value);\n if (mapped !== undefined) {\n result[key] = { ...record, value: mapped };\n } else {\n onExternal(`data/${key}`, record.value);\n result[key] = nullExternal ? { ...record, value: null } : value;\n }\n continue;\n }\n\n const componentRef = asRecord(record.value);\n if (\n record.type === \"component\" &&\n componentRef &&\n typeof componentRef.entityId === \"number\"\n ) {\n const mapped = idMap.get(componentRef.entityId);\n if (mapped !== undefined) {\n result[key] = {\n ...record,\n value: { ...componentRef, entityId: mapped },\n };\n } else {\n onExternal(`data/${key}`, componentRef.entityId);\n result[key] = nullExternal ? { ...record, value: null } : value;\n }\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Return a deep-cloned snapshot with every entity id (entity list, entry\n * keys, and all id-bearing component fields) remapped through `idMap`.\n * References to ids missing from the map follow `externalRefPolicy` and are\n * reported in `warnings` (with ids in the INPUT snapshot's id space).\n */\nexport function remapSnapshotEntityIds(\n snapshot: SubtreeSnapshot,\n idMap: Map<number, number>,\n options?: RemapSnapshotOptions,\n): { snapshot: SubtreeSnapshot; warnings: ExternalRefWarning[] } {\n const nullExternal = options?.externalRefPolicy === \"null\";\n const warnings: ExternalRefWarning[] = [];\n\n const entities = snapshot.entities.map(\n (entityId) => idMap.get(entityId) ?? entityId,\n );\n\n const components = snapshot.components.map((block) => {\n const entries = block.entries.map((entry) => {\n const sourceEntityId = entry.entityId;\n const mappedEntityId = idMap.get(sourceEntityId) ?? sourceEntityId;\n const warn = (path: string, targetId: number) => {\n warnings.push({\n entityId: sourceEntityId,\n component: block.component,\n path,\n targetId,\n });\n };\n\n // Deep clone so callers never share references with the input.\n let value: unknown = structuredClone(entry.value);\n const record = asRecord(value);\n\n if (block.component === \"ParentId\" && record) {\n if (typeof record.value === \"number\") {\n const mapped = idMap.get(record.value);\n if (mapped !== undefined) {\n record.value = mapped;\n } else {\n warn(\"value\", record.value);\n if (nullExternal) {\n record.value = null;\n }\n }\n }\n } else if (block.component === \"ScriptComponent\" && record) {\n if (Array.isArray(record.entries)) {\n record.entries = record.entries.map((rawEntry, index) => {\n const entryRecord = asRecord(rawEntry);\n if (!entryRecord) {\n return rawEntry;\n }\n const data = asRecord(entryRecord.data);\n if (!data) {\n return rawEntry;\n }\n return {\n ...entryRecord,\n data: remapScriptData(data, idMap, nullExternal, (path, target) =>\n warn(`entries/${index}/${path}`, target),\n ),\n };\n });\n }\n } else if (block.component === \"InstancedMeshComponent\" && record) {\n if (Array.isArray(record.instanceEntityIds)) {\n const remapped: number[] = [];\n record.instanceEntityIds.forEach((rawId, index) => {\n if (typeof rawId !== \"number\") {\n return;\n }\n const mapped = idMap.get(rawId);\n if (mapped !== undefined) {\n remapped.push(mapped);\n } else {\n warn(`instanceEntityIds/${index}`, rawId);\n if (!nullExternal) {\n remapped.push(rawId);\n }\n }\n });\n record.instanceEntityIds = remapped;\n }\n } else if (block.component === \"InstanceSlotComponent\" && record) {\n if (\n typeof record.groupEntityId === \"number\" &&\n record.groupEntityId !== -1\n ) {\n const mapped = idMap.get(record.groupEntityId);\n if (mapped !== undefined) {\n record.groupEntityId = mapped;\n } else {\n warn(\"groupEntityId\", record.groupEntityId);\n if (nullExternal) {\n record.groupEntityId = -1;\n }\n }\n }\n }\n\n value = record ?? value;\n return { entityId: mappedEntityId, value };\n });\n\n return { component: block.component, entries };\n });\n\n return { snapshot: { entities, components }, warnings };\n}\n","/**\n * Pure JSON-space prefab patching: apply a nested prefab's NEW definition to\n * every top-level-relative instance region inside a HOST document snapshot,\n * honoring the region's stored per-property overrides. This is how edits to\n * a child prefab cascade through the `.prefab` files that nest it (no live\n * world exists for files). Reused later by `.scene` assets.\n *\n * Trust model: the region's stored override list (refreshed at every host\n * save with `+node` addition markers) IS the user state — no old base is\n * needed. Consequently the operation is idempotent: re-applying the same\n * definition yields `changed: false`.\n */\n\nimport {\n ADDED_NODE_MARKER_COMPONENT,\n buildNodeKeyMapsFromSnapshot,\n collectSnapshotSubtreeIds,\n findTopLevelNestedRegions,\n NODE_KEY_SEPARATOR,\n} from \"./nodeKeys\";\nimport {\n canonicalizeComponentValue,\n computeInstanceOverrides,\n decanonicalizeComponentValue,\n groupOverridePaths,\n indexSnapshotByEntity,\n mergeComponentValue,\n OVERRIDE_DIFF_EXCLUDED_COMPONENTS,\n OVERRIDE_ROOT_EXCLUDED_COMPONENTS,\n} from \"./overrides\";\nimport {\n remapSnapshotEntityIds,\n type SubtreeSnapshot,\n} from \"./snapshotIdUtils\";\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 => structuredClone(value);\n\nconst stableStringify = (value: unknown): string => {\n try {\n return JSON.stringify(value);\n } catch {\n return \"\";\n }\n};\n\n/** Mutable columnar accessors over a host snapshot. */\nfunction getBlock(\n snapshot: SubtreeSnapshot,\n component: string,\n): { component: string; entries: Array<{ entityId: number; value: unknown }> } {\n let block = snapshot.components.find((b) => b.component === component);\n if (!block) {\n block = { component, entries: [] };\n snapshot.components.push(block);\n }\n return block;\n}\n\nfunction setEntry(\n snapshot: SubtreeSnapshot,\n component: string,\n entityId: number,\n value: unknown,\n): void {\n const block = getBlock(snapshot, component);\n const entry = block.entries.find((e) => e.entityId === entityId);\n if (entry) {\n entry.value = value;\n } else {\n block.entries.push({ entityId, value });\n block.entries.sort((a, b) => a.entityId - b.entityId);\n }\n}\n\nfunction deleteEntities(\n snapshot: SubtreeSnapshot,\n entityIds: Set<number>,\n): void {\n snapshot.entities = snapshot.entities.filter((id) => !entityIds.has(id));\n snapshot.components = snapshot.components\n .map((block) => ({\n component: block.component,\n entries: block.entries.filter((e) => !entityIds.has(e.entityId)),\n }))\n .filter((block) => block.entries.length > 0);\n}\n\n/** Extract a region of the host as a standalone doc (ids kept host-space). */\nfunction extractRegionDoc(\n hostSnapshot: SubtreeSnapshot,\n regionIds: number[],\n): SubtreeSnapshot {\n const idSet = new Set(regionIds);\n return {\n entities: regionIds.slice(),\n components: hostSnapshot.components\n .map((block) => ({\n component: block.component,\n entries: block.entries.filter((e) => idSet.has(e.entityId)),\n }))\n .filter((block) => block.entries.length > 0),\n };\n}\n\nexport type ApplyPrefabToSnapshotResult = {\n snapshot: SubtreeSnapshot;\n changed: boolean;\n};\n\n/**\n * Patch every top-level-relative nested instance of `nestedUrl` inside\n * `hostSnapshot` with `newNestedSnapshot`. Deeper nesting (B inside C inside\n * A) is NOT touched here — it cascades through C's own file.\n */\nexport function applyPrefabToSnapshotInstances(\n hostSnapshot: SubtreeSnapshot,\n nestedUrl: string,\n newNestedSnapshot: SubtreeSnapshot,\n): ApplyPrefabToSnapshotResult {\n const host = clone(hostSnapshot);\n const newMaps = buildNodeKeyMapsFromSnapshot(newNestedSnapshot);\n const newByEntity = indexSnapshotByEntity(newNestedSnapshot);\n if (!newMaps.rootKey) {\n return { snapshot: host, changed: false };\n }\n\n let changed = false;\n\n const regions = findTopLevelNestedRegions(host).filter(\n (region) => region.url === nestedUrl,\n );\n\n for (const region of regions) {\n const before = stableStringify(\n extractRegionDoc(host, collectSnapshotSubtreeIds(host, region.rootEntityId)),\n );\n\n patchRegion(host, region.rootEntityId, region.overrides, {\n newSnapshot: newNestedSnapshot,\n newMaps,\n newByEntity,\n });\n\n const after = stableStringify(\n extractRegionDoc(host, collectSnapshotSubtreeIds(host, region.rootEntityId)),\n );\n if (before !== after) {\n changed = true;\n }\n }\n\n return { snapshot: host, changed };\n}\n\nfunction patchRegion(\n host: SubtreeSnapshot,\n regionRootId: number,\n storedOverrides: string[],\n file: {\n newSnapshot: SubtreeSnapshot;\n newMaps: ReturnType<typeof buildNodeKeyMapsFromSnapshot>;\n newByEntity: Map<number, Map<string, unknown>>;\n },\n): void {\n const { newSnapshot, newMaps, newByEntity } = file;\n\n // Region as a standalone scoped doc: the region root is the scope root,\n // so its keys are B-relative — directly comparable with the new file's.\n const regionIds = collectSnapshotSubtreeIds(host, regionRootId);\n const regionDoc = extractRegionDoc(host, regionIds);\n const regionMaps = buildNodeKeyMapsFromSnapshot(regionDoc, {\n scopeRootEntityId: regionRootId,\n });\n const regionByEntity = indexSnapshotByEntity(regionDoc);\n\n const grouped = groupOverridePaths(storedOverrides);\n const overridePathsFor = (key: string, component: string) =>\n grouped.get(key)?.get(component);\n const isMarkedAddition = (key: string) =>\n Boolean(grouped.get(key)?.get(ADDED_NODE_MARKER_COMPONENT));\n\n // ── Values + structure for surviving/added nodes ──────────────────────────\n const parentBlockNew = newSnapshot.components.find(\n (b) => b.component === \"ParentId\",\n );\n\n // key → host entity id for everything currently in the region.\n const keyToHostId = new Map<string, number>();\n for (const [hostId, key] of regionMaps.idToKey) {\n keyToHostId.set(key, hostId);\n }\n\n // 1) Additions: new-file keys absent from the region.\n const addedFileIds = [...newMaps.keyToId.entries()]\n .filter(([key]) => !keyToHostId.has(key))\n .map(([, fileId]) => fileId);\n\n if (addedFileIds.length > 0) {\n let nextHostId = Math.max(0, ...host.entities) + 1;\n const addedSet = new Set(addedFileIds);\n const idMap = new Map<number, number>();\n\n // Surviving nodes keep their host ids so internal refs stay coherent.\n for (const [key, fileId] of newMaps.keyToId) {\n const hostId = keyToHostId.get(key);\n if (hostId !== undefined) {\n idMap.set(fileId, hostId);\n }\n }\n for (const fileId of addedFileIds) {\n idMap.set(fileId, nextHostId);\n nextHostId += 1;\n }\n\n const addedSub: SubtreeSnapshot = {\n entities: newSnapshot.entities.filter((id) => addedSet.has(id)),\n components: newSnapshot.components\n .map((block) => ({\n component: block.component,\n entries: block.entries.filter((e) => addedSet.has(e.entityId)),\n }))\n .filter((block) => block.entries.length > 0),\n };\n\n const { snapshot: remapped } = remapSnapshotEntityIds(addedSub, idMap, {\n externalRefPolicy: \"null\",\n });\n\n host.entities = [...host.entities, ...remapped.entities];\n for (const block of remapped.components) {\n for (const entry of block.entries) {\n setEntry(host, block.component, entry.entityId, entry.value);\n }\n }\n\n // Attach added top-edges whose file parent is a surviving node, or the\n // region root when the parent vanished.\n for (const fileId of addedFileIds) {\n const hostId = idMap.get(fileId) as number;\n const parentValue = asRecord(\n parentBlockNew?.entries.find((e) => e.entityId === fileId)?.value,\n )?.value;\n if (typeof parentValue === \"number\" && !addedSet.has(parentValue)) {\n const parentKey = newMaps.idToKey.get(parentValue);\n const parentHost = parentKey ? keyToHostId.get(parentKey) : undefined;\n setEntry(host, \"ParentId\", hostId, {\n __type: \"ParentId\",\n value: parentHost ?? regionRootId,\n });\n }\n const key = newMaps.idToKey.get(fileId);\n if (key) {\n keyToHostId.set(key, hostId);\n }\n }\n }\n\n // 2) Value merge for surviving nodes (root exclusions relative to the\n // REGION scope: the region root's Transform/Name/ParentId are host data).\n for (const [key, fileId] of newMaps.keyToId) {\n const hostId = keyToHostId.get(key);\n if (hostId === undefined) continue;\n\n const isRegionRoot = key === newMaps.rootKey;\n const fileComponents = newByEntity.get(fileId);\n if (!fileComponents) continue;\n\n const regionEntityComponents = regionByEntity.get(hostId);\n\n for (const [componentName, fileRaw] of fileComponents) {\n if (OVERRIDE_DIFF_EXCLUDED_COMPONENTS.has(componentName)) continue;\n if (isRegionRoot && OVERRIDE_ROOT_EXCLUDED_COMPONENTS.has(componentName))\n continue;\n // Non-root ParentId IS data here (pure JSON): merged below like any\n // component — but only when both sides exist; structure for added\n // nodes was handled above.\n\n const fileCanonical = canonicalizeComponentValue(\n componentName,\n fileRaw,\n newMaps.idToKey,\n );\n const regionRaw = regionEntityComponents?.get(componentName);\n const regionCanonical =\n regionRaw === undefined\n ? undefined\n : canonicalizeComponentValue(\n componentName,\n regionRaw,\n regionMaps.idToKey,\n );\n\n const merged =\n regionCanonical === undefined\n ? fileCanonical\n : mergeComponentValue(\n fileCanonical,\n regionCanonical,\n overridePathsFor(key, componentName),\n );\n\n if (\n regionCanonical !== undefined &&\n stableStringify(merged) === stableStringify(regionCanonical)\n ) {\n continue;\n }\n\n // Decanonicalize into HOST-id space via the region key map (external\n // refs inside overrides are host-space raw ids — preserved verbatim).\n const hostValue = decanonicalizeComponentValue(merged, keyToHostId);\n setEntry(host, componentName, hostId, hostValue);\n }\n }\n\n // 3) Removals: region keys absent from the new file, unless the host\n // authored them (+node marker). Marked survivors whose parent vanished\n // re-parent to the region root.\n const removedHostIds = new Set<number>();\n for (const [key, hostId] of keyToHostId) {\n if (newMaps.keyToId.has(key)) continue;\n if (isMarkedAddition(key)) continue;\n // A marker may sit on an ANCESTOR host-added node; only unmarked,\n // file-unknown nodes are removed.\n removedHostIds.add(hostId);\n }\n\n if (removedHostIds.size > 0) {\n // Re-parent marked/host-authored survivors whose parent is being removed.\n const regionIdSet = new Set(regionIds);\n const parentBlockHost = host.components.find(\n (b) => b.component === \"ParentId\",\n );\n for (const entry of parentBlockHost?.entries ?? []) {\n const record = asRecord(entry.value);\n if (\n !removedHostIds.has(entry.entityId) &&\n regionIdSet.has(entry.entityId) &&\n record &&\n typeof record.value === \"number\" &&\n removedHostIds.has(record.value)\n ) {\n record.value = regionRootId;\n }\n }\n deleteEntities(host, removedHostIds);\n }\n\n // 4) Refresh the region root's stored overrides against the new file\n // (with addition markers) so the next patch trusts an accurate list.\n const refreshedRegionIds = collectSnapshotSubtreeIds(host, regionRootId);\n const refreshedDoc = extractRegionDoc(host, refreshedRegionIds);\n const refreshedOverrides = computeInstanceOverrides(\n newSnapshot,\n refreshedDoc,\n { emitAdditionMarkers: true },\n );\n const instanceEntry = asRecord(\n host.components\n .find((b) => b.component === \"PrefabInstance\")\n ?.entries.find((e) => e.entityId === regionRootId)?.value,\n );\n if (instanceEntry) {\n instanceEntry.overrides = refreshedOverrides;\n }\n}\n","import { findTopLevelNestedRegions } from \"./nodeKeys\";\nimport type { SubtreeSnapshot } from \"./snapshotIdUtils\";\n\n/**\n * Direct (top-level-relative) prefab urls a document depends on — the edges\n * of the nesting graph. Deeper nesting is reached transitively through each\n * dependency's own file, never directly.\n */\nexport function collectDirectPrefabDependencies(\n snapshot: SubtreeSnapshot,\n): string[] {\n const urls = new Set<string>();\n for (const region of findTopLevelNestedRegions(snapshot)) {\n urls.add(region.url);\n }\n return [...urls];\n}\n","import type { EntityId } from \"../types\";\nimport type { World } from \"../World\";\nimport { collectEntitySubtree } from \"./collectEntitySubtree\";\nimport {\n remapSnapshotEntityIds,\n type ExternalRefWarning,\n type SubtreeSnapshot,\n} from \"./snapshotIdUtils\";\n\n/**\n * Components that never belong inside a prefab/scene-subtree file:\n * scene singletons and editor/session-local state. `PrefabInstance` is NOT\n * excluded wholesale — nested instance links serialize into the file; only\n * the SCOPE ROOT's own link is stripped (the file must not claim to be an\n * instance of anything — that would be a prefab variant, unsupported).\n */\nconst SUBTREE_EXCLUDED_COMPONENTS = new Set([\n \"Environment\",\n \"Postprocessing\",\n \"SelectionTransformState\",\n]);\n\nexport type SerializeEntitySubtreeResult = {\n snapshot: SubtreeSnapshot;\n /**\n * References that pointed OUTSIDE the subtree and were nulled out\n * (ids are LIVE world ids so callers can name the offending entities).\n * The root's own external parent link is nulled silently — it is expected.\n */\n warnings: ExternalRefWarning[];\n /** Component types stripped because they are scene singletons. */\n strippedComponents: string[];\n};\n\n/**\n * Serialize `rootId` + all descendants into a self-contained snapshot:\n * entity ids renumbered 1..N in BFS parent-first order, all internal id\n * references remapped, external references nulled + reported, root ParentId\n * forced to null. The result is directly consumable by\n * `hydrateWorldFromSnapshotDetailed` / `instantiateSubtree`.\n */\nexport function serializeEntitySubtree(\n world: World,\n rootId: EntityId,\n options?: { maxDepth?: number },\n): SerializeEntitySubtreeResult {\n const orderedIds = collectEntitySubtree(world, [rootId]);\n const raw = world.getEntitiesSnapshot(orderedIds, options?.maxDepth ?? 10);\n\n const strippedComponents: string[] = [];\n const components = raw.components.filter((block) => {\n if (SUBTREE_EXCLUDED_COMPONENTS.has(block.component)) {\n strippedComponents.push(block.component);\n return false;\n }\n return true;\n });\n\n // Renumber 1..N in BFS parent-first order for deterministic, diff-friendly\n // files (raw.entities is numerically sorted — use the traversal order).\n const idMap = new Map<number, number>();\n orderedIds.forEach((liveId, index) => {\n idMap.set(liveId, index + 1);\n });\n\n const { snapshot, warnings } = remapSnapshotEntityIds(\n { entities: orderedIds.slice(), components },\n idMap,\n { externalRefPolicy: \"null\" },\n );\n\n // The root's parent naturally lives outside the subtree: null it silently.\n const rootFileId = 1;\n const parentBlock = snapshot.components.find(\n (block) => block.component === \"ParentId\",\n );\n const rootParentEntry = parentBlock?.entries.find(\n (entry) => entry.entityId === rootFileId,\n );\n if (\n rootParentEntry &&\n rootParentEntry.value !== null &&\n typeof rootParentEntry.value === \"object\"\n ) {\n (rootParentEntry.value as Record<string, unknown>).value = null;\n }\n\n // Strip the SCOPE ROOT's own PrefabInstance (the file defines the prefab,\n // it isn't an instance of one); nested instance links stay.\n const prefabInstanceBlock = snapshot.components.find(\n (block) => block.component === \"PrefabInstance\",\n );\n if (prefabInstanceBlock) {\n prefabInstanceBlock.entries = prefabInstanceBlock.entries.filter(\n (entry) => entry.entityId !== rootFileId,\n );\n if (prefabInstanceBlock.entries.length === 0) {\n snapshot.components = snapshot.components.filter(\n (block) => block !== prefabInstanceBlock,\n );\n }\n }\n\n const filteredWarnings = warnings.filter(\n (warning) =>\n !(warning.component === \"ParentId\" && warning.entityId === rootId),\n );\n\n return { snapshot, warnings: filteredWarnings, strippedComponents };\n}\n"]}