@needle-tools/engine 4.13.0 → 4.13.1-beta

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 (410) hide show
  1. package/CHANGELOG.md +2 -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-6774fXoY.min.js} +107 -107
  6. package/dist/{needle-engine.bundle-Dl3TFYyv.js → needle-engine.bundle-CGtsEhyJ.js} +2346 -1844
  7. package/dist/{needle-engine.bundle-J4k4znv8.umd.cjs → needle-engine.bundle-fbFZTOKP.umd.cjs} +108 -108
  8. package/dist/needle-engine.d.ts +3769 -397
  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 +35 -1
  31. package/lib/engine/engine_physics.js +35 -1
  32. package/lib/engine/engine_physics.js.map +1 -1
  33. package/lib/engine/engine_physics_rapier.d.ts +76 -0
  34. package/lib/engine/engine_physics_rapier.js +76 -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 +26 -6
  84. package/lib/engine-components/ContactShadows.js +31 -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 +38 -10
  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 +34 -0
  148. package/lib/engine-components/Renderer.js +35 -2
  149. package/lib/engine-components/Renderer.js.map +1 -1
  150. package/lib/engine-components/SceneSwitcher.d.ts +11 -0
  151. package/lib/engine-components/SceneSwitcher.js +11 -0
  152. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  153. package/lib/engine-components/ScreenCapture.d.ts +38 -6
  154. package/lib/engine-components/ScreenCapture.js +38 -6
  155. package/lib/engine-components/ScreenCapture.js.map +1 -1
  156. package/lib/engine-components/Skybox.d.ts +1 -1
  157. package/lib/engine-components/Skybox.js +1 -1
  158. package/lib/engine-components/SmoothFollow.d.ts +66 -7
  159. package/lib/engine-components/SmoothFollow.js +66 -7
  160. package/lib/engine-components/SmoothFollow.js.map +1 -1
  161. package/lib/engine-components/SpatialTrigger.d.ts +48 -1
  162. package/lib/engine-components/SpatialTrigger.js +48 -1
  163. package/lib/engine-components/SpatialTrigger.js.map +1 -1
  164. package/lib/engine-components/SpectatorCamera.d.ts +21 -3
  165. package/lib/engine-components/SpectatorCamera.js +21 -3
  166. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  167. package/lib/engine-components/SyncedRoom.d.ts +7 -1
  168. package/lib/engine-components/SyncedRoom.js +7 -1
  169. package/lib/engine-components/SyncedRoom.js.map +1 -1
  170. package/lib/engine-components/SyncedTransform.d.ts +55 -6
  171. package/lib/engine-components/SyncedTransform.js +55 -6
  172. package/lib/engine-components/SyncedTransform.js.map +1 -1
  173. package/lib/engine-components/TransformGizmo.d.ts +30 -3
  174. package/lib/engine-components/TransformGizmo.js +30 -3
  175. package/lib/engine-components/TransformGizmo.js.map +1 -1
  176. package/lib/engine-components/VideoPlayer.d.ts +33 -6
  177. package/lib/engine-components/VideoPlayer.js +45 -6
  178. package/lib/engine-components/VideoPlayer.js.map +1 -1
  179. package/lib/engine-components/Voip.d.ts +33 -2
  180. package/lib/engine-components/Voip.js +33 -2
  181. package/lib/engine-components/Voip.js.map +1 -1
  182. package/lib/engine-components/export/usdz/USDZExporter.d.ts +47 -13
  183. package/lib/engine-components/export/usdz/USDZExporter.js +47 -13
  184. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  185. package/lib/engine-components/particlesystem/ParticleSystem.d.ts +82 -3
  186. package/lib/engine-components/particlesystem/ParticleSystem.js +82 -3
  187. package/lib/engine-components/particlesystem/ParticleSystem.js.map +1 -1
  188. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +1 -0
  189. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +1 -0
  190. package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -1
  191. package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +1 -1
  192. package/lib/engine-components/postprocessing/Effects/BloomEffect.js +1 -1
  193. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +1 -1
  194. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +1 -1
  195. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +1 -1
  196. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +1 -1
  197. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +1 -1
  198. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +1 -1
  199. package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +1 -0
  200. package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +1 -0
  201. package/lib/engine-components/postprocessing/Effects/EffectWrapper.js.map +1 -1
  202. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +1 -1
  203. package/lib/engine-components/postprocessing/Effects/Pixelation.js +1 -1
  204. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +1 -1
  205. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +1 -1
  206. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +1 -1
  207. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +1 -1
  208. package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +1 -1
  209. package/lib/engine-components/postprocessing/Effects/Sharpening.js +1 -1
  210. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +1 -1
  211. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +1 -1
  212. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +1 -1
  213. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +1 -1
  214. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +1 -1
  215. package/lib/engine-components/postprocessing/Effects/Vignette.js +1 -1
  216. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +1 -1
  217. package/lib/engine-components/postprocessing/PostProcessingHandler.js +1 -1
  218. package/lib/engine-components/postprocessing/Volume.d.ts +1 -1
  219. package/lib/engine-components/postprocessing/Volume.js +1 -1
  220. package/lib/engine-components/splines/Spline.d.ts +409 -12
  221. package/lib/engine-components/splines/Spline.js +409 -12
  222. package/lib/engine-components/splines/Spline.js.map +1 -1
  223. package/lib/engine-components/splines/SplineUtils.d.ts +1 -0
  224. package/lib/engine-components/splines/SplineUtils.js +1 -0
  225. package/lib/engine-components/splines/SplineUtils.js.map +1 -1
  226. package/lib/engine-components/splines/SplineWalker.d.ts +3 -1
  227. package/lib/engine-components/splines/SplineWalker.js +3 -1
  228. package/lib/engine-components/splines/SplineWalker.js.map +1 -1
  229. package/lib/engine-components/timeline/PlayableDirector.d.ts +99 -14
  230. package/lib/engine-components/timeline/PlayableDirector.js +91 -25
  231. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  232. package/lib/engine-components/ui/Button.d.ts +29 -3
  233. package/lib/engine-components/ui/Button.js +29 -3
  234. package/lib/engine-components/ui/Button.js.map +1 -1
  235. package/lib/engine-components/ui/Canvas.d.ts +29 -4
  236. package/lib/engine-components/ui/Canvas.js +29 -4
  237. package/lib/engine-components/ui/Canvas.js.map +1 -1
  238. package/lib/engine-components/ui/CanvasGroup.d.ts +1 -1
  239. package/lib/engine-components/ui/CanvasGroup.js +1 -1
  240. package/lib/engine-components/ui/EventSystem.d.ts +1 -1
  241. package/lib/engine-components/ui/EventSystem.js +1 -1
  242. package/lib/engine-components/ui/Graphic.d.ts +1 -0
  243. package/lib/engine-components/ui/Graphic.js +1 -0
  244. package/lib/engine-components/ui/Graphic.js.map +1 -1
  245. package/lib/engine-components/ui/Image.d.ts +22 -3
  246. package/lib/engine-components/ui/Image.js +22 -3
  247. package/lib/engine-components/ui/Image.js.map +1 -1
  248. package/lib/engine-components/ui/InputField.d.ts +1 -1
  249. package/lib/engine-components/ui/InputField.js +1 -1
  250. package/lib/engine-components/ui/Layout.d.ts +3 -0
  251. package/lib/engine-components/ui/Layout.js +3 -0
  252. package/lib/engine-components/ui/Layout.js.map +1 -1
  253. package/lib/engine-components/ui/Outline.d.ts +1 -1
  254. package/lib/engine-components/ui/Outline.js +1 -1
  255. package/lib/engine-components/ui/PointerEvents.d.ts +1 -1
  256. package/lib/engine-components/ui/PointerEvents.js +1 -1
  257. package/lib/engine-components/ui/Raycaster.d.ts +55 -6
  258. package/lib/engine-components/ui/Raycaster.js +55 -6
  259. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  260. package/lib/engine-components/ui/RectTransform.d.ts +1 -1
  261. package/lib/engine-components/ui/RectTransform.js +1 -1
  262. package/lib/engine-components/ui/SpatialHtml.d.ts +1 -1
  263. package/lib/engine-components/ui/SpatialHtml.js +1 -1
  264. package/lib/engine-components/ui/Text.d.ts +23 -1
  265. package/lib/engine-components/ui/Text.js +23 -1
  266. package/lib/engine-components/ui/Text.js.map +1 -1
  267. package/lib/engine-components/utils/LookAt.d.ts +1 -1
  268. package/lib/engine-components/utils/LookAt.js +1 -1
  269. package/lib/engine-components/utils/OpenURL.d.ts +1 -1
  270. package/lib/engine-components/utils/OpenURL.js +1 -1
  271. package/lib/engine-components/web/Clickthrough.d.ts +116 -7
  272. package/lib/engine-components/web/Clickthrough.js +116 -7
  273. package/lib/engine-components/web/Clickthrough.js.map +1 -1
  274. package/lib/engine-components/web/CursorFollow.d.ts +171 -7
  275. package/lib/engine-components/web/CursorFollow.js +171 -7
  276. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  277. package/lib/engine-components/web/HoverAnimation.d.ts +140 -11
  278. package/lib/engine-components/web/HoverAnimation.js +140 -11
  279. package/lib/engine-components/web/HoverAnimation.js.map +1 -1
  280. package/lib/engine-components/web/ScrollFollow.d.ts +4 -1
  281. package/lib/engine-components/web/ScrollFollow.js +4 -1
  282. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  283. package/lib/engine-components/web/ViewBox.d.ts +116 -16
  284. package/lib/engine-components/web/ViewBox.js +110 -16
  285. package/lib/engine-components/web/ViewBox.js.map +1 -1
  286. package/lib/engine-components/webxr/TeleportTarget.d.ts +21 -2
  287. package/lib/engine-components/webxr/TeleportTarget.js +21 -2
  288. package/lib/engine-components/webxr/TeleportTarget.js.map +1 -1
  289. package/lib/engine-components/webxr/WebXR.d.ts +10 -2
  290. package/lib/engine-components/webxr/WebXR.js +10 -2
  291. package/lib/engine-components/webxr/WebXR.js.map +1 -1
  292. package/lib/engine-components/webxr/WebXRAvatar.d.ts +39 -2
  293. package/lib/engine-components/webxr/WebXRAvatar.js +35 -3
  294. package/lib/engine-components/webxr/WebXRAvatar.js.map +1 -1
  295. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +266 -30
  296. package/lib/engine-components/webxr/WebXRImageTracking.js +266 -30
  297. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
  298. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +1 -1
  299. package/lib/engine-components/webxr/WebXRPlaneTracking.js +1 -1
  300. package/lib/engine-components/webxr/XRFlag.d.ts +29 -2
  301. package/lib/engine-components/webxr/XRFlag.js +29 -2
  302. package/lib/engine-components/webxr/XRFlag.js.map +1 -1
  303. package/package.json +1 -1
  304. package/plugins/vite/custom-element-data.js +128 -19
  305. package/src/engine/engine_context.ts +16 -0
  306. package/src/engine/engine_gameobject.ts +73 -0
  307. package/src/engine/engine_input.ts +83 -7
  308. package/src/engine/engine_math.ts +81 -2
  309. package/src/engine/engine_networking.ts +186 -17
  310. package/src/engine/engine_networking_auto.ts +36 -9
  311. package/src/engine/engine_physics.ts +37 -1
  312. package/src/engine/engine_physics_rapier.ts +77 -0
  313. package/src/engine/engine_serialization_decorator.ts +28 -2
  314. package/src/engine/engine_time.ts +23 -3
  315. package/src/engine/engine_util_decorator.ts +31 -1
  316. package/src/engine/engine_utils.ts +21 -5
  317. package/src/engine/extensions/NEEDLE_materialx.ts +5 -4
  318. package/src/engine/extensions/index.ts +2 -2
  319. package/src/engine-components/AlignmentConstraint.ts +24 -4
  320. package/src/engine-components/Animation.ts +44 -2
  321. package/src/engine-components/Animator.ts +40 -7
  322. package/src/engine-components/AudioListener.ts +1 -1
  323. package/src/engine-components/AudioSource.ts +37 -15
  324. package/src/engine-components/AxesHelper.ts +23 -4
  325. package/src/engine-components/BasicIKConstraint.ts +28 -5
  326. package/src/engine-components/Camera.ts +33 -3
  327. package/src/engine-components/CharacterController.ts +74 -7
  328. package/src/engine-components/Collider.ts +78 -21
  329. package/src/engine-components/ContactShadows.ts +36 -11
  330. package/src/engine-components/DeleteBox.ts +43 -2
  331. package/src/engine-components/DeviceFlag.ts +22 -3
  332. package/src/engine-components/DragControls.ts +32 -2
  333. package/src/engine-components/DropListener.ts +41 -29
  334. package/src/engine-components/Duplicatable.ts +37 -6
  335. package/src/engine-components/EventList.ts +41 -13
  336. package/src/engine-components/EventTrigger.ts +1 -1
  337. package/src/engine-components/Fog.ts +23 -1
  338. package/src/engine-components/GridHelper.ts +18 -2
  339. package/src/engine-components/GroundProjection.ts +25 -3
  340. package/src/engine-components/Interactable.ts +17 -2
  341. package/src/engine-components/Joints.ts +51 -8
  342. package/src/engine-components/LODGroup.ts +45 -11
  343. package/src/engine-components/Light.ts +35 -13
  344. package/src/engine-components/LookAtConstraint.ts +26 -8
  345. package/src/engine-components/NeedleMenu.ts +29 -7
  346. package/src/engine-components/NestedGltf.ts +40 -4
  347. package/src/engine-components/OffsetConstraint.ts +27 -3
  348. package/src/engine-components/OrbitControls.ts +41 -3
  349. package/src/engine-components/PlayerColor.ts +1 -1
  350. package/src/engine-components/ReflectionProbe.ts +19 -5
  351. package/src/engine-components/Renderer.ts +34 -1
  352. package/src/engine-components/SceneSwitcher.ts +11 -0
  353. package/src/engine-components/ScreenCapture.ts +41 -9
  354. package/src/engine-components/Skybox.ts +1 -1
  355. package/src/engine-components/SmoothFollow.ts +68 -7
  356. package/src/engine-components/SpatialTrigger.ts +51 -4
  357. package/src/engine-components/SpectatorCamera.ts +23 -5
  358. package/src/engine-components/SyncedRoom.ts +8 -2
  359. package/src/engine-components/SyncedTransform.ts +59 -10
  360. package/src/engine-components/TransformGizmo.ts +31 -4
  361. package/src/engine-components/VideoPlayer.ts +48 -6
  362. package/src/engine-components/Voip.ts +33 -2
  363. package/src/engine-components/export/usdz/USDZExporter.ts +47 -13
  364. package/src/engine-components/particlesystem/ParticleSystem.ts +84 -5
  365. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +1 -0
  366. package/src/engine-components/postprocessing/Effects/BloomEffect.ts +1 -1
  367. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +1 -1
  368. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +1 -1
  369. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +1 -1
  370. package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +1 -0
  371. package/src/engine-components/postprocessing/Effects/Pixelation.ts +1 -1
  372. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +1 -1
  373. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +1 -1
  374. package/src/engine-components/postprocessing/Effects/Sharpening.ts +1 -1
  375. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +1 -1
  376. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +1 -1
  377. package/src/engine-components/postprocessing/Effects/Vignette.ts +1 -1
  378. package/src/engine-components/postprocessing/PostProcessingHandler.ts +1 -1
  379. package/src/engine-components/postprocessing/Volume.ts +1 -1
  380. package/src/engine-components/splines/Spline.ts +412 -14
  381. package/src/engine-components/splines/SplineUtils.ts +1 -0
  382. package/src/engine-components/splines/SplineWalker.ts +4 -2
  383. package/src/engine-components/timeline/PlayableDirector.ts +104 -27
  384. package/src/engine-components/ui/Button.ts +29 -3
  385. package/src/engine-components/ui/Canvas.ts +29 -4
  386. package/src/engine-components/ui/CanvasGroup.ts +2 -2
  387. package/src/engine-components/ui/EventSystem.ts +1 -1
  388. package/src/engine-components/ui/Graphic.ts +1 -0
  389. package/src/engine-components/ui/Image.ts +22 -3
  390. package/src/engine-components/ui/InputField.ts +2 -2
  391. package/src/engine-components/ui/Layout.ts +3 -0
  392. package/src/engine-components/ui/Outline.ts +1 -1
  393. package/src/engine-components/ui/PointerEvents.ts +1 -1
  394. package/src/engine-components/ui/Raycaster.ts +57 -8
  395. package/src/engine-components/ui/RectTransform.ts +2 -2
  396. package/src/engine-components/ui/SpatialHtml.ts +1 -1
  397. package/src/engine-components/ui/Text.ts +24 -2
  398. package/src/engine-components/utils/LookAt.ts +1 -1
  399. package/src/engine-components/utils/OpenURL.ts +1 -1
  400. package/src/engine-components/web/Clickthrough.ts +119 -10
  401. package/src/engine-components/web/CursorFollow.ts +174 -9
  402. package/src/engine-components/web/HoverAnimation.ts +142 -13
  403. package/src/engine-components/web/ScrollFollow.ts +4 -1
  404. package/src/engine-components/web/ViewBox.ts +118 -18
  405. package/src/engine-components/webxr/TeleportTarget.ts +23 -4
  406. package/src/engine-components/webxr/WebXR.ts +11 -3
  407. package/src/engine-components/webxr/WebXRAvatar.ts +41 -4
  408. package/src/engine-components/webxr/WebXRImageTracking.ts +282 -38
  409. package/src/engine-components/webxr/WebXRPlaneTracking.ts +1 -1
  410. package/src/engine-components/webxr/XRFlag.ts +30 -3
@@ -15,13 +15,28 @@ const $reflectionProbeKey = Symbol("reflectionProbeKey");
15
15
  const $originalMaterial = Symbol("original material");
16
16
 
17
17
  /**
18
- * A ReflectionProbe provides reflection data to materials within its defined area.
19
- *
20
- * - Sample: http://samples.needle.tools/reflection-probes
21
- *
18
+ * The [ReflectionProbe](https://engine.needle.tools/docs/api/ReflectionProbe) provides environment reflection data to materials within its defined area.
19
+ * Use for chrome-like materials that need accurate environment reflections.
20
+ *
21
+ * **Setup:**
22
+ * 1. Add ReflectionProbe component to an object
23
+ * 2. Assign a cubemap or HDR texture
24
+ * 3. In Renderer components, assign the probe as anchor override
25
+ *
26
+ * **Note:** Volume-based automatic assignment is not fully supported yet.
27
+ * Objects (Renderer components) can explicitly reference their reflection probe.
28
+ *
29
+ * **Debug options:**
30
+ * - `?debugreflectionprobe` - Log probe info
31
+ * - `?noreflectionprobe` - Disable all reflection probes
32
+ *
33
+ * - Example: https://engine.needle.tools/samples/reflection-probes
34
+ *
22
35
  * @summary Provides reflection data to materials
23
36
  * @category Rendering
24
37
  * @group Components
38
+ * @see {@link Renderer} for material and rendering control
39
+ * @see {@link Light} for scene lighting
25
40
  */
26
41
  export class ReflectionProbe extends Behaviour {
27
42
 
@@ -45,7 +60,6 @@ export class ReflectionProbe extends Behaviour {
45
60
  return probe;
46
61
  }
47
62
  }
48
- // TODO not supported right now, as we'd have to pass the ReflectionProbe scale through as well.
49
63
  else if (probe.isInBox(object)) {
50
64
  if (debug) console.log("Found reflection probe", object.name, probe.name);
51
65
  return probe;
@@ -200,8 +200,42 @@ class SharedMaterialArray implements ISharedMaterials {
200
200
  }
201
201
 
202
202
  /**
203
+ * [Renderer](https://engine.needle.tools/docs/api/Renderer) controls rendering properties of meshes including materials,
204
+ * lightmaps, reflection probes, and GPU instancing.
205
+ *
206
+ * **Materials:**
207
+ * Access materials via `sharedMaterials` array. Changes affect all instances.
208
+ * Use material cloning for per-instance variations.
209
+ *
210
+ * **Instancing:**
211
+ * Enable GPU instancing for improved performance with many identical objects.
212
+ * Use `Renderer.setInstanced(obj, true)` or `enableInstancing` property.
213
+ *
214
+ * **Lightmaps:**
215
+ * Baked lighting is automatically applied when exported from Unity.
216
+ * Access via the associated {@link RendererLightmap} component.
217
+ *
218
+ * **Debug options:**
219
+ * - `?debugrenderer` - Log renderer info
220
+ * - `?wireframe` - Show wireframe rendering
221
+ * - `?noinstancing` - Disable GPU instancing
222
+ *
223
+ * @example Change material at runtime
224
+ * ```ts
225
+ * const renderer = myObject.getComponent(Renderer);
226
+ * renderer.sharedMaterials[0] = newMaterial;
227
+ * ```
228
+ *
229
+ * @example Enable instancing
230
+ * ```ts
231
+ * Renderer.setInstanced(myObject, true);
232
+ * ```
233
+ *
203
234
  * @category Rendering
204
235
  * @group Components
236
+ * @see {@link ReflectionProbe} for environment reflections
237
+ * @see {@link Light} for scene lighting
238
+ * @see {@link LODGroup} for level of detail
205
239
  */
206
240
  export class Renderer extends Behaviour implements IRenderer {
207
241
 
@@ -691,7 +725,6 @@ export class Renderer extends Behaviour implements IRenderer {
691
725
  }
692
726
 
693
727
  if (this.reflectionProbeUsage !== ReflectionProbeUsage.Off && this._reflectionProbe) {
694
- if (!this._lightmaps?.length) // Currently reflectionprobes cant be used with lightmaps
695
728
  this._reflectionProbe.onSet(this);
696
729
  }
697
730
  // since three 163 we need to set the envMap to the scene envMap if it is not set
@@ -84,6 +84,13 @@ export interface ISceneEventListener {
84
84
  * - [Needle Website](https://needle.tools)
85
85
  * - [Songs Of Cultures](https://app.songsofcultures.com)
86
86
  *
87
+ * ![](https://cloud.needle.tools/-/media/I-atrBcwIcg2kfvPl8c71A.gif)
88
+ * *Replace entire scenes with the SceneSwitcher.*
89
+ *
90
+ * ![](https://cloud.needle.tools/-/media/_FbH-7pkDmluTdfphXlP-A.gif)
91
+ * *Multiple SceneSwitcher components can be used at the same time and they can also be nested
92
+ * (a scene loaded by a SceneSwitcher can also have a SceneSwitcher to load sub-scenes).*
93
+ *
87
94
  * ### Interfaces
88
95
  * Use the {@link ISceneEventListener} interface to listen to scene open and closing events with the ability to modify transitions and stall the scene loading process.
89
96
  *
@@ -111,6 +118,10 @@ export interface ISceneEventListener {
111
118
  * @summary Dynamically loads and switches between multiple scenes
112
119
  * @category Asset Management
113
120
  * @group Components
121
+ * @see {@link ISceneEventListener} for scene transition callbacks
122
+ * @see {@link AssetReference} for loading individual assets
123
+ * @see {@link NestedGltf} for embedding static glTF content
124
+ * @link https://engine.needle.tools/docs/how-to-guides/components/scene-switcher.html
114
125
  */
115
126
  export class SceneSwitcher extends Behaviour {
116
127
 
@@ -61,19 +61,51 @@ export declare type ScreenCaptureOptions = {
61
61
  deviceFilter?: (device: MediaDeviceInfo) => boolean,
62
62
  }
63
63
 
64
- /**
65
- * The ScreenCapture component allows you to share your screen, camera or microphone with other users in the networked room.
66
- * When the stream is active the video will be displayed on the VideoPlayer component attached to the same GameObject.
67
- *
68
- * Note: For debugging append `?debugscreensharing` to the URL to see more information in the console.
69
- *
70
- * By default the component will start sharing the screen when the user clicks on the object this component is attached to. You can set {@link device} This behaviour can be disabled by setting `allowStartOnClick` to false.
71
- * It is also possible to start the stream manually from your code by calling the {@link share} method.
64
+ /**
65
+ * ScreenCapture enables sharing screen, camera, or microphone with users in a networked room.
66
+ * The stream is displayed via a {@link VideoPlayer} component on the same GameObject.
67
+ *
68
+ * **Supported capture devices:**
69
+ * - `Screen` - Share desktop/window/tab
70
+ * - `Camera` - Share webcam feed
71
+ * - `Microphone` - Audio only
72
+ * - `Canvas` - Share the 3D canvas (experimental)
72
73
  *
74
+ * ![](https://cloud.needle.tools/-/media/Ugw6sKj3KNeLMzl0yKQXig.gif)
75
+ *
76
+ * **How it works:**
77
+ * - Click the object to start/stop sharing (if `allowStartOnClick` is true)
78
+ * - Or call `share()` / `close()` programmatically
79
+ * - Stream is sent to all users in the same room via WebRTC
80
+ * - Receiving clients see the video on their VideoPlayer
81
+ *
82
+ * **Debug:** Append `?debugscreensharing` to the URL for console logging.
83
+ *
84
+ * @example Start screen sharing programmatically
85
+ * ```ts
86
+ * const capture = myScreen.getComponent(ScreenCapture);
87
+ * await capture?.share({ device: "Screen" });
88
+ *
89
+ * // Later, stop sharing
90
+ * capture?.close();
91
+ * ```
92
+ *
93
+ * @example Share webcam with constraints
94
+ * ```ts
95
+ * await capture?.share({
96
+ * device: "Camera",
97
+ * constraints: { width: 1280, height: 720 }
98
+ * });
99
+ * ```
100
+ *
73
101
  * @summary Share screen, camera or microphone in a networked room
74
102
  * @category Networking
75
103
  * @group Components
76
- */
104
+ * @see {@link VideoPlayer} for displaying the received stream
105
+ * @see {@link Voip} for voice-only communication
106
+ * @see {@link SyncedRoom} for room management
107
+ * @link https://engine.needle.tools/docs/networking.html
108
+ */
77
109
  export class ScreenCapture extends Behaviour implements IPointerClickHandler {
78
110
 
79
111
  /**
@@ -114,7 +114,7 @@ ContextRegistry.registerCallback(ContextEvent.ContextCreationStart, () => {
114
114
 
115
115
 
116
116
  /**
117
- * RemoteSkybox is a component that allows you to set the skybox or environment texture of a scene from a URL, a local file or a static skybox name.
117
+ * [RemoteSkybox](https://engine.needle.tools/docs/api/RemoteSkybox) Is a component that allows you to set the skybox or environment texture of a scene from a URL, a local file or a static skybox name.
118
118
  * It supports .hdr, .exr, .jpg, .png files.
119
119
  *
120
120
  * ### Events
@@ -4,14 +4,58 @@ import { Mathf } from "../engine/engine_math.js";
4
4
  import { Axes } from "../engine/engine_physics.types.js";
5
5
  import { serializable } from "../engine/engine_serialization_decorator.js";
6
6
  import { getWorldPosition, getWorldQuaternion } from "../engine/engine_three_utils.js";
7
+ import type { LookAt } from "./api.js";
7
8
  import { Behaviour } from "./Component.js";
8
9
 
9
10
  /**
10
- * SmoothFollow makes the {@link Object3D} (`GameObject`) smoothly follow another target {@link Object3D}.
11
- * It can follow the target's position, rotation, or both.
12
- * @summary Smoothly follows a target object
11
+ * [SmoothFollow](https://engine.needle.tools/docs/api/SmoothFollow) makes this GameObject smoothly follow another target object's position and/or rotation.
12
+ *
13
+ * **Position Following:**
14
+ * When enabled (`followFactor > 0`), this object will move towards the target's world position.
15
+ * The object interpolates from its current position to the target's position each frame.
16
+ * Use `positionAxes` to restrict following to specific axes (e.g., only horizontal movement).
17
+ *
18
+ * **Rotation Following:**
19
+ * When enabled (`rotateFactor > 0`), this object will rotate to match the target's world rotation.
20
+ * The object smoothly interpolates from its current rotation to the target's rotation each frame.
21
+ * This makes the object face the same direction as the target, not look at it (use {@link LookAt} for that).
22
+ *
23
+ * **Smoothing:**
24
+ * Both position and rotation use time-based interpolation (lerp/slerp).
25
+ * Higher factor values = faster following (less lag), lower values = slower following (more lag).
26
+ * Set a factor to 0 to disable that type of following entirely.
27
+ *
28
+ * **Common Use Cases:**
29
+ * - Camera following a player character
30
+ * - UI elements tracking world objects
31
+ * - Delayed motion effects (ghost trails, spring arms)
32
+ * - Smoothed object attachment
33
+ *
34
+ * @example Follow a target with smooth position
35
+ * ```ts
36
+ * const follower = myObject.addComponent(SmoothFollow);
37
+ * follower.target = playerObject;
38
+ * follower.followFactor = 5; // Higher = faster following
39
+ * follower.rotateFactor = 0; // Don't follow rotation
40
+ * ```
41
+ *
42
+ * @example Follow only on horizontal plane
43
+ * ```ts
44
+ * follower.positionAxes = Axes.X | Axes.Z; // Follow X and Z only (no vertical)
45
+ * ```
46
+ *
47
+ * @example Follow both position and rotation
48
+ * ```ts
49
+ * follower.target = targetObject;
50
+ * follower.followFactor = 3; // Smooth position following
51
+ * follower.rotateFactor = 2; // Smooth rotation following
52
+ * ```
53
+ *
54
+ * @summary Smoothly follows a target object's position and/or rotation
13
55
  * @category Interactivity
14
56
  * @group Components
57
+ * @see {@link LookAtConstraint} for making an object look at a target (different from rotation following)
58
+ * @see {@link Mathf} for the interpolation used
15
59
  */
16
60
  export class SmoothFollow extends Behaviour {
17
61
 
@@ -22,21 +66,34 @@ export class SmoothFollow extends Behaviour {
22
66
  target: Object3D | null = null;
23
67
 
24
68
  /**
25
- * The factor to smoothly follow the target's position.
26
- * The value is clamped between 0 and 1. If 0, the GameObject will not follow the target's position.
69
+ * Speed factor for position following.
70
+ * Controls how quickly this object moves to match the target's position.
71
+ * Higher values = faster/tighter following (less lag), lower = slower/looser (more lag).
72
+ * Set to 0 to disable position following entirely.
73
+ * @default 0.1
27
74
  */
28
75
  @serializable()
29
76
  followFactor = .1;
77
+
30
78
  /**
31
- * The factor to smoothly follow the target's rotation.
32
- * The value is clamped between 0 and 1. If 0, the GameObject will not follow the target's rotation.
79
+ * Speed factor for rotation following.
80
+ * Controls how quickly this object rotates to match the target's rotation.
81
+ * Higher values = faster/tighter following (less lag), lower = slower/looser (more lag).
82
+ * Set to 0 to disable rotation following entirely.
83
+ * @default 0.1
33
84
  */
34
85
  @serializable()
35
86
  rotateFactor = .1;
36
87
 
88
+ /**
89
+ * Which position axes to follow. Use bitwise OR to combine:
90
+ * `Axes.X | Axes.Y` follows only X and Y axes.
91
+ * @default Axes.All
92
+ */
37
93
  @serializable()
38
94
  positionAxes: Axes = Axes.All;
39
95
 
96
+ /** When true, rotates 180° around Y axis (useful for mirrored setups) */
40
97
  flipForward: boolean = false;
41
98
 
42
99
  private static _invertForward: Quaternion = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), Math.PI);
@@ -49,6 +106,10 @@ export class SmoothFollow extends Behaviour {
49
106
  this.updateNow(false);
50
107
  }
51
108
 
109
+ /**
110
+ * Manually update the position/rotation to follow the target.
111
+ * @param hard If true, snaps instantly to target without smoothing
112
+ */
52
113
  updateNow(hard: boolean) {
53
114
  if (!this.target || this.target === this.gameObject) return;
54
115
  if (this.followFactor > 0) {
@@ -24,11 +24,34 @@ function testMask(mask1, mask2) {
24
24
  }
25
25
 
26
26
  /**
27
- * Component that receives and responds to spatial events, like entering or exiting a trigger zone.
28
- * Used in conjunction with {@link SpatialTrigger} to create interactive spatial events.
27
+ * Component that receives and responds to spatial events, like entering or exiting a trigger zone.
28
+ * Used in conjunction with {@link SpatialTrigger} to create interactive spatial events.
29
+ *
30
+ * Place this on objects that should react when entering trigger zones. The receiver checks
31
+ * against all active SpatialTriggers each frame and fires events when intersections change.
32
+ *
33
+ * Events can be connected via {@link EventList} in the editor or listened to in code.
34
+ *
35
+ * @example Listen to trigger events
36
+ * ```ts
37
+ * export class DoorTrigger extends Behaviour {
38
+ * @serializable(SpatialTriggerReceiver)
39
+ * receiver?: SpatialTriggerReceiver;
40
+ *
41
+ * start() {
42
+ * this.receiver?.onEnter?.addEventListener(() => {
43
+ * console.log("Player entered door zone");
44
+ * });
45
+ * }
46
+ * }
47
+ * ```
48
+ *
29
49
  * @summary Receives spatial trigger events
30
50
  * @category Interactivity
31
51
  * @group Components
52
+ * @see {@link SpatialTrigger} for defining trigger zones
53
+ * @see {@link EventList} for event handling
54
+ * @link https://engine.needle.tools/samples/spatial-triggers/
32
55
  */
33
56
  export class SpatialTriggerReceiver extends Behaviour {
34
57
 
@@ -126,10 +149,34 @@ export class SpatialTriggerReceiver extends Behaviour {
126
149
  }
127
150
 
128
151
  /**
129
- * A spatial trigger component that detects objects within a box-shaped area.
130
- * Used to trigger events when objects enter, stay in, or exit the defined area
152
+ * A spatial trigger component that detects objects within a box-shaped area.
153
+ * Used to trigger events when objects enter, stay in, or exit the defined area.
154
+ *
155
+ * The trigger area is defined by the GameObject's bounding box (uses {@link BoxHelperComponent}).
156
+ * Objects with {@link SpatialTriggerReceiver} components are tested against this area.
157
+ *
158
+ * **Mask system:** Both trigger and receiver have a `triggerMask` - they only interact
159
+ * when their masks have overlapping bits set. This allows selective triggering.
160
+ *
161
+ * **Debug:** Use `?debugspatialtrigger` URL parameter to visualize trigger zones.
162
+ *
163
+ * @example Create a pickup zone
164
+ * ```ts
165
+ * // On the pickup zone object
166
+ * const trigger = pickupZone.addComponent(SpatialTrigger);
167
+ * trigger.triggerMask = 1; // Layer 1 for pickups
168
+ *
169
+ * // On the player
170
+ * const receiver = player.addComponent(SpatialTriggerReceiver);
171
+ * receiver.triggerMask = 1; // Match the pickup layer
172
+ * ```
173
+ *
174
+ * @summary Define a trigger zone that detects entering objects
131
175
  * @category Interactivity
132
176
  * @group Components
177
+ * @see {@link SpatialTriggerReceiver} for objects that respond to triggers
178
+ * @see {@link BoxHelperComponent} for the underlying box used to define the trigger area
179
+ * @link https://engine.needle.tools/samples/spatial-triggers/
133
180
  */
134
181
  export class SpatialTrigger extends Behaviour {
135
182
 
@@ -31,14 +31,32 @@ export enum SpectatorMode {
31
31
  const debug = getParam("debugspectator");
32
32
 
33
33
  /**
34
- * Provides functionality to follow and spectate other users in a networked environment.
35
- * Handles camera switching, following behavior, and network synchronization for spectator mode.
36
- *
37
- * Debug mode can be enabled with the URL parameter `?debugspectator`, which provides additional console output.
38
- *
34
+ * SpectatorCamera enables following and spectating other users in networked sessions.
35
+ * Switch between first-person (see what they see) and third-person (orbit around them) views.
36
+ *
37
+ * **Keyboard controls** (when `useKeys = true`):
38
+ * - `F` - Request all users to follow the local player
39
+ * - `ESC` - Stop spectating
40
+ *
41
+ * **Spectator modes:**
42
+ * - `FirstPerson` - View from the followed player's perspective
43
+ * - `ThirdPerson` - Freely orbit around the followed player
44
+ *
45
+ * **Debug:** Use `?debugspectator` URL parameter for logging.
46
+ *
47
+ * @example Start spectating a user
48
+ * ```ts
49
+ * const spectator = camera.getComponent(SpectatorCamera);
50
+ * spectator.follow(targetUserId);
51
+ * spectator.mode = SpectatorMode.ThirdPerson;
52
+ * ```
53
+ *
39
54
  * @summary Spectator camera for following other users
40
55
  * @category Networking
41
56
  * @group Components
57
+ * @see {@link SpectatorMode} for view options
58
+ * @see {@link SyncedRoom} for networked sessions
59
+ * @see {@link OrbitControls} for third-person orbit
42
60
  */
43
61
  export class SpectatorCamera extends Behaviour {
44
62
 
@@ -11,8 +11,8 @@ const viewParamName = "view";
11
11
  const debug = utils.getParam("debugsyncedroom");
12
12
 
13
13
  /**
14
- * SyncedRoom is a behaviour that will attempt to join a networked room based on the URL parameters or a random room.
15
- * It will also create a button in the menu to join or leave the room.
14
+ * [SyncedRoom](https://engine.needle.tools/docs/api/SyncedRoom) is a behaviour that will attempt to join a networked room based on the URL parameters or a random room.
15
+ * It will also create a button in the menu to join or leave the room.
16
16
  * You can also join a networked room by calling the core methods like `this.context.connection.joinRoom("roomName")`.
17
17
  *
18
18
  * @example Join a networked room
@@ -33,9 +33,15 @@ const debug = utils.getParam("debugsyncedroom");
33
33
  * myObject.addComponent(SyncedRoom, { joinRandomRoom: true, roomPrefix: "myApp_" });
34
34
  * ```
35
35
  *
36
+ * **Debug:** Use `?debugsyncedroom` URL parameter for logging.
37
+ *
36
38
  * @summary Joins a networked room based on URL parameters or a random room
37
39
  * @category Networking
38
40
  * @group Components
41
+ * @see {@link SyncedTransform} for synchronizing object transforms
42
+ * @see {@link Voip} for voice communication in rooms
43
+ * @see {@link ScreenCapture} for screen/video sharing
44
+ * @link https://engine.needle.tools/docs/networking.html
39
45
  */
40
46
  export class SyncedRoom extends Behaviour {
41
47
 
@@ -55,12 +55,48 @@ onUpdate((ctx) => {
55
55
  })
56
56
 
57
57
  /**
58
- * SyncedTransform synchronizes the position and rotation of a game object over the network.
59
- * It handles ownership transfer, interpolation, and network state updates automatically.
60
- *
58
+ * SyncedTransform synchronizes position and rotation of a GameObject across the network.
59
+ * When users interact with an object (e.g., via {@link DragControls}), they automatically
60
+ * take ownership and their changes are broadcast to other users.
61
+ *
62
+ * **Features:**
63
+ * - Automatic ownership transfer when interacting
64
+ * - Smooth interpolation of remote updates
65
+ * - Physics integration (can override kinematic state)
66
+ * - Fast mode for rapidly moving objects
67
+ *
68
+ * **Requirements:**
69
+ * - Active network connection via {@link SyncedRoom}
70
+ * - Objects must have unique GUIDs (set automatically in Unity/Blender export)
71
+ *
72
+ * **Ownership:**
73
+ * This component uses {@link OwnershipModel} internally to manage object ownership.
74
+ * Only the client that owns an object can send transform updates. Use `requestOwnership()`
75
+ * before modifying the transform, or check `hasOwnership()` to see if you can modify it.
76
+ *
77
+ * **Debug:** Use `?debugsync` URL parameter for logging.
78
+ *
79
+ * @example Basic networked object
80
+ * ```ts
81
+ * // Add to any object you want synced
82
+ * const sync = myObject.addComponent(SyncedTransform);
83
+ * sync.fastMode = true; // For fast-moving objects
84
+ *
85
+ * // Request ownership before modifying
86
+ * sync.requestOwnership();
87
+ * myObject.position.x += 1;
88
+ * ```
89
+ *
90
+ * - Example: https://engine.needle.tools/samples/collaborative-sandbox
91
+ *
61
92
  * @summary Synchronizes object transform over the network with ownership management
62
93
  * @category Networking
63
94
  * @group Components
95
+ * @see {@link SyncedRoom} for room/session management
96
+ * @see {@link OwnershipModel} for ownership management details
97
+ * @see {@link DragControls} for interactive dragging with sync
98
+ * @see {@link Duplicatable} for networked object spawning
99
+ * @link https://engine.needle.tools/docs/networking.html
64
100
  */
65
101
  export class SyncedTransform extends Behaviour {
66
102
 
@@ -94,9 +130,18 @@ export class SyncedTransform extends Behaviour {
94
130
  private _receivedFastUpdate: boolean = false;
95
131
  private _shouldRequestOwnership: boolean = false;
96
132
 
97
- /**
133
+ /**
98
134
  * Requests ownership of this object on the network.
99
135
  * You need to be connected to a room for this to work.
136
+ * Call this before modifying the object's transform to ensure your changes are synchronized.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * // Request ownership before modifying
141
+ * syncedTransform.requestOwnership();
142
+ * this.gameObject.position.y += 1;
143
+ * ```
144
+ * @see {@link OwnershipModel.requestOwnership} for more details
100
145
  */
101
146
  public requestOwnership() {
102
147
  if (debug)
@@ -110,25 +155,29 @@ export class SyncedTransform extends Behaviour {
110
155
  }
111
156
 
112
157
  /**
113
- * Free ownership of this object on the network.
114
- * You need to be connected to a room for this to work.
158
+ * Free ownership of this object on the network.
159
+ * You need to be connected to a room for this to work.
115
160
  * This will also be called automatically when the component is disabled.
161
+ * Call this when you're done modifying an object to allow other users to interact with it.
162
+ * @see {@link OwnershipModel.freeOwnership} for more details
116
163
  */
117
164
  public freeOwnership() {
118
165
  this._model?.freeOwnership();
119
166
  }
120
167
 
121
168
  /**
122
- * Checks if this client has ownership of the object
123
- * @returns true if this client has ownership, false if not, undefined if ownership state is unknown
169
+ * Checks if this client has ownership of the object.
170
+ * @returns `true` if this client has ownership, `false` if not, `undefined` if ownership state is unknown
171
+ * @see {@link OwnershipModel.hasOwnership} for more details
124
172
  */
125
173
  public hasOwnership(): boolean | undefined {
126
174
  return this._model?.hasOwnership ?? undefined;
127
175
  }
128
176
 
129
177
  /**
130
- * Checks if the object is owned by any client
131
- * @returns true if the object is owned, false if not, undefined if ownership state is unknown
178
+ * Checks if the object is owned by any client (local or remote).
179
+ * @returns `true` if the object is owned, `false` if not, `undefined` if ownership state is unknown
180
+ * @see {@link OwnershipModel.isOwned} for more details
132
181
  */
133
182
  public isOwned(): boolean | undefined {
134
183
  return this._model?.isOwned;
@@ -8,12 +8,39 @@ import { OrbitControls } from "./OrbitControls.js";
8
8
  import { SyncedTransform } from "./SyncedTransform.js";
9
9
 
10
10
  /**
11
- * TransformGizmo displays manipulation controls for translating, rotating, and scaling objects in the scene.
12
- * It wraps three.js {@link TransformControls} and provides keyboard shortcuts for changing modes and settings.
13
- *
14
- * @summary Object manipulation gizmo for translating, rotating, and scaling
11
+ * The [TransformGizmo](https://engine.needle.tools/docs/api/TransformGizmo) displays manipulation controls for translating, rotating, and scaling objects.
12
+ * Wraps three.js {@link TransformControls} with keyboard shortcuts and snapping support.
13
+ *
14
+ * **Keyboard shortcuts:**
15
+ * - `W` - Translate mode
16
+ * - `E` - Rotate mode
17
+ * - `R` - Scale mode
18
+ * - `Q` - Toggle local/world space
19
+ * - `Shift` (hold) - Enable grid snapping
20
+ * - `+/-` - Adjust gizmo size
21
+ * - `X/Y/Z` - Toggle axis visibility
22
+ * - `Space` - Toggle controls enabled
23
+ *
24
+ * **Snapping:**
25
+ * Configure grid snapping with `translationSnap`, `rotationSnapAngle`, and `scaleSnap`.
26
+ *
27
+ * **Networking:**
28
+ * Automatically works with {@link SyncedTransform} for multiplayer editing.
29
+ *
30
+ * @example Add transform gizmo to an object
31
+ * ```ts
32
+ * const gizmo = editableObject.addComponent(TransformGizmo);
33
+ * gizmo.translationSnap = 0.5; // Snap to 0.5 unit grid
34
+ * gizmo.rotationSnapAngle = 45; // Snap to 45° increments
35
+ * ```
36
+ *
37
+ * @summary Object manipulation gizmo for translate/rotate/scale
15
38
  * @category Helpers
16
39
  * @group Components
40
+ * @see {@link DragControls} for simpler drag-only interaction
41
+ * @see {@link SyncedTransform} for network synchronization
42
+ * @see {@link OrbitControls} - automatically disabled during gizmo drag
43
+ * @link https://threejs.org/docs/index.html#examples/en/controls/TransformControls for underlying three.js controls and additional features
17
44
  */
18
45
  export class TransformGizmo extends Behaviour {
19
46