@needle-tools/engine 4.13.0 → 4.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/README.md +37 -0
  3. package/components.needle.json +1 -1
  4. package/custom-elements.json +138 -4
  5. package/dist/{needle-engine.bundle-CxaKFQVS.min.js → needle-engine.bundle-BNIUpreS.min.js} +107 -107
  6. package/dist/{needle-engine.bundle-Dl3TFYyv.js → needle-engine.bundle-DauZUYl7.js} +2347 -1845
  7. package/dist/{needle-engine.bundle-J4k4znv8.umd.cjs → needle-engine.bundle-tjI5Fq2c.umd.cjs} +108 -108
  8. package/dist/needle-engine.d.ts +4022 -419
  9. package/dist/needle-engine.js +2 -2
  10. package/dist/needle-engine.min.js +1 -1
  11. package/dist/needle-engine.umd.cjs +1 -1
  12. package/lib/engine/engine_context.d.ts +16 -0
  13. package/lib/engine/engine_context.js +16 -0
  14. package/lib/engine/engine_context.js.map +1 -1
  15. package/lib/engine/engine_gameobject.d.ts +72 -0
  16. package/lib/engine/engine_gameobject.js +38 -0
  17. package/lib/engine/engine_gameobject.js.map +1 -1
  18. package/lib/engine/engine_input.d.ts +80 -4
  19. package/lib/engine/engine_input.js +78 -2
  20. package/lib/engine/engine_input.js.map +1 -1
  21. package/lib/engine/engine_math.d.ts +81 -2
  22. package/lib/engine/engine_math.js +68 -2
  23. package/lib/engine/engine_math.js.map +1 -1
  24. package/lib/engine/engine_networking.d.ts +181 -14
  25. package/lib/engine/engine_networking.js +181 -14
  26. package/lib/engine/engine_networking.js.map +1 -1
  27. package/lib/engine/engine_networking_auto.d.ts +35 -8
  28. package/lib/engine/engine_networking_auto.js +35 -8
  29. package/lib/engine/engine_networking_auto.js.map +1 -1
  30. package/lib/engine/engine_physics.d.ts +37 -1
  31. package/lib/engine/engine_physics.js +37 -1
  32. package/lib/engine/engine_physics.js.map +1 -1
  33. package/lib/engine/engine_physics_rapier.d.ts +78 -0
  34. package/lib/engine/engine_physics_rapier.js +78 -0
  35. package/lib/engine/engine_physics_rapier.js.map +1 -1
  36. package/lib/engine/engine_serialization_decorator.d.ts +28 -2
  37. package/lib/engine/engine_serialization_decorator.js +28 -2
  38. package/lib/engine/engine_serialization_decorator.js.map +1 -1
  39. package/lib/engine/engine_time.d.ts +23 -3
  40. package/lib/engine/engine_time.js +23 -3
  41. package/lib/engine/engine_time.js.map +1 -1
  42. package/lib/engine/engine_util_decorator.d.ts +31 -1
  43. package/lib/engine/engine_util_decorator.js +31 -1
  44. package/lib/engine/engine_util_decorator.js.map +1 -1
  45. package/lib/engine/engine_utils.d.ts +21 -5
  46. package/lib/engine/engine_utils.js +21 -5
  47. package/lib/engine/engine_utils.js.map +1 -1
  48. package/lib/engine/extensions/NEEDLE_materialx.d.ts +2 -2
  49. package/lib/engine/extensions/NEEDLE_materialx.js +2 -2
  50. package/lib/engine/extensions/NEEDLE_materialx.js.map +1 -1
  51. package/lib/engine/extensions/index.d.ts +1 -1
  52. package/lib/engine/extensions/index.js +1 -1
  53. package/lib/engine/extensions/index.js.map +1 -1
  54. package/lib/engine-components/AlignmentConstraint.d.ts +23 -3
  55. package/lib/engine-components/AlignmentConstraint.js +23 -3
  56. package/lib/engine-components/AlignmentConstraint.js.map +1 -1
  57. package/lib/engine-components/Animation.d.ts +42 -0
  58. package/lib/engine-components/Animation.js +36 -0
  59. package/lib/engine-components/Animation.js.map +1 -1
  60. package/lib/engine-components/Animator.d.ts +37 -4
  61. package/lib/engine-components/Animator.js +37 -4
  62. package/lib/engine-components/Animator.js.map +1 -1
  63. package/lib/engine-components/AudioListener.d.ts +1 -1
  64. package/lib/engine-components/AudioListener.js +1 -1
  65. package/lib/engine-components/AudioSource.d.ts +32 -10
  66. package/lib/engine-components/AudioSource.js +32 -10
  67. package/lib/engine-components/AudioSource.js.map +1 -1
  68. package/lib/engine-components/AxesHelper.d.ts +22 -3
  69. package/lib/engine-components/AxesHelper.js +22 -3
  70. package/lib/engine-components/AxesHelper.js.map +1 -1
  71. package/lib/engine-components/BasicIKConstraint.d.ts +27 -4
  72. package/lib/engine-components/BasicIKConstraint.js +27 -4
  73. package/lib/engine-components/BasicIKConstraint.js.map +1 -1
  74. package/lib/engine-components/Camera.d.ts +32 -2
  75. package/lib/engine-components/Camera.js +32 -2
  76. package/lib/engine-components/Camera.js.map +1 -1
  77. package/lib/engine-components/CharacterController.d.ts +68 -4
  78. package/lib/engine-components/CharacterController.js +68 -4
  79. package/lib/engine-components/CharacterController.js.map +1 -1
  80. package/lib/engine-components/Collider.d.ts +69 -12
  81. package/lib/engine-components/Collider.js +69 -12
  82. package/lib/engine-components/Collider.js.map +1 -1
  83. package/lib/engine-components/ContactShadows.d.ts +28 -6
  84. package/lib/engine-components/ContactShadows.js +33 -8
  85. package/lib/engine-components/ContactShadows.js.map +1 -1
  86. package/lib/engine-components/DeleteBox.d.ts +43 -2
  87. package/lib/engine-components/DeleteBox.js +43 -2
  88. package/lib/engine-components/DeleteBox.js.map +1 -1
  89. package/lib/engine-components/DeviceFlag.d.ts +21 -2
  90. package/lib/engine-components/DeviceFlag.js +21 -2
  91. package/lib/engine-components/DeviceFlag.js.map +1 -1
  92. package/lib/engine-components/DragControls.d.ts +32 -2
  93. package/lib/engine-components/DragControls.js +32 -2
  94. package/lib/engine-components/DragControls.js.map +1 -1
  95. package/lib/engine-components/DropListener.d.ts +33 -21
  96. package/lib/engine-components/DropListener.js +33 -21
  97. package/lib/engine-components/DropListener.js.map +1 -1
  98. package/lib/engine-components/Duplicatable.d.ts +36 -5
  99. package/lib/engine-components/Duplicatable.js +36 -5
  100. package/lib/engine-components/Duplicatable.js.map +1 -1
  101. package/lib/engine-components/EventList.d.ts +38 -10
  102. package/lib/engine-components/EventList.js +40 -12
  103. package/lib/engine-components/EventList.js.map +1 -1
  104. package/lib/engine-components/EventTrigger.d.ts +1 -1
  105. package/lib/engine-components/EventTrigger.js +1 -1
  106. package/lib/engine-components/Fog.d.ts +23 -1
  107. package/lib/engine-components/Fog.js +23 -1
  108. package/lib/engine-components/Fog.js.map +1 -1
  109. package/lib/engine-components/GridHelper.d.ts +18 -2
  110. package/lib/engine-components/GridHelper.js +18 -2
  111. package/lib/engine-components/GridHelper.js.map +1 -1
  112. package/lib/engine-components/GroundProjection.d.ts +24 -2
  113. package/lib/engine-components/GroundProjection.js +24 -2
  114. package/lib/engine-components/GroundProjection.js.map +1 -1
  115. package/lib/engine-components/Interactable.d.ts +17 -2
  116. package/lib/engine-components/Interactable.js +17 -2
  117. package/lib/engine-components/Interactable.js.map +1 -1
  118. package/lib/engine-components/Joints.d.ts +50 -7
  119. package/lib/engine-components/Joints.js +50 -7
  120. package/lib/engine-components/Joints.js.map +1 -1
  121. package/lib/engine-components/LODGroup.d.ts +36 -14
  122. package/lib/engine-components/LODGroup.js +43 -11
  123. package/lib/engine-components/LODGroup.js.map +1 -1
  124. package/lib/engine-components/Light.d.ts +30 -5
  125. package/lib/engine-components/Light.js +30 -5
  126. package/lib/engine-components/Light.js.map +1 -1
  127. package/lib/engine-components/LookAtConstraint.d.ts +22 -7
  128. package/lib/engine-components/LookAtConstraint.js +22 -7
  129. package/lib/engine-components/LookAtConstraint.js.map +1 -1
  130. package/lib/engine-components/NeedleMenu.d.ts +27 -5
  131. package/lib/engine-components/NeedleMenu.js +27 -5
  132. package/lib/engine-components/NeedleMenu.js.map +1 -1
  133. package/lib/engine-components/NestedGltf.d.ts +39 -4
  134. package/lib/engine-components/NestedGltf.js +42 -4
  135. package/lib/engine-components/NestedGltf.js.map +1 -1
  136. package/lib/engine-components/OffsetConstraint.d.ts +27 -3
  137. package/lib/engine-components/OffsetConstraint.js +27 -3
  138. package/lib/engine-components/OffsetConstraint.js.map +1 -1
  139. package/lib/engine-components/OrbitControls.d.ts +41 -3
  140. package/lib/engine-components/OrbitControls.js +41 -3
  141. package/lib/engine-components/OrbitControls.js.map +1 -1
  142. package/lib/engine-components/PlayerColor.d.ts +1 -1
  143. package/lib/engine-components/PlayerColor.js +1 -1
  144. package/lib/engine-components/ReflectionProbe.d.ts +17 -2
  145. package/lib/engine-components/ReflectionProbe.js +17 -3
  146. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  147. package/lib/engine-components/Renderer.d.ts +35 -0
  148. package/lib/engine-components/Renderer.js +36 -2
  149. package/lib/engine-components/Renderer.js.map +1 -1
  150. package/lib/engine-components/RigidBody.d.ts +57 -5
  151. package/lib/engine-components/RigidBody.js +57 -5
  152. package/lib/engine-components/RigidBody.js.map +1 -1
  153. package/lib/engine-components/SceneSwitcher.d.ts +11 -0
  154. package/lib/engine-components/SceneSwitcher.js +11 -0
  155. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  156. package/lib/engine-components/ScreenCapture.d.ts +39 -6
  157. package/lib/engine-components/ScreenCapture.js +39 -6
  158. package/lib/engine-components/ScreenCapture.js.map +1 -1
  159. package/lib/engine-components/SeeThrough.d.ts +70 -5
  160. package/lib/engine-components/SeeThrough.js +70 -5
  161. package/lib/engine-components/SeeThrough.js.map +1 -1
  162. package/lib/engine-components/ShadowCatcher.d.ts +56 -4
  163. package/lib/engine-components/ShadowCatcher.js +56 -4
  164. package/lib/engine-components/ShadowCatcher.js.map +1 -1
  165. package/lib/engine-components/Skybox.d.ts +43 -7
  166. package/lib/engine-components/Skybox.js +43 -7
  167. package/lib/engine-components/Skybox.js.map +1 -1
  168. package/lib/engine-components/SmoothFollow.d.ts +66 -7
  169. package/lib/engine-components/SmoothFollow.js +66 -7
  170. package/lib/engine-components/SmoothFollow.js.map +1 -1
  171. package/lib/engine-components/SpatialTrigger.d.ts +48 -1
  172. package/lib/engine-components/SpatialTrigger.js +48 -1
  173. package/lib/engine-components/SpatialTrigger.js.map +1 -1
  174. package/lib/engine-components/SpectatorCamera.d.ts +21 -3
  175. package/lib/engine-components/SpectatorCamera.js +21 -3
  176. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  177. package/lib/engine-components/SyncedRoom.d.ts +7 -1
  178. package/lib/engine-components/SyncedRoom.js +7 -1
  179. package/lib/engine-components/SyncedRoom.js.map +1 -1
  180. package/lib/engine-components/SyncedTransform.d.ts +55 -6
  181. package/lib/engine-components/SyncedTransform.js +55 -6
  182. package/lib/engine-components/SyncedTransform.js.map +1 -1
  183. package/lib/engine-components/TransformGizmo.d.ts +30 -3
  184. package/lib/engine-components/TransformGizmo.js +30 -3
  185. package/lib/engine-components/TransformGizmo.js.map +1 -1
  186. package/lib/engine-components/VideoPlayer.d.ts +33 -6
  187. package/lib/engine-components/VideoPlayer.js +45 -6
  188. package/lib/engine-components/VideoPlayer.js.map +1 -1
  189. package/lib/engine-components/Voip.d.ts +33 -2
  190. package/lib/engine-components/Voip.js +33 -2
  191. package/lib/engine-components/Voip.js.map +1 -1
  192. package/lib/engine-components/export/usdz/USDZExporter.d.ts +47 -13
  193. package/lib/engine-components/export/usdz/USDZExporter.js +47 -13
  194. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  195. package/lib/engine-components/particlesystem/ParticleSystem.d.ts +82 -3
  196. package/lib/engine-components/particlesystem/ParticleSystem.js +82 -3
  197. package/lib/engine-components/particlesystem/ParticleSystem.js.map +1 -1
  198. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +1 -0
  199. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +1 -0
  200. package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -1
  201. package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +1 -1
  202. package/lib/engine-components/postprocessing/Effects/BloomEffect.js +1 -1
  203. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +1 -1
  204. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +1 -1
  205. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +1 -1
  206. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +1 -1
  207. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +1 -1
  208. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +1 -1
  209. package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +1 -0
  210. package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +1 -0
  211. package/lib/engine-components/postprocessing/Effects/EffectWrapper.js.map +1 -1
  212. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +1 -1
  213. package/lib/engine-components/postprocessing/Effects/Pixelation.js +1 -1
  214. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +1 -1
  215. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +1 -1
  216. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +1 -1
  217. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +1 -1
  218. package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +1 -1
  219. package/lib/engine-components/postprocessing/Effects/Sharpening.js +1 -1
  220. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +1 -1
  221. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +1 -1
  222. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +1 -1
  223. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +1 -1
  224. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +1 -1
  225. package/lib/engine-components/postprocessing/Effects/Vignette.js +1 -1
  226. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +1 -1
  227. package/lib/engine-components/postprocessing/PostProcessingHandler.js +1 -1
  228. package/lib/engine-components/postprocessing/Volume.d.ts +1 -1
  229. package/lib/engine-components/postprocessing/Volume.js +1 -1
  230. package/lib/engine-components/splines/Spline.d.ts +409 -12
  231. package/lib/engine-components/splines/Spline.js +409 -12
  232. package/lib/engine-components/splines/Spline.js.map +1 -1
  233. package/lib/engine-components/splines/SplineUtils.d.ts +1 -0
  234. package/lib/engine-components/splines/SplineUtils.js +1 -0
  235. package/lib/engine-components/splines/SplineUtils.js.map +1 -1
  236. package/lib/engine-components/splines/SplineWalker.d.ts +3 -1
  237. package/lib/engine-components/splines/SplineWalker.js +3 -1
  238. package/lib/engine-components/splines/SplineWalker.js.map +1 -1
  239. package/lib/engine-components/timeline/PlayableDirector.d.ts +103 -14
  240. package/lib/engine-components/timeline/PlayableDirector.js +95 -25
  241. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  242. package/lib/engine-components/timeline/TimelineModels.d.ts +14 -0
  243. package/lib/engine-components/timeline/TimelineModels.js +4 -0
  244. package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
  245. package/lib/engine-components/ui/Button.d.ts +29 -3
  246. package/lib/engine-components/ui/Button.js +29 -3
  247. package/lib/engine-components/ui/Button.js.map +1 -1
  248. package/lib/engine-components/ui/Canvas.d.ts +29 -4
  249. package/lib/engine-components/ui/Canvas.js +29 -4
  250. package/lib/engine-components/ui/Canvas.js.map +1 -1
  251. package/lib/engine-components/ui/CanvasGroup.d.ts +1 -1
  252. package/lib/engine-components/ui/CanvasGroup.js +1 -1
  253. package/lib/engine-components/ui/EventSystem.d.ts +1 -1
  254. package/lib/engine-components/ui/EventSystem.js +1 -1
  255. package/lib/engine-components/ui/Graphic.d.ts +1 -0
  256. package/lib/engine-components/ui/Graphic.js +1 -0
  257. package/lib/engine-components/ui/Graphic.js.map +1 -1
  258. package/lib/engine-components/ui/Image.d.ts +22 -3
  259. package/lib/engine-components/ui/Image.js +22 -3
  260. package/lib/engine-components/ui/Image.js.map +1 -1
  261. package/lib/engine-components/ui/InputField.d.ts +1 -1
  262. package/lib/engine-components/ui/InputField.js +1 -1
  263. package/lib/engine-components/ui/Layout.d.ts +3 -0
  264. package/lib/engine-components/ui/Layout.js +3 -0
  265. package/lib/engine-components/ui/Layout.js.map +1 -1
  266. package/lib/engine-components/ui/Outline.d.ts +1 -1
  267. package/lib/engine-components/ui/Outline.js +1 -1
  268. package/lib/engine-components/ui/PointerEvents.d.ts +1 -1
  269. package/lib/engine-components/ui/PointerEvents.js +1 -1
  270. package/lib/engine-components/ui/Raycaster.d.ts +55 -6
  271. package/lib/engine-components/ui/Raycaster.js +55 -6
  272. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  273. package/lib/engine-components/ui/RectTransform.d.ts +1 -1
  274. package/lib/engine-components/ui/RectTransform.js +1 -1
  275. package/lib/engine-components/ui/SpatialHtml.d.ts +1 -1
  276. package/lib/engine-components/ui/SpatialHtml.js +1 -1
  277. package/lib/engine-components/ui/Text.d.ts +23 -1
  278. package/lib/engine-components/ui/Text.js +23 -1
  279. package/lib/engine-components/ui/Text.js.map +1 -1
  280. package/lib/engine-components/utils/LookAt.d.ts +1 -1
  281. package/lib/engine-components/utils/LookAt.js +1 -1
  282. package/lib/engine-components/utils/OpenURL.d.ts +1 -1
  283. package/lib/engine-components/utils/OpenURL.js +1 -1
  284. package/lib/engine-components/web/Clickthrough.d.ts +116 -7
  285. package/lib/engine-components/web/Clickthrough.js +116 -7
  286. package/lib/engine-components/web/Clickthrough.js.map +1 -1
  287. package/lib/engine-components/web/CursorFollow.d.ts +171 -7
  288. package/lib/engine-components/web/CursorFollow.js +171 -7
  289. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  290. package/lib/engine-components/web/HoverAnimation.d.ts +140 -11
  291. package/lib/engine-components/web/HoverAnimation.js +140 -11
  292. package/lib/engine-components/web/HoverAnimation.js.map +1 -1
  293. package/lib/engine-components/web/ScrollFollow.d.ts +4 -1
  294. package/lib/engine-components/web/ScrollFollow.js +4 -1
  295. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  296. package/lib/engine-components/web/ViewBox.d.ts +116 -16
  297. package/lib/engine-components/web/ViewBox.js +110 -16
  298. package/lib/engine-components/web/ViewBox.js.map +1 -1
  299. package/lib/engine-components/webxr/TeleportTarget.d.ts +21 -2
  300. package/lib/engine-components/webxr/TeleportTarget.js +21 -2
  301. package/lib/engine-components/webxr/TeleportTarget.js.map +1 -1
  302. package/lib/engine-components/webxr/WebXR.d.ts +10 -2
  303. package/lib/engine-components/webxr/WebXR.js +10 -2
  304. package/lib/engine-components/webxr/WebXR.js.map +1 -1
  305. package/lib/engine-components/webxr/WebXRAvatar.d.ts +39 -2
  306. package/lib/engine-components/webxr/WebXRAvatar.js +35 -3
  307. package/lib/engine-components/webxr/WebXRAvatar.js.map +1 -1
  308. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +266 -30
  309. package/lib/engine-components/webxr/WebXRImageTracking.js +266 -30
  310. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
  311. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +1 -1
  312. package/lib/engine-components/webxr/WebXRPlaneTracking.js +1 -1
  313. package/lib/engine-components/webxr/XRFlag.d.ts +29 -2
  314. package/lib/engine-components/webxr/XRFlag.js +29 -2
  315. package/lib/engine-components/webxr/XRFlag.js.map +1 -1
  316. package/package.json +1 -1
  317. package/plugins/vite/custom-element-data.js +128 -19
  318. package/src/engine/engine_context.ts +16 -0
  319. package/src/engine/engine_gameobject.ts +73 -0
  320. package/src/engine/engine_input.ts +83 -7
  321. package/src/engine/engine_math.ts +81 -2
  322. package/src/engine/engine_networking.ts +186 -17
  323. package/src/engine/engine_networking_auto.ts +36 -9
  324. package/src/engine/engine_physics.ts +41 -1
  325. package/src/engine/engine_physics_rapier.ts +81 -0
  326. package/src/engine/engine_serialization_decorator.ts +28 -2
  327. package/src/engine/engine_time.ts +23 -3
  328. package/src/engine/engine_util_decorator.ts +31 -1
  329. package/src/engine/engine_utils.ts +21 -5
  330. package/src/engine/extensions/NEEDLE_materialx.ts +5 -4
  331. package/src/engine/extensions/index.ts +2 -2
  332. package/src/engine-components/AlignmentConstraint.ts +24 -4
  333. package/src/engine-components/Animation.ts +44 -2
  334. package/src/engine-components/Animator.ts +40 -7
  335. package/src/engine-components/AudioListener.ts +1 -1
  336. package/src/engine-components/AudioSource.ts +37 -15
  337. package/src/engine-components/AxesHelper.ts +23 -4
  338. package/src/engine-components/BasicIKConstraint.ts +28 -5
  339. package/src/engine-components/Camera.ts +33 -3
  340. package/src/engine-components/CharacterController.ts +74 -7
  341. package/src/engine-components/Collider.ts +78 -21
  342. package/src/engine-components/ContactShadows.ts +41 -11
  343. package/src/engine-components/DeleteBox.ts +43 -2
  344. package/src/engine-components/DeviceFlag.ts +22 -3
  345. package/src/engine-components/DragControls.ts +32 -2
  346. package/src/engine-components/DropListener.ts +41 -29
  347. package/src/engine-components/Duplicatable.ts +37 -6
  348. package/src/engine-components/EventList.ts +43 -15
  349. package/src/engine-components/EventTrigger.ts +1 -1
  350. package/src/engine-components/Fog.ts +23 -1
  351. package/src/engine-components/GridHelper.ts +18 -2
  352. package/src/engine-components/GroundProjection.ts +25 -3
  353. package/src/engine-components/Interactable.ts +17 -2
  354. package/src/engine-components/Joints.ts +51 -8
  355. package/src/engine-components/LODGroup.ts +45 -11
  356. package/src/engine-components/Light.ts +35 -13
  357. package/src/engine-components/LookAtConstraint.ts +26 -8
  358. package/src/engine-components/NeedleMenu.ts +29 -7
  359. package/src/engine-components/NestedGltf.ts +40 -4
  360. package/src/engine-components/OffsetConstraint.ts +27 -3
  361. package/src/engine-components/OrbitControls.ts +41 -3
  362. package/src/engine-components/PlayerColor.ts +1 -1
  363. package/src/engine-components/ReflectionProbe.ts +19 -5
  364. package/src/engine-components/Renderer.ts +35 -1
  365. package/src/engine-components/RigidBody.ts +64 -8
  366. package/src/engine-components/SceneSwitcher.ts +11 -0
  367. package/src/engine-components/ScreenCapture.ts +42 -9
  368. package/src/engine-components/SeeThrough.ts +76 -9
  369. package/src/engine-components/ShadowCatcher.ts +61 -6
  370. package/src/engine-components/Skybox.ts +48 -12
  371. package/src/engine-components/SmoothFollow.ts +68 -7
  372. package/src/engine-components/SpatialTrigger.ts +51 -4
  373. package/src/engine-components/SpectatorCamera.ts +23 -5
  374. package/src/engine-components/SyncedRoom.ts +8 -2
  375. package/src/engine-components/SyncedTransform.ts +59 -10
  376. package/src/engine-components/TransformGizmo.ts +31 -4
  377. package/src/engine-components/VideoPlayer.ts +48 -6
  378. package/src/engine-components/Voip.ts +33 -2
  379. package/src/engine-components/export/usdz/USDZExporter.ts +47 -13
  380. package/src/engine-components/particlesystem/ParticleSystem.ts +84 -5
  381. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +1 -0
  382. package/src/engine-components/postprocessing/Effects/BloomEffect.ts +1 -1
  383. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +1 -1
  384. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +1 -1
  385. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +1 -1
  386. package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +1 -0
  387. package/src/engine-components/postprocessing/Effects/Pixelation.ts +1 -1
  388. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +1 -1
  389. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +1 -1
  390. package/src/engine-components/postprocessing/Effects/Sharpening.ts +1 -1
  391. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +1 -1
  392. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +1 -1
  393. package/src/engine-components/postprocessing/Effects/Vignette.ts +1 -1
  394. package/src/engine-components/postprocessing/PostProcessingHandler.ts +1 -1
  395. package/src/engine-components/postprocessing/Volume.ts +1 -1
  396. package/src/engine-components/splines/Spline.ts +412 -14
  397. package/src/engine-components/splines/SplineUtils.ts +1 -0
  398. package/src/engine-components/splines/SplineWalker.ts +4 -2
  399. package/src/engine-components/timeline/PlayableDirector.ts +108 -27
  400. package/src/engine-components/timeline/SignalAsset.ts +1 -1
  401. package/src/engine-components/timeline/TimelineModels.ts +18 -2
  402. package/src/engine-components/ui/Button.ts +29 -3
  403. package/src/engine-components/ui/Canvas.ts +29 -4
  404. package/src/engine-components/ui/CanvasGroup.ts +2 -2
  405. package/src/engine-components/ui/EventSystem.ts +1 -1
  406. package/src/engine-components/ui/Graphic.ts +1 -0
  407. package/src/engine-components/ui/Image.ts +22 -3
  408. package/src/engine-components/ui/InputField.ts +2 -2
  409. package/src/engine-components/ui/Layout.ts +3 -0
  410. package/src/engine-components/ui/Outline.ts +1 -1
  411. package/src/engine-components/ui/PointerEvents.ts +1 -1
  412. package/src/engine-components/ui/Raycaster.ts +57 -8
  413. package/src/engine-components/ui/RectTransform.ts +2 -2
  414. package/src/engine-components/ui/SpatialHtml.ts +1 -1
  415. package/src/engine-components/ui/Text.ts +24 -2
  416. package/src/engine-components/utils/LookAt.ts +1 -1
  417. package/src/engine-components/utils/OpenURL.ts +1 -1
  418. package/src/engine-components/web/Clickthrough.ts +119 -10
  419. package/src/engine-components/web/CursorFollow.ts +174 -9
  420. package/src/engine-components/web/HoverAnimation.ts +142 -13
  421. package/src/engine-components/web/ScrollFollow.ts +4 -1
  422. package/src/engine-components/web/ViewBox.ts +118 -18
  423. package/src/engine-components/webxr/TeleportTarget.ts +23 -4
  424. package/src/engine-components/webxr/WebXR.ts +11 -3
  425. package/src/engine-components/webxr/WebXRAvatar.ts +41 -4
  426. package/src/engine-components/webxr/WebXRImageTracking.ts +282 -38
  427. package/src/engine-components/webxr/WebXRPlaneTracking.ts +1 -1
  428. package/src/engine-components/webxr/XRFlag.ts +30 -3
@@ -4,15 +4,37 @@ import { serializable } from "../engine/engine_serialization.js";
4
4
  import { Behaviour } from "./Component.js";
5
5
 
6
6
 
7
+ /**
8
+ * Fog rendering mode
9
+ */
7
10
  enum FogMode {
11
+ /** Linear fog increases uniformly with distance */
8
12
  Linear = 1,
13
+ /** Exponential fog increases exponentially with distance */
9
14
  Exponential = 2,
15
+ /** Exponential squared fog for denser falloff */
10
16
  ExponentialSquared = 3,
11
17
  }
12
18
 
13
- /** @internal */
19
+ /**
20
+ * Adds distance-based fog effect to the scene.
21
+ * When enabled, objects will fade into the fog color based on their distance from the camera.
22
+ *
23
+ * This component is automatically added to the scene when fog is enabled in the editor.
24
+ * For setting fog from code you can simply use `scene.fog = new Fog3(color, near, far)` without adding this component.
25
+ *
26
+ * @summary Adds fog effect to the scene
27
+ * @category Rendering
28
+ * @group Components
29
+ * @link https://threejs.org/docs/#Fog
30
+ */
14
31
  export class Fog extends Behaviour {
15
32
 
33
+ /**
34
+ * The underlying Three.js Fog object. You can modify its properties directly for more advanced control.
35
+ * @remarks The Fog component provides convenient access to common fog properties like `near`, `far`, and `color`. Modifying those will update the underlying `fog` object accordingly. However, you can also access and modify the `fog` object directly for more advanced use cases, such as changing the fog mode or using a custom shader.
36
+ * @link https://threejs.org/docs/#Fog for available properties and methods on the Fog object.
37
+ */
16
38
  get fog() {
17
39
  if (!this._fog) this._fog = new Fog3(0x000000, 0, 50);
18
40
  return this._fog;
@@ -5,11 +5,27 @@ import { serializable } from "../engine/engine_serialization_decorator.js";
5
5
  import { Behaviour } from "./Component.js";
6
6
 
7
7
  /**
8
- * GridHelper is a component that allows to display a grid in the scene.
8
+ * The [GridHelper](https://engine.needle.tools/docs/api/GridHelper) displays a flat grid in the scene for visual reference.
9
+ * Useful for debugging, level design, or providing spatial context.
9
10
  *
10
- * @example Display a grid in the scene
11
+ * ![](https://cloud.needle.tools/-/media/prWArU8xTbgBKWQOvhTOag.gif)
12
+ *
13
+ * **Properties:**
14
+ * - `color0` / `color1` - Alternating grid line colors
15
+ * - `isGizmo` - When true, only shows when gizmos are enabled
16
+ *
17
+ * @example Add a grid to the scene
18
+ * ```ts
19
+ * const grid = myObject.addComponent(GridHelper);
20
+ * grid.color0 = new Color(0.3, 0.3, 0.3);
21
+ * grid.color1 = new Color(0.5, 0.5, 0.5);
22
+ * ```
23
+ *
11
24
  * @category Helpers
12
25
  * @group Components
26
+ * @see {@link Gizmos} for debug visualization
27
+ *
28
+ * ![](https://cloud.needle.tools/-/media/i5KGKBUQ3iAX9h6o_9EY2w.jpg)
13
29
  */
14
30
  export class GridHelper extends Behaviour {
15
31
 
@@ -10,13 +10,35 @@ import { Behaviour } from "./Component.js";
10
10
  const debug = getParam("debuggroundprojection");
11
11
 
12
12
  /**
13
- * GroundProjectedEnv creates a ground projection of the current environment map.
14
- *
15
- * - Example https://engine.needle.tools/samples/ground-projection
13
+ * The [GroundProjectedEnv](https://engine.needle.tools/docs/api/GroundProjectedEnv) projects the environment map onto a virtual ground plane.
14
+ * Creates a realistic floor from 360° panoramas/HDRIs by deforming the skybox
15
+ * into a hemisphere with a beveled floor.
16
+ *
16
17
  *
18
+ * [![](https://cloud.needle.tools/-/media/8LDMd4TnGxVIj1XOfxIUIA.gif)](https://engine.needle.tools/samples/ground-projection)
19
+ *
20
+ * **Key properties:**
21
+ * - `radius` - Size of the projection sphere (keep camera inside)
22
+ * - `height` - How high the original photo was taken (affects floor magnification)
23
+ * - `autoFit` - Automatically center and position at ground level
24
+ * - `arBlending` - Blend with real-world in AR (0=hidden, 1=visible)
25
+ *
26
+ * **Debug:** Use `?debuggroundprojection` URL parameter.
27
+ *
28
+ * @example Apply ground projection
29
+ * ```ts
30
+ * const ground = myObject.getComponent(GroundProjectedEnv);
31
+ * ground.radius = 100;
32
+ * ground.height = 2;
33
+ * ground.apply();
34
+ * ```
35
+ *
17
36
  * @summary Projects the environment map onto the ground
18
37
  * @category Rendering
19
38
  * @group Components
39
+ * @see {@link Camera} for environment/skybox settings
40
+ * @see {@link ContactShadows} for ground shadows
41
+ * @link https://engine.needle.tools/samples/ground-projection for a demo of ground projection
20
42
  */
21
43
  export class GroundProjectedEnv extends Behaviour {
22
44
 
@@ -1,8 +1,23 @@
1
1
  import { Behaviour } from "./Component.js";
2
2
 
3
3
  /**
4
- * Marks an object as currently being interacted with.
5
- * For example, DragControls set this on the dragged object to prevent DeleteBox from deleting it.
4
+ * UsageMarker indicates an object is currently being interacted with.
5
+ * Components like {@link DragControls} add this to prevent accidental deletion
6
+ * by {@link DeleteBox} while the user is dragging.
7
+ *
8
+ * @example Check if object is in use
9
+ * ```ts
10
+ * const marker = object.getComponent(UsageMarker);
11
+ * if (marker?.isUsed) {
12
+ * console.log("Object is being used by:", marker.usedBy);
13
+ * }
14
+ * ```
15
+ *
16
+ * @summary Marks object as currently being interacted with
17
+ * @category Interactivity
18
+ * @group Components
19
+ * @see {@link DeleteBox} respects this marker
20
+ * @see {@link DragControls} adds this during drag
6
21
  */
7
22
  export class UsageMarker extends Behaviour
8
23
  {
@@ -5,12 +5,22 @@ import { Behaviour } from "./Component.js";
5
5
  import { Rigidbody } from "./RigidBody.js";
6
6
 
7
7
  /**
8
- * Base class for physics joints connecting two rigid bodies.
9
- * @summary Connect two Rigidbodies
8
+ * Base class for physics joints that connect two {@link Rigidbody} components.
9
+ * Joints constrain how two bodies can move relative to each other.
10
+ *
11
+ * The joint is created between:
12
+ * - The {@link Rigidbody} on this GameObject (automatically found)
13
+ * - The {@link connectedBody} Rigidbody you specify
14
+ *
15
+ * @summary Connect two Rigidbodies with physics constraints
10
16
  * @category Physics
11
17
  * @group Components
18
+ * @see {@link FixedJoint} for rigid connections
19
+ * @see {@link HingeJoint} for rotating connections
20
+ * @see {@link Rigidbody} for physics bodies
12
21
  */
13
22
  export abstract class Joint extends Behaviour {
23
+ /** The other Rigidbody to connect to */
14
24
  @serializable(Rigidbody)
15
25
  connectedBody?: Rigidbody;
16
26
 
@@ -37,10 +47,25 @@ export abstract class Joint extends Behaviour {
37
47
  }
38
48
 
39
49
  /**
40
- * The FixedJoint groups together 2 rigidbodies, making them stick together in their bound position
41
- * @summary Connect two Rigidbodies and make them stick together
50
+ * FixedJoint locks two {@link Rigidbody} components together, making them move as one rigid unit.
51
+ * The bodies maintain their relative position and rotation at the time the joint is created.
52
+ *
53
+ * Use this for:
54
+ * - Attaching objects together permanently
55
+ * - Creating compound rigid bodies
56
+ * - Welding broken pieces back together
57
+ *
58
+ * @example Attach a weapon to a character
59
+ * ```ts
60
+ * const joint = weapon.addComponent(FixedJoint);
61
+ * joint.connectedBody = characterRigidbody;
62
+ * ```
63
+ *
64
+ * @summary Lock two Rigidbodies together rigidly
42
65
  * @category Physics
43
66
  * @group Components
67
+ * @see {@link Joint} base class
68
+ * @see {@link HingeJoint} for rotating connections
44
69
  */
45
70
  export class FixedJoint extends Joint {
46
71
 
@@ -50,18 +75,36 @@ export class FixedJoint extends Joint {
50
75
  }
51
76
 
52
77
  /**
53
- * The HingeJoint groups together 2 rigid bodies, constraining them to move like connected by a hinge.
54
- *
55
- * You can specify the anchor point and axis of rotation for the hinge.
56
- * @summary Connect two Rigidbodies with a hinge
78
+ * HingeJoint connects two {@link Rigidbody} components with a rotating constraint,
79
+ * like a door hinge or wheel axle. Bodies can only rotate around the specified axis.
80
+ *
81
+ * Use this for:
82
+ * - Doors and gates
83
+ * - Wheels and axles
84
+ * - Pendulums
85
+ * - Any rotating mechanical connection
86
+ *
87
+ * @example Create a door hinge
88
+ * ```ts
89
+ * const hinge = door.addComponent(HingeJoint);
90
+ * hinge.connectedBody = doorFrameRigidbody;
91
+ * hinge.anchor = new Vector3(0, 0, 0); // Hinge position
92
+ * hinge.axis = new Vector3(0, 1, 0); // Rotate around Y axis
93
+ * ```
94
+ *
95
+ * @summary Connect two Rigidbodies with a rotating hinge
57
96
  * @category Physics
58
97
  * @group Components
98
+ * @see {@link Joint} base class
99
+ * @see {@link FixedJoint} for rigid connections
59
100
  */
60
101
  export class HingeJoint extends Joint {
61
102
 
103
+ /** Local position of the hinge pivot point */
62
104
  @serializable(Vector3)
63
105
  anchor?: Vector3;
64
106
 
107
+ /** Axis of rotation for the hinge (e.g., Vector3(0,1,0) for vertical axis) */
65
108
  @serializable(Vector3)
66
109
  axis?: Vector3;
67
110
 
@@ -8,17 +8,32 @@ import { Renderer } from "./Renderer.js";
8
8
  const debug = getParam("debuglods");
9
9
  const noLods = getParam("nolods");
10
10
 
11
+ /**
12
+ * Defines how LOD levels transition between each other
13
+ */
11
14
  enum LODFadeMode {
15
+ /** Instant switch between LOD levels */
12
16
  None = 0,
17
+ /** Smooth cross-fade transition between levels */
13
18
  CrossFade = 1,
19
+ /** SpeedTree-style blending for vegetation */
14
20
  SpeedTree = 2,
15
21
  }
16
22
 
23
+ /**
24
+ * Defines a single LOD level with its transition distance and associated renderers.
25
+ * Used by {@link LODGroup} to configure level of detail switching.
26
+ */
17
27
  export class LODModel {
28
+ /** Screen height ratio (0-1) at which this LOD becomes active */
18
29
  @serializable()
19
30
  screenRelativeTransitionHeight!: number;
31
+
32
+ /** Distance from camera at which this LOD becomes active */
20
33
  @serializable()
21
34
  distance!: number;
35
+
36
+ /** Renderers to show at this LOD level */
22
37
  @serializable(Renderer)
23
38
  renderers!: Renderer[];
24
39
  }
@@ -39,23 +54,36 @@ declare class LODSetting {
39
54
  }
40
55
 
41
56
  /**
42
- * LODGroup allows to create a group of LOD levels for an object.
43
- *
57
+ * LODGroup manages multiple levels of detail for optimized rendering.
58
+ * Objects switch between different detail levels based on distance from camera.
59
+ *
60
+ * LOD levels are defined in {@link LODModel} objects, each specifying:
61
+ * - The distance at which that level becomes active
62
+ * - The {@link Renderer} components to show at that level
63
+ *
64
+ * This is useful for performance optimization - showing high-detail models up close
65
+ * and lower-detail versions at distance where the difference isn't visible.
66
+ *
67
+ * **Progressive Loading:**
68
+ * For automatic texture/mesh LOD streaming, see the `@needle-tools/gltf-progressive` package
69
+ * which provides progressive loading capabilities independent of this component.
70
+ *
71
+ * **Debug options:**
72
+ * - `?debuglods` - Log LOD switching information
73
+ * - `?nolods` - Disable LOD system entirely
74
+ *
44
75
  * @summary Level of Detail Group for optimizing rendering
45
76
  * @category Rendering
46
77
  * @group Components
78
+ * @see {@link LODModel} for configuring individual LOD levels
79
+ * @see {@link Renderer} for the renderers controlled by LOD
80
+ * @see {@link LODsManager} for programmatic control of progressive LODs
81
+ * @link https://npmjs.com/package/@needle-tools/gltf-progressive
47
82
  */
48
83
  export class LODGroup extends Behaviour {
49
-
50
- fadeMode: LODFadeMode = LODFadeMode.None;
51
- @serializable(Vector3)
52
- localReferencePoint: Vector3 | undefined = undefined;
53
- lodCount: number = 0;
54
- size: number = 0;
55
- animateCrossFading: boolean = false;
56
-
84
+ /** Array of LOD level configurations */
57
85
  @serializable(LODModel)
58
- lodModels?: LODModel[];
86
+ readonly lodModels: LODModel[] = []
59
87
 
60
88
  private _lods: LOD[] = [];
61
89
  private _settings: LODSetting[] = [];
@@ -145,6 +173,12 @@ export class LODGroup extends Behaviour {
145
173
 
146
174
  private _distanceFactor = 1;
147
175
 
176
+ /**
177
+ * Adjusts all LOD transition distances by a multiplier.
178
+ * Values > 1 push LOD transitions further away (higher quality at distance).
179
+ * Values < 1 bring transitions closer (better performance).
180
+ * @param factor Multiplier to apply to all LOD distances
181
+ */
148
182
  distanceFactor(factor: number) {
149
183
  if (factor === this._distanceFactor) return;
150
184
  this._distanceFactor = factor;
@@ -1,14 +1,11 @@
1
1
  import { CameraHelper, Color, DirectionalLight, DirectionalLightHelper, Light as ThreeLight, OrthographicCamera, PointLight, SpotLight, Vector3 } from "three";
2
- import { get } from "three-mesh-ui/build/types/core/DefaultValues.js";
3
2
 
4
3
  import { serializable } from "../engine/engine_serialization_decorator.js";
5
4
  import { FrameEvent } from "../engine/engine_setup.js";
6
5
  import { setWorldPositionXYZ } from "../engine/engine_three_utils.js";
7
6
  import type { ILight } from "../engine/engine_types.js";
8
7
  import { getParam } from "../engine/engine_utils.js";
9
- import { type NeedleXREventArgs } from "../engine/xr/api.js";
10
8
  import { Behaviour, GameObject } from "./Component.js";
11
- import { WebARSessionRoot } from "./webxr/WebARSessionRoot.js";
12
9
 
13
10
  // https://threejs.org/examples/webgl_shadowmap_csm.html
14
11
 
@@ -26,7 +23,8 @@ const debug = getParam("debuglights");
26
23
 
27
24
 
28
25
  /**
29
- * Defines the type of light in a scene.
26
+ * Defines the type of light in a scene.
27
+ * @see {@link Light} for configuring light properties and behavior
30
28
  */
31
29
  export enum LightType {
32
30
  /** Spot light that emits light in a cone shape */
@@ -44,7 +42,8 @@ export enum LightType {
44
42
  }
45
43
 
46
44
  /**
47
- * Defines how a light contributes to the scene lighting.
45
+ * Defines how a light contributes to the scene lighting.
46
+ * @see {@link Light} for configuring light properties and behavior
48
47
  */
49
48
  export enum LightmapBakeType {
50
49
  /** Light affects the scene in real-time with no baking */
@@ -58,6 +57,7 @@ export enum LightmapBakeType {
58
57
  /**
59
58
  * Defines the shadow casting options for a Light.
60
59
  * @enum {number}
60
+ * @see {@link Light} for configuring shadow settings
61
61
  */
62
62
  enum LightShadows {
63
63
  /** No shadows are cast */
@@ -68,17 +68,39 @@ enum LightShadows {
68
68
  Soft = 2,
69
69
  }
70
70
 
71
- /**
72
- * The Light component creates a light source in the scene.
73
- * Supports directional, spot, and point light types with various customization options.
74
- * Lights can cast shadows with configurable settings and can be set to baked or realtime rendering.
75
- *
76
- * Debug mode can be enabled with the URL parameter `?debuglights`, which shows
77
- * additional console output and visual helpers for lights.
78
- *
71
+ /**
72
+ * [Light](https://engine.needle.tools/docs/api/Light) creates a light source in the scene for illuminating 3D objects.
73
+ *
74
+ * **Light types:**
75
+ * - `Directional` - Sun-like parallel rays (best for outdoor scenes)
76
+ * - `Point` - Omnidirectional from a point (bulbs, candles)
77
+ * - `Spot` - Cone-shaped (flashlights, stage lights)
78
+ *
79
+ * **Shadows:**
80
+ * Enable shadows via `shadows` property. Configure quality with shadow resolution
81
+ * settings. Directional lights support adaptive shadow cascades.
82
+ *
83
+ * **Performance tips:**
84
+ * - Use baked lighting (`lightmapBakeType = Baked`) when possible
85
+ * - Limit shadow-casting lights (1-2 recommended)
86
+ * - Reduce shadow resolution for mobile
87
+ *
88
+ * **Debug:** Use `?debuglights` URL parameter for visual helpers.
89
+ *
90
+ * @example Configure a directional light
91
+ * ```ts
92
+ * const light = myLight.getComponent(Light);
93
+ * light.intensity = 1.5;
94
+ * light.color = new Color(1, 0.95, 0.9); // Warm white
95
+ * light.shadows = LightShadows.Soft;
96
+ * ```
97
+ *
79
98
  * @summary Light component for various light types and shadow settings
80
99
  * @category Rendering
81
100
  * @group Components
101
+ * @see {@link LightType} for available light types
102
+ * @see {@link ReflectionProbe} for environment reflections
103
+ * @see {@link Camera} for rendering configuration
82
104
  */
83
105
  export class Light extends Behaviour implements ILight {
84
106
 
@@ -1,37 +1,55 @@
1
1
  import { Object3D, Vector3 } from "three";
2
2
 
3
3
  import { serializable } from "../engine/engine_serialization_decorator.js";
4
+ import type { LookAt } from "./api.js";
4
5
  import { Behaviour } from "./Component.js";
5
6
  import type { OrbitControls } from "./OrbitControls.js";
6
7
 
7
8
  /**
8
- * A LookAtConstraint is used by OrbitControls to make the camera look at a target.
9
- * This component is used by {@link OrbitControls} internally.
10
- *
11
- * @summary Look At Constraint for OrbitControls
9
+ * The [LookAtConstraint](https://engine.needle.tools/docs/api/LookAtConstraint) component is primarely used by {@link OrbitControls} to set the camera's focus point.
10
+ * It does not have its own logic to update the look-at position.
11
+ *
12
+ * The constraint uses a list of source objects - the look-at target is
13
+ * calculated from the first source in the `sources` array.
14
+ *
15
+ * **Integration with OrbitControls:**
16
+ * When attached to the same GameObject as OrbitControls, this constraint
17
+ * controls where the camera orbits around and looks at.
18
+ *
19
+ * @summary Look At Constraint for camera targeting
12
20
  * @category Camera and Controls
13
21
  * @group Components
22
+ * @see {@link OrbitControls} for camera orbit controls
23
+ * @see {@link SmoothFollow} for smooth position/rotation following
24
+ * @see {@link LookAt} for directly making an object look at a target without using a constraint
14
25
  */
15
26
  export class LookAtConstraint extends Behaviour {
16
27
 
17
28
  /**
18
- * When true the constraint is active.
29
+ * When true, the constraint is active and affects the target.
30
+ * Set to false to temporarily disable without removing sources.
19
31
  */
20
32
  @serializable()
21
33
  constraintActive: boolean = true;
34
+
22
35
  /**
23
- * When true the look at is locked to the position of the assigned sources.
36
+ * When true, the look-at position is locked and won't update
37
+ * even if source objects move.
24
38
  */
25
39
  @serializable()
26
40
  locked: boolean = false;
41
+
27
42
  /**
28
- * The sources to look at.
43
+ * Objects to look at. The first object in the array is used
44
+ * as the primary look-at target.
29
45
  */
30
46
  @serializable(Object3D)
31
47
  sources: Object3D[] = [];
32
48
 
33
49
  /**
34
- * Set the position of the constraint.
50
+ * Sets the world position that the constraint should look at.
51
+ * Updates the first source object's position.
52
+ * @param worldPosition The world-space position to look at
35
53
  */
36
54
  setConstraintPosition(worldPosition: Vector3) {
37
55
  const source = this.sources[0];
@@ -3,16 +3,38 @@ import { serializable } from '../engine/engine_serialization.js';
3
3
  import { DeviceUtilities } from '../engine/engine_utils.js';
4
4
  import { Behaviour } from './Component.js';
5
5
 
6
- /**
7
- * Provides configuration options for the built-in Needle Menu.
8
- * Needle Menu uses HTML in 2D mode, and automatically switches to a 3D menu in VR/AR mode.
6
+ /**
7
+ * [NeedleMenu](https://engine.needle.tools/docs/api/NeedleMenu) provides configuration for the built-in UI menu.
8
+ * The menu renders as HTML overlay in browser mode and automatically
9
+ * switches to a 3D spatial menu in VR/AR.
9
10
  *
10
- * Controls display options, button visibility, and menu positioning.
11
- * From code, you can access the menu via {@link Context.menu}.
12
- *
13
- * @summary Configuration component for the Needle Menu
11
+ * ![](https://cloud.needle.tools/-/media/YKleg1oPy_I8Hv8sg_k40Q.png)
12
+ *
13
+ * **Features:**
14
+ * - Fullscreen toggle button
15
+ * - Audio mute/unmute button
16
+ * - QR code sharing (desktop only)
17
+ * - Spatial menu in XR (appears when looking up)
18
+ * - Custom positioning (top/bottom)
19
+ *
20
+ * **Programmatic access:**
21
+ * Access the menu API via `this.context.menu` to add custom buttons,
22
+ * show/hide elements, or modify behavior at runtime.
23
+ *
24
+ * @example Configure menu from code
25
+ * ```ts
26
+ * // Access the menu API
27
+ * this.context.menu.appendChild(myCustomButton);
28
+ * this.context.menu.setPosition("top");
29
+ * this.context.menu.showFullscreenOption(true);
30
+ * ```
31
+ *
32
+ * @summary Configuration component for the Needle Menu overlay
14
33
  * @category User Interface
15
34
  * @group Components
35
+ * @see {@link Context.menu} for programmatic menu control
36
+ * @see {@link Voip} adds a microphone button to the menu
37
+ * @see {@link ScreenCapture} adds a screen sharing button
16
38
  **/
17
39
  export class NeedleMenu extends Behaviour {
18
40
 
@@ -8,26 +8,62 @@ import { EventList } from "./EventList.js";
8
8
 
9
9
  const debug = getParam("debugnestedgltf");
10
10
 
11
- /** The nested gltf is a component that is used to load a gltf file when the component becomes active (start)
12
- * It will load the gltf file and instantiate it as a child of the parent of the GameObject that has this component
11
+ /**
12
+ * NestedGltf loads and instantiates a glTF file when the component starts.
13
+ * NestedGltf components are created by the Unity exporter when nesting Objects with the GltfObject component (in Unity).
14
+ * Use this for lazy-loading content, modular scene composition, or dynamic asset loading.
13
15
  *
16
+ * ![](https://cloud.needle.tools/-/media/lJKrr_2tWlqRFdFc46U4bQ.gif)
17
+ *
18
+ * The loaded glTF is instantiated as a sibling (child of parent) by default,
19
+ * inheriting the transform of the GameObject with this component.
20
+ *
21
+ * **Features:**
22
+ * - Automatic loading on start
23
+ * - Progress callbacks for loading UI
24
+ * - Preloading support for faster display
25
+ * - Event callback when loading completes
26
+ *
27
+ * @example Load a glTF when object becomes active
28
+ * ```ts
29
+ * const nested = myPlaceholder.addComponent(NestedGltf);
30
+ * nested.filePath = new AssetReference("models/furniture.glb");
31
+ * nested.loaded.addEventListener(({ instance }) => {
32
+ * console.log("Loaded:", instance.name);
33
+ * });
34
+ * ```
35
+ *
36
+ * @example Preload for instant display
37
+ * ```ts
38
+ * // Preload during loading screen
39
+ * await nested.preload();
40
+ * // Later, when object becomes active, it displays instantly
41
+ * ```
42
+ *
14
43
  * @summary Loads and instantiates a nested glTF file
15
44
  * @category Asset Management
16
45
  * @group Components
46
+ * @see {@link AssetReference} for asset loading utilities
47
+ * @see {@link SceneSwitcher} for scene-level loading
48
+ * @link https://engine.needle.tools/samples/hotspots
17
49
  */
18
50
  export class NestedGltf extends Behaviour {
19
51
 
20
- /** A reference to the gltf file that should be loaded */
52
+ /** Reference to the glTF file to load. Can be a URL or asset path. */
21
53
  @serializable(AssetReference)
22
54
  filePath?: AssetReference;
23
55
 
24
- /** Invoked when the nested glTF file has been instantiated */
56
+ /**
57
+ * Event fired when the glTF has been loaded and instantiated.
58
+ * Provides the component, loaded instance, and asset reference.
59
+ */
25
60
  @serializable(EventList)
26
61
  loaded: EventList<{ component: NestedGltf, instance: any, asset: AssetReference }> = new EventList();
27
62
 
28
63
  /**
29
64
  * EXPERIMENTAL for cloud asset loading
30
65
  */
66
+ @serializable()
31
67
  loadAssetInParent = true;
32
68
 
33
69
 
@@ -5,11 +5,35 @@ import * as utils from "./../engine/engine_three_utils.js";
5
5
  import { Behaviour, GameObject } from "./Component.js";
6
6
 
7
7
  /**
8
- * OffsetConstraint component allows an object to maintain a specified positional and rotational offset
9
- * relative to another object, with options for alignment and leveling.
10
- * @summary Maintains positional and rotational offset relative to another object
8
+ * The [OffsetConstraint](https://engine.needle.tools/docs/api/OffsetConstraint) maintains a fixed positional and rotational offset relative to a target object.
9
+ * Useful for attaching objects to moving targets while preserving a specific spatial relationship.
10
+ *
11
+ * **Use cases:**
12
+ * - Camera following a player with offset
13
+ * - UI elements attached to characters
14
+ * - Weapons attached to hands
15
+ * - Objects orbiting around a target
16
+ *
17
+ * **Options:**
18
+ * - `affectPosition` - Apply position offset
19
+ * - `affectRotation` - Apply rotation offset
20
+ * - `alignLookDirection` - Make object face same direction as target
21
+ * - `levelLookDirection` - Keep look direction horizontal (ignore pitch)
22
+ * - `levelPosition` - Project position onto horizontal plane
23
+ * - `referenceSpace` - Transform offset in this object's coordinate space
24
+ *
25
+ * @example Attach camera offset to player
26
+ * ```ts
27
+ * const constraint = camera.addComponent(OffsetConstraint);
28
+ * // Configure via serialized properties in editor
29
+ * ```
30
+ *
31
+ * @summary Maintains positional/rotational offset relative to target
11
32
  * @category Constraints
12
33
  * @group Components
34
+ * @see {@link SmoothFollow} for smoothed following
35
+ * @see {@link LookAtConstraint} for aim constraints
36
+ * @see {@link AlignmentConstraint} for alignment between two objects
13
37
  */
14
38
  export class OffsetConstraint extends Behaviour {
15
39