@needle-tools/engine 3.28.6-beta → 3.28.7-beta.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 (848) hide show
  1. package/CHANGELOG.md +2259 -2253
  2. package/LICENSE.md +10 -10
  3. package/README.md +52 -52
  4. package/dist/needle-engine.js +7 -10
  5. package/dist/needle-engine.light.js +7 -10
  6. package/dist/needle-engine.light.min.js +7 -10
  7. package/dist/needle-engine.light.umd.cjs +7 -10
  8. package/dist/needle-engine.min.js +7 -10
  9. package/dist/needle-engine.umd.cjs +7 -10
  10. package/lib/engine/api.d.ts +52 -52
  11. package/lib/engine/api.js +51 -51
  12. package/lib/engine/assets/index.d.ts +1 -1
  13. package/lib/engine/assets/index.js +4 -4
  14. package/lib/engine/codegen/register_types.d.ts +1 -1
  15. package/lib/engine/codegen/register_types.js +439 -439
  16. package/lib/engine/debug/debug.d.ts +12 -12
  17. package/lib/engine/debug/debug.js +26 -26
  18. package/lib/engine/debug/debug_console.d.ts +2 -2
  19. package/lib/engine/debug/debug_console.js +204 -204
  20. package/lib/engine/debug/debug_overlay.d.ts +10 -10
  21. package/lib/engine/debug/debug_overlay.js +277 -277
  22. package/lib/engine/debug/index.d.ts +1 -1
  23. package/lib/engine/debug/index.js +1 -1
  24. package/lib/engine/engine_addressables.d.ts +75 -75
  25. package/lib/engine/engine_addressables.js +441 -441
  26. package/lib/engine/engine_application.d.ts +19 -19
  27. package/lib/engine/engine_application.js +45 -45
  28. package/lib/engine/engine_assetdatabase.d.ts +25 -25
  29. package/lib/engine/engine_assetdatabase.js +341 -341
  30. package/lib/engine/engine_camera.d.ts +6 -6
  31. package/lib/engine/engine_camera.js +23 -23
  32. package/lib/engine/engine_components.d.ts +17 -17
  33. package/lib/engine/engine_components.js +273 -273
  34. package/lib/engine/engine_components_internal.d.ts +11 -11
  35. package/lib/engine/engine_components_internal.js +41 -41
  36. package/lib/engine/engine_constants.d.ts +5 -5
  37. package/lib/engine/engine_constants.js +32 -32
  38. package/lib/engine/engine_context.d.ts +269 -269
  39. package/lib/engine/engine_context.js +1242 -1242
  40. package/lib/engine/engine_context_registry.d.ts +50 -50
  41. package/lib/engine/engine_context_registry.js +89 -89
  42. package/lib/engine/engine_coroutine.d.ts +4 -4
  43. package/lib/engine/engine_coroutine.js +21 -21
  44. package/lib/engine/engine_create_objects.d.ts +13 -13
  45. package/lib/engine/engine_create_objects.js +33 -33
  46. package/lib/engine/engine_default_parameters.d.ts +2 -2
  47. package/lib/engine/engine_default_parameters.js +3 -3
  48. package/lib/engine/engine_editor-sync.d.ts +17 -17
  49. package/lib/engine/engine_editor-sync.js +7 -7
  50. package/lib/engine/engine_element.d.ts +55 -55
  51. package/lib/engine/engine_element.js +559 -559
  52. package/lib/engine/engine_element_attributes.d.ts +49 -49
  53. package/lib/engine/engine_element_attributes.js +1 -1
  54. package/lib/engine/engine_element_extras.d.ts +6 -6
  55. package/lib/engine/engine_element_extras.js +13 -13
  56. package/lib/engine/engine_element_loading.d.ts +40 -40
  57. package/lib/engine/engine_element_loading.js +312 -312
  58. package/lib/engine/engine_element_overlay.d.ts +19 -19
  59. package/lib/engine/engine_element_overlay.js +143 -143
  60. package/lib/engine/engine_fileloader.d.ts +3 -3
  61. package/lib/engine/engine_fileloader.js +7 -7
  62. package/lib/engine/engine_gameobject.d.ts +39 -39
  63. package/lib/engine/engine_gameobject.js +559 -559
  64. package/lib/engine/engine_generic_utils.d.ts +1 -1
  65. package/lib/engine/engine_generic_utils.js +13 -13
  66. package/lib/engine/engine_gizmos.d.ts +26 -26
  67. package/lib/engine/engine_gizmos.js +282 -282
  68. package/lib/engine/engine_gltf.d.ts +13 -13
  69. package/lib/engine/engine_gltf.js +15 -15
  70. package/lib/engine/engine_gltf_builtin_components.d.ts +7 -7
  71. package/lib/engine/engine_gltf_builtin_components.js +298 -298
  72. package/lib/engine/engine_hot_reload.d.ts +5 -5
  73. package/lib/engine/engine_hot_reload.js +182 -182
  74. package/lib/engine/engine_input.d.ts +129 -129
  75. package/lib/engine/engine_input.js +799 -799
  76. package/lib/engine/engine_input_utils.d.ts +2 -2
  77. package/lib/engine/engine_input_utils.js +22 -22
  78. package/lib/engine/engine_instancing.d.ts +16 -16
  79. package/lib/engine/engine_instancing.js +36 -36
  80. package/lib/engine/engine_license.d.ts +4 -4
  81. package/lib/engine/engine_license.js +398 -398
  82. package/lib/engine/engine_lifecycle_api.d.ts +14 -14
  83. package/lib/engine/engine_lifecycle_api.js +24 -24
  84. package/lib/engine/engine_lifecycle_functions_internal.d.ts +6 -6
  85. package/lib/engine/engine_lifecycle_functions_internal.js +28 -28
  86. package/lib/engine/engine_lightdata.d.ts +23 -23
  87. package/lib/engine/engine_lightdata.js +86 -86
  88. package/lib/engine/engine_loaders.d.ts +7 -7
  89. package/lib/engine/engine_loaders.js +69 -69
  90. package/lib/engine/engine_mainloop_utils.d.ts +13 -13
  91. package/lib/engine/engine_mainloop_utils.js +426 -426
  92. package/lib/engine/engine_math.d.ts +43 -43
  93. package/lib/engine/engine_math.js +147 -147
  94. package/lib/engine/engine_networking.d.ts +176 -176
  95. package/lib/engine/engine_networking.js +649 -649
  96. package/lib/engine/engine_networking_auto.d.ts +24 -24
  97. package/lib/engine/engine_networking_auto.js +324 -324
  98. package/lib/engine/engine_networking_files.d.ts +23 -23
  99. package/lib/engine/engine_networking_files.js +176 -176
  100. package/lib/engine/engine_networking_files_default_components.d.ts +3 -3
  101. package/lib/engine/engine_networking_files_default_components.js +39 -39
  102. package/lib/engine/engine_networking_instantiate.d.ts +39 -39
  103. package/lib/engine/engine_networking_instantiate.js +302 -302
  104. package/lib/engine/engine_networking_peer.d.ts +15 -15
  105. package/lib/engine/engine_networking_peer.js +132 -132
  106. package/lib/engine/engine_networking_streams.d.ts +90 -90
  107. package/lib/engine/engine_networking_streams.js +428 -428
  108. package/lib/engine/engine_networking_types.d.ts +14 -14
  109. package/lib/engine/engine_networking_types.js +7 -7
  110. package/lib/engine/engine_networking_utils.d.ts +2 -2
  111. package/lib/engine/engine_networking_utils.js +20 -20
  112. package/lib/engine/engine_patcher.d.ts +10 -10
  113. package/lib/engine/engine_patcher.js +142 -142
  114. package/lib/engine/engine_physics.d.ts +115 -115
  115. package/lib/engine/engine_physics.js +228 -228
  116. package/lib/engine/engine_physics.types.d.ts +37 -37
  117. package/lib/engine/engine_physics.types.js +33 -33
  118. package/lib/engine/engine_physics_rapier.d.ts +112 -112
  119. package/lib/engine/engine_physics_rapier.js +1266 -1266
  120. package/lib/engine/engine_playerview.d.ts +26 -26
  121. package/lib/engine/engine_playerview.js +64 -64
  122. package/lib/engine/engine_scenelighting.d.ts +74 -74
  123. package/lib/engine/engine_scenelighting.js +285 -285
  124. package/lib/engine/engine_scenetools.d.ts +35 -35
  125. package/lib/engine/engine_scenetools.js +212 -212
  126. package/lib/engine/engine_serialization.d.ts +4 -4
  127. package/lib/engine/engine_serialization.js +4 -4
  128. package/lib/engine/engine_serialization_builtin_serializer.d.ts +62 -62
  129. package/lib/engine/engine_serialization_builtin_serializer.js +369 -369
  130. package/lib/engine/engine_serialization_core.d.ts +84 -84
  131. package/lib/engine/engine_serialization_core.js +576 -576
  132. package/lib/engine/engine_serialization_decorator.d.ts +15 -15
  133. package/lib/engine/engine_serialization_decorator.js +54 -54
  134. package/lib/engine/engine_setup.d.ts +1 -1
  135. package/lib/engine/engine_setup.js +2 -2
  136. package/lib/engine/engine_shaders.d.ts +31 -31
  137. package/lib/engine/engine_shaders.js +229 -229
  138. package/lib/engine/engine_shims.d.ts +3 -3
  139. package/lib/engine/engine_shims.js +22 -22
  140. package/lib/engine/engine_texture.d.ts +20 -20
  141. package/lib/engine/engine_texture.js +57 -57
  142. package/lib/engine/engine_three_utils.d.ts +51 -51
  143. package/lib/engine/engine_three_utils.js +342 -342
  144. package/lib/engine/engine_time.d.ts +19 -19
  145. package/lib/engine/engine_time.js +47 -47
  146. package/lib/engine/engine_types.d.ts +358 -358
  147. package/lib/engine/engine_types.js +72 -72
  148. package/lib/engine/engine_typestore.d.ts +16 -16
  149. package/lib/engine/engine_typestore.js +35 -35
  150. package/lib/engine/engine_util_decorator.d.ts +12 -12
  151. package/lib/engine/engine_util_decorator.js +115 -115
  152. package/lib/engine/engine_utils.d.ts +104 -104
  153. package/lib/engine/engine_utils.js +518 -518
  154. package/lib/engine/engine_utils_screenshot.d.ts +10 -10
  155. package/lib/engine/engine_utils_screenshot.js +70 -70
  156. package/lib/engine/engine_web_api.d.ts +12 -12
  157. package/lib/engine/engine_web_api.js +112 -112
  158. package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
  159. package/lib/engine/extensions/EXT_texture_exr.js +32 -32
  160. package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +116 -116
  161. package/lib/engine/extensions/NEEDLE_animator_controller_model.js +91 -91
  162. package/lib/engine/extensions/NEEDLE_components.d.ts +33 -33
  163. package/lib/engine/extensions/NEEDLE_components.js +206 -206
  164. package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
  165. package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
  166. package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +38 -38
  167. package/lib/engine/extensions/NEEDLE_lighting_settings.js +183 -183
  168. package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
  169. package/lib/engine/extensions/NEEDLE_lightmaps.js +108 -108
  170. package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
  171. package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
  172. package/lib/engine/extensions/NEEDLE_progressive.d.ts +41 -41
  173. package/lib/engine/extensions/NEEDLE_progressive.js +366 -366
  174. package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
  175. package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
  176. package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +39 -39
  177. package/lib/engine/extensions/NEEDLE_techniques_webgl.js +544 -544
  178. package/lib/engine/extensions/extension_resolver.d.ts +4 -4
  179. package/lib/engine/extensions/extension_resolver.js +1 -1
  180. package/lib/engine/extensions/extension_utils.d.ts +2 -2
  181. package/lib/engine/extensions/extension_utils.js +140 -140
  182. package/lib/engine/extensions/extensions.d.ts +21 -21
  183. package/lib/engine/extensions/extensions.js +94 -94
  184. package/lib/engine/extensions/index.d.ts +5 -5
  185. package/lib/engine/extensions/index.js +5 -5
  186. package/lib/engine/extensions/usage_tracker.d.ts +13 -13
  187. package/lib/engine/extensions/usage_tracker.js +61 -61
  188. package/lib/engine/js-extensions/Camera.d.ts +1 -1
  189. package/lib/engine/js-extensions/Camera.js +36 -36
  190. package/lib/engine/js-extensions/Layers.d.ts +3 -3
  191. package/lib/engine/js-extensions/Layers.js +19 -19
  192. package/lib/engine/js-extensions/index.d.ts +2 -2
  193. package/lib/engine/js-extensions/index.js +2 -2
  194. package/lib/engine/shaders/shaderData.d.ts +55 -55
  195. package/lib/engine/shaders/shaderData.js +58 -58
  196. package/lib/engine/tests/test_utils.d.ts +2 -2
  197. package/lib/engine/tests/test_utils.js +53 -53
  198. package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
  199. package/lib/engine-components/AlignmentConstraint.js +39 -39
  200. package/lib/engine-components/Animation.d.ts +53 -53
  201. package/lib/engine-components/Animation.js +333 -333
  202. package/lib/engine-components/AnimationCurve.d.ts +16 -16
  203. package/lib/engine-components/AnimationCurve.js +97 -97
  204. package/lib/engine-components/AnimationUtils.d.ts +8 -8
  205. package/lib/engine-components/AnimationUtils.js +110 -110
  206. package/lib/engine-components/Animator.d.ts +81 -81
  207. package/lib/engine-components/Animator.js +229 -229
  208. package/lib/engine-components/AnimatorController.d.ts +57 -57
  209. package/lib/engine-components/AnimatorController.js +887 -887
  210. package/lib/engine-components/AudioListener.d.ts +7 -7
  211. package/lib/engine-components/AudioListener.js +30 -30
  212. package/lib/engine-components/AudioSource.d.ts +61 -61
  213. package/lib/engine-components/AudioSource.js +422 -422
  214. package/lib/engine-components/AvatarLoader.d.ts +19 -19
  215. package/lib/engine-components/AvatarLoader.js +173 -173
  216. package/lib/engine-components/AxesHelper.d.ts +9 -9
  217. package/lib/engine-components/AxesHelper.js +44 -44
  218. package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
  219. package/lib/engine-components/BasicIKConstraint.js +43 -43
  220. package/lib/engine-components/BoxHelperComponent.d.ts +16 -16
  221. package/lib/engine-components/BoxHelperComponent.js +89 -89
  222. package/lib/engine-components/Camera.d.ts +70 -70
  223. package/lib/engine-components/Camera.js +450 -450
  224. package/lib/engine-components/CameraUtils.d.ts +1 -1
  225. package/lib/engine-components/CameraUtils.js +77 -77
  226. package/lib/engine-components/CharacterController.d.ts +46 -46
  227. package/lib/engine-components/CharacterController.js +227 -227
  228. package/lib/engine-components/Collider.d.ts +46 -46
  229. package/lib/engine-components/Collider.js +153 -153
  230. package/lib/engine-components/Component.d.ts +228 -228
  231. package/lib/engine-components/Component.js +541 -541
  232. package/lib/engine-components/ContactShadows.d.ts +23 -23
  233. package/lib/engine-components/ContactShadows.js +233 -233
  234. package/lib/engine-components/DeleteBox.d.ts +9 -9
  235. package/lib/engine-components/DeleteBox.js +30 -30
  236. package/lib/engine-components/DeviceFlag.d.ts +12 -12
  237. package/lib/engine-components/DeviceFlag.js +43 -43
  238. package/lib/engine-components/DragControls.d.ts +51 -51
  239. package/lib/engine-components/DragControls.js +516 -516
  240. package/lib/engine-components/DropListener.d.ts +15 -15
  241. package/lib/engine-components/DropListener.js +120 -120
  242. package/lib/engine-components/Duplicatable.d.ts +16 -16
  243. package/lib/engine-components/Duplicatable.js +150 -150
  244. package/lib/engine-components/EventList.d.ts +28 -28
  245. package/lib/engine-components/EventList.js +105 -105
  246. package/lib/engine-components/EventTrigger.d.ts +12 -12
  247. package/lib/engine-components/EventTrigger.js +50 -50
  248. package/lib/engine-components/EventType.d.ts +19 -19
  249. package/lib/engine-components/EventType.js +71 -71
  250. package/lib/engine-components/FlyControls.d.ts +7 -7
  251. package/lib/engine-components/FlyControls.js +25 -25
  252. package/lib/engine-components/Fog.d.ts +20 -20
  253. package/lib/engine-components/Fog.js +60 -60
  254. package/lib/engine-components/Gizmos.d.ts +12 -12
  255. package/lib/engine-components/Gizmos.js +60 -60
  256. package/lib/engine-components/GridHelper.d.ts +12 -12
  257. package/lib/engine-components/GridHelper.js +47 -47
  258. package/lib/engine-components/GroundProjection.d.ts +21 -21
  259. package/lib/engine-components/GroundProjection.js +97 -97
  260. package/lib/engine-components/Interactable.d.ts +10 -10
  261. package/lib/engine-components/Interactable.js +11 -11
  262. package/lib/engine-components/Joints.d.ts +19 -19
  263. package/lib/engine-components/Joints.js +51 -51
  264. package/lib/engine-components/LODGroup.d.ts +30 -30
  265. package/lib/engine-components/LODGroup.js +145 -145
  266. package/lib/engine-components/Light.d.ts +75 -75
  267. package/lib/engine-components/Light.js +475 -475
  268. package/lib/engine-components/LookAtConstraint.d.ts +7 -7
  269. package/lib/engine-components/LookAtConstraint.js +17 -17
  270. package/lib/engine-components/NestedGltf.d.ts +11 -11
  271. package/lib/engine-components/NestedGltf.js +74 -74
  272. package/lib/engine-components/Networking.d.ts +11 -11
  273. package/lib/engine-components/Networking.js +70 -70
  274. package/lib/engine-components/OffsetConstraint.d.ts +14 -14
  275. package/lib/engine-components/OffsetConstraint.js +65 -65
  276. package/lib/engine-components/OrbitControls.d.ts +111 -111
  277. package/lib/engine-components/OrbitControls.js +646 -646
  278. package/lib/engine-components/ParticleSystem.d.ts +145 -145
  279. package/lib/engine-components/ParticleSystem.js +1077 -1077
  280. package/lib/engine-components/ParticleSystemModules.d.ts +489 -489
  281. package/lib/engine-components/ParticleSystemModules.js +1667 -1667
  282. package/lib/engine-components/ParticleSystemSubEmitter.d.ts +25 -25
  283. package/lib/engine-components/ParticleSystemSubEmitter.js +86 -86
  284. package/lib/engine-components/PlayerColor.d.ts +13 -13
  285. package/lib/engine-components/PlayerColor.js +83 -83
  286. package/lib/engine-components/ReflectionProbe.d.ts +22 -22
  287. package/lib/engine-components/ReflectionProbe.js +181 -181
  288. package/lib/engine-components/Renderer.d.ts +112 -112
  289. package/lib/engine-components/Renderer.js +1029 -1029
  290. package/lib/engine-components/RendererLightmap.d.ts +19 -19
  291. package/lib/engine-components/RendererLightmap.js +127 -127
  292. package/lib/engine-components/RigidBody.d.ts +120 -120
  293. package/lib/engine-components/RigidBody.js +452 -452
  294. package/lib/engine-components/SceneSwitcher.d.ts +72 -72
  295. package/lib/engine-components/SceneSwitcher.js +583 -583
  296. package/lib/engine-components/ScreenCapture.d.ts +64 -64
  297. package/lib/engine-components/ScreenCapture.js +405 -405
  298. package/lib/engine-components/ShadowCatcher.d.ts +18 -18
  299. package/lib/engine-components/ShadowCatcher.js +144 -144
  300. package/lib/engine-components/Skybox.d.ts +23 -23
  301. package/lib/engine-components/Skybox.js +287 -287
  302. package/lib/engine-components/SmoothFollow.d.ts +14 -14
  303. package/lib/engine-components/SmoothFollow.js +63 -63
  304. package/lib/engine-components/SpatialTrigger.d.ts +27 -27
  305. package/lib/engine-components/SpatialTrigger.js +144 -144
  306. package/lib/engine-components/SpectatorCamera.d.ts +45 -45
  307. package/lib/engine-components/SpectatorCamera.js +593 -593
  308. package/lib/engine-components/SpriteRenderer.d.ts +48 -48
  309. package/lib/engine-components/SpriteRenderer.js +257 -257
  310. package/lib/engine-components/SyncedCamera.d.ts +27 -27
  311. package/lib/engine-components/SyncedCamera.js +187 -187
  312. package/lib/engine-components/SyncedRoom.d.ts +24 -24
  313. package/lib/engine-components/SyncedRoom.js +162 -162
  314. package/lib/engine-components/SyncedTransform.d.ts +35 -35
  315. package/lib/engine-components/SyncedTransform.js +265 -265
  316. package/lib/engine-components/TestRunner.d.ts +13 -13
  317. package/lib/engine-components/TestRunner.js +99 -99
  318. package/lib/engine-components/TransformGizmo.d.ts +16 -16
  319. package/lib/engine-components/TransformGizmo.js +148 -148
  320. package/lib/engine-components/VideoPlayer.d.ts +86 -86
  321. package/lib/engine-components/VideoPlayer.js +792 -792
  322. package/lib/engine-components/Voip.d.ts +29 -29
  323. package/lib/engine-components/Voip.js +203 -203
  324. package/lib/engine-components/XRFlag.d.ts +33 -33
  325. package/lib/engine-components/XRFlag.js +128 -128
  326. package/lib/engine-components/api.d.ts +15 -15
  327. package/lib/engine-components/api.js +15 -15
  328. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +10 -10
  329. package/lib/engine-components/avatar/AvatarBlink_Simple.js +75 -75
  330. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +13 -13
  331. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +74 -74
  332. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +27 -27
  333. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +119 -119
  334. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +13 -13
  335. package/lib/engine-components/avatar/Avatar_MouthShapes.js +78 -78
  336. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +8 -8
  337. package/lib/engine-components/avatar/Avatar_MustacheShake.js +28 -28
  338. package/lib/engine-components/codegen/components.d.ts +216 -216
  339. package/lib/engine-components/codegen/components.js +217 -217
  340. package/lib/engine-components/debug/LogStats.d.ts +5 -5
  341. package/lib/engine-components/debug/LogStats.js +18 -18
  342. package/lib/engine-components/export/gltf/GltfExport.d.ts +25 -25
  343. package/lib/engine-components/export/gltf/GltfExport.js +215 -215
  344. package/lib/engine-components/export/index.d.ts +1 -1
  345. package/lib/engine-components/export/index.js +1 -1
  346. package/lib/engine-components/export/usdz/Extension.d.ts +10 -10
  347. package/lib/engine-components/export/usdz/Extension.js +1 -1
  348. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +114 -114
  349. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1211 -1211
  350. package/lib/engine-components/export/usdz/USDZExporter.d.ts +59 -59
  351. package/lib/engine-components/export/usdz/USDZExporter.js +450 -450
  352. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +69 -69
  353. package/lib/engine-components/export/usdz/extensions/Animation.js +650 -650
  354. package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
  355. package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
  356. package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +55 -55
  357. package/lib/engine-components/export/usdz/extensions/USDZText.js +246 -246
  358. package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
  359. package/lib/engine-components/export/usdz/extensions/USDZUI.js +100 -100
  360. package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
  361. package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
  362. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +9 -9
  363. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +52 -52
  364. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +22 -22
  365. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +134 -134
  366. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +126 -126
  367. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +824 -824
  368. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +133 -133
  369. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +464 -464
  370. package/lib/engine-components/export/usdz/index.d.ts +3 -3
  371. package/lib/engine-components/export/usdz/index.js +2 -2
  372. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -3
  373. package/lib/engine-components/export/usdz/utils/animationutils.js +85 -85
  374. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
  375. package/lib/engine-components/export/usdz/utils/quicklook.js +35 -35
  376. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -1
  377. package/lib/engine-components/export/usdz/utils/timeutils.js +14 -14
  378. package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +6 -6
  379. package/lib/engine-components/js-extensions/ExtensionUtils.js +65 -65
  380. package/lib/engine-components/js-extensions/Object3D.d.ts +2 -2
  381. package/lib/engine-components/js-extensions/Object3D.js +140 -140
  382. package/lib/engine-components/js-extensions/RGBAColor.d.ts +14 -14
  383. package/lib/engine-components/js-extensions/RGBAColor.js +49 -49
  384. package/lib/engine-components/js-extensions/index.d.ts +3 -3
  385. package/lib/engine-components/js-extensions/index.js +3 -3
  386. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -13
  387. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +45 -45
  388. package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -12
  389. package/lib/engine-components/postprocessing/Effects/Bloom.js +77 -77
  390. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -8
  391. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +38 -38
  392. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -12
  393. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +81 -81
  394. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -21
  395. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +97 -97
  396. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -7
  397. package/lib/engine-components/postprocessing/Effects/Pixelation.js +28 -28
  398. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +13 -13
  399. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +86 -86
  400. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +24 -24
  401. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +94 -94
  402. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +13 -13
  403. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +62 -62
  404. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -16
  405. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +51 -51
  406. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -11
  407. package/lib/engine-components/postprocessing/Effects/Vignette.js +56 -56
  408. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +33 -33
  409. package/lib/engine-components/postprocessing/PostProcessingEffect.js +126 -126
  410. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +22 -22
  411. package/lib/engine-components/postprocessing/PostProcessingHandler.js +201 -201
  412. package/lib/engine-components/postprocessing/Volume.d.ts +25 -25
  413. package/lib/engine-components/postprocessing/Volume.js +193 -193
  414. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +22 -22
  415. package/lib/engine-components/postprocessing/VolumeParameter.js +80 -80
  416. package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -7
  417. package/lib/engine-components/postprocessing/VolumeProfile.js +41 -41
  418. package/lib/engine-components/postprocessing/index.d.ts +4 -4
  419. package/lib/engine-components/postprocessing/index.js +4 -4
  420. package/lib/engine-components/timeline/PlayableDirector.d.ts +107 -107
  421. package/lib/engine-components/timeline/PlayableDirector.js +624 -624
  422. package/lib/engine-components/timeline/SignalAsset.d.ts +18 -18
  423. package/lib/engine-components/timeline/SignalAsset.js +124 -124
  424. package/lib/engine-components/timeline/TimelineModels.d.ts +88 -88
  425. package/lib/engine-components/timeline/TimelineModels.js +22 -22
  426. package/lib/engine-components/timeline/TimelineTracks.d.ts +90 -90
  427. package/lib/engine-components/timeline/TimelineTracks.js +825 -825
  428. package/lib/engine-components/timeline/index.d.ts +4 -4
  429. package/lib/engine-components/timeline/index.js +3 -3
  430. package/lib/engine-components/ui/BaseUIComponent.d.ts +31 -31
  431. package/lib/engine-components/ui/BaseUIComponent.js +161 -161
  432. package/lib/engine-components/ui/Button.d.ts +56 -56
  433. package/lib/engine-components/ui/Button.js +282 -282
  434. package/lib/engine-components/ui/Canvas.d.ts +67 -67
  435. package/lib/engine-components/ui/Canvas.js +382 -382
  436. package/lib/engine-components/ui/CanvasGroup.d.ts +15 -15
  437. package/lib/engine-components/ui/CanvasGroup.js +53 -53
  438. package/lib/engine-components/ui/EventSystem.d.ts +102 -102
  439. package/lib/engine-components/ui/EventSystem.js +641 -641
  440. package/lib/engine-components/ui/Graphic.d.ts +45 -45
  441. package/lib/engine-components/ui/Graphic.js +236 -236
  442. package/lib/engine-components/ui/Image.d.ts +27 -27
  443. package/lib/engine-components/ui/Image.js +107 -107
  444. package/lib/engine-components/ui/InputField.d.ts +34 -34
  445. package/lib/engine-components/ui/InputField.js +234 -234
  446. package/lib/engine-components/ui/Interfaces.d.ts +38 -38
  447. package/lib/engine-components/ui/Interfaces.js +12 -12
  448. package/lib/engine-components/ui/Layout.d.ts +72 -72
  449. package/lib/engine-components/ui/Layout.js +318 -318
  450. package/lib/engine-components/ui/Outline.d.ts +7 -7
  451. package/lib/engine-components/ui/Outline.js +20 -20
  452. package/lib/engine-components/ui/PointerEvents.d.ts +64 -64
  453. package/lib/engine-components/ui/PointerEvents.js +68 -68
  454. package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
  455. package/lib/engine-components/ui/RaycastUtils.js +67 -67
  456. package/lib/engine-components/ui/Raycaster.d.ts +18 -18
  457. package/lib/engine-components/ui/Raycaster.js +69 -69
  458. package/lib/engine-components/ui/RectTransform.d.ts +61 -61
  459. package/lib/engine-components/ui/RectTransform.js +343 -343
  460. package/lib/engine-components/ui/SpatialHtml.d.ts +6 -6
  461. package/lib/engine-components/ui/SpatialHtml.js +57 -57
  462. package/lib/engine-components/ui/Text.d.ts +74 -74
  463. package/lib/engine-components/ui/Text.js +534 -534
  464. package/lib/engine-components/ui/Utils.d.ts +23 -23
  465. package/lib/engine-components/ui/Utils.js +90 -90
  466. package/lib/engine-components/ui/index.d.ts +1 -1
  467. package/lib/engine-components/ui/index.js +1 -1
  468. package/lib/engine-components/utils/LookAt.d.ts +13 -13
  469. package/lib/engine-components/utils/LookAt.js +59 -59
  470. package/lib/engine-components/utils/OpenURL.d.ts +21 -21
  471. package/lib/engine-components/utils/OpenURL.js +124 -124
  472. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +19 -19
  473. package/lib/engine-components/webxr/WebARCameraBackground.js +193 -193
  474. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +38 -38
  475. package/lib/engine-components/webxr/WebARSessionRoot.js +407 -407
  476. package/lib/engine-components/webxr/WebXR.d.ts +110 -110
  477. package/lib/engine-components/webxr/WebXR.js +672 -672
  478. package/lib/engine-components/webxr/WebXRAvatar.d.ts +61 -61
  479. package/lib/engine-components/webxr/WebXRAvatar.js +289 -289
  480. package/lib/engine-components/webxr/WebXRController.d.ts +154 -154
  481. package/lib/engine-components/webxr/WebXRController.js +1028 -1028
  482. package/lib/engine-components/webxr/WebXRGrabRendering.d.ts +42 -42
  483. package/lib/engine-components/webxr/WebXRGrabRendering.js +137 -137
  484. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +49 -49
  485. package/lib/engine-components/webxr/WebXRImageTracking.js +336 -336
  486. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +49 -49
  487. package/lib/engine-components/webxr/WebXRPlaneTracking.js +372 -372
  488. package/lib/engine-components/webxr/WebXRRig.d.ts +4 -4
  489. package/lib/engine-components/webxr/WebXRRig.js +19 -19
  490. package/lib/engine-components/webxr/WebXRSync.d.ts +54 -54
  491. package/lib/engine-components/webxr/WebXRSync.js +410 -410
  492. package/lib/engine-components/webxr/index.d.ts +4 -4
  493. package/lib/engine-components/webxr/index.js +4 -4
  494. package/lib/engine-components-experimental/Presentation.d.ts +6 -6
  495. package/lib/engine-components-experimental/Presentation.js +9 -9
  496. package/lib/engine-components-experimental/api.d.ts +1 -1
  497. package/lib/engine-components-experimental/api.js +1 -1
  498. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +50 -50
  499. package/lib/engine-components-experimental/networking/PlayerSync.js +200 -200
  500. package/lib/engine-schemes/api.d.ts +1 -1
  501. package/lib/engine-schemes/api.js +1 -1
  502. package/lib/engine-schemes/schemes.d.ts +7 -7
  503. package/lib/engine-schemes/schemes.js +19 -19
  504. package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
  505. package/lib/engine-schemes/synced-camera-model.js +67 -67
  506. package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
  507. package/lib/engine-schemes/synced-transform-model.js +66 -66
  508. package/lib/engine-schemes/transform.d.ts +12 -12
  509. package/lib/engine-schemes/transform.js +39 -39
  510. package/lib/engine-schemes/vec3.d.ts +11 -11
  511. package/lib/engine-schemes/vec3.js +29 -29
  512. package/lib/engine-schemes/vec4.d.ts +12 -12
  513. package/lib/engine-schemes/vec4.js +33 -33
  514. package/lib/engine-schemes/vr-user-state-buffer.d.ts +36 -36
  515. package/lib/engine-schemes/vr-user-state-buffer.js +103 -103
  516. package/lib/include/three/ARButton.d.ts +3 -3
  517. package/lib/include/three/ARButton.js +151 -151
  518. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
  519. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
  520. package/lib/include/three/VRButton.d.ts +5 -5
  521. package/lib/include/three/VRButton.js +118 -118
  522. package/lib/needle-engine.d.ts +6 -6
  523. package/lib/needle-engine.js +49 -49
  524. package/package.json +1 -1
  525. package/plugins/common/config.cjs +14 -14
  526. package/plugins/common/config.js +19 -19
  527. package/plugins/common/generator.js +10 -10
  528. package/plugins/common/license.cjs +30 -30
  529. package/plugins/common/version.js +11 -11
  530. package/plugins/next/license.cjs +4 -4
  531. package/plugins/next/next.js +70 -70
  532. package/plugins/types/index.d.ts +1 -1
  533. package/plugins/types/needleConfig.d.ts +21 -21
  534. package/plugins/types/userconfig.d.ts +42 -42
  535. package/plugins/vite/alias.js +70 -70
  536. package/plugins/vite/build.js +19 -19
  537. package/plugins/vite/config.js +73 -73
  538. package/plugins/vite/copyfiles.js +134 -134
  539. package/plugins/vite/defines.js +45 -45
  540. package/plugins/vite/dependency-watcher.js +224 -224
  541. package/plugins/vite/drop-client.js +76 -76
  542. package/plugins/vite/drop.js +82 -82
  543. package/plugins/vite/editor-connection.js +121 -121
  544. package/plugins/vite/facebook-instant-games.js +99 -99
  545. package/plugins/vite/gzip.js +5 -5
  546. package/plugins/vite/imports-logger.js +143 -143
  547. package/plugins/vite/index.js +81 -81
  548. package/plugins/vite/license.js +42 -42
  549. package/plugins/vite/meta.js +149 -149
  550. package/plugins/vite/peer.js +31 -31
  551. package/plugins/vite/poster-client.js +59 -59
  552. package/plugins/vite/poster.js +73 -73
  553. package/plugins/vite/reload-client.js +15 -15
  554. package/plugins/vite/reload.js +363 -363
  555. package/plugins/vite/transform-codegen.js +55 -55
  556. package/plugins/vite/vite-4.4-hack.js +31 -31
  557. package/src/engine/api.ts +54 -54
  558. package/src/engine/assets/index.ts +4 -4
  559. package/src/engine/codegen/register_types.ts +441 -441
  560. package/src/engine/debug/debug.ts +29 -29
  561. package/src/engine/debug/debug_console.ts +213 -213
  562. package/src/engine/debug/debug_overlay.ts +283 -283
  563. package/src/engine/engine.ts +13 -13
  564. package/src/engine/engine_addressables.ts +494 -494
  565. package/src/engine/engine_application.ts +53 -53
  566. package/src/engine/engine_assetdatabase.ts +383 -383
  567. package/src/engine/engine_camera.ts +32 -32
  568. package/src/engine/engine_components.ts +266 -266
  569. package/src/engine/engine_components_internal.ts +42 -42
  570. package/src/engine/engine_constants.ts +42 -42
  571. package/src/engine/engine_context.ts +1386 -1386
  572. package/src/engine/engine_context_registry.ts +103 -103
  573. package/src/engine/engine_coroutine.ts +24 -24
  574. package/src/engine/engine_create_objects.ts +39 -39
  575. package/src/engine/engine_default_parameters.ts +3 -3
  576. package/src/engine/engine_editor-sync.ts +29 -29
  577. package/src/engine/engine_element.ts +592 -592
  578. package/src/engine/engine_element_attributes.ts +61 -61
  579. package/src/engine/engine_element_extras.ts +16 -16
  580. package/src/engine/engine_element_loading.ts +341 -341
  581. package/src/engine/engine_element_overlay.ts +160 -160
  582. package/src/engine/engine_fileloader.js +8 -8
  583. package/src/engine/engine_gameobject.ts +621 -621
  584. package/src/engine/engine_generic_utils.js +13 -13
  585. package/src/engine/engine_gizmos.ts +321 -321
  586. package/src/engine/engine_gltf.ts +30 -30
  587. package/src/engine/engine_gltf_builtin_components.ts +350 -350
  588. package/src/engine/engine_hot_reload.ts +196 -196
  589. package/src/engine/engine_input.ts +879 -879
  590. package/src/engine/engine_input_utils.ts +23 -23
  591. package/src/engine/engine_instancing.ts +42 -42
  592. package/src/engine/engine_license.ts +413 -413
  593. package/src/engine/engine_lifecycle_api.ts +29 -29
  594. package/src/engine/engine_lifecycle_functions_internal.ts +36 -36
  595. package/src/engine/engine_lightdata.ts +113 -113
  596. package/src/engine/engine_loaders.ts +77 -77
  597. package/src/engine/engine_mainloop_utils.ts +431 -431
  598. package/src/engine/engine_math.ts +174 -174
  599. package/src/engine/engine_networking.ts +742 -742
  600. package/src/engine/engine_networking_auto.ts +373 -373
  601. package/src/engine/engine_networking_files.ts +206 -206
  602. package/src/engine/engine_networking_files_default_components.ts +54 -54
  603. package/src/engine/engine_networking_instantiate.ts +362 -362
  604. package/src/engine/engine_networking_peer.ts +158 -158
  605. package/src/engine/engine_networking_streams.ts +489 -489
  606. package/src/engine/engine_networking_types.ts +18 -18
  607. package/src/engine/engine_networking_utils.ts +23 -23
  608. package/src/engine/engine_networking_websocket.ts +2 -2
  609. package/src/engine/engine_patcher.ts +199 -199
  610. package/src/engine/engine_physics.ts +287 -287
  611. package/src/engine/engine_physics.types.ts +43 -43
  612. package/src/engine/engine_physics_rapier.ts +1385 -1385
  613. package/src/engine/engine_playerview.ts +79 -79
  614. package/src/engine/engine_scenelighting.ts +313 -313
  615. package/src/engine/engine_scenetools.ts +242 -242
  616. package/src/engine/engine_serialization.ts +6 -6
  617. package/src/engine/engine_serialization_builtin_serializer.ts +415 -415
  618. package/src/engine/engine_serialization_core.ts +680 -680
  619. package/src/engine/engine_serialization_decorator.ts +68 -68
  620. package/src/engine/engine_setup.ts +1 -1
  621. package/src/engine/engine_shaders.ts +242 -242
  622. package/src/engine/engine_shims.ts +28 -28
  623. package/src/engine/engine_texture.ts +70 -70
  624. package/src/engine/engine_three_utils.ts +382 -382
  625. package/src/engine/engine_time.ts +55 -55
  626. package/src/engine/engine_types.ts +489 -489
  627. package/src/engine/engine_typestore.ts +41 -41
  628. package/src/engine/engine_util_decorator.ts +134 -134
  629. package/src/engine/engine_utils.ts +605 -605
  630. package/src/engine/engine_utils_screenshot.ts +84 -84
  631. package/src/engine/engine_web_api.ts +119 -119
  632. package/src/engine/extensions/EXT_texture_exr.ts +49 -49
  633. package/src/engine/extensions/NEEDLE_animator_controller_model.ts +193 -193
  634. package/src/engine/extensions/NEEDLE_components.ts +250 -250
  635. package/src/engine/extensions/NEEDLE_gameobject_data.ts +82 -82
  636. package/src/engine/extensions/NEEDLE_lighting_settings.ts +210 -210
  637. package/src/engine/extensions/NEEDLE_lightmaps.ts +130 -130
  638. package/src/engine/extensions/NEEDLE_persistent_assets.ts +75 -75
  639. package/src/engine/extensions/NEEDLE_progressive.ts +412 -412
  640. package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
  641. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +618 -618
  642. package/src/engine/extensions/extension_resolver.ts +4 -4
  643. package/src/engine/extensions/extension_utils.ts +149 -149
  644. package/src/engine/extensions/extensions.ts +118 -118
  645. package/src/engine/extensions/index.ts +4 -4
  646. package/src/engine/extensions/usage_tracker.ts +95 -95
  647. package/src/engine/js-extensions/Camera.ts +34 -34
  648. package/src/engine/js-extensions/Layers.ts +19 -19
  649. package/src/engine/js-extensions/index.ts +1 -1
  650. package/src/engine/shaders/shaderData.ts +67 -67
  651. package/src/engine/tests/test_utils.ts +63 -63
  652. package/src/engine-components/AlignmentConstraint.ts +35 -35
  653. package/src/engine-components/Animation.ts +345 -345
  654. package/src/engine-components/AnimationCurve.ts +83 -83
  655. package/src/engine-components/AnimationUtils.ts +117 -117
  656. package/src/engine-components/Animator.ts +243 -243
  657. package/src/engine-components/AnimatorController.ts +1020 -1020
  658. package/src/engine-components/AudioListener.ts +32 -32
  659. package/src/engine-components/AudioSource.ts +419 -419
  660. package/src/engine-components/AvatarLoader.ts +204 -204
  661. package/src/engine-components/AxesHelper.ts +33 -33
  662. package/src/engine-components/BasicIKConstraint.ts +53 -53
  663. package/src/engine-components/BoxCollider.ts +1 -1
  664. package/src/engine-components/BoxHelperComponent.ts +100 -100
  665. package/src/engine-components/Camera.ts +454 -454
  666. package/src/engine-components/CameraUtils.ts +89 -89
  667. package/src/engine-components/CharacterController.ts +243 -243
  668. package/src/engine-components/Collider.ts +160 -160
  669. package/src/engine-components/Component.ts +670 -670
  670. package/src/engine-components/ContactShadows.ts +265 -265
  671. package/src/engine-components/DeleteBox.ts +35 -35
  672. package/src/engine-components/DeviceFlag.ts +42 -42
  673. package/src/engine-components/DragControls.ts +574 -574
  674. package/src/engine-components/DropListener.ts +112 -112
  675. package/src/engine-components/Duplicatable.ts +146 -146
  676. package/src/engine-components/EventList.ts +125 -125
  677. package/src/engine-components/EventTrigger.ts +47 -47
  678. package/src/engine-components/EventType.ts +87 -87
  679. package/src/engine-components/FlyControls.ts +31 -31
  680. package/src/engine-components/Fog.ts +59 -59
  681. package/src/engine-components/Gizmos.ts +52 -52
  682. package/src/engine-components/GridHelper.ts +40 -40
  683. package/src/engine-components/GroundProjection.ts +97 -97
  684. package/src/engine-components/Interactable.ts +18 -18
  685. package/src/engine-components/Joints.ts +51 -51
  686. package/src/engine-components/LODGroup.ts +145 -145
  687. package/src/engine-components/Light.ts +493 -493
  688. package/src/engine-components/LookAtConstraint.ts +11 -11
  689. package/src/engine-components/NestedGltf.ts +70 -70
  690. package/src/engine-components/Networking.ts +72 -72
  691. package/src/engine-components/OffsetConstraint.ts +59 -59
  692. package/src/engine-components/OrbitControls.ts +653 -653
  693. package/src/engine-components/ParticleSystem.ts +1192 -1192
  694. package/src/engine-components/ParticleSystemModules.ts +1481 -1481
  695. package/src/engine-components/ParticleSystemSubEmitter.ts +110 -110
  696. package/src/engine-components/PlayerColor.ts +93 -93
  697. package/src/engine-components/ReflectionProbe.ts +192 -192
  698. package/src/engine-components/Renderer.ts +1125 -1125
  699. package/src/engine-components/RendererLightmap.ts +145 -145
  700. package/src/engine-components/RigidBody.ts +453 -453
  701. package/src/engine-components/SceneSwitcher.ts +594 -594
  702. package/src/engine-components/ScreenCapture.ts +437 -437
  703. package/src/engine-components/ShadowCatcher.ts +149 -149
  704. package/src/engine-components/Skybox.ts +281 -281
  705. package/src/engine-components/SmoothFollow.ts +57 -57
  706. package/src/engine-components/SpatialTrigger.ts +142 -142
  707. package/src/engine-components/SpectatorCamera.ts +675 -675
  708. package/src/engine-components/SphereCollider.ts +1 -1
  709. package/src/engine-components/SpriteRenderer.ts +244 -244
  710. package/src/engine-components/SyncedCamera.ts +208 -208
  711. package/src/engine-components/SyncedRoom.ts +166 -166
  712. package/src/engine-components/SyncedTransform.ts +336 -336
  713. package/src/engine-components/TestRunner.ts +114 -114
  714. package/src/engine-components/TransformGizmo.ts +157 -157
  715. package/src/engine-components/VideoPlayer.ts +831 -831
  716. package/src/engine-components/Voip.ts +214 -214
  717. package/src/engine-components/XRFlag.ts +138 -138
  718. package/src/engine-components/api.ts +22 -22
  719. package/src/engine-components/avatar/AvatarBlink_Simple.ts +67 -67
  720. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +68 -68
  721. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +136 -136
  722. package/src/engine-components/avatar/Avatar_MouthShapes.ts +81 -81
  723. package/src/engine-components/avatar/Avatar_MustacheShake.ts +28 -28
  724. package/src/engine-components/codegen/components.ts +216 -216
  725. package/src/engine-components/debug/LogStats.ts +21 -21
  726. package/src/engine-components/export/gltf/GltfExport.ts +231 -231
  727. package/src/engine-components/export/usdz/Extension.ts +11 -11
  728. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1773 -1773
  729. package/src/engine-components/export/usdz/USDZExporter.ts +477 -477
  730. package/src/engine-components/export/usdz/extensions/Animation.ts +774 -774
  731. package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
  732. package/src/engine-components/export/usdz/extensions/USDZText.ts +287 -287
  733. package/src/engine-components/export/usdz/extensions/USDZUI.ts +119 -119
  734. package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +98 -98
  735. package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +67 -67
  736. package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +202 -202
  737. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +963 -963
  738. package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +517 -517
  739. package/src/engine-components/export/usdz/index.ts +2 -2
  740. package/src/engine-components/export/usdz/utils/animationutils.ts +100 -100
  741. package/src/engine-components/export/usdz/utils/quicklook.ts +42 -42
  742. package/src/engine-components/export/usdz/utils/timeutils.ts +19 -19
  743. package/src/engine-components/js-extensions/ExtensionUtils.ts +81 -81
  744. package/src/engine-components/js-extensions/Object3D.ts +181 -181
  745. package/src/engine-components/js-extensions/RGBAColor.ts +54 -54
  746. package/src/engine-components/js-extensions/Vector.ts +16 -16
  747. package/src/engine-components/js-extensions/index.ts +2 -2
  748. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +51 -51
  749. package/src/engine-components/postprocessing/Effects/Bloom.ts +76 -76
  750. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +35 -35
  751. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +96 -96
  752. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +93 -93
  753. package/src/engine-components/postprocessing/Effects/Pixelation.ts +26 -26
  754. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +84 -84
  755. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +98 -98
  756. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +55 -55
  757. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +54 -54
  758. package/src/engine-components/postprocessing/Effects/Vignette.ts +54 -54
  759. package/src/engine-components/postprocessing/PostProcessingEffect.ts +148 -148
  760. package/src/engine-components/postprocessing/PostProcessingHandler.ts +232 -232
  761. package/src/engine-components/postprocessing/Volume.ts +216 -216
  762. package/src/engine-components/postprocessing/VolumeParameter.ts +92 -92
  763. package/src/engine-components/postprocessing/VolumeProfile.ts +40 -40
  764. package/src/engine-components/postprocessing/index.ts +3 -3
  765. package/src/engine-components/timeline/PlayableDirector.ts +666 -666
  766. package/src/engine-components/timeline/SignalAsset.ts +138 -138
  767. package/src/engine-components/timeline/TimelineModels.ts +93 -93
  768. package/src/engine-components/timeline/TimelineTracks.ts +906 -906
  769. package/src/engine-components/timeline/index.ts +3 -3
  770. package/src/engine-components/ui/BaseUIComponent.ts +195 -195
  771. package/src/engine-components/ui/Button.ts +283 -283
  772. package/src/engine-components/ui/Canvas.ts +390 -390
  773. package/src/engine-components/ui/CanvasGroup.ts +49 -49
  774. package/src/engine-components/ui/EventSystem.ts +736 -736
  775. package/src/engine-components/ui/Graphic.ts +255 -255
  776. package/src/engine-components/ui/Image.ts +102 -102
  777. package/src/engine-components/ui/InputField.ts +290 -290
  778. package/src/engine-components/ui/Interfaces.ts +57 -57
  779. package/src/engine-components/ui/Layout.ts +322 -322
  780. package/src/engine-components/ui/Outline.ts +12 -12
  781. package/src/engine-components/ui/PointerEvents.ts +118 -118
  782. package/src/engine-components/ui/RaycastUtils.ts +68 -68
  783. package/src/engine-components/ui/Raycaster.ts +73 -73
  784. package/src/engine-components/ui/RectTransform.ts +364 -364
  785. package/src/engine-components/ui/SpatialHtml.ts +63 -63
  786. package/src/engine-components/ui/Text.ts +572 -572
  787. package/src/engine-components/ui/Utils.ts +110 -110
  788. package/src/engine-components/utils/LookAt.ts +65 -65
  789. package/src/engine-components/utils/OpenURL.ts +118 -118
  790. package/src/engine-components/webxr/WebARCameraBackground.ts +224 -224
  791. package/src/engine-components/webxr/WebARSessionRoot.ts +446 -446
  792. package/src/engine-components/webxr/WebXR.ts +761 -761
  793. package/src/engine-components/webxr/WebXRAvatar.ts +356 -356
  794. package/src/engine-components/webxr/WebXRController.ts +1168 -1168
  795. package/src/engine-components/webxr/WebXRGrabRendering.ts +150 -150
  796. package/src/engine-components/webxr/WebXRImageTracking.ts +371 -371
  797. package/src/engine-components/webxr/WebXRPlaneTracking.ts +429 -429
  798. package/src/engine-components/webxr/WebXRRig.ts +21 -21
  799. package/src/engine-components/webxr/WebXRSync.ts +463 -463
  800. package/src/engine-components/webxr/index.ts +3 -3
  801. package/src/engine-components-experimental/Presentation.ts +12 -12
  802. package/src/engine-components-experimental/networking/PlayerSync.ts +217 -217
  803. package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
  804. package/src/engine-schemes/COMPILE_TS.bat +11 -11
  805. package/src/engine-schemes/schemes.ts +27 -27
  806. package/src/engine-schemes/synced-camera-model.ts +92 -92
  807. package/src/engine-schemes/synced-transform-model.ts +90 -90
  808. package/src/engine-schemes/syncedCamera.fbs +10 -10
  809. package/src/engine-schemes/transform.ts +50 -50
  810. package/src/engine-schemes/transforms.fbs +25 -25
  811. package/src/engine-schemes/vec.fbs +19 -19
  812. package/src/engine-schemes/vec2.ts +33 -33
  813. package/src/engine-schemes/vec3.ts +38 -38
  814. package/src/engine-schemes/vec4.ts +43 -43
  815. package/src/engine-schemes/vr-user-state-buffer.ts +138 -138
  816. package/src/engine-schemes/vrUserStateBuffer.fbs +16 -16
  817. package/src/include/draco/draco_decoder.js +34 -34
  818. package/src/include/draco/draco_wasm_wrapper.js +117 -117
  819. package/src/include/ktx2/basis_transcoder.js +21 -21
  820. package/src/include/needle/arial-msdf.json +1471 -1471
  821. package/src/include/three/ARButton.js +231 -231
  822. package/src/include/three/DragControls.js +231 -231
  823. package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
  824. package/src/include/three/VRButton.js +194 -194
  825. package/src/needle-engine.ts +55 -55
  826. package/src/engine/dist/api.js +0 -73
  827. package/src/engine/dist/api.js.meta +0 -7
  828. package/src/engine/dist/engine_networking_streams.js +0 -474
  829. package/src/engine/dist/engine_networking_streams.js.meta +0 -7
  830. package/src/engine-schemes/dist/api.js +0 -17
  831. package/src/engine-schemes/dist/api.js.meta +0 -7
  832. package/src/engine-schemes/dist/schemes.js +0 -25
  833. package/src/engine-schemes/dist/schemes.js.meta +0 -7
  834. package/src/engine-schemes/dist/synced-camera-model.js +0 -74
  835. package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
  836. package/src/engine-schemes/dist/synced-transform-model.js +0 -73
  837. package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
  838. package/src/engine-schemes/dist/transform.js +0 -46
  839. package/src/engine-schemes/dist/transform.js.meta +0 -7
  840. package/src/engine-schemes/dist/vec2.js +0 -32
  841. package/src/engine-schemes/dist/vec2.js.meta +0 -7
  842. package/src/engine-schemes/dist/vec3.js +0 -36
  843. package/src/engine-schemes/dist/vec3.js.meta +0 -7
  844. package/src/engine-schemes/dist/vec4.js +0 -40
  845. package/src/engine-schemes/dist/vec4.js.meta +0 -7
  846. package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
  847. package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
  848. package/src/engine-schemes/flatc.exe +0 -0
@@ -1,594 +1,594 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { Behaviour, GameObject } from "./Component.js";
8
- import { Camera } from "./Camera.js";
9
- import * as THREE from "three";
10
- import { OrbitControls } from "./OrbitControls.js";
11
- import { WebXR, WebXREvent } from "./webxr/WebXR.js";
12
- import { AvatarMarker } from "./webxr/WebXRAvatar.js";
13
- import { XRStateFlag } from "./XRFlag.js";
14
- import { SmoothFollow } from "./SmoothFollow.js";
15
- import { InputEvents } from "../engine/engine_input.js";
16
- import { getParam } from "../engine/engine_utils.js";
17
- import { ViewDevice } from "../engine/engine_playerview.js";
18
- import { RaycastOptions } from "../engine/engine_physics.js";
19
- import { RoomEvents } from "../engine/engine_networking.js";
20
- import { serializable } from "../engine/engine_serialization.js";
21
- export var SpectatorMode;
22
- (function (SpectatorMode) {
23
- SpectatorMode[SpectatorMode["FirstPerson"] = 0] = "FirstPerson";
24
- SpectatorMode[SpectatorMode["ThirdPerson"] = 1] = "ThirdPerson";
25
- })(SpectatorMode || (SpectatorMode = {}));
26
- const debug = getParam("debugspectator");
27
- export class SpectatorCamera extends Behaviour {
28
- cam = null;
29
- /** when enabled pressing F will send a request to all connected users to follow me, ESC to stop */
30
- useKeys = true;
31
- _mode = SpectatorMode.FirstPerson;
32
- get mode() { return this._mode; }
33
- set mode(val) {
34
- this._mode = val;
35
- }
36
- /** if this user is currently spectating someone else */
37
- get isSpectating() {
38
- return this._handler?.currentTarget !== undefined;
39
- }
40
- isSpectatingUser(userId) {
41
- return this.target?.userId === userId;
42
- }
43
- isFollowedBy(userId) {
44
- return this.followers?.includes(userId);
45
- }
46
- /** list of other users that are following me */
47
- get followers() {
48
- return this._networking.followers;
49
- }
50
- stopSpectating() {
51
- if (this.context.isInXR) {
52
- this.followSelf();
53
- return;
54
- }
55
- this.target = undefined;
56
- }
57
- get localId() {
58
- return this.context.connection.connectionId ?? "local";
59
- }
60
- /** player view to follow */
61
- set target(target) {
62
- if (this._handler) {
63
- // if (this.target?.userId) {
64
- // const isFollowedByThisUser = this.followers.includes(this.target.userId);
65
- // if (isFollowedByThisUser) {
66
- // console.warn("Can not follow follower");
67
- // target = undefined;
68
- // }
69
- // }
70
- const prev = this._handler.currentTarget?.userId;
71
- const self = this.context.players.getPlayerView(this.localId);
72
- // if user is in XR and sets target to self disable it
73
- if (target === undefined || (this.context.isInXR === false && self?.currentObject === target.currentObject)) {
74
- if (this._handler.currentTarget !== undefined) {
75
- this._handler.disable();
76
- GameObject.setActive(this.gameObject, false);
77
- if (this.orbit)
78
- this.orbit.enabled = true;
79
- this._networking.onSpectatedObjectChanged(target, prev);
80
- }
81
- }
82
- else if (this._handler.currentTarget !== target) {
83
- this._handler.set(target);
84
- GameObject.setActive(this.gameObject, true);
85
- if (this.orbit)
86
- this.orbit.enabled = false;
87
- this._networking.onSpectatedObjectChanged(target, prev);
88
- }
89
- }
90
- }
91
- get target() {
92
- return this._handler?.currentTarget;
93
- }
94
- requestAllFollowMe() {
95
- this._networking.onRequestFollowMe();
96
- }
97
- get isSpectatingSelf() {
98
- return this.isSpectating && this.target?.currentObject === this.context.players.getPlayerView(this.localId)?.currentObject;
99
- }
100
- // private currentViewport : THREE.Vector4 = new THREE.Vector4();
101
- // private currentScissor : THREE.Vector4 = new THREE.Vector4();
102
- // private currentScissorTest : boolean = false;
103
- orbit = null;
104
- _handler;
105
- eventSub_WebXRRequestStartEvent = null;
106
- eventSub_WebXRStartEvent = null;
107
- eventSub_WebXREndEvent = null;
108
- _debug;
109
- _networking;
110
- awake() {
111
- this._debug = new SpectatorSelectionController(this.context, this);
112
- this._networking = new SpectatorCamNetworking(this.context, this);
113
- this._networking.awake();
114
- GameObject.setActive(this.gameObject, false);
115
- this.cam = GameObject.getComponent(this.gameObject, Camera);
116
- if (!this.cam) {
117
- console.warn("SpectatorCamera: Spectator camera needs camera component on the same object.", this);
118
- return;
119
- }
120
- if (!this._handler && this.cam)
121
- this._handler = new SpectatorHandler(this.context, this.cam, this);
122
- this.eventSub_WebXRRequestStartEvent = this.onXRSessionRequestStart.bind(this);
123
- this.eventSub_WebXRStartEvent = this.onXRSessionStart.bind(this);
124
- this.eventSub_WebXREndEvent = this.onXRSessionEnded.bind(this);
125
- WebXR.addEventListener(WebXREvent.RequestVRSession, this.eventSub_WebXRRequestStartEvent);
126
- WebXR.addEventListener(WebXREvent.XRStarted, this.eventSub_WebXRStartEvent);
127
- WebXR.addEventListener(WebXREvent.XRStopped, this.eventSub_WebXREndEvent);
128
- this.orbit = GameObject.getComponent(this.context.mainCamera, OrbitControls);
129
- }
130
- onDestroy() {
131
- this.stopSpectating();
132
- WebXR.removeEventListener(WebXREvent.RequestVRSession, this.eventSub_WebXRStartEvent);
133
- WebXR.removeEventListener(WebXREvent.XRStarted, this.eventSub_WebXRStartEvent);
134
- WebXR.removeEventListener(WebXREvent.XRStopped, this.eventSub_WebXREndEvent);
135
- this._handler?.destroy();
136
- this._networking?.destroy();
137
- }
138
- isSupportedPlatform() {
139
- const ua = window.navigator.userAgent;
140
- const standalone = /Windows|MacOS/.test(ua);
141
- const isHololens = /Windows NT/.test(ua) && /Edg/.test(ua) && !/Win64/.test(ua);
142
- return standalone && !isHololens;
143
- }
144
- onXRSessionRequestStart(_evt) {
145
- if (!this.isSupportedPlatform())
146
- return;
147
- GameObject.setActive(this.gameObject, true);
148
- }
149
- onXRSessionStart(_evt) {
150
- if (!this.isSupportedPlatform())
151
- return;
152
- if (debug)
153
- console.log(this.context.mainCamera);
154
- if (this.context.mainCamera) {
155
- this.followSelf();
156
- }
157
- }
158
- onXRSessionEnded(_evt) {
159
- this.context.removeCamera(this.cam);
160
- GameObject.setActive(this.gameObject, false);
161
- if (this.orbit)
162
- this.orbit.enabled = true;
163
- this._handler?.set(undefined);
164
- this._handler?.disable();
165
- if (this.isSpectatingSelf)
166
- this.stopSpectating();
167
- }
168
- followSelf() {
169
- this.target = this.context.players.getPlayerView(this.context.connection.connectionId);
170
- if (!this.target) {
171
- this.context.players.setPlayerView(this.localId, this.context.mainCamera, ViewDevice.Headset);
172
- this.target = this.context.players.getPlayerView(this.localId);
173
- }
174
- if (debug)
175
- console.log("Follow self", this.target);
176
- }
177
- // TODO: only show Spectator cam for DesktopVR;
178
- // don't show for AR, don't show on Quest
179
- // TODO: properly align cameras on enter/exit VR, seems currently spectator cam breaks alignment
180
- onAfterRender() {
181
- if (!this.cam)
182
- return;
183
- const renderer = this.context.renderer;
184
- const xrWasEnabled = renderer.xr.enabled;
185
- if (!renderer.xr.isPresenting && !this._handler?.currentTarget)
186
- return;
187
- this._handler?.update(this._mode);
188
- // remember XR render target so we can restore later
189
- const previousRenderTarget = renderer.getRenderTarget();
190
- let oldFramebuffer = null;
191
- // seems that in some cases, renderer.getRenderTarget returns null
192
- // even when we're rendering to a headset.
193
- if (!previousRenderTarget) {
194
- if (!renderer.state.bindFramebuffer || !renderer.state.bindXRFramebuffer)
195
- return;
196
- oldFramebuffer = renderer["_framebuffer"];
197
- renderer.state.bindXRFramebuffer(null);
198
- }
199
- this.setAvatarFlagsBeforeRender();
200
- const mainCam = this.context.mainCameraComponent;
201
- // these should not be needed if we don't override viewport/scissor
202
- // renderer.getViewport(this.currentViewport);
203
- // renderer.getScissor(this.currentScissor);
204
- // this.currentScissorTest = renderer.getScissorTest();
205
- // for scissor rendering (e.g. just a part of the screen / viewport, multiplayer split view)
206
- // let left = 0;
207
- // let bottom = 100;
208
- // let width = 300;
209
- // let height = 300;
210
- // renderer.setViewport(left, bottom, width, height);
211
- // renderer.setScissor(left, bottom, width, height);
212
- // renderer.setScissorTest(true);
213
- if (mainCam) {
214
- const backgroundColor = mainCam.backgroundColor;
215
- if (backgroundColor)
216
- renderer.setClearColor(backgroundColor, backgroundColor.alpha);
217
- this.cam.backgroundColor = backgroundColor;
218
- this.cam.clearFlags = mainCam.clearFlags;
219
- this.cam.nearClipPlane = mainCam.nearClipPlane;
220
- this.cam.farClipPlane = mainCam.farClipPlane;
221
- }
222
- else
223
- renderer.setClearColor(new THREE.Color(1, 1, 1));
224
- renderer.setRenderTarget(null); // null: direct to Canvas
225
- renderer.xr.enabled = false;
226
- const cam = this.cam?.cam;
227
- this.context.updateAspect(cam);
228
- const wasPresenting = renderer.xr.isPresenting;
229
- renderer.xr.isPresenting = false;
230
- renderer.setSize(this.context.domWidth, this.context.domHeight);
231
- renderer.render(this.context.scene, cam);
232
- renderer.xr.isPresenting = wasPresenting;
233
- // restore previous settings so we can continue to render XR
234
- renderer.xr.enabled = xrWasEnabled;
235
- //renderer.setViewport(this.currentViewport);
236
- //renderer.setScissor(this.currentScissor);
237
- //renderer.setScissorTest(this.currentScissorTest);
238
- if (previousRenderTarget)
239
- renderer.setRenderTarget(previousRenderTarget);
240
- else
241
- renderer.state.bindXRFramebuffer(oldFramebuffer);
242
- this.resetAvatarFlags();
243
- }
244
- setAvatarFlagsBeforeRender() {
245
- const isFirstPersonMode = this._mode === SpectatorMode.FirstPerson;
246
- for (const av of AvatarMarker.instances) {
247
- if (av.avatar && "isLocalAvatar" in av.avatar) {
248
- let mask = XRStateFlag.All;
249
- if (this.isSpectatingSelf)
250
- mask = isFirstPersonMode && av.avatar.isLocalAvatar ? XRStateFlag.FirstPerson : XRStateFlag.ThirdPerson;
251
- const flags = av.avatar.flags;
252
- if (!flags)
253
- continue;
254
- for (const flag of flags) {
255
- flag.UpdateVisible(mask);
256
- }
257
- }
258
- }
259
- }
260
- resetAvatarFlags() {
261
- for (const av of AvatarMarker.instances) {
262
- if (av.avatar && "flags" in av.avatar) {
263
- const flags = av.avatar.flags;
264
- if (!flags)
265
- continue;
266
- for (const flag of flags) {
267
- if (av.avatar?.isLocalAvatar) {
268
- flag.UpdateVisible(XRStateFlag.FirstPerson);
269
- }
270
- else {
271
- flag.UpdateVisible(XRStateFlag.ThirdPerson);
272
- }
273
- }
274
- }
275
- }
276
- }
277
- }
278
- __decorate([
279
- serializable()
280
- ], SpectatorCamera.prototype, "useKeys", void 0);
281
- class SpectatorHandler {
282
- context;
283
- cam;
284
- spectator;
285
- follow;
286
- target;
287
- view;
288
- currentObject;
289
- get currentTarget() {
290
- return this.view;
291
- }
292
- constructor(context, cam, spectator) {
293
- this.context = context;
294
- this.cam = cam;
295
- this.spectator = spectator;
296
- }
297
- set(view) {
298
- const followObject = view?.currentObject;
299
- if (!followObject) {
300
- this.spectator.stopSpectating();
301
- return;
302
- }
303
- if (followObject === this.currentObject)
304
- return;
305
- this.currentObject = followObject;
306
- this.view = view;
307
- if (!this.follow)
308
- this.follow = GameObject.addNewComponent(this.cam.gameObject, SmoothFollow);
309
- if (!this.target)
310
- this.target = new THREE.Object3D();
311
- followObject.add(this.target);
312
- this.follow.enabled = true;
313
- this.follow.target = this.target;
314
- // this.context.setCurrentCamera(this.cam);
315
- if (debug)
316
- console.log("FOLLOW", followObject);
317
- if (!this.context.isInXR) {
318
- this.context.setCurrentCamera(this.cam);
319
- }
320
- else
321
- this.context.removeCamera(this.cam);
322
- }
323
- disable() {
324
- if (debug)
325
- console.log("STOP FOLLOW", this.currentObject);
326
- this.view = undefined;
327
- this.currentObject = undefined;
328
- this.context.removeCamera(this.cam);
329
- if (this.follow)
330
- this.follow.enabled = false;
331
- }
332
- destroy() {
333
- this.target?.removeFromParent();
334
- if (this.follow)
335
- GameObject.destroy(this.follow);
336
- }
337
- update(mode) {
338
- if (this.currentTarget?.isConnected === false || this.currentTarget?.removed === true) {
339
- if (debug)
340
- console.log("Target disconnected or timeout", this.currentTarget);
341
- this.spectator.stopSpectating();
342
- return;
343
- }
344
- if (this.currentTarget && this.currentTarget?.currentObject !== this.currentObject) {
345
- if (debug)
346
- console.log("Target changed", this.currentObject, "to", this.currentTarget.currentObject);
347
- this.set(this.currentTarget);
348
- }
349
- const perspectiveCamera = this.context.mainCamera;
350
- if (perspectiveCamera) {
351
- if (this.cam.cam.near !== perspectiveCamera.near || this.cam.cam.far !== perspectiveCamera.far) {
352
- this.cam.cam.near = perspectiveCamera.near;
353
- this.cam.cam.far = perspectiveCamera.far;
354
- this.cam.cam.updateProjectionMatrix();
355
- }
356
- }
357
- const target = this.follow?.target;
358
- if (!target || !this.follow)
359
- return;
360
- switch (mode) {
361
- case SpectatorMode.FirstPerson:
362
- if (this.view?.viewDevice !== ViewDevice.Browser) {
363
- // soft follow for AR and VR
364
- this.follow.followFactor = 5;
365
- this.follow.rotateFactor = 5;
366
- }
367
- else {
368
- // snappy follow for desktop
369
- this.follow.followFactor = 50;
370
- this.follow.rotateFactor = 50;
371
- }
372
- target.position.set(0, 0, 0);
373
- break;
374
- case SpectatorMode.ThirdPerson:
375
- this.follow.followFactor = 3;
376
- this.follow.rotateFactor = 2;
377
- target.position.set(0, .5, 1.5);
378
- break;
379
- }
380
- this.follow.flipForward = false;
381
- // console.log(this.view);
382
- if (this.view?.viewDevice !== ViewDevice.Browser)
383
- target.quaternion.copy(_inverseYQuat);
384
- else
385
- target.quaternion.identity();
386
- }
387
- }
388
- const _inverseYQuat = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), Math.PI);
389
- class SpectatorSelectionController {
390
- context;
391
- spectator;
392
- constructor(context, spectator) {
393
- this.context = context;
394
- this.spectator = spectator;
395
- console.log("Click other avatars or cameras to follow them. Press ESC to exit spectator mode.");
396
- this.context.domElement.addEventListener("keydown", (evt) => {
397
- if (!this.spectator.useKeys)
398
- return;
399
- const key = evt.key;
400
- if (key === "Escape") {
401
- this.spectator.stopSpectating();
402
- }
403
- });
404
- let downTime = 0;
405
- this.context.input.addEventListener(InputEvents.PointerDown, _ => {
406
- downTime = this.context.time.time;
407
- });
408
- this.context.input.addEventListener(InputEvents.PointerUp, _ => {
409
- const dt = this.context.time.time - downTime;
410
- if (dt > 1) {
411
- this.spectator.stopSpectating();
412
- }
413
- else if (this.context.input.getPointerClicked(0) && dt < .3)
414
- this.trySelectObject();
415
- });
416
- }
417
- trySelectObject() {
418
- const opts = new RaycastOptions();
419
- opts.setMask(0xffffff);
420
- // opts.cam = this.spectator.cam?.cam;
421
- const hits = this.context.physics.raycast(opts);
422
- if (debug)
423
- console.log(...hits);
424
- if (hits?.length) {
425
- for (const hit of hits) {
426
- if (hit.distance < .2)
427
- continue;
428
- const obj = hit.object;
429
- const avatar = GameObject.getComponentInParent(obj, AvatarMarker);
430
- const id = avatar?.connectionId;
431
- if (id) {
432
- const view = this.context.players.getPlayerView(id);
433
- this.spectator.target = view;
434
- if (debug)
435
- console.log("spectate", id, avatar);
436
- break;
437
- }
438
- }
439
- }
440
- }
441
- }
442
- class SpectatorFollowerChangedEventModel {
443
- /** the user that is following */
444
- guid;
445
- dontSave = true;
446
- /** the user being followed */
447
- targetUserId;
448
- stoppedFollowing;
449
- constructor(connectionId, userId, stoppedFollowing) {
450
- this.guid = connectionId;
451
- this.targetUserId = userId;
452
- this.stoppedFollowing = stoppedFollowing;
453
- }
454
- }
455
- class SpectatorFollowEventModel {
456
- guid;
457
- userId;
458
- constructor(comp, userId) {
459
- this.guid = comp.guid;
460
- this.userId = userId;
461
- }
462
- }
463
- class SpectatorCamNetworking {
464
- followers = [];
465
- context;
466
- spectator;
467
- _followerEventMethod;
468
- _requestFollowMethod;
469
- _joinedRoomMethod;
470
- constructor(context, spectator) {
471
- this.context = context;
472
- this.spectator = spectator;
473
- this._followerEventMethod = this.onFollowerEvent.bind(this);
474
- this._requestFollowMethod = this.onRequestFollowEvent.bind(this);
475
- this._joinedRoomMethod = this.onUserJoinedRoom.bind(this);
476
- }
477
- awake() {
478
- this.context.connection.beginListen("spectator-follower-changed", this._followerEventMethod);
479
- this.context.connection.beginListen("spectator-request-follow", this._requestFollowMethod);
480
- this.context.connection.beginListen(RoomEvents.JoinedRoom, this._joinedRoomMethod);
481
- this.context.domElement.addEventListener("keydown", evt => {
482
- if (!this.spectator.useKeys)
483
- return;
484
- if (evt.key === "f") {
485
- this.onRequestFollowMe();
486
- }
487
- else if (evt.key === "Escape") {
488
- this.onRequestFollowMe(true);
489
- }
490
- });
491
- }
492
- destroy() {
493
- this.context.connection.stopListen("spectator-follower-changed", this._followerEventMethod);
494
- this.context.connection.stopListen("spectator-request-follow", this._requestFollowMethod);
495
- this.context.connection.stopListen(RoomEvents.JoinedRoom, this._joinedRoomMethod);
496
- }
497
- onSpectatedObjectChanged(target, _prevId) {
498
- if (debug)
499
- console.log(this.context.connection.connectionId, "onSpectatedObjectChanged", target, _prevId);
500
- if (this.context.connection.connectionId) {
501
- const stopped = target?.userId === undefined;
502
- const userId = stopped ? _prevId : target?.userId;
503
- const evt = new SpectatorFollowerChangedEventModel(this.context.connection.connectionId, userId, stopped);
504
- this.context.connection.send("spectator-follower-changed", evt);
505
- }
506
- }
507
- onRequestFollowMe(stop = false) {
508
- if (debug)
509
- console.log("Request follow", this.context.connection.connectionId);
510
- if (this.context.connection.connectionId) {
511
- this.spectator.stopSpectating();
512
- const id = stop ? undefined : this.context.connection.connectionId;
513
- const model = new SpectatorFollowEventModel(this.spectator, id);
514
- this.context.connection.send("spectator-request-follow", model);
515
- }
516
- }
517
- onUserJoinedRoom() {
518
- if (getParam("followme")) {
519
- this.onRequestFollowMe();
520
- }
521
- }
522
- onFollowerEvent(evt) {
523
- const userBeingFollowed = evt.targetUserId;
524
- const userThatIsFollowing = evt.guid;
525
- if (debug)
526
- console.log(evt);
527
- if (userBeingFollowed === this.context.connection.connectionId) {
528
- if (evt.stoppedFollowing) {
529
- const index = this.followers.indexOf(userThatIsFollowing);
530
- if (index !== -1) {
531
- this.followers.splice(index, 1);
532
- this.removeDisconnectedFollowers();
533
- console.log(userThatIsFollowing, "unfollows you", this.followers.length);
534
- }
535
- }
536
- else {
537
- if (!this.followers.includes(userThatIsFollowing)) {
538
- this.followers.push(userThatIsFollowing);
539
- this.removeDisconnectedFollowers();
540
- console.log(userThatIsFollowing, "follows you", this.followers.length);
541
- }
542
- }
543
- }
544
- }
545
- removeDisconnectedFollowers() {
546
- for (let i = this.followers.length - 1; i >= 0; i--) {
547
- const id = this.followers[i];
548
- if (this.context.connection.userIsInRoom(id) === false) {
549
- this.followers.splice(i, 1);
550
- }
551
- }
552
- }
553
- _lastRequestFollowUser;
554
- onRequestFollowEvent(evt) {
555
- this._lastRequestFollowUser = evt;
556
- if (evt.userId === this.context.connection.connectionId) {
557
- this.spectator.stopSpectating();
558
- }
559
- else if (evt.userId === undefined) {
560
- // this will currently also stop spectating if the user is not following you
561
- this.spectator.stopSpectating();
562
- }
563
- else {
564
- const view = this.context.players.getPlayerView(evt.userId);
565
- if (view) {
566
- this.spectator.target = view;
567
- }
568
- else {
569
- if (debug)
570
- console.warn("Could not find view", evt.userId);
571
- this.enforceFollow();
572
- return false;
573
- }
574
- }
575
- return true;
576
- }
577
- _enforceFollowInterval;
578
- enforceFollow() {
579
- if (this._enforceFollowInterval)
580
- return;
581
- this._enforceFollowInterval = setInterval(() => {
582
- if (this._lastRequestFollowUser === undefined || this._lastRequestFollowUser.userId && this.spectator.isFollowedBy(this._lastRequestFollowUser.userId)) {
583
- clearInterval(this._enforceFollowInterval);
584
- this._enforceFollowInterval = undefined;
585
- }
586
- else {
587
- if (debug)
588
- console.log("REQUEST FOLLOW AGAIN", this._lastRequestFollowUser.userId);
589
- this.onRequestFollowEvent(this._lastRequestFollowUser);
590
- }
591
- }, 1000);
592
- }
593
- }
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Behaviour, GameObject } from "./Component.js";
8
+ import { Camera } from "./Camera.js";
9
+ import * as THREE from "three";
10
+ import { OrbitControls } from "./OrbitControls.js";
11
+ import { WebXR, WebXREvent } from "./webxr/WebXR.js";
12
+ import { AvatarMarker } from "./webxr/WebXRAvatar.js";
13
+ import { XRStateFlag } from "./XRFlag.js";
14
+ import { SmoothFollow } from "./SmoothFollow.js";
15
+ import { InputEvents } from "../engine/engine_input.js";
16
+ import { getParam } from "../engine/engine_utils.js";
17
+ import { ViewDevice } from "../engine/engine_playerview.js";
18
+ import { RaycastOptions } from "../engine/engine_physics.js";
19
+ import { RoomEvents } from "../engine/engine_networking.js";
20
+ import { serializable } from "../engine/engine_serialization.js";
21
+ export var SpectatorMode;
22
+ (function (SpectatorMode) {
23
+ SpectatorMode[SpectatorMode["FirstPerson"] = 0] = "FirstPerson";
24
+ SpectatorMode[SpectatorMode["ThirdPerson"] = 1] = "ThirdPerson";
25
+ })(SpectatorMode || (SpectatorMode = {}));
26
+ const debug = getParam("debugspectator");
27
+ export class SpectatorCamera extends Behaviour {
28
+ cam = null;
29
+ /** when enabled pressing F will send a request to all connected users to follow me, ESC to stop */
30
+ useKeys = true;
31
+ _mode = SpectatorMode.FirstPerson;
32
+ get mode() { return this._mode; }
33
+ set mode(val) {
34
+ this._mode = val;
35
+ }
36
+ /** if this user is currently spectating someone else */
37
+ get isSpectating() {
38
+ return this._handler?.currentTarget !== undefined;
39
+ }
40
+ isSpectatingUser(userId) {
41
+ return this.target?.userId === userId;
42
+ }
43
+ isFollowedBy(userId) {
44
+ return this.followers?.includes(userId);
45
+ }
46
+ /** list of other users that are following me */
47
+ get followers() {
48
+ return this._networking.followers;
49
+ }
50
+ stopSpectating() {
51
+ if (this.context.isInXR) {
52
+ this.followSelf();
53
+ return;
54
+ }
55
+ this.target = undefined;
56
+ }
57
+ get localId() {
58
+ return this.context.connection.connectionId ?? "local";
59
+ }
60
+ /** player view to follow */
61
+ set target(target) {
62
+ if (this._handler) {
63
+ // if (this.target?.userId) {
64
+ // const isFollowedByThisUser = this.followers.includes(this.target.userId);
65
+ // if (isFollowedByThisUser) {
66
+ // console.warn("Can not follow follower");
67
+ // target = undefined;
68
+ // }
69
+ // }
70
+ const prev = this._handler.currentTarget?.userId;
71
+ const self = this.context.players.getPlayerView(this.localId);
72
+ // if user is in XR and sets target to self disable it
73
+ if (target === undefined || (this.context.isInXR === false && self?.currentObject === target.currentObject)) {
74
+ if (this._handler.currentTarget !== undefined) {
75
+ this._handler.disable();
76
+ GameObject.setActive(this.gameObject, false);
77
+ if (this.orbit)
78
+ this.orbit.enabled = true;
79
+ this._networking.onSpectatedObjectChanged(target, prev);
80
+ }
81
+ }
82
+ else if (this._handler.currentTarget !== target) {
83
+ this._handler.set(target);
84
+ GameObject.setActive(this.gameObject, true);
85
+ if (this.orbit)
86
+ this.orbit.enabled = false;
87
+ this._networking.onSpectatedObjectChanged(target, prev);
88
+ }
89
+ }
90
+ }
91
+ get target() {
92
+ return this._handler?.currentTarget;
93
+ }
94
+ requestAllFollowMe() {
95
+ this._networking.onRequestFollowMe();
96
+ }
97
+ get isSpectatingSelf() {
98
+ return this.isSpectating && this.target?.currentObject === this.context.players.getPlayerView(this.localId)?.currentObject;
99
+ }
100
+ // private currentViewport : THREE.Vector4 = new THREE.Vector4();
101
+ // private currentScissor : THREE.Vector4 = new THREE.Vector4();
102
+ // private currentScissorTest : boolean = false;
103
+ orbit = null;
104
+ _handler;
105
+ eventSub_WebXRRequestStartEvent = null;
106
+ eventSub_WebXRStartEvent = null;
107
+ eventSub_WebXREndEvent = null;
108
+ _debug;
109
+ _networking;
110
+ awake() {
111
+ this._debug = new SpectatorSelectionController(this.context, this);
112
+ this._networking = new SpectatorCamNetworking(this.context, this);
113
+ this._networking.awake();
114
+ GameObject.setActive(this.gameObject, false);
115
+ this.cam = GameObject.getComponent(this.gameObject, Camera);
116
+ if (!this.cam) {
117
+ console.warn("SpectatorCamera: Spectator camera needs camera component on the same object.", this);
118
+ return;
119
+ }
120
+ if (!this._handler && this.cam)
121
+ this._handler = new SpectatorHandler(this.context, this.cam, this);
122
+ this.eventSub_WebXRRequestStartEvent = this.onXRSessionRequestStart.bind(this);
123
+ this.eventSub_WebXRStartEvent = this.onXRSessionStart.bind(this);
124
+ this.eventSub_WebXREndEvent = this.onXRSessionEnded.bind(this);
125
+ WebXR.addEventListener(WebXREvent.RequestVRSession, this.eventSub_WebXRRequestStartEvent);
126
+ WebXR.addEventListener(WebXREvent.XRStarted, this.eventSub_WebXRStartEvent);
127
+ WebXR.addEventListener(WebXREvent.XRStopped, this.eventSub_WebXREndEvent);
128
+ this.orbit = GameObject.getComponent(this.context.mainCamera, OrbitControls);
129
+ }
130
+ onDestroy() {
131
+ this.stopSpectating();
132
+ WebXR.removeEventListener(WebXREvent.RequestVRSession, this.eventSub_WebXRStartEvent);
133
+ WebXR.removeEventListener(WebXREvent.XRStarted, this.eventSub_WebXRStartEvent);
134
+ WebXR.removeEventListener(WebXREvent.XRStopped, this.eventSub_WebXREndEvent);
135
+ this._handler?.destroy();
136
+ this._networking?.destroy();
137
+ }
138
+ isSupportedPlatform() {
139
+ const ua = window.navigator.userAgent;
140
+ const standalone = /Windows|MacOS/.test(ua);
141
+ const isHololens = /Windows NT/.test(ua) && /Edg/.test(ua) && !/Win64/.test(ua);
142
+ return standalone && !isHololens;
143
+ }
144
+ onXRSessionRequestStart(_evt) {
145
+ if (!this.isSupportedPlatform())
146
+ return;
147
+ GameObject.setActive(this.gameObject, true);
148
+ }
149
+ onXRSessionStart(_evt) {
150
+ if (!this.isSupportedPlatform())
151
+ return;
152
+ if (debug)
153
+ console.log(this.context.mainCamera);
154
+ if (this.context.mainCamera) {
155
+ this.followSelf();
156
+ }
157
+ }
158
+ onXRSessionEnded(_evt) {
159
+ this.context.removeCamera(this.cam);
160
+ GameObject.setActive(this.gameObject, false);
161
+ if (this.orbit)
162
+ this.orbit.enabled = true;
163
+ this._handler?.set(undefined);
164
+ this._handler?.disable();
165
+ if (this.isSpectatingSelf)
166
+ this.stopSpectating();
167
+ }
168
+ followSelf() {
169
+ this.target = this.context.players.getPlayerView(this.context.connection.connectionId);
170
+ if (!this.target) {
171
+ this.context.players.setPlayerView(this.localId, this.context.mainCamera, ViewDevice.Headset);
172
+ this.target = this.context.players.getPlayerView(this.localId);
173
+ }
174
+ if (debug)
175
+ console.log("Follow self", this.target);
176
+ }
177
+ // TODO: only show Spectator cam for DesktopVR;
178
+ // don't show for AR, don't show on Quest
179
+ // TODO: properly align cameras on enter/exit VR, seems currently spectator cam breaks alignment
180
+ onAfterRender() {
181
+ if (!this.cam)
182
+ return;
183
+ const renderer = this.context.renderer;
184
+ const xrWasEnabled = renderer.xr.enabled;
185
+ if (!renderer.xr.isPresenting && !this._handler?.currentTarget)
186
+ return;
187
+ this._handler?.update(this._mode);
188
+ // remember XR render target so we can restore later
189
+ const previousRenderTarget = renderer.getRenderTarget();
190
+ let oldFramebuffer = null;
191
+ // seems that in some cases, renderer.getRenderTarget returns null
192
+ // even when we're rendering to a headset.
193
+ if (!previousRenderTarget) {
194
+ if (!renderer.state.bindFramebuffer || !renderer.state.bindXRFramebuffer)
195
+ return;
196
+ oldFramebuffer = renderer["_framebuffer"];
197
+ renderer.state.bindXRFramebuffer(null);
198
+ }
199
+ this.setAvatarFlagsBeforeRender();
200
+ const mainCam = this.context.mainCameraComponent;
201
+ // these should not be needed if we don't override viewport/scissor
202
+ // renderer.getViewport(this.currentViewport);
203
+ // renderer.getScissor(this.currentScissor);
204
+ // this.currentScissorTest = renderer.getScissorTest();
205
+ // for scissor rendering (e.g. just a part of the screen / viewport, multiplayer split view)
206
+ // let left = 0;
207
+ // let bottom = 100;
208
+ // let width = 300;
209
+ // let height = 300;
210
+ // renderer.setViewport(left, bottom, width, height);
211
+ // renderer.setScissor(left, bottom, width, height);
212
+ // renderer.setScissorTest(true);
213
+ if (mainCam) {
214
+ const backgroundColor = mainCam.backgroundColor;
215
+ if (backgroundColor)
216
+ renderer.setClearColor(backgroundColor, backgroundColor.alpha);
217
+ this.cam.backgroundColor = backgroundColor;
218
+ this.cam.clearFlags = mainCam.clearFlags;
219
+ this.cam.nearClipPlane = mainCam.nearClipPlane;
220
+ this.cam.farClipPlane = mainCam.farClipPlane;
221
+ }
222
+ else
223
+ renderer.setClearColor(new THREE.Color(1, 1, 1));
224
+ renderer.setRenderTarget(null); // null: direct to Canvas
225
+ renderer.xr.enabled = false;
226
+ const cam = this.cam?.cam;
227
+ this.context.updateAspect(cam);
228
+ const wasPresenting = renderer.xr.isPresenting;
229
+ renderer.xr.isPresenting = false;
230
+ renderer.setSize(this.context.domWidth, this.context.domHeight);
231
+ renderer.render(this.context.scene, cam);
232
+ renderer.xr.isPresenting = wasPresenting;
233
+ // restore previous settings so we can continue to render XR
234
+ renderer.xr.enabled = xrWasEnabled;
235
+ //renderer.setViewport(this.currentViewport);
236
+ //renderer.setScissor(this.currentScissor);
237
+ //renderer.setScissorTest(this.currentScissorTest);
238
+ if (previousRenderTarget)
239
+ renderer.setRenderTarget(previousRenderTarget);
240
+ else
241
+ renderer.state.bindXRFramebuffer(oldFramebuffer);
242
+ this.resetAvatarFlags();
243
+ }
244
+ setAvatarFlagsBeforeRender() {
245
+ const isFirstPersonMode = this._mode === SpectatorMode.FirstPerson;
246
+ for (const av of AvatarMarker.instances) {
247
+ if (av.avatar && "isLocalAvatar" in av.avatar) {
248
+ let mask = XRStateFlag.All;
249
+ if (this.isSpectatingSelf)
250
+ mask = isFirstPersonMode && av.avatar.isLocalAvatar ? XRStateFlag.FirstPerson : XRStateFlag.ThirdPerson;
251
+ const flags = av.avatar.flags;
252
+ if (!flags)
253
+ continue;
254
+ for (const flag of flags) {
255
+ flag.UpdateVisible(mask);
256
+ }
257
+ }
258
+ }
259
+ }
260
+ resetAvatarFlags() {
261
+ for (const av of AvatarMarker.instances) {
262
+ if (av.avatar && "flags" in av.avatar) {
263
+ const flags = av.avatar.flags;
264
+ if (!flags)
265
+ continue;
266
+ for (const flag of flags) {
267
+ if (av.avatar?.isLocalAvatar) {
268
+ flag.UpdateVisible(XRStateFlag.FirstPerson);
269
+ }
270
+ else {
271
+ flag.UpdateVisible(XRStateFlag.ThirdPerson);
272
+ }
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ __decorate([
279
+ serializable()
280
+ ], SpectatorCamera.prototype, "useKeys", void 0);
281
+ class SpectatorHandler {
282
+ context;
283
+ cam;
284
+ spectator;
285
+ follow;
286
+ target;
287
+ view;
288
+ currentObject;
289
+ get currentTarget() {
290
+ return this.view;
291
+ }
292
+ constructor(context, cam, spectator) {
293
+ this.context = context;
294
+ this.cam = cam;
295
+ this.spectator = spectator;
296
+ }
297
+ set(view) {
298
+ const followObject = view?.currentObject;
299
+ if (!followObject) {
300
+ this.spectator.stopSpectating();
301
+ return;
302
+ }
303
+ if (followObject === this.currentObject)
304
+ return;
305
+ this.currentObject = followObject;
306
+ this.view = view;
307
+ if (!this.follow)
308
+ this.follow = GameObject.addNewComponent(this.cam.gameObject, SmoothFollow);
309
+ if (!this.target)
310
+ this.target = new THREE.Object3D();
311
+ followObject.add(this.target);
312
+ this.follow.enabled = true;
313
+ this.follow.target = this.target;
314
+ // this.context.setCurrentCamera(this.cam);
315
+ if (debug)
316
+ console.log("FOLLOW", followObject);
317
+ if (!this.context.isInXR) {
318
+ this.context.setCurrentCamera(this.cam);
319
+ }
320
+ else
321
+ this.context.removeCamera(this.cam);
322
+ }
323
+ disable() {
324
+ if (debug)
325
+ console.log("STOP FOLLOW", this.currentObject);
326
+ this.view = undefined;
327
+ this.currentObject = undefined;
328
+ this.context.removeCamera(this.cam);
329
+ if (this.follow)
330
+ this.follow.enabled = false;
331
+ }
332
+ destroy() {
333
+ this.target?.removeFromParent();
334
+ if (this.follow)
335
+ GameObject.destroy(this.follow);
336
+ }
337
+ update(mode) {
338
+ if (this.currentTarget?.isConnected === false || this.currentTarget?.removed === true) {
339
+ if (debug)
340
+ console.log("Target disconnected or timeout", this.currentTarget);
341
+ this.spectator.stopSpectating();
342
+ return;
343
+ }
344
+ if (this.currentTarget && this.currentTarget?.currentObject !== this.currentObject) {
345
+ if (debug)
346
+ console.log("Target changed", this.currentObject, "to", this.currentTarget.currentObject);
347
+ this.set(this.currentTarget);
348
+ }
349
+ const perspectiveCamera = this.context.mainCamera;
350
+ if (perspectiveCamera) {
351
+ if (this.cam.cam.near !== perspectiveCamera.near || this.cam.cam.far !== perspectiveCamera.far) {
352
+ this.cam.cam.near = perspectiveCamera.near;
353
+ this.cam.cam.far = perspectiveCamera.far;
354
+ this.cam.cam.updateProjectionMatrix();
355
+ }
356
+ }
357
+ const target = this.follow?.target;
358
+ if (!target || !this.follow)
359
+ return;
360
+ switch (mode) {
361
+ case SpectatorMode.FirstPerson:
362
+ if (this.view?.viewDevice !== ViewDevice.Browser) {
363
+ // soft follow for AR and VR
364
+ this.follow.followFactor = 5;
365
+ this.follow.rotateFactor = 5;
366
+ }
367
+ else {
368
+ // snappy follow for desktop
369
+ this.follow.followFactor = 50;
370
+ this.follow.rotateFactor = 50;
371
+ }
372
+ target.position.set(0, 0, 0);
373
+ break;
374
+ case SpectatorMode.ThirdPerson:
375
+ this.follow.followFactor = 3;
376
+ this.follow.rotateFactor = 2;
377
+ target.position.set(0, .5, 1.5);
378
+ break;
379
+ }
380
+ this.follow.flipForward = false;
381
+ // console.log(this.view);
382
+ if (this.view?.viewDevice !== ViewDevice.Browser)
383
+ target.quaternion.copy(_inverseYQuat);
384
+ else
385
+ target.quaternion.identity();
386
+ }
387
+ }
388
+ const _inverseYQuat = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), Math.PI);
389
+ class SpectatorSelectionController {
390
+ context;
391
+ spectator;
392
+ constructor(context, spectator) {
393
+ this.context = context;
394
+ this.spectator = spectator;
395
+ console.log("Click other avatars or cameras to follow them. Press ESC to exit spectator mode.");
396
+ this.context.domElement.addEventListener("keydown", (evt) => {
397
+ if (!this.spectator.useKeys)
398
+ return;
399
+ const key = evt.key;
400
+ if (key === "Escape") {
401
+ this.spectator.stopSpectating();
402
+ }
403
+ });
404
+ let downTime = 0;
405
+ this.context.input.addEventListener(InputEvents.PointerDown, _ => {
406
+ downTime = this.context.time.time;
407
+ });
408
+ this.context.input.addEventListener(InputEvents.PointerUp, _ => {
409
+ const dt = this.context.time.time - downTime;
410
+ if (dt > 1) {
411
+ this.spectator.stopSpectating();
412
+ }
413
+ else if (this.context.input.getPointerClicked(0) && dt < .3)
414
+ this.trySelectObject();
415
+ });
416
+ }
417
+ trySelectObject() {
418
+ const opts = new RaycastOptions();
419
+ opts.setMask(0xffffff);
420
+ // opts.cam = this.spectator.cam?.cam;
421
+ const hits = this.context.physics.raycast(opts);
422
+ if (debug)
423
+ console.log(...hits);
424
+ if (hits?.length) {
425
+ for (const hit of hits) {
426
+ if (hit.distance < .2)
427
+ continue;
428
+ const obj = hit.object;
429
+ const avatar = GameObject.getComponentInParent(obj, AvatarMarker);
430
+ const id = avatar?.connectionId;
431
+ if (id) {
432
+ const view = this.context.players.getPlayerView(id);
433
+ this.spectator.target = view;
434
+ if (debug)
435
+ console.log("spectate", id, avatar);
436
+ break;
437
+ }
438
+ }
439
+ }
440
+ }
441
+ }
442
+ class SpectatorFollowerChangedEventModel {
443
+ /** the user that is following */
444
+ guid;
445
+ dontSave = true;
446
+ /** the user being followed */
447
+ targetUserId;
448
+ stoppedFollowing;
449
+ constructor(connectionId, userId, stoppedFollowing) {
450
+ this.guid = connectionId;
451
+ this.targetUserId = userId;
452
+ this.stoppedFollowing = stoppedFollowing;
453
+ }
454
+ }
455
+ class SpectatorFollowEventModel {
456
+ guid;
457
+ userId;
458
+ constructor(comp, userId) {
459
+ this.guid = comp.guid;
460
+ this.userId = userId;
461
+ }
462
+ }
463
+ class SpectatorCamNetworking {
464
+ followers = [];
465
+ context;
466
+ spectator;
467
+ _followerEventMethod;
468
+ _requestFollowMethod;
469
+ _joinedRoomMethod;
470
+ constructor(context, spectator) {
471
+ this.context = context;
472
+ this.spectator = spectator;
473
+ this._followerEventMethod = this.onFollowerEvent.bind(this);
474
+ this._requestFollowMethod = this.onRequestFollowEvent.bind(this);
475
+ this._joinedRoomMethod = this.onUserJoinedRoom.bind(this);
476
+ }
477
+ awake() {
478
+ this.context.connection.beginListen("spectator-follower-changed", this._followerEventMethod);
479
+ this.context.connection.beginListen("spectator-request-follow", this._requestFollowMethod);
480
+ this.context.connection.beginListen(RoomEvents.JoinedRoom, this._joinedRoomMethod);
481
+ this.context.domElement.addEventListener("keydown", evt => {
482
+ if (!this.spectator.useKeys)
483
+ return;
484
+ if (evt.key === "f") {
485
+ this.onRequestFollowMe();
486
+ }
487
+ else if (evt.key === "Escape") {
488
+ this.onRequestFollowMe(true);
489
+ }
490
+ });
491
+ }
492
+ destroy() {
493
+ this.context.connection.stopListen("spectator-follower-changed", this._followerEventMethod);
494
+ this.context.connection.stopListen("spectator-request-follow", this._requestFollowMethod);
495
+ this.context.connection.stopListen(RoomEvents.JoinedRoom, this._joinedRoomMethod);
496
+ }
497
+ onSpectatedObjectChanged(target, _prevId) {
498
+ if (debug)
499
+ console.log(this.context.connection.connectionId, "onSpectatedObjectChanged", target, _prevId);
500
+ if (this.context.connection.connectionId) {
501
+ const stopped = target?.userId === undefined;
502
+ const userId = stopped ? _prevId : target?.userId;
503
+ const evt = new SpectatorFollowerChangedEventModel(this.context.connection.connectionId, userId, stopped);
504
+ this.context.connection.send("spectator-follower-changed", evt);
505
+ }
506
+ }
507
+ onRequestFollowMe(stop = false) {
508
+ if (debug)
509
+ console.log("Request follow", this.context.connection.connectionId);
510
+ if (this.context.connection.connectionId) {
511
+ this.spectator.stopSpectating();
512
+ const id = stop ? undefined : this.context.connection.connectionId;
513
+ const model = new SpectatorFollowEventModel(this.spectator, id);
514
+ this.context.connection.send("spectator-request-follow", model);
515
+ }
516
+ }
517
+ onUserJoinedRoom() {
518
+ if (getParam("followme")) {
519
+ this.onRequestFollowMe();
520
+ }
521
+ }
522
+ onFollowerEvent(evt) {
523
+ const userBeingFollowed = evt.targetUserId;
524
+ const userThatIsFollowing = evt.guid;
525
+ if (debug)
526
+ console.log(evt);
527
+ if (userBeingFollowed === this.context.connection.connectionId) {
528
+ if (evt.stoppedFollowing) {
529
+ const index = this.followers.indexOf(userThatIsFollowing);
530
+ if (index !== -1) {
531
+ this.followers.splice(index, 1);
532
+ this.removeDisconnectedFollowers();
533
+ console.log(userThatIsFollowing, "unfollows you", this.followers.length);
534
+ }
535
+ }
536
+ else {
537
+ if (!this.followers.includes(userThatIsFollowing)) {
538
+ this.followers.push(userThatIsFollowing);
539
+ this.removeDisconnectedFollowers();
540
+ console.log(userThatIsFollowing, "follows you", this.followers.length);
541
+ }
542
+ }
543
+ }
544
+ }
545
+ removeDisconnectedFollowers() {
546
+ for (let i = this.followers.length - 1; i >= 0; i--) {
547
+ const id = this.followers[i];
548
+ if (this.context.connection.userIsInRoom(id) === false) {
549
+ this.followers.splice(i, 1);
550
+ }
551
+ }
552
+ }
553
+ _lastRequestFollowUser;
554
+ onRequestFollowEvent(evt) {
555
+ this._lastRequestFollowUser = evt;
556
+ if (evt.userId === this.context.connection.connectionId) {
557
+ this.spectator.stopSpectating();
558
+ }
559
+ else if (evt.userId === undefined) {
560
+ // this will currently also stop spectating if the user is not following you
561
+ this.spectator.stopSpectating();
562
+ }
563
+ else {
564
+ const view = this.context.players.getPlayerView(evt.userId);
565
+ if (view) {
566
+ this.spectator.target = view;
567
+ }
568
+ else {
569
+ if (debug)
570
+ console.warn("Could not find view", evt.userId);
571
+ this.enforceFollow();
572
+ return false;
573
+ }
574
+ }
575
+ return true;
576
+ }
577
+ _enforceFollowInterval;
578
+ enforceFollow() {
579
+ if (this._enforceFollowInterval)
580
+ return;
581
+ this._enforceFollowInterval = setInterval(() => {
582
+ if (this._lastRequestFollowUser === undefined || this._lastRequestFollowUser.userId && this.spectator.isFollowedBy(this._lastRequestFollowUser.userId)) {
583
+ clearInterval(this._enforceFollowInterval);
584
+ this._enforceFollowInterval = undefined;
585
+ }
586
+ else {
587
+ if (debug)
588
+ console.log("REQUEST FOLLOW AGAIN", this._lastRequestFollowUser.userId);
589
+ this.onRequestFollowEvent(this._lastRequestFollowUser);
590
+ }
591
+ }, 1000);
592
+ }
593
+ }
594
594
  //# sourceMappingURL=SpectatorCamera.js.map