@relu-interactives/spatial-ecs 0.2.2

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 (308) hide show
  1. package/README.md +125 -0
  2. package/dist/System-rXAmagXA.d.cts +659 -0
  3. package/dist/System-rXAmagXA.d.ts +659 -0
  4. package/dist/Video-CDemv74U.d.cts +1261 -0
  5. package/dist/Video-ChKV1UI7.d.ts +1261 -0
  6. package/dist/assets/draco/draco_decoder.js +34 -0
  7. package/dist/assets/draco/draco_decoder.wasm +0 -0
  8. package/dist/assets/draco/draco_wasm_wrapper.js +117 -0
  9. package/dist/chunk-AYEF3X2P.js +223 -0
  10. package/dist/chunk-AYEF3X2P.js.map +1 -0
  11. package/dist/chunk-MAWBTMCG.js +1722 -0
  12. package/dist/chunk-MAWBTMCG.js.map +1 -0
  13. package/dist/chunk-NFDTIYR4.js +248 -0
  14. package/dist/chunk-NFDTIYR4.js.map +1 -0
  15. package/dist/chunk-OY7ZODZP.js +16 -0
  16. package/dist/chunk-OY7ZODZP.js.map +1 -0
  17. package/dist/chunk-P2YDX5DB.js +3304 -0
  18. package/dist/chunk-P2YDX5DB.js.map +1 -0
  19. package/dist/chunk-QHILSPT4.js +3 -0
  20. package/dist/chunk-QHILSPT4.js.map +1 -0
  21. package/dist/chunk-XWIEEJ7Z.js +1315 -0
  22. package/dist/chunk-XWIEEJ7Z.js.map +1 -0
  23. package/dist/components/index.cjs +1745 -0
  24. package/dist/components/index.cjs.map +1 -0
  25. package/dist/components/index.d.cts +4 -0
  26. package/dist/components/index.d.ts +4 -0
  27. package/dist/components/index.js +4 -0
  28. package/dist/components/index.js.map +1 -0
  29. package/dist/docs/api/Behaviour/classes/Behaviour.md +554 -0
  30. package/dist/docs/api/Behaviour/index.md +15 -0
  31. package/dist/docs/api/Component/classes/Component.md +57 -0
  32. package/dist/docs/api/Component/index.md +15 -0
  33. package/dist/docs/api/components/classes/AnimationComponent.md +318 -0
  34. package/dist/docs/api/components/classes/AudioComponent.md +114 -0
  35. package/dist/docs/api/components/classes/CameraComponent.md +59 -0
  36. package/dist/docs/api/components/classes/EntityType.md +48 -0
  37. package/dist/docs/api/components/classes/Environment.md +47 -0
  38. package/dist/docs/api/components/classes/ImageComponent.md +57 -0
  39. package/dist/docs/api/components/classes/ImageTarget.md +60 -0
  40. package/dist/docs/api/components/classes/ImageTargetAnchor.md +48 -0
  41. package/dist/docs/api/components/classes/LightComponent.md +70 -0
  42. package/dist/docs/api/components/classes/MaterialComponent.md +181 -0
  43. package/dist/docs/api/components/classes/MeshComponent.md +48 -0
  44. package/dist/docs/api/components/classes/MeshGeometryComponent.md +64 -0
  45. package/dist/docs/api/components/classes/ModelComponent.md +49 -0
  46. package/dist/docs/api/components/classes/Name.md +46 -0
  47. package/dist/docs/api/components/classes/Object3DRef.md +54 -0
  48. package/dist/docs/api/components/classes/ParentId.md +47 -0
  49. package/dist/docs/api/components/classes/PhysicsComponent.md +82 -0
  50. package/dist/docs/api/components/classes/Postprocessing.md +49 -0
  51. package/dist/docs/api/components/classes/ScriptComponent.md +54 -0
  52. package/dist/docs/api/components/classes/Selectable.md +46 -0
  53. package/dist/docs/api/components/classes/SelectionTransformState.md +54 -0
  54. package/dist/docs/api/components/classes/SpriteComponent.md +55 -0
  55. package/dist/docs/api/components/classes/TransformComponent.md +197 -0
  56. package/dist/docs/api/components/classes/VideoComponent.md +123 -0
  57. package/dist/docs/api/components/functions/normalizePhysicsState.md +23 -0
  58. package/dist/docs/api/components/index.md +94 -0
  59. package/dist/docs/api/components/type-aliases/AnimationComponentOptions.md +42 -0
  60. package/dist/docs/api/components/type-aliases/CameraComponentOptions.md +45 -0
  61. package/dist/docs/api/components/type-aliases/CameraProjection.md +15 -0
  62. package/dist/docs/api/components/type-aliases/CameraRuntimeType.md +15 -0
  63. package/dist/docs/api/components/type-aliases/ColliderShape.md +15 -0
  64. package/dist/docs/api/components/type-aliases/ColliderState.md +62 -0
  65. package/dist/docs/api/components/type-aliases/CubeMeshParameters.md +27 -0
  66. package/dist/docs/api/components/type-aliases/EditableMeshObjectKind.md +15 -0
  67. package/dist/docs/api/components/type-aliases/EnvironmentFogState.md +37 -0
  68. package/dist/docs/api/components/type-aliases/EnvironmentFogType.md +15 -0
  69. package/dist/docs/api/components/type-aliases/EnvironmentGradientEffect.md +15 -0
  70. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxState.md +34 -0
  71. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxType.md +15 -0
  72. package/dist/docs/api/components/type-aliases/EnvironmentState.md +29 -0
  73. package/dist/docs/api/components/type-aliases/ImageTargetAnchorOptions.md +25 -0
  74. package/dist/docs/api/components/type-aliases/ImageTargetReference.md +33 -0
  75. package/dist/docs/api/components/type-aliases/LightValueState.md +41 -0
  76. package/dist/docs/api/components/type-aliases/MaterialTypeValue.md +15 -0
  77. package/dist/docs/api/components/type-aliases/MaterialValueState.md +75 -0
  78. package/dist/docs/api/components/type-aliases/MeshGeometryParameters.md +13 -0
  79. package/dist/docs/api/components/type-aliases/MeshGeometryParametersByKind.md +33 -0
  80. package/dist/docs/api/components/type-aliases/PhysicsState.md +25 -0
  81. package/dist/docs/api/components/type-aliases/PlaneMeshParameters.md +25 -0
  82. package/dist/docs/api/components/type-aliases/PostprocessingState.md +164 -0
  83. package/dist/docs/api/components/type-aliases/RadiusHeightMeshParameters.md +25 -0
  84. package/dist/docs/api/components/type-aliases/RadiusMeshParameters.md +23 -0
  85. package/dist/docs/api/components/type-aliases/RigidbodyState.md +53 -0
  86. package/dist/docs/api/components/type-aliases/RigidbodyType.md +19 -0
  87. package/dist/docs/api/components/type-aliases/ScriptEntry.md +38 -0
  88. package/dist/docs/api/components/type-aliases/TextureFilteringValue.md +15 -0
  89. package/dist/docs/api/components/type-aliases/TransformData.md +27 -0
  90. package/dist/docs/api/components/type-aliases/TransformModeValue.md +15 -0
  91. package/dist/docs/api/components/type-aliases/TransformSpaceValue.md +15 -0
  92. package/dist/docs/api/components/type-aliases/Vec3.md +27 -0
  93. package/dist/docs/api/components/variables/DEFAULT_COLLIDER_STATE.md +13 -0
  94. package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_STATE.md +13 -0
  95. package/dist/docs/api/components/variables/DEFAULT_MESH_GEOMETRY_PARAMETERS.md +13 -0
  96. package/dist/docs/api/components/variables/DEFAULT_PHYSICS_STATE.md +13 -0
  97. package/dist/docs/api/components/variables/DEFAULT_POSTPROCESSING_STATE.md +13 -0
  98. package/dist/docs/api/components/variables/DEFAULT_RIGIDBODY_STATE.md +13 -0
  99. package/dist/docs/api/index/classes/AnimationStateMachine.md +201 -0
  100. package/dist/docs/api/index/classes/AnimationStateManager.md +253 -0
  101. package/dist/docs/api/index/classes/AnimationSystem.md +68 -0
  102. package/dist/docs/api/index/classes/AudioSystem.md +98 -0
  103. package/dist/docs/api/index/classes/CameraSyncSystem.md +49 -0
  104. package/dist/docs/api/index/classes/EnvironmentSyncSystem.md +75 -0
  105. package/dist/docs/api/index/classes/InputSystem.md +449 -0
  106. package/dist/docs/api/index/classes/LightSyncSystem.md +49 -0
  107. package/dist/docs/api/index/classes/MaterialSyncSystem.md +67 -0
  108. package/dist/docs/api/index/classes/MeshGeometrySystem.md +49 -0
  109. package/dist/docs/api/index/classes/ObjectManagementSystem.md +298 -0
  110. package/dist/docs/api/index/classes/ObjectVisibilitySystem.md +49 -0
  111. package/dist/docs/api/index/classes/PhysicsSyncSystem.md +83 -0
  112. package/dist/docs/api/index/classes/PostprocessingSyncSystem.md +80 -0
  113. package/dist/docs/api/index/classes/RenderSystem.md +64 -0
  114. package/dist/docs/api/index/classes/ScriptBehaviourSystem.md +83 -0
  115. package/dist/docs/api/index/classes/TransformSyncSystem.md +49 -0
  116. package/dist/docs/api/index/classes/VideoSystem.md +97 -0
  117. package/dist/docs/api/index/classes/World.md +1405 -0
  118. package/dist/docs/api/index/functions/createAnimationComponent.md +28 -0
  119. package/dist/docs/api/index/functions/createAudioComponent.md +32 -0
  120. package/dist/docs/api/index/functions/createCameraComponent.md +28 -0
  121. package/dist/docs/api/index/functions/createEntityTypeComponent.md +28 -0
  122. package/dist/docs/api/index/functions/createEnvironmentComponent.md +28 -0
  123. package/dist/docs/api/index/functions/createImageComponent.md +28 -0
  124. package/dist/docs/api/index/functions/createImageTargetAnchorComponent.md +28 -0
  125. package/dist/docs/api/index/functions/createImageTargetComponent.md +28 -0
  126. package/dist/docs/api/index/functions/createLightComponent.md +28 -0
  127. package/dist/docs/api/index/functions/createMaterialComponent.md +28 -0
  128. package/dist/docs/api/index/functions/createMeshComponent.md +28 -0
  129. package/dist/docs/api/index/functions/createMeshGeometryComponent.md +28 -0
  130. package/dist/docs/api/index/functions/createModelComponent.md +28 -0
  131. package/dist/docs/api/index/functions/createNameComponent.md +28 -0
  132. package/dist/docs/api/index/functions/createObject3DRefComponent.md +28 -0
  133. package/dist/docs/api/index/functions/createParentIdComponent.md +28 -0
  134. package/dist/docs/api/index/functions/createPhysicsComponent.md +30 -0
  135. package/dist/docs/api/index/functions/createPostprocessingComponent.md +28 -0
  136. package/dist/docs/api/index/functions/createScriptComponent.md +28 -0
  137. package/dist/docs/api/index/functions/createSelectableComponent.md +28 -0
  138. package/dist/docs/api/index/functions/createSelectionTransformStateComponent.md +28 -0
  139. package/dist/docs/api/index/functions/createSpriteComponent.md +28 -0
  140. package/dist/docs/api/index/functions/createTransformComponent.md +28 -0
  141. package/dist/docs/api/index/functions/createVideoComponent.md +28 -0
  142. package/dist/docs/api/index/functions/hydrateWorldFromSnapshot.md +28 -0
  143. package/dist/docs/api/index/functions/hydrateWorldFromSnapshotDetailed.md +28 -0
  144. package/dist/docs/api/index/functions/registerDefaultComponentFactories.md +23 -0
  145. package/dist/docs/api/index/functions/registerDefaultFactories.md +23 -0
  146. package/dist/docs/api/index/index.md +249 -0
  147. package/dist/docs/api/index/interfaces/EcsSystem.md +50 -0
  148. package/dist/docs/api/index/interfaces/StateMachine.md +26 -0
  149. package/dist/docs/api/index/type-aliases/AnimationStateCallbacks.md +25 -0
  150. package/dist/docs/api/index/type-aliases/ComponentFactory.md +25 -0
  151. package/dist/docs/api/index/type-aliases/EcsComponentFactoryKind.md +37 -0
  152. package/dist/docs/api/index/type-aliases/EcsWorldComponentSnapshot.md +26 -0
  153. package/dist/docs/api/index/type-aliases/EcsWorldStateSnapshotLike.md +25 -0
  154. package/dist/docs/api/index/type-aliases/HydrateWorldFromSnapshotResult.md +23 -0
  155. package/dist/docs/api/index/type-aliases/KeyboardKey.md +13 -0
  156. package/dist/docs/api/index/type-aliases/MouseButton.md +13 -0
  157. package/dist/docs/api/index/type-aliases/SelectionContext.md +31 -0
  158. package/dist/docs/api/index/variables/HYDRATABLE_ENTITY_KINDS.md +13 -0
  159. package/dist/docs/api/index/variables/KeyboardKeys.md +195 -0
  160. package/dist/docs/api/index.md +15 -0
  161. package/dist/docs/api/typedoc-sidebar.json +1 -0
  162. package/dist/docs/api/types/index.md +34 -0
  163. package/dist/docs/api/types/type-aliases/AssetInput.md +23 -0
  164. package/dist/docs/api/types/type-aliases/CheckboxInput.md +13 -0
  165. package/dist/docs/api/types/type-aliases/ColorInput.md +13 -0
  166. package/dist/docs/api/types/type-aliases/ComponentInput.md +52 -0
  167. package/dist/docs/api/types/type-aliases/ComponentKind.md +37 -0
  168. package/dist/docs/api/types/type-aliases/DropdownInput.md +23 -0
  169. package/dist/docs/api/types/type-aliases/DropdownOption.md +23 -0
  170. package/dist/docs/api/types/type-aliases/EcsEntityEditorKind.md +15 -0
  171. package/dist/docs/api/types/type-aliases/EcsEntityKind.md +35 -0
  172. package/dist/docs/api/types/type-aliases/EntityId.md +16 -0
  173. package/dist/docs/api/types/type-aliases/EntityInput.md +23 -0
  174. package/dist/docs/api/types/type-aliases/FloatInput.md +13 -0
  175. package/dist/docs/api/types/type-aliases/IntersectionResult.md +29 -0
  176. package/dist/docs/api/types/type-aliases/ParentLookup.md +26 -0
  177. package/dist/docs/api/types/type-aliases/SelectionListener.md +25 -0
  178. package/dist/docs/api/types/type-aliases/SliderInput.md +27 -0
  179. package/dist/docs/api/types/type-aliases/TextInput.md +13 -0
  180. package/dist/docs/api/types/type-aliases/ToggleInput.md +13 -0
  181. package/dist/docs/api/types/type-aliases/Vec3.md +23 -0
  182. package/dist/docs/api/types/type-aliases/Vector2Input.md +23 -0
  183. package/dist/docs/api/types/type-aliases/Vector3Input.md +25 -0
  184. package/dist/docs/api/types/type-aliases/WorldEntityView.md +17 -0
  185. package/dist/docs/guide/accessing-components.md +399 -0
  186. package/dist/docs/guide/authoring-a-behaviour.md +166 -0
  187. package/dist/docs/guide/behaviour-lifecycle.md +43 -0
  188. package/dist/docs/guide/component-catalog.md +59 -0
  189. package/dist/docs/guide/components/_sidebar.json +78 -0
  190. package/dist/docs/guide/components/animation.md +171 -0
  191. package/dist/docs/guide/components/audio.md +181 -0
  192. package/dist/docs/guide/components/camera.md +179 -0
  193. package/dist/docs/guide/components/entity-type.md +141 -0
  194. package/dist/docs/guide/components/image-target-anchor.md +103 -0
  195. package/dist/docs/guide/components/image-target.md +122 -0
  196. package/dist/docs/guide/components/image.md +146 -0
  197. package/dist/docs/guide/components/light.md +157 -0
  198. package/dist/docs/guide/components/material.md +161 -0
  199. package/dist/docs/guide/components/mesh-geometry.md +153 -0
  200. package/dist/docs/guide/components/mesh.md +151 -0
  201. package/dist/docs/guide/components/model.md +96 -0
  202. package/dist/docs/guide/components/name.md +121 -0
  203. package/dist/docs/guide/components/object3d-ref.md +115 -0
  204. package/dist/docs/guide/components/parent-id.md +108 -0
  205. package/dist/docs/guide/components/physics.md +163 -0
  206. package/dist/docs/guide/components/script.md +142 -0
  207. package/dist/docs/guide/components/sprite.md +155 -0
  208. package/dist/docs/guide/components/transform.md +155 -0
  209. package/dist/docs/guide/components/video.md +153 -0
  210. package/dist/docs/guide/concepts.md +34 -0
  211. package/dist/docs/guide/getting-started/creating-objects.md +50 -0
  212. package/dist/docs/guide/getting-started/editing-objects.md +62 -0
  213. package/dist/docs/guide/getting-started/editor/assets-browser.md +55 -0
  214. package/dist/docs/guide/getting-started/editor/hierarchy.md +47 -0
  215. package/dist/docs/guide/getting-started/editor/index.md +16 -0
  216. package/dist/docs/guide/getting-started/editor/inspector.md +36 -0
  217. package/dist/docs/guide/getting-started/editor/modules.md +35 -0
  218. package/dist/docs/guide/getting-started/editor/scene-inspector.md +64 -0
  219. package/dist/docs/guide/getting-started/editor/toolbar.md +39 -0
  220. package/dist/docs/guide/getting-started/editor/viewport.md +43 -0
  221. package/dist/docs/guide/getting-started/first-launch.md +17 -0
  222. package/dist/docs/guide/getting-started/index.md +37 -0
  223. package/dist/docs/guide/getting-started/installation.md +59 -0
  224. package/dist/docs/guide/getting-started/preview-and-test.md +55 -0
  225. package/dist/docs/guide/getting-started/project-types/3d.md +30 -0
  226. package/dist/docs/guide/getting-started/project-types/ar.md +6 -0
  227. package/dist/docs/guide/getting-started/project-types/face-tracking.md +6 -0
  228. package/dist/docs/guide/getting-started/project-types/image-tracking.md +42 -0
  229. package/dist/docs/guide/getting-started/project-types/index.md +25 -0
  230. package/dist/docs/guide/getting-started/project-types/vr.md +6 -0
  231. package/dist/docs/guide/getting-started/projects.md +53 -0
  232. package/dist/docs/guide/getting-started/shortcuts.md +43 -0
  233. package/dist/docs/guide/inspector-data-binding.md +367 -0
  234. package/dist/docs/guide/reading-input.md +202 -0
  235. package/dist/docs/guide/scene/environment.md +101 -0
  236. package/dist/docs/guide/scene/index.md +36 -0
  237. package/dist/docs/guide/scene/postprocessing.md +108 -0
  238. package/dist/docs/guide/spawning/ambient-light.md +28 -0
  239. package/dist/docs/guide/spawning/area-light.md +32 -0
  240. package/dist/docs/guide/spawning/audio.md +42 -0
  241. package/dist/docs/guide/spawning/camera.md +50 -0
  242. package/dist/docs/guide/spawning/capsule.md +29 -0
  243. package/dist/docs/guide/spawning/cube.md +31 -0
  244. package/dist/docs/guide/spawning/cylinder.md +29 -0
  245. package/dist/docs/guide/spawning/directional-light.md +32 -0
  246. package/dist/docs/guide/spawning/empty.md +31 -0
  247. package/dist/docs/guide/spawning/image-target.md +48 -0
  248. package/dist/docs/guide/spawning/image.md +33 -0
  249. package/dist/docs/guide/spawning/index.md +79 -0
  250. package/dist/docs/guide/spawning/model.md +31 -0
  251. package/dist/docs/guide/spawning/plane.md +31 -0
  252. package/dist/docs/guide/spawning/point-light.md +32 -0
  253. package/dist/docs/guide/spawning/sphere.md +29 -0
  254. package/dist/docs/guide/spawning/spot-light.md +32 -0
  255. package/dist/docs/guide/spawning/sprite.md +31 -0
  256. package/dist/docs/guide/spawning/video.md +53 -0
  257. package/dist/docs/guide/system-overview.md +73 -0
  258. package/dist/docs/guide/systems/_sidebar.json +66 -0
  259. package/dist/docs/guide/systems/animation-system.md +32 -0
  260. package/dist/docs/guide/systems/audio-system.md +28 -0
  261. package/dist/docs/guide/systems/camera-sync-system.md +31 -0
  262. package/dist/docs/guide/systems/environment-sync-system.md +31 -0
  263. package/dist/docs/guide/systems/input-system.md +217 -0
  264. package/dist/docs/guide/systems/light-sync-system.md +29 -0
  265. package/dist/docs/guide/systems/material-sync-system.md +32 -0
  266. package/dist/docs/guide/systems/mesh-geometry-system.md +40 -0
  267. package/dist/docs/guide/systems/object-management-system.md +38 -0
  268. package/dist/docs/guide/systems/object-visibility-system.md +26 -0
  269. package/dist/docs/guide/systems/physics-sync-system.md +56 -0
  270. package/dist/docs/guide/systems/postprocessing-sync-system.md +43 -0
  271. package/dist/docs/guide/systems/render-system.md +22 -0
  272. package/dist/docs/guide/systems/script-behaviour-system.md +59 -0
  273. package/dist/docs/guide/systems/transform-sync-system.md +29 -0
  274. package/dist/docs/guide/systems/video-system.md +30 -0
  275. package/dist/docs/guide/world-api.md +405 -0
  276. package/dist/factories/index.cjs +3077 -0
  277. package/dist/factories/index.cjs.map +1 -0
  278. package/dist/factories/index.d.cts +69 -0
  279. package/dist/factories/index.d.ts +69 -0
  280. package/dist/factories/index.js +6 -0
  281. package/dist/factories/index.js.map +1 -0
  282. package/dist/index-B4-YyUNR.d.cts +73 -0
  283. package/dist/index-BZUOKeTO.d.ts +73 -0
  284. package/dist/index.cjs +8584 -0
  285. package/dist/index.cjs.map +1 -0
  286. package/dist/index.d.cts +283 -0
  287. package/dist/index.d.ts +283 -0
  288. package/dist/index.js +1729 -0
  289. package/dist/index.js.map +1 -0
  290. package/dist/systems/index.cjs +5119 -0
  291. package/dist/systems/index.cjs.map +1 -0
  292. package/dist/systems/index.d.cts +200 -0
  293. package/dist/systems/index.d.ts +200 -0
  294. package/dist/systems/index.js +6 -0
  295. package/dist/systems/index.js.map +1 -0
  296. package/dist/types.cjs +4 -0
  297. package/dist/types.cjs.map +1 -0
  298. package/dist/types.d.cts +3 -0
  299. package/dist/types.d.ts +3 -0
  300. package/dist/types.js +3 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/worldSnapshotUtils.cjs +259 -0
  303. package/dist/worldSnapshotUtils.cjs.map +1 -0
  304. package/dist/worldSnapshotUtils.d.cts +3 -0
  305. package/dist/worldSnapshotUtils.d.ts +3 -0
  306. package/dist/worldSnapshotUtils.js +4 -0
  307. package/dist/worldSnapshotUtils.js.map +1 -0
  308. package/package.json +80 -0
@@ -0,0 +1,1722 @@
1
+ import { __export, __name, Component } from './chunk-OY7ZODZP.js';
2
+ import * as THREE4 from 'three';
3
+ import { Vector3, Euler, Quaternion } from 'three';
4
+
5
+ // core/components/index.ts
6
+ var components_exports = {};
7
+ __export(components_exports, {
8
+ AnimationComponent: () => AnimationComponent,
9
+ AudioComponent: () => AudioComponent,
10
+ CameraComponent: () => CameraComponent,
11
+ DEFAULT_COLLIDER_STATE: () => DEFAULT_COLLIDER_STATE,
12
+ DEFAULT_ENVIRONMENT_STATE: () => DEFAULT_ENVIRONMENT_STATE,
13
+ DEFAULT_MESH_GEOMETRY_PARAMETERS: () => DEFAULT_MESH_GEOMETRY_PARAMETERS,
14
+ DEFAULT_PHYSICS_STATE: () => DEFAULT_PHYSICS_STATE,
15
+ DEFAULT_POSTPROCESSING_STATE: () => DEFAULT_POSTPROCESSING_STATE,
16
+ DEFAULT_RIGIDBODY_STATE: () => DEFAULT_RIGIDBODY_STATE,
17
+ EntityType: () => EntityType,
18
+ Environment: () => Environment,
19
+ ImageComponent: () => ImageComponent,
20
+ ImageTarget: () => ImageTarget,
21
+ ImageTargetAnchor: () => ImageTargetAnchor,
22
+ LightComponent: () => LightComponent,
23
+ MaterialComponent: () => MaterialComponent,
24
+ MeshComponent: () => MeshComponent,
25
+ MeshGeometryComponent: () => MeshGeometryComponent,
26
+ ModelComponent: () => ModelComponent,
27
+ Name: () => Name,
28
+ Object3DRef: () => Object3DRef,
29
+ ParentId: () => ParentId,
30
+ PhysicsComponent: () => PhysicsComponent,
31
+ Postprocessing: () => Postprocessing,
32
+ ScriptComponent: () => ScriptComponent,
33
+ Selectable: () => Selectable,
34
+ SelectionTransformState: () => SelectionTransformState,
35
+ SpriteComponent: () => SpriteComponent,
36
+ TransformComponent: () => TransformComponent,
37
+ VideoComponent: () => VideoComponent,
38
+ normalizePhysicsState: () => normalizePhysicsState
39
+ });
40
+
41
+ // core/AnimationStateMachine.ts
42
+ var _AnimationStateMachine = class _AnimationStateMachine {
43
+ constructor(name, clip, callbacks = {}, loop = false, clipId = null) {
44
+ this.isPlaying = false;
45
+ this.isPaused = false;
46
+ this.name = name;
47
+ this.clip = clip;
48
+ this.clipId = clipId;
49
+ this.loop = loop;
50
+ this.callbacks = {
51
+ onStart: callbacks.onStart ?? (() => {
52
+ }),
53
+ onPlaying: callbacks.onPlaying ?? (() => {
54
+ }),
55
+ onEnd: callbacks.onEnd ?? (() => {
56
+ })
57
+ };
58
+ }
59
+ setCallbacks(callbacks) {
60
+ this.callbacks = {
61
+ onStart: callbacks.onStart ?? this.callbacks.onStart,
62
+ onPlaying: callbacks.onPlaying ?? this.callbacks.onPlaying,
63
+ onEnd: callbacks.onEnd ?? this.callbacks.onEnd
64
+ };
65
+ }
66
+ setLoop(loop) {
67
+ this.loop = loop;
68
+ }
69
+ onStart() {
70
+ this.callbacks.onStart();
71
+ }
72
+ onPlaying() {
73
+ this.callbacks.onPlaying();
74
+ }
75
+ onEnd() {
76
+ this.callbacks.onEnd();
77
+ }
78
+ play() {
79
+ const wasPlaying = this.isPlaying;
80
+ this.isPlaying = true;
81
+ this.isPaused = false;
82
+ if (!wasPlaying) {
83
+ this.onStart();
84
+ }
85
+ this.onPlaying();
86
+ }
87
+ pause() {
88
+ if (!this.isPlaying) {
89
+ return;
90
+ }
91
+ this.isPlaying = false;
92
+ this.isPaused = true;
93
+ }
94
+ stop() {
95
+ const shouldNotifyEnd = this.isPlaying || this.isPaused;
96
+ this.isPlaying = false;
97
+ this.isPaused = false;
98
+ if (shouldNotifyEnd) {
99
+ this.onEnd();
100
+ }
101
+ }
102
+ };
103
+ __name(_AnimationStateMachine, "AnimationStateMachine");
104
+ var AnimationStateMachine = _AnimationStateMachine;
105
+ var _AnimationStateManager = class _AnimationStateManager {
106
+ constructor() {
107
+ this.states = /* @__PURE__ */ new Map();
108
+ this.activeState = null;
109
+ }
110
+ addState(state) {
111
+ this.states.set(state.name, state);
112
+ return state;
113
+ }
114
+ createState(name, clip, callbacks = {}, loop = false, clipId = null) {
115
+ const state = new AnimationStateMachine(name, clip, callbacks, loop, clipId);
116
+ this.states.set(name, state);
117
+ return state;
118
+ }
119
+ removeState(name) {
120
+ const state = this.states.get(name);
121
+ if (!state) {
122
+ return false;
123
+ }
124
+ if (this.activeState?.name === name) {
125
+ this.activeState.stop();
126
+ this.activeState = null;
127
+ }
128
+ return this.states.delete(name);
129
+ }
130
+ getState(name) {
131
+ return this.states.get(name) ?? null;
132
+ }
133
+ hasState(name) {
134
+ return this.states.has(name);
135
+ }
136
+ listStates() {
137
+ return [...this.states.values()];
138
+ }
139
+ getActiveState() {
140
+ return this.activeState;
141
+ }
142
+ switchState(name, autoPlay = true) {
143
+ const next = this.states.get(name) ?? null;
144
+ if (!next) {
145
+ return null;
146
+ }
147
+ if (this.activeState && this.activeState !== next) {
148
+ this.activeState.stop();
149
+ }
150
+ this.activeState = next;
151
+ if (autoPlay) {
152
+ next.play();
153
+ }
154
+ return next;
155
+ }
156
+ playState(name) {
157
+ const state = name ? this.switchState(name, false) : this.activeState;
158
+ if (!state) {
159
+ return false;
160
+ }
161
+ this.activeState = state;
162
+ state.play();
163
+ return true;
164
+ }
165
+ pauseState(name) {
166
+ const state = name ? this.states.get(name) : this.activeState;
167
+ if (!state) {
168
+ return false;
169
+ }
170
+ state.pause();
171
+ return true;
172
+ }
173
+ stopState(name) {
174
+ const state = name ? this.states.get(name) : this.activeState;
175
+ if (!state) {
176
+ return false;
177
+ }
178
+ state.stop();
179
+ if (!name || this.activeState?.name === name) {
180
+ this.activeState = null;
181
+ }
182
+ return true;
183
+ }
184
+ clear() {
185
+ this.stopState();
186
+ this.states.clear();
187
+ this.activeState = null;
188
+ }
189
+ };
190
+ __name(_AnimationStateManager, "AnimationStateManager");
191
+ var AnimationStateManager = _AnimationStateManager;
192
+
193
+ // core/components/Animation.ts
194
+ var _AnimationComponent = class _AnimationComponent extends Component {
195
+ constructor(options = {}) {
196
+ super();
197
+ this.modelClips = Array.isArray(options.clips) ? [...options.clips] : [];
198
+ this.importedClips = [];
199
+ this.clipById = /* @__PURE__ */ new Map();
200
+ this.clipEntriesById = /* @__PURE__ */ new Map();
201
+ this.clips = [];
202
+ this.clipCatalog = [];
203
+ this.availableClips = [];
204
+ this.externalClipSources = [];
205
+ this.setExternalClipSources(options.externalClipSources ?? []);
206
+ this.refreshClipCatalog();
207
+ this.paused = options.paused ?? false;
208
+ this.reverse = options.reverse ?? false;
209
+ this.timeScale = options.timeScale ?? 1;
210
+ this.crossFadeDuration = options.crossFadeDuration ?? 0;
211
+ this.stateManager = new AnimationStateManager();
212
+ this.states = this.stateManager.listStates();
213
+ this.active = this.stateManager.getActiveState();
214
+ this.activeStateName = this.active?.name ?? null;
215
+ if (Array.isArray(options.states) && options.states.length > 0) {
216
+ for (const entry of options.states) {
217
+ this.addState(entry.name, entry.clip, entry.loop ?? false);
218
+ }
219
+ }
220
+ if (typeof options.activeState === "string" && options.activeState.length > 0) {
221
+ this.switchState(options.activeState, !this.paused);
222
+ }
223
+ }
224
+ refreshClipCatalog() {
225
+ const catalog = [];
226
+ const nameCounts = /* @__PURE__ */ new Map();
227
+ const nextById = /* @__PURE__ */ new Map();
228
+ const nextEntriesById = /* @__PURE__ */ new Map();
229
+ for (const [index, clip] of this.modelClips.entries()) {
230
+ const name = typeof clip?.name === "string" && clip.name.length > 0 ? clip.name : `Clip ${index + 1}`;
231
+ const id = `model:${index}:${name}`;
232
+ const count = (nameCounts.get(name) ?? 0) + 1;
233
+ nameCounts.set(name, count);
234
+ const entry = {
235
+ id,
236
+ name,
237
+ label: count > 1 ? `${name} (${count})` : name,
238
+ clip,
239
+ source: "model",
240
+ sourceUrl: null
241
+ };
242
+ catalog.push(entry);
243
+ nextById.set(id, clip);
244
+ nextEntriesById.set(id, entry);
245
+ }
246
+ for (const [index, imported] of this.importedClips.entries()) {
247
+ const clip = imported.clip;
248
+ const name = typeof clip?.name === "string" && clip.name.length > 0 ? clip.name : `Clip ${index + 1}`;
249
+ const sourceUrl = imported.sourceUrl;
250
+ const id = `external:${index}:${name}`;
251
+ const count = (nameCounts.get(name) ?? 0) + 1;
252
+ nameCounts.set(name, count);
253
+ const sourceSuffix = sourceUrl ? sourceUrl.split("/").pop() ?? sourceUrl : "external";
254
+ const entry = {
255
+ id,
256
+ name,
257
+ label: count > 1 ? `${name} (${count}) \u2022 ${sourceSuffix}` : `${name} \u2022 ${sourceSuffix}`,
258
+ clip,
259
+ source: "external",
260
+ sourceUrl
261
+ };
262
+ catalog.push(entry);
263
+ nextById.set(id, clip);
264
+ nextEntriesById.set(id, entry);
265
+ }
266
+ this.clipById = nextById;
267
+ this.clipEntriesById = nextEntriesById;
268
+ this.clipCatalog = catalog;
269
+ this.clips = catalog.map((entry) => entry.clip);
270
+ this.availableClips = catalog.map((entry) => entry.name);
271
+ }
272
+ refreshStateRefs() {
273
+ this.states = this.stateManager.listStates();
274
+ this.active = this.stateManager.getActiveState();
275
+ this.activeStateName = this.active?.name ?? null;
276
+ }
277
+ resolveClipRef(clipRef) {
278
+ const trimmed = clipRef.trim();
279
+ if (!trimmed) {
280
+ return null;
281
+ }
282
+ const byId = this.clipById.get(trimmed);
283
+ if (byId) {
284
+ return { id: trimmed, clip: byId };
285
+ }
286
+ const byName = this.clipCatalog.find((entry) => entry.name === trimmed);
287
+ if (!byName) {
288
+ return null;
289
+ }
290
+ return { id: byName.id, clip: byName.clip };
291
+ }
292
+ setModelClips(clips) {
293
+ this.modelClips = Array.isArray(clips) ? [...clips] : [];
294
+ this.refreshClipCatalog();
295
+ }
296
+ setImportedClips(clips) {
297
+ if (!Array.isArray(clips)) {
298
+ this.importedClips = [];
299
+ this.refreshClipCatalog();
300
+ return;
301
+ }
302
+ this.importedClips = clips.map((entry) => {
303
+ if (entry instanceof THREE4.AnimationClip) {
304
+ return { clip: entry, sourceUrl: null };
305
+ }
306
+ if (!entry || typeof entry !== "object") {
307
+ return null;
308
+ }
309
+ const candidate = entry;
310
+ if (!(candidate.clip instanceof THREE4.AnimationClip)) {
311
+ return null;
312
+ }
313
+ return {
314
+ clip: candidate.clip,
315
+ sourceUrl: typeof candidate.sourceUrl === "string" && candidate.sourceUrl.length > 0 ? candidate.sourceUrl : null
316
+ };
317
+ }).filter((entry) => entry !== null);
318
+ this.refreshClipCatalog();
319
+ }
320
+ setExternalClipSources(sources) {
321
+ if (!Array.isArray(sources)) {
322
+ this.externalClipSources = [];
323
+ return;
324
+ }
325
+ const seen = /* @__PURE__ */ new Set();
326
+ const normalized = [];
327
+ for (const source of sources) {
328
+ if (typeof source !== "string") {
329
+ continue;
330
+ }
331
+ const trimmed = source.trim();
332
+ if (!trimmed || seen.has(trimmed)) {
333
+ continue;
334
+ }
335
+ seen.add(trimmed);
336
+ normalized.push(trimmed);
337
+ }
338
+ this.externalClipSources = normalized;
339
+ }
340
+ addState(name, clipRef, loop = false) {
341
+ if (!name.trim()) {
342
+ return null;
343
+ }
344
+ const resolved = this.resolveClipRef(clipRef);
345
+ if (!resolved) {
346
+ return null;
347
+ }
348
+ const state = this.stateManager.createState(name, resolved.clip, {}, loop, resolved.id);
349
+ this.refreshStateRefs();
350
+ return state;
351
+ }
352
+ setStates(states) {
353
+ const previousActive = this.activeStateName;
354
+ this.stateManager.clear();
355
+ for (const state of states) {
356
+ if (!state.name.trim()) {
357
+ continue;
358
+ }
359
+ let createdState = null;
360
+ if (typeof state.clipId === "string" && state.clipId.trim().length > 0) {
361
+ createdState = this.addState(state.name, state.clipId, Boolean(state.loop));
362
+ }
363
+ if (!createdState) {
364
+ this.addState(state.name, state.clip, Boolean(state.loop));
365
+ }
366
+ }
367
+ if (previousActive) {
368
+ this.stateManager.switchState(previousActive, !this.paused);
369
+ }
370
+ this.refreshStateRefs();
371
+ }
372
+ getStateConfigs() {
373
+ return this.states.map((state) => ({
374
+ name: state.name,
375
+ clip: state.clip.name,
376
+ clipId: state.clipId,
377
+ loop: state.loop
378
+ }));
379
+ }
380
+ setActiveState(name, autoPlay = true) {
381
+ if (!name) {
382
+ const stopped = this.stateManager.stopState();
383
+ this.paused = true;
384
+ this.refreshStateRefs();
385
+ return stopped;
386
+ }
387
+ return this.switchState(name, autoPlay);
388
+ }
389
+ removeState(name) {
390
+ const removed = this.stateManager.removeState(name);
391
+ if (removed) {
392
+ this.refreshStateRefs();
393
+ }
394
+ return removed;
395
+ }
396
+ switchState(name, autoPlay = true) {
397
+ const state = this.stateManager.switchState(name, autoPlay);
398
+ if (!state) {
399
+ return false;
400
+ }
401
+ this.paused = !state.isPlaying;
402
+ this.refreshStateRefs();
403
+ return true;
404
+ }
405
+ playState(name) {
406
+ const played = this.stateManager.playState(name);
407
+ if (!played) {
408
+ return false;
409
+ }
410
+ this.paused = false;
411
+ this.refreshStateRefs();
412
+ return true;
413
+ }
414
+ pauseState(name) {
415
+ const paused = this.stateManager.pauseState(name);
416
+ if (!paused) {
417
+ return false;
418
+ }
419
+ this.paused = true;
420
+ this.refreshStateRefs();
421
+ return true;
422
+ }
423
+ stopState(name) {
424
+ const stopped = this.stateManager.stopState(name);
425
+ if (!stopped) {
426
+ return false;
427
+ }
428
+ this.paused = true;
429
+ this.refreshStateRefs();
430
+ return true;
431
+ }
432
+ };
433
+ __name(_AnimationComponent, "AnimationComponent");
434
+ var AnimationComponent = _AnimationComponent;
435
+ var DEFAULT_FOV = 50;
436
+ var DEFAULT_NEAR = 0.1;
437
+ var DEFAULT_FAR = 2e3;
438
+ var DEFAULT_ORTHO_LEFT = -5;
439
+ var DEFAULT_ORTHO_RIGHT = 5;
440
+ var DEFAULT_ORTHO_TOP = 5;
441
+ var DEFAULT_ORTHO_BOTTOM = -5;
442
+ var DEFAULT_ZOOM = 1;
443
+ function inferProjection(camera) {
444
+ if (camera instanceof THREE4.OrthographicCamera) {
445
+ return "orthographic";
446
+ }
447
+ return "perspective";
448
+ }
449
+ __name(inferProjection, "inferProjection");
450
+ function readCameraNear(camera) {
451
+ if (camera && "near" in camera && typeof camera.near === "number" && Number.isFinite(camera.near)) {
452
+ return camera.near;
453
+ }
454
+ return null;
455
+ }
456
+ __name(readCameraNear, "readCameraNear");
457
+ function readCameraFar(camera) {
458
+ if (camera && "far" in camera && typeof camera.far === "number" && Number.isFinite(camera.far)) {
459
+ return camera.far;
460
+ }
461
+ return null;
462
+ }
463
+ __name(readCameraFar, "readCameraFar");
464
+ function inferFov(camera) {
465
+ if (camera instanceof THREE4.PerspectiveCamera && Number.isFinite(camera.fov)) {
466
+ return camera.fov;
467
+ }
468
+ return DEFAULT_FOV;
469
+ }
470
+ __name(inferFov, "inferFov");
471
+ function inferNear(camera) {
472
+ const near = readCameraNear(camera);
473
+ if (near !== null) {
474
+ return near;
475
+ }
476
+ return DEFAULT_NEAR;
477
+ }
478
+ __name(inferNear, "inferNear");
479
+ function inferFar(camera) {
480
+ const far = readCameraFar(camera);
481
+ if (far !== null) {
482
+ return far;
483
+ }
484
+ return DEFAULT_FAR;
485
+ }
486
+ __name(inferFar, "inferFar");
487
+ function inferOrthoLeft(camera) {
488
+ if (camera instanceof THREE4.OrthographicCamera && Number.isFinite(camera.left)) {
489
+ return camera.left;
490
+ }
491
+ return DEFAULT_ORTHO_LEFT;
492
+ }
493
+ __name(inferOrthoLeft, "inferOrthoLeft");
494
+ function inferOrthoRight(camera) {
495
+ if (camera instanceof THREE4.OrthographicCamera && Number.isFinite(camera.right)) {
496
+ return camera.right;
497
+ }
498
+ return DEFAULT_ORTHO_RIGHT;
499
+ }
500
+ __name(inferOrthoRight, "inferOrthoRight");
501
+ function inferOrthoTop(camera) {
502
+ if (camera instanceof THREE4.OrthographicCamera && Number.isFinite(camera.top)) {
503
+ return camera.top;
504
+ }
505
+ return DEFAULT_ORTHO_TOP;
506
+ }
507
+ __name(inferOrthoTop, "inferOrthoTop");
508
+ function inferOrthoBottom(camera) {
509
+ if (camera instanceof THREE4.OrthographicCamera && Number.isFinite(camera.bottom)) {
510
+ return camera.bottom;
511
+ }
512
+ return DEFAULT_ORTHO_BOTTOM;
513
+ }
514
+ __name(inferOrthoBottom, "inferOrthoBottom");
515
+ function inferZoom(camera) {
516
+ if (camera && "zoom" in camera && typeof camera.zoom === "number" && Number.isFinite(camera.zoom)) {
517
+ return camera.zoom;
518
+ }
519
+ return DEFAULT_ZOOM;
520
+ }
521
+ __name(inferZoom, "inferZoom");
522
+ var _CameraComponent = class _CameraComponent extends Component {
523
+ constructor(payload = {}) {
524
+ super();
525
+ this.camera = payload.camera ?? new THREE4.PerspectiveCamera();
526
+ this.type = payload.type ?? "3d";
527
+ this.isDefault = typeof payload.isDefault === "boolean" ? payload.isDefault : false;
528
+ this.projection = payload.projection ?? inferProjection(payload.camera);
529
+ this.fov = typeof payload.fov === "number" && Number.isFinite(payload.fov) ? payload.fov : inferFov(payload.camera);
530
+ this.near = typeof payload.near === "number" && Number.isFinite(payload.near) ? payload.near : inferNear(payload.camera);
531
+ this.far = typeof payload.far === "number" && Number.isFinite(payload.far) ? payload.far : inferFar(payload.camera);
532
+ this.left = typeof payload.left === "number" && Number.isFinite(payload.left) ? payload.left : inferOrthoLeft(payload.camera);
533
+ this.right = typeof payload.right === "number" && Number.isFinite(payload.right) ? payload.right : inferOrthoRight(payload.camera);
534
+ this.top = typeof payload.top === "number" && Number.isFinite(payload.top) ? payload.top : inferOrthoTop(payload.camera);
535
+ this.bottom = typeof payload.bottom === "number" && Number.isFinite(payload.bottom) ? payload.bottom : inferOrthoBottom(payload.camera);
536
+ this.zoom = typeof payload.zoom === "number" && Number.isFinite(payload.zoom) ? payload.zoom : inferZoom(payload.camera);
537
+ }
538
+ };
539
+ __name(_CameraComponent, "CameraComponent");
540
+ var CameraComponent = _CameraComponent;
541
+
542
+ // core/components/Audio.ts
543
+ var DEFAULT_AUDIO_OPTIONS = {
544
+ autoplay: false,
545
+ loop: false,
546
+ pitch: 1,
547
+ volume: 1,
548
+ positional: false,
549
+ refDistance: 1,
550
+ distanceModel: "inverse",
551
+ rolloffFactor: 1
552
+ };
553
+ var _AudioComponent = class _AudioComponent extends Component {
554
+ constructor(path, options = {}) {
555
+ super();
556
+ this.path = path;
557
+ this.options = {
558
+ ...DEFAULT_AUDIO_OPTIONS,
559
+ ...options
560
+ };
561
+ this.object = null;
562
+ this.audio = null;
563
+ Object.defineProperty(this, "isPlaying", {
564
+ value: false,
565
+ writable: true,
566
+ configurable: true,
567
+ enumerable: false
568
+ });
569
+ Object.defineProperty(this, "isPaused", {
570
+ value: false,
571
+ writable: true,
572
+ configurable: true,
573
+ enumerable: false
574
+ });
575
+ }
576
+ /**
577
+ * Signals `AudioSystem` to start (or resume) playback.
578
+ * Has no direct effect in the editor — `AudioSystem` drives the actual
579
+ * THREE.js call in preview.
580
+ */
581
+ play() {
582
+ this.isPlaying = true;
583
+ this.isPaused = false;
584
+ }
585
+ /**
586
+ * Signals `AudioSystem` to pause playback, preserving the current position.
587
+ * Calling {@link play} afterwards resumes from where it paused.
588
+ * No-op if not currently playing.
589
+ */
590
+ pause() {
591
+ if (!this.isPlaying) return;
592
+ this.isPlaying = false;
593
+ this.isPaused = true;
594
+ }
595
+ /**
596
+ * Signals `AudioSystem` to stop playback and reset the playback position.
597
+ */
598
+ stop() {
599
+ this.isPlaying = false;
600
+ this.isPaused = false;
601
+ }
602
+ };
603
+ __name(_AudioComponent, "AudioComponent");
604
+ var AudioComponent = _AudioComponent;
605
+
606
+ // core/components/Environment.ts
607
+ var DEFAULT_ENVIRONMENT_STATE = {
608
+ skybox: {
609
+ type: "none",
610
+ color: "#1e1e1e",
611
+ imageUrl: "",
612
+ gradient: {
613
+ colors: ["#464766", "#657ea6", "#0f0e1a"],
614
+ effect: "linear"
615
+ }
616
+ },
617
+ fog: {
618
+ type: "none",
619
+ color: "#1e1e1e",
620
+ linear: {
621
+ near: 1,
622
+ far: 100
623
+ },
624
+ exponential: {
625
+ density: 2e-3
626
+ }
627
+ },
628
+ gravity: {
629
+ x: 0,
630
+ y: -9.81,
631
+ z: 0
632
+ },
633
+ fixedTimeStep: 0.02
634
+ };
635
+ function normalizeColors(colors) {
636
+ if (!Array.isArray(colors)) {
637
+ return [...DEFAULT_ENVIRONMENT_STATE.skybox.gradient.colors];
638
+ }
639
+ const normalized = colors.filter(
640
+ (entry) => typeof entry === "string" && entry.length > 0
641
+ );
642
+ if (normalized.length === 0) {
643
+ return [...DEFAULT_ENVIRONMENT_STATE.skybox.gradient.colors];
644
+ }
645
+ return normalized;
646
+ }
647
+ __name(normalizeColors, "normalizeColors");
648
+ function normalizeGradientEffect(value) {
649
+ if (value === "radial" || value === "linear" || value === "angular") {
650
+ return value;
651
+ }
652
+ return DEFAULT_ENVIRONMENT_STATE.skybox.gradient.effect;
653
+ }
654
+ __name(normalizeGradientEffect, "normalizeGradientEffect");
655
+ function normalizeSkyboxType(value) {
656
+ if (value === "gradient" || value === "color" || value === "none") {
657
+ return value;
658
+ }
659
+ if (value === "image" || value === "Image") {
660
+ return "image";
661
+ }
662
+ return DEFAULT_ENVIRONMENT_STATE.skybox.type;
663
+ }
664
+ __name(normalizeSkyboxType, "normalizeSkyboxType");
665
+ function normalizeFogType(value) {
666
+ if (value === "linear" || value === "exponential" || value === "none") {
667
+ return value;
668
+ }
669
+ return DEFAULT_ENVIRONMENT_STATE.fog.type;
670
+ }
671
+ __name(normalizeFogType, "normalizeFogType");
672
+ function toFiniteNumber(value, fallback) {
673
+ if (typeof value !== "number" || !Number.isFinite(value)) {
674
+ return fallback;
675
+ }
676
+ return value;
677
+ }
678
+ __name(toFiniteNumber, "toFiniteNumber");
679
+ var _Environment = class _Environment extends Component {
680
+ constructor(values) {
681
+ super();
682
+ const skybox = values?.skybox;
683
+ const fog = values?.fog;
684
+ const gravity = values?.gravity;
685
+ this.values = {
686
+ skybox: {
687
+ type: normalizeSkyboxType(skybox?.type),
688
+ color: typeof skybox?.color === "string" ? skybox.color : DEFAULT_ENVIRONMENT_STATE.skybox.color,
689
+ imageUrl: typeof skybox?.imageUrl === "string" ? skybox.imageUrl : DEFAULT_ENVIRONMENT_STATE.skybox.imageUrl,
690
+ gradient: {
691
+ colors: normalizeColors(skybox?.gradient?.colors),
692
+ effect: normalizeGradientEffect(skybox?.gradient?.effect)
693
+ }
694
+ },
695
+ fog: {
696
+ type: normalizeFogType(fog?.type),
697
+ color: typeof fog?.color === "string" ? fog.color : DEFAULT_ENVIRONMENT_STATE.fog.color,
698
+ linear: {
699
+ near: toFiniteNumber(
700
+ fog?.linear?.near,
701
+ DEFAULT_ENVIRONMENT_STATE.fog.linear.near
702
+ ),
703
+ far: toFiniteNumber(
704
+ fog?.linear?.far,
705
+ DEFAULT_ENVIRONMENT_STATE.fog.linear.far
706
+ )
707
+ },
708
+ exponential: {
709
+ density: toFiniteNumber(
710
+ fog?.exponential?.density,
711
+ DEFAULT_ENVIRONMENT_STATE.fog.exponential.density
712
+ )
713
+ }
714
+ },
715
+ gravity: {
716
+ x: toFiniteNumber(gravity?.x, DEFAULT_ENVIRONMENT_STATE.gravity.x),
717
+ y: toFiniteNumber(gravity?.y, DEFAULT_ENVIRONMENT_STATE.gravity.y),
718
+ z: toFiniteNumber(gravity?.z, DEFAULT_ENVIRONMENT_STATE.gravity.z)
719
+ },
720
+ fixedTimeStep: toFiniteNumber(
721
+ values?.fixedTimeStep,
722
+ DEFAULT_ENVIRONMENT_STATE.fixedTimeStep
723
+ )
724
+ };
725
+ }
726
+ };
727
+ __name(_Environment, "Environment");
728
+ var Environment = _Environment;
729
+
730
+ // core/components/Postprocessing.ts
731
+ var DEFAULT_POSTPROCESSING_STATE = {
732
+ postEnabled: false,
733
+ dof: {
734
+ enabled: false,
735
+ focusDistance: 0.015,
736
+ focalLength: 0.018,
737
+ bokehScale: 3
738
+ },
739
+ bloom: {
740
+ enabled: false,
741
+ intensity: 1.2,
742
+ threshold: 0.2,
743
+ radius: 0.7
744
+ },
745
+ vignette: {
746
+ enabled: false,
747
+ offset: 0.05,
748
+ darkness: 1.2
749
+ },
750
+ chromAberration: {
751
+ enabled: false,
752
+ offsetX: 3e-3,
753
+ offsetY: 3e-3
754
+ },
755
+ noise: {
756
+ enabled: false,
757
+ opacity: 0.12
758
+ },
759
+ pixelation: {
760
+ enabled: false,
761
+ granularity: 6
762
+ },
763
+ toneMapping: {
764
+ enabled: false,
765
+ exposure: 1.3
766
+ },
767
+ hueSaturation: {
768
+ enabled: false,
769
+ hue: 0.05,
770
+ saturation: 0.2
771
+ },
772
+ sepia: {
773
+ enabled: false,
774
+ intensity: 0.5
775
+ },
776
+ smaa: {
777
+ enabled: false
778
+ },
779
+ ssao: {
780
+ enabled: false,
781
+ intensity: 1.5,
782
+ radius: 0.25
783
+ },
784
+ dotScreen: {
785
+ enabled: false,
786
+ dotScreenScale: 1.2,
787
+ dotScreenAngle: 1.57,
788
+ scale: 1.2,
789
+ angle: 1.57,
790
+ blendFunction: void 0,
791
+ opacity: void 0
792
+ },
793
+ glitch: {
794
+ enabled: false,
795
+ blendFunction: void 0,
796
+ chromaticAberrationOffset: void 0,
797
+ delay: void 0,
798
+ duration: void 0,
799
+ strength: void 0,
800
+ dtSize: void 0,
801
+ columns: void 0,
802
+ ratio: void 0,
803
+ mode: void 0,
804
+ active: void 0
805
+ }
806
+ };
807
+ function asRecord(value) {
808
+ if (!value || typeof value !== "object") {
809
+ return null;
810
+ }
811
+ return value;
812
+ }
813
+ __name(asRecord, "asRecord");
814
+ function toFiniteNumber2(value, fallback) {
815
+ if (typeof value !== "number" || !Number.isFinite(value)) {
816
+ return fallback;
817
+ }
818
+ return value;
819
+ }
820
+ __name(toFiniteNumber2, "toFiniteNumber");
821
+ function toBoolean(value, fallback) {
822
+ if (typeof value !== "boolean") {
823
+ return fallback;
824
+ }
825
+ return value;
826
+ }
827
+ __name(toBoolean, "toBoolean");
828
+ function normalizeNumberTuple(value) {
829
+ if (!Array.isArray(value) || value.length !== 2) {
830
+ return void 0;
831
+ }
832
+ if (typeof value[0] !== "number" || !Number.isFinite(value[0]) || typeof value[1] !== "number" || !Number.isFinite(value[1])) {
833
+ return void 0;
834
+ }
835
+ return [value[0], value[1]];
836
+ }
837
+ __name(normalizeNumberTuple, "normalizeNumberTuple");
838
+ function normalizePostprocessing(value) {
839
+ const postprocessing = asRecord(value);
840
+ const defaults = DEFAULT_POSTPROCESSING_STATE;
841
+ const dof = asRecord(postprocessing?.dof);
842
+ const bloom = asRecord(postprocessing?.bloom);
843
+ const vignette = asRecord(postprocessing?.vignette);
844
+ const chromAberration = asRecord(postprocessing?.chromAberration);
845
+ const noise = asRecord(postprocessing?.noise);
846
+ const pixelation = asRecord(postprocessing?.pixelation);
847
+ const toneMapping = asRecord(postprocessing?.toneMapping);
848
+ const hueSaturation = asRecord(postprocessing?.hueSaturation);
849
+ const sepia = asRecord(postprocessing?.sepia);
850
+ const smaa = asRecord(postprocessing?.smaa);
851
+ const ssao = asRecord(postprocessing?.ssao);
852
+ const dotScreen = asRecord(postprocessing?.dotScreen);
853
+ const glitch = asRecord(postprocessing?.glitch);
854
+ const glitchChromaticAberrationOffset = asRecord(
855
+ glitch?.chromaticAberrationOffset
856
+ );
857
+ const glitchStrength = asRecord(glitch?.strength);
858
+ const dotScreenScale = toFiniteNumber2(
859
+ dotScreen?.dotScreenScale,
860
+ defaults.dotScreen.dotScreenScale
861
+ );
862
+ const dotScreenAngle = toFiniteNumber2(
863
+ dotScreen?.dotScreenAngle,
864
+ defaults.dotScreen.dotScreenAngle
865
+ );
866
+ const normalizedGlitchStrength = typeof glitch?.strength === "number" && Number.isFinite(glitch.strength) ? glitch.strength : glitchStrength && typeof glitchStrength.x === "number" && Number.isFinite(glitchStrength.x) && typeof glitchStrength.y === "number" && Number.isFinite(glitchStrength.y) ? { x: glitchStrength.x, y: glitchStrength.y } : void 0;
867
+ const normalizedGlitchChromaticAberrationOffset = normalizeNumberTuple(glitch?.chromaticAberrationOffset) ?? (glitchChromaticAberrationOffset && typeof glitchChromaticAberrationOffset.x === "number" && Number.isFinite(glitchChromaticAberrationOffset.x) && typeof glitchChromaticAberrationOffset.y === "number" && Number.isFinite(glitchChromaticAberrationOffset.y) ? {
868
+ x: glitchChromaticAberrationOffset.x,
869
+ y: glitchChromaticAberrationOffset.y
870
+ } : void 0);
871
+ return {
872
+ postEnabled: toBoolean(postprocessing?.postEnabled, defaults.postEnabled),
873
+ dof: {
874
+ enabled: toBoolean(dof?.enabled, defaults.dof.enabled),
875
+ focusDistance: toFiniteNumber2(dof?.focusDistance, defaults.dof.focusDistance),
876
+ focalLength: toFiniteNumber2(dof?.focalLength, defaults.dof.focalLength),
877
+ bokehScale: toFiniteNumber2(dof?.bokehScale, defaults.dof.bokehScale)
878
+ },
879
+ bloom: {
880
+ enabled: toBoolean(bloom?.enabled, defaults.bloom.enabled),
881
+ intensity: toFiniteNumber2(bloom?.intensity, defaults.bloom.intensity),
882
+ threshold: toFiniteNumber2(bloom?.threshold, defaults.bloom.threshold),
883
+ radius: toFiniteNumber2(bloom?.radius, defaults.bloom.radius)
884
+ },
885
+ vignette: {
886
+ enabled: toBoolean(vignette?.enabled, defaults.vignette.enabled),
887
+ offset: toFiniteNumber2(vignette?.offset, defaults.vignette.offset),
888
+ darkness: toFiniteNumber2(vignette?.darkness, defaults.vignette.darkness)
889
+ },
890
+ chromAberration: {
891
+ enabled: toBoolean(chromAberration?.enabled, defaults.chromAberration.enabled),
892
+ offsetX: toFiniteNumber2(chromAberration?.offsetX, defaults.chromAberration.offsetX),
893
+ offsetY: toFiniteNumber2(chromAberration?.offsetY, defaults.chromAberration.offsetY)
894
+ },
895
+ noise: {
896
+ enabled: toBoolean(noise?.enabled, defaults.noise.enabled),
897
+ opacity: toFiniteNumber2(noise?.opacity, defaults.noise.opacity)
898
+ },
899
+ pixelation: {
900
+ enabled: toBoolean(pixelation?.enabled, defaults.pixelation.enabled),
901
+ granularity: toFiniteNumber2(pixelation?.granularity, defaults.pixelation.granularity)
902
+ },
903
+ toneMapping: {
904
+ enabled: toBoolean(toneMapping?.enabled, defaults.toneMapping.enabled),
905
+ exposure: toFiniteNumber2(toneMapping?.exposure, defaults.toneMapping.exposure)
906
+ },
907
+ hueSaturation: {
908
+ enabled: toBoolean(hueSaturation?.enabled, defaults.hueSaturation.enabled),
909
+ hue: toFiniteNumber2(hueSaturation?.hue, defaults.hueSaturation.hue),
910
+ saturation: toFiniteNumber2(
911
+ hueSaturation?.saturation,
912
+ defaults.hueSaturation.saturation
913
+ )
914
+ },
915
+ sepia: {
916
+ enabled: toBoolean(sepia?.enabled, defaults.sepia.enabled),
917
+ intensity: toFiniteNumber2(sepia?.intensity, defaults.sepia.intensity)
918
+ },
919
+ smaa: {
920
+ enabled: toBoolean(smaa?.enabled, defaults.smaa.enabled)
921
+ },
922
+ ssao: {
923
+ enabled: toBoolean(ssao?.enabled, defaults.ssao.enabled),
924
+ intensity: toFiniteNumber2(ssao?.intensity, defaults.ssao.intensity),
925
+ radius: toFiniteNumber2(ssao?.radius, defaults.ssao.radius)
926
+ },
927
+ dotScreen: {
928
+ enabled: toBoolean(dotScreen?.enabled, defaults.dotScreen.enabled),
929
+ dotScreenScale,
930
+ dotScreenAngle,
931
+ scale: toFiniteNumber2(dotScreen?.scale, dotScreenScale),
932
+ angle: toFiniteNumber2(dotScreen?.angle, dotScreenAngle),
933
+ blendFunction: typeof dotScreen?.blendFunction === "number" && Number.isFinite(dotScreen.blendFunction) ? dotScreen.blendFunction : defaults.dotScreen.blendFunction,
934
+ opacity: typeof dotScreen?.opacity === "number" && Number.isFinite(dotScreen.opacity) ? dotScreen.opacity : defaults.dotScreen.opacity
935
+ },
936
+ glitch: {
937
+ enabled: toBoolean(glitch?.enabled, defaults.glitch.enabled),
938
+ blendFunction: typeof glitch?.blendFunction === "number" && Number.isFinite(glitch.blendFunction) ? glitch.blendFunction : defaults.glitch.blendFunction,
939
+ chromaticAberrationOffset: normalizedGlitchChromaticAberrationOffset,
940
+ delay: normalizeNumberTuple(glitch?.delay) ?? defaults.glitch.delay,
941
+ duration: normalizeNumberTuple(glitch?.duration) ?? defaults.glitch.duration,
942
+ strength: normalizedGlitchStrength,
943
+ dtSize: typeof glitch?.dtSize === "number" && Number.isFinite(glitch.dtSize) ? glitch.dtSize : defaults.glitch.dtSize,
944
+ columns: typeof glitch?.columns === "number" && Number.isFinite(glitch.columns) ? glitch.columns : defaults.glitch.columns,
945
+ ratio: typeof glitch?.ratio === "number" && Number.isFinite(glitch.ratio) ? glitch.ratio : defaults.glitch.ratio,
946
+ mode: typeof glitch?.mode === "string" ? glitch.mode : defaults.glitch.mode,
947
+ active: toBoolean(glitch?.active, defaults.glitch.active ?? false)
948
+ }
949
+ };
950
+ }
951
+ __name(normalizePostprocessing, "normalizePostprocessing");
952
+ var _Postprocessing = class _Postprocessing extends Component {
953
+ constructor(values) {
954
+ super();
955
+ this.values = normalizePostprocessing(values);
956
+ }
957
+ };
958
+ __name(_Postprocessing, "Postprocessing");
959
+ var Postprocessing = _Postprocessing;
960
+
961
+ // core/components/Physics.ts
962
+ var DEFAULT_RIGIDBODY_STATE = {
963
+ enabled: true,
964
+ type: "dynamic",
965
+ mass: 1,
966
+ linearDamping: 0,
967
+ angularDamping: 0,
968
+ gravityScale: 1,
969
+ canSleep: true,
970
+ ccdEnabled: false,
971
+ lockTranslations: false,
972
+ lockTranslationX: false,
973
+ lockTranslationY: false,
974
+ lockTranslationZ: false,
975
+ lockRotations: false,
976
+ lockRotationX: false,
977
+ lockRotationY: false,
978
+ lockRotationZ: false
979
+ };
980
+ var DEFAULT_COLLIDER_STATE = {
981
+ enabled: true,
982
+ shape: "cuboid",
983
+ offsetPosition: {
984
+ x: 0,
985
+ y: 0,
986
+ z: 0
987
+ },
988
+ offsetRotation: {
989
+ x: 0,
990
+ y: 0,
991
+ z: 0
992
+ },
993
+ size: {
994
+ x: 1,
995
+ y: 1,
996
+ z: 1
997
+ },
998
+ radius: 0.5,
999
+ height: 1,
1000
+ restitution: 0,
1001
+ friction: 0.5,
1002
+ isSensor: false
1003
+ };
1004
+ var DEFAULT_PHYSICS_STATE = {
1005
+ rigidbody: DEFAULT_RIGIDBODY_STATE,
1006
+ collider: DEFAULT_COLLIDER_STATE
1007
+ };
1008
+ function asRecord2(value) {
1009
+ if (!value || typeof value !== "object") {
1010
+ return null;
1011
+ }
1012
+ return value;
1013
+ }
1014
+ __name(asRecord2, "asRecord");
1015
+ function toFiniteNumber3(value, fallback) {
1016
+ if (typeof value !== "number" || !Number.isFinite(value)) {
1017
+ return fallback;
1018
+ }
1019
+ return value;
1020
+ }
1021
+ __name(toFiniteNumber3, "toFiniteNumber");
1022
+ function toBoolean2(value, fallback) {
1023
+ if (typeof value !== "boolean") {
1024
+ return fallback;
1025
+ }
1026
+ return value;
1027
+ }
1028
+ __name(toBoolean2, "toBoolean");
1029
+ function toRigidbodyType(value, fallback) {
1030
+ if (value === "dynamic" || value === "fixed" || value === "kinematicPosition" || value === "kinematicVelocity") {
1031
+ return value;
1032
+ }
1033
+ return fallback;
1034
+ }
1035
+ __name(toRigidbodyType, "toRigidbodyType");
1036
+ function toColliderShape(value, fallback) {
1037
+ if (value === "cuboid" || value === "ball" || value === "capsule" || value === "cylinder" || value === "trimesh") {
1038
+ return value;
1039
+ }
1040
+ return fallback;
1041
+ }
1042
+ __name(toColliderShape, "toColliderShape");
1043
+ function normalizeRigidbodyState(value) {
1044
+ const source = asRecord2(value);
1045
+ const defaults = DEFAULT_RIGIDBODY_STATE;
1046
+ const legacyLockTranslations = toBoolean2(
1047
+ source?.lockTranslations,
1048
+ defaults.lockTranslations
1049
+ );
1050
+ const legacyLockRotations = toBoolean2(
1051
+ source?.lockRotations,
1052
+ defaults.lockRotations
1053
+ );
1054
+ const lockTranslationX = toBoolean2(
1055
+ source?.lockTranslationX,
1056
+ legacyLockTranslations
1057
+ );
1058
+ const lockTranslationY = toBoolean2(
1059
+ source?.lockTranslationY,
1060
+ legacyLockTranslations
1061
+ );
1062
+ const lockTranslationZ = toBoolean2(
1063
+ source?.lockTranslationZ,
1064
+ legacyLockTranslations
1065
+ );
1066
+ const lockRotationX = toBoolean2(source?.lockRotationX, legacyLockRotations);
1067
+ const lockRotationY = toBoolean2(source?.lockRotationY, legacyLockRotations);
1068
+ const lockRotationZ = toBoolean2(source?.lockRotationZ, legacyLockRotations);
1069
+ return {
1070
+ enabled: toBoolean2(source?.enabled, defaults.enabled),
1071
+ type: toRigidbodyType(source?.type, defaults.type),
1072
+ mass: Math.max(1e-4, toFiniteNumber3(source?.mass, defaults.mass)),
1073
+ linearDamping: Math.max(
1074
+ 0,
1075
+ toFiniteNumber3(source?.linearDamping, defaults.linearDamping)
1076
+ ),
1077
+ angularDamping: Math.max(
1078
+ 0,
1079
+ toFiniteNumber3(source?.angularDamping, defaults.angularDamping)
1080
+ ),
1081
+ gravityScale: toFiniteNumber3(source?.gravityScale, defaults.gravityScale),
1082
+ canSleep: toBoolean2(source?.canSleep, defaults.canSleep),
1083
+ ccdEnabled: toBoolean2(source?.ccdEnabled, defaults.ccdEnabled),
1084
+ lockTranslations: legacyLockTranslations,
1085
+ lockTranslationX,
1086
+ lockTranslationY,
1087
+ lockTranslationZ,
1088
+ lockRotations: legacyLockRotations,
1089
+ lockRotationX,
1090
+ lockRotationY,
1091
+ lockRotationZ
1092
+ };
1093
+ }
1094
+ __name(normalizeRigidbodyState, "normalizeRigidbodyState");
1095
+ function normalizeColliderState(value) {
1096
+ const source = asRecord2(value);
1097
+ const defaults = DEFAULT_COLLIDER_STATE;
1098
+ const offsetPosition = asRecord2(source?.offsetPosition);
1099
+ const offsetRotation = asRecord2(source?.offsetRotation);
1100
+ const size = asRecord2(source?.size);
1101
+ return {
1102
+ enabled: toBoolean2(source?.enabled, defaults.enabled),
1103
+ shape: toColliderShape(source?.shape, defaults.shape),
1104
+ offsetPosition: {
1105
+ x: toFiniteNumber3(offsetPosition?.x, defaults.offsetPosition.x),
1106
+ y: toFiniteNumber3(offsetPosition?.y, defaults.offsetPosition.y),
1107
+ z: toFiniteNumber3(offsetPosition?.z, defaults.offsetPosition.z)
1108
+ },
1109
+ offsetRotation: {
1110
+ x: toFiniteNumber3(offsetRotation?.x, defaults.offsetRotation.x),
1111
+ y: toFiniteNumber3(offsetRotation?.y, defaults.offsetRotation.y),
1112
+ z: toFiniteNumber3(offsetRotation?.z, defaults.offsetRotation.z)
1113
+ },
1114
+ size: {
1115
+ x: Math.max(1e-4, toFiniteNumber3(size?.x, defaults.size.x)),
1116
+ y: Math.max(1e-4, toFiniteNumber3(size?.y, defaults.size.y)),
1117
+ z: Math.max(1e-4, toFiniteNumber3(size?.z, defaults.size.z))
1118
+ },
1119
+ radius: Math.max(1e-4, toFiniteNumber3(source?.radius, defaults.radius)),
1120
+ height: Math.max(1e-4, toFiniteNumber3(source?.height, defaults.height)),
1121
+ restitution: Math.max(0, toFiniteNumber3(source?.restitution, defaults.restitution)),
1122
+ friction: Math.max(0, toFiniteNumber3(source?.friction, defaults.friction)),
1123
+ isSensor: toBoolean2(source?.isSensor, defaults.isSensor)
1124
+ };
1125
+ }
1126
+ __name(normalizeColliderState, "normalizeColliderState");
1127
+ function normalizePhysicsState(value) {
1128
+ const source = asRecord2(value);
1129
+ return {
1130
+ rigidbody: normalizeRigidbodyState(
1131
+ source?.rigidbody ?? void 0
1132
+ ),
1133
+ collider: normalizeColliderState(
1134
+ source?.collider ?? void 0
1135
+ )
1136
+ };
1137
+ }
1138
+ __name(normalizePhysicsState, "normalizePhysicsState");
1139
+ var _PhysicsComponent = class _PhysicsComponent extends Component {
1140
+ constructor(values) {
1141
+ super();
1142
+ this.values = normalizePhysicsState(values);
1143
+ this.rigidBody = null;
1144
+ this.collider = null;
1145
+ }
1146
+ /**
1147
+ * Patch rigidbody and/or collider state. Each sub-object is deep-merged
1148
+ * with the current values via the respective normalizer.
1149
+ */
1150
+ setValues(patch) {
1151
+ this.values = normalizePhysicsState({
1152
+ rigidbody: { ...this.values.rigidbody, ...patch.rigidbody ?? {} },
1153
+ collider: { ...this.values.collider, ...patch.collider ?? {} }
1154
+ });
1155
+ }
1156
+ };
1157
+ __name(_PhysicsComponent, "PhysicsComponent");
1158
+ var PhysicsComponent = _PhysicsComponent;
1159
+
1160
+ // core/components/EntityType.ts
1161
+ var _EntityType = class _EntityType extends Component {
1162
+ constructor(value) {
1163
+ super();
1164
+ this.value = value;
1165
+ }
1166
+ };
1167
+ __name(_EntityType, "EntityType");
1168
+ var EntityType = _EntityType;
1169
+
1170
+ // core/components/Image.ts
1171
+ var _ImageComponent = class _ImageComponent extends Component {
1172
+ constructor(path, width = 1, height = 1) {
1173
+ super();
1174
+ this.path = path;
1175
+ this.width = width;
1176
+ this.height = height;
1177
+ this.texture = null;
1178
+ this.object = null;
1179
+ }
1180
+ };
1181
+ __name(_ImageComponent, "ImageComponent");
1182
+ var ImageComponent = _ImageComponent;
1183
+
1184
+ // core/components/ImageTarget.ts
1185
+ var _ImageTarget = class _ImageTarget extends Component {
1186
+ constructor(options, texture, object) {
1187
+ super();
1188
+ this.targets = options?.targets ?? [];
1189
+ this.compiledTargetUrl = options?.compiledTargetUrl;
1190
+ this.compiledTargetDir = options?.compiledTargetDir;
1191
+ this.texture = texture ?? null;
1192
+ this.object = object ?? null;
1193
+ }
1194
+ };
1195
+ __name(_ImageTarget, "ImageTarget");
1196
+ var ImageTarget = _ImageTarget;
1197
+
1198
+ // core/components/ImageTargetAnchor.ts
1199
+ var _ImageTargetAnchor = class _ImageTargetAnchor extends Component {
1200
+ constructor(options) {
1201
+ super();
1202
+ this.targetId = options?.targetId ?? null;
1203
+ this.targetUrl = options?.targetUrl;
1204
+ }
1205
+ };
1206
+ __name(_ImageTargetAnchor, "ImageTargetAnchor");
1207
+ var ImageTargetAnchor = _ImageTargetAnchor;
1208
+ function toHexColor(value) {
1209
+ return `#${value.getHexString()}`;
1210
+ }
1211
+ __name(toHexColor, "toHexColor");
1212
+ function createValueState(light) {
1213
+ const base = {
1214
+ color: toHexColor(light.color),
1215
+ intensity: light.intensity,
1216
+ castShadow: light.castShadow ?? false,
1217
+ frustumCulling: light.frustumCulled
1218
+ };
1219
+ if (light instanceof THREE4.PointLight) {
1220
+ base.distance = light.distance;
1221
+ base.decay = light.decay;
1222
+ } else if (light instanceof THREE4.SpotLight) {
1223
+ base.distance = light.distance;
1224
+ base.decay = light.decay;
1225
+ base.angle = light.angle;
1226
+ base.penumbra = light.penumbra;
1227
+ } else if (light instanceof THREE4.RectAreaLight) {
1228
+ base.width = light.width;
1229
+ base.height = light.height;
1230
+ }
1231
+ return base;
1232
+ }
1233
+ __name(createValueState, "createValueState");
1234
+ var _LightComponent = class _LightComponent extends Component {
1235
+ constructor(light) {
1236
+ super();
1237
+ this.light = light;
1238
+ this.type = light.type;
1239
+ this.values = createValueState(light);
1240
+ }
1241
+ setValues(patch) {
1242
+ this.values = {
1243
+ ...this.values,
1244
+ ...patch
1245
+ };
1246
+ }
1247
+ };
1248
+ __name(_LightComponent, "LightComponent");
1249
+ var LightComponent = _LightComponent;
1250
+ function toHexColor2(value, fallback) {
1251
+ if (value && typeof value === "object" && typeof value.getHexString === "function") {
1252
+ try {
1253
+ return `#${value.getHexString()}`;
1254
+ } catch {
1255
+ return fallback;
1256
+ }
1257
+ }
1258
+ return fallback;
1259
+ }
1260
+ __name(toHexColor2, "toHexColor");
1261
+ function getMaterialType(material) {
1262
+ if (material instanceof THREE4.MeshPhysicalMaterial) {
1263
+ return "physical";
1264
+ }
1265
+ if (material instanceof THREE4.MeshPhongMaterial) {
1266
+ return "phong";
1267
+ }
1268
+ if (material instanceof THREE4.MeshBasicMaterial) {
1269
+ return "basic";
1270
+ }
1271
+ return "standard";
1272
+ }
1273
+ __name(getMaterialType, "getMaterialType");
1274
+ function createMaterialValue(material) {
1275
+ const materialRecord = material;
1276
+ const normalScale = materialRecord.normalScale;
1277
+ const map = materialRecord.map;
1278
+ return {
1279
+ type: getMaterialType(material),
1280
+ color: toHexColor2(materialRecord.color, "#ffffff"),
1281
+ roughness: typeof materialRecord.roughness === "number" ? materialRecord.roughness : 0.5,
1282
+ metalness: typeof materialRecord.metalness === "number" ? materialRecord.metalness : 0.5,
1283
+ normalScale: typeof normalScale?.x === "number" ? normalScale.x : 1,
1284
+ opacity: typeof materialRecord.opacity === "number" ? materialRecord.opacity : 1,
1285
+ emissive: toHexColor2(materialRecord.emissive, "#000000"),
1286
+ emissiveIntensity: typeof materialRecord.emissiveIntensity === "number" ? materialRecord.emissiveIntensity : 0,
1287
+ side: typeof materialRecord.side === "number" ? materialRecord.side : THREE4.FrontSide,
1288
+ blending: typeof materialRecord.blending === "number" ? materialRecord.blending : THREE4.NormalBlending,
1289
+ depthTest: materialRecord.depthTest !== false,
1290
+ depthWrite: materialRecord.depthWrite !== false,
1291
+ wireframe: Boolean(materialRecord.wireframe),
1292
+ transparent: Boolean(materialRecord.transparent),
1293
+ textureMap: map?.image ? map.source?.data?.currentSrc || map.image?.src : void 0,
1294
+ alphaTextureMap: materialRecord.alphaMap?.image?.src,
1295
+ normalMap: materialRecord.normalMap?.image?.src,
1296
+ roughnessMap: materialRecord.roughnessMap?.image?.src,
1297
+ metalnessMap: materialRecord.metalnessMap?.image?.src,
1298
+ aoMap: materialRecord.aoMap?.image?.src,
1299
+ emissiveMap: materialRecord.emissiveMap?.image?.src,
1300
+ bumpMap: materialRecord.bumpMap?.image?.src,
1301
+ displacementMap: materialRecord.displacementMap?.image?.src,
1302
+ lightMap: materialRecord.lightMap?.image?.src,
1303
+ envMap: materialRecord.envMap?.image?.src,
1304
+ textureFiltering: map?.magFilter === THREE4.NearestFilter ? "sharp" : "smooth",
1305
+ useMipmaps: map?.generateMipmaps !== false
1306
+ };
1307
+ }
1308
+ __name(createMaterialValue, "createMaterialValue");
1309
+ function defaultMaterialValue() {
1310
+ return {
1311
+ type: "standard",
1312
+ color: "#ffffff",
1313
+ roughness: 0.5,
1314
+ metalness: 0.5,
1315
+ normalScale: 1,
1316
+ opacity: 1,
1317
+ emissive: "#000000",
1318
+ emissiveIntensity: 0,
1319
+ side: THREE4.FrontSide,
1320
+ blending: THREE4.NormalBlending,
1321
+ depthTest: true,
1322
+ depthWrite: true,
1323
+ wireframe: false,
1324
+ transparent: false,
1325
+ textureFiltering: "smooth",
1326
+ useMipmaps: true
1327
+ };
1328
+ }
1329
+ __name(defaultMaterialValue, "defaultMaterialValue");
1330
+ var _MaterialComponent = class _MaterialComponent extends Component {
1331
+ constructor(materialOrMaterials = []) {
1332
+ super();
1333
+ this.materials = [];
1334
+ this.material = null;
1335
+ this.values = [];
1336
+ this.setMaterials(materialOrMaterials);
1337
+ }
1338
+ setMaterials(materialOrMaterials = []) {
1339
+ this.materials = Array.isArray(materialOrMaterials) ? materialOrMaterials.filter(Boolean) : materialOrMaterials ? [materialOrMaterials] : [];
1340
+ this.material = this.materials[0] ?? null;
1341
+ this.values = this.materials.length > 0 ? this.materials.map((material) => createMaterialValue(material)) : [defaultMaterialValue()];
1342
+ }
1343
+ updateValue(index, patch) {
1344
+ if (index < 0) {
1345
+ return;
1346
+ }
1347
+ while (this.values.length <= index) {
1348
+ this.values.push(defaultMaterialValue());
1349
+ }
1350
+ this.values[index] = {
1351
+ ...this.values[index],
1352
+ ...patch
1353
+ };
1354
+ }
1355
+ resetValue(index) {
1356
+ if (index < 0) {
1357
+ return;
1358
+ }
1359
+ while (this.values.length <= index) {
1360
+ this.values.push(defaultMaterialValue());
1361
+ }
1362
+ const type = this.values[index]?.type ?? "standard";
1363
+ this.values[index] = {
1364
+ ...defaultMaterialValue(),
1365
+ type
1366
+ };
1367
+ }
1368
+ setMaterialType(index, type) {
1369
+ this.updateValue(index, { type });
1370
+ }
1371
+ setTextureFiltering(index, filtering) {
1372
+ this.updateValue(index, { textureFiltering: filtering });
1373
+ }
1374
+ setUseMipmaps(index, enabled) {
1375
+ this.updateValue(index, { useMipmaps: enabled });
1376
+ }
1377
+ };
1378
+ __name(_MaterialComponent, "MaterialComponent");
1379
+ var MaterialComponent = _MaterialComponent;
1380
+
1381
+ // core/components/Mesh.ts
1382
+ var _MeshComponent = class _MeshComponent extends Component {
1383
+ constructor(mesh) {
1384
+ super();
1385
+ this.mesh = mesh;
1386
+ }
1387
+ };
1388
+ __name(_MeshComponent, "MeshComponent");
1389
+ var MeshComponent = _MeshComponent;
1390
+ var DEFAULT_MESH_GEOMETRY_PARAMETERS = {
1391
+ capsule: { radius: 0.5, height: 1 },
1392
+ cube: { width: 1, height: 1, depth: 1 },
1393
+ cylinder: { radius: 0.5, height: 1 },
1394
+ model: {},
1395
+ plane: { width: 100, height: 100 },
1396
+ sphere: { radius: 0.5 }
1397
+ };
1398
+ var GEOMETRY_TYPE_BY_KIND = {
1399
+ capsule: "CapsuleGeometry",
1400
+ cube: "BoxGeometry",
1401
+ cylinder: "CylinderGeometry",
1402
+ model: "Model",
1403
+ plane: "PlaneGeometry",
1404
+ sphere: "SphereGeometry"
1405
+ };
1406
+ var _MeshGeometryComponent = class _MeshGeometryComponent extends Component {
1407
+ constructor(kind, object, parameters, options) {
1408
+ super();
1409
+ this.kind = kind;
1410
+ this.geometryType = GEOMETRY_TYPE_BY_KIND[kind];
1411
+ this.object = object;
1412
+ this.modelName = options?.modelName ?? "";
1413
+ this.castShadow = options?.castShadow ?? false;
1414
+ this.receiveShadow = options?.receiveShadow ?? false;
1415
+ switch (kind) {
1416
+ case "cube":
1417
+ this.parameters = {
1418
+ ...DEFAULT_MESH_GEOMETRY_PARAMETERS.cube,
1419
+ ...parameters
1420
+ };
1421
+ break;
1422
+ case "plane":
1423
+ this.parameters = {
1424
+ ...DEFAULT_MESH_GEOMETRY_PARAMETERS.plane,
1425
+ ...parameters
1426
+ };
1427
+ break;
1428
+ case "sphere":
1429
+ this.parameters = {
1430
+ ...DEFAULT_MESH_GEOMETRY_PARAMETERS.sphere,
1431
+ ...parameters
1432
+ };
1433
+ break;
1434
+ case "cylinder":
1435
+ this.parameters = {
1436
+ ...DEFAULT_MESH_GEOMETRY_PARAMETERS.cylinder,
1437
+ ...parameters
1438
+ };
1439
+ break;
1440
+ case "capsule":
1441
+ this.parameters = {
1442
+ ...DEFAULT_MESH_GEOMETRY_PARAMETERS.capsule,
1443
+ ...parameters
1444
+ };
1445
+ break;
1446
+ case "model":
1447
+ this.parameters = {};
1448
+ break;
1449
+ }
1450
+ }
1451
+ };
1452
+ __name(_MeshGeometryComponent, "MeshGeometryComponent");
1453
+ var MeshGeometryComponent = _MeshGeometryComponent;
1454
+
1455
+ // core/components/Model.ts
1456
+ var _ModelComponent = class _ModelComponent extends Component {
1457
+ constructor(path) {
1458
+ super();
1459
+ this.path = path;
1460
+ this.object = null;
1461
+ }
1462
+ };
1463
+ __name(_ModelComponent, "ModelComponent");
1464
+ var ModelComponent = _ModelComponent;
1465
+
1466
+ // core/components/Name.ts
1467
+ var _Name = class _Name extends Component {
1468
+ constructor(value) {
1469
+ super();
1470
+ this.value = value;
1471
+ }
1472
+ };
1473
+ __name(_Name, "Name");
1474
+ var Name = _Name;
1475
+
1476
+ // core/components/Object3DRef.ts
1477
+ var _Object3DRef = class _Object3DRef extends Component {
1478
+ constructor(object, visibility) {
1479
+ super();
1480
+ this.object = object;
1481
+ this.visibility = typeof visibility === "boolean" ? visibility : Boolean(object.visible);
1482
+ }
1483
+ };
1484
+ __name(_Object3DRef, "Object3DRef");
1485
+ var Object3DRef = _Object3DRef;
1486
+
1487
+ // core/components/ParentId.ts
1488
+ var _ParentId = class _ParentId extends Component {
1489
+ constructor(value = null) {
1490
+ super();
1491
+ this.value = value;
1492
+ }
1493
+ };
1494
+ __name(_ParentId, "ParentId");
1495
+ var ParentId = _ParentId;
1496
+
1497
+ // core/components/ScriptComponent.ts
1498
+ var _ScriptComponent = class _ScriptComponent extends Component {
1499
+ constructor(entries = []) {
1500
+ super();
1501
+ this.entries = entries.map((entry) => ({
1502
+ entityId: typeof entry.entityId === "number" ? entry.entityId : 0,
1503
+ className: typeof entry.className === "string" ? entry.className : "",
1504
+ scriptUrl: typeof entry.scriptUrl === "string" ? entry.scriptUrl : "",
1505
+ enabled: typeof entry.enabled === "boolean" ? entry.enabled : true,
1506
+ executeInEditor: typeof entry.executeInEditor === "boolean" ? entry.executeInEditor : false,
1507
+ data: entry.data && typeof entry.data === "object" && !Array.isArray(entry.data) ? entry.data : {},
1508
+ runtimeState: entry.runtimeState,
1509
+ runtimeMessage: typeof entry.runtimeMessage === "string" ? entry.runtimeMessage : void 0
1510
+ }));
1511
+ Object.defineProperty(this, "scriptInstance", {
1512
+ value: null,
1513
+ writable: true,
1514
+ configurable: true,
1515
+ enumerable: false
1516
+ });
1517
+ Object.defineProperty(this, "scriptInstances", {
1518
+ value: /* @__PURE__ */ new Map(),
1519
+ writable: true,
1520
+ configurable: true,
1521
+ enumerable: false
1522
+ });
1523
+ }
1524
+ };
1525
+ __name(_ScriptComponent, "ScriptComponent");
1526
+ var ScriptComponent = _ScriptComponent;
1527
+
1528
+ // core/components/Selectable.ts
1529
+ var _Selectable = class _Selectable extends Component {
1530
+ constructor(enabled = true) {
1531
+ super();
1532
+ this.enabled = enabled;
1533
+ }
1534
+ };
1535
+ __name(_Selectable, "Selectable");
1536
+ var Selectable = _Selectable;
1537
+
1538
+ // core/components/Sprite.ts
1539
+ var _SpriteComponent = class _SpriteComponent extends Component {
1540
+ constructor(path, width = 1, height = 1) {
1541
+ super();
1542
+ this.path = path;
1543
+ this.width = width;
1544
+ this.height = height;
1545
+ this.texture = null;
1546
+ this.object = null;
1547
+ }
1548
+ };
1549
+ __name(_SpriteComponent, "SpriteComponent");
1550
+ var SpriteComponent = _SpriteComponent;
1551
+
1552
+ // core/components/SelectionTransformState.ts
1553
+ var _SelectionTransformState = class _SelectionTransformState extends Component {
1554
+ constructor(transform = "translate", space = "world", selectedEntityId = null) {
1555
+ super();
1556
+ this.transform = transform;
1557
+ this.space = space;
1558
+ this.selectedEntityId = selectedEntityId;
1559
+ }
1560
+ };
1561
+ __name(_SelectionTransformState, "SelectionTransformState");
1562
+ var SelectionTransformState = _SelectionTransformState;
1563
+ function readXYZ(input) {
1564
+ return {
1565
+ x: input.x,
1566
+ y: input.y,
1567
+ z: input.z
1568
+ };
1569
+ }
1570
+ __name(readXYZ, "readXYZ");
1571
+ var _TransformComponent = class _TransformComponent extends Component {
1572
+ constructor(data = {}) {
1573
+ super();
1574
+ const position = data.position ?? {};
1575
+ const rotation = data.rotation ?? {};
1576
+ const scale = data.scale ?? {};
1577
+ this.position = {
1578
+ x: position.x ?? 0,
1579
+ y: position.y ?? 0,
1580
+ z: position.z ?? 0
1581
+ };
1582
+ this.rotation = {
1583
+ x: rotation.x ?? 0,
1584
+ y: rotation.y ?? 0,
1585
+ z: rotation.z ?? 0
1586
+ };
1587
+ this.scale = {
1588
+ x: scale.x ?? 1,
1589
+ y: scale.y ?? 1,
1590
+ z: scale.z ?? 1
1591
+ };
1592
+ }
1593
+ toPositionVector3(target = new Vector3()) {
1594
+ return target.set(this.position.x, this.position.y, this.position.z);
1595
+ }
1596
+ toRotationEuler(target = new Euler(), order = "XYZ") {
1597
+ return target.set(this.rotation.x, this.rotation.y, this.rotation.z, order);
1598
+ }
1599
+ toRotationQuaternion(target = new Quaternion(), order = "XYZ") {
1600
+ const euler = new Euler(
1601
+ this.rotation.x,
1602
+ this.rotation.y,
1603
+ this.rotation.z,
1604
+ order
1605
+ );
1606
+ return target.setFromEuler(euler);
1607
+ }
1608
+ toScaleVector3(target = new Vector3()) {
1609
+ return target.set(this.scale.x, this.scale.y, this.scale.z);
1610
+ }
1611
+ setPosition(input) {
1612
+ const next = readXYZ(input);
1613
+ this.position.x = next.x;
1614
+ this.position.y = next.y;
1615
+ this.position.z = next.z;
1616
+ return this;
1617
+ }
1618
+ setScale(input) {
1619
+ const next = readXYZ(input);
1620
+ this.scale.x = next.x;
1621
+ this.scale.y = next.y;
1622
+ this.scale.z = next.z;
1623
+ return this;
1624
+ }
1625
+ setRotation(input, order = "XYZ") {
1626
+ if (input instanceof Quaternion) {
1627
+ const euler = new Euler().setFromQuaternion(input, order);
1628
+ this.rotation.x = euler.x;
1629
+ this.rotation.y = euler.y;
1630
+ this.rotation.z = euler.z;
1631
+ return this;
1632
+ }
1633
+ const next = readXYZ(input);
1634
+ this.rotation.x = next.x;
1635
+ this.rotation.y = next.y;
1636
+ this.rotation.z = next.z;
1637
+ return this;
1638
+ }
1639
+ };
1640
+ __name(_TransformComponent, "TransformComponent");
1641
+ var TransformComponent = _TransformComponent;
1642
+
1643
+ // core/components/Video.ts
1644
+ var DEFAULT_VIDEO_OPTIONS = {
1645
+ autoplay: false,
1646
+ loop: true,
1647
+ volume: 1,
1648
+ width: 1,
1649
+ height: 1,
1650
+ isGreenScreen: false,
1651
+ backgroundColor: "#00ff00",
1652
+ similarity: 0.4,
1653
+ smoothness: 0.08,
1654
+ spill: 0.12,
1655
+ /** When `true`, the video's audio stream is spatialized using the entity's transform. */
1656
+ positional: false,
1657
+ /** Distance at which volume is unattenuated (positional only). */
1658
+ refDistance: 1,
1659
+ /** WebAudio distance model (`linear`, `inverse`, `exponential`). Positional only. */
1660
+ distanceModel: "inverse",
1661
+ /** How quickly volume falls off past `refDistance`. Positional only. */
1662
+ rolloffFactor: 1
1663
+ };
1664
+ var _VideoComponent = class _VideoComponent extends Component {
1665
+ constructor(path, options = {}) {
1666
+ super();
1667
+ this.path = path;
1668
+ this.options = {
1669
+ ...DEFAULT_VIDEO_OPTIONS,
1670
+ ...options
1671
+ };
1672
+ this.object = null;
1673
+ this.videoElement = null;
1674
+ this.texture = null;
1675
+ this.material = null;
1676
+ this.audioNode = null;
1677
+ Object.defineProperty(this, "isPlaying", {
1678
+ value: false,
1679
+ writable: true,
1680
+ configurable: true,
1681
+ enumerable: false
1682
+ });
1683
+ Object.defineProperty(this, "isPaused", {
1684
+ value: false,
1685
+ writable: true,
1686
+ configurable: true,
1687
+ enumerable: false
1688
+ });
1689
+ }
1690
+ /**
1691
+ * Signals `VideoSystem` to start (or resume) playback.
1692
+ * Has no direct effect in the editor — `VideoSystem` drives the actual
1693
+ * HTML video element call in preview.
1694
+ */
1695
+ play() {
1696
+ this.isPlaying = true;
1697
+ this.isPaused = false;
1698
+ }
1699
+ /**
1700
+ * Signals `VideoSystem` to pause playback, preserving the current position.
1701
+ * Calling {@link play} afterwards resumes from where it paused.
1702
+ * No-op if not currently playing.
1703
+ */
1704
+ pause() {
1705
+ if (!this.isPlaying) return;
1706
+ this.isPlaying = false;
1707
+ this.isPaused = true;
1708
+ }
1709
+ /**
1710
+ * Signals `VideoSystem` to stop playback and reset the playback position.
1711
+ */
1712
+ stop() {
1713
+ this.isPlaying = false;
1714
+ this.isPaused = false;
1715
+ }
1716
+ };
1717
+ __name(_VideoComponent, "VideoComponent");
1718
+ var VideoComponent = _VideoComponent;
1719
+
1720
+ export { AnimationComponent, AnimationStateMachine, AnimationStateManager, AudioComponent, CameraComponent, DEFAULT_COLLIDER_STATE, DEFAULT_ENVIRONMENT_STATE, DEFAULT_MESH_GEOMETRY_PARAMETERS, DEFAULT_PHYSICS_STATE, DEFAULT_POSTPROCESSING_STATE, DEFAULT_RIGIDBODY_STATE, EntityType, Environment, ImageComponent, ImageTarget, ImageTargetAnchor, LightComponent, MaterialComponent, MeshComponent, MeshGeometryComponent, ModelComponent, Name, Object3DRef, ParentId, PhysicsComponent, Postprocessing, ScriptComponent, Selectable, SelectionTransformState, SpriteComponent, TransformComponent, VideoComponent, components_exports, normalizePhysicsState };
1721
+ //# sourceMappingURL=chunk-MAWBTMCG.js.map
1722
+ //# sourceMappingURL=chunk-MAWBTMCG.js.map