@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
@@ -111,11 +111,27 @@ export function getUrlParams() {
111
111
  // bit strange that we have to pass T in here as well but otherwise the type parameter is stripped it seems
112
112
  type Param<T extends string> = string | boolean | number | T;
113
113
 
114
- /** Checks if a url parameter exists.
115
- * Returns true if it exists but has no value (e.g. ?help)
116
- * Returns false if it does not exist
117
- * Returns false if it's set to 0 e.g. ?debug=0
118
- * Returns the value if it exists e.g. ?message=hello
114
+ /**
115
+ * Checks if a URL parameter exists and returns its value.
116
+ * Useful for debugging, feature flags, and configuration.
117
+ *
118
+ * @param paramName The URL parameter name to check
119
+ * @returns
120
+ * - `true` if the parameter exists without a value (e.g. `?debug`)
121
+ * - `false` if the parameter doesn't exist or is set to `0`
122
+ * - The numeric value if it's a number (e.g. `?level=5` returns `5`)
123
+ * - The string value otherwise (e.g. `?name=test` returns `"test"`)
124
+ *
125
+ * @example Check debug mode
126
+ * ```ts
127
+ * if (getParam("debug")) {
128
+ * console.log("Debug mode enabled");
129
+ * }
130
+ * ```
131
+ * @example Get a numeric value
132
+ * ```ts
133
+ * const level = getParam("level"); // Returns number if ?level=5
134
+ * ```
119
135
  */
120
136
  export function getParam<T extends string>(paramName: T): Param<T> {
121
137
  if (showHelp && !requestedParams.includes(paramName))
@@ -1,8 +1,9 @@
1
1
  import { Loader, LoadingManager, Material, Object3D, TextureLoader } from "three";
2
- import { GLTFLoader, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
3
- import { ObjectUtils } from "../engine_create_objects";
4
- import { MODULES } from "../engine_modules";
5
- import { IContext } from "../engine_types";
2
+ import { GLTFLoader, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader.js";
3
+
4
+ import { ObjectUtils } from "../engine_create_objects.js";
5
+ import { MODULES } from "../engine_modules.js";
6
+ import { IContext } from "../engine_types.js";
6
7
 
7
8
 
8
9
  // #region Utils
@@ -2,6 +2,6 @@ export { compareAssociation } from "./extension_utils.js"
2
2
  export * from "./extensions.js"
3
3
  export * from "./NEEDLE_animator_controller_model.js"
4
4
  export { SceneLightSettings } from "./NEEDLE_lighting_settings.js"
5
+ export { MaterialX } from "./NEEDLE_materialx.js"
5
6
  export * from "./NEEDLE_progressive.js"
6
- export { CustomShader } from "./NEEDLE_techniques_webgl.js"
7
- export { MaterialX } from "./NEEDLE_materialx.js"
7
+ export { CustomShader } from "./NEEDLE_techniques_webgl.js"
@@ -5,12 +5,32 @@ import * as utils from "./../engine/engine_three_utils.js";
5
5
  import { Behaviour, GameObject } from "./Component.js";
6
6
 
7
7
  /**
8
- * Aligns this GameObject between two other GameObjects, scaling it to fit the distance.
9
- * You can use this to create dynamic beams or connectors between objects.
8
+ * The [AlignmentConstraint](https://engine.needle.tools/docs/api/AlignmentConstraint) positions and scales this GameObject to span between two target objects.
9
+ * The object is rotated to face `to` and scaled along Z to match the distance.
10
10
  *
11
- * @summary Aligns and scales the object between two target GameObjects
11
+ * **Use cases:**
12
+ * - Dynamic beams or laser effects between objects
13
+ * - Stretchy connectors or ropes
14
+ * - Visual links between UI elements
15
+ * - Debug lines between transforms
16
+ *
17
+ * **How it works:**
18
+ * - Position: Centered between `from` and `to` (or at `from` if not centered)
19
+ * - Rotation: Looks at `to` from `from`
20
+ * - Scale: Z-axis scales to match distance, X/Y use `width`
21
+ *
22
+ * @example Create a beam between two objects
23
+ * ```ts
24
+ * const beam = beamMesh.addComponent(AlignmentConstraint);
25
+ * // Set targets via serialized properties in editor
26
+ * // or via code if properties are exposed
27
+ * ```
28
+ *
29
+ * @summary Aligns and scales object between two targets
12
30
  * @category Constraints
13
- * @group Components
31
+ * @group Components
32
+ * @see {@link LookAtConstraint} for rotation-only constraints
33
+ * @see {@link SmoothFollow} for following with smoothing
14
34
  **/
15
35
  export class AlignmentConstraint extends Behaviour {
16
36
 
@@ -10,6 +10,12 @@ import { Behaviour } from "./Component.js";
10
10
 
11
11
  const debug = getParam("debuganimation");
12
12
 
13
+ /**
14
+ * Options for controlling animation playback via {@link Animation.play}.
15
+ * All options are optional - defaults are sensible for most use cases.
16
+ *
17
+ * @see {@link Animation} for the component that uses these options
18
+ */
13
19
  export declare type PlayOptions = {
14
20
  /**
15
21
  * The fade duration in seconds for the action to fade in and other actions to fade out (if exclusive is enabled)
@@ -59,11 +65,47 @@ declare type AnimationIdentifier = AnimationClip | number | string | undefined;
59
65
  class Vec2 { x!: number; y!: number }
60
66
 
61
67
  /**
62
- * Animation component to play animations on a GameObject.
68
+ * Animation component to play animations on a GameObject.
69
+ * For simpler animation needs compared to {@link Animator}, this component directly
70
+ * plays AnimationClips without state machine logic.
71
+ *
72
+ * **Key features:**
73
+ * - Play animations by index, name, or clip reference
74
+ * - Cross-fade between animations with `fadeDuration`
75
+ * - Loop or play once with optional clamping
76
+ * - Random start time and speed variation
77
+ * - Promise-based completion handling
78
+ *
63
79
  *
64
- * @summary Plays animations from AnimationClips
80
+ * ![](https://cloud.needle.tools/-/media/zXQhLgtxr5ZaxLDTDb3MXA.gif)
81
+ *
82
+ * @example Play animation by name
83
+ * ```ts
84
+ * const anim = this.gameObject.getComponent(Animation);
85
+ * await anim?.play("Walk", { loop: true, fadeDuration: 0.3 });
86
+ * ```
87
+ *
88
+ * @example Play with options
89
+ * ```ts
90
+ * anim?.play(0, {
91
+ * loop: false,
92
+ * clampWhenFinished: true,
93
+ * speed: 2
94
+ * });
95
+ * ```
96
+ *
97
+ * @summary Plays animations from AnimationClips
65
98
  * @category Animation and Sequencing
66
99
  * @group Components
100
+ * @see {@link Animator} for state machine-based animation
101
+ * @see {@link PlayOptions} for all playback options
102
+ * @link https://engine.needle.tools/samples/?overlay=samples&tag=animation
103
+ * @link https://engine.needle.tools/samples/imunogard/
104
+ *
105
+ * @link https://engine.needle.tools/docs/blender/animation.html
106
+ *
107
+ * ![](https://cloud.needle.tools/-/media/vAYv-kU-eMpICqQZHJktCA.gif)
108
+ *
67
109
  */
68
110
  export class Animation extends Behaviour implements IAnimationComponent {
69
111
 
@@ -12,7 +12,7 @@ import { Behaviour } from "./Component.js";
12
12
  const debug = getParam("debuganimator");
13
13
 
14
14
  /**
15
- * Represents an event emitted by an animation mixer
15
+ * Represents an event emitted by an animation mixer
16
16
  * @category Animation and Sequencing
17
17
  * @group Components
18
18
  */
@@ -28,7 +28,7 @@ export declare class MixerEvent {
28
28
  }
29
29
 
30
30
  /**
31
- * Configuration options for playing animations
31
+ * Configuration options for playing animations
32
32
  * @category Animation and Sequencing
33
33
  */
34
34
  export declare class PlayOptions {
@@ -38,15 +38,48 @@ export declare class PlayOptions {
38
38
  clampWhenFinished?: boolean;
39
39
  }
40
40
 
41
- /**
42
- * The Animator component plays and manages animations on a GameObject.
43
- * It works with an {@link AnimatorController} to handle state transitions and animation blending.
44
- * A new AnimatorController can be created from code via `AnimatorController.createFromClips`.
41
+ /**
42
+ * Animator plays and manages state-machine based animations on a GameObject.
43
+ * Uses an {@link AnimatorController} for state transitions, blending, and parameters.
44
+ *
45
+ * **State machine animations:**
46
+ * Define animation states and transitions in Unity's Animator window or in [Blender's Animator Controller editor](https://engine.needle.tools/docs/blender/animation.html)
47
+ * Control transitions via parameters (bool, int, float, trigger).
45
48
  *
49
+ * ![](https://cloud.needle.tools/-/media/zXQhLgtxr5ZaxLDTDb3MXA.gif)
50
+ *
51
+ * **Creating at runtime:**
52
+ * Use `AnimatorController.createFromClips()` to create controllers from code.
53
+ *
54
+ * **Parameters:**
55
+ * - `setTrigger(name)` - Trigger a one-shot transition
56
+ * - `setBool(name, value)` - Set boolean parameter
57
+ * - `setFloat(name, value)` - Set float parameter
58
+ * - `setInteger(name, value)` - Set integer parameter
59
+ *
60
+ * @example Trigger animation state
61
+ * ```ts
62
+ * const animator = myCharacter.getComponent(Animator);
63
+ * animator.setTrigger("Jump");
64
+ * animator.setFloat("Speed", 5);
65
+ * animator.setBool("IsRunning", true);
66
+ * ```
67
+ *
68
+ * @example Listen to animation events
69
+ * ```ts
70
+ * animator.onLoop(evt => console.log("Animation looped"));
71
+ * animator.onFinished(evt => console.log("Animation finished"));
72
+ * ```
73
+ *
46
74
  * @summary Plays and manages animations on a GameObject based on an AnimatorController
47
75
  * @category Animation and Sequencing
48
76
  * @group Components
49
- */
77
+ * @see {@link AnimatorController} for state machine configuration
78
+ * @see {@link Animation} for simple clip playback
79
+ * @see {@link PlayableDirector} for timeline-based animation
80
+ *
81
+ * @link https://engine.needle.tools/docs/blender/animation.html
82
+ */
50
83
  export class Animator extends Behaviour implements IAnimationComponent {
51
84
 
52
85
  /**
@@ -5,7 +5,7 @@ import { Camera } from "./Camera.js";
5
5
  import { Behaviour, GameObject } from "./Component.js";
6
6
 
7
7
  /**
8
- * AudioListener represents a listener that can hear audio sources in the scene.
8
+ * The [AudioListener](https://engine.needle.tools/docs/api/AudioListener) represents a listener that can hear audio sources in the scene.
9
9
  * This component creates and manages a Three.js {@link three#AudioListener}, automatically connecting it
10
10
  * to the main camera or a Camera in the parent hierarchy.
11
11
  *
@@ -37,24 +37,46 @@ export enum AudioRolloffMode {
37
37
  }
38
38
 
39
39
 
40
- /**
41
- * Plays audio clips in the scene, with support for spatial positioning.
42
- *
43
- * The AudioSource component can play audio files or media streams with
44
- * options for spatial blending, volume control, looping, and more.
45
- *
46
- * When a page loses visibility (tab becomes inactive), audio will automatically
47
- * pause unless {@link playInBackground} is set to true. On mobile devices, audio always
48
- * pauses regardless of this setting. When the page becomes visible again,
49
- * previously playing audio will resume.
50
- *
51
- * AudioSource also responds to application mute state changes. When the application
52
- * is muted, the volume is set to 0. When unmuted, the volume
53
- * returns to its previous value.
54
- *
40
+ /**
41
+ * Plays audio clips in the scene with support for spatial (3D) positioning.
42
+ *
43
+ * **Browser autoplay policies:**
44
+ * Web browsers require user interaction before playing audio. Use
45
+ * `AudioSource.userInteractionRegistered` to check if playback is allowed,
46
+ * or `registerWaitForAllowAudio()` to queue playback until interaction occurs.
47
+ *
48
+ * **Spatial audio:**
49
+ * Set `spatialBlend` to 1 for full 3D positioning, or 0 for 2D (non-spatial).
50
+ * Requires an {@link AudioListener} in the scene (typically on the camera).
51
+ *
52
+ * **Visibility handling:**
53
+ * Audio automatically pauses when the tab is hidden unless `playInBackground = true`.
54
+ * On mobile, audio always pauses in background regardless of this setting.
55
+ *
56
+ * @example Play audio on button click
57
+ * ```ts
58
+ * onClick() {
59
+ * const audio = this.getComponent(AudioSource);
60
+ * audio.play();
61
+ * }
62
+ * ```
63
+ *
64
+ * @example Wait for user interaction
65
+ * ```ts
66
+ * AudioSource.registerWaitForAllowAudio(() => {
67
+ * this.getComponent(AudioSource)?.play();
68
+ * });
69
+ * ```
70
+ *
55
71
  * @summary Plays audio clips from files or media streams
56
72
  * @category Multimedia
57
73
  * @group Components
74
+ * @see {@link AudioListener} for the audio receiver component
75
+ * @see {@link AudioRolloffMode} for distance attenuation options
76
+ * @see {@link Voip} for voice communication
77
+ * @see {@link PlayableDirector} for timeline-based audio
78
+ * @link https://engine.needle.tools/samples/?overlay=samples&tag=audio
79
+ * @link https://spatial-audio-zubckswmztj.needle.run/
58
80
  */
59
81
  export class AudioSource extends Behaviour {
60
82
 
@@ -5,12 +5,31 @@ import { serializable } from "../engine/engine_serialization_decorator.js";
5
5
  import { Behaviour } from "./Component.js";
6
6
 
7
7
  /**
8
- * Component that visualizes the axes of an object in the scene.
9
- * Renders colored lines representing the X (red), Y (green) and Z (blue) axes.
10
- *
11
- * @summary Visualizes object axes in the scene
8
+ * The [AxesHelper](https://engine.needle.tools/docs/api/AxesHelper) visualizes the local coordinate axes of an object.
9
+ * Displays colored lines for X (red), Y (green), and Z (blue) axes.
10
+ *
11
+ * **Use cases:**
12
+ * - Debugging object orientation and rotation
13
+ * - Visualizing pivot points
14
+ * - Understanding coordinate systems
15
+ *
16
+ * **Properties:**
17
+ * - `length` - Length of axis lines in world units
18
+ * - `depthTest` - Whether axes are occluded by scene objects
19
+ * - `isGizmo` - Only show when `?gizmos` URL parameter is set
20
+ *
21
+ * @example Add axes visualization
22
+ * ```ts
23
+ * const axes = myObject.addComponent(AxesHelper);
24
+ * axes.length = 2;
25
+ * axes.depthTest = false; // Always visible on top
26
+ * ```
27
+ *
28
+ * @summary Visualizes object axes (X=red, Y=green, Z=blue)
12
29
  * @category Helpers
13
30
  * @group Components
31
+ * @see {@link GridHelper} for grid visualization
32
+ * @see {@link Gizmos} for debug drawing utilities
14
33
  */
15
34
  export class AxesHelper extends Behaviour {
16
35
  /**
@@ -4,12 +4,35 @@ import * as utils from "./../engine/engine_three_utils.js";
4
4
  import { Behaviour, GameObject } from "./Component.js";
5
5
 
6
6
  /**
7
- * BasicIKConstraint positions the GameObject between two target GameObjects (`from` and `to`) with an optional `hint` GameObject to guide the bending direction.
8
- * This is useful for simple inverse kinematics setups, such as positioning a joint in a limb.
9
- *
10
- * @summary Simple Inverse Kinematics Constraint
11
- * @category Animation
7
+ * The [BasicIKConstraint](https://engine.needle.tools/docs/api/BasicIKConstraint) provides simple two-bone inverse kinematics.
8
+ * Positions this GameObject as a "joint" between `from` and `to` targets,
9
+ * using a `hint` object to determine the bend direction.
10
+ *
11
+ * **Use cases:**
12
+ * - Simple arm/leg IK (elbow/knee positioning)
13
+ * - Mechanical linkages
14
+ * - Procedural animation joints
15
+ *
16
+ * **How it works:**
17
+ * - Calculates joint position based on `desiredDistance` (bone length)
18
+ * - Uses `hint` to determine which way the joint bends
19
+ * - Automatically handles stretching when targets are too far apart
20
+ *
21
+ * @example Setup basic limb IK
22
+ * ```ts
23
+ * // Attach to the elbow/knee joint object
24
+ * const ik = elbowJoint.addComponent(BasicIKConstraint);
25
+ * // Configure via serialized properties in editor:
26
+ * // - from: shoulder/hip
27
+ * // - to: wrist/ankle
28
+ * // - hint: control point for bend direction
29
+ * ```
30
+ *
31
+ * @summary Two-bone inverse kinematics constraint
32
+ * @category Animation and Sequencing
12
33
  * @group Components
34
+ * @see {@link LookAtConstraint} for aim constraints
35
+ * @see {@link AlignmentConstraint} for simpler alignment
13
36
  */
14
37
  export class BasicIKConstraint extends Behaviour {
15
38
 
@@ -32,13 +32,43 @@ const debug = getParam("debugcam");
32
32
  const debugscreenpointtoray = getParam("debugscreenpointtoray");
33
33
 
34
34
  /**
35
- * Camera component that handles rendering from a specific viewpoint in the scene.
36
- * Supports both perspective and orthographic cameras with various rendering options.
37
- * Internally, this component uses {@link PerspectiveCamera} and {@link OrthographicCamera} three.js objects.
35
+ * [Camera](https://engine.needle.tools/docs/api/Camera) handles rendering from a specific viewpoint in the scene.
36
+ * Supports both perspective and orthographic cameras with various rendering options.
37
+ * Internally uses three.js {@link PerspectiveCamera} or {@link OrthographicCamera}.
38
38
  *
39
+ * ![](https://cloud.needle.tools/-/media/UU96_SJNXdVjaAvPNW3kZA.webp)
40
+ *
41
+ * **Background clearing:**
42
+ * Control how the camera clears the background using `clearFlags`:
43
+ * - `Skybox` - Use scene skybox/environment
44
+ * - `SolidColor` - Clear with `backgroundColor`
45
+ * - `None` - Don't clear (for layered rendering)
46
+ *
47
+ * **Render targets:**
48
+ * Set `targetTexture` to a {@link RenderTexture} to render to a texture
49
+ * instead of the screen (useful for mirrors, portals, minimaps).
50
+ *
51
+ * [![](https://cloud.needle.tools/-/media/W4tYZuJVVJFVp7NTaHPOnA.gif)](https://engine.needle.tools/samples/movie-set)
52
+ *
53
+ * @example Configure camera settings
54
+ * ```ts
55
+ * const cam = this.context.mainCameraComponent;
56
+ * cam.fieldOfView = 60;
57
+ * cam.nearClipPlane = 0.1;
58
+ * cam.farClipPlane = 1000;
59
+ * cam.clearFlags = ClearFlags.SolidColor;
60
+ * cam.backgroundColor = new RGBAColor(0.1, 0.1, 0.2, 1);
61
+ * ```
62
+ *
63
+ * - Example: https://engine.needle.tools/samples/multiple-cameras
64
+ *
39
65
  * @summary Rendering scenes from a specific viewpoint
40
66
  * @category Camera and Controls
41
67
  * @group Components
68
+ * @see {@link OrbitControls} for camera interaction
69
+ * @see {@link RenderTexture} for off-screen rendering
70
+ * @see {@link ClearFlags} for background clearing options
71
+ * @link https://engine.needle.tools/samples/movie-set/
42
72
  */
43
73
  export class Camera extends Behaviour implements ICamera {
44
74
 
@@ -14,18 +14,49 @@ import { Rigidbody } from "./RigidBody.js";
14
14
  const debug = getParam("debugcharactercontroller");
15
15
 
16
16
  /**
17
- * CharacterController adds a capsule collider and rigidbody to the object, constrains rotation, and provides movement and grounded state.
18
- * It is designed for typical character movement in 3D environments.
17
+ * The [CharacterController](https://engine.needle.tools/docs/api/CharacterController) adds a capsule collider and rigidbody to the object, constrains rotation, and provides movement and grounded state.
18
+ * It is designed for typical character movement in 3D environments.
19
+ *
20
+ * The controller automatically:
21
+ * - Creates a {@link CapsuleCollider} if one doesn't exist
22
+ * - Creates a {@link Rigidbody} if one doesn't exist
23
+ * - Locks rotation on all axes to prevent tipping over
24
+ * - Tracks ground contact for jump detection
25
+ *
26
+ * @example Basic character movement
27
+ * ```ts
28
+ * export class MyCharacter extends Behaviour {
29
+ * @serializable(CharacterController)
30
+ * controller?: CharacterController;
31
+ *
32
+ * update() {
33
+ * const input = this.context.input;
34
+ * const move = new Vector3();
35
+ * if (input.isKeyPressed("KeyW")) move.z = 0.1;
36
+ * if (input.isKeyPressed("KeyS")) move.z = -0.1;
37
+ * this.controller?.move(move);
38
+ * }
39
+ * }
40
+ * ```
41
+ *
19
42
  * @summary Character Movement Controller
20
- * @category Character
43
+ * @category Character
21
44
  * @group Components
45
+ * @see {@link CharacterControllerInput} for ready-to-use input handling
46
+ * @see {@link Rigidbody} for physics configuration
47
+ * @see {@link CapsuleCollider} for collision shape
22
48
  */
23
49
  export class CharacterController extends Behaviour {
24
50
 
51
+ /** Center offset of the capsule collider in local space */
25
52
  @serializable(Vector3)
26
53
  center: Vector3 = new Vector3(0, 0, 0);
54
+
55
+ /** Radius of the capsule collider */
27
56
  @serializable()
28
57
  radius: number = .5;
58
+
59
+ /** Height of the capsule collider */
29
60
  @serializable()
30
61
  height: number = 2;
31
62
 
@@ -70,6 +101,11 @@ export class CharacterController extends Behaviour {
70
101
  rb.lockRotationZ = true;
71
102
  }
72
103
 
104
+ /**
105
+ * Moves the character by adding the given vector to its position.
106
+ * Movement is applied directly without physics simulation.
107
+ * @param vec The movement vector to apply
108
+ */
73
109
  move(vec: Vector3) {
74
110
  this.gameObject.position.add(vec);
75
111
  }
@@ -92,9 +128,15 @@ export class CharacterController extends Behaviour {
92
128
  }
93
129
  }
94
130
 
131
+ /** Returns true if the character is currently touching the ground */
95
132
  get isGrounded(): boolean { return this._activeGroundCollisions.size > 0; }
96
133
 
97
134
  private _contactVelocity: Vector3 = new Vector3();
135
+
136
+ /**
137
+ * Returns the combined velocity of all objects the character is standing on.
138
+ * Useful for moving platforms - add this to your movement for proper platform riding.
139
+ */
98
140
  get contactVelocity(): Vector3 {
99
141
  this._contactVelocity.set(0, 0, 0);
100
142
  for (const col of this._activeGroundCollisions) {
@@ -110,31 +152,56 @@ export class CharacterController extends Behaviour {
110
152
  }
111
153
 
112
154
  /**
113
- * CharacterControllerInput handles user input to control a CharacterController.
114
- * It supports movement, looking around, jumping, and double jumping.
115
- * You can customize movement speed, rotation speed, and jump forces.
116
- * It also integrates with an Animator component for character animations.
155
+ * CharacterControllerInput handles user input to control a {@link CharacterController}.
156
+ * It supports movement, looking around, jumping, and double jumping.
157
+ *
158
+ * Default controls:
159
+ * - **W/S**: Move forward/backward
160
+ * - **A/D**: Rotate left/right
161
+ * - **Space**: Jump (supports double jump)
162
+ *
163
+ * The component automatically sets animator parameters:
164
+ * - `running` (bool): True when moving
165
+ * - `jumping` (bool): True when starting a jump
166
+ * - `doubleJump` (bool): True during double jump
167
+ * - `falling` (bool): True when falling from height
168
+ *
169
+ * @example Custom input handling
170
+ * ```ts
171
+ * const input = this.gameObject.getComponent(CharacterControllerInput);
172
+ * input?.move(new Vector2(0, 1)); // Move forward
173
+ * input?.jump(); // Trigger jump
174
+ * ```
175
+ *
117
176
  * @summary User Input for Character Controller
118
177
  * @category Character
119
178
  * @group Components
179
+ * @see {@link CharacterController} for the movement controller
180
+ * @see {@link Animator} for animation integration
120
181
  */
121
182
  export class CharacterControllerInput extends Behaviour {
122
183
 
184
+ /** The CharacterController to drive with input */
123
185
  @serializable(CharacterController)
124
186
  controller?: CharacterController;
125
187
 
188
+ /** Movement speed multiplier */
126
189
  @serializable()
127
190
  movementSpeed: number = 2;
128
191
 
192
+ /** Rotation speed multiplier */
129
193
  @serializable()
130
194
  rotationSpeed: number = 2;
131
195
 
196
+ /** Impulse force applied when jumping from ground */
132
197
  @serializable()
133
198
  jumpForce: number = 1;
134
199
 
200
+ /** Impulse force applied for the second jump (set to 0 to disable double jump) */
135
201
  @serializable()
136
202
  doubleJumpForce: number = 2;
137
203
 
204
+ /** Optional Animator for character animations */
138
205
  @serializable(Animator)
139
206
  animator?: Animator;
140
207