@needle-tools/engine 3.28.6-beta → 3.28.7-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (848) hide show
  1. package/CHANGELOG.md +2259 -2253
  2. package/LICENSE.md +10 -10
  3. package/README.md +52 -52
  4. package/dist/needle-engine.js +7 -10
  5. package/dist/needle-engine.light.js +7 -10
  6. package/dist/needle-engine.light.min.js +7 -10
  7. package/dist/needle-engine.light.umd.cjs +7 -10
  8. package/dist/needle-engine.min.js +7 -10
  9. package/dist/needle-engine.umd.cjs +7 -10
  10. package/lib/engine/api.d.ts +52 -52
  11. package/lib/engine/api.js +51 -51
  12. package/lib/engine/assets/index.d.ts +1 -1
  13. package/lib/engine/assets/index.js +4 -4
  14. package/lib/engine/codegen/register_types.d.ts +1 -1
  15. package/lib/engine/codegen/register_types.js +439 -439
  16. package/lib/engine/debug/debug.d.ts +12 -12
  17. package/lib/engine/debug/debug.js +26 -26
  18. package/lib/engine/debug/debug_console.d.ts +2 -2
  19. package/lib/engine/debug/debug_console.js +204 -204
  20. package/lib/engine/debug/debug_overlay.d.ts +10 -10
  21. package/lib/engine/debug/debug_overlay.js +277 -277
  22. package/lib/engine/debug/index.d.ts +1 -1
  23. package/lib/engine/debug/index.js +1 -1
  24. package/lib/engine/engine_addressables.d.ts +75 -75
  25. package/lib/engine/engine_addressables.js +441 -441
  26. package/lib/engine/engine_application.d.ts +19 -19
  27. package/lib/engine/engine_application.js +45 -45
  28. package/lib/engine/engine_assetdatabase.d.ts +25 -25
  29. package/lib/engine/engine_assetdatabase.js +341 -341
  30. package/lib/engine/engine_camera.d.ts +6 -6
  31. package/lib/engine/engine_camera.js +23 -23
  32. package/lib/engine/engine_components.d.ts +17 -17
  33. package/lib/engine/engine_components.js +273 -273
  34. package/lib/engine/engine_components_internal.d.ts +11 -11
  35. package/lib/engine/engine_components_internal.js +41 -41
  36. package/lib/engine/engine_constants.d.ts +5 -5
  37. package/lib/engine/engine_constants.js +32 -32
  38. package/lib/engine/engine_context.d.ts +269 -269
  39. package/lib/engine/engine_context.js +1242 -1242
  40. package/lib/engine/engine_context_registry.d.ts +50 -50
  41. package/lib/engine/engine_context_registry.js +89 -89
  42. package/lib/engine/engine_coroutine.d.ts +4 -4
  43. package/lib/engine/engine_coroutine.js +21 -21
  44. package/lib/engine/engine_create_objects.d.ts +13 -13
  45. package/lib/engine/engine_create_objects.js +33 -33
  46. package/lib/engine/engine_default_parameters.d.ts +2 -2
  47. package/lib/engine/engine_default_parameters.js +3 -3
  48. package/lib/engine/engine_editor-sync.d.ts +17 -17
  49. package/lib/engine/engine_editor-sync.js +7 -7
  50. package/lib/engine/engine_element.d.ts +55 -55
  51. package/lib/engine/engine_element.js +559 -559
  52. package/lib/engine/engine_element_attributes.d.ts +49 -49
  53. package/lib/engine/engine_element_attributes.js +1 -1
  54. package/lib/engine/engine_element_extras.d.ts +6 -6
  55. package/lib/engine/engine_element_extras.js +13 -13
  56. package/lib/engine/engine_element_loading.d.ts +40 -40
  57. package/lib/engine/engine_element_loading.js +312 -312
  58. package/lib/engine/engine_element_overlay.d.ts +19 -19
  59. package/lib/engine/engine_element_overlay.js +143 -143
  60. package/lib/engine/engine_fileloader.d.ts +3 -3
  61. package/lib/engine/engine_fileloader.js +7 -7
  62. package/lib/engine/engine_gameobject.d.ts +39 -39
  63. package/lib/engine/engine_gameobject.js +559 -559
  64. package/lib/engine/engine_generic_utils.d.ts +1 -1
  65. package/lib/engine/engine_generic_utils.js +13 -13
  66. package/lib/engine/engine_gizmos.d.ts +26 -26
  67. package/lib/engine/engine_gizmos.js +282 -282
  68. package/lib/engine/engine_gltf.d.ts +13 -13
  69. package/lib/engine/engine_gltf.js +15 -15
  70. package/lib/engine/engine_gltf_builtin_components.d.ts +7 -7
  71. package/lib/engine/engine_gltf_builtin_components.js +298 -298
  72. package/lib/engine/engine_hot_reload.d.ts +5 -5
  73. package/lib/engine/engine_hot_reload.js +182 -182
  74. package/lib/engine/engine_input.d.ts +129 -129
  75. package/lib/engine/engine_input.js +799 -799
  76. package/lib/engine/engine_input_utils.d.ts +2 -2
  77. package/lib/engine/engine_input_utils.js +22 -22
  78. package/lib/engine/engine_instancing.d.ts +16 -16
  79. package/lib/engine/engine_instancing.js +36 -36
  80. package/lib/engine/engine_license.d.ts +4 -4
  81. package/lib/engine/engine_license.js +398 -398
  82. package/lib/engine/engine_lifecycle_api.d.ts +14 -14
  83. package/lib/engine/engine_lifecycle_api.js +24 -24
  84. package/lib/engine/engine_lifecycle_functions_internal.d.ts +6 -6
  85. package/lib/engine/engine_lifecycle_functions_internal.js +28 -28
  86. package/lib/engine/engine_lightdata.d.ts +23 -23
  87. package/lib/engine/engine_lightdata.js +86 -86
  88. package/lib/engine/engine_loaders.d.ts +7 -7
  89. package/lib/engine/engine_loaders.js +69 -69
  90. package/lib/engine/engine_mainloop_utils.d.ts +13 -13
  91. package/lib/engine/engine_mainloop_utils.js +426 -426
  92. package/lib/engine/engine_math.d.ts +43 -43
  93. package/lib/engine/engine_math.js +147 -147
  94. package/lib/engine/engine_networking.d.ts +176 -176
  95. package/lib/engine/engine_networking.js +649 -649
  96. package/lib/engine/engine_networking_auto.d.ts +24 -24
  97. package/lib/engine/engine_networking_auto.js +324 -324
  98. package/lib/engine/engine_networking_files.d.ts +23 -23
  99. package/lib/engine/engine_networking_files.js +176 -176
  100. package/lib/engine/engine_networking_files_default_components.d.ts +3 -3
  101. package/lib/engine/engine_networking_files_default_components.js +39 -39
  102. package/lib/engine/engine_networking_instantiate.d.ts +39 -39
  103. package/lib/engine/engine_networking_instantiate.js +302 -302
  104. package/lib/engine/engine_networking_peer.d.ts +15 -15
  105. package/lib/engine/engine_networking_peer.js +132 -132
  106. package/lib/engine/engine_networking_streams.d.ts +90 -90
  107. package/lib/engine/engine_networking_streams.js +428 -428
  108. package/lib/engine/engine_networking_types.d.ts +14 -14
  109. package/lib/engine/engine_networking_types.js +7 -7
  110. package/lib/engine/engine_networking_utils.d.ts +2 -2
  111. package/lib/engine/engine_networking_utils.js +20 -20
  112. package/lib/engine/engine_patcher.d.ts +10 -10
  113. package/lib/engine/engine_patcher.js +142 -142
  114. package/lib/engine/engine_physics.d.ts +115 -115
  115. package/lib/engine/engine_physics.js +228 -228
  116. package/lib/engine/engine_physics.types.d.ts +37 -37
  117. package/lib/engine/engine_physics.types.js +33 -33
  118. package/lib/engine/engine_physics_rapier.d.ts +112 -112
  119. package/lib/engine/engine_physics_rapier.js +1266 -1266
  120. package/lib/engine/engine_playerview.d.ts +26 -26
  121. package/lib/engine/engine_playerview.js +64 -64
  122. package/lib/engine/engine_scenelighting.d.ts +74 -74
  123. package/lib/engine/engine_scenelighting.js +285 -285
  124. package/lib/engine/engine_scenetools.d.ts +35 -35
  125. package/lib/engine/engine_scenetools.js +212 -212
  126. package/lib/engine/engine_serialization.d.ts +4 -4
  127. package/lib/engine/engine_serialization.js +4 -4
  128. package/lib/engine/engine_serialization_builtin_serializer.d.ts +62 -62
  129. package/lib/engine/engine_serialization_builtin_serializer.js +369 -369
  130. package/lib/engine/engine_serialization_core.d.ts +84 -84
  131. package/lib/engine/engine_serialization_core.js +576 -576
  132. package/lib/engine/engine_serialization_decorator.d.ts +15 -15
  133. package/lib/engine/engine_serialization_decorator.js +54 -54
  134. package/lib/engine/engine_setup.d.ts +1 -1
  135. package/lib/engine/engine_setup.js +2 -2
  136. package/lib/engine/engine_shaders.d.ts +31 -31
  137. package/lib/engine/engine_shaders.js +229 -229
  138. package/lib/engine/engine_shims.d.ts +3 -3
  139. package/lib/engine/engine_shims.js +22 -22
  140. package/lib/engine/engine_texture.d.ts +20 -20
  141. package/lib/engine/engine_texture.js +57 -57
  142. package/lib/engine/engine_three_utils.d.ts +51 -51
  143. package/lib/engine/engine_three_utils.js +342 -342
  144. package/lib/engine/engine_time.d.ts +19 -19
  145. package/lib/engine/engine_time.js +47 -47
  146. package/lib/engine/engine_types.d.ts +358 -358
  147. package/lib/engine/engine_types.js +72 -72
  148. package/lib/engine/engine_typestore.d.ts +16 -16
  149. package/lib/engine/engine_typestore.js +35 -35
  150. package/lib/engine/engine_util_decorator.d.ts +12 -12
  151. package/lib/engine/engine_util_decorator.js +115 -115
  152. package/lib/engine/engine_utils.d.ts +104 -104
  153. package/lib/engine/engine_utils.js +518 -518
  154. package/lib/engine/engine_utils_screenshot.d.ts +10 -10
  155. package/lib/engine/engine_utils_screenshot.js +70 -70
  156. package/lib/engine/engine_web_api.d.ts +12 -12
  157. package/lib/engine/engine_web_api.js +112 -112
  158. package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
  159. package/lib/engine/extensions/EXT_texture_exr.js +32 -32
  160. package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +116 -116
  161. package/lib/engine/extensions/NEEDLE_animator_controller_model.js +91 -91
  162. package/lib/engine/extensions/NEEDLE_components.d.ts +33 -33
  163. package/lib/engine/extensions/NEEDLE_components.js +206 -206
  164. package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
  165. package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
  166. package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +38 -38
  167. package/lib/engine/extensions/NEEDLE_lighting_settings.js +183 -183
  168. package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
  169. package/lib/engine/extensions/NEEDLE_lightmaps.js +108 -108
  170. package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
  171. package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
  172. package/lib/engine/extensions/NEEDLE_progressive.d.ts +41 -41
  173. package/lib/engine/extensions/NEEDLE_progressive.js +366 -366
  174. package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
  175. package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
  176. package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +39 -39
  177. package/lib/engine/extensions/NEEDLE_techniques_webgl.js +544 -544
  178. package/lib/engine/extensions/extension_resolver.d.ts +4 -4
  179. package/lib/engine/extensions/extension_resolver.js +1 -1
  180. package/lib/engine/extensions/extension_utils.d.ts +2 -2
  181. package/lib/engine/extensions/extension_utils.js +140 -140
  182. package/lib/engine/extensions/extensions.d.ts +21 -21
  183. package/lib/engine/extensions/extensions.js +94 -94
  184. package/lib/engine/extensions/index.d.ts +5 -5
  185. package/lib/engine/extensions/index.js +5 -5
  186. package/lib/engine/extensions/usage_tracker.d.ts +13 -13
  187. package/lib/engine/extensions/usage_tracker.js +61 -61
  188. package/lib/engine/js-extensions/Camera.d.ts +1 -1
  189. package/lib/engine/js-extensions/Camera.js +36 -36
  190. package/lib/engine/js-extensions/Layers.d.ts +3 -3
  191. package/lib/engine/js-extensions/Layers.js +19 -19
  192. package/lib/engine/js-extensions/index.d.ts +2 -2
  193. package/lib/engine/js-extensions/index.js +2 -2
  194. package/lib/engine/shaders/shaderData.d.ts +55 -55
  195. package/lib/engine/shaders/shaderData.js +58 -58
  196. package/lib/engine/tests/test_utils.d.ts +2 -2
  197. package/lib/engine/tests/test_utils.js +53 -53
  198. package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
  199. package/lib/engine-components/AlignmentConstraint.js +39 -39
  200. package/lib/engine-components/Animation.d.ts +53 -53
  201. package/lib/engine-components/Animation.js +333 -333
  202. package/lib/engine-components/AnimationCurve.d.ts +16 -16
  203. package/lib/engine-components/AnimationCurve.js +97 -97
  204. package/lib/engine-components/AnimationUtils.d.ts +8 -8
  205. package/lib/engine-components/AnimationUtils.js +110 -110
  206. package/lib/engine-components/Animator.d.ts +81 -81
  207. package/lib/engine-components/Animator.js +229 -229
  208. package/lib/engine-components/AnimatorController.d.ts +57 -57
  209. package/lib/engine-components/AnimatorController.js +887 -887
  210. package/lib/engine-components/AudioListener.d.ts +7 -7
  211. package/lib/engine-components/AudioListener.js +30 -30
  212. package/lib/engine-components/AudioSource.d.ts +61 -61
  213. package/lib/engine-components/AudioSource.js +422 -422
  214. package/lib/engine-components/AvatarLoader.d.ts +19 -19
  215. package/lib/engine-components/AvatarLoader.js +173 -173
  216. package/lib/engine-components/AxesHelper.d.ts +9 -9
  217. package/lib/engine-components/AxesHelper.js +44 -44
  218. package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
  219. package/lib/engine-components/BasicIKConstraint.js +43 -43
  220. package/lib/engine-components/BoxHelperComponent.d.ts +16 -16
  221. package/lib/engine-components/BoxHelperComponent.js +89 -89
  222. package/lib/engine-components/Camera.d.ts +70 -70
  223. package/lib/engine-components/Camera.js +450 -450
  224. package/lib/engine-components/CameraUtils.d.ts +1 -1
  225. package/lib/engine-components/CameraUtils.js +77 -77
  226. package/lib/engine-components/CharacterController.d.ts +46 -46
  227. package/lib/engine-components/CharacterController.js +227 -227
  228. package/lib/engine-components/Collider.d.ts +46 -46
  229. package/lib/engine-components/Collider.js +153 -153
  230. package/lib/engine-components/Component.d.ts +228 -228
  231. package/lib/engine-components/Component.js +541 -541
  232. package/lib/engine-components/ContactShadows.d.ts +23 -23
  233. package/lib/engine-components/ContactShadows.js +233 -233
  234. package/lib/engine-components/DeleteBox.d.ts +9 -9
  235. package/lib/engine-components/DeleteBox.js +30 -30
  236. package/lib/engine-components/DeviceFlag.d.ts +12 -12
  237. package/lib/engine-components/DeviceFlag.js +43 -43
  238. package/lib/engine-components/DragControls.d.ts +51 -51
  239. package/lib/engine-components/DragControls.js +516 -516
  240. package/lib/engine-components/DropListener.d.ts +15 -15
  241. package/lib/engine-components/DropListener.js +120 -120
  242. package/lib/engine-components/Duplicatable.d.ts +16 -16
  243. package/lib/engine-components/Duplicatable.js +150 -150
  244. package/lib/engine-components/EventList.d.ts +28 -28
  245. package/lib/engine-components/EventList.js +105 -105
  246. package/lib/engine-components/EventTrigger.d.ts +12 -12
  247. package/lib/engine-components/EventTrigger.js +50 -50
  248. package/lib/engine-components/EventType.d.ts +19 -19
  249. package/lib/engine-components/EventType.js +71 -71
  250. package/lib/engine-components/FlyControls.d.ts +7 -7
  251. package/lib/engine-components/FlyControls.js +25 -25
  252. package/lib/engine-components/Fog.d.ts +20 -20
  253. package/lib/engine-components/Fog.js +60 -60
  254. package/lib/engine-components/Gizmos.d.ts +12 -12
  255. package/lib/engine-components/Gizmos.js +60 -60
  256. package/lib/engine-components/GridHelper.d.ts +12 -12
  257. package/lib/engine-components/GridHelper.js +47 -47
  258. package/lib/engine-components/GroundProjection.d.ts +21 -21
  259. package/lib/engine-components/GroundProjection.js +97 -97
  260. package/lib/engine-components/Interactable.d.ts +10 -10
  261. package/lib/engine-components/Interactable.js +11 -11
  262. package/lib/engine-components/Joints.d.ts +19 -19
  263. package/lib/engine-components/Joints.js +51 -51
  264. package/lib/engine-components/LODGroup.d.ts +30 -30
  265. package/lib/engine-components/LODGroup.js +145 -145
  266. package/lib/engine-components/Light.d.ts +75 -75
  267. package/lib/engine-components/Light.js +475 -475
  268. package/lib/engine-components/LookAtConstraint.d.ts +7 -7
  269. package/lib/engine-components/LookAtConstraint.js +17 -17
  270. package/lib/engine-components/NestedGltf.d.ts +11 -11
  271. package/lib/engine-components/NestedGltf.js +74 -74
  272. package/lib/engine-components/Networking.d.ts +11 -11
  273. package/lib/engine-components/Networking.js +70 -70
  274. package/lib/engine-components/OffsetConstraint.d.ts +14 -14
  275. package/lib/engine-components/OffsetConstraint.js +65 -65
  276. package/lib/engine-components/OrbitControls.d.ts +111 -111
  277. package/lib/engine-components/OrbitControls.js +646 -646
  278. package/lib/engine-components/ParticleSystem.d.ts +145 -145
  279. package/lib/engine-components/ParticleSystem.js +1077 -1077
  280. package/lib/engine-components/ParticleSystemModules.d.ts +489 -489
  281. package/lib/engine-components/ParticleSystemModules.js +1667 -1667
  282. package/lib/engine-components/ParticleSystemSubEmitter.d.ts +25 -25
  283. package/lib/engine-components/ParticleSystemSubEmitter.js +86 -86
  284. package/lib/engine-components/PlayerColor.d.ts +13 -13
  285. package/lib/engine-components/PlayerColor.js +83 -83
  286. package/lib/engine-components/ReflectionProbe.d.ts +22 -22
  287. package/lib/engine-components/ReflectionProbe.js +181 -181
  288. package/lib/engine-components/Renderer.d.ts +112 -112
  289. package/lib/engine-components/Renderer.js +1029 -1029
  290. package/lib/engine-components/RendererLightmap.d.ts +19 -19
  291. package/lib/engine-components/RendererLightmap.js +127 -127
  292. package/lib/engine-components/RigidBody.d.ts +120 -120
  293. package/lib/engine-components/RigidBody.js +452 -452
  294. package/lib/engine-components/SceneSwitcher.d.ts +72 -72
  295. package/lib/engine-components/SceneSwitcher.js +583 -583
  296. package/lib/engine-components/ScreenCapture.d.ts +64 -64
  297. package/lib/engine-components/ScreenCapture.js +405 -405
  298. package/lib/engine-components/ShadowCatcher.d.ts +18 -18
  299. package/lib/engine-components/ShadowCatcher.js +144 -144
  300. package/lib/engine-components/Skybox.d.ts +23 -23
  301. package/lib/engine-components/Skybox.js +287 -287
  302. package/lib/engine-components/SmoothFollow.d.ts +14 -14
  303. package/lib/engine-components/SmoothFollow.js +63 -63
  304. package/lib/engine-components/SpatialTrigger.d.ts +27 -27
  305. package/lib/engine-components/SpatialTrigger.js +144 -144
  306. package/lib/engine-components/SpectatorCamera.d.ts +45 -45
  307. package/lib/engine-components/SpectatorCamera.js +593 -593
  308. package/lib/engine-components/SpriteRenderer.d.ts +48 -48
  309. package/lib/engine-components/SpriteRenderer.js +257 -257
  310. package/lib/engine-components/SyncedCamera.d.ts +27 -27
  311. package/lib/engine-components/SyncedCamera.js +187 -187
  312. package/lib/engine-components/SyncedRoom.d.ts +24 -24
  313. package/lib/engine-components/SyncedRoom.js +162 -162
  314. package/lib/engine-components/SyncedTransform.d.ts +35 -35
  315. package/lib/engine-components/SyncedTransform.js +265 -265
  316. package/lib/engine-components/TestRunner.d.ts +13 -13
  317. package/lib/engine-components/TestRunner.js +99 -99
  318. package/lib/engine-components/TransformGizmo.d.ts +16 -16
  319. package/lib/engine-components/TransformGizmo.js +148 -148
  320. package/lib/engine-components/VideoPlayer.d.ts +86 -86
  321. package/lib/engine-components/VideoPlayer.js +792 -792
  322. package/lib/engine-components/Voip.d.ts +29 -29
  323. package/lib/engine-components/Voip.js +203 -203
  324. package/lib/engine-components/XRFlag.d.ts +33 -33
  325. package/lib/engine-components/XRFlag.js +128 -128
  326. package/lib/engine-components/api.d.ts +15 -15
  327. package/lib/engine-components/api.js +15 -15
  328. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +10 -10
  329. package/lib/engine-components/avatar/AvatarBlink_Simple.js +75 -75
  330. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +13 -13
  331. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +74 -74
  332. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +27 -27
  333. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +119 -119
  334. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +13 -13
  335. package/lib/engine-components/avatar/Avatar_MouthShapes.js +78 -78
  336. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +8 -8
  337. package/lib/engine-components/avatar/Avatar_MustacheShake.js +28 -28
  338. package/lib/engine-components/codegen/components.d.ts +216 -216
  339. package/lib/engine-components/codegen/components.js +217 -217
  340. package/lib/engine-components/debug/LogStats.d.ts +5 -5
  341. package/lib/engine-components/debug/LogStats.js +18 -18
  342. package/lib/engine-components/export/gltf/GltfExport.d.ts +25 -25
  343. package/lib/engine-components/export/gltf/GltfExport.js +215 -215
  344. package/lib/engine-components/export/index.d.ts +1 -1
  345. package/lib/engine-components/export/index.js +1 -1
  346. package/lib/engine-components/export/usdz/Extension.d.ts +10 -10
  347. package/lib/engine-components/export/usdz/Extension.js +1 -1
  348. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +114 -114
  349. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1211 -1211
  350. package/lib/engine-components/export/usdz/USDZExporter.d.ts +59 -59
  351. package/lib/engine-components/export/usdz/USDZExporter.js +450 -450
  352. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +69 -69
  353. package/lib/engine-components/export/usdz/extensions/Animation.js +650 -650
  354. package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
  355. package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
  356. package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +55 -55
  357. package/lib/engine-components/export/usdz/extensions/USDZText.js +246 -246
  358. package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
  359. package/lib/engine-components/export/usdz/extensions/USDZUI.js +100 -100
  360. package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
  361. package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
  362. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +9 -9
  363. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +52 -52
  364. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +22 -22
  365. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +134 -134
  366. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +126 -126
  367. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +824 -824
  368. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +133 -133
  369. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +464 -464
  370. package/lib/engine-components/export/usdz/index.d.ts +3 -3
  371. package/lib/engine-components/export/usdz/index.js +2 -2
  372. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -3
  373. package/lib/engine-components/export/usdz/utils/animationutils.js +85 -85
  374. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
  375. package/lib/engine-components/export/usdz/utils/quicklook.js +35 -35
  376. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -1
  377. package/lib/engine-components/export/usdz/utils/timeutils.js +14 -14
  378. package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +6 -6
  379. package/lib/engine-components/js-extensions/ExtensionUtils.js +65 -65
  380. package/lib/engine-components/js-extensions/Object3D.d.ts +2 -2
  381. package/lib/engine-components/js-extensions/Object3D.js +140 -140
  382. package/lib/engine-components/js-extensions/RGBAColor.d.ts +14 -14
  383. package/lib/engine-components/js-extensions/RGBAColor.js +49 -49
  384. package/lib/engine-components/js-extensions/index.d.ts +3 -3
  385. package/lib/engine-components/js-extensions/index.js +3 -3
  386. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -13
  387. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +45 -45
  388. package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -12
  389. package/lib/engine-components/postprocessing/Effects/Bloom.js +77 -77
  390. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -8
  391. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +38 -38
  392. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -12
  393. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +81 -81
  394. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -21
  395. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +97 -97
  396. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -7
  397. package/lib/engine-components/postprocessing/Effects/Pixelation.js +28 -28
  398. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +13 -13
  399. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +86 -86
  400. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +24 -24
  401. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +94 -94
  402. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +13 -13
  403. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +62 -62
  404. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -16
  405. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +51 -51
  406. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -11
  407. package/lib/engine-components/postprocessing/Effects/Vignette.js +56 -56
  408. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +33 -33
  409. package/lib/engine-components/postprocessing/PostProcessingEffect.js +126 -126
  410. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +22 -22
  411. package/lib/engine-components/postprocessing/PostProcessingHandler.js +201 -201
  412. package/lib/engine-components/postprocessing/Volume.d.ts +25 -25
  413. package/lib/engine-components/postprocessing/Volume.js +193 -193
  414. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +22 -22
  415. package/lib/engine-components/postprocessing/VolumeParameter.js +80 -80
  416. package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -7
  417. package/lib/engine-components/postprocessing/VolumeProfile.js +41 -41
  418. package/lib/engine-components/postprocessing/index.d.ts +4 -4
  419. package/lib/engine-components/postprocessing/index.js +4 -4
  420. package/lib/engine-components/timeline/PlayableDirector.d.ts +107 -107
  421. package/lib/engine-components/timeline/PlayableDirector.js +624 -624
  422. package/lib/engine-components/timeline/SignalAsset.d.ts +18 -18
  423. package/lib/engine-components/timeline/SignalAsset.js +124 -124
  424. package/lib/engine-components/timeline/TimelineModels.d.ts +88 -88
  425. package/lib/engine-components/timeline/TimelineModels.js +22 -22
  426. package/lib/engine-components/timeline/TimelineTracks.d.ts +90 -90
  427. package/lib/engine-components/timeline/TimelineTracks.js +825 -825
  428. package/lib/engine-components/timeline/index.d.ts +4 -4
  429. package/lib/engine-components/timeline/index.js +3 -3
  430. package/lib/engine-components/ui/BaseUIComponent.d.ts +31 -31
  431. package/lib/engine-components/ui/BaseUIComponent.js +161 -161
  432. package/lib/engine-components/ui/Button.d.ts +56 -56
  433. package/lib/engine-components/ui/Button.js +282 -282
  434. package/lib/engine-components/ui/Canvas.d.ts +67 -67
  435. package/lib/engine-components/ui/Canvas.js +382 -382
  436. package/lib/engine-components/ui/CanvasGroup.d.ts +15 -15
  437. package/lib/engine-components/ui/CanvasGroup.js +53 -53
  438. package/lib/engine-components/ui/EventSystem.d.ts +102 -102
  439. package/lib/engine-components/ui/EventSystem.js +641 -641
  440. package/lib/engine-components/ui/Graphic.d.ts +45 -45
  441. package/lib/engine-components/ui/Graphic.js +236 -236
  442. package/lib/engine-components/ui/Image.d.ts +27 -27
  443. package/lib/engine-components/ui/Image.js +107 -107
  444. package/lib/engine-components/ui/InputField.d.ts +34 -34
  445. package/lib/engine-components/ui/InputField.js +234 -234
  446. package/lib/engine-components/ui/Interfaces.d.ts +38 -38
  447. package/lib/engine-components/ui/Interfaces.js +12 -12
  448. package/lib/engine-components/ui/Layout.d.ts +72 -72
  449. package/lib/engine-components/ui/Layout.js +318 -318
  450. package/lib/engine-components/ui/Outline.d.ts +7 -7
  451. package/lib/engine-components/ui/Outline.js +20 -20
  452. package/lib/engine-components/ui/PointerEvents.d.ts +64 -64
  453. package/lib/engine-components/ui/PointerEvents.js +68 -68
  454. package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
  455. package/lib/engine-components/ui/RaycastUtils.js +67 -67
  456. package/lib/engine-components/ui/Raycaster.d.ts +18 -18
  457. package/lib/engine-components/ui/Raycaster.js +69 -69
  458. package/lib/engine-components/ui/RectTransform.d.ts +61 -61
  459. package/lib/engine-components/ui/RectTransform.js +343 -343
  460. package/lib/engine-components/ui/SpatialHtml.d.ts +6 -6
  461. package/lib/engine-components/ui/SpatialHtml.js +57 -57
  462. package/lib/engine-components/ui/Text.d.ts +74 -74
  463. package/lib/engine-components/ui/Text.js +534 -534
  464. package/lib/engine-components/ui/Utils.d.ts +23 -23
  465. package/lib/engine-components/ui/Utils.js +90 -90
  466. package/lib/engine-components/ui/index.d.ts +1 -1
  467. package/lib/engine-components/ui/index.js +1 -1
  468. package/lib/engine-components/utils/LookAt.d.ts +13 -13
  469. package/lib/engine-components/utils/LookAt.js +59 -59
  470. package/lib/engine-components/utils/OpenURL.d.ts +21 -21
  471. package/lib/engine-components/utils/OpenURL.js +124 -124
  472. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +19 -19
  473. package/lib/engine-components/webxr/WebARCameraBackground.js +193 -193
  474. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +38 -38
  475. package/lib/engine-components/webxr/WebARSessionRoot.js +407 -407
  476. package/lib/engine-components/webxr/WebXR.d.ts +110 -110
  477. package/lib/engine-components/webxr/WebXR.js +672 -672
  478. package/lib/engine-components/webxr/WebXRAvatar.d.ts +61 -61
  479. package/lib/engine-components/webxr/WebXRAvatar.js +289 -289
  480. package/lib/engine-components/webxr/WebXRController.d.ts +154 -154
  481. package/lib/engine-components/webxr/WebXRController.js +1028 -1028
  482. package/lib/engine-components/webxr/WebXRGrabRendering.d.ts +42 -42
  483. package/lib/engine-components/webxr/WebXRGrabRendering.js +137 -137
  484. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +49 -49
  485. package/lib/engine-components/webxr/WebXRImageTracking.js +336 -336
  486. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +49 -49
  487. package/lib/engine-components/webxr/WebXRPlaneTracking.js +372 -372
  488. package/lib/engine-components/webxr/WebXRRig.d.ts +4 -4
  489. package/lib/engine-components/webxr/WebXRRig.js +19 -19
  490. package/lib/engine-components/webxr/WebXRSync.d.ts +54 -54
  491. package/lib/engine-components/webxr/WebXRSync.js +410 -410
  492. package/lib/engine-components/webxr/index.d.ts +4 -4
  493. package/lib/engine-components/webxr/index.js +4 -4
  494. package/lib/engine-components-experimental/Presentation.d.ts +6 -6
  495. package/lib/engine-components-experimental/Presentation.js +9 -9
  496. package/lib/engine-components-experimental/api.d.ts +1 -1
  497. package/lib/engine-components-experimental/api.js +1 -1
  498. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +50 -50
  499. package/lib/engine-components-experimental/networking/PlayerSync.js +200 -200
  500. package/lib/engine-schemes/api.d.ts +1 -1
  501. package/lib/engine-schemes/api.js +1 -1
  502. package/lib/engine-schemes/schemes.d.ts +7 -7
  503. package/lib/engine-schemes/schemes.js +19 -19
  504. package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
  505. package/lib/engine-schemes/synced-camera-model.js +67 -67
  506. package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
  507. package/lib/engine-schemes/synced-transform-model.js +66 -66
  508. package/lib/engine-schemes/transform.d.ts +12 -12
  509. package/lib/engine-schemes/transform.js +39 -39
  510. package/lib/engine-schemes/vec3.d.ts +11 -11
  511. package/lib/engine-schemes/vec3.js +29 -29
  512. package/lib/engine-schemes/vec4.d.ts +12 -12
  513. package/lib/engine-schemes/vec4.js +33 -33
  514. package/lib/engine-schemes/vr-user-state-buffer.d.ts +36 -36
  515. package/lib/engine-schemes/vr-user-state-buffer.js +103 -103
  516. package/lib/include/three/ARButton.d.ts +3 -3
  517. package/lib/include/three/ARButton.js +151 -151
  518. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
  519. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
  520. package/lib/include/three/VRButton.d.ts +5 -5
  521. package/lib/include/three/VRButton.js +118 -118
  522. package/lib/needle-engine.d.ts +6 -6
  523. package/lib/needle-engine.js +49 -49
  524. package/package.json +1 -1
  525. package/plugins/common/config.cjs +14 -14
  526. package/plugins/common/config.js +19 -19
  527. package/plugins/common/generator.js +10 -10
  528. package/plugins/common/license.cjs +30 -30
  529. package/plugins/common/version.js +11 -11
  530. package/plugins/next/license.cjs +4 -4
  531. package/plugins/next/next.js +70 -70
  532. package/plugins/types/index.d.ts +1 -1
  533. package/plugins/types/needleConfig.d.ts +21 -21
  534. package/plugins/types/userconfig.d.ts +42 -42
  535. package/plugins/vite/alias.js +70 -70
  536. package/plugins/vite/build.js +19 -19
  537. package/plugins/vite/config.js +73 -73
  538. package/plugins/vite/copyfiles.js +134 -134
  539. package/plugins/vite/defines.js +45 -45
  540. package/plugins/vite/dependency-watcher.js +224 -224
  541. package/plugins/vite/drop-client.js +76 -76
  542. package/plugins/vite/drop.js +82 -82
  543. package/plugins/vite/editor-connection.js +121 -121
  544. package/plugins/vite/facebook-instant-games.js +99 -99
  545. package/plugins/vite/gzip.js +5 -5
  546. package/plugins/vite/imports-logger.js +143 -143
  547. package/plugins/vite/index.js +81 -81
  548. package/plugins/vite/license.js +42 -42
  549. package/plugins/vite/meta.js +149 -149
  550. package/plugins/vite/peer.js +31 -31
  551. package/plugins/vite/poster-client.js +59 -59
  552. package/plugins/vite/poster.js +73 -73
  553. package/plugins/vite/reload-client.js +15 -15
  554. package/plugins/vite/reload.js +363 -363
  555. package/plugins/vite/transform-codegen.js +55 -55
  556. package/plugins/vite/vite-4.4-hack.js +31 -31
  557. package/src/engine/api.ts +54 -54
  558. package/src/engine/assets/index.ts +4 -4
  559. package/src/engine/codegen/register_types.ts +441 -441
  560. package/src/engine/debug/debug.ts +29 -29
  561. package/src/engine/debug/debug_console.ts +213 -213
  562. package/src/engine/debug/debug_overlay.ts +283 -283
  563. package/src/engine/engine.ts +13 -13
  564. package/src/engine/engine_addressables.ts +494 -494
  565. package/src/engine/engine_application.ts +53 -53
  566. package/src/engine/engine_assetdatabase.ts +383 -383
  567. package/src/engine/engine_camera.ts +32 -32
  568. package/src/engine/engine_components.ts +266 -266
  569. package/src/engine/engine_components_internal.ts +42 -42
  570. package/src/engine/engine_constants.ts +42 -42
  571. package/src/engine/engine_context.ts +1386 -1386
  572. package/src/engine/engine_context_registry.ts +103 -103
  573. package/src/engine/engine_coroutine.ts +24 -24
  574. package/src/engine/engine_create_objects.ts +39 -39
  575. package/src/engine/engine_default_parameters.ts +3 -3
  576. package/src/engine/engine_editor-sync.ts +29 -29
  577. package/src/engine/engine_element.ts +592 -592
  578. package/src/engine/engine_element_attributes.ts +61 -61
  579. package/src/engine/engine_element_extras.ts +16 -16
  580. package/src/engine/engine_element_loading.ts +341 -341
  581. package/src/engine/engine_element_overlay.ts +160 -160
  582. package/src/engine/engine_fileloader.js +8 -8
  583. package/src/engine/engine_gameobject.ts +621 -621
  584. package/src/engine/engine_generic_utils.js +13 -13
  585. package/src/engine/engine_gizmos.ts +321 -321
  586. package/src/engine/engine_gltf.ts +30 -30
  587. package/src/engine/engine_gltf_builtin_components.ts +350 -350
  588. package/src/engine/engine_hot_reload.ts +196 -196
  589. package/src/engine/engine_input.ts +879 -879
  590. package/src/engine/engine_input_utils.ts +23 -23
  591. package/src/engine/engine_instancing.ts +42 -42
  592. package/src/engine/engine_license.ts +413 -413
  593. package/src/engine/engine_lifecycle_api.ts +29 -29
  594. package/src/engine/engine_lifecycle_functions_internal.ts +36 -36
  595. package/src/engine/engine_lightdata.ts +113 -113
  596. package/src/engine/engine_loaders.ts +77 -77
  597. package/src/engine/engine_mainloop_utils.ts +431 -431
  598. package/src/engine/engine_math.ts +174 -174
  599. package/src/engine/engine_networking.ts +742 -742
  600. package/src/engine/engine_networking_auto.ts +373 -373
  601. package/src/engine/engine_networking_files.ts +206 -206
  602. package/src/engine/engine_networking_files_default_components.ts +54 -54
  603. package/src/engine/engine_networking_instantiate.ts +362 -362
  604. package/src/engine/engine_networking_peer.ts +158 -158
  605. package/src/engine/engine_networking_streams.ts +489 -489
  606. package/src/engine/engine_networking_types.ts +18 -18
  607. package/src/engine/engine_networking_utils.ts +23 -23
  608. package/src/engine/engine_networking_websocket.ts +2 -2
  609. package/src/engine/engine_patcher.ts +199 -199
  610. package/src/engine/engine_physics.ts +287 -287
  611. package/src/engine/engine_physics.types.ts +43 -43
  612. package/src/engine/engine_physics_rapier.ts +1385 -1385
  613. package/src/engine/engine_playerview.ts +79 -79
  614. package/src/engine/engine_scenelighting.ts +313 -313
  615. package/src/engine/engine_scenetools.ts +242 -242
  616. package/src/engine/engine_serialization.ts +6 -6
  617. package/src/engine/engine_serialization_builtin_serializer.ts +415 -415
  618. package/src/engine/engine_serialization_core.ts +680 -680
  619. package/src/engine/engine_serialization_decorator.ts +68 -68
  620. package/src/engine/engine_setup.ts +1 -1
  621. package/src/engine/engine_shaders.ts +242 -242
  622. package/src/engine/engine_shims.ts +28 -28
  623. package/src/engine/engine_texture.ts +70 -70
  624. package/src/engine/engine_three_utils.ts +382 -382
  625. package/src/engine/engine_time.ts +55 -55
  626. package/src/engine/engine_types.ts +489 -489
  627. package/src/engine/engine_typestore.ts +41 -41
  628. package/src/engine/engine_util_decorator.ts +134 -134
  629. package/src/engine/engine_utils.ts +605 -605
  630. package/src/engine/engine_utils_screenshot.ts +84 -84
  631. package/src/engine/engine_web_api.ts +119 -119
  632. package/src/engine/extensions/EXT_texture_exr.ts +49 -49
  633. package/src/engine/extensions/NEEDLE_animator_controller_model.ts +193 -193
  634. package/src/engine/extensions/NEEDLE_components.ts +250 -250
  635. package/src/engine/extensions/NEEDLE_gameobject_data.ts +82 -82
  636. package/src/engine/extensions/NEEDLE_lighting_settings.ts +210 -210
  637. package/src/engine/extensions/NEEDLE_lightmaps.ts +130 -130
  638. package/src/engine/extensions/NEEDLE_persistent_assets.ts +75 -75
  639. package/src/engine/extensions/NEEDLE_progressive.ts +412 -412
  640. package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
  641. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +618 -618
  642. package/src/engine/extensions/extension_resolver.ts +4 -4
  643. package/src/engine/extensions/extension_utils.ts +149 -149
  644. package/src/engine/extensions/extensions.ts +118 -118
  645. package/src/engine/extensions/index.ts +4 -4
  646. package/src/engine/extensions/usage_tracker.ts +95 -95
  647. package/src/engine/js-extensions/Camera.ts +34 -34
  648. package/src/engine/js-extensions/Layers.ts +19 -19
  649. package/src/engine/js-extensions/index.ts +1 -1
  650. package/src/engine/shaders/shaderData.ts +67 -67
  651. package/src/engine/tests/test_utils.ts +63 -63
  652. package/src/engine-components/AlignmentConstraint.ts +35 -35
  653. package/src/engine-components/Animation.ts +345 -345
  654. package/src/engine-components/AnimationCurve.ts +83 -83
  655. package/src/engine-components/AnimationUtils.ts +117 -117
  656. package/src/engine-components/Animator.ts +243 -243
  657. package/src/engine-components/AnimatorController.ts +1020 -1020
  658. package/src/engine-components/AudioListener.ts +32 -32
  659. package/src/engine-components/AudioSource.ts +419 -419
  660. package/src/engine-components/AvatarLoader.ts +204 -204
  661. package/src/engine-components/AxesHelper.ts +33 -33
  662. package/src/engine-components/BasicIKConstraint.ts +53 -53
  663. package/src/engine-components/BoxCollider.ts +1 -1
  664. package/src/engine-components/BoxHelperComponent.ts +100 -100
  665. package/src/engine-components/Camera.ts +454 -454
  666. package/src/engine-components/CameraUtils.ts +89 -89
  667. package/src/engine-components/CharacterController.ts +243 -243
  668. package/src/engine-components/Collider.ts +160 -160
  669. package/src/engine-components/Component.ts +670 -670
  670. package/src/engine-components/ContactShadows.ts +265 -265
  671. package/src/engine-components/DeleteBox.ts +35 -35
  672. package/src/engine-components/DeviceFlag.ts +42 -42
  673. package/src/engine-components/DragControls.ts +574 -574
  674. package/src/engine-components/DropListener.ts +112 -112
  675. package/src/engine-components/Duplicatable.ts +146 -146
  676. package/src/engine-components/EventList.ts +125 -125
  677. package/src/engine-components/EventTrigger.ts +47 -47
  678. package/src/engine-components/EventType.ts +87 -87
  679. package/src/engine-components/FlyControls.ts +31 -31
  680. package/src/engine-components/Fog.ts +59 -59
  681. package/src/engine-components/Gizmos.ts +52 -52
  682. package/src/engine-components/GridHelper.ts +40 -40
  683. package/src/engine-components/GroundProjection.ts +97 -97
  684. package/src/engine-components/Interactable.ts +18 -18
  685. package/src/engine-components/Joints.ts +51 -51
  686. package/src/engine-components/LODGroup.ts +145 -145
  687. package/src/engine-components/Light.ts +493 -493
  688. package/src/engine-components/LookAtConstraint.ts +11 -11
  689. package/src/engine-components/NestedGltf.ts +70 -70
  690. package/src/engine-components/Networking.ts +72 -72
  691. package/src/engine-components/OffsetConstraint.ts +59 -59
  692. package/src/engine-components/OrbitControls.ts +653 -653
  693. package/src/engine-components/ParticleSystem.ts +1192 -1192
  694. package/src/engine-components/ParticleSystemModules.ts +1481 -1481
  695. package/src/engine-components/ParticleSystemSubEmitter.ts +110 -110
  696. package/src/engine-components/PlayerColor.ts +93 -93
  697. package/src/engine-components/ReflectionProbe.ts +192 -192
  698. package/src/engine-components/Renderer.ts +1125 -1125
  699. package/src/engine-components/RendererLightmap.ts +145 -145
  700. package/src/engine-components/RigidBody.ts +453 -453
  701. package/src/engine-components/SceneSwitcher.ts +594 -594
  702. package/src/engine-components/ScreenCapture.ts +437 -437
  703. package/src/engine-components/ShadowCatcher.ts +149 -149
  704. package/src/engine-components/Skybox.ts +281 -281
  705. package/src/engine-components/SmoothFollow.ts +57 -57
  706. package/src/engine-components/SpatialTrigger.ts +142 -142
  707. package/src/engine-components/SpectatorCamera.ts +675 -675
  708. package/src/engine-components/SphereCollider.ts +1 -1
  709. package/src/engine-components/SpriteRenderer.ts +244 -244
  710. package/src/engine-components/SyncedCamera.ts +208 -208
  711. package/src/engine-components/SyncedRoom.ts +166 -166
  712. package/src/engine-components/SyncedTransform.ts +336 -336
  713. package/src/engine-components/TestRunner.ts +114 -114
  714. package/src/engine-components/TransformGizmo.ts +157 -157
  715. package/src/engine-components/VideoPlayer.ts +831 -831
  716. package/src/engine-components/Voip.ts +214 -214
  717. package/src/engine-components/XRFlag.ts +138 -138
  718. package/src/engine-components/api.ts +22 -22
  719. package/src/engine-components/avatar/AvatarBlink_Simple.ts +67 -67
  720. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +68 -68
  721. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +136 -136
  722. package/src/engine-components/avatar/Avatar_MouthShapes.ts +81 -81
  723. package/src/engine-components/avatar/Avatar_MustacheShake.ts +28 -28
  724. package/src/engine-components/codegen/components.ts +216 -216
  725. package/src/engine-components/debug/LogStats.ts +21 -21
  726. package/src/engine-components/export/gltf/GltfExport.ts +231 -231
  727. package/src/engine-components/export/usdz/Extension.ts +11 -11
  728. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1773 -1773
  729. package/src/engine-components/export/usdz/USDZExporter.ts +477 -477
  730. package/src/engine-components/export/usdz/extensions/Animation.ts +774 -774
  731. package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
  732. package/src/engine-components/export/usdz/extensions/USDZText.ts +287 -287
  733. package/src/engine-components/export/usdz/extensions/USDZUI.ts +119 -119
  734. package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +98 -98
  735. package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +67 -67
  736. package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +202 -202
  737. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +963 -963
  738. package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +517 -517
  739. package/src/engine-components/export/usdz/index.ts +2 -2
  740. package/src/engine-components/export/usdz/utils/animationutils.ts +100 -100
  741. package/src/engine-components/export/usdz/utils/quicklook.ts +42 -42
  742. package/src/engine-components/export/usdz/utils/timeutils.ts +19 -19
  743. package/src/engine-components/js-extensions/ExtensionUtils.ts +81 -81
  744. package/src/engine-components/js-extensions/Object3D.ts +181 -181
  745. package/src/engine-components/js-extensions/RGBAColor.ts +54 -54
  746. package/src/engine-components/js-extensions/Vector.ts +16 -16
  747. package/src/engine-components/js-extensions/index.ts +2 -2
  748. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +51 -51
  749. package/src/engine-components/postprocessing/Effects/Bloom.ts +76 -76
  750. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +35 -35
  751. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +96 -96
  752. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +93 -93
  753. package/src/engine-components/postprocessing/Effects/Pixelation.ts +26 -26
  754. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +84 -84
  755. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +98 -98
  756. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +55 -55
  757. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +54 -54
  758. package/src/engine-components/postprocessing/Effects/Vignette.ts +54 -54
  759. package/src/engine-components/postprocessing/PostProcessingEffect.ts +148 -148
  760. package/src/engine-components/postprocessing/PostProcessingHandler.ts +232 -232
  761. package/src/engine-components/postprocessing/Volume.ts +216 -216
  762. package/src/engine-components/postprocessing/VolumeParameter.ts +92 -92
  763. package/src/engine-components/postprocessing/VolumeProfile.ts +40 -40
  764. package/src/engine-components/postprocessing/index.ts +3 -3
  765. package/src/engine-components/timeline/PlayableDirector.ts +666 -666
  766. package/src/engine-components/timeline/SignalAsset.ts +138 -138
  767. package/src/engine-components/timeline/TimelineModels.ts +93 -93
  768. package/src/engine-components/timeline/TimelineTracks.ts +906 -906
  769. package/src/engine-components/timeline/index.ts +3 -3
  770. package/src/engine-components/ui/BaseUIComponent.ts +195 -195
  771. package/src/engine-components/ui/Button.ts +283 -283
  772. package/src/engine-components/ui/Canvas.ts +390 -390
  773. package/src/engine-components/ui/CanvasGroup.ts +49 -49
  774. package/src/engine-components/ui/EventSystem.ts +736 -736
  775. package/src/engine-components/ui/Graphic.ts +255 -255
  776. package/src/engine-components/ui/Image.ts +102 -102
  777. package/src/engine-components/ui/InputField.ts +290 -290
  778. package/src/engine-components/ui/Interfaces.ts +57 -57
  779. package/src/engine-components/ui/Layout.ts +322 -322
  780. package/src/engine-components/ui/Outline.ts +12 -12
  781. package/src/engine-components/ui/PointerEvents.ts +118 -118
  782. package/src/engine-components/ui/RaycastUtils.ts +68 -68
  783. package/src/engine-components/ui/Raycaster.ts +73 -73
  784. package/src/engine-components/ui/RectTransform.ts +364 -364
  785. package/src/engine-components/ui/SpatialHtml.ts +63 -63
  786. package/src/engine-components/ui/Text.ts +572 -572
  787. package/src/engine-components/ui/Utils.ts +110 -110
  788. package/src/engine-components/utils/LookAt.ts +65 -65
  789. package/src/engine-components/utils/OpenURL.ts +118 -118
  790. package/src/engine-components/webxr/WebARCameraBackground.ts +224 -224
  791. package/src/engine-components/webxr/WebARSessionRoot.ts +446 -446
  792. package/src/engine-components/webxr/WebXR.ts +761 -761
  793. package/src/engine-components/webxr/WebXRAvatar.ts +356 -356
  794. package/src/engine-components/webxr/WebXRController.ts +1168 -1168
  795. package/src/engine-components/webxr/WebXRGrabRendering.ts +150 -150
  796. package/src/engine-components/webxr/WebXRImageTracking.ts +371 -371
  797. package/src/engine-components/webxr/WebXRPlaneTracking.ts +429 -429
  798. package/src/engine-components/webxr/WebXRRig.ts +21 -21
  799. package/src/engine-components/webxr/WebXRSync.ts +463 -463
  800. package/src/engine-components/webxr/index.ts +3 -3
  801. package/src/engine-components-experimental/Presentation.ts +12 -12
  802. package/src/engine-components-experimental/networking/PlayerSync.ts +217 -217
  803. package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
  804. package/src/engine-schemes/COMPILE_TS.bat +11 -11
  805. package/src/engine-schemes/schemes.ts +27 -27
  806. package/src/engine-schemes/synced-camera-model.ts +92 -92
  807. package/src/engine-schemes/synced-transform-model.ts +90 -90
  808. package/src/engine-schemes/syncedCamera.fbs +10 -10
  809. package/src/engine-schemes/transform.ts +50 -50
  810. package/src/engine-schemes/transforms.fbs +25 -25
  811. package/src/engine-schemes/vec.fbs +19 -19
  812. package/src/engine-schemes/vec2.ts +33 -33
  813. package/src/engine-schemes/vec3.ts +38 -38
  814. package/src/engine-schemes/vec4.ts +43 -43
  815. package/src/engine-schemes/vr-user-state-buffer.ts +138 -138
  816. package/src/engine-schemes/vrUserStateBuffer.fbs +16 -16
  817. package/src/include/draco/draco_decoder.js +34 -34
  818. package/src/include/draco/draco_wasm_wrapper.js +117 -117
  819. package/src/include/ktx2/basis_transcoder.js +21 -21
  820. package/src/include/needle/arial-msdf.json +1471 -1471
  821. package/src/include/three/ARButton.js +231 -231
  822. package/src/include/three/DragControls.js +231 -231
  823. package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
  824. package/src/include/three/VRButton.js +194 -194
  825. package/src/needle-engine.ts +55 -55
  826. package/src/engine/dist/api.js +0 -73
  827. package/src/engine/dist/api.js.meta +0 -7
  828. package/src/engine/dist/engine_networking_streams.js +0 -474
  829. package/src/engine/dist/engine_networking_streams.js.meta +0 -7
  830. package/src/engine-schemes/dist/api.js +0 -17
  831. package/src/engine-schemes/dist/api.js.meta +0 -7
  832. package/src/engine-schemes/dist/schemes.js +0 -25
  833. package/src/engine-schemes/dist/schemes.js.meta +0 -7
  834. package/src/engine-schemes/dist/synced-camera-model.js +0 -74
  835. package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
  836. package/src/engine-schemes/dist/synced-transform-model.js +0 -73
  837. package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
  838. package/src/engine-schemes/dist/transform.js +0 -46
  839. package/src/engine-schemes/dist/transform.js.meta +0 -7
  840. package/src/engine-schemes/dist/vec2.js +0 -32
  841. package/src/engine-schemes/dist/vec2.js.meta +0 -7
  842. package/src/engine-schemes/dist/vec3.js +0 -36
  843. package/src/engine-schemes/dist/vec3.js.meta +0 -7
  844. package/src/engine-schemes/dist/vec4.js +0 -40
  845. package/src/engine-schemes/dist/vec4.js.meta +0 -7
  846. package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
  847. package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
  848. package/src/engine-schemes/flatc.exe +0 -0
@@ -1,800 +1,800 @@
1
- import { Vector2 } from 'three';
2
- import { showBalloonMessage, showBalloonWarning } from './debug/debug.js';
3
- import { Context } from './engine_setup.js';
4
- import { getParam } from './engine_utils.js';
5
- const debug = getParam("debuginput");
6
- export class NEPointerEvent extends PointerEvent {
7
- source;
8
- constructor(type, source, init) {
9
- super(type, init);
10
- this.source = source;
11
- }
12
- stopImmediatePropagation() {
13
- super.stopImmediatePropagation();
14
- this.source?.stopImmediatePropagation();
15
- }
16
- }
17
- export class NEKeyboardEvent extends KeyboardEvent {
18
- source;
19
- constructor(type, source, init) {
20
- super(type, init);
21
- this.source = source;
22
- }
23
- stopImmediatePropagation() {
24
- super.stopImmediatePropagation();
25
- this.source?.stopImmediatePropagation();
26
- }
27
- }
28
- export class KeyEventArgs {
29
- key;
30
- keyType;
31
- source;
32
- constructor(evt) {
33
- this.key = evt.key;
34
- this.keyType = evt.type;
35
- this.source = evt;
36
- }
37
- }
38
- export var InputEvents;
39
- (function (InputEvents) {
40
- InputEvents["PointerDown"] = "pointerdown";
41
- InputEvents["PointerUp"] = "pointerup";
42
- InputEvents["PointerMove"] = "pointermove";
43
- InputEvents["KeyDown"] = "keydown";
44
- InputEvents["KeyUp"] = "keyup";
45
- InputEvents["KeyPressed"] = "keypress";
46
- })(InputEvents || (InputEvents = {}));
47
- export var PointerType;
48
- (function (PointerType) {
49
- PointerType["Mouse"] = "mouse";
50
- PointerType["Touch"] = "touch";
51
- })(PointerType || (PointerType = {}));
52
- export class Input extends EventTarget {
53
- _doubleClickTimeThreshold = .2;
54
- _longPressTimeThreshold = 1;
55
- get mousePosition() { return this._pointerPositions[0]; }
56
- ;
57
- get mousePositionRC() { return this._pointerPositionsRC[0]; }
58
- get mouseDown() { return this._pointerDown[0]; }
59
- get mouseUp() { return this._pointerUp[0]; }
60
- get mouseClick() { return this._pointerClick[0]; }
61
- get mouseDoubleClick() { return this._pointerDoubleClick[0]; }
62
- get mousePressed() { return this._pointerPressed[0]; }
63
- get mouseWheelChanged() { return this.getMouseWheelChanged(0); }
64
- _specialCursorTrigger = 0;
65
- setCursorPointer() {
66
- this._specialCursorTrigger += 1;
67
- this.context.domElement.style.cursor = "pointer";
68
- }
69
- setCursorNormal() {
70
- this._specialCursorTrigger -= 1;
71
- this._specialCursorTrigger = Math.max(0, this._specialCursorTrigger);
72
- if (this._specialCursorTrigger === 0)
73
- this.context.domElement.style.cursor = "default";
74
- }
75
- setPointerUsed(i, used = true) {
76
- if (i >= this._pointerUsed.length) {
77
- if (i >= this._pointerIds.length)
78
- return;
79
- while (this._pointerUsed.length <= i) {
80
- this._pointerUsed.push(false);
81
- }
82
- }
83
- this._pointerUsed[i] = used;
84
- }
85
- getPointerUsed(i) {
86
- if (i >= this._pointerUsed.length)
87
- return false;
88
- return this._pointerUsed[i];
89
- }
90
- /** how many pointers are currently pressed */
91
- getPointerPressedCount() {
92
- let count = 0;
93
- for (let i = 0; i < this._pointerPressed.length; i++) {
94
- if (this._pointerPressed[i]) {
95
- count++;
96
- }
97
- }
98
- return count;
99
- }
100
- getPointerPosition(i) {
101
- if (i >= this._pointerPositions.length)
102
- return null;
103
- return this._pointerPositions[i];
104
- }
105
- getPointerPositionLastFrame(i) {
106
- if (i >= this._pointerPositionsLastFrame.length)
107
- return null;
108
- return this._pointerPositionsLastFrame[i];
109
- }
110
- getPointerPositionDelta(i) {
111
- if (i >= this._pointerPositionsDelta.length)
112
- return null;
113
- return this._pointerPositionsDelta[i];
114
- }
115
- getPointerPositionRC(i) {
116
- if (i >= this._pointerPositionsRC.length)
117
- return null;
118
- return this._pointerPositionsRC[i];
119
- }
120
- getPointerDown(i) {
121
- if (i >= this._pointerDown.length)
122
- return false;
123
- return this._pointerDown[i];
124
- }
125
- getPointerUp(i) {
126
- if (i >= this._pointerUp.length)
127
- return false;
128
- return this._pointerUp[i];
129
- }
130
- getPointerPressed(i) {
131
- if (i >= this._pointerPressed.length)
132
- return false;
133
- return this._pointerPressed[i];
134
- }
135
- getPointerClicked(i) {
136
- if (i >= this._pointerClick.length)
137
- return false;
138
- return this._pointerClick[i];
139
- }
140
- getPointerDoubleClicked(i) {
141
- if (i >= this._pointerDoubleClick.length)
142
- return false;
143
- return this._pointerDoubleClick[i];
144
- }
145
- getPointerDownTime(i) {
146
- if (i >= this._pointerDownTime.length)
147
- return -1;
148
- return this._pointerDownTime[i];
149
- }
150
- getPointerUpTime(i) {
151
- if (i >= this._pointerUpTime.length)
152
- return -1;
153
- return this._pointerUpTime[i];
154
- }
155
- getPointerLongPress(i) {
156
- if (i >= this._pointerDownTime.length)
157
- return false;
158
- return this.getPointerPressed(i) && this.context.time.time - this._pointerDownTime[i] > this._longPressTimeThreshold;
159
- }
160
- getIsMouse(i) {
161
- if (i < 0 || i >= this._pointerTypes.length)
162
- return false;
163
- return this._pointerTypes[i] === PointerType.Mouse;
164
- }
165
- getIsTouch(i) {
166
- if (i < 0 || i >= this._pointerTypes.length)
167
- return false;
168
- return this._pointerTypes[i] === PointerType.Touch;
169
- }
170
- getTouchesPressedCount() {
171
- let count = 0;
172
- for (let i = 0; i < this._pointerPressed.length; i++) {
173
- if (this._pointerPressed[i] && this.getIsTouch(i)) {
174
- count++;
175
- }
176
- }
177
- return count;
178
- }
179
- getMouseWheelChanged(i = 0) {
180
- if (i >= this._mouseWheelChanged.length)
181
- return false;
182
- return this._mouseWheelChanged[i];
183
- }
184
- getMouseWheelDeltaY(i = 0) {
185
- if (i >= this._mouseWheelDeltaY.length)
186
- return 0;
187
- return this._mouseWheelDeltaY[i];
188
- }
189
- getPointerEvent(i) {
190
- if (i >= this._pointerEvent.length)
191
- return undefined;
192
- return this._pointerEvent[i] ?? undefined;
193
- }
194
- *foreachPointerId(pointerType) {
195
- for (let i = 0; i < this._pointerTypes.length; i++) {
196
- // check if the pointer is active
197
- if (this._pointerIsActive(i)) {
198
- // if specific pointer types are requested
199
- if (pointerType !== undefined) {
200
- const type = this._pointerTypes[i];
201
- if (Array.isArray(pointerType)) {
202
- let isInArray = false;
203
- for (const t of pointerType) {
204
- if (type === t) {
205
- isInArray = true;
206
- break;
207
- }
208
- }
209
- if (!isInArray)
210
- continue;
211
- }
212
- else {
213
- if (pointerType !== type)
214
- continue;
215
- }
216
- }
217
- yield i;
218
- }
219
- }
220
- }
221
- *foreachTouchId() {
222
- for (let i = 0; i < this._pointerTypes.length; i++) {
223
- const type = this._pointerTypes[i];
224
- if (type !== PointerType.Touch)
225
- continue;
226
- if (this._pointerIsActive[i])
227
- yield i;
228
- }
229
- }
230
- _pointerIsActive(index) {
231
- if (index < 0)
232
- return false;
233
- return this._pointerPressed[index] || this._pointerDown[index] || this._pointerUp[index];
234
- }
235
- context;
236
- _pointerDown = [false];
237
- _pointerUp = [false];
238
- _pointerClick = [false];
239
- _pointerDoubleClick = [false];
240
- _pointerPressed = [false];
241
- _pointerPositions = [new Vector2()];
242
- _pointerPositionsLastFrame = [new Vector2()];
243
- _pointerPositionsDelta = [new Vector2()];
244
- _pointerPositionsRC = [new Vector2()];
245
- _pointerPositionDown = [new Vector2()];
246
- _pointerDownTime = [];
247
- _pointerUpTime = [];
248
- _pointerUpTimestamp = [];
249
- _pointerIds = [];
250
- _pointerTypes = [""];
251
- _mouseWheelChanged = [false];
252
- _mouseWheelDeltaY = [0];
253
- _pointerEvent = [];
254
- _pointerUsed = [];
255
- getKeyDown() {
256
- for (const key in this.keysPressed) {
257
- const k = this.keysPressed[key];
258
- if (k.startFrame === this.context.time.frameCount)
259
- return k.key;
260
- }
261
- return null;
262
- }
263
- getKeyPressed() {
264
- for (const key in this.keysPressed) {
265
- const k = this.keysPressed[key];
266
- if (k.pressed)
267
- return k.key;
268
- }
269
- return null;
270
- }
271
- isKeyDown(keyCode) {
272
- if (!this.context.application.isVisible || !this.context.application.hasFocus)
273
- return false;
274
- const codes = this.getCodeForCommonKeyName(keyCode);
275
- if (codes !== null) {
276
- for (const code of codes)
277
- if (this.isKeyDown(code))
278
- return true;
279
- return false;
280
- }
281
- return this.keysPressed[keyCode]?.startFrame === this.context.time.frameCount && this.keysPressed[keyCode].pressed;
282
- }
283
- isKeyUp(keyCode) {
284
- if (!this.context.application.isVisible || !this.context.application.hasFocus)
285
- return false;
286
- const codes = this.getCodeForCommonKeyName(keyCode);
287
- if (codes !== null) {
288
- for (const code of codes)
289
- if (this.isKeyUp(code))
290
- return true;
291
- return false;
292
- }
293
- return this.keysPressed[keyCode]?.frame === this.context.time.frameCount && !this.keysPressed[keyCode].pressed;
294
- }
295
- isKeyPressed(keyCode) {
296
- if (!this.context.application.isVisible || !this.context.application.hasFocus)
297
- return false;
298
- const codes = this.getCodeForCommonKeyName(keyCode);
299
- if (codes !== null) {
300
- for (const code of codes)
301
- if (this.isKeyPressed(code))
302
- return true;
303
- return false;
304
- }
305
- return this.keysPressed[keyCode]?.pressed; // && time.frameCount - this.keysPressed[keyCode].frame < 100;
306
- }
307
- // utility helper for mapping common names to actual codes; e.g. "Shift" -> "ShiftLeft" and "ShiftRight" or "a" -> "KeyA"
308
- getCodeForCommonKeyName(keyName) {
309
- if (keyName.length === 1) {
310
- // check if this is a digit
311
- if (keyName >= "0" && keyName <= "9")
312
- return ["Digit" + keyName];
313
- // check if this is a letter
314
- if (keyName >= "a" && keyName <= "z")
315
- return ["Key" + keyName.toUpperCase()];
316
- if (keyName == " ")
317
- return ["Space"];
318
- }
319
- switch (keyName) {
320
- case "shift":
321
- case "Shift":
322
- return ["ShiftLeft", "ShiftRight"];
323
- case "control":
324
- case "Control":
325
- return ["ControlLeft", "ControlRight"];
326
- case "alt":
327
- case "Alt":
328
- return ["AltLeft", "AltRight"];
329
- }
330
- return null;
331
- }
332
- createPointerDown(args) {
333
- if (debug)
334
- showBalloonMessage("Create Pointer down");
335
- this.onDown(args);
336
- }
337
- createPointerMove(args) {
338
- if (debug)
339
- showBalloonMessage("Create Pointer move");
340
- this.onMove(args);
341
- }
342
- createPointerUp(args) {
343
- if (debug)
344
- showBalloonMessage("Create Pointer up");
345
- this.onUp(args);
346
- }
347
- convertScreenspaceToRaycastSpace(vec2) {
348
- vec2.x = (vec2.x - this.context.domX) / this.context.domWidth * 2 - 1;
349
- vec2.y = -((vec2.y - this.context.domY) / this.context.domHeight) * 2 + 1;
350
- }
351
- constructor(context) {
352
- super();
353
- this.context = context;
354
- this.context.post_render_callbacks.push(this.onEndOfFrame);
355
- window.addEventListener('touchstart', this.onTouchStart, false);
356
- window.addEventListener('touchmove', this.onTouchMove, { passive: true });
357
- window.addEventListener('touchend', this.onTouchUp, false);
358
- window.addEventListener('mousedown', this.onMouseDown, false);
359
- window.addEventListener('mousemove', this.onMouseMove, false);
360
- window.addEventListener('mouseup', this.onMouseUp, false);
361
- window.addEventListener('wheel', this.onMouseWheel, { passive: true });
362
- window.addEventListener("keydown", this.onKeyDown, false);
363
- window.addEventListener("keypress", this.onKeyPressed, false);
364
- window.addEventListener("keyup", this.onKeyUp, false);
365
- // e.g. when using sharex to capture we loose focus thus dont get e.g. key up events
366
- window.addEventListener('blur', this.onLostFocus);
367
- }
368
- dispose() {
369
- const index = this.context.post_render_callbacks.indexOf(this.onEndOfFrame);
370
- if (index >= 0)
371
- this.context.post_render_callbacks.splice(index, 1);
372
- window.removeEventListener('touchstart', this.onTouchStart, false);
373
- window.removeEventListener('touchmove', this.onTouchMove, false);
374
- window.removeEventListener('touchend', this.onTouchUp, false);
375
- window.removeEventListener('mousedown', this.onMouseDown, false);
376
- window.removeEventListener('mousemove', this.onMouseMove, false);
377
- window.removeEventListener('mouseup', this.onMouseUp, false);
378
- window.removeEventListener('wheel', this.onMouseWheel, false);
379
- window.removeEventListener("keydown", this.onKeyDown, false);
380
- window.removeEventListener("keypress", this.onKeyPressed, false);
381
- window.removeEventListener("keyup", this.onKeyUp, false);
382
- window.removeEventListener('blur', this.onLostFocus);
383
- }
384
- onLostFocus = () => {
385
- for (const kp in this.keysPressed) {
386
- this.keysPressed[kp].pressed = false;
387
- }
388
- };
389
- onEndOfFrame = () => {
390
- for (let i = 0; i < this._pointerUp.length; i++)
391
- this._pointerUp[i] = false;
392
- for (let i = 0; i < this._pointerDown.length; i++)
393
- this._pointerDown[i] = false;
394
- for (let i = 0; i < this._pointerClick.length; i++)
395
- this._pointerClick[i] = false;
396
- for (let i = 0; i < this._pointerDoubleClick.length; i++)
397
- this._pointerDoubleClick[i] = false;
398
- for (const pt of this._pointerPositionsDelta)
399
- pt.set(0, 0);
400
- for (let i = 0; i < this._mouseWheelChanged.length; i++)
401
- this._mouseWheelChanged[i] = false;
402
- for (let i = 0; i < this._mouseWheelDeltaY.length; i++)
403
- this._mouseWheelDeltaY[i] = 0;
404
- };
405
- canReceiveInput(evt) {
406
- // If the user has HTML objects ontop of the canvas
407
- // if(evt.target === this.context.renderer.domElement) return true;
408
- // const css = window.getComputedStyle(evt.target as HTMLElement);
409
- // if(css.pointerEvents === "all") return false;
410
- // We only check the target elements here since the canvas may be overlapped by other elements
411
- // in which case we do not want to use the input (e.g. if a HTML element is being triggered)
412
- if (evt.target === this.context.renderer?.domElement)
413
- return true;
414
- if (evt.target === this.context.domElement)
415
- return true;
416
- return false;
417
- }
418
- keysPressed = {};
419
- onKeyDown = (evt) => {
420
- if (!this.context.application.hasFocus)
421
- return;
422
- const ex = this.keysPressed[evt.code];
423
- if (ex && ex.pressed)
424
- return;
425
- this.keysPressed[evt.code] = { pressed: true, frame: this.context.time.frameCount + 1, startFrame: this.context.time.frameCount + 1, key: evt.key, code: evt.code };
426
- const ne = new NEKeyboardEvent(InputEvents.KeyDown, evt, evt);
427
- this.onDispatchEvent(ne);
428
- };
429
- onKeyPressed = (evt) => {
430
- if (!this.context.application.hasFocus)
431
- return;
432
- const p = this.keysPressed[evt.code];
433
- if (!p)
434
- return;
435
- p.pressed = true;
436
- p.frame = this.context.time.frameCount + 1;
437
- const ne = new NEKeyboardEvent(InputEvents.KeyPressed, evt, evt);
438
- this.onDispatchEvent(ne);
439
- };
440
- onKeyUp = (evt) => {
441
- if (!this.context.application.hasFocus)
442
- return;
443
- const p = this.keysPressed[evt.code];
444
- if (!p)
445
- return;
446
- p.pressed = false;
447
- p.frame = this.context.time.frameCount + 1;
448
- const ne = new NEKeyboardEvent(InputEvents.KeyUp, evt, evt);
449
- this.onDispatchEvent(ne);
450
- };
451
- onMouseWheel = (evt) => {
452
- if (this.canReceiveInput(evt) === false)
453
- return;
454
- if (this._mouseWheelDeltaY.length <= 0)
455
- this._mouseWheelDeltaY.push(0);
456
- if (this._mouseWheelChanged.length <= 0)
457
- this._mouseWheelChanged.push(false);
458
- this._mouseWheelChanged[0] = true;
459
- const current = this._mouseWheelDeltaY[0];
460
- this._mouseWheelDeltaY[0] = current + evt.deltaY;
461
- };
462
- onTouchStart = (evt) => {
463
- if (evt.changedTouches.length <= 0)
464
- return;
465
- if (this.canReceiveInput(evt) === false)
466
- return;
467
- for (let i = 0; i < evt.changedTouches.length; i++) {
468
- const touch = evt.changedTouches[i];
469
- const id = this.getPointerIndex(touch.identifier);
470
- if (debug)
471
- showBalloonMessage(`touch start #${id}, identifier:${touch.identifier}`);
472
- const ne = new NEPointerEvent(InputEvents.PointerDown, evt, { button: id, clientX: touch.clientX, clientY: touch.clientY, pointerType: PointerType.Touch });
473
- this.onDown(ne);
474
- }
475
- };
476
- onTouchMove = (evt) => {
477
- if (evt.changedTouches.length <= 0)
478
- return;
479
- for (let i = 0; i < evt.changedTouches.length; i++) {
480
- const touch = evt.changedTouches[i];
481
- const id = this.getPointerIndex(touch.identifier);
482
- const ne = new NEPointerEvent(InputEvents.PointerMove, evt, { button: id, clientX: touch.clientX, clientY: touch.clientY, pointerType: PointerType.Touch });
483
- this.onMove(ne);
484
- }
485
- };
486
- onTouchUp = (evt) => {
487
- if (evt.changedTouches.length <= 0)
488
- return;
489
- for (let i = 0; i < evt.changedTouches.length; i++) {
490
- const touch = evt.changedTouches[i];
491
- const id = this.getPointerIndex(touch.identifier);
492
- if (!this.isNewEvent(evt.timeStamp, id, this._pointerUpTimestamp))
493
- continue;
494
- if (debug)
495
- showBalloonMessage(`touch up #${id}, identifier:${touch.identifier}`);
496
- const ne = new NEPointerEvent(InputEvents.PointerUp, evt, { button: id, clientX: touch.clientX, clientY: touch.clientY, pointerType: PointerType.Touch });
497
- this.onUp(ne);
498
- }
499
- };
500
- onMouseDown = (evt) => {
501
- if (evt.defaultPrevented)
502
- return;
503
- if (this.canReceiveInput(evt) === false)
504
- return;
505
- const id = evt.button;
506
- const ne = new NEPointerEvent(InputEvents.PointerDown, evt, { button: id, clientX: evt.clientX, clientY: evt.clientY, pointerType: PointerType.Mouse });
507
- this.onDown(ne);
508
- };
509
- onMouseMove = (evt) => {
510
- if (evt.defaultPrevented)
511
- return;
512
- const id = evt.button;
513
- const ne = new NEPointerEvent(InputEvents.PointerMove, evt, { button: id, clientX: evt.clientX, clientY: evt.clientY, pointerType: PointerType.Mouse });
514
- this.onMove(ne);
515
- };
516
- onMouseUp = (evt) => {
517
- if (evt.defaultPrevented)
518
- return;
519
- const id = evt.button;
520
- if (!this.isNewEvent(evt.timeStamp, id, this._pointerUpTimestamp))
521
- return;
522
- const ne = new NEPointerEvent(InputEvents.PointerUp, evt, { button: id, clientX: evt.clientX, clientY: evt.clientY, pointerType: PointerType.Mouse });
523
- this.onUp(ne);
524
- };
525
- // Prevent the same event being handled twice (e.g. on touch we get a mouseUp and touchUp evt with the same timestamp)
526
- isNewEvent(timestamp, index, arr) {
527
- while (arr.length <= index)
528
- arr.push(-1);
529
- if (timestamp === arr[index])
530
- return false;
531
- arr[index] = timestamp;
532
- return true;
533
- }
534
- isInRect(e) {
535
- if (this.context.isInXR)
536
- return true;
537
- const rect = this.context.domElement.getBoundingClientRect();
538
- const px = e.clientX;
539
- const py = e.clientY;
540
- const isInRect = px >= rect.x && px <= rect.right && py >= rect.y && py <= rect.bottom;
541
- if (debug && !isInRect)
542
- console.log("Not in rect", rect, px, py);
543
- return isInRect;
544
- }
545
- onDown(evt) {
546
- if (debug)
547
- console.log(evt.pointerType, "DOWN", evt.button);
548
- if (!this.isInRect(evt))
549
- return;
550
- // check if we received an mouse UP event for a touch (for some reason we get a mouse.down for touch.up)
551
- if (evt.pointerType === PointerType.Mouse) {
552
- const upTime = this._pointerUpTimestamp[evt.button];
553
- if (upTime > 0 && evt.source?.timeStamp !== undefined) {
554
- const diff = (evt.source.timeStamp - upTime);
555
- // on android touch up and mouse up have the exact same value
556
- // but on iOS they are not the same but a few milliseconds apart
557
- if (diff < 60 && diff >= 0) {
558
- // we received an UP event for a touch, ignore this DOWN event
559
- if (debug)
560
- console.log("Ignoring mouse.down for touch.up");
561
- return;
562
- }
563
- }
564
- }
565
- this.setPointerState(evt.button, this._pointerPressed, true);
566
- this.setPointerState(evt.button, this._pointerDown, true);
567
- this.setPointerStateT(evt.button, this._pointerEvent, evt.source);
568
- while (evt.button >= this._pointerTypes.length)
569
- this._pointerTypes.push(evt.pointerType);
570
- this._pointerTypes[evt.button] = evt.pointerType;
571
- while (evt.button >= this._pointerPositionDown.length)
572
- this._pointerPositionDown.push(new Vector2());
573
- this._pointerPositionDown[evt.button].set(evt.clientX, evt.clientY);
574
- while (evt.button >= this._pointerPositions.length)
575
- this._pointerPositions.push(new Vector2());
576
- this._pointerPositions[evt.button].set(evt.clientX, evt.clientY);
577
- if (evt.button >= this._pointerDownTime.length)
578
- this._pointerDownTime.push(0);
579
- this._pointerDownTime[evt.button] = this.context.time.time;
580
- this.updatePointerPosition(evt);
581
- this.onDispatchEvent(evt);
582
- }
583
- // moveEvent?: Event;
584
- onMove(evt) {
585
- const index = evt.button;
586
- const isDown = this.getPointerPressed(index);
587
- if (isDown === false && !this.isInRect(evt))
588
- return;
589
- if (evt.pointerType === PointerType.Touch && !isDown)
590
- return;
591
- if (debug)
592
- console.log(evt.pointerType, "MOVE", index);
593
- this.updatePointerPosition(evt);
594
- this.setPointerStateT(index, this._pointerEvent, evt.source);
595
- this.onDispatchEvent(evt);
596
- }
597
- onUp(evt) {
598
- if (this._pointerIds?.length >= evt.button)
599
- this._pointerIds[evt.button] = -1;
600
- const wasDown = this._pointerPressed[evt.button];
601
- if (!wasDown) {
602
- if (debug)
603
- console.log(evt.pointerType, "UP", evt.button, "was not down");
604
- return;
605
- }
606
- if (debug)
607
- console.log(evt.pointerType, "UP", evt.button);
608
- this.setPointerState(evt.button, this._pointerPressed, false);
609
- this.setPointerStateT(evt.button, this._pointerEvent, evt.source);
610
- // if (!this.isInRect(evt)) {
611
- // if (debug) showBalloonWarning("Pointer out of bounds: " + evt.clientX + ", " + evt.clientY);
612
- // return;
613
- // }
614
- this.setPointerState(evt.button, this._pointerUp, true);
615
- while (evt.button >= this._pointerUsed.length)
616
- this._pointerUsed.push(false);
617
- this.setPointerState(evt.button, this._pointerUsed, false);
618
- this.updatePointerPosition(evt);
619
- if (!this._pointerPositionDown[evt.button]) {
620
- if (debug)
621
- showBalloonWarning("Received pointer up event without matching down event for button: " + evt.button);
622
- console.warn("Received pointer up event without matching down event for button: " + evt.button);
623
- return;
624
- }
625
- const dx = evt.clientX - this._pointerPositionDown[evt.button].x;
626
- const dy = evt.clientY - this._pointerPositionDown[evt.button].y;
627
- if (evt.button >= this._pointerUpTime.length)
628
- this._pointerUpTime.push(-99);
629
- // console.log(dx, dy);
630
- if (Math.abs(dx) < 5 && Math.abs(dy) < 5) {
631
- this.setPointerState(evt.button, this._pointerClick, true);
632
- // handle double click
633
- const lastUp = this._pointerUpTime[evt.button];
634
- const dt = this.context.time.time - lastUp;
635
- // console.log(dt);
636
- if (dt < this._doubleClickTimeThreshold && dt > 0) {
637
- this.setPointerState(evt.button, this._pointerDoubleClick, true);
638
- }
639
- }
640
- this._pointerUpTime[evt.button] = this.context.time.time;
641
- this.onDispatchEvent(evt);
642
- }
643
- updatePointerPosition(evt) {
644
- // console.log("MOVE");
645
- while (evt.button >= this._pointerPositions.length)
646
- this._pointerPositions.push(new Vector2());
647
- while (evt.button >= this._pointerPositionsLastFrame.length)
648
- this._pointerPositionsLastFrame.push(new Vector2());
649
- while (evt.button >= this._pointerPositionsDelta.length)
650
- this._pointerPositionsDelta.push(new Vector2());
651
- const lf = this._pointerPositionsLastFrame[evt.button];
652
- lf.copy(this._pointerPositions[evt.button]);
653
- // accumulate delta (it's reset in end of frame), if we just write it here it's not correct when the browser console is open
654
- const delta = this._pointerPositionsDelta[evt.button];
655
- let dx = evt.clientX - lf.x;
656
- let dy = evt.clientY - lf.y;
657
- // if pointer is locked, clientX and Y are not changed, but Movement is.
658
- if (evt.source instanceof MouseEvent || evt.source instanceof TouchEvent) {
659
- const source = evt.source;
660
- if (dx === 0 && source.movementX !== 0)
661
- dx = source.movementX || 0;
662
- if (dy === 0 && source.movementY !== 0)
663
- dy = source.movementY || 0;
664
- }
665
- delta.x += dx;
666
- delta.y += dy;
667
- this._pointerPositions[evt.button].x = evt.clientX;
668
- this._pointerPositions[evt.button].y = evt.clientY;
669
- // we want to have the position 01 on the canvas for raycasting
670
- const px = evt.clientX;
671
- const py = evt.clientY;
672
- while (evt.button >= this._pointerPositionsRC.length)
673
- this._pointerPositionsRC.push(new Vector2());
674
- const rc = this._pointerPositionsRC[evt.button];
675
- rc.set(px, py);
676
- this.convertScreenspaceToRaycastSpace(rc);
677
- // console.log(this.context.alias, rc);
678
- // this._pointerPositionsRC[evt.button].x = (px - this.context.domX) / this.context.domWidth * 2 - 1;
679
- // this._pointerPositionsRC[evt.button].y = -((py - this.context.domY) / this.context.domHeight) * 2 + 1;
680
- // console.log(evt.button)
681
- }
682
- /** get the next free id */
683
- getPointerIndex(pointerId) {
684
- const ids = this._pointerIds;
685
- // test if theres a pointer with the id
686
- let firstFreeIndex = -1;
687
- for (let i = 0; i < ids.length; i++) {
688
- if (ids[i] === pointerId)
689
- return i;
690
- else if (firstFreeIndex === -1 && ids[i] === -1)
691
- firstFreeIndex = i;
692
- }
693
- // if not take the free slot if any
694
- if (firstFreeIndex !== -1) {
695
- ids[firstFreeIndex] = pointerId;
696
- return firstFreeIndex;
697
- }
698
- ids.push(pointerId);
699
- return ids.length - 1;
700
- }
701
- setPointerState(index, arr, value) {
702
- while (arr.length <= index)
703
- arr.push(false);
704
- arr[index] = value;
705
- }
706
- setPointerStateT(index, arr, value) {
707
- while (arr.length <= index)
708
- arr.push(null);
709
- arr[index] = value;
710
- }
711
- onDispatchEvent(evt) {
712
- const prevContext = Context.Current;
713
- try {
714
- Context.Current = this.context;
715
- this.dispatchEvent(evt);
716
- }
717
- finally {
718
- Context.Current = prevContext;
719
- }
720
- }
721
- }
722
- // KEY_1 = 49,
723
- // KEY_2 = 50,
724
- // KEY_3 = 51,
725
- // KEY_4 = 52,
726
- // KEY_5 = 53,
727
- // KEY_6 = 54,
728
- // KEY_7 = 55,
729
- // KEY_8 = 56,
730
- // KEY_9 = 57,
731
- // KEY_A = 65,
732
- // KEY_B = 66,
733
- // KEY_C = 67,
734
- // KEY_D = "d",
735
- // KEY_E = 69,
736
- // KEY_F = 70,
737
- // KEY_G = 71,
738
- // KEY_H = 72,
739
- // KEY_I = 73,
740
- // KEY_J = 74,
741
- // KEY_K = 75,
742
- // KEY_L = 76,
743
- // KEY_M = 77,
744
- // KEY_N = 78,
745
- // KEY_O = 79,
746
- // KEY_P = 80,
747
- // KEY_Q = 81,
748
- // KEY_R = 82,
749
- // KEY_S = 83,
750
- // KEY_T = 84,
751
- // KEY_U = 85,
752
- // KEY_V = 86,
753
- // KEY_W = 87,
754
- // KEY_X = 88,
755
- // KEY_Y = 89,
756
- // KEY_Z = 90,
757
- // LEFT_META = 91,
758
- // RIGHT_META = 92,
759
- // SELECT = 93,
760
- // NUMPAD_0 = 96,
761
- // NUMPAD_1 = 97,
762
- // NUMPAD_2 = 98,
763
- // NUMPAD_3 = 99,
764
- // NUMPAD_4 = 100,
765
- // NUMPAD_5 = 101,
766
- // NUMPAD_6 = 102,
767
- // NUMPAD_7 = 103,
768
- // NUMPAD_8 = 104,
769
- // NUMPAD_9 = 105,
770
- // MULTIPLY = 106,
771
- // ADD = 107,
772
- // SUBTRACT = 109,
773
- // DECIMAL = 110,
774
- // DIVIDE = 111,
775
- // F1 = 112,
776
- // F2 = 113,
777
- // F3 = 114,
778
- // F4 = 115,
779
- // F5 = 116,
780
- // F6 = 117,
781
- // F7 = 118,
782
- // F8 = 119,
783
- // F9 = 120,
784
- // F10 = 121,
785
- // F11 = 122,
786
- // F12 = 123,
787
- // NUM_LOCK = 144,
788
- // SCROLL_LOCK = 145,
789
- // SEMICOLON = 186,
790
- // EQUALS = 187,
791
- // COMMA = 188,
792
- // DASH = 189,
793
- // PERIOD = 190,
794
- // FORWARD_SLASH = 191,
795
- // GRAVE_ACCENT = 192,
796
- // OPEN_BRACKET = 219,
797
- // BACK_SLASH = 220,
798
- // CLOSE_BRACKET = 221,
799
- // SINGLE_QUOTE = 222
1
+ import { Vector2 } from 'three';
2
+ import { showBalloonMessage, showBalloonWarning } from './debug/debug.js';
3
+ import { Context } from './engine_setup.js';
4
+ import { getParam } from './engine_utils.js';
5
+ const debug = getParam("debuginput");
6
+ export class NEPointerEvent extends PointerEvent {
7
+ source;
8
+ constructor(type, source, init) {
9
+ super(type, init);
10
+ this.source = source;
11
+ }
12
+ stopImmediatePropagation() {
13
+ super.stopImmediatePropagation();
14
+ this.source?.stopImmediatePropagation();
15
+ }
16
+ }
17
+ export class NEKeyboardEvent extends KeyboardEvent {
18
+ source;
19
+ constructor(type, source, init) {
20
+ super(type, init);
21
+ this.source = source;
22
+ }
23
+ stopImmediatePropagation() {
24
+ super.stopImmediatePropagation();
25
+ this.source?.stopImmediatePropagation();
26
+ }
27
+ }
28
+ export class KeyEventArgs {
29
+ key;
30
+ keyType;
31
+ source;
32
+ constructor(evt) {
33
+ this.key = evt.key;
34
+ this.keyType = evt.type;
35
+ this.source = evt;
36
+ }
37
+ }
38
+ export var InputEvents;
39
+ (function (InputEvents) {
40
+ InputEvents["PointerDown"] = "pointerdown";
41
+ InputEvents["PointerUp"] = "pointerup";
42
+ InputEvents["PointerMove"] = "pointermove";
43
+ InputEvents["KeyDown"] = "keydown";
44
+ InputEvents["KeyUp"] = "keyup";
45
+ InputEvents["KeyPressed"] = "keypress";
46
+ })(InputEvents || (InputEvents = {}));
47
+ export var PointerType;
48
+ (function (PointerType) {
49
+ PointerType["Mouse"] = "mouse";
50
+ PointerType["Touch"] = "touch";
51
+ })(PointerType || (PointerType = {}));
52
+ export class Input extends EventTarget {
53
+ _doubleClickTimeThreshold = .2;
54
+ _longPressTimeThreshold = 1;
55
+ get mousePosition() { return this._pointerPositions[0]; }
56
+ ;
57
+ get mousePositionRC() { return this._pointerPositionsRC[0]; }
58
+ get mouseDown() { return this._pointerDown[0]; }
59
+ get mouseUp() { return this._pointerUp[0]; }
60
+ get mouseClick() { return this._pointerClick[0]; }
61
+ get mouseDoubleClick() { return this._pointerDoubleClick[0]; }
62
+ get mousePressed() { return this._pointerPressed[0]; }
63
+ get mouseWheelChanged() { return this.getMouseWheelChanged(0); }
64
+ _specialCursorTrigger = 0;
65
+ setCursorPointer() {
66
+ this._specialCursorTrigger += 1;
67
+ this.context.domElement.style.cursor = "pointer";
68
+ }
69
+ setCursorNormal() {
70
+ this._specialCursorTrigger -= 1;
71
+ this._specialCursorTrigger = Math.max(0, this._specialCursorTrigger);
72
+ if (this._specialCursorTrigger === 0)
73
+ this.context.domElement.style.cursor = "default";
74
+ }
75
+ setPointerUsed(i, used = true) {
76
+ if (i >= this._pointerUsed.length) {
77
+ if (i >= this._pointerIds.length)
78
+ return;
79
+ while (this._pointerUsed.length <= i) {
80
+ this._pointerUsed.push(false);
81
+ }
82
+ }
83
+ this._pointerUsed[i] = used;
84
+ }
85
+ getPointerUsed(i) {
86
+ if (i >= this._pointerUsed.length)
87
+ return false;
88
+ return this._pointerUsed[i];
89
+ }
90
+ /** how many pointers are currently pressed */
91
+ getPointerPressedCount() {
92
+ let count = 0;
93
+ for (let i = 0; i < this._pointerPressed.length; i++) {
94
+ if (this._pointerPressed[i]) {
95
+ count++;
96
+ }
97
+ }
98
+ return count;
99
+ }
100
+ getPointerPosition(i) {
101
+ if (i >= this._pointerPositions.length)
102
+ return null;
103
+ return this._pointerPositions[i];
104
+ }
105
+ getPointerPositionLastFrame(i) {
106
+ if (i >= this._pointerPositionsLastFrame.length)
107
+ return null;
108
+ return this._pointerPositionsLastFrame[i];
109
+ }
110
+ getPointerPositionDelta(i) {
111
+ if (i >= this._pointerPositionsDelta.length)
112
+ return null;
113
+ return this._pointerPositionsDelta[i];
114
+ }
115
+ getPointerPositionRC(i) {
116
+ if (i >= this._pointerPositionsRC.length)
117
+ return null;
118
+ return this._pointerPositionsRC[i];
119
+ }
120
+ getPointerDown(i) {
121
+ if (i >= this._pointerDown.length)
122
+ return false;
123
+ return this._pointerDown[i];
124
+ }
125
+ getPointerUp(i) {
126
+ if (i >= this._pointerUp.length)
127
+ return false;
128
+ return this._pointerUp[i];
129
+ }
130
+ getPointerPressed(i) {
131
+ if (i >= this._pointerPressed.length)
132
+ return false;
133
+ return this._pointerPressed[i];
134
+ }
135
+ getPointerClicked(i) {
136
+ if (i >= this._pointerClick.length)
137
+ return false;
138
+ return this._pointerClick[i];
139
+ }
140
+ getPointerDoubleClicked(i) {
141
+ if (i >= this._pointerDoubleClick.length)
142
+ return false;
143
+ return this._pointerDoubleClick[i];
144
+ }
145
+ getPointerDownTime(i) {
146
+ if (i >= this._pointerDownTime.length)
147
+ return -1;
148
+ return this._pointerDownTime[i];
149
+ }
150
+ getPointerUpTime(i) {
151
+ if (i >= this._pointerUpTime.length)
152
+ return -1;
153
+ return this._pointerUpTime[i];
154
+ }
155
+ getPointerLongPress(i) {
156
+ if (i >= this._pointerDownTime.length)
157
+ return false;
158
+ return this.getPointerPressed(i) && this.context.time.time - this._pointerDownTime[i] > this._longPressTimeThreshold;
159
+ }
160
+ getIsMouse(i) {
161
+ if (i < 0 || i >= this._pointerTypes.length)
162
+ return false;
163
+ return this._pointerTypes[i] === PointerType.Mouse;
164
+ }
165
+ getIsTouch(i) {
166
+ if (i < 0 || i >= this._pointerTypes.length)
167
+ return false;
168
+ return this._pointerTypes[i] === PointerType.Touch;
169
+ }
170
+ getTouchesPressedCount() {
171
+ let count = 0;
172
+ for (let i = 0; i < this._pointerPressed.length; i++) {
173
+ if (this._pointerPressed[i] && this.getIsTouch(i)) {
174
+ count++;
175
+ }
176
+ }
177
+ return count;
178
+ }
179
+ getMouseWheelChanged(i = 0) {
180
+ if (i >= this._mouseWheelChanged.length)
181
+ return false;
182
+ return this._mouseWheelChanged[i];
183
+ }
184
+ getMouseWheelDeltaY(i = 0) {
185
+ if (i >= this._mouseWheelDeltaY.length)
186
+ return 0;
187
+ return this._mouseWheelDeltaY[i];
188
+ }
189
+ getPointerEvent(i) {
190
+ if (i >= this._pointerEvent.length)
191
+ return undefined;
192
+ return this._pointerEvent[i] ?? undefined;
193
+ }
194
+ *foreachPointerId(pointerType) {
195
+ for (let i = 0; i < this._pointerTypes.length; i++) {
196
+ // check if the pointer is active
197
+ if (this._pointerIsActive(i)) {
198
+ // if specific pointer types are requested
199
+ if (pointerType !== undefined) {
200
+ const type = this._pointerTypes[i];
201
+ if (Array.isArray(pointerType)) {
202
+ let isInArray = false;
203
+ for (const t of pointerType) {
204
+ if (type === t) {
205
+ isInArray = true;
206
+ break;
207
+ }
208
+ }
209
+ if (!isInArray)
210
+ continue;
211
+ }
212
+ else {
213
+ if (pointerType !== type)
214
+ continue;
215
+ }
216
+ }
217
+ yield i;
218
+ }
219
+ }
220
+ }
221
+ *foreachTouchId() {
222
+ for (let i = 0; i < this._pointerTypes.length; i++) {
223
+ const type = this._pointerTypes[i];
224
+ if (type !== PointerType.Touch)
225
+ continue;
226
+ if (this._pointerIsActive[i])
227
+ yield i;
228
+ }
229
+ }
230
+ _pointerIsActive(index) {
231
+ if (index < 0)
232
+ return false;
233
+ return this._pointerPressed[index] || this._pointerDown[index] || this._pointerUp[index];
234
+ }
235
+ context;
236
+ _pointerDown = [false];
237
+ _pointerUp = [false];
238
+ _pointerClick = [false];
239
+ _pointerDoubleClick = [false];
240
+ _pointerPressed = [false];
241
+ _pointerPositions = [new Vector2()];
242
+ _pointerPositionsLastFrame = [new Vector2()];
243
+ _pointerPositionsDelta = [new Vector2()];
244
+ _pointerPositionsRC = [new Vector2()];
245
+ _pointerPositionDown = [new Vector2()];
246
+ _pointerDownTime = [];
247
+ _pointerUpTime = [];
248
+ _pointerUpTimestamp = [];
249
+ _pointerIds = [];
250
+ _pointerTypes = [""];
251
+ _mouseWheelChanged = [false];
252
+ _mouseWheelDeltaY = [0];
253
+ _pointerEvent = [];
254
+ _pointerUsed = [];
255
+ getKeyDown() {
256
+ for (const key in this.keysPressed) {
257
+ const k = this.keysPressed[key];
258
+ if (k.startFrame === this.context.time.frameCount)
259
+ return k.key;
260
+ }
261
+ return null;
262
+ }
263
+ getKeyPressed() {
264
+ for (const key in this.keysPressed) {
265
+ const k = this.keysPressed[key];
266
+ if (k.pressed)
267
+ return k.key;
268
+ }
269
+ return null;
270
+ }
271
+ isKeyDown(keyCode) {
272
+ if (!this.context.application.isVisible || !this.context.application.hasFocus)
273
+ return false;
274
+ const codes = this.getCodeForCommonKeyName(keyCode);
275
+ if (codes !== null) {
276
+ for (const code of codes)
277
+ if (this.isKeyDown(code))
278
+ return true;
279
+ return false;
280
+ }
281
+ return this.keysPressed[keyCode]?.startFrame === this.context.time.frameCount && this.keysPressed[keyCode].pressed;
282
+ }
283
+ isKeyUp(keyCode) {
284
+ if (!this.context.application.isVisible || !this.context.application.hasFocus)
285
+ return false;
286
+ const codes = this.getCodeForCommonKeyName(keyCode);
287
+ if (codes !== null) {
288
+ for (const code of codes)
289
+ if (this.isKeyUp(code))
290
+ return true;
291
+ return false;
292
+ }
293
+ return this.keysPressed[keyCode]?.frame === this.context.time.frameCount && !this.keysPressed[keyCode].pressed;
294
+ }
295
+ isKeyPressed(keyCode) {
296
+ if (!this.context.application.isVisible || !this.context.application.hasFocus)
297
+ return false;
298
+ const codes = this.getCodeForCommonKeyName(keyCode);
299
+ if (codes !== null) {
300
+ for (const code of codes)
301
+ if (this.isKeyPressed(code))
302
+ return true;
303
+ return false;
304
+ }
305
+ return this.keysPressed[keyCode]?.pressed; // && time.frameCount - this.keysPressed[keyCode].frame < 100;
306
+ }
307
+ // utility helper for mapping common names to actual codes; e.g. "Shift" -> "ShiftLeft" and "ShiftRight" or "a" -> "KeyA"
308
+ getCodeForCommonKeyName(keyName) {
309
+ if (keyName.length === 1) {
310
+ // check if this is a digit
311
+ if (keyName >= "0" && keyName <= "9")
312
+ return ["Digit" + keyName];
313
+ // check if this is a letter
314
+ if (keyName >= "a" && keyName <= "z")
315
+ return ["Key" + keyName.toUpperCase()];
316
+ if (keyName == " ")
317
+ return ["Space"];
318
+ }
319
+ switch (keyName) {
320
+ case "shift":
321
+ case "Shift":
322
+ return ["ShiftLeft", "ShiftRight"];
323
+ case "control":
324
+ case "Control":
325
+ return ["ControlLeft", "ControlRight"];
326
+ case "alt":
327
+ case "Alt":
328
+ return ["AltLeft", "AltRight"];
329
+ }
330
+ return null;
331
+ }
332
+ createPointerDown(args) {
333
+ if (debug)
334
+ showBalloonMessage("Create Pointer down");
335
+ this.onDown(args);
336
+ }
337
+ createPointerMove(args) {
338
+ if (debug)
339
+ showBalloonMessage("Create Pointer move");
340
+ this.onMove(args);
341
+ }
342
+ createPointerUp(args) {
343
+ if (debug)
344
+ showBalloonMessage("Create Pointer up");
345
+ this.onUp(args);
346
+ }
347
+ convertScreenspaceToRaycastSpace(vec2) {
348
+ vec2.x = (vec2.x - this.context.domX) / this.context.domWidth * 2 - 1;
349
+ vec2.y = -((vec2.y - this.context.domY) / this.context.domHeight) * 2 + 1;
350
+ }
351
+ constructor(context) {
352
+ super();
353
+ this.context = context;
354
+ this.context.post_render_callbacks.push(this.onEndOfFrame);
355
+ window.addEventListener('touchstart', this.onTouchStart, false);
356
+ window.addEventListener('touchmove', this.onTouchMove, { passive: true });
357
+ window.addEventListener('touchend', this.onTouchUp, false);
358
+ window.addEventListener('mousedown', this.onMouseDown, false);
359
+ window.addEventListener('mousemove', this.onMouseMove, false);
360
+ window.addEventListener('mouseup', this.onMouseUp, false);
361
+ window.addEventListener('wheel', this.onMouseWheel, { passive: true });
362
+ window.addEventListener("keydown", this.onKeyDown, false);
363
+ window.addEventListener("keypress", this.onKeyPressed, false);
364
+ window.addEventListener("keyup", this.onKeyUp, false);
365
+ // e.g. when using sharex to capture we loose focus thus dont get e.g. key up events
366
+ window.addEventListener('blur', this.onLostFocus);
367
+ }
368
+ dispose() {
369
+ const index = this.context.post_render_callbacks.indexOf(this.onEndOfFrame);
370
+ if (index >= 0)
371
+ this.context.post_render_callbacks.splice(index, 1);
372
+ window.removeEventListener('touchstart', this.onTouchStart, false);
373
+ window.removeEventListener('touchmove', this.onTouchMove, false);
374
+ window.removeEventListener('touchend', this.onTouchUp, false);
375
+ window.removeEventListener('mousedown', this.onMouseDown, false);
376
+ window.removeEventListener('mousemove', this.onMouseMove, false);
377
+ window.removeEventListener('mouseup', this.onMouseUp, false);
378
+ window.removeEventListener('wheel', this.onMouseWheel, false);
379
+ window.removeEventListener("keydown", this.onKeyDown, false);
380
+ window.removeEventListener("keypress", this.onKeyPressed, false);
381
+ window.removeEventListener("keyup", this.onKeyUp, false);
382
+ window.removeEventListener('blur', this.onLostFocus);
383
+ }
384
+ onLostFocus = () => {
385
+ for (const kp in this.keysPressed) {
386
+ this.keysPressed[kp].pressed = false;
387
+ }
388
+ };
389
+ onEndOfFrame = () => {
390
+ for (let i = 0; i < this._pointerUp.length; i++)
391
+ this._pointerUp[i] = false;
392
+ for (let i = 0; i < this._pointerDown.length; i++)
393
+ this._pointerDown[i] = false;
394
+ for (let i = 0; i < this._pointerClick.length; i++)
395
+ this._pointerClick[i] = false;
396
+ for (let i = 0; i < this._pointerDoubleClick.length; i++)
397
+ this._pointerDoubleClick[i] = false;
398
+ for (const pt of this._pointerPositionsDelta)
399
+ pt.set(0, 0);
400
+ for (let i = 0; i < this._mouseWheelChanged.length; i++)
401
+ this._mouseWheelChanged[i] = false;
402
+ for (let i = 0; i < this._mouseWheelDeltaY.length; i++)
403
+ this._mouseWheelDeltaY[i] = 0;
404
+ };
405
+ canReceiveInput(evt) {
406
+ // If the user has HTML objects ontop of the canvas
407
+ // if(evt.target === this.context.renderer.domElement) return true;
408
+ // const css = window.getComputedStyle(evt.target as HTMLElement);
409
+ // if(css.pointerEvents === "all") return false;
410
+ // We only check the target elements here since the canvas may be overlapped by other elements
411
+ // in which case we do not want to use the input (e.g. if a HTML element is being triggered)
412
+ if (evt.target === this.context.renderer?.domElement)
413
+ return true;
414
+ if (evt.target === this.context.domElement)
415
+ return true;
416
+ return false;
417
+ }
418
+ keysPressed = {};
419
+ onKeyDown = (evt) => {
420
+ if (!this.context.application.hasFocus)
421
+ return;
422
+ const ex = this.keysPressed[evt.code];
423
+ if (ex && ex.pressed)
424
+ return;
425
+ this.keysPressed[evt.code] = { pressed: true, frame: this.context.time.frameCount + 1, startFrame: this.context.time.frameCount + 1, key: evt.key, code: evt.code };
426
+ const ne = new NEKeyboardEvent(InputEvents.KeyDown, evt, evt);
427
+ this.onDispatchEvent(ne);
428
+ };
429
+ onKeyPressed = (evt) => {
430
+ if (!this.context.application.hasFocus)
431
+ return;
432
+ const p = this.keysPressed[evt.code];
433
+ if (!p)
434
+ return;
435
+ p.pressed = true;
436
+ p.frame = this.context.time.frameCount + 1;
437
+ const ne = new NEKeyboardEvent(InputEvents.KeyPressed, evt, evt);
438
+ this.onDispatchEvent(ne);
439
+ };
440
+ onKeyUp = (evt) => {
441
+ if (!this.context.application.hasFocus)
442
+ return;
443
+ const p = this.keysPressed[evt.code];
444
+ if (!p)
445
+ return;
446
+ p.pressed = false;
447
+ p.frame = this.context.time.frameCount + 1;
448
+ const ne = new NEKeyboardEvent(InputEvents.KeyUp, evt, evt);
449
+ this.onDispatchEvent(ne);
450
+ };
451
+ onMouseWheel = (evt) => {
452
+ if (this.canReceiveInput(evt) === false)
453
+ return;
454
+ if (this._mouseWheelDeltaY.length <= 0)
455
+ this._mouseWheelDeltaY.push(0);
456
+ if (this._mouseWheelChanged.length <= 0)
457
+ this._mouseWheelChanged.push(false);
458
+ this._mouseWheelChanged[0] = true;
459
+ const current = this._mouseWheelDeltaY[0];
460
+ this._mouseWheelDeltaY[0] = current + evt.deltaY;
461
+ };
462
+ onTouchStart = (evt) => {
463
+ if (evt.changedTouches.length <= 0)
464
+ return;
465
+ if (this.canReceiveInput(evt) === false)
466
+ return;
467
+ for (let i = 0; i < evt.changedTouches.length; i++) {
468
+ const touch = evt.changedTouches[i];
469
+ const id = this.getPointerIndex(touch.identifier);
470
+ if (debug)
471
+ showBalloonMessage(`touch start #${id}, identifier:${touch.identifier}`);
472
+ const ne = new NEPointerEvent(InputEvents.PointerDown, evt, { button: id, clientX: touch.clientX, clientY: touch.clientY, pointerType: PointerType.Touch });
473
+ this.onDown(ne);
474
+ }
475
+ };
476
+ onTouchMove = (evt) => {
477
+ if (evt.changedTouches.length <= 0)
478
+ return;
479
+ for (let i = 0; i < evt.changedTouches.length; i++) {
480
+ const touch = evt.changedTouches[i];
481
+ const id = this.getPointerIndex(touch.identifier);
482
+ const ne = new NEPointerEvent(InputEvents.PointerMove, evt, { button: id, clientX: touch.clientX, clientY: touch.clientY, pointerType: PointerType.Touch });
483
+ this.onMove(ne);
484
+ }
485
+ };
486
+ onTouchUp = (evt) => {
487
+ if (evt.changedTouches.length <= 0)
488
+ return;
489
+ for (let i = 0; i < evt.changedTouches.length; i++) {
490
+ const touch = evt.changedTouches[i];
491
+ const id = this.getPointerIndex(touch.identifier);
492
+ if (!this.isNewEvent(evt.timeStamp, id, this._pointerUpTimestamp))
493
+ continue;
494
+ if (debug)
495
+ showBalloonMessage(`touch up #${id}, identifier:${touch.identifier}`);
496
+ const ne = new NEPointerEvent(InputEvents.PointerUp, evt, { button: id, clientX: touch.clientX, clientY: touch.clientY, pointerType: PointerType.Touch });
497
+ this.onUp(ne);
498
+ }
499
+ };
500
+ onMouseDown = (evt) => {
501
+ if (evt.defaultPrevented)
502
+ return;
503
+ if (this.canReceiveInput(evt) === false)
504
+ return;
505
+ const id = evt.button;
506
+ const ne = new NEPointerEvent(InputEvents.PointerDown, evt, { button: id, clientX: evt.clientX, clientY: evt.clientY, pointerType: PointerType.Mouse });
507
+ this.onDown(ne);
508
+ };
509
+ onMouseMove = (evt) => {
510
+ if (evt.defaultPrevented)
511
+ return;
512
+ const id = evt.button;
513
+ const ne = new NEPointerEvent(InputEvents.PointerMove, evt, { button: id, clientX: evt.clientX, clientY: evt.clientY, pointerType: PointerType.Mouse });
514
+ this.onMove(ne);
515
+ };
516
+ onMouseUp = (evt) => {
517
+ if (evt.defaultPrevented)
518
+ return;
519
+ const id = evt.button;
520
+ if (!this.isNewEvent(evt.timeStamp, id, this._pointerUpTimestamp))
521
+ return;
522
+ const ne = new NEPointerEvent(InputEvents.PointerUp, evt, { button: id, clientX: evt.clientX, clientY: evt.clientY, pointerType: PointerType.Mouse });
523
+ this.onUp(ne);
524
+ };
525
+ // Prevent the same event being handled twice (e.g. on touch we get a mouseUp and touchUp evt with the same timestamp)
526
+ isNewEvent(timestamp, index, arr) {
527
+ while (arr.length <= index)
528
+ arr.push(-1);
529
+ if (timestamp === arr[index])
530
+ return false;
531
+ arr[index] = timestamp;
532
+ return true;
533
+ }
534
+ isInRect(e) {
535
+ if (this.context.isInXR)
536
+ return true;
537
+ const rect = this.context.domElement.getBoundingClientRect();
538
+ const px = e.clientX;
539
+ const py = e.clientY;
540
+ const isInRect = px >= rect.x && px <= rect.right && py >= rect.y && py <= rect.bottom;
541
+ if (debug && !isInRect)
542
+ console.log("Not in rect", rect, px, py);
543
+ return isInRect;
544
+ }
545
+ onDown(evt) {
546
+ if (debug)
547
+ console.log(evt.pointerType, "DOWN", evt.button);
548
+ if (!this.isInRect(evt))
549
+ return;
550
+ // check if we received an mouse UP event for a touch (for some reason we get a mouse.down for touch.up)
551
+ if (evt.pointerType === PointerType.Mouse) {
552
+ const upTime = this._pointerUpTimestamp[evt.button];
553
+ if (upTime > 0 && evt.source?.timeStamp !== undefined) {
554
+ const diff = (evt.source.timeStamp - upTime);
555
+ // on android touch up and mouse up have the exact same value
556
+ // but on iOS they are not the same but a few milliseconds apart
557
+ if (diff < 60 && diff >= 0) {
558
+ // we received an UP event for a touch, ignore this DOWN event
559
+ if (debug)
560
+ console.log("Ignoring mouse.down for touch.up");
561
+ return;
562
+ }
563
+ }
564
+ }
565
+ this.setPointerState(evt.button, this._pointerPressed, true);
566
+ this.setPointerState(evt.button, this._pointerDown, true);
567
+ this.setPointerStateT(evt.button, this._pointerEvent, evt.source);
568
+ while (evt.button >= this._pointerTypes.length)
569
+ this._pointerTypes.push(evt.pointerType);
570
+ this._pointerTypes[evt.button] = evt.pointerType;
571
+ while (evt.button >= this._pointerPositionDown.length)
572
+ this._pointerPositionDown.push(new Vector2());
573
+ this._pointerPositionDown[evt.button].set(evt.clientX, evt.clientY);
574
+ while (evt.button >= this._pointerPositions.length)
575
+ this._pointerPositions.push(new Vector2());
576
+ this._pointerPositions[evt.button].set(evt.clientX, evt.clientY);
577
+ if (evt.button >= this._pointerDownTime.length)
578
+ this._pointerDownTime.push(0);
579
+ this._pointerDownTime[evt.button] = this.context.time.time;
580
+ this.updatePointerPosition(evt);
581
+ this.onDispatchEvent(evt);
582
+ }
583
+ // moveEvent?: Event;
584
+ onMove(evt) {
585
+ const index = evt.button;
586
+ const isDown = this.getPointerPressed(index);
587
+ if (isDown === false && !this.isInRect(evt))
588
+ return;
589
+ if (evt.pointerType === PointerType.Touch && !isDown)
590
+ return;
591
+ if (debug)
592
+ console.log(evt.pointerType, "MOVE", index);
593
+ this.updatePointerPosition(evt);
594
+ this.setPointerStateT(index, this._pointerEvent, evt.source);
595
+ this.onDispatchEvent(evt);
596
+ }
597
+ onUp(evt) {
598
+ if (this._pointerIds?.length >= evt.button)
599
+ this._pointerIds[evt.button] = -1;
600
+ const wasDown = this._pointerPressed[evt.button];
601
+ if (!wasDown) {
602
+ if (debug)
603
+ console.log(evt.pointerType, "UP", evt.button, "was not down");
604
+ return;
605
+ }
606
+ if (debug)
607
+ console.log(evt.pointerType, "UP", evt.button);
608
+ this.setPointerState(evt.button, this._pointerPressed, false);
609
+ this.setPointerStateT(evt.button, this._pointerEvent, evt.source);
610
+ // if (!this.isInRect(evt)) {
611
+ // if (debug) showBalloonWarning("Pointer out of bounds: " + evt.clientX + ", " + evt.clientY);
612
+ // return;
613
+ // }
614
+ this.setPointerState(evt.button, this._pointerUp, true);
615
+ while (evt.button >= this._pointerUsed.length)
616
+ this._pointerUsed.push(false);
617
+ this.setPointerState(evt.button, this._pointerUsed, false);
618
+ this.updatePointerPosition(evt);
619
+ if (!this._pointerPositionDown[evt.button]) {
620
+ if (debug)
621
+ showBalloonWarning("Received pointer up event without matching down event for button: " + evt.button);
622
+ console.warn("Received pointer up event without matching down event for button: " + evt.button);
623
+ return;
624
+ }
625
+ const dx = evt.clientX - this._pointerPositionDown[evt.button].x;
626
+ const dy = evt.clientY - this._pointerPositionDown[evt.button].y;
627
+ if (evt.button >= this._pointerUpTime.length)
628
+ this._pointerUpTime.push(-99);
629
+ // console.log(dx, dy);
630
+ if (Math.abs(dx) < 5 && Math.abs(dy) < 5) {
631
+ this.setPointerState(evt.button, this._pointerClick, true);
632
+ // handle double click
633
+ const lastUp = this._pointerUpTime[evt.button];
634
+ const dt = this.context.time.time - lastUp;
635
+ // console.log(dt);
636
+ if (dt < this._doubleClickTimeThreshold && dt > 0) {
637
+ this.setPointerState(evt.button, this._pointerDoubleClick, true);
638
+ }
639
+ }
640
+ this._pointerUpTime[evt.button] = this.context.time.time;
641
+ this.onDispatchEvent(evt);
642
+ }
643
+ updatePointerPosition(evt) {
644
+ // console.log("MOVE");
645
+ while (evt.button >= this._pointerPositions.length)
646
+ this._pointerPositions.push(new Vector2());
647
+ while (evt.button >= this._pointerPositionsLastFrame.length)
648
+ this._pointerPositionsLastFrame.push(new Vector2());
649
+ while (evt.button >= this._pointerPositionsDelta.length)
650
+ this._pointerPositionsDelta.push(new Vector2());
651
+ const lf = this._pointerPositionsLastFrame[evt.button];
652
+ lf.copy(this._pointerPositions[evt.button]);
653
+ // accumulate delta (it's reset in end of frame), if we just write it here it's not correct when the browser console is open
654
+ const delta = this._pointerPositionsDelta[evt.button];
655
+ let dx = evt.clientX - lf.x;
656
+ let dy = evt.clientY - lf.y;
657
+ // if pointer is locked, clientX and Y are not changed, but Movement is.
658
+ if (evt.source instanceof MouseEvent || evt.source instanceof TouchEvent) {
659
+ const source = evt.source;
660
+ if (dx === 0 && source.movementX !== 0)
661
+ dx = source.movementX || 0;
662
+ if (dy === 0 && source.movementY !== 0)
663
+ dy = source.movementY || 0;
664
+ }
665
+ delta.x += dx;
666
+ delta.y += dy;
667
+ this._pointerPositions[evt.button].x = evt.clientX;
668
+ this._pointerPositions[evt.button].y = evt.clientY;
669
+ // we want to have the position 01 on the canvas for raycasting
670
+ const px = evt.clientX;
671
+ const py = evt.clientY;
672
+ while (evt.button >= this._pointerPositionsRC.length)
673
+ this._pointerPositionsRC.push(new Vector2());
674
+ const rc = this._pointerPositionsRC[evt.button];
675
+ rc.set(px, py);
676
+ this.convertScreenspaceToRaycastSpace(rc);
677
+ // console.log(this.context.alias, rc);
678
+ // this._pointerPositionsRC[evt.button].x = (px - this.context.domX) / this.context.domWidth * 2 - 1;
679
+ // this._pointerPositionsRC[evt.button].y = -((py - this.context.domY) / this.context.domHeight) * 2 + 1;
680
+ // console.log(evt.button)
681
+ }
682
+ /** get the next free id */
683
+ getPointerIndex(pointerId) {
684
+ const ids = this._pointerIds;
685
+ // test if theres a pointer with the id
686
+ let firstFreeIndex = -1;
687
+ for (let i = 0; i < ids.length; i++) {
688
+ if (ids[i] === pointerId)
689
+ return i;
690
+ else if (firstFreeIndex === -1 && ids[i] === -1)
691
+ firstFreeIndex = i;
692
+ }
693
+ // if not take the free slot if any
694
+ if (firstFreeIndex !== -1) {
695
+ ids[firstFreeIndex] = pointerId;
696
+ return firstFreeIndex;
697
+ }
698
+ ids.push(pointerId);
699
+ return ids.length - 1;
700
+ }
701
+ setPointerState(index, arr, value) {
702
+ while (arr.length <= index)
703
+ arr.push(false);
704
+ arr[index] = value;
705
+ }
706
+ setPointerStateT(index, arr, value) {
707
+ while (arr.length <= index)
708
+ arr.push(null);
709
+ arr[index] = value;
710
+ }
711
+ onDispatchEvent(evt) {
712
+ const prevContext = Context.Current;
713
+ try {
714
+ Context.Current = this.context;
715
+ this.dispatchEvent(evt);
716
+ }
717
+ finally {
718
+ Context.Current = prevContext;
719
+ }
720
+ }
721
+ }
722
+ // KEY_1 = 49,
723
+ // KEY_2 = 50,
724
+ // KEY_3 = 51,
725
+ // KEY_4 = 52,
726
+ // KEY_5 = 53,
727
+ // KEY_6 = 54,
728
+ // KEY_7 = 55,
729
+ // KEY_8 = 56,
730
+ // KEY_9 = 57,
731
+ // KEY_A = 65,
732
+ // KEY_B = 66,
733
+ // KEY_C = 67,
734
+ // KEY_D = "d",
735
+ // KEY_E = 69,
736
+ // KEY_F = 70,
737
+ // KEY_G = 71,
738
+ // KEY_H = 72,
739
+ // KEY_I = 73,
740
+ // KEY_J = 74,
741
+ // KEY_K = 75,
742
+ // KEY_L = 76,
743
+ // KEY_M = 77,
744
+ // KEY_N = 78,
745
+ // KEY_O = 79,
746
+ // KEY_P = 80,
747
+ // KEY_Q = 81,
748
+ // KEY_R = 82,
749
+ // KEY_S = 83,
750
+ // KEY_T = 84,
751
+ // KEY_U = 85,
752
+ // KEY_V = 86,
753
+ // KEY_W = 87,
754
+ // KEY_X = 88,
755
+ // KEY_Y = 89,
756
+ // KEY_Z = 90,
757
+ // LEFT_META = 91,
758
+ // RIGHT_META = 92,
759
+ // SELECT = 93,
760
+ // NUMPAD_0 = 96,
761
+ // NUMPAD_1 = 97,
762
+ // NUMPAD_2 = 98,
763
+ // NUMPAD_3 = 99,
764
+ // NUMPAD_4 = 100,
765
+ // NUMPAD_5 = 101,
766
+ // NUMPAD_6 = 102,
767
+ // NUMPAD_7 = 103,
768
+ // NUMPAD_8 = 104,
769
+ // NUMPAD_9 = 105,
770
+ // MULTIPLY = 106,
771
+ // ADD = 107,
772
+ // SUBTRACT = 109,
773
+ // DECIMAL = 110,
774
+ // DIVIDE = 111,
775
+ // F1 = 112,
776
+ // F2 = 113,
777
+ // F3 = 114,
778
+ // F4 = 115,
779
+ // F5 = 116,
780
+ // F6 = 117,
781
+ // F7 = 118,
782
+ // F8 = 119,
783
+ // F9 = 120,
784
+ // F10 = 121,
785
+ // F11 = 122,
786
+ // F12 = 123,
787
+ // NUM_LOCK = 144,
788
+ // SCROLL_LOCK = 145,
789
+ // SEMICOLON = 186,
790
+ // EQUALS = 187,
791
+ // COMMA = 188,
792
+ // DASH = 189,
793
+ // PERIOD = 190,
794
+ // FORWARD_SLASH = 191,
795
+ // GRAVE_ACCENT = 192,
796
+ // OPEN_BRACKET = 219,
797
+ // BACK_SLASH = 220,
798
+ // CLOSE_BRACKET = 221,
799
+ // SINGLE_QUOTE = 222
800
800
  //# sourceMappingURL=engine_input.js.map