@needle-tools/engine 3.28.7-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 (849) hide show
  1. package/CHANGELOG.md +2259 -2256
  2. package/LICENSE.md +10 -10
  3. package/README.md +52 -52
  4. package/dist/needle-engine.js +9 -12
  5. package/dist/needle-engine.light.js +9 -12
  6. package/dist/needle-engine.light.min.js +8 -11
  7. package/dist/needle-engine.light.umd.cjs +8 -11
  8. package/dist/needle-engine.min.js +8 -11
  9. package/dist/needle-engine.umd.cjs +8 -11
  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/AnimatorController.js.map +1 -1
  211. package/lib/engine-components/AudioListener.d.ts +7 -7
  212. package/lib/engine-components/AudioListener.js +30 -30
  213. package/lib/engine-components/AudioSource.d.ts +61 -61
  214. package/lib/engine-components/AudioSource.js +422 -422
  215. package/lib/engine-components/AvatarLoader.d.ts +19 -19
  216. package/lib/engine-components/AvatarLoader.js +173 -173
  217. package/lib/engine-components/AxesHelper.d.ts +9 -9
  218. package/lib/engine-components/AxesHelper.js +44 -44
  219. package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
  220. package/lib/engine-components/BasicIKConstraint.js +43 -43
  221. package/lib/engine-components/BoxHelperComponent.d.ts +16 -16
  222. package/lib/engine-components/BoxHelperComponent.js +89 -89
  223. package/lib/engine-components/Camera.d.ts +70 -70
  224. package/lib/engine-components/Camera.js +450 -450
  225. package/lib/engine-components/CameraUtils.d.ts +1 -1
  226. package/lib/engine-components/CameraUtils.js +77 -77
  227. package/lib/engine-components/CharacterController.d.ts +46 -46
  228. package/lib/engine-components/CharacterController.js +227 -227
  229. package/lib/engine-components/Collider.d.ts +46 -46
  230. package/lib/engine-components/Collider.js +153 -153
  231. package/lib/engine-components/Component.d.ts +228 -228
  232. package/lib/engine-components/Component.js +541 -541
  233. package/lib/engine-components/ContactShadows.d.ts +23 -23
  234. package/lib/engine-components/ContactShadows.js +233 -233
  235. package/lib/engine-components/DeleteBox.d.ts +9 -9
  236. package/lib/engine-components/DeleteBox.js +30 -30
  237. package/lib/engine-components/DeviceFlag.d.ts +12 -12
  238. package/lib/engine-components/DeviceFlag.js +43 -43
  239. package/lib/engine-components/DragControls.d.ts +51 -51
  240. package/lib/engine-components/DragControls.js +516 -516
  241. package/lib/engine-components/DropListener.d.ts +15 -15
  242. package/lib/engine-components/DropListener.js +120 -120
  243. package/lib/engine-components/Duplicatable.d.ts +16 -16
  244. package/lib/engine-components/Duplicatable.js +150 -150
  245. package/lib/engine-components/EventList.d.ts +28 -28
  246. package/lib/engine-components/EventList.js +105 -105
  247. package/lib/engine-components/EventTrigger.d.ts +12 -12
  248. package/lib/engine-components/EventTrigger.js +50 -50
  249. package/lib/engine-components/EventType.d.ts +19 -19
  250. package/lib/engine-components/EventType.js +71 -71
  251. package/lib/engine-components/FlyControls.d.ts +7 -7
  252. package/lib/engine-components/FlyControls.js +25 -25
  253. package/lib/engine-components/Fog.d.ts +20 -20
  254. package/lib/engine-components/Fog.js +60 -60
  255. package/lib/engine-components/Gizmos.d.ts +12 -12
  256. package/lib/engine-components/Gizmos.js +60 -60
  257. package/lib/engine-components/GridHelper.d.ts +12 -12
  258. package/lib/engine-components/GridHelper.js +47 -47
  259. package/lib/engine-components/GroundProjection.d.ts +21 -21
  260. package/lib/engine-components/GroundProjection.js +97 -97
  261. package/lib/engine-components/Interactable.d.ts +10 -10
  262. package/lib/engine-components/Interactable.js +11 -11
  263. package/lib/engine-components/Joints.d.ts +19 -19
  264. package/lib/engine-components/Joints.js +51 -51
  265. package/lib/engine-components/LODGroup.d.ts +30 -30
  266. package/lib/engine-components/LODGroup.js +145 -145
  267. package/lib/engine-components/Light.d.ts +75 -75
  268. package/lib/engine-components/Light.js +475 -475
  269. package/lib/engine-components/LookAtConstraint.d.ts +7 -7
  270. package/lib/engine-components/LookAtConstraint.js +17 -17
  271. package/lib/engine-components/NestedGltf.d.ts +11 -11
  272. package/lib/engine-components/NestedGltf.js +74 -74
  273. package/lib/engine-components/Networking.d.ts +11 -11
  274. package/lib/engine-components/Networking.js +70 -70
  275. package/lib/engine-components/OffsetConstraint.d.ts +14 -14
  276. package/lib/engine-components/OffsetConstraint.js +65 -65
  277. package/lib/engine-components/OrbitControls.d.ts +111 -111
  278. package/lib/engine-components/OrbitControls.js +646 -646
  279. package/lib/engine-components/ParticleSystem.d.ts +145 -145
  280. package/lib/engine-components/ParticleSystem.js +1077 -1077
  281. package/lib/engine-components/ParticleSystemModules.d.ts +489 -489
  282. package/lib/engine-components/ParticleSystemModules.js +1667 -1667
  283. package/lib/engine-components/ParticleSystemSubEmitter.d.ts +25 -25
  284. package/lib/engine-components/ParticleSystemSubEmitter.js +86 -86
  285. package/lib/engine-components/PlayerColor.d.ts +13 -13
  286. package/lib/engine-components/PlayerColor.js +83 -83
  287. package/lib/engine-components/ReflectionProbe.d.ts +22 -22
  288. package/lib/engine-components/ReflectionProbe.js +181 -181
  289. package/lib/engine-components/Renderer.d.ts +112 -112
  290. package/lib/engine-components/Renderer.js +1029 -1029
  291. package/lib/engine-components/RendererLightmap.d.ts +19 -19
  292. package/lib/engine-components/RendererLightmap.js +127 -127
  293. package/lib/engine-components/RigidBody.d.ts +120 -120
  294. package/lib/engine-components/RigidBody.js +452 -452
  295. package/lib/engine-components/SceneSwitcher.d.ts +72 -72
  296. package/lib/engine-components/SceneSwitcher.js +583 -583
  297. package/lib/engine-components/ScreenCapture.d.ts +64 -64
  298. package/lib/engine-components/ScreenCapture.js +405 -405
  299. package/lib/engine-components/ShadowCatcher.d.ts +18 -18
  300. package/lib/engine-components/ShadowCatcher.js +144 -144
  301. package/lib/engine-components/Skybox.d.ts +23 -23
  302. package/lib/engine-components/Skybox.js +287 -287
  303. package/lib/engine-components/SmoothFollow.d.ts +14 -14
  304. package/lib/engine-components/SmoothFollow.js +63 -63
  305. package/lib/engine-components/SpatialTrigger.d.ts +27 -27
  306. package/lib/engine-components/SpatialTrigger.js +144 -144
  307. package/lib/engine-components/SpectatorCamera.d.ts +45 -45
  308. package/lib/engine-components/SpectatorCamera.js +593 -593
  309. package/lib/engine-components/SpriteRenderer.d.ts +48 -48
  310. package/lib/engine-components/SpriteRenderer.js +257 -257
  311. package/lib/engine-components/SyncedCamera.d.ts +27 -27
  312. package/lib/engine-components/SyncedCamera.js +187 -187
  313. package/lib/engine-components/SyncedRoom.d.ts +24 -24
  314. package/lib/engine-components/SyncedRoom.js +162 -162
  315. package/lib/engine-components/SyncedTransform.d.ts +35 -35
  316. package/lib/engine-components/SyncedTransform.js +265 -265
  317. package/lib/engine-components/TestRunner.d.ts +13 -13
  318. package/lib/engine-components/TestRunner.js +99 -99
  319. package/lib/engine-components/TransformGizmo.d.ts +16 -16
  320. package/lib/engine-components/TransformGizmo.js +148 -148
  321. package/lib/engine-components/VideoPlayer.d.ts +86 -86
  322. package/lib/engine-components/VideoPlayer.js +792 -792
  323. package/lib/engine-components/Voip.d.ts +29 -29
  324. package/lib/engine-components/Voip.js +203 -203
  325. package/lib/engine-components/XRFlag.d.ts +33 -33
  326. package/lib/engine-components/XRFlag.js +128 -128
  327. package/lib/engine-components/api.d.ts +15 -15
  328. package/lib/engine-components/api.js +15 -15
  329. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +10 -10
  330. package/lib/engine-components/avatar/AvatarBlink_Simple.js +75 -75
  331. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +13 -13
  332. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +74 -74
  333. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +27 -27
  334. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +119 -119
  335. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +13 -13
  336. package/lib/engine-components/avatar/Avatar_MouthShapes.js +78 -78
  337. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +8 -8
  338. package/lib/engine-components/avatar/Avatar_MustacheShake.js +28 -28
  339. package/lib/engine-components/codegen/components.d.ts +216 -216
  340. package/lib/engine-components/codegen/components.js +217 -217
  341. package/lib/engine-components/debug/LogStats.d.ts +5 -5
  342. package/lib/engine-components/debug/LogStats.js +18 -18
  343. package/lib/engine-components/export/gltf/GltfExport.d.ts +25 -25
  344. package/lib/engine-components/export/gltf/GltfExport.js +215 -215
  345. package/lib/engine-components/export/index.d.ts +1 -1
  346. package/lib/engine-components/export/index.js +1 -1
  347. package/lib/engine-components/export/usdz/Extension.d.ts +10 -10
  348. package/lib/engine-components/export/usdz/Extension.js +1 -1
  349. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +114 -114
  350. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1211 -1211
  351. package/lib/engine-components/export/usdz/USDZExporter.d.ts +59 -59
  352. package/lib/engine-components/export/usdz/USDZExporter.js +450 -450
  353. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +69 -69
  354. package/lib/engine-components/export/usdz/extensions/Animation.js +650 -650
  355. package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
  356. package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
  357. package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +55 -55
  358. package/lib/engine-components/export/usdz/extensions/USDZText.js +246 -246
  359. package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
  360. package/lib/engine-components/export/usdz/extensions/USDZUI.js +100 -100
  361. package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
  362. package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
  363. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +9 -9
  364. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +52 -52
  365. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +22 -22
  366. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +134 -134
  367. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +126 -126
  368. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +824 -824
  369. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +133 -133
  370. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +464 -464
  371. package/lib/engine-components/export/usdz/index.d.ts +3 -3
  372. package/lib/engine-components/export/usdz/index.js +2 -2
  373. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -3
  374. package/lib/engine-components/export/usdz/utils/animationutils.js +85 -85
  375. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
  376. package/lib/engine-components/export/usdz/utils/quicklook.js +35 -35
  377. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -1
  378. package/lib/engine-components/export/usdz/utils/timeutils.js +14 -14
  379. package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +6 -6
  380. package/lib/engine-components/js-extensions/ExtensionUtils.js +65 -65
  381. package/lib/engine-components/js-extensions/Object3D.d.ts +2 -2
  382. package/lib/engine-components/js-extensions/Object3D.js +140 -140
  383. package/lib/engine-components/js-extensions/RGBAColor.d.ts +14 -14
  384. package/lib/engine-components/js-extensions/RGBAColor.js +49 -49
  385. package/lib/engine-components/js-extensions/index.d.ts +3 -3
  386. package/lib/engine-components/js-extensions/index.js +3 -3
  387. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -13
  388. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +45 -45
  389. package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -12
  390. package/lib/engine-components/postprocessing/Effects/Bloom.js +77 -77
  391. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -8
  392. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +38 -38
  393. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -12
  394. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +81 -81
  395. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -21
  396. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +97 -97
  397. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -7
  398. package/lib/engine-components/postprocessing/Effects/Pixelation.js +28 -28
  399. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +13 -13
  400. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +86 -86
  401. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +24 -24
  402. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +94 -94
  403. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +13 -13
  404. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +62 -62
  405. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -16
  406. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +51 -51
  407. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -11
  408. package/lib/engine-components/postprocessing/Effects/Vignette.js +56 -56
  409. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +33 -33
  410. package/lib/engine-components/postprocessing/PostProcessingEffect.js +126 -126
  411. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +22 -22
  412. package/lib/engine-components/postprocessing/PostProcessingHandler.js +201 -201
  413. package/lib/engine-components/postprocessing/Volume.d.ts +25 -25
  414. package/lib/engine-components/postprocessing/Volume.js +193 -193
  415. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +22 -22
  416. package/lib/engine-components/postprocessing/VolumeParameter.js +80 -80
  417. package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -7
  418. package/lib/engine-components/postprocessing/VolumeProfile.js +41 -41
  419. package/lib/engine-components/postprocessing/index.d.ts +4 -4
  420. package/lib/engine-components/postprocessing/index.js +4 -4
  421. package/lib/engine-components/timeline/PlayableDirector.d.ts +107 -107
  422. package/lib/engine-components/timeline/PlayableDirector.js +624 -624
  423. package/lib/engine-components/timeline/SignalAsset.d.ts +18 -18
  424. package/lib/engine-components/timeline/SignalAsset.js +124 -124
  425. package/lib/engine-components/timeline/TimelineModels.d.ts +88 -88
  426. package/lib/engine-components/timeline/TimelineModels.js +22 -22
  427. package/lib/engine-components/timeline/TimelineTracks.d.ts +90 -90
  428. package/lib/engine-components/timeline/TimelineTracks.js +825 -825
  429. package/lib/engine-components/timeline/index.d.ts +4 -4
  430. package/lib/engine-components/timeline/index.js +3 -3
  431. package/lib/engine-components/ui/BaseUIComponent.d.ts +31 -31
  432. package/lib/engine-components/ui/BaseUIComponent.js +161 -161
  433. package/lib/engine-components/ui/Button.d.ts +56 -56
  434. package/lib/engine-components/ui/Button.js +282 -282
  435. package/lib/engine-components/ui/Canvas.d.ts +67 -67
  436. package/lib/engine-components/ui/Canvas.js +382 -382
  437. package/lib/engine-components/ui/CanvasGroup.d.ts +15 -15
  438. package/lib/engine-components/ui/CanvasGroup.js +53 -53
  439. package/lib/engine-components/ui/EventSystem.d.ts +102 -102
  440. package/lib/engine-components/ui/EventSystem.js +641 -641
  441. package/lib/engine-components/ui/Graphic.d.ts +45 -45
  442. package/lib/engine-components/ui/Graphic.js +236 -236
  443. package/lib/engine-components/ui/Image.d.ts +27 -27
  444. package/lib/engine-components/ui/Image.js +107 -107
  445. package/lib/engine-components/ui/InputField.d.ts +34 -34
  446. package/lib/engine-components/ui/InputField.js +234 -234
  447. package/lib/engine-components/ui/Interfaces.d.ts +38 -38
  448. package/lib/engine-components/ui/Interfaces.js +12 -12
  449. package/lib/engine-components/ui/Layout.d.ts +72 -72
  450. package/lib/engine-components/ui/Layout.js +318 -318
  451. package/lib/engine-components/ui/Outline.d.ts +7 -7
  452. package/lib/engine-components/ui/Outline.js +20 -20
  453. package/lib/engine-components/ui/PointerEvents.d.ts +64 -64
  454. package/lib/engine-components/ui/PointerEvents.js +68 -68
  455. package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
  456. package/lib/engine-components/ui/RaycastUtils.js +67 -67
  457. package/lib/engine-components/ui/Raycaster.d.ts +18 -18
  458. package/lib/engine-components/ui/Raycaster.js +69 -69
  459. package/lib/engine-components/ui/RectTransform.d.ts +61 -61
  460. package/lib/engine-components/ui/RectTransform.js +343 -343
  461. package/lib/engine-components/ui/SpatialHtml.d.ts +6 -6
  462. package/lib/engine-components/ui/SpatialHtml.js +57 -57
  463. package/lib/engine-components/ui/Text.d.ts +74 -74
  464. package/lib/engine-components/ui/Text.js +534 -534
  465. package/lib/engine-components/ui/Utils.d.ts +23 -23
  466. package/lib/engine-components/ui/Utils.js +90 -90
  467. package/lib/engine-components/ui/index.d.ts +1 -1
  468. package/lib/engine-components/ui/index.js +1 -1
  469. package/lib/engine-components/utils/LookAt.d.ts +13 -13
  470. package/lib/engine-components/utils/LookAt.js +59 -59
  471. package/lib/engine-components/utils/OpenURL.d.ts +21 -21
  472. package/lib/engine-components/utils/OpenURL.js +124 -124
  473. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +19 -19
  474. package/lib/engine-components/webxr/WebARCameraBackground.js +193 -193
  475. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +38 -38
  476. package/lib/engine-components/webxr/WebARSessionRoot.js +407 -407
  477. package/lib/engine-components/webxr/WebXR.d.ts +110 -110
  478. package/lib/engine-components/webxr/WebXR.js +672 -672
  479. package/lib/engine-components/webxr/WebXRAvatar.d.ts +61 -61
  480. package/lib/engine-components/webxr/WebXRAvatar.js +289 -289
  481. package/lib/engine-components/webxr/WebXRController.d.ts +154 -154
  482. package/lib/engine-components/webxr/WebXRController.js +1028 -1028
  483. package/lib/engine-components/webxr/WebXRGrabRendering.d.ts +42 -42
  484. package/lib/engine-components/webxr/WebXRGrabRendering.js +137 -137
  485. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +49 -49
  486. package/lib/engine-components/webxr/WebXRImageTracking.js +336 -336
  487. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +49 -49
  488. package/lib/engine-components/webxr/WebXRPlaneTracking.js +372 -372
  489. package/lib/engine-components/webxr/WebXRRig.d.ts +4 -4
  490. package/lib/engine-components/webxr/WebXRRig.js +19 -19
  491. package/lib/engine-components/webxr/WebXRSync.d.ts +54 -54
  492. package/lib/engine-components/webxr/WebXRSync.js +410 -410
  493. package/lib/engine-components/webxr/index.d.ts +4 -4
  494. package/lib/engine-components/webxr/index.js +4 -4
  495. package/lib/engine-components-experimental/Presentation.d.ts +6 -6
  496. package/lib/engine-components-experimental/Presentation.js +9 -9
  497. package/lib/engine-components-experimental/api.d.ts +1 -1
  498. package/lib/engine-components-experimental/api.js +1 -1
  499. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +50 -50
  500. package/lib/engine-components-experimental/networking/PlayerSync.js +200 -200
  501. package/lib/engine-schemes/api.d.ts +1 -1
  502. package/lib/engine-schemes/api.js +1 -1
  503. package/lib/engine-schemes/schemes.d.ts +7 -7
  504. package/lib/engine-schemes/schemes.js +19 -19
  505. package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
  506. package/lib/engine-schemes/synced-camera-model.js +67 -67
  507. package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
  508. package/lib/engine-schemes/synced-transform-model.js +66 -66
  509. package/lib/engine-schemes/transform.d.ts +12 -12
  510. package/lib/engine-schemes/transform.js +39 -39
  511. package/lib/engine-schemes/vec3.d.ts +11 -11
  512. package/lib/engine-schemes/vec3.js +29 -29
  513. package/lib/engine-schemes/vec4.d.ts +12 -12
  514. package/lib/engine-schemes/vec4.js +33 -33
  515. package/lib/engine-schemes/vr-user-state-buffer.d.ts +36 -36
  516. package/lib/engine-schemes/vr-user-state-buffer.js +103 -103
  517. package/lib/include/three/ARButton.d.ts +3 -3
  518. package/lib/include/three/ARButton.js +151 -151
  519. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
  520. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
  521. package/lib/include/three/VRButton.d.ts +5 -5
  522. package/lib/include/three/VRButton.js +118 -118
  523. package/lib/needle-engine.d.ts +6 -6
  524. package/lib/needle-engine.js +49 -49
  525. package/package.json +1 -1
  526. package/plugins/common/config.cjs +14 -14
  527. package/plugins/common/config.js +19 -19
  528. package/plugins/common/generator.js +10 -10
  529. package/plugins/common/license.cjs +30 -30
  530. package/plugins/common/version.js +11 -11
  531. package/plugins/next/license.cjs +4 -4
  532. package/plugins/next/next.js +70 -70
  533. package/plugins/types/index.d.ts +1 -1
  534. package/plugins/types/needleConfig.d.ts +21 -21
  535. package/plugins/types/userconfig.d.ts +42 -42
  536. package/plugins/vite/alias.js +70 -70
  537. package/plugins/vite/build.js +19 -19
  538. package/plugins/vite/config.js +73 -73
  539. package/plugins/vite/copyfiles.js +134 -134
  540. package/plugins/vite/defines.js +45 -45
  541. package/plugins/vite/dependency-watcher.js +224 -224
  542. package/plugins/vite/drop-client.js +76 -76
  543. package/plugins/vite/drop.js +82 -82
  544. package/plugins/vite/editor-connection.js +121 -121
  545. package/plugins/vite/facebook-instant-games.js +99 -99
  546. package/plugins/vite/gzip.js +5 -5
  547. package/plugins/vite/imports-logger.js +143 -143
  548. package/plugins/vite/index.js +81 -81
  549. package/plugins/vite/license.js +42 -42
  550. package/plugins/vite/meta.js +149 -149
  551. package/plugins/vite/peer.js +31 -31
  552. package/plugins/vite/poster-client.js +59 -59
  553. package/plugins/vite/poster.js +73 -73
  554. package/plugins/vite/reload-client.js +15 -15
  555. package/plugins/vite/reload.js +363 -363
  556. package/plugins/vite/transform-codegen.js +55 -55
  557. package/plugins/vite/vite-4.4-hack.js +31 -31
  558. package/src/engine/api.ts +54 -54
  559. package/src/engine/assets/index.ts +4 -4
  560. package/src/engine/codegen/register_types.ts +441 -441
  561. package/src/engine/debug/debug.ts +29 -29
  562. package/src/engine/debug/debug_console.ts +213 -213
  563. package/src/engine/debug/debug_overlay.ts +283 -283
  564. package/src/engine/engine.ts +13 -13
  565. package/src/engine/engine_addressables.ts +494 -494
  566. package/src/engine/engine_application.ts +53 -53
  567. package/src/engine/engine_assetdatabase.ts +383 -383
  568. package/src/engine/engine_camera.ts +32 -32
  569. package/src/engine/engine_components.ts +266 -266
  570. package/src/engine/engine_components_internal.ts +42 -42
  571. package/src/engine/engine_constants.ts +42 -42
  572. package/src/engine/engine_context.ts +1386 -1386
  573. package/src/engine/engine_context_registry.ts +103 -103
  574. package/src/engine/engine_coroutine.ts +24 -24
  575. package/src/engine/engine_create_objects.ts +39 -39
  576. package/src/engine/engine_default_parameters.ts +3 -3
  577. package/src/engine/engine_editor-sync.ts +29 -29
  578. package/src/engine/engine_element.ts +592 -592
  579. package/src/engine/engine_element_attributes.ts +61 -61
  580. package/src/engine/engine_element_extras.ts +16 -16
  581. package/src/engine/engine_element_loading.ts +341 -341
  582. package/src/engine/engine_element_overlay.ts +160 -160
  583. package/src/engine/engine_fileloader.js +8 -8
  584. package/src/engine/engine_gameobject.ts +621 -621
  585. package/src/engine/engine_generic_utils.js +13 -13
  586. package/src/engine/engine_gizmos.ts +321 -321
  587. package/src/engine/engine_gltf.ts +30 -30
  588. package/src/engine/engine_gltf_builtin_components.ts +350 -350
  589. package/src/engine/engine_hot_reload.ts +196 -196
  590. package/src/engine/engine_input.ts +879 -879
  591. package/src/engine/engine_input_utils.ts +23 -23
  592. package/src/engine/engine_instancing.ts +42 -42
  593. package/src/engine/engine_license.ts +413 -413
  594. package/src/engine/engine_lifecycle_api.ts +29 -29
  595. package/src/engine/engine_lifecycle_functions_internal.ts +36 -36
  596. package/src/engine/engine_lightdata.ts +113 -113
  597. package/src/engine/engine_loaders.ts +77 -77
  598. package/src/engine/engine_mainloop_utils.ts +431 -431
  599. package/src/engine/engine_math.ts +174 -174
  600. package/src/engine/engine_networking.ts +742 -742
  601. package/src/engine/engine_networking_auto.ts +373 -373
  602. package/src/engine/engine_networking_files.ts +206 -206
  603. package/src/engine/engine_networking_files_default_components.ts +54 -54
  604. package/src/engine/engine_networking_instantiate.ts +362 -362
  605. package/src/engine/engine_networking_peer.ts +158 -158
  606. package/src/engine/engine_networking_streams.ts +489 -489
  607. package/src/engine/engine_networking_types.ts +18 -18
  608. package/src/engine/engine_networking_utils.ts +23 -23
  609. package/src/engine/engine_networking_websocket.ts +2 -2
  610. package/src/engine/engine_patcher.ts +199 -199
  611. package/src/engine/engine_physics.ts +287 -287
  612. package/src/engine/engine_physics.types.ts +43 -43
  613. package/src/engine/engine_physics_rapier.ts +1385 -1385
  614. package/src/engine/engine_playerview.ts +79 -79
  615. package/src/engine/engine_scenelighting.ts +313 -313
  616. package/src/engine/engine_scenetools.ts +242 -242
  617. package/src/engine/engine_serialization.ts +6 -6
  618. package/src/engine/engine_serialization_builtin_serializer.ts +415 -415
  619. package/src/engine/engine_serialization_core.ts +680 -680
  620. package/src/engine/engine_serialization_decorator.ts +68 -68
  621. package/src/engine/engine_setup.ts +1 -1
  622. package/src/engine/engine_shaders.ts +242 -242
  623. package/src/engine/engine_shims.ts +28 -28
  624. package/src/engine/engine_texture.ts +70 -70
  625. package/src/engine/engine_three_utils.ts +382 -382
  626. package/src/engine/engine_time.ts +55 -55
  627. package/src/engine/engine_types.ts +489 -489
  628. package/src/engine/engine_typestore.ts +41 -41
  629. package/src/engine/engine_util_decorator.ts +134 -134
  630. package/src/engine/engine_utils.ts +605 -605
  631. package/src/engine/engine_utils_screenshot.ts +84 -84
  632. package/src/engine/engine_web_api.ts +119 -119
  633. package/src/engine/extensions/EXT_texture_exr.ts +49 -49
  634. package/src/engine/extensions/NEEDLE_animator_controller_model.ts +193 -193
  635. package/src/engine/extensions/NEEDLE_components.ts +250 -250
  636. package/src/engine/extensions/NEEDLE_gameobject_data.ts +82 -82
  637. package/src/engine/extensions/NEEDLE_lighting_settings.ts +210 -210
  638. package/src/engine/extensions/NEEDLE_lightmaps.ts +130 -130
  639. package/src/engine/extensions/NEEDLE_persistent_assets.ts +75 -75
  640. package/src/engine/extensions/NEEDLE_progressive.ts +412 -412
  641. package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
  642. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +618 -618
  643. package/src/engine/extensions/extension_resolver.ts +4 -4
  644. package/src/engine/extensions/extension_utils.ts +149 -149
  645. package/src/engine/extensions/extensions.ts +118 -118
  646. package/src/engine/extensions/index.ts +4 -4
  647. package/src/engine/extensions/usage_tracker.ts +95 -95
  648. package/src/engine/js-extensions/Camera.ts +34 -34
  649. package/src/engine/js-extensions/Layers.ts +19 -19
  650. package/src/engine/js-extensions/index.ts +1 -1
  651. package/src/engine/shaders/shaderData.ts +67 -67
  652. package/src/engine/tests/test_utils.ts +63 -63
  653. package/src/engine-components/AlignmentConstraint.ts +35 -35
  654. package/src/engine-components/Animation.ts +345 -345
  655. package/src/engine-components/AnimationCurve.ts +83 -83
  656. package/src/engine-components/AnimationUtils.ts +117 -117
  657. package/src/engine-components/Animator.ts +243 -243
  658. package/src/engine-components/AnimatorController.ts +1020 -1020
  659. package/src/engine-components/AudioListener.ts +32 -32
  660. package/src/engine-components/AudioSource.ts +419 -419
  661. package/src/engine-components/AvatarLoader.ts +204 -204
  662. package/src/engine-components/AxesHelper.ts +33 -33
  663. package/src/engine-components/BasicIKConstraint.ts +53 -53
  664. package/src/engine-components/BoxCollider.ts +1 -1
  665. package/src/engine-components/BoxHelperComponent.ts +100 -100
  666. package/src/engine-components/Camera.ts +454 -454
  667. package/src/engine-components/CameraUtils.ts +89 -89
  668. package/src/engine-components/CharacterController.ts +243 -243
  669. package/src/engine-components/Collider.ts +160 -160
  670. package/src/engine-components/Component.ts +670 -670
  671. package/src/engine-components/ContactShadows.ts +265 -265
  672. package/src/engine-components/DeleteBox.ts +35 -35
  673. package/src/engine-components/DeviceFlag.ts +42 -42
  674. package/src/engine-components/DragControls.ts +574 -574
  675. package/src/engine-components/DropListener.ts +112 -112
  676. package/src/engine-components/Duplicatable.ts +146 -146
  677. package/src/engine-components/EventList.ts +125 -125
  678. package/src/engine-components/EventTrigger.ts +47 -47
  679. package/src/engine-components/EventType.ts +87 -87
  680. package/src/engine-components/FlyControls.ts +31 -31
  681. package/src/engine-components/Fog.ts +59 -59
  682. package/src/engine-components/Gizmos.ts +52 -52
  683. package/src/engine-components/GridHelper.ts +40 -40
  684. package/src/engine-components/GroundProjection.ts +97 -97
  685. package/src/engine-components/Interactable.ts +18 -18
  686. package/src/engine-components/Joints.ts +51 -51
  687. package/src/engine-components/LODGroup.ts +145 -145
  688. package/src/engine-components/Light.ts +493 -493
  689. package/src/engine-components/LookAtConstraint.ts +11 -11
  690. package/src/engine-components/NestedGltf.ts +70 -70
  691. package/src/engine-components/Networking.ts +72 -72
  692. package/src/engine-components/OffsetConstraint.ts +59 -59
  693. package/src/engine-components/OrbitControls.ts +653 -653
  694. package/src/engine-components/ParticleSystem.ts +1192 -1192
  695. package/src/engine-components/ParticleSystemModules.ts +1481 -1481
  696. package/src/engine-components/ParticleSystemSubEmitter.ts +110 -110
  697. package/src/engine-components/PlayerColor.ts +93 -93
  698. package/src/engine-components/ReflectionProbe.ts +192 -192
  699. package/src/engine-components/Renderer.ts +1125 -1125
  700. package/src/engine-components/RendererLightmap.ts +145 -145
  701. package/src/engine-components/RigidBody.ts +453 -453
  702. package/src/engine-components/SceneSwitcher.ts +594 -594
  703. package/src/engine-components/ScreenCapture.ts +437 -437
  704. package/src/engine-components/ShadowCatcher.ts +149 -149
  705. package/src/engine-components/Skybox.ts +281 -281
  706. package/src/engine-components/SmoothFollow.ts +57 -57
  707. package/src/engine-components/SpatialTrigger.ts +142 -142
  708. package/src/engine-components/SpectatorCamera.ts +675 -675
  709. package/src/engine-components/SphereCollider.ts +1 -1
  710. package/src/engine-components/SpriteRenderer.ts +244 -244
  711. package/src/engine-components/SyncedCamera.ts +208 -208
  712. package/src/engine-components/SyncedRoom.ts +166 -166
  713. package/src/engine-components/SyncedTransform.ts +336 -336
  714. package/src/engine-components/TestRunner.ts +114 -114
  715. package/src/engine-components/TransformGizmo.ts +157 -157
  716. package/src/engine-components/VideoPlayer.ts +831 -831
  717. package/src/engine-components/Voip.ts +214 -214
  718. package/src/engine-components/XRFlag.ts +138 -138
  719. package/src/engine-components/api.ts +22 -22
  720. package/src/engine-components/avatar/AvatarBlink_Simple.ts +67 -67
  721. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +68 -68
  722. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +136 -136
  723. package/src/engine-components/avatar/Avatar_MouthShapes.ts +81 -81
  724. package/src/engine-components/avatar/Avatar_MustacheShake.ts +28 -28
  725. package/src/engine-components/codegen/components.ts +216 -216
  726. package/src/engine-components/debug/LogStats.ts +21 -21
  727. package/src/engine-components/export/gltf/GltfExport.ts +231 -231
  728. package/src/engine-components/export/usdz/Extension.ts +11 -11
  729. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1773 -1773
  730. package/src/engine-components/export/usdz/USDZExporter.ts +477 -477
  731. package/src/engine-components/export/usdz/extensions/Animation.ts +774 -774
  732. package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
  733. package/src/engine-components/export/usdz/extensions/USDZText.ts +287 -287
  734. package/src/engine-components/export/usdz/extensions/USDZUI.ts +119 -119
  735. package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +98 -98
  736. package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +67 -67
  737. package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +202 -202
  738. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +963 -963
  739. package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +517 -517
  740. package/src/engine-components/export/usdz/index.ts +2 -2
  741. package/src/engine-components/export/usdz/utils/animationutils.ts +100 -100
  742. package/src/engine-components/export/usdz/utils/quicklook.ts +42 -42
  743. package/src/engine-components/export/usdz/utils/timeutils.ts +19 -19
  744. package/src/engine-components/js-extensions/ExtensionUtils.ts +81 -81
  745. package/src/engine-components/js-extensions/Object3D.ts +181 -181
  746. package/src/engine-components/js-extensions/RGBAColor.ts +54 -54
  747. package/src/engine-components/js-extensions/Vector.ts +16 -16
  748. package/src/engine-components/js-extensions/index.ts +2 -2
  749. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +51 -51
  750. package/src/engine-components/postprocessing/Effects/Bloom.ts +76 -76
  751. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +35 -35
  752. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +96 -96
  753. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +93 -93
  754. package/src/engine-components/postprocessing/Effects/Pixelation.ts +26 -26
  755. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +84 -84
  756. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +98 -98
  757. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +55 -55
  758. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +54 -54
  759. package/src/engine-components/postprocessing/Effects/Vignette.ts +54 -54
  760. package/src/engine-components/postprocessing/PostProcessingEffect.ts +148 -148
  761. package/src/engine-components/postprocessing/PostProcessingHandler.ts +232 -232
  762. package/src/engine-components/postprocessing/Volume.ts +216 -216
  763. package/src/engine-components/postprocessing/VolumeParameter.ts +92 -92
  764. package/src/engine-components/postprocessing/VolumeProfile.ts +40 -40
  765. package/src/engine-components/postprocessing/index.ts +3 -3
  766. package/src/engine-components/timeline/PlayableDirector.ts +666 -666
  767. package/src/engine-components/timeline/SignalAsset.ts +138 -138
  768. package/src/engine-components/timeline/TimelineModels.ts +93 -93
  769. package/src/engine-components/timeline/TimelineTracks.ts +906 -906
  770. package/src/engine-components/timeline/index.ts +3 -3
  771. package/src/engine-components/ui/BaseUIComponent.ts +195 -195
  772. package/src/engine-components/ui/Button.ts +283 -283
  773. package/src/engine-components/ui/Canvas.ts +390 -390
  774. package/src/engine-components/ui/CanvasGroup.ts +49 -49
  775. package/src/engine-components/ui/EventSystem.ts +736 -736
  776. package/src/engine-components/ui/Graphic.ts +255 -255
  777. package/src/engine-components/ui/Image.ts +102 -102
  778. package/src/engine-components/ui/InputField.ts +290 -290
  779. package/src/engine-components/ui/Interfaces.ts +57 -57
  780. package/src/engine-components/ui/Layout.ts +322 -322
  781. package/src/engine-components/ui/Outline.ts +12 -12
  782. package/src/engine-components/ui/PointerEvents.ts +118 -118
  783. package/src/engine-components/ui/RaycastUtils.ts +68 -68
  784. package/src/engine-components/ui/Raycaster.ts +73 -73
  785. package/src/engine-components/ui/RectTransform.ts +364 -364
  786. package/src/engine-components/ui/SpatialHtml.ts +63 -63
  787. package/src/engine-components/ui/Text.ts +572 -572
  788. package/src/engine-components/ui/Utils.ts +110 -110
  789. package/src/engine-components/utils/LookAt.ts +65 -65
  790. package/src/engine-components/utils/OpenURL.ts +118 -118
  791. package/src/engine-components/webxr/WebARCameraBackground.ts +224 -224
  792. package/src/engine-components/webxr/WebARSessionRoot.ts +446 -446
  793. package/src/engine-components/webxr/WebXR.ts +761 -761
  794. package/src/engine-components/webxr/WebXRAvatar.ts +356 -356
  795. package/src/engine-components/webxr/WebXRController.ts +1168 -1168
  796. package/src/engine-components/webxr/WebXRGrabRendering.ts +150 -150
  797. package/src/engine-components/webxr/WebXRImageTracking.ts +371 -371
  798. package/src/engine-components/webxr/WebXRPlaneTracking.ts +429 -429
  799. package/src/engine-components/webxr/WebXRRig.ts +21 -21
  800. package/src/engine-components/webxr/WebXRSync.ts +463 -463
  801. package/src/engine-components/webxr/index.ts +3 -3
  802. package/src/engine-components-experimental/Presentation.ts +12 -12
  803. package/src/engine-components-experimental/networking/PlayerSync.ts +217 -217
  804. package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
  805. package/src/engine-schemes/COMPILE_TS.bat +11 -11
  806. package/src/engine-schemes/schemes.ts +27 -27
  807. package/src/engine-schemes/synced-camera-model.ts +92 -92
  808. package/src/engine-schemes/synced-transform-model.ts +90 -90
  809. package/src/engine-schemes/syncedCamera.fbs +10 -10
  810. package/src/engine-schemes/transform.ts +50 -50
  811. package/src/engine-schemes/transforms.fbs +25 -25
  812. package/src/engine-schemes/vec.fbs +19 -19
  813. package/src/engine-schemes/vec2.ts +33 -33
  814. package/src/engine-schemes/vec3.ts +38 -38
  815. package/src/engine-schemes/vec4.ts +43 -43
  816. package/src/engine-schemes/vr-user-state-buffer.ts +138 -138
  817. package/src/engine-schemes/vrUserStateBuffer.fbs +16 -16
  818. package/src/include/draco/draco_decoder.js +34 -34
  819. package/src/include/draco/draco_wasm_wrapper.js +117 -117
  820. package/src/include/ktx2/basis_transcoder.js +21 -21
  821. package/src/include/needle/arial-msdf.json +1471 -1471
  822. package/src/include/three/ARButton.js +231 -231
  823. package/src/include/three/DragControls.js +231 -231
  824. package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
  825. package/src/include/three/VRButton.js +194 -194
  826. package/src/needle-engine.ts +55 -55
  827. package/src/engine/dist/api.js +0 -73
  828. package/src/engine/dist/api.js.meta +0 -7
  829. package/src/engine/dist/engine_networking_streams.js +0 -474
  830. package/src/engine/dist/engine_networking_streams.js.meta +0 -7
  831. package/src/engine-schemes/dist/api.js +0 -17
  832. package/src/engine-schemes/dist/api.js.meta +0 -7
  833. package/src/engine-schemes/dist/schemes.js +0 -25
  834. package/src/engine-schemes/dist/schemes.js.meta +0 -7
  835. package/src/engine-schemes/dist/synced-camera-model.js +0 -74
  836. package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
  837. package/src/engine-schemes/dist/synced-transform-model.js +0 -73
  838. package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
  839. package/src/engine-schemes/dist/transform.js +0 -46
  840. package/src/engine-schemes/dist/transform.js.meta +0 -7
  841. package/src/engine-schemes/dist/vec2.js +0 -32
  842. package/src/engine-schemes/dist/vec2.js.meta +0 -7
  843. package/src/engine-schemes/dist/vec3.js +0 -36
  844. package/src/engine-schemes/dist/vec3.js.meta +0 -7
  845. package/src/engine-schemes/dist/vec4.js +0 -40
  846. package/src/engine-schemes/dist/vec4.js.meta +0 -7
  847. package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
  848. package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
  849. package/src/engine-schemes/flatc.exe +0 -0
@@ -1,793 +1,793 @@
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 { serializable } from "../engine/engine_serialization_decorator.js";
9
- import { ShaderMaterial, SRGBColorSpace, Texture, Vector2, Vector4, VideoTexture } from "three";
10
- import { awaitInput } from "../engine/engine_input_utils.js";
11
- import { getParam } from "../engine/engine_utils.js";
12
- import { Renderer } from "./Renderer.js";
13
- import { getWorldScale } from "../engine/engine_three_utils.js";
14
- import { ObjectUtils, PrimitiveType } from "../engine/engine_create_objects.js";
15
- import { isDevEnvironment } from "../engine/debug/index.js";
16
- const debug = getParam("debugvideo");
17
- export var AspectMode;
18
- (function (AspectMode) {
19
- AspectMode[AspectMode["None"] = 0] = "None";
20
- AspectMode[AspectMode["AdjustHeight"] = 1] = "AdjustHeight";
21
- AspectMode[AspectMode["AdjustWidth"] = 2] = "AdjustWidth";
22
- })(AspectMode || (AspectMode = {}));
23
- export var VideoSource;
24
- (function (VideoSource) {
25
- /// <summary>
26
- /// <para>Use the current clip as the video content source.</para>
27
- /// </summary>
28
- VideoSource[VideoSource["VideoClip"] = 0] = "VideoClip";
29
- /// <summary>
30
- /// <para>Use the current URL as the video content source.</para>
31
- /// </summary>
32
- VideoSource[VideoSource["Url"] = 1] = "Url";
33
- })(VideoSource || (VideoSource = {}));
34
- export var VideoAudioOutputMode;
35
- (function (VideoAudioOutputMode) {
36
- VideoAudioOutputMode[VideoAudioOutputMode["None"] = 0] = "None";
37
- VideoAudioOutputMode[VideoAudioOutputMode["AudioSource"] = 1] = "AudioSource";
38
- VideoAudioOutputMode[VideoAudioOutputMode["Direct"] = 2] = "Direct";
39
- VideoAudioOutputMode[VideoAudioOutputMode["APIOnly"] = 3] = "APIOnly";
40
- })(VideoAudioOutputMode || (VideoAudioOutputMode = {}));
41
- export var VideoRenderMode;
42
- (function (VideoRenderMode) {
43
- VideoRenderMode[VideoRenderMode["CameraFarPlane"] = 0] = "CameraFarPlane";
44
- VideoRenderMode[VideoRenderMode["CameraNearPlane"] = 1] = "CameraNearPlane";
45
- VideoRenderMode[VideoRenderMode["RenderTexture"] = 2] = "RenderTexture";
46
- VideoRenderMode[VideoRenderMode["MaterialOverride"] = 3] = "MaterialOverride";
47
- })(VideoRenderMode || (VideoRenderMode = {}));
48
- export class VideoPlayer extends Behaviour {
49
- playOnAwake = true;
50
- aspectMode = AspectMode.None;
51
- clip = null;
52
- renderMode;
53
- targetMaterialProperty;
54
- targetMaterialRenderer;
55
- targetTexture;
56
- time = 0;
57
- _playbackSpeed = 1;
58
- get playbackSpeed() {
59
- return this._videoElement?.playbackRate ?? this._playbackSpeed;
60
- }
61
- set playbackSpeed(val) {
62
- this._playbackSpeed = val;
63
- if (this._videoElement)
64
- this._videoElement.playbackRate = val;
65
- }
66
- _isLooping = false;
67
- get isLooping() {
68
- return this._videoElement?.loop ?? this._isLooping;
69
- }
70
- set isLooping(val) {
71
- this._isLooping = val;
72
- if (this._videoElement)
73
- this._videoElement.loop = val;
74
- }
75
- get currentTime() {
76
- return this._videoElement?.currentTime ?? this.time;
77
- }
78
- set currentTime(val) {
79
- if (this._videoElement) {
80
- this._videoElement.currentTime = val;
81
- }
82
- else
83
- this.time = val;
84
- }
85
- get isPlaying() {
86
- const video = this._videoElement;
87
- if (video) {
88
- if (video.currentTime > 0 && !video.paused && !video.ended
89
- && video.readyState > video.HAVE_CURRENT_DATA)
90
- return true;
91
- else if (video.srcObject) {
92
- const stream = video.srcObject;
93
- if (stream.active)
94
- return true;
95
- }
96
- }
97
- return false;
98
- }
99
- get crossOrigin() {
100
- return this._videoElement?.crossOrigin ?? this._crossOrigin;
101
- }
102
- set crossOrigin(val) {
103
- this._crossOrigin = val;
104
- if (this._videoElement) {
105
- if (val !== null)
106
- this._videoElement.setAttribute("crossorigin", val);
107
- else
108
- this._videoElement.removeAttribute("crossorigin");
109
- }
110
- }
111
- get videoMaterial() {
112
- return this._videoMaterial;
113
- }
114
- get videoTexture() {
115
- return this._videoTexture;
116
- }
117
- get videoElement() {
118
- return this._videoElement;
119
- }
120
- get muted() {
121
- return this._videoElement?.muted ?? this._muted;
122
- }
123
- set muted(val) {
124
- this._muted = val;
125
- if (this._videoElement)
126
- this._videoElement.muted = val;
127
- }
128
- _muted = false;
129
- set audioOutputMode(mode) {
130
- if (mode !== this._audioOutputMode) {
131
- if (mode === VideoAudioOutputMode.AudioSource && isDevEnvironment())
132
- console.warn("VideoAudioOutputMode.AudioSource is not yet implemented");
133
- this._audioOutputMode = mode;
134
- this.updateVideoElementSettings();
135
- }
136
- }
137
- get audioOutputMode() { return this._audioOutputMode; }
138
- _audioOutputMode = VideoAudioOutputMode.Direct;
139
- /** Set this to false to pause video playback while the tab is not active */
140
- playInBackground = true;
141
- _crossOrigin = "anonymous";
142
- // set a default src, this should not be undefined
143
- source = VideoSource.Url;
144
- url = null;
145
- _videoElement = null;
146
- _videoTexture = null;
147
- _videoMaterial = null;
148
- _isPlaying = false;
149
- wasPlaying = false;
150
- setVideo(video) {
151
- this.clip = video;
152
- this.source = VideoSource.VideoClip;
153
- if (!this._videoElement)
154
- this.create(true);
155
- else {
156
- // TODO: how to prevent interruption error when another video is already playing
157
- this._videoElement.srcObject = video;
158
- if (this._isPlaying)
159
- this.play();
160
- this.updateAspect();
161
- }
162
- }
163
- setClipURL(url) {
164
- if (this.url === url)
165
- return;
166
- // console.log("SET URL", url);
167
- this.url = url;
168
- this.source = VideoSource.Url;
169
- if (debug)
170
- console.log("set url", url);
171
- if (!this._videoElement)
172
- this.create(true);
173
- else {
174
- this._videoElement.src = url;
175
- if (this._isPlaying) {
176
- this.stop();
177
- this.play();
178
- }
179
- }
180
- }
181
- onEnable() {
182
- if (debug)
183
- console.log("VideoPlayer.onEnable", this);
184
- window.addEventListener('visibilitychange', this.visibilityChanged);
185
- if (this.playOnAwake === true) {
186
- this.create(true);
187
- }
188
- if (this.screenspace) {
189
- this._overlay?.start();
190
- }
191
- else
192
- this._overlay?.stop();
193
- }
194
- onDisable() {
195
- window.removeEventListener('visibilitychange', this.visibilityChanged);
196
- this._overlay?.stop();
197
- this.pause();
198
- }
199
- visibilityChanged = (_) => {
200
- switch (document.visibilityState) {
201
- case "hidden":
202
- if (!this.playInBackground) {
203
- this.wasPlaying = this._isPlaying;
204
- this.pause();
205
- }
206
- break;
207
- case "visible":
208
- if (this.wasPlaying && !this._isPlaying)
209
- this.play();
210
- break;
211
- }
212
- };
213
- onDestroy() {
214
- if (this._videoElement) {
215
- this._videoElement.parentElement?.removeChild(this._videoElement);
216
- this._videoElement = null;
217
- }
218
- if (this._videoTexture) {
219
- this._videoTexture.dispose();
220
- this._videoTexture = null;
221
- }
222
- }
223
- _receivedInput = false;
224
- constructor() {
225
- super();
226
- awaitInput(() => {
227
- this._receivedInput = true;
228
- this.updateVideoElementSettings();
229
- });
230
- this._targetObjects = [];
231
- if (getParam("videoscreenspace")) {
232
- window.addEventListener("keydown", evt => {
233
- if (evt.key === "f") {
234
- this.screenspace = !this.screenspace;
235
- }
236
- });
237
- }
238
- }
239
- play() {
240
- if (!this._videoElement)
241
- this.create(false);
242
- if (!this._videoElement)
243
- return;
244
- if (this._isPlaying && !this._videoElement?.ended && !this._videoElement?.paused)
245
- return;
246
- this._isPlaying = true;
247
- if (!this._receivedInput)
248
- this._videoElement.muted = true;
249
- this.updateVideoElementSettings();
250
- this._videoElement.currentTime = this.time;
251
- this._videoElement.play().catch(err => {
252
- console.log(err);
253
- // https://developer.chrome.com/blog/play-request-was-interrupted/
254
- if (debug)
255
- console.error("Error playing video", err, "CODE=" + err.code, this.videoElement?.src, this);
256
- setTimeout(() => {
257
- if (this._isPlaying && !this.destroyed && this.activeAndEnabled)
258
- this.play();
259
- }, 1000);
260
- });
261
- if (debug)
262
- console.log("play", this._videoElement, this.time);
263
- }
264
- stop() {
265
- this._isPlaying = false;
266
- this.time = 0;
267
- if (!this._videoElement)
268
- return;
269
- this._videoElement.currentTime = 0;
270
- this._videoElement.pause();
271
- if (debug)
272
- console.log("STOP", this);
273
- }
274
- pause() {
275
- this.time = this._videoElement?.currentTime ?? 0;
276
- this._isPlaying = false;
277
- this._videoElement?.pause();
278
- if (debug)
279
- console.log("PAUSE", this, this.currentTime);
280
- }
281
- create(playAutomatically) {
282
- let src;
283
- switch (this.source) {
284
- case VideoSource.VideoClip:
285
- src = this.clip;
286
- break;
287
- case VideoSource.Url:
288
- src = this.url;
289
- if (!src?.length && typeof this.clip === "string")
290
- src = this.clip;
291
- break;
292
- }
293
- if (!src) {
294
- if (debug)
295
- console.warn("No video source set", this);
296
- return;
297
- }
298
- if (!this._videoElement) {
299
- if (debug)
300
- console.warn("Create VideoElement", this);
301
- this._videoElement = this.createVideoElement();
302
- this.context.domElement?.prepend(this._videoElement);
303
- // hide it because otherwise it would overlay the website with default css
304
- this.updateVideoElementStyles();
305
- }
306
- if (typeof src === "string") {
307
- if (debug)
308
- console.log("Set Video src", src);
309
- this._videoElement.src = src;
310
- // Nor sure why we did this here, but with this code the video does not restart when being paused / enable toggled
311
- // const str = this._videoElement["captureStream"]?.call(this._videoElement);
312
- // this.clip = str;
313
- }
314
- else {
315
- if (debug)
316
- console.log("Set Video srcObject", src);
317
- this._videoElement.srcObject = src;
318
- }
319
- if (!this._videoTexture)
320
- this._videoTexture = new VideoTexture(this._videoElement);
321
- this._videoTexture.flipY = false;
322
- this._videoTexture.colorSpace = SRGBColorSpace;
323
- this.handleBeginPlaying(playAutomatically);
324
- if (debug)
325
- console.log(this, playAutomatically);
326
- }
327
- updateAspect() {
328
- if (this.aspectMode === AspectMode.None)
329
- return;
330
- this.startCoroutine(this.updateAspectImpl());
331
- }
332
- _overlay = null;
333
- get screenspace() {
334
- return this._overlay?.enabled ?? false;
335
- }
336
- set screenspace(val) {
337
- if (val) {
338
- if (!this._videoTexture)
339
- return;
340
- if (!this._overlay)
341
- this._overlay = new VideoOverlay(this.context);
342
- this._overlay.add(this._videoTexture);
343
- }
344
- else
345
- this._overlay?.remove(this._videoTexture);
346
- if (this._overlay)
347
- this._overlay.enabled = val;
348
- }
349
- _targetObjects;
350
- createVideoElement() {
351
- const video = document.createElement("video");
352
- if (this._crossOrigin)
353
- video.setAttribute("crossorigin", this._crossOrigin);
354
- if (debug)
355
- console.log("created video element", video);
356
- return video;
357
- }
358
- handleBeginPlaying(playAutomatically) {
359
- if (!this.enabled)
360
- return;
361
- if (!this._videoElement)
362
- return;
363
- this._targetObjects.length = 0;
364
- let target = this.gameObject;
365
- switch (this.renderMode) {
366
- case VideoRenderMode.MaterialOverride:
367
- target = this.targetMaterialRenderer?.gameObject;
368
- if (!target)
369
- target = GameObject.getComponent(this.gameObject, Renderer)?.gameObject;
370
- break;
371
- case VideoRenderMode.RenderTexture:
372
- console.error("VideoPlayer renderTexture not implemented yet. Please use material override instead");
373
- return;
374
- }
375
- if (!target) {
376
- console.error("Missing target for video material renderer", this.name, VideoRenderMode[this.renderMode], this);
377
- return;
378
- }
379
- const mat = target["material"];
380
- if (mat) {
381
- this._targetObjects.push(target);
382
- if (mat !== this._videoMaterial) {
383
- this._videoMaterial = mat.clone();
384
- target["material"] = this._videoMaterial;
385
- }
386
- const fieldName = "map";
387
- const videoMaterial = this._videoMaterial;
388
- if (!this.targetMaterialProperty) {
389
- videoMaterial[fieldName] = this._videoTexture;
390
- }
391
- else {
392
- switch (this.targetMaterialProperty) {
393
- default:
394
- videoMaterial[fieldName] = this._videoTexture;
395
- break;
396
- // doesnt render:
397
- // case "emissiveTexture":
398
- // console.log(this.videoMaterial);
399
- // // (this.videoMaterial as any).map = this.videoTexture;
400
- // (this.videoMaterial as any).emissive?.set(1,1,1);// = this.videoTexture;
401
- // (this.videoMaterial as any).emissiveMap = this.videoTexture;
402
- // break;
403
- }
404
- }
405
- }
406
- else {
407
- console.warn("Can not play video, no material found, this might be a multimaterial case which is not supported yet");
408
- return;
409
- }
410
- this.updateVideoElementSettings();
411
- this.updateVideoElementStyles();
412
- if (playAutomatically)
413
- this.play();
414
- }
415
- updateVideoElementSettings() {
416
- if (!this._videoElement)
417
- return;
418
- this._videoElement.loop = this._isLooping;
419
- this._videoElement.currentTime = this.currentTime;
420
- this._videoElement.playbackRate = this._playbackSpeed;
421
- // dont open in fullscreen on ios
422
- this._videoElement.playsInline = true;
423
- let muted = !this._receivedInput || this.audioOutputMode === VideoAudioOutputMode.None;
424
- if (!muted && this._muted)
425
- muted = true;
426
- this._videoElement.muted = muted;
427
- if (this.playOnAwake)
428
- this._videoElement.autoplay = true;
429
- }
430
- updateVideoElementStyles() {
431
- if (!this._videoElement)
432
- return;
433
- // set style here so preview frame is rendered
434
- // set display and selectable because otherwise is interfers with input/focus e.g. breaks orbit control
435
- this._videoElement.style.userSelect = "none";
436
- this._videoElement.style.visibility = "hidden";
437
- this._videoElement.style.display = "none";
438
- this.updateAspect();
439
- }
440
- _updateAspectRoutineId = -1;
441
- *updateAspectImpl() {
442
- const id = ++this._updateAspectRoutineId;
443
- const lastAspect = undefined;
444
- const stream = this.clip;
445
- while (id === this._updateAspectRoutineId && this.aspectMode !== AspectMode.None && this.clip && stream === this.clip && this._isPlaying) {
446
- if (!stream || typeof stream === "string") {
447
- return;
448
- }
449
- let aspect = undefined;
450
- for (const track of stream.getVideoTracks()) {
451
- const settings = track.getSettings();
452
- if (settings && settings.width && settings.height) {
453
- aspect = settings.width / settings.height;
454
- break;
455
- }
456
- // on firefox capture canvas stream works but looks like
457
- // the canvas stream track doesnt contain settings?!!?
458
- else {
459
- aspect = this.context.renderer.domElement.clientWidth / this.context.renderer.domElement.clientHeight;
460
- }
461
- }
462
- if (aspect === undefined) {
463
- for (let i = 0; i < 10; i++)
464
- yield;
465
- if (!this.isPlaying)
466
- break;
467
- continue;
468
- }
469
- if (lastAspect === aspect) {
470
- yield;
471
- continue;
472
- }
473
- for (const obj of this._targetObjects) {
474
- let worldAspect = 1;
475
- if (obj.parent) {
476
- const parentScale = getWorldScale(obj.parent);
477
- worldAspect = parentScale.x / parentScale.y;
478
- }
479
- switch (this.aspectMode) {
480
- case AspectMode.AdjustHeight:
481
- obj.scale.y = 1 / aspect * obj.scale.x * worldAspect;
482
- break;
483
- case AspectMode.AdjustWidth:
484
- obj.scale.x = aspect * obj.scale.y * worldAspect;
485
- break;
486
- }
487
- }
488
- for (let i = 0; i < 3; i++)
489
- yield;
490
- }
491
- }
492
- }
493
- __decorate([
494
- serializable()
495
- ], VideoPlayer.prototype, "playOnAwake", void 0);
496
- __decorate([
497
- serializable()
498
- ], VideoPlayer.prototype, "aspectMode", void 0);
499
- __decorate([
500
- serializable(URL)
501
- ], VideoPlayer.prototype, "clip", void 0);
502
- __decorate([
503
- serializable()
504
- ], VideoPlayer.prototype, "renderMode", void 0);
505
- __decorate([
506
- serializable()
507
- ], VideoPlayer.prototype, "targetMaterialProperty", void 0);
508
- __decorate([
509
- serializable(Renderer)
510
- ], VideoPlayer.prototype, "targetMaterialRenderer", void 0);
511
- __decorate([
512
- serializable(Texture)
513
- ], VideoPlayer.prototype, "targetTexture", void 0);
514
- __decorate([
515
- serializable()
516
- ], VideoPlayer.prototype, "time", void 0);
517
- __decorate([
518
- serializable()
519
- ], VideoPlayer.prototype, "playbackSpeed", null);
520
- __decorate([
521
- serializable()
522
- ], VideoPlayer.prototype, "isLooping", null);
523
- __decorate([
524
- serializable()
525
- ], VideoPlayer.prototype, "audioOutputMode", null);
526
- class VideoOverlay {
527
- context;
528
- constructor(context) {
529
- this.context = context;
530
- this._input = new VideoOverlayInput(this);
531
- }
532
- get enabled() {
533
- return this._isInScreenspaceMode;
534
- }
535
- set enabled(val) {
536
- if (val)
537
- this.start();
538
- else
539
- this.stop();
540
- }
541
- add(video) {
542
- if (this._videos.indexOf(video) === -1) {
543
- this._videos.push(video);
544
- }
545
- }
546
- remove(video) {
547
- if (!video)
548
- return;
549
- const index = this._videos.indexOf(video);
550
- if (index >= 0) {
551
- this._videos.splice(index, 1);
552
- }
553
- }
554
- start() {
555
- if (this._isInScreenspaceMode)
556
- return;
557
- if (this._videos.length < 0)
558
- return;
559
- const texture = this._videos[this._videos.length - 1];
560
- if (!texture)
561
- return;
562
- this._isInScreenspaceMode = true;
563
- if (!this._screenspaceModeQuad) {
564
- this._screenspaceModeQuad = ObjectUtils.createPrimitive(PrimitiveType.Quad, {
565
- material: new ScreenspaceTexture(texture)
566
- });
567
- if (!this._screenspaceModeQuad)
568
- return;
569
- this._screenspaceModeQuad.geometry.scale(2, 2, 2);
570
- }
571
- const quad = this._screenspaceModeQuad;
572
- this.context.scene.add(quad);
573
- this.updateScreenspaceMaterialUniforms();
574
- const mat = quad.material;
575
- mat?.reset();
576
- this._input?.enable(mat);
577
- }
578
- stop() {
579
- this._isInScreenspaceMode = false;
580
- if (this._screenspaceModeQuad) {
581
- this._input?.disable();
582
- this._screenspaceModeQuad.removeFromParent();
583
- }
584
- }
585
- updateScreenspaceMaterialUniforms() {
586
- const mat = this._screenspaceModeQuad?.material;
587
- if (!mat)
588
- return;
589
- // mat.videoAspect = this.videoTexture?.image?.width / this.videoTexture?.image?.height;
590
- mat.screenAspect = this.context.domElement.clientWidth / this.context.domElement.clientHeight;
591
- }
592
- _videos = [];
593
- _screenspaceModeQuad;
594
- _isInScreenspaceMode = false;
595
- _input;
596
- }
597
- class VideoOverlayInput {
598
- _onResizeScreenFn;
599
- _onKeyUpFn;
600
- _onMouseWheelFn;
601
- context;
602
- overlay;
603
- constructor(overlay) {
604
- this.overlay = overlay;
605
- this.context = overlay.context;
606
- }
607
- _material;
608
- enable(mat) {
609
- this._material = mat;
610
- window.addEventListener("resize", this._onResizeScreenFn = () => {
611
- this.overlay.updateScreenspaceMaterialUniforms();
612
- });
613
- window.addEventListener("keyup", this._onKeyUpFn = (args) => {
614
- if (args.key === "Escape")
615
- this.overlay.stop();
616
- });
617
- window.addEventListener("wheel", this._onMouseWheelFn = (args) => {
618
- if (this.overlay.enabled) {
619
- mat.zoom += args.deltaY * .0005;
620
- args.preventDefault();
621
- }
622
- }, { passive: false });
623
- const delta = new Vector2();
624
- window.addEventListener("mousemove", (args) => {
625
- if (this.overlay.enabled && this.context.input.getPointerPressed(0)) {
626
- const normalizedMovement = new Vector2(args.movementX, args.movementY);
627
- normalizedMovement.x /= this.context.domElement.clientWidth;
628
- normalizedMovement.y /= this.context.domElement.clientHeight;
629
- delta.set(normalizedMovement.x, normalizedMovement.y);
630
- delta.multiplyScalar(mat.zoom / -this.context.time.deltaTime * .01);
631
- mat.offset = mat.offset.add(delta);
632
- }
633
- });
634
- window.addEventListener("pointermove", (args) => {
635
- if (this.overlay.enabled && this.context.input.getPointerPressed(0)) {
636
- const count = this.context.input.getTouchesPressedCount();
637
- if (count === 1) {
638
- delta.set(args.movementX, args.movementY);
639
- delta.multiplyScalar(mat.zoom * -this.context.time.deltaTime * .05);
640
- mat.offset = mat.offset.add(delta);
641
- }
642
- }
643
- });
644
- let lastTouchStartTime = 0;
645
- window.addEventListener("touchstart", e => {
646
- if (e.touches.length < 2) {
647
- if (this.context.time.time - lastTouchStartTime < .3) {
648
- this.overlay.stop();
649
- }
650
- lastTouchStartTime = this.context.time.time;
651
- return;
652
- }
653
- this._isPinching = true;
654
- this._lastPinch = 0;
655
- });
656
- window.addEventListener("touchmove", e => {
657
- if (!this._isPinching || !this._material)
658
- return;
659
- const touch1 = e.touches[0];
660
- const touch2 = e.touches[1];
661
- const dx = touch1.clientX - touch2.clientX;
662
- const dy = touch1.clientY - touch2.clientY;
663
- const distance = Math.sqrt(dx * dx + dy * dy);
664
- if (this._lastPinch !== 0) {
665
- const delta = distance - this._lastPinch;
666
- this._material.zoom -= delta * .004;
667
- }
668
- this._lastPinch = distance;
669
- });
670
- window.addEventListener("touchend", () => {
671
- this._isPinching = false;
672
- });
673
- }
674
- _isPinching = false;
675
- _lastPinch = 0;
676
- disable() {
677
- if (this._onResizeScreenFn) {
678
- window.removeEventListener("resize", this._onResizeScreenFn);
679
- this._onResizeScreenFn = undefined;
680
- }
681
- if (this._onKeyUpFn) {
682
- window.removeEventListener("keyup", this._onKeyUpFn);
683
- this._onKeyUpFn = undefined;
684
- }
685
- if (this._onMouseWheelFn) {
686
- window.removeEventListener("wheel", this._onMouseWheelFn);
687
- this._onMouseWheelFn = undefined;
688
- }
689
- }
690
- }
691
- class ScreenspaceTexture extends ShaderMaterial {
692
- set screenAspect(val) {
693
- this.uniforms["screenAspect"].value = val;
694
- this.needsUpdate = true;
695
- }
696
- set offset(vec) {
697
- const val = this.uniforms["offsetScale"].value;
698
- val.x = vec.x;
699
- val.y = vec.y;
700
- // console.log(val);
701
- this.uniforms["offsetScale"].value = val;
702
- this.needsUpdate = true;
703
- }
704
- _offset = new Vector2();
705
- get offset() {
706
- const val = this.uniforms["offsetScale"].value;
707
- this._offset.set(val.x, val.y);
708
- return this._offset;
709
- }
710
- set zoom(val) {
711
- const zoom = this.uniforms["offsetScale"].value;
712
- if (val < .001)
713
- val = .001;
714
- zoom.z = val;
715
- // zoom.z = this.maxZoom - val;
716
- // zoom.z /= this.maxZoom;
717
- this.needsUpdate = true;
718
- }
719
- get zoom() {
720
- return this.uniforms["offsetScale"].value.z; // * this.maxZoom;
721
- }
722
- reset() {
723
- this.offset = this.offset.set(0, 0);
724
- this.zoom = 1;
725
- this.needsUpdate = true;
726
- }
727
- // maxZoom : number = 10
728
- constructor(tex) {
729
- super();
730
- this.uniforms = {
731
- map: { value: tex },
732
- screenAspect: { value: 1 },
733
- offsetScale: { value: new Vector4(0, 0, 1, 1) }
734
- };
735
- this.vertexShader = `
736
- uniform sampler2D map;
737
- uniform float screenAspect;
738
- uniform vec4 offsetScale;
739
- varying vec2 vUv;
740
-
741
- void main() {
742
-
743
- gl_Position = vec4( position , 1.0 );
744
- vUv = uv;
745
- vUv.y = 1. - vUv.y;
746
-
747
- // fit into screen
748
- ivec2 res = textureSize(map, 0);
749
- float videoAspect = float(res.x) / float(res.y);
750
- float aspect = videoAspect / screenAspect;
751
- if(aspect >= 1.0)
752
- {
753
- vUv.y = vUv.y * aspect;
754
- float offset = (1. - aspect) * .5;
755
- vUv.y = vUv.y + offset;
756
- }
757
- else
758
- {
759
- vUv.x = vUv.x / aspect;
760
- float offset = (1. - 1. / aspect) * .5;
761
- vUv.x = vUv.x + offset;
762
- }
763
-
764
- vUv.x -= .5;
765
- vUv.y -= .5;
766
-
767
- vUv.x *= offsetScale.z;
768
- vUv.y *= offsetScale.z;
769
- vUv.x += offsetScale.x;
770
- vUv.y += offsetScale.y;
771
-
772
- vUv.x += .5;
773
- vUv.y += .5;
774
- }
775
-
776
- `;
777
- this.fragmentShader = `
778
- uniform sampler2D map;
779
- varying vec2 vUv;
780
- void main() {
781
- if(vUv.x < 0. || vUv.x > 1. || vUv.y < 0. || vUv.y > 1.)
782
- gl_FragColor = vec4(0., 0., 0., 1.);
783
- else
784
- {
785
- vec4 texcolor = texture2D(map, vUv);
786
- texcolor = LinearTosRGB(texcolor);
787
- gl_FragColor = texcolor;
788
- }
789
- }
790
- `;
791
- }
792
- }
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 { serializable } from "../engine/engine_serialization_decorator.js";
9
+ import { ShaderMaterial, SRGBColorSpace, Texture, Vector2, Vector4, VideoTexture } from "three";
10
+ import { awaitInput } from "../engine/engine_input_utils.js";
11
+ import { getParam } from "../engine/engine_utils.js";
12
+ import { Renderer } from "./Renderer.js";
13
+ import { getWorldScale } from "../engine/engine_three_utils.js";
14
+ import { ObjectUtils, PrimitiveType } from "../engine/engine_create_objects.js";
15
+ import { isDevEnvironment } from "../engine/debug/index.js";
16
+ const debug = getParam("debugvideo");
17
+ export var AspectMode;
18
+ (function (AspectMode) {
19
+ AspectMode[AspectMode["None"] = 0] = "None";
20
+ AspectMode[AspectMode["AdjustHeight"] = 1] = "AdjustHeight";
21
+ AspectMode[AspectMode["AdjustWidth"] = 2] = "AdjustWidth";
22
+ })(AspectMode || (AspectMode = {}));
23
+ export var VideoSource;
24
+ (function (VideoSource) {
25
+ /// <summary>
26
+ /// <para>Use the current clip as the video content source.</para>
27
+ /// </summary>
28
+ VideoSource[VideoSource["VideoClip"] = 0] = "VideoClip";
29
+ /// <summary>
30
+ /// <para>Use the current URL as the video content source.</para>
31
+ /// </summary>
32
+ VideoSource[VideoSource["Url"] = 1] = "Url";
33
+ })(VideoSource || (VideoSource = {}));
34
+ export var VideoAudioOutputMode;
35
+ (function (VideoAudioOutputMode) {
36
+ VideoAudioOutputMode[VideoAudioOutputMode["None"] = 0] = "None";
37
+ VideoAudioOutputMode[VideoAudioOutputMode["AudioSource"] = 1] = "AudioSource";
38
+ VideoAudioOutputMode[VideoAudioOutputMode["Direct"] = 2] = "Direct";
39
+ VideoAudioOutputMode[VideoAudioOutputMode["APIOnly"] = 3] = "APIOnly";
40
+ })(VideoAudioOutputMode || (VideoAudioOutputMode = {}));
41
+ export var VideoRenderMode;
42
+ (function (VideoRenderMode) {
43
+ VideoRenderMode[VideoRenderMode["CameraFarPlane"] = 0] = "CameraFarPlane";
44
+ VideoRenderMode[VideoRenderMode["CameraNearPlane"] = 1] = "CameraNearPlane";
45
+ VideoRenderMode[VideoRenderMode["RenderTexture"] = 2] = "RenderTexture";
46
+ VideoRenderMode[VideoRenderMode["MaterialOverride"] = 3] = "MaterialOverride";
47
+ })(VideoRenderMode || (VideoRenderMode = {}));
48
+ export class VideoPlayer extends Behaviour {
49
+ playOnAwake = true;
50
+ aspectMode = AspectMode.None;
51
+ clip = null;
52
+ renderMode;
53
+ targetMaterialProperty;
54
+ targetMaterialRenderer;
55
+ targetTexture;
56
+ time = 0;
57
+ _playbackSpeed = 1;
58
+ get playbackSpeed() {
59
+ return this._videoElement?.playbackRate ?? this._playbackSpeed;
60
+ }
61
+ set playbackSpeed(val) {
62
+ this._playbackSpeed = val;
63
+ if (this._videoElement)
64
+ this._videoElement.playbackRate = val;
65
+ }
66
+ _isLooping = false;
67
+ get isLooping() {
68
+ return this._videoElement?.loop ?? this._isLooping;
69
+ }
70
+ set isLooping(val) {
71
+ this._isLooping = val;
72
+ if (this._videoElement)
73
+ this._videoElement.loop = val;
74
+ }
75
+ get currentTime() {
76
+ return this._videoElement?.currentTime ?? this.time;
77
+ }
78
+ set currentTime(val) {
79
+ if (this._videoElement) {
80
+ this._videoElement.currentTime = val;
81
+ }
82
+ else
83
+ this.time = val;
84
+ }
85
+ get isPlaying() {
86
+ const video = this._videoElement;
87
+ if (video) {
88
+ if (video.currentTime > 0 && !video.paused && !video.ended
89
+ && video.readyState > video.HAVE_CURRENT_DATA)
90
+ return true;
91
+ else if (video.srcObject) {
92
+ const stream = video.srcObject;
93
+ if (stream.active)
94
+ return true;
95
+ }
96
+ }
97
+ return false;
98
+ }
99
+ get crossOrigin() {
100
+ return this._videoElement?.crossOrigin ?? this._crossOrigin;
101
+ }
102
+ set crossOrigin(val) {
103
+ this._crossOrigin = val;
104
+ if (this._videoElement) {
105
+ if (val !== null)
106
+ this._videoElement.setAttribute("crossorigin", val);
107
+ else
108
+ this._videoElement.removeAttribute("crossorigin");
109
+ }
110
+ }
111
+ get videoMaterial() {
112
+ return this._videoMaterial;
113
+ }
114
+ get videoTexture() {
115
+ return this._videoTexture;
116
+ }
117
+ get videoElement() {
118
+ return this._videoElement;
119
+ }
120
+ get muted() {
121
+ return this._videoElement?.muted ?? this._muted;
122
+ }
123
+ set muted(val) {
124
+ this._muted = val;
125
+ if (this._videoElement)
126
+ this._videoElement.muted = val;
127
+ }
128
+ _muted = false;
129
+ set audioOutputMode(mode) {
130
+ if (mode !== this._audioOutputMode) {
131
+ if (mode === VideoAudioOutputMode.AudioSource && isDevEnvironment())
132
+ console.warn("VideoAudioOutputMode.AudioSource is not yet implemented");
133
+ this._audioOutputMode = mode;
134
+ this.updateVideoElementSettings();
135
+ }
136
+ }
137
+ get audioOutputMode() { return this._audioOutputMode; }
138
+ _audioOutputMode = VideoAudioOutputMode.Direct;
139
+ /** Set this to false to pause video playback while the tab is not active */
140
+ playInBackground = true;
141
+ _crossOrigin = "anonymous";
142
+ // set a default src, this should not be undefined
143
+ source = VideoSource.Url;
144
+ url = null;
145
+ _videoElement = null;
146
+ _videoTexture = null;
147
+ _videoMaterial = null;
148
+ _isPlaying = false;
149
+ wasPlaying = false;
150
+ setVideo(video) {
151
+ this.clip = video;
152
+ this.source = VideoSource.VideoClip;
153
+ if (!this._videoElement)
154
+ this.create(true);
155
+ else {
156
+ // TODO: how to prevent interruption error when another video is already playing
157
+ this._videoElement.srcObject = video;
158
+ if (this._isPlaying)
159
+ this.play();
160
+ this.updateAspect();
161
+ }
162
+ }
163
+ setClipURL(url) {
164
+ if (this.url === url)
165
+ return;
166
+ // console.log("SET URL", url);
167
+ this.url = url;
168
+ this.source = VideoSource.Url;
169
+ if (debug)
170
+ console.log("set url", url);
171
+ if (!this._videoElement)
172
+ this.create(true);
173
+ else {
174
+ this._videoElement.src = url;
175
+ if (this._isPlaying) {
176
+ this.stop();
177
+ this.play();
178
+ }
179
+ }
180
+ }
181
+ onEnable() {
182
+ if (debug)
183
+ console.log("VideoPlayer.onEnable", this);
184
+ window.addEventListener('visibilitychange', this.visibilityChanged);
185
+ if (this.playOnAwake === true) {
186
+ this.create(true);
187
+ }
188
+ if (this.screenspace) {
189
+ this._overlay?.start();
190
+ }
191
+ else
192
+ this._overlay?.stop();
193
+ }
194
+ onDisable() {
195
+ window.removeEventListener('visibilitychange', this.visibilityChanged);
196
+ this._overlay?.stop();
197
+ this.pause();
198
+ }
199
+ visibilityChanged = (_) => {
200
+ switch (document.visibilityState) {
201
+ case "hidden":
202
+ if (!this.playInBackground) {
203
+ this.wasPlaying = this._isPlaying;
204
+ this.pause();
205
+ }
206
+ break;
207
+ case "visible":
208
+ if (this.wasPlaying && !this._isPlaying)
209
+ this.play();
210
+ break;
211
+ }
212
+ };
213
+ onDestroy() {
214
+ if (this._videoElement) {
215
+ this._videoElement.parentElement?.removeChild(this._videoElement);
216
+ this._videoElement = null;
217
+ }
218
+ if (this._videoTexture) {
219
+ this._videoTexture.dispose();
220
+ this._videoTexture = null;
221
+ }
222
+ }
223
+ _receivedInput = false;
224
+ constructor() {
225
+ super();
226
+ awaitInput(() => {
227
+ this._receivedInput = true;
228
+ this.updateVideoElementSettings();
229
+ });
230
+ this._targetObjects = [];
231
+ if (getParam("videoscreenspace")) {
232
+ window.addEventListener("keydown", evt => {
233
+ if (evt.key === "f") {
234
+ this.screenspace = !this.screenspace;
235
+ }
236
+ });
237
+ }
238
+ }
239
+ play() {
240
+ if (!this._videoElement)
241
+ this.create(false);
242
+ if (!this._videoElement)
243
+ return;
244
+ if (this._isPlaying && !this._videoElement?.ended && !this._videoElement?.paused)
245
+ return;
246
+ this._isPlaying = true;
247
+ if (!this._receivedInput)
248
+ this._videoElement.muted = true;
249
+ this.updateVideoElementSettings();
250
+ this._videoElement.currentTime = this.time;
251
+ this._videoElement.play().catch(err => {
252
+ console.log(err);
253
+ // https://developer.chrome.com/blog/play-request-was-interrupted/
254
+ if (debug)
255
+ console.error("Error playing video", err, "CODE=" + err.code, this.videoElement?.src, this);
256
+ setTimeout(() => {
257
+ if (this._isPlaying && !this.destroyed && this.activeAndEnabled)
258
+ this.play();
259
+ }, 1000);
260
+ });
261
+ if (debug)
262
+ console.log("play", this._videoElement, this.time);
263
+ }
264
+ stop() {
265
+ this._isPlaying = false;
266
+ this.time = 0;
267
+ if (!this._videoElement)
268
+ return;
269
+ this._videoElement.currentTime = 0;
270
+ this._videoElement.pause();
271
+ if (debug)
272
+ console.log("STOP", this);
273
+ }
274
+ pause() {
275
+ this.time = this._videoElement?.currentTime ?? 0;
276
+ this._isPlaying = false;
277
+ this._videoElement?.pause();
278
+ if (debug)
279
+ console.log("PAUSE", this, this.currentTime);
280
+ }
281
+ create(playAutomatically) {
282
+ let src;
283
+ switch (this.source) {
284
+ case VideoSource.VideoClip:
285
+ src = this.clip;
286
+ break;
287
+ case VideoSource.Url:
288
+ src = this.url;
289
+ if (!src?.length && typeof this.clip === "string")
290
+ src = this.clip;
291
+ break;
292
+ }
293
+ if (!src) {
294
+ if (debug)
295
+ console.warn("No video source set", this);
296
+ return;
297
+ }
298
+ if (!this._videoElement) {
299
+ if (debug)
300
+ console.warn("Create VideoElement", this);
301
+ this._videoElement = this.createVideoElement();
302
+ this.context.domElement?.prepend(this._videoElement);
303
+ // hide it because otherwise it would overlay the website with default css
304
+ this.updateVideoElementStyles();
305
+ }
306
+ if (typeof src === "string") {
307
+ if (debug)
308
+ console.log("Set Video src", src);
309
+ this._videoElement.src = src;
310
+ // Nor sure why we did this here, but with this code the video does not restart when being paused / enable toggled
311
+ // const str = this._videoElement["captureStream"]?.call(this._videoElement);
312
+ // this.clip = str;
313
+ }
314
+ else {
315
+ if (debug)
316
+ console.log("Set Video srcObject", src);
317
+ this._videoElement.srcObject = src;
318
+ }
319
+ if (!this._videoTexture)
320
+ this._videoTexture = new VideoTexture(this._videoElement);
321
+ this._videoTexture.flipY = false;
322
+ this._videoTexture.colorSpace = SRGBColorSpace;
323
+ this.handleBeginPlaying(playAutomatically);
324
+ if (debug)
325
+ console.log(this, playAutomatically);
326
+ }
327
+ updateAspect() {
328
+ if (this.aspectMode === AspectMode.None)
329
+ return;
330
+ this.startCoroutine(this.updateAspectImpl());
331
+ }
332
+ _overlay = null;
333
+ get screenspace() {
334
+ return this._overlay?.enabled ?? false;
335
+ }
336
+ set screenspace(val) {
337
+ if (val) {
338
+ if (!this._videoTexture)
339
+ return;
340
+ if (!this._overlay)
341
+ this._overlay = new VideoOverlay(this.context);
342
+ this._overlay.add(this._videoTexture);
343
+ }
344
+ else
345
+ this._overlay?.remove(this._videoTexture);
346
+ if (this._overlay)
347
+ this._overlay.enabled = val;
348
+ }
349
+ _targetObjects;
350
+ createVideoElement() {
351
+ const video = document.createElement("video");
352
+ if (this._crossOrigin)
353
+ video.setAttribute("crossorigin", this._crossOrigin);
354
+ if (debug)
355
+ console.log("created video element", video);
356
+ return video;
357
+ }
358
+ handleBeginPlaying(playAutomatically) {
359
+ if (!this.enabled)
360
+ return;
361
+ if (!this._videoElement)
362
+ return;
363
+ this._targetObjects.length = 0;
364
+ let target = this.gameObject;
365
+ switch (this.renderMode) {
366
+ case VideoRenderMode.MaterialOverride:
367
+ target = this.targetMaterialRenderer?.gameObject;
368
+ if (!target)
369
+ target = GameObject.getComponent(this.gameObject, Renderer)?.gameObject;
370
+ break;
371
+ case VideoRenderMode.RenderTexture:
372
+ console.error("VideoPlayer renderTexture not implemented yet. Please use material override instead");
373
+ return;
374
+ }
375
+ if (!target) {
376
+ console.error("Missing target for video material renderer", this.name, VideoRenderMode[this.renderMode], this);
377
+ return;
378
+ }
379
+ const mat = target["material"];
380
+ if (mat) {
381
+ this._targetObjects.push(target);
382
+ if (mat !== this._videoMaterial) {
383
+ this._videoMaterial = mat.clone();
384
+ target["material"] = this._videoMaterial;
385
+ }
386
+ const fieldName = "map";
387
+ const videoMaterial = this._videoMaterial;
388
+ if (!this.targetMaterialProperty) {
389
+ videoMaterial[fieldName] = this._videoTexture;
390
+ }
391
+ else {
392
+ switch (this.targetMaterialProperty) {
393
+ default:
394
+ videoMaterial[fieldName] = this._videoTexture;
395
+ break;
396
+ // doesnt render:
397
+ // case "emissiveTexture":
398
+ // console.log(this.videoMaterial);
399
+ // // (this.videoMaterial as any).map = this.videoTexture;
400
+ // (this.videoMaterial as any).emissive?.set(1,1,1);// = this.videoTexture;
401
+ // (this.videoMaterial as any).emissiveMap = this.videoTexture;
402
+ // break;
403
+ }
404
+ }
405
+ }
406
+ else {
407
+ console.warn("Can not play video, no material found, this might be a multimaterial case which is not supported yet");
408
+ return;
409
+ }
410
+ this.updateVideoElementSettings();
411
+ this.updateVideoElementStyles();
412
+ if (playAutomatically)
413
+ this.play();
414
+ }
415
+ updateVideoElementSettings() {
416
+ if (!this._videoElement)
417
+ return;
418
+ this._videoElement.loop = this._isLooping;
419
+ this._videoElement.currentTime = this.currentTime;
420
+ this._videoElement.playbackRate = this._playbackSpeed;
421
+ // dont open in fullscreen on ios
422
+ this._videoElement.playsInline = true;
423
+ let muted = !this._receivedInput || this.audioOutputMode === VideoAudioOutputMode.None;
424
+ if (!muted && this._muted)
425
+ muted = true;
426
+ this._videoElement.muted = muted;
427
+ if (this.playOnAwake)
428
+ this._videoElement.autoplay = true;
429
+ }
430
+ updateVideoElementStyles() {
431
+ if (!this._videoElement)
432
+ return;
433
+ // set style here so preview frame is rendered
434
+ // set display and selectable because otherwise is interfers with input/focus e.g. breaks orbit control
435
+ this._videoElement.style.userSelect = "none";
436
+ this._videoElement.style.visibility = "hidden";
437
+ this._videoElement.style.display = "none";
438
+ this.updateAspect();
439
+ }
440
+ _updateAspectRoutineId = -1;
441
+ *updateAspectImpl() {
442
+ const id = ++this._updateAspectRoutineId;
443
+ const lastAspect = undefined;
444
+ const stream = this.clip;
445
+ while (id === this._updateAspectRoutineId && this.aspectMode !== AspectMode.None && this.clip && stream === this.clip && this._isPlaying) {
446
+ if (!stream || typeof stream === "string") {
447
+ return;
448
+ }
449
+ let aspect = undefined;
450
+ for (const track of stream.getVideoTracks()) {
451
+ const settings = track.getSettings();
452
+ if (settings && settings.width && settings.height) {
453
+ aspect = settings.width / settings.height;
454
+ break;
455
+ }
456
+ // on firefox capture canvas stream works but looks like
457
+ // the canvas stream track doesnt contain settings?!!?
458
+ else {
459
+ aspect = this.context.renderer.domElement.clientWidth / this.context.renderer.domElement.clientHeight;
460
+ }
461
+ }
462
+ if (aspect === undefined) {
463
+ for (let i = 0; i < 10; i++)
464
+ yield;
465
+ if (!this.isPlaying)
466
+ break;
467
+ continue;
468
+ }
469
+ if (lastAspect === aspect) {
470
+ yield;
471
+ continue;
472
+ }
473
+ for (const obj of this._targetObjects) {
474
+ let worldAspect = 1;
475
+ if (obj.parent) {
476
+ const parentScale = getWorldScale(obj.parent);
477
+ worldAspect = parentScale.x / parentScale.y;
478
+ }
479
+ switch (this.aspectMode) {
480
+ case AspectMode.AdjustHeight:
481
+ obj.scale.y = 1 / aspect * obj.scale.x * worldAspect;
482
+ break;
483
+ case AspectMode.AdjustWidth:
484
+ obj.scale.x = aspect * obj.scale.y * worldAspect;
485
+ break;
486
+ }
487
+ }
488
+ for (let i = 0; i < 3; i++)
489
+ yield;
490
+ }
491
+ }
492
+ }
493
+ __decorate([
494
+ serializable()
495
+ ], VideoPlayer.prototype, "playOnAwake", void 0);
496
+ __decorate([
497
+ serializable()
498
+ ], VideoPlayer.prototype, "aspectMode", void 0);
499
+ __decorate([
500
+ serializable(URL)
501
+ ], VideoPlayer.prototype, "clip", void 0);
502
+ __decorate([
503
+ serializable()
504
+ ], VideoPlayer.prototype, "renderMode", void 0);
505
+ __decorate([
506
+ serializable()
507
+ ], VideoPlayer.prototype, "targetMaterialProperty", void 0);
508
+ __decorate([
509
+ serializable(Renderer)
510
+ ], VideoPlayer.prototype, "targetMaterialRenderer", void 0);
511
+ __decorate([
512
+ serializable(Texture)
513
+ ], VideoPlayer.prototype, "targetTexture", void 0);
514
+ __decorate([
515
+ serializable()
516
+ ], VideoPlayer.prototype, "time", void 0);
517
+ __decorate([
518
+ serializable()
519
+ ], VideoPlayer.prototype, "playbackSpeed", null);
520
+ __decorate([
521
+ serializable()
522
+ ], VideoPlayer.prototype, "isLooping", null);
523
+ __decorate([
524
+ serializable()
525
+ ], VideoPlayer.prototype, "audioOutputMode", null);
526
+ class VideoOverlay {
527
+ context;
528
+ constructor(context) {
529
+ this.context = context;
530
+ this._input = new VideoOverlayInput(this);
531
+ }
532
+ get enabled() {
533
+ return this._isInScreenspaceMode;
534
+ }
535
+ set enabled(val) {
536
+ if (val)
537
+ this.start();
538
+ else
539
+ this.stop();
540
+ }
541
+ add(video) {
542
+ if (this._videos.indexOf(video) === -1) {
543
+ this._videos.push(video);
544
+ }
545
+ }
546
+ remove(video) {
547
+ if (!video)
548
+ return;
549
+ const index = this._videos.indexOf(video);
550
+ if (index >= 0) {
551
+ this._videos.splice(index, 1);
552
+ }
553
+ }
554
+ start() {
555
+ if (this._isInScreenspaceMode)
556
+ return;
557
+ if (this._videos.length < 0)
558
+ return;
559
+ const texture = this._videos[this._videos.length - 1];
560
+ if (!texture)
561
+ return;
562
+ this._isInScreenspaceMode = true;
563
+ if (!this._screenspaceModeQuad) {
564
+ this._screenspaceModeQuad = ObjectUtils.createPrimitive(PrimitiveType.Quad, {
565
+ material: new ScreenspaceTexture(texture)
566
+ });
567
+ if (!this._screenspaceModeQuad)
568
+ return;
569
+ this._screenspaceModeQuad.geometry.scale(2, 2, 2);
570
+ }
571
+ const quad = this._screenspaceModeQuad;
572
+ this.context.scene.add(quad);
573
+ this.updateScreenspaceMaterialUniforms();
574
+ const mat = quad.material;
575
+ mat?.reset();
576
+ this._input?.enable(mat);
577
+ }
578
+ stop() {
579
+ this._isInScreenspaceMode = false;
580
+ if (this._screenspaceModeQuad) {
581
+ this._input?.disable();
582
+ this._screenspaceModeQuad.removeFromParent();
583
+ }
584
+ }
585
+ updateScreenspaceMaterialUniforms() {
586
+ const mat = this._screenspaceModeQuad?.material;
587
+ if (!mat)
588
+ return;
589
+ // mat.videoAspect = this.videoTexture?.image?.width / this.videoTexture?.image?.height;
590
+ mat.screenAspect = this.context.domElement.clientWidth / this.context.domElement.clientHeight;
591
+ }
592
+ _videos = [];
593
+ _screenspaceModeQuad;
594
+ _isInScreenspaceMode = false;
595
+ _input;
596
+ }
597
+ class VideoOverlayInput {
598
+ _onResizeScreenFn;
599
+ _onKeyUpFn;
600
+ _onMouseWheelFn;
601
+ context;
602
+ overlay;
603
+ constructor(overlay) {
604
+ this.overlay = overlay;
605
+ this.context = overlay.context;
606
+ }
607
+ _material;
608
+ enable(mat) {
609
+ this._material = mat;
610
+ window.addEventListener("resize", this._onResizeScreenFn = () => {
611
+ this.overlay.updateScreenspaceMaterialUniforms();
612
+ });
613
+ window.addEventListener("keyup", this._onKeyUpFn = (args) => {
614
+ if (args.key === "Escape")
615
+ this.overlay.stop();
616
+ });
617
+ window.addEventListener("wheel", this._onMouseWheelFn = (args) => {
618
+ if (this.overlay.enabled) {
619
+ mat.zoom += args.deltaY * .0005;
620
+ args.preventDefault();
621
+ }
622
+ }, { passive: false });
623
+ const delta = new Vector2();
624
+ window.addEventListener("mousemove", (args) => {
625
+ if (this.overlay.enabled && this.context.input.getPointerPressed(0)) {
626
+ const normalizedMovement = new Vector2(args.movementX, args.movementY);
627
+ normalizedMovement.x /= this.context.domElement.clientWidth;
628
+ normalizedMovement.y /= this.context.domElement.clientHeight;
629
+ delta.set(normalizedMovement.x, normalizedMovement.y);
630
+ delta.multiplyScalar(mat.zoom / -this.context.time.deltaTime * .01);
631
+ mat.offset = mat.offset.add(delta);
632
+ }
633
+ });
634
+ window.addEventListener("pointermove", (args) => {
635
+ if (this.overlay.enabled && this.context.input.getPointerPressed(0)) {
636
+ const count = this.context.input.getTouchesPressedCount();
637
+ if (count === 1) {
638
+ delta.set(args.movementX, args.movementY);
639
+ delta.multiplyScalar(mat.zoom * -this.context.time.deltaTime * .05);
640
+ mat.offset = mat.offset.add(delta);
641
+ }
642
+ }
643
+ });
644
+ let lastTouchStartTime = 0;
645
+ window.addEventListener("touchstart", e => {
646
+ if (e.touches.length < 2) {
647
+ if (this.context.time.time - lastTouchStartTime < .3) {
648
+ this.overlay.stop();
649
+ }
650
+ lastTouchStartTime = this.context.time.time;
651
+ return;
652
+ }
653
+ this._isPinching = true;
654
+ this._lastPinch = 0;
655
+ });
656
+ window.addEventListener("touchmove", e => {
657
+ if (!this._isPinching || !this._material)
658
+ return;
659
+ const touch1 = e.touches[0];
660
+ const touch2 = e.touches[1];
661
+ const dx = touch1.clientX - touch2.clientX;
662
+ const dy = touch1.clientY - touch2.clientY;
663
+ const distance = Math.sqrt(dx * dx + dy * dy);
664
+ if (this._lastPinch !== 0) {
665
+ const delta = distance - this._lastPinch;
666
+ this._material.zoom -= delta * .004;
667
+ }
668
+ this._lastPinch = distance;
669
+ });
670
+ window.addEventListener("touchend", () => {
671
+ this._isPinching = false;
672
+ });
673
+ }
674
+ _isPinching = false;
675
+ _lastPinch = 0;
676
+ disable() {
677
+ if (this._onResizeScreenFn) {
678
+ window.removeEventListener("resize", this._onResizeScreenFn);
679
+ this._onResizeScreenFn = undefined;
680
+ }
681
+ if (this._onKeyUpFn) {
682
+ window.removeEventListener("keyup", this._onKeyUpFn);
683
+ this._onKeyUpFn = undefined;
684
+ }
685
+ if (this._onMouseWheelFn) {
686
+ window.removeEventListener("wheel", this._onMouseWheelFn);
687
+ this._onMouseWheelFn = undefined;
688
+ }
689
+ }
690
+ }
691
+ class ScreenspaceTexture extends ShaderMaterial {
692
+ set screenAspect(val) {
693
+ this.uniforms["screenAspect"].value = val;
694
+ this.needsUpdate = true;
695
+ }
696
+ set offset(vec) {
697
+ const val = this.uniforms["offsetScale"].value;
698
+ val.x = vec.x;
699
+ val.y = vec.y;
700
+ // console.log(val);
701
+ this.uniforms["offsetScale"].value = val;
702
+ this.needsUpdate = true;
703
+ }
704
+ _offset = new Vector2();
705
+ get offset() {
706
+ const val = this.uniforms["offsetScale"].value;
707
+ this._offset.set(val.x, val.y);
708
+ return this._offset;
709
+ }
710
+ set zoom(val) {
711
+ const zoom = this.uniforms["offsetScale"].value;
712
+ if (val < .001)
713
+ val = .001;
714
+ zoom.z = val;
715
+ // zoom.z = this.maxZoom - val;
716
+ // zoom.z /= this.maxZoom;
717
+ this.needsUpdate = true;
718
+ }
719
+ get zoom() {
720
+ return this.uniforms["offsetScale"].value.z; // * this.maxZoom;
721
+ }
722
+ reset() {
723
+ this.offset = this.offset.set(0, 0);
724
+ this.zoom = 1;
725
+ this.needsUpdate = true;
726
+ }
727
+ // maxZoom : number = 10
728
+ constructor(tex) {
729
+ super();
730
+ this.uniforms = {
731
+ map: { value: tex },
732
+ screenAspect: { value: 1 },
733
+ offsetScale: { value: new Vector4(0, 0, 1, 1) }
734
+ };
735
+ this.vertexShader = `
736
+ uniform sampler2D map;
737
+ uniform float screenAspect;
738
+ uniform vec4 offsetScale;
739
+ varying vec2 vUv;
740
+
741
+ void main() {
742
+
743
+ gl_Position = vec4( position , 1.0 );
744
+ vUv = uv;
745
+ vUv.y = 1. - vUv.y;
746
+
747
+ // fit into screen
748
+ ivec2 res = textureSize(map, 0);
749
+ float videoAspect = float(res.x) / float(res.y);
750
+ float aspect = videoAspect / screenAspect;
751
+ if(aspect >= 1.0)
752
+ {
753
+ vUv.y = vUv.y * aspect;
754
+ float offset = (1. - aspect) * .5;
755
+ vUv.y = vUv.y + offset;
756
+ }
757
+ else
758
+ {
759
+ vUv.x = vUv.x / aspect;
760
+ float offset = (1. - 1. / aspect) * .5;
761
+ vUv.x = vUv.x + offset;
762
+ }
763
+
764
+ vUv.x -= .5;
765
+ vUv.y -= .5;
766
+
767
+ vUv.x *= offsetScale.z;
768
+ vUv.y *= offsetScale.z;
769
+ vUv.x += offsetScale.x;
770
+ vUv.y += offsetScale.y;
771
+
772
+ vUv.x += .5;
773
+ vUv.y += .5;
774
+ }
775
+
776
+ `;
777
+ this.fragmentShader = `
778
+ uniform sampler2D map;
779
+ varying vec2 vUv;
780
+ void main() {
781
+ if(vUv.x < 0. || vUv.x > 1. || vUv.y < 0. || vUv.y > 1.)
782
+ gl_FragColor = vec4(0., 0., 0., 1.);
783
+ else
784
+ {
785
+ vec4 texcolor = texture2D(map, vUv);
786
+ texcolor = LinearTosRGB(texcolor);
787
+ gl_FragColor = texcolor;
788
+ }
789
+ }
790
+ `;
791
+ }
792
+ }
793
793
  //# sourceMappingURL=VideoPlayer.js.map