@needle-tools/engine 4.7.2-alpha → 4.7.2-next.6f2cd71
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.
- package/CHANGELOG.md +3782 -3782
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +25 -0
- package/dist/{gltf-progressive-zdhlW609.umd.cjs → gltf-progressive-B9o1T8Vr.umd.cjs} +1 -1
- package/dist/{gltf-progressive-YjtQYFa9.js → gltf-progressive-DO0SisAM.js} +2 -2
- package/dist/{gltf-progressive-yOP1mp5W.min.js → gltf-progressive-DQF10PJE.min.js} +1 -1
- package/dist/{needle-engine.bundle-BhDF-YSv.min.js → needle-engine.bundle-B-NoV0t_.min.js} +64 -64
- package/dist/{needle-engine.bundle-D2myV4E4.umd.cjs → needle-engine.bundle-BMnlxDfi.umd.cjs} +59 -59
- package/dist/{needle-engine.bundle-gp00DTS4.js → needle-engine.bundle-CFi0ugBx.js} +638 -638
- package/dist/needle-engine.d.ts +130 -129
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-8AQTeZsr.umd.cjs → postprocessing-CjW23fio.umd.cjs} +2 -2
- package/dist/{postprocessing-BkxN_08g.js → postprocessing-DYLNOL3W.js} +3 -3
- package/dist/{postprocessing-BDScN9yu.min.js → postprocessing-xYQWCHFu.min.js} +2 -2
- package/dist/{three-DMrv-4ar.umd.cjs → three-B_hneGZr.umd.cjs} +4 -4
- package/dist/{three-Bz6X1mrw.js → three-DrqIzZTH.js} +4198 -4198
- package/dist/{three-Boa-jOq-.min.js → three-DuDKwKB8.min.js} +33 -33
- package/dist/{three-examples-GggCDHv0.js → three-examples-B50TT3Iu.js} +5 -5
- package/dist/{three-examples-DuVhxqft.min.js → three-examples-DaDLBuy6.min.js} +14 -14
- package/dist/{three-examples-C7ryg8vN.umd.cjs → three-examples-X3OadjXB.umd.cjs} +3 -3
- package/dist/{three-mesh-ui-CY6Izc7C.min.js → three-mesh-ui-B3p3gyUz.min.js} +1 -1
- package/dist/{three-mesh-ui-CwlN0FUC.umd.cjs → three-mesh-ui-CQiIQIlA.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-CLNOfsWn.js → three-mesh-ui-CxuWt7m-.js} +1 -1
- package/dist/{vendor-zxXa3Dmr.min.js → vendor-BlSxe9JJ.min.js} +3 -3
- package/dist/{vendor-BSD1RQIh.js → vendor-BmYIgaS1.js} +3 -3
- package/dist/{vendor-DHr4aqIZ.umd.cjs → vendor-Cavtu3CP.umd.cjs} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +164 -164
- package/lib/engine/engine_addressables.js +601 -601
- package/lib/engine/engine_animation.d.ts +43 -43
- package/lib/engine/engine_animation.js +133 -133
- package/lib/engine/engine_application.d.ts +45 -45
- package/lib/engine/engine_application.js +104 -104
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +346 -346
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +13 -13
- package/lib/engine/engine_camera.js +30 -30
- package/lib/engine/engine_components.d.ts +110 -110
- package/lib/engine/engine_components.js +374 -374
- package/lib/engine/engine_components_internal.d.ts +9 -9
- package/lib/engine/engine_components_internal.js +36 -36
- package/lib/engine/engine_constants.d.ts +10 -10
- package/lib/engine/engine_constants.js +41 -41
- package/lib/engine/engine_context.d.ts +475 -475
- package/lib/engine/engine_context.js +1673 -1673
- package/lib/engine/engine_context_registry.d.ts +71 -71
- package/lib/engine/engine_context_registry.js +117 -117
- package/lib/engine/engine_coroutine.d.ts +35 -35
- package/lib/engine/engine_coroutine.js +52 -52
- package/lib/engine/engine_create_objects.d.ts +119 -119
- package/lib/engine/engine_create_objects.js +320 -320
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_default_parameters.js +3 -3
- package/lib/engine/engine_editor-sync.d.ts +21 -21
- package/lib/engine/engine_editor-sync.js +4 -4
- package/lib/engine/engine_fileloader.d.ts +2 -2
- package/lib/engine/engine_fileloader.js +8 -8
- package/lib/engine/engine_gameobject.d.ts +68 -68
- package/lib/engine/engine_gameobject.js +619 -619
- package/lib/engine/engine_generic_utils.d.ts +1 -1
- package/lib/engine/engine_generic_utils.js +13 -13
- package/lib/engine/engine_gizmos.d.ts +149 -149
- package/lib/engine/engine_gizmos.js +530 -530
- package/lib/engine/engine_gltf.d.ts +12 -12
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +11 -11
- package/lib/engine/engine_gltf_builtin_components.js +341 -341
- package/lib/engine/engine_hot_reload.d.ts +8 -8
- package/lib/engine/engine_hot_reload.js +197 -197
- package/lib/engine/engine_input.d.ts +362 -362
- package/lib/engine/engine_input.js +1294 -1294
- package/lib/engine/engine_input_utils.d.ts +2 -2
- package/lib/engine/engine_input_utils.js +22 -22
- package/lib/engine/engine_instancing.d.ts +19 -19
- package/lib/engine/engine_instancing.js +39 -39
- package/lib/engine/engine_license.d.ts +11 -11
- package/lib/engine/engine_license.js +369 -369
- package/lib/engine/engine_lifecycle_api.d.ts +83 -83
- package/lib/engine/engine_lifecycle_api.js +106 -106
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +32 -32
- package/lib/engine/engine_lifecycle_functions_internal.js +146 -146
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +101 -101
- package/lib/engine/engine_loaders.callbacks.d.ts +97 -97
- package/lib/engine/engine_loaders.callbacks.js +86 -86
- package/lib/engine/engine_loaders.d.ts +48 -48
- package/lib/engine/engine_loaders.gltf.d.ts +13 -13
- package/lib/engine/engine_loaders.gltf.js +62 -62
- package/lib/engine/engine_loaders.js +337 -337
- package/lib/engine/engine_lods.d.ts +35 -35
- package/lib/engine/engine_lods.js +160 -160
- package/lib/engine/engine_mainloop_utils.d.ts +32 -32
- package/lib/engine/engine_mainloop_utils.js +466 -466
- package/lib/engine/engine_math.d.ts +114 -114
- package/lib/engine/engine_math.js +247 -247
- package/lib/engine/engine_modules.d.ts +36 -36
- package/lib/engine/engine_modules.js +85 -85
- package/lib/engine/engine_networking.d.ts +260 -260
- package/lib/engine/engine_networking.js +764 -764
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +310 -310
- package/lib/engine/engine_networking_blob.d.ts +48 -48
- package/lib/engine/engine_networking_blob.js +228 -228
- package/lib/engine/engine_networking_files.d.ts +35 -35
- package/lib/engine/engine_networking_files.js +172 -172
- package/lib/engine/engine_networking_files_default_components.d.ts +6 -6
- package/lib/engine/engine_networking_files_default_components.js +42 -42
- package/lib/engine/engine_networking_instantiate.d.ts +100 -100
- package/lib/engine/engine_networking_instantiate.js +345 -345
- package/lib/engine/engine_networking_peer.d.ts +15 -15
- package/lib/engine/engine_networking_peer.js +132 -132
- package/lib/engine/engine_networking_streams.d.ts +123 -123
- package/lib/engine/engine_networking_streams.js +645 -645
- package/lib/engine/engine_networking_types.d.ts +22 -22
- package/lib/engine/engine_networking_types.js +7 -7
- package/lib/engine/engine_networking_utils.d.ts +2 -2
- package/lib/engine/engine_networking_utils.js +20 -20
- package/lib/engine/engine_networking_websocket.d.ts +1 -1
- package/lib/engine/engine_networking_websocket.js +2 -2
- package/lib/engine/engine_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +152 -152
- package/lib/engine/engine_physics.js +645 -645
- package/lib/engine/engine_physics.types.d.ts +40 -40
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +147 -147
- package/lib/engine/engine_physics_rapier.js +1433 -1433
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +71 -71
- package/lib/engine/engine_scenelighting.js +226 -226
- package/lib/engine/engine_serialization.d.ts +3 -3
- package/lib/engine/engine_serialization.js +3 -3
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +72 -72
- package/lib/engine/engine_serialization_builtin_serializer.js +403 -403
- package/lib/engine/engine_serialization_core.d.ts +94 -94
- package/lib/engine/engine_serialization_core.js +607 -607
- package/lib/engine/engine_serialization_decorator.d.ts +23 -23
- package/lib/engine/engine_serialization_decorator.js +66 -66
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +53 -53
- package/lib/engine/engine_shaders.js +252 -252
- package/lib/engine/engine_shims.d.ts +4 -4
- package/lib/engine/engine_shims.js +24 -24
- package/lib/engine/engine_test_utils.d.ts +39 -39
- package/lib/engine/engine_test_utils.js +83 -83
- package/lib/engine/engine_texture.d.ts +28 -28
- package/lib/engine/engine_texture.js +64 -64
- package/lib/engine/engine_three_utils.d.ts +204 -204
- package/lib/engine/engine_three_utils.js +788 -788
- package/lib/engine/engine_time.d.ts +51 -51
- package/lib/engine/engine_time.js +82 -82
- package/lib/engine/engine_time_utils.d.ts +88 -88
- package/lib/engine/engine_time_utils.js +215 -215
- package/lib/engine/engine_tonemapping.d.ts +6 -6
- package/lib/engine/engine_tonemapping.js +197 -197
- package/lib/engine/engine_types.d.ts +578 -578
- package/lib/engine/engine_types.js +95 -95
- package/lib/engine/engine_typestore.d.ts +28 -28
- package/lib/engine/engine_typestore.js +55 -55
- package/lib/engine/engine_util_decorator.d.ts +13 -13
- package/lib/engine/engine_util_decorator.js +116 -116
- package/lib/engine/engine_utils.d.ts +248 -248
- package/lib/engine/engine_utils.js +1012 -1012
- package/lib/engine/engine_utils_format.d.ts +24 -24
- package/lib/engine/engine_utils_format.js +239 -239
- package/lib/engine/engine_utils_screenshot.d.ts +159 -159
- package/lib/engine/engine_utils_screenshot.js +522 -522
- package/lib/engine/engine_utils_screenshot.xr.d.ts +5 -5
- package/lib/engine/engine_utils_screenshot.xr.js +90 -90
- package/lib/engine/engine_xr.d.ts +1 -1
- package/lib/engine/engine_xr.js +1 -1
- package/lib/engine/export/gltf/Writers.d.ts +19 -19
- package/lib/engine/export/gltf/Writers.js +24 -24
- package/lib/engine/export/gltf/index.d.ts +11 -11
- package/lib/engine/export/gltf/index.js +123 -123
- package/lib/engine/export/index.d.ts +2 -2
- package/lib/engine/export/index.js +2 -2
- package/lib/engine/export/state.d.ts +7 -7
- package/lib/engine/export/state.js +17 -17
- package/lib/engine/export/utils.d.ts +2 -2
- package/lib/engine/export/utils.js +7 -7
- package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
- package/lib/engine/extensions/EXT_texture_exr.js +32 -32
- package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +122 -122
- package/lib/engine/extensions/NEEDLE_animator_controller_model.js +95 -95
- package/lib/engine/extensions/NEEDLE_components.d.ts +35 -35
- package/lib/engine/extensions/NEEDLE_components.js +220 -220
- package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
- package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +37 -37
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +157 -157
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
- package/lib/engine/extensions/NEEDLE_lightmaps.js +99 -99
- package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
- package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
- package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
- package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +38 -38
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +564 -564
- package/lib/engine/extensions/extension_resolver.d.ts +4 -4
- package/lib/engine/extensions/extension_resolver.js +1 -1
- package/lib/engine/extensions/extension_utils.d.ts +12 -12
- package/lib/engine/extensions/extension_utils.js +152 -152
- package/lib/engine/extensions/extensions.d.ts +32 -32
- package/lib/engine/extensions/extensions.js +107 -107
- package/lib/engine/extensions/index.d.ts +6 -6
- package/lib/engine/extensions/index.js +6 -6
- package/lib/engine/extensions/usage_tracker.d.ts +13 -13
- package/lib/engine/extensions/usage_tracker.js +65 -65
- package/lib/engine/js-extensions/Camera.d.ts +1 -1
- package/lib/engine/js-extensions/Camera.js +39 -39
- package/lib/engine/js-extensions/ExtensionUtils.d.ts +9 -9
- package/lib/engine/js-extensions/ExtensionUtils.js +67 -67
- package/lib/engine/js-extensions/Layers.d.ts +6 -6
- package/lib/engine/js-extensions/Layers.js +22 -22
- package/lib/engine/js-extensions/Object3D.d.ts +120 -120
- package/lib/engine/js-extensions/Object3D.js +136 -136
- package/lib/engine/js-extensions/RGBAColor.d.ts +23 -23
- package/lib/engine/js-extensions/RGBAColor.js +111 -111
- package/lib/engine/js-extensions/Vector.d.ts +3 -3
- package/lib/engine/js-extensions/Vector.js +13 -13
- package/lib/engine/js-extensions/index.d.ts +5 -5
- package/lib/engine/js-extensions/index.js +5 -5
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.d.ts +4 -4
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +79 -79
- package/lib/engine/shaders/shaderData.d.ts +55 -55
- package/lib/engine/shaders/shaderData.js +58 -58
- package/lib/engine/tests/test_utils.d.ts +2 -2
- package/lib/engine/tests/test_utils.js +53 -53
- package/lib/engine/webcomponents/WebXRButtons.d.ts +56 -56
- package/lib/engine/webcomponents/WebXRButtons.js +230 -230
- package/lib/engine/webcomponents/api.d.ts +5 -5
- package/lib/engine/webcomponents/api.js +4 -4
- package/lib/engine/webcomponents/buttons.d.ts +51 -51
- package/lib/engine/webcomponents/buttons.js +264 -264
- package/lib/engine/webcomponents/fonts.d.ts +9 -9
- package/lib/engine/webcomponents/fonts.js +32 -32
- package/lib/engine/webcomponents/icons.d.ts +9 -9
- package/lib/engine/webcomponents/icons.js +52 -52
- package/lib/engine/webcomponents/index.d.ts +1 -1
- package/lib/engine/webcomponents/index.js +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +10 -10
- package/lib/engine/webcomponents/logo-element.js +67 -67
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.d.ts +37 -37
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +513 -513
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +155 -155
- package/lib/engine/webcomponents/needle menu/needle-menu.js +1029 -1029
- package/lib/engine/webcomponents/needle-button.d.ts +34 -34
- package/lib/engine/webcomponents/needle-button.js +161 -161
- package/lib/engine/webcomponents/needle-engine.ar-overlay.d.ts +21 -21
- package/lib/engine/webcomponents/needle-engine.ar-overlay.js +166 -166
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -69
- package/lib/engine/webcomponents/needle-engine.attributes.js +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +116 -116
- package/lib/engine/webcomponents/needle-engine.extras.d.ts +6 -6
- package/lib/engine/webcomponents/needle-engine.extras.js +13 -13
- package/lib/engine/webcomponents/needle-engine.js +821 -821
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +341 -341
- package/lib/engine/xr/NeedleXRController.d.ts +313 -313
- package/lib/engine/xr/NeedleXRController.js +1007 -1007
- package/lib/engine/xr/NeedleXRSession.d.ts +340 -340
- package/lib/engine/xr/NeedleXRSession.js +1463 -1463
- package/lib/engine/xr/NeedleXRSync.d.ts +22 -22
- package/lib/engine/xr/NeedleXRSync.js +188 -188
- package/lib/engine/xr/SceneTransition.d.ts +18 -18
- package/lib/engine/xr/SceneTransition.js +69 -69
- package/lib/engine/xr/TempXRContext.d.ts +34 -34
- package/lib/engine/xr/TempXRContext.js +187 -187
- package/lib/engine/xr/XRRig.d.ts +7 -7
- package/lib/engine/xr/XRRig.js +1 -1
- package/lib/engine/xr/api.d.ts +6 -6
- package/lib/engine/xr/api.js +6 -6
- package/lib/engine/xr/events.d.ts +66 -66
- package/lib/engine/xr/events.js +93 -93
- package/lib/engine/xr/internal.d.ts +12 -12
- package/lib/engine/xr/internal.js +25 -25
- package/lib/engine/xr/usdz.d.ts +12 -12
- package/lib/engine/xr/usdz.js +29 -29
- package/lib/engine/xr/utils.d.ts +11 -11
- package/lib/engine/xr/utils.js +34 -34
- package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +156 -156
- package/lib/engine-components/Animation.js +508 -508
- package/lib/engine-components/AnimationCurve.d.ts +40 -40
- package/lib/engine-components/AnimationCurve.js +159 -159
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +27 -27
- package/lib/engine-components/AnimationUtilsAutoplay.d.ts +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +39 -39
- package/lib/engine-components/Animator.d.ts +217 -217
- package/lib/engine-components/Animator.js +354 -354
- package/lib/engine-components/AnimatorController.d.ts +227 -227
- package/lib/engine-components/AnimatorController.js +1152 -1152
- package/lib/engine-components/AudioListener.d.ts +33 -33
- package/lib/engine-components/AudioListener.js +86 -86
- package/lib/engine-components/AudioSource.d.ts +217 -217
- package/lib/engine-components/AudioSource.js +635 -635
- package/lib/engine-components/AvatarLoader.d.ts +80 -80
- package/lib/engine-components/AvatarLoader.js +231 -231
- package/lib/engine-components/AxesHelper.d.ts +32 -32
- package/lib/engine-components/AxesHelper.js +67 -67
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxCollider.d.ts +2 -2
- package/lib/engine-components/BoxCollider.js +2 -2
- package/lib/engine-components/BoxHelperComponent.d.ts +47 -47
- package/lib/engine-components/BoxHelperComponent.js +102 -102
- package/lib/engine-components/Camera.d.ts +231 -231
- package/lib/engine-components/Camera.js +700 -700
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +123 -123
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +59 -59
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +46 -46
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +113 -113
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -39
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +23 -23
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +111 -111
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +25 -25
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +104 -104
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +18 -18
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +32 -32
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +91 -91
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +70 -70
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +176 -176
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +127 -127
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +70 -70
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +19 -19
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +94 -94
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +15 -15
- package/lib/engine-components/postprocessing/Effects/Vignette.js +60 -60
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +90 -90
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +168 -168
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +42 -42
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +494 -494
- package/lib/engine-components/postprocessing/Volume.d.ts +90 -90
- package/lib/engine-components/postprocessing/Volume.js +385 -385
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +26 -26
- package/lib/engine-components/postprocessing/VolumeParameter.js +136 -136
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +15 -15
- package/lib/engine-components/postprocessing/VolumeProfile.js +60 -60
- package/lib/engine-components/postprocessing/index.d.ts +6 -6
- package/lib/engine-components/postprocessing/index.js +6 -6
- package/lib/engine-components/postprocessing/utils.d.ts +55 -55
- package/lib/engine-components/postprocessing/utils.js +119 -119
- package/lib/engine-components/timeline/PlayableDirector.d.ts +163 -163
- package/lib/engine-components/timeline/PlayableDirector.js +686 -686
- package/lib/engine-components/timeline/SignalAsset.d.ts +24 -24
- package/lib/engine-components/timeline/SignalAsset.js +130 -130
- package/lib/engine-components/timeline/TimelineModels.d.ts +89 -89
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +110 -110
- package/lib/engine-components/timeline/TimelineTracks.js +879 -879
- package/lib/engine-components/timeline/index.d.ts +4 -4
- package/lib/engine-components/timeline/index.js +3 -3
- package/lib/engine-components/ui/BaseUIComponent.d.ts +48 -48
- package/lib/engine-components/ui/BaseUIComponent.js +170 -170
- package/lib/engine-components/ui/Button.d.ts +64 -64
- package/lib/engine-components/ui/Button.js +315 -315
- package/lib/engine-components/ui/Canvas.d.ts +74 -74
- package/lib/engine-components/ui/Canvas.js +407 -407
- package/lib/engine-components/ui/CanvasGroup.d.ts +19 -19
- package/lib/engine-components/ui/CanvasGroup.js +58 -58
- package/lib/engine-components/ui/EventSystem.d.ts +125 -125
- package/lib/engine-components/ui/EventSystem.js +765 -765
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +255 -255
- package/lib/engine-components/ui/Image.d.ts +35 -35
- package/lib/engine-components/ui/Image.js +116 -116
- package/lib/engine-components/ui/InputField.d.ts +42 -42
- package/lib/engine-components/ui/InputField.js +268 -268
- package/lib/engine-components/ui/Interfaces.d.ts +38 -38
- package/lib/engine-components/ui/Interfaces.js +12 -12
- package/lib/engine-components/ui/Layout.d.ts +84 -84
- package/lib/engine-components/ui/Layout.js +330 -330
- package/lib/engine-components/ui/Outline.d.ts +7 -7
- package/lib/engine-components/ui/Outline.js +20 -20
- package/lib/engine-components/ui/PointerEvents.d.ts +115 -115
- package/lib/engine-components/ui/PointerEvents.js +145 -145
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
- package/lib/engine-components/ui/RaycastUtils.js +67 -67
- package/lib/engine-components/ui/Raycaster.d.ts +30 -30
- package/lib/engine-components/ui/Raycaster.js +95 -95
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +356 -356
- package/lib/engine-components/ui/SpatialHtml.d.ts +8 -8
- package/lib/engine-components/ui/SpatialHtml.js +79 -79
- package/lib/engine-components/ui/Symbols.d.ts +1 -1
- package/lib/engine-components/ui/Symbols.js +1 -1
- package/lib/engine-components/ui/Text.d.ts +78 -78
- package/lib/engine-components/ui/Text.js +539 -539
- package/lib/engine-components/ui/Utils.d.ts +24 -24
- package/lib/engine-components/ui/Utils.js +90 -90
- package/lib/engine-components/ui/index.d.ts +1 -1
- package/lib/engine-components/ui/index.js +1 -1
- package/lib/engine-components/utils/EnvironmentScene.d.ts +5 -5
- package/lib/engine-components/utils/EnvironmentScene.js +205 -205
- package/lib/engine-components/utils/LookAt.d.ts +31 -31
- package/lib/engine-components/utils/LookAt.js +82 -82
- package/lib/engine-components/utils/OpenURL.d.ts +42 -42
- package/lib/engine-components/utils/OpenURL.js +119 -119
- package/lib/engine-components/webxr/Avatar.d.ts +25 -25
- package/lib/engine-components/webxr/Avatar.js +255 -255
- package/lib/engine-components/webxr/TeleportTarget.d.ts +7 -7
- package/lib/engine-components/webxr/TeleportTarget.js +7 -7
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +30 -30
- package/lib/engine-components/webxr/WebARCameraBackground.js +155 -155
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +98 -98
- package/lib/engine-components/webxr/WebARSessionRoot.js +770 -770
- package/lib/engine-components/webxr/WebXR.d.ts +232 -232
- package/lib/engine-components/webxr/WebXR.js +561 -561
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +27 -27
- package/lib/engine-components/webxr/WebXRAvatar.js +44 -44
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +86 -86
- package/lib/engine-components/webxr/WebXRImageTracking.js +471 -471
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +92 -92
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +500 -500
- package/lib/engine-components/webxr/WebXRRig.d.ts +32 -32
- package/lib/engine-components/webxr/WebXRRig.js +72 -72
- package/lib/engine-components/webxr/XRFlag.d.ts +38 -38
- package/lib/engine-components/webxr/XRFlag.js +139 -139
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +47 -47
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +120 -120
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +43 -43
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +352 -352
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +78 -78
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +506 -506
- package/lib/engine-components/webxr/index.d.ts +3 -3
- package/lib/engine-components/webxr/index.js +3 -3
- package/lib/engine-components/webxr/types.d.ts +3 -3
- package/lib/engine-components/webxr/types.js +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -6
- package/lib/engine-components-experimental/Presentation.js +9 -9
- package/lib/engine-components-experimental/api.d.ts +4 -4
- package/lib/engine-components-experimental/api.js +4 -4
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +156 -156
- package/lib/engine-components-experimental/networking/PlayerSync.js +377 -377
- package/lib/engine-schemes/api.d.ts +12 -12
- package/lib/engine-schemes/api.js +12 -12
- package/lib/engine-schemes/schemes.d.ts +7 -7
- package/lib/engine-schemes/schemes.js +19 -19
- package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
- package/lib/engine-schemes/synced-camera-model.js +67 -67
- package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
- package/lib/engine-schemes/synced-transform-model.js +66 -66
- package/lib/engine-schemes/transform.d.ts +12 -12
- package/lib/engine-schemes/transform.js +39 -39
- package/lib/engine-schemes/vec2.d.ts +10 -10
- package/lib/engine-schemes/vec2.js +25 -25
- package/lib/engine-schemes/vec3.d.ts +11 -11
- package/lib/engine-schemes/vec3.js +29 -29
- package/lib/engine-schemes/vec4.d.ts +12 -12
- package/lib/engine-schemes/vec4.js +33 -33
- package/lib/engine-schemes/vr-user-state-buffer.d.ts +37 -37
- package/lib/engine-schemes/vr-user-state-buffer.js +110 -110
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
- package/lib/needle-engine.d.ts +7 -7
- package/lib/needle-engine.js +64 -64
- package/package.json +3 -3
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +31 -31
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/logger.js +327 -327
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/gltf-packer.mjs +1 -1
- package/plugins/next/alias.cjs +39 -39
- package/plugins/next/license.cjs +24 -24
- package/plugins/next/meshbvhworker.cjs +18 -18
- package/plugins/next/next.js +141 -141
- package/plugins/types/index.d.ts +2 -2
- package/plugins/types/license.d.ts +24 -24
- package/plugins/types/needleConfig.d.ts +27 -27
- package/plugins/types/next.d.ts +2 -2
- package/plugins/types/userconfig.d.ts +124 -124
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +189 -189
- package/plugins/vite/asap.js +251 -251
- package/plugins/vite/build-pipeline.js +371 -371
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/buildinfo.js +41 -41
- package/plugins/vite/config.js +106 -106
- package/plugins/vite/copyfiles.js +138 -138
- package/plugins/vite/defines.js +70 -70
- package/plugins/vite/dependencies.js +232 -232
- package/plugins/vite/dependency-watcher.js +237 -237
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +87 -87
- package/plugins/vite/editor-connection.js +124 -124
- package/plugins/vite/facebook-instant-games.js +102 -102
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +147 -147
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/logger.client.js +272 -272
- package/plugins/vite/logger.js +100 -100
- package/plugins/vite/materialx.js +31 -31
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +29 -29
- package/plugins/vite/poster-client.js +73 -73
- package/plugins/vite/poster.js +79 -79
- package/plugins/vite/pwa.js +604 -604
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +351 -351
- package/plugins/vite/server.js +66 -66
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/transform.js +32 -32
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/asap/needle-asap.ts +111 -111
- package/src/asap/sessiongranted.ts +75 -75
- package/src/asap/utils.ts +4 -4
- package/src/engine/analytics/index.ts +10 -10
- package/src/engine/analytics/lcp.ts +35 -35
- package/src/engine/api.ts +82 -82
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +300 -300
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +333 -333
- package/src/engine/debug/debug_overlay.ts +332 -332
- package/src/engine/debug/debug_spatial_console.ts +429 -429
- package/src/engine/debug/index.ts +1 -1
- package/src/engine/engine_addressables.ts +671 -671
- package/src/engine/engine_animation.ts +145 -145
- package/src/engine/engine_application.ts +113 -113
- package/src/engine/engine_assetdatabase.ts +389 -389
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.ts +39 -39
- package/src/engine/engine_components.ts +366 -366
- package/src/engine/engine_components_internal.ts +40 -40
- package/src/engine/engine_constants.ts +52 -52
- package/src/engine/engine_context.ts +1824 -1824
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +411 -411
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +28 -28
- package/src/engine/engine_fileloader.js +9 -9
- package/src/engine/engine_gameobject.ts +712 -712
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +577 -577
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +403 -403
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1500 -1500
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +45 -45
- package/src/engine/engine_license.ts +386 -386
- package/src/engine/engine_lifecycle_api.ts +113 -113
- package/src/engine/engine_lifecycle_functions_internal.ts +193 -193
- package/src/engine/engine_lightdata.ts +125 -125
- package/src/engine/engine_loaders.callbacks.ts +136 -136
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +378 -378
- package/src/engine/engine_lods.ts +186 -186
- package/src/engine/engine_mainloop_utils.ts +472 -472
- package/src/engine/engine_math.ts +282 -282
- package/src/engine/engine_modules.ts +83 -83
- package/src/engine/engine_networking.ts +862 -862
- package/src/engine/engine_networking_auto.ts +352 -352
- package/src/engine/engine_networking_blob.ts +275 -275
- package/src/engine/engine_networking_files.ts +217 -217
- package/src/engine/engine_networking_files_default_components.ts +58 -58
- package/src/engine/engine_networking_instantiate.ts +419 -419
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +713 -713
- package/src/engine/engine_networking_types.ts +24 -24
- package/src/engine/engine_networking_utils.ts +23 -23
- package/src/engine/engine_networking_websocket.ts +2 -2
- package/src/engine/engine_patcher.ts +199 -199
- package/src/engine/engine_physics.ts +783 -783
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1577 -1577
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_scenelighting.ts +294 -294
- package/src/engine/engine_serialization.ts +2 -2
- package/src/engine/engine_serialization_builtin_serializer.ts +473 -473
- package/src/engine/engine_serialization_core.ts +720 -720
- package/src/engine/engine_serialization_decorator.ts +80 -80
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +267 -267
- package/src/engine/engine_shims.ts +32 -32
- package/src/engine/engine_test_utils.ts +109 -109
- package/src/engine/engine_texture.ts +82 -82
- package/src/engine/engine_three_utils.ts +928 -928
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +208 -208
- package/src/engine/engine_types.ts +730 -730
- package/src/engine/engine_typestore.ts +63 -63
- package/src/engine/engine_util_decorator.ts +136 -136
- package/src/engine/engine_utils.ts +1115 -1115
- package/src/engine/engine_utils_format.ts +273 -273
- package/src/engine/engine_utils_screenshot.ts +708 -708
- package/src/engine/engine_utils_screenshot.xr.ts +103 -103
- package/src/engine/export/gltf/Writers.ts +34 -34
- package/src/engine/export/gltf/index.ts +158 -158
- package/src/engine/export/index.ts +2 -2
- package/src/engine/export/state.ts +19 -19
- package/src/engine/export/utils.ts +9 -9
- package/src/engine/extensions/EXT_texture_exr.ts +50 -50
- package/src/engine/extensions/NEEDLE_animator_controller_model.ts +195 -195
- package/src/engine/extensions/NEEDLE_components.ts +268 -268
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +81 -81
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +185 -185
- package/src/engine/extensions/NEEDLE_lightmaps.ts +119 -119
- package/src/engine/extensions/NEEDLE_persistent_assets.ts +76 -76
- package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +640 -640
- package/src/engine/extensions/extension_resolver.ts +4 -4
- package/src/engine/extensions/extension_utils.ts +166 -166
- package/src/engine/extensions/extensions.ts +140 -140
- package/src/engine/extensions/index.ts +5 -5
- package/src/engine/extensions/usage_tracker.ts +100 -100
- package/src/engine/js-extensions/Camera.ts +37 -37
- package/src/engine/js-extensions/ExtensionUtils.ts +85 -85
- package/src/engine/js-extensions/Layers.ts +23 -23
- package/src/engine/js-extensions/Object3D.ts +296 -296
- package/src/engine/js-extensions/RGBAColor.ts +126 -126
- package/src/engine/js-extensions/Vector.ts +18 -18
- package/src/engine/js-extensions/index.ts +4 -4
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +125 -125
- package/src/engine/shaders/shaderData.ts +67 -67
- package/src/engine/tests/test_utils.ts +63 -63
- package/src/engine/webcomponents/WebXRButtons.ts +260 -260
- package/src/engine/webcomponents/api.ts +6 -6
- package/src/engine/webcomponents/buttons.ts +292 -292
- package/src/engine/webcomponents/fonts.ts +41 -41
- package/src/engine/webcomponents/icons.ts +57 -57
- package/src/engine/webcomponents/index.ts +1 -1
- package/src/engine/webcomponents/logo-element.ts +78 -78
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +573 -573
- package/src/engine/webcomponents/needle menu/needle-menu.ts +1118 -1118
- package/src/engine/webcomponents/needle-button.ts +181 -181
- package/src/engine/webcomponents/needle-engine.ar-overlay.ts +186 -186
- package/src/engine/webcomponents/needle-engine.attributes.ts +82 -82
- package/src/engine/webcomponents/needle-engine.extras.ts +16 -16
- package/src/engine/webcomponents/needle-engine.loading.ts +373 -373
- package/src/engine/webcomponents/needle-engine.ts +860 -860
- package/src/engine/xr/NeedleXRController.ts +1125 -1125
- package/src/engine/xr/NeedleXRSession.ts +1624 -1624
- package/src/engine/xr/NeedleXRSync.ts +220 -220
- package/src/engine/xr/SceneTransition.ts +78 -78
- package/src/engine/xr/TempXRContext.ts +216 -216
- package/src/engine/xr/XRRig.ts +9 -9
- package/src/engine/xr/api.ts +5 -5
- package/src/engine/xr/events.ts +102 -102
- package/src/engine/xr/internal.ts +34 -34
- package/src/engine/xr/usdz.ts +30 -30
- package/src/engine/xr/utils.ts +39 -39
- package/src/engine-components/AlignmentConstraint.ts +36 -36
- package/src/engine-components/Animation.ts +557 -557
- package/src/engine-components/AnimationCurve.ts +150 -150
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +43 -43
- package/src/engine-components/Animator.ts +397 -397
- package/src/engine-components/AnimatorController.ts +1293 -1293
- package/src/engine-components/AudioListener.ts +92 -92
- package/src/engine-components/AudioSource.ts +644 -644
- package/src/engine-components/AvatarLoader.ts +263 -263
- package/src/engine-components/AxesHelper.ts +59 -59
- package/src/engine-components/BasicIKConstraint.ts +54 -54
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +114 -114
- package/src/engine-components/Camera.ts +719 -719
- package/src/engine-components/CameraUtils.ts +138 -138
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +374 -374
- package/src/engine-components/Component.ts +1297 -1297
- package/src/engine-components/ContactShadows.ts +506 -506
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1623 -1623
- package/src/engine-components/DropListener.ts +713 -713
- package/src/engine-components/Duplicatable.ts +198 -198
- package/src/engine-components/EventList.ts +266 -266
- package/src/engine-components/EventTrigger.ts +74 -74
- package/src/engine-components/EventType.ts +22 -22
- package/src/engine-components/Fog.ts +60 -60
- package/src/engine-components/Gizmos.ts +56 -56
- package/src/engine-components/GridHelper.ts +48 -48
- package/src/engine-components/GroundProjection.ts +356 -356
- package/src/engine-components/Interactable.ts +14 -14
- package/src/engine-components/Joints.ts +52 -52
- package/src/engine-components/LODGroup.ts +153 -153
- package/src/engine-components/Light.ts +558 -558
- package/src/engine-components/LookAtConstraint.ts +25 -25
- package/src/engine-components/NeedleMenu.ts +84 -84
- package/src/engine-components/NestedGltf.ts +86 -86
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1074 -1074
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +220 -220
- package/src/engine-components/Renderer.ts +903 -903
- package/src/engine-components/RendererInstancing.ts +855 -855
- package/src/engine-components/RendererLightmap.ts +198 -198
- package/src/engine-components/RigidBody.ts +526 -526
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +475 -475
- package/src/engine-components/SmoothFollow.ts +76 -76
- package/src/engine-components/SpatialTrigger.ts +229 -229
- package/src/engine-components/SpectatorCamera.ts +787 -787
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +468 -468
- package/src/engine-components/SyncedCamera.ts +220 -220
- package/src/engine-components/SyncedRoom.ts +380 -380
- package/src/engine-components/SyncedTransform.ts +383 -383
- package/src/engine-components/TestRunner.ts +118 -118
- package/src/engine-components/TransformGizmo.ts +219 -219
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +60 -60
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +69 -69
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +63 -63
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +139 -139
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +83 -83
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +31 -31
- package/src/engine-components/codegen/components.ts +217 -217
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +265 -265
- package/src/engine-components/export/usdz/Extension.ts +24 -24
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2426 -2426
- package/src/engine-components/export/usdz/USDZExporter.ts +705 -705
- package/src/engine-components/export/usdz/extensions/Animation.ts +1204 -1204
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -532
- package/src/engine-components/export/usdz/extensions/USDZText.ts +240 -240
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +189 -189
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -99
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +102 -102
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +320 -320
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1225 -1225
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +646 -646
- package/src/engine-components/export/usdz/extensions/behavior/PhysicsExtension.ts +132 -132
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +191 -191
- package/src/engine-components/export/usdz/utils/quicklook.ts +50 -50
- package/src/engine-components/particlesystem/ParticleSystem.ts +1287 -1287
- package/src/engine-components/particlesystem/ParticleSystemModules.ts +1765 -1765
- package/src/engine-components/particlesystem/ParticleSystemSubEmitter.ts +111 -111
- package/src/engine-components/particlesystem/api.ts +1 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +64 -64
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +116 -116
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +37 -37
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +106 -106
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +103 -103
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +25 -25
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +32 -32
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +90 -90
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +192 -192
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +143 -143
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +61 -61
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +103 -103
- package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -60
- package/src/engine-components/postprocessing/Effects/Vignette.ts +59 -59
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +192 -192
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +572 -572
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +0 -25
- package/src/engine-schemes/dist/api.js +0 -17
- package/src/engine-schemes/dist/api.js.meta +0 -7
- package/src/engine-schemes/dist/schemes.js +0 -25
- package/src/engine-schemes/dist/schemes.js.meta +0 -7
- package/src/engine-schemes/dist/synced-camera-model.js +0 -74
- package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
- package/src/engine-schemes/dist/synced-transform-model.js +0 -73
- package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
- package/src/engine-schemes/dist/transform.js +0 -46
- package/src/engine-schemes/dist/transform.js.meta +0 -7
- package/src/engine-schemes/dist/vec2.js +0 -32
- package/src/engine-schemes/dist/vec2.js.meta +0 -7
- package/src/engine-schemes/dist/vec3.js +0 -36
- package/src/engine-schemes/dist/vec3.js.meta +0 -7
- package/src/engine-schemes/dist/vec4.js +0 -40
- package/src/engine-schemes/dist/vec4.js.meta +0 -7
- package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
|
@@ -1,578 +1,578 @@
|
|
|
1
|
-
import { AxesHelper, Box3, BoxGeometry, BufferAttribute, BufferGeometry, Color, type ColorRepresentation, CylinderGeometry, EdgesGeometry, Line, LineBasicMaterial, LineSegments, Matrix4, Mesh, MeshBasicMaterial, Object3D, Quaternion, SphereGeometry, Vector3 } from 'three';
|
|
2
|
-
import ThreeMeshUI, { Inline, Text } from "three-mesh-ui"
|
|
3
|
-
import { type Options } from 'three-mesh-ui/build/types/core/elements/MeshUIBaseElement.js';
|
|
4
|
-
|
|
5
|
-
import { isDestroyed } from './engine_gameobject.js';
|
|
6
|
-
import { Context, FrameEvent } from './engine_setup.js';
|
|
7
|
-
import { getTempVector, getWorldPosition, lookAtObject, setWorldPositionXYZ } from './engine_three_utils.js';
|
|
8
|
-
import type { Vec3, Vec4 } from './engine_types.js';
|
|
9
|
-
import { getParam } from './engine_utils.js';
|
|
10
|
-
import { NeedleXRSession } from './engine_xr.js';
|
|
11
|
-
|
|
12
|
-
const _tmp = new Vector3();
|
|
13
|
-
const _tmp2 = new Vector3();
|
|
14
|
-
const _quat = new Quaternion();
|
|
15
|
-
|
|
16
|
-
const debug = getParam("debuggizmos");
|
|
17
|
-
const defaultColor: ColorRepresentation = 0x888888;
|
|
18
|
-
|
|
19
|
-
const circleSegments: number = 32;
|
|
20
|
-
|
|
21
|
-
export type LabelHandle = {
|
|
22
|
-
setText(str: string);
|
|
23
|
-
}
|
|
24
|
-
declare type ColorWithAlpha = Color & { a: number };
|
|
25
|
-
|
|
26
|
-
/** Gizmos are temporary objects that are drawn in the scene for debugging or visualization purposes
|
|
27
|
-
* They are automatically removed after a given duration and cached internally to reduce overhead.
|
|
28
|
-
* Use the static methods of this class to draw gizmos in the scene.
|
|
29
|
-
*/
|
|
30
|
-
export class Gizmos {
|
|
31
|
-
|
|
32
|
-
private constructor() { }
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Allow creating gizmos
|
|
36
|
-
* If disabled then no gizmos will be added to the scene anymore
|
|
37
|
-
*/
|
|
38
|
-
static enabled = true;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Returns true if a given object is a gizmo
|
|
42
|
-
*/
|
|
43
|
-
static isGizmo(obj: Object3D) {
|
|
44
|
-
return obj[$cacheSymbol] !== undefined;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** Set visibility of all currently rendered gizmos */
|
|
48
|
-
static setVisible(visible: boolean) {
|
|
49
|
-
for (const obj of Internal.timedObjectsBuffer) {
|
|
50
|
-
obj.visible = visible;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Draw a label in the scene or attached to an object (if a parent is provided)
|
|
56
|
-
* @param position the position of the label in world space
|
|
57
|
-
* @param text the text of the label
|
|
58
|
-
* @param size the size of the label in world space
|
|
59
|
-
* @param duration the duration in seconds the label will be rendered. If 0 it will be rendered for one frame
|
|
60
|
-
* @param color the color of the label
|
|
61
|
-
* @param backgroundColor the background color of the label
|
|
62
|
-
* @param parent the parent object to attach the label to. If no parent is provided the label will be attached to the scene
|
|
63
|
-
* @returns a handle to the label that can be used to update the text
|
|
64
|
-
*/
|
|
65
|
-
static DrawLabel(position: Vec3, text: string, size: number = .05, duration: number = 0, color?: ColorRepresentation, backgroundColor?: ColorRepresentation | ColorWithAlpha, parent?: Object3D,) {
|
|
66
|
-
if (!Gizmos.enabled) return null;
|
|
67
|
-
if (!color) color = defaultColor;
|
|
68
|
-
const rigScale = NeedleXRSession.active?.rigScale ?? 1;
|
|
69
|
-
const element = Internal.getTextLabel(duration, text, size * rigScale, color, backgroundColor);
|
|
70
|
-
if (parent instanceof Object3D) parent.add(element as any);
|
|
71
|
-
element.position.x = position.x;
|
|
72
|
-
element.position.y = position.y;
|
|
73
|
-
element.position.z = position.z;
|
|
74
|
-
return element as LabelHandle;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Draw a ray gizmo in the scene
|
|
79
|
-
* @param origin the origin of the ray in world space
|
|
80
|
-
* @param dir the direction of the ray in world space
|
|
81
|
-
* @param color the color of the ray
|
|
82
|
-
* @param duration the duration in seconds the ray will be rendered. If 0 it will be rendered for one frame
|
|
83
|
-
* @param depthTest if true the ray will be rendered with depth test
|
|
84
|
-
*/
|
|
85
|
-
static DrawRay(origin: Vec3, dir: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
86
|
-
if (!Gizmos.enabled) return;
|
|
87
|
-
const obj = Internal.getLine(duration);
|
|
88
|
-
const positions = obj.geometry.getAttribute("position");
|
|
89
|
-
positions.setXYZ(0, origin.x, origin.y, origin.z);
|
|
90
|
-
_tmp.set(dir.x, dir.y, dir.z).multiplyScalar(999999999);
|
|
91
|
-
positions.setXYZ(1, origin.x + _tmp.x, origin.y + _tmp.y, origin.z + _tmp.z);
|
|
92
|
-
positions.needsUpdate = true;
|
|
93
|
-
obj.material["color"].set(color);
|
|
94
|
-
obj.material["depthTest"] = depthTest;
|
|
95
|
-
obj.material["depthWrite"] = false;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Draw a line gizmo in the scene
|
|
100
|
-
* @param pt0 the start point of the line in world space
|
|
101
|
-
* @param pt1 the end point of the line in world space
|
|
102
|
-
* @param color the color of the line
|
|
103
|
-
* @param duration the duration in seconds the line will be rendered. If 0 it will be rendered for one frame
|
|
104
|
-
* @param depthTest if true the line will be rendered with depth test
|
|
105
|
-
* @param lengthFactor the length of the line. Default is 1
|
|
106
|
-
*/
|
|
107
|
-
static DrawDirection(pt: Vec3, direction: Vec3 | Vec4, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true, lengthFactor: number = 1) {
|
|
108
|
-
if (!Gizmos.enabled) return;
|
|
109
|
-
const obj = Internal.getLine(duration);
|
|
110
|
-
const positions = obj.geometry.getAttribute("position");
|
|
111
|
-
positions.setXYZ(0, pt.x, pt.y, pt.z);
|
|
112
|
-
if (direction["w"] !== undefined) {
|
|
113
|
-
_tmp.set(0, 0, -lengthFactor);
|
|
114
|
-
_quat.set(direction["x"], direction["y"], direction["z"], direction["w"]);
|
|
115
|
-
_tmp.applyQuaternion(_quat);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
_tmp.set(direction.x, direction.y, direction.z);
|
|
119
|
-
_tmp.multiplyScalar(lengthFactor);
|
|
120
|
-
}
|
|
121
|
-
positions.setXYZ(1, pt.x + _tmp.x, pt.y + _tmp.y, pt.z + _tmp.z);
|
|
122
|
-
positions.needsUpdate = true;
|
|
123
|
-
obj.material["color"].set(color);
|
|
124
|
-
obj.material["depthTest"] = depthTest;
|
|
125
|
-
obj.material["depthWrite"] = false;
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Draw a line gizmo in the scene
|
|
131
|
-
* @param pt0 the start point of the line in world space
|
|
132
|
-
* @param pt1 the end point of the line in world space
|
|
133
|
-
* @param color the color of the line
|
|
134
|
-
* @param duration the duration in seconds the line will be rendered. If 0 it will be rendered for one frame
|
|
135
|
-
* @param depthTest if true the line will be rendered with depth test
|
|
136
|
-
*/
|
|
137
|
-
static DrawLine(pt0: Vec3, pt1: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
138
|
-
if (!Gizmos.enabled) return;
|
|
139
|
-
const obj = Internal.getLine(duration);
|
|
140
|
-
const positions = obj.geometry.getAttribute("position");
|
|
141
|
-
positions.setXYZ(0, pt0.x, pt0.y, pt0.z);
|
|
142
|
-
positions.setXYZ(1, pt1.x, pt1.y, pt1.z);
|
|
143
|
-
positions.needsUpdate = true;
|
|
144
|
-
obj.material["color"].set(color);
|
|
145
|
-
obj.material["depthTest"] = depthTest;
|
|
146
|
-
obj.material["depthWrite"] = false;
|
|
147
|
-
obj.material["fog"] = false;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Draw a 2D circle gizmo in the scene
|
|
152
|
-
* @param pt0 the center of the circle in world space
|
|
153
|
-
* @param normal the normal of the circle in world space
|
|
154
|
-
* @param radius the radius of the circle in world space
|
|
155
|
-
* @param color the color of the circle
|
|
156
|
-
* @param duration the duration in seconds the circle will be rendered. If 0 it will be rendered for one frame
|
|
157
|
-
* @param depthTest if true the circle will be rendered with depth test
|
|
158
|
-
*/
|
|
159
|
-
static DrawCircle(pt0: Vec3, normal: Vec3, radius: number, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
160
|
-
if (!Gizmos.enabled) return;
|
|
161
|
-
const obj = Internal.getCircle(duration);
|
|
162
|
-
obj.position.set(pt0.x, pt0.y, pt0.z);
|
|
163
|
-
obj.scale.set(radius, radius, radius);
|
|
164
|
-
obj.quaternion.setFromUnitVectors(this._up, _tmp.set(normal.x, normal.y, normal.z).normalize());
|
|
165
|
-
obj.material["color"].set(color);
|
|
166
|
-
obj.material["depthTest"] = depthTest;
|
|
167
|
-
obj.material["depthWrite"] = false;
|
|
168
|
-
obj.material["fog"] = false;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Draw a 3D wiremesh sphere gizmo in the scene
|
|
173
|
-
* @param center the center of the sphere in world space
|
|
174
|
-
* @param radius the radius of the sphere in world space
|
|
175
|
-
* @param color the color of the sphere
|
|
176
|
-
* @param duration the duration in seconds the sphere will be rendered. If 0 it will be rendered for one frame
|
|
177
|
-
* @param depthTest if true the sphere will be rendered with depth test
|
|
178
|
-
*/
|
|
179
|
-
static DrawWireSphere(center: Vec3, radius: number, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
180
|
-
if (!Gizmos.enabled) return;
|
|
181
|
-
const obj = Internal.getSphere(radius, duration, true);
|
|
182
|
-
setWorldPositionXYZ(obj, center.x, center.y, center.z);
|
|
183
|
-
obj.material["color"].set(color);
|
|
184
|
-
obj.material["depthTest"] = depthTest;
|
|
185
|
-
obj.material["depthWrite"] = false;
|
|
186
|
-
obj.material["fog"] = false;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Draw a 3D sphere gizmo in the scene
|
|
191
|
-
* @param center the center of the sphere in world space
|
|
192
|
-
* @param radius the radius of the sphere in world space
|
|
193
|
-
* @param color the color of the sphere
|
|
194
|
-
* @param duration the duration in seconds the sphere will be rendered. If 0 it will be rendered for one frame
|
|
195
|
-
* @param depthTest if true the sphere will be rendered with depth test
|
|
196
|
-
*/
|
|
197
|
-
static DrawSphere(center: Vec3, radius: number, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
198
|
-
if (!Gizmos.enabled) return;
|
|
199
|
-
const obj = Internal.getSphere(radius, duration, false);
|
|
200
|
-
setWorldPositionXYZ(obj, center.x, center.y, center.z);
|
|
201
|
-
obj.material["color"].set(color);
|
|
202
|
-
obj.material["depthTest"] = depthTest;
|
|
203
|
-
obj.material["depthWrite"] = false;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Draw a 3D wiremesh box gizmo in the scene
|
|
208
|
-
* @param center the center of the box in world space
|
|
209
|
-
* @param size the size of the box in world space
|
|
210
|
-
* @param color the color of the box
|
|
211
|
-
* @param duration the duration in seconds the box will be rendered. If 0 it will be rendered for one frame
|
|
212
|
-
* @param depthTest if true the box will be rendered with depth test
|
|
213
|
-
*/
|
|
214
|
-
static DrawWireBox(center: Vec3, size: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
215
|
-
if (!Gizmos.enabled) return;
|
|
216
|
-
const obj = Internal.getBox(duration);
|
|
217
|
-
obj.position.set(center.x, center.y, center.z);
|
|
218
|
-
obj.scale.set(size.x, size.y, size.z);
|
|
219
|
-
obj.material["color"].set(color);
|
|
220
|
-
obj.material["depthTest"] = depthTest;
|
|
221
|
-
obj.material["wireframe"] = true;
|
|
222
|
-
obj.material["depthWrite"] = false;
|
|
223
|
-
obj.material["fog"] = false;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Draw a 3D wiremesh box gizmo in the scene
|
|
228
|
-
* @param box the box in world space
|
|
229
|
-
* @param color the color of the box
|
|
230
|
-
* @param duration the duration in seconds the box will be rendered. If 0 it will be rendered for one frame
|
|
231
|
-
* @param depthTest if true the box will be rendered with depth test
|
|
232
|
-
*/
|
|
233
|
-
static DrawWireBox3(box: Box3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
234
|
-
if (!Gizmos.enabled) return;
|
|
235
|
-
const obj = Internal.getBox(duration);
|
|
236
|
-
obj.position.copy(box.getCenter(_tmp));
|
|
237
|
-
obj.scale.copy(box.getSize(_tmp));
|
|
238
|
-
obj.material["color"].set(color);
|
|
239
|
-
obj.material["depthTest"] = depthTest;
|
|
240
|
-
obj.material["wireframe"] = true;
|
|
241
|
-
obj.material["depthWrite"] = false;
|
|
242
|
-
obj.material["fog"] = false;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
private static _up = new Vector3(0, 1, 0);
|
|
246
|
-
/**
|
|
247
|
-
* Draw an arrow gizmo in the scene
|
|
248
|
-
* @param pt0 the start point of the arrow in world space
|
|
249
|
-
* @param pt1 the end point of the arrow in world space
|
|
250
|
-
* @param color the color of the arrow
|
|
251
|
-
* @param duration the duration in seconds the arrow will be rendered. If 0 it will be rendered for one frame
|
|
252
|
-
* @param depthTest if true the arrow will be rendered with depth test
|
|
253
|
-
* @param wireframe if true the arrow will be rendered as wireframe
|
|
254
|
-
*/
|
|
255
|
-
static DrawArrow(pt0: Vec3, pt1: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true, wireframe: boolean = false) {
|
|
256
|
-
if (!Gizmos.enabled) return;
|
|
257
|
-
const obj = Internal.getArrowHead(duration);
|
|
258
|
-
obj.position.set(pt1.x, pt1.y, pt1.z);
|
|
259
|
-
obj.quaternion.setFromUnitVectors(this._up.set(0, 1, 0), _tmp.set(pt1.x, pt1.y, pt1.z).sub(_tmp2.set(pt0.x, pt0.y, pt0.z)).normalize());
|
|
260
|
-
const dist = _tmp.set(pt1.x, pt1.y, pt1.z).sub(_tmp2.set(pt0.x, pt0.y, pt0.z)).length();
|
|
261
|
-
const scale = dist * 0.1;
|
|
262
|
-
obj.scale.set(scale, scale, scale);
|
|
263
|
-
obj.material["color"].set(color);
|
|
264
|
-
obj.material["depthTest"] = depthTest;
|
|
265
|
-
obj.material["wireframe"] = wireframe;
|
|
266
|
-
this.DrawLine(pt0, pt1, color, duration, depthTest);
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Render a wireframe mesh in the scene. The mesh will be removed after the given duration (if duration is 0 it will be rendered for one frame).
|
|
271
|
-
* If a mesh object is provided then the mesh's matrixWorld and geometry will be used. Otherwise, the provided matrix and geometry will be used.
|
|
272
|
-
* @param options the options for the wire mesh
|
|
273
|
-
* @param options.duration the duration in seconds the mesh will be rendered. If 0 it will be rendered for one frame
|
|
274
|
-
* @param options.color the color of the wire mesh
|
|
275
|
-
* @param options.depthTest if true the wire mesh will be rendered with depth test
|
|
276
|
-
* @param options.mesh the mesh object to render (if it is provided the matrix and geometry will be used)
|
|
277
|
-
* @param options.matrix the matrix of the mesh to render
|
|
278
|
-
* @param options.geometry the geometry of the mesh to render
|
|
279
|
-
* @example
|
|
280
|
-
* ```typescript
|
|
281
|
-
* Gizmos.DrawWireMesh({ duration: 1, color: 0xff0000, mesh: myMesh });
|
|
282
|
-
* ```
|
|
283
|
-
*/
|
|
284
|
-
static DrawWireMesh(options: { duration?: number, color?: ColorRepresentation, depthTest?: boolean } & ({ mesh: Mesh } | { matrix: Matrix4, geometry: BufferGeometry })) {
|
|
285
|
-
const mesh = Internal.getMesh(options.duration ?? 0);
|
|
286
|
-
if ("mesh" in options) {
|
|
287
|
-
mesh.geometry = options.mesh.geometry;
|
|
288
|
-
mesh.matrix.copy(options.mesh.matrixWorld);
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
mesh.geometry = options.geometry;
|
|
292
|
-
mesh.matrix.copy(options.matrix);
|
|
293
|
-
}
|
|
294
|
-
mesh.matrixAutoUpdate = false;
|
|
295
|
-
mesh.matrixWorldAutoUpdate = false;
|
|
296
|
-
mesh.material["color"].set(options.color ?? defaultColor);
|
|
297
|
-
mesh.material["depthTest"] = options.depthTest ?? true;
|
|
298
|
-
mesh.material["wireframe"] = true;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
const box: BoxGeometry = new BoxGeometry(1, 1, 1);
|
|
303
|
-
export function CreateWireCube(col: ColorRepresentation | null = null): LineSegments {
|
|
304
|
-
const color = new Color(col ?? 0xdddddd);
|
|
305
|
-
// const material = new MeshBasicMaterial();
|
|
306
|
-
// material.color = new Color(col ?? 0xdddddd);
|
|
307
|
-
// material.wireframe = true;
|
|
308
|
-
// const box = new Mesh(box, material);
|
|
309
|
-
// box.name = "BOX_GIZMO";
|
|
310
|
-
const edges = new EdgesGeometry(box);
|
|
311
|
-
const line = new LineSegments(edges, new LineBasicMaterial({ color: color }));
|
|
312
|
-
return line;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
const $cacheSymbol = Symbol("GizmoCache");
|
|
318
|
-
class Internal {
|
|
319
|
-
// private static createdLines: number = 0;
|
|
320
|
-
|
|
321
|
-
private static readonly familyName = "needle-gizmos";
|
|
322
|
-
private static ensureFont() {
|
|
323
|
-
let fontFamily = ThreeMeshUI.FontLibrary.getFontFamily(this.familyName);
|
|
324
|
-
|
|
325
|
-
if (!fontFamily) {
|
|
326
|
-
fontFamily = ThreeMeshUI.FontLibrary.addFontFamily(this.familyName);
|
|
327
|
-
const variant = fontFamily.addVariant("normal", "normal", "https://uploads.needle.tools/include/font-msdf.json", "https://uploads.needle.tools/include/font.png") as any as ThreeMeshUI.FontVariant;
|
|
328
|
-
/** @ts-ignore */
|
|
329
|
-
variant?.addEventListener('ready', () => {
|
|
330
|
-
ThreeMeshUI.update();
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
static getTextLabel(duration: number, text: string, size: number, color: ColorRepresentation, backgroundColor?: ColorRepresentation | ColorWithAlpha): Text & LabelHandle {
|
|
336
|
-
this.ensureFont();
|
|
337
|
-
let element = this.textLabelCache.pop();
|
|
338
|
-
|
|
339
|
-
let opacity = 1;
|
|
340
|
-
if (backgroundColor && typeof backgroundColor === "string" && backgroundColor?.length >= 8 && backgroundColor.startsWith("#")) {
|
|
341
|
-
opacity = parseInt(backgroundColor.substring(7), 16) / 255;
|
|
342
|
-
backgroundColor = backgroundColor.substring(0, 7);
|
|
343
|
-
if (debug)
|
|
344
|
-
console.log(backgroundColor, opacity);
|
|
345
|
-
}
|
|
346
|
-
else if (typeof backgroundColor === "object" && backgroundColor["a"] !== undefined) {
|
|
347
|
-
opacity = backgroundColor["a"]
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
const props: Options = {
|
|
351
|
-
boxSizing: 'border-box',
|
|
352
|
-
fontFamily: this.familyName,
|
|
353
|
-
width: "auto",
|
|
354
|
-
fontSize: size,
|
|
355
|
-
color: color,
|
|
356
|
-
lineHeight: 1,
|
|
357
|
-
backgroundColor: backgroundColor ?? undefined,
|
|
358
|
-
backgroundOpacity: opacity,
|
|
359
|
-
textContent: text,
|
|
360
|
-
borderRadius: .5 * size,
|
|
361
|
-
padding: .8 * size,
|
|
362
|
-
whiteSpace: 'pre',
|
|
363
|
-
offset: 0.05 * size,
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
if (!element) {
|
|
367
|
-
element = new Text(props);
|
|
368
|
-
const global = this;
|
|
369
|
-
const labelHandle = element as LabelHandle & Text;
|
|
370
|
-
labelHandle.setText = function (str: string) {
|
|
371
|
-
this.set({ textContent: str });
|
|
372
|
-
global.tmuiNeedsUpdate = true;
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
376
|
-
element.set(props);
|
|
377
|
-
// const handle = element as any as LabelHandle;
|
|
378
|
-
// handle.setText(text);
|
|
379
|
-
}
|
|
380
|
-
this.tmuiNeedsUpdate = true;
|
|
381
|
-
this.registerTimedObject(Context.Current, element as any, duration, this.textLabelCache as any);
|
|
382
|
-
return element as Text & LabelHandle;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
static getBox(duration: number): Mesh {
|
|
386
|
-
let box = this.boxesCache.pop();
|
|
387
|
-
if (!box) {
|
|
388
|
-
const geo: BoxGeometry = new BoxGeometry(1, 1, 1);
|
|
389
|
-
box = new Mesh(geo);
|
|
390
|
-
}
|
|
391
|
-
this.registerTimedObject(Context.Current, box, duration, this.boxesCache);
|
|
392
|
-
return box;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
static getLine(duration: number): Line {
|
|
396
|
-
let line = this.linesCache.pop();
|
|
397
|
-
if (!line) {
|
|
398
|
-
line = new Line();
|
|
399
|
-
let positions = line.geometry.getAttribute("position");
|
|
400
|
-
if (!positions) {
|
|
401
|
-
positions = new BufferAttribute(new Float32Array(2 * 3), 3);
|
|
402
|
-
line.geometry.setAttribute("position", positions);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
line.frustumCulled = false;
|
|
406
|
-
this.registerTimedObject(Context.Current, line, duration, this.linesCache);
|
|
407
|
-
return line;
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
static getCircle(duration: number): Line {
|
|
411
|
-
let circle = this.circlesCache.pop();
|
|
412
|
-
if (!circle) {
|
|
413
|
-
circle = new Line();
|
|
414
|
-
let positions = circle.geometry.getAttribute("position");
|
|
415
|
-
if (!positions) {
|
|
416
|
-
positions = new BufferAttribute(new Float32Array(circleSegments * 3), 3);
|
|
417
|
-
circle.geometry.setAttribute("position", positions);
|
|
418
|
-
|
|
419
|
-
// calculate directional vectors
|
|
420
|
-
const calcVec1 = getTempVector(0, 1, 0);
|
|
421
|
-
const up = getTempVector(0, 0, 1);
|
|
422
|
-
const calcVec2 = getTempVector(up);
|
|
423
|
-
calcVec2.cross(calcVec1).normalize();
|
|
424
|
-
const right = getTempVector(calcVec2);
|
|
425
|
-
const angleStep = Math.PI * 2 / (circleSegments - 1); // offset the period to close the circle
|
|
426
|
-
|
|
427
|
-
// + closing
|
|
428
|
-
for (let i = 0; i < circleSegments + 1; i++) {
|
|
429
|
-
const angle = angleStep * i;
|
|
430
|
-
|
|
431
|
-
calcVec1.copy(right).multiplyScalar(Math.cos(angle) * 1);
|
|
432
|
-
calcVec2.copy(up).multiplyScalar(Math.sin(angle) * 1);
|
|
433
|
-
const pos = calcVec1.add(calcVec2);
|
|
434
|
-
positions.setXYZ(i, pos.x, pos.y, pos.z);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
circle.frustumCulled = false;
|
|
439
|
-
this.registerTimedObject(Context.Current, circle, duration, this.circlesCache);
|
|
440
|
-
return circle;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
static getSphere(radius: number, duration: number, wireframe: boolean): Mesh {
|
|
444
|
-
let sphere = this.spheresCache.pop();
|
|
445
|
-
if (!sphere) {
|
|
446
|
-
sphere = new Mesh(new SphereGeometry(1, 8, 8));
|
|
447
|
-
}
|
|
448
|
-
sphere.scale.set(radius, radius, radius);
|
|
449
|
-
sphere.material["wireframe"] = wireframe;
|
|
450
|
-
this.registerTimedObject(Context.Current, sphere, duration, this.spheresCache);
|
|
451
|
-
return sphere;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
static getArrowHead(duration: number): Mesh {
|
|
455
|
-
let arrowHead = this.arrowHeadsCache.pop();
|
|
456
|
-
if (!arrowHead) {
|
|
457
|
-
arrowHead = new Mesh(new CylinderGeometry(0, .5, 1, 8));
|
|
458
|
-
}
|
|
459
|
-
this.registerTimedObject(Context.Current, arrowHead, duration, this.arrowHeadsCache);
|
|
460
|
-
return arrowHead;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
static getMesh(duration: number): Mesh {
|
|
464
|
-
let mesh = this.mesh.pop();
|
|
465
|
-
if (!mesh) {
|
|
466
|
-
mesh = new Mesh();
|
|
467
|
-
mesh.material = new MeshBasicMaterial();
|
|
468
|
-
}
|
|
469
|
-
this.registerTimedObject(Context.Current, mesh, duration, this.mesh);
|
|
470
|
-
return mesh;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
private static linesCache: Array<Line> = [];
|
|
474
|
-
private static circlesCache: Array<Line> = [];
|
|
475
|
-
private static spheresCache: Mesh[] = [];
|
|
476
|
-
private static boxesCache: Mesh[] = [];
|
|
477
|
-
private static arrowHeadsCache: Mesh[] = [];
|
|
478
|
-
private static mesh: Mesh[] = [];
|
|
479
|
-
private static textLabelCache: Array<Text> = [];
|
|
480
|
-
|
|
481
|
-
private static registerTimedObject(context: Context, object: Object3D, duration: number, cache: Array<Object3D>) {
|
|
482
|
-
if (!context) {
|
|
483
|
-
console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");
|
|
484
|
-
return;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
const beforeRender = this.contextBeforeRenderCallbacks.get(context);
|
|
488
|
-
const postRender = this.contextPostRenderCallbacks.get(context);
|
|
489
|
-
|
|
490
|
-
if (!beforeRender) {
|
|
491
|
-
const cb = () => { this.onBeforeRender(context, this.timedObjectsBuffer) };
|
|
492
|
-
this.contextBeforeRenderCallbacks.set(context, cb);
|
|
493
|
-
context.pre_render_callbacks.push(cb);
|
|
494
|
-
}
|
|
495
|
-
// make sure gizmo pre render is the last one being called
|
|
496
|
-
else if (context.pre_render_callbacks[context.pre_render_callbacks.length - 1] !== beforeRender) {
|
|
497
|
-
const index = context.pre_render_callbacks.indexOf(beforeRender);
|
|
498
|
-
if (index >= 0) {
|
|
499
|
-
context.pre_render_callbacks.splice(index, 1);
|
|
500
|
-
}
|
|
501
|
-
context.pre_render_callbacks.push(beforeRender);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
if (!postRender) {
|
|
505
|
-
const cb = () => { this.onPostRender(context, this.timedObjectsBuffer, this.timesBuffer) };
|
|
506
|
-
this.contextPostRenderCallbacks.set(context, cb);
|
|
507
|
-
context.post_render_callbacks.push(cb);
|
|
508
|
-
}
|
|
509
|
-
// make sure gizmo post render is the last one being called
|
|
510
|
-
else if (context.post_render_callbacks[context.post_render_callbacks.length - 1] !== postRender) {
|
|
511
|
-
const index = context.post_render_callbacks.indexOf(postRender);
|
|
512
|
-
if (index >= 0) {
|
|
513
|
-
context.post_render_callbacks.splice(index, 1);
|
|
514
|
-
}
|
|
515
|
-
context.post_render_callbacks.push(postRender);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
object.traverse(obj => {
|
|
519
|
-
obj.layers.disableAll();
|
|
520
|
-
obj.layers.enable(2);
|
|
521
|
-
});
|
|
522
|
-
|
|
523
|
-
object.renderOrder = 999999;
|
|
524
|
-
object[$cacheSymbol] = cache;
|
|
525
|
-
object.castShadow = false;
|
|
526
|
-
object.receiveShadow = false;
|
|
527
|
-
object["isGizmo"] = true;
|
|
528
|
-
this.timedObjectsBuffer.push(object);
|
|
529
|
-
|
|
530
|
-
this.timesBuffer.push(Context.Current.time.realtimeSinceStartup + duration);
|
|
531
|
-
context.scene.add(object);
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
public static readonly timedObjectsBuffer = new Array<Object3D>();
|
|
536
|
-
private static readonly timesBuffer = new Array<number>();
|
|
537
|
-
private static readonly contextPostRenderCallbacks = new Map<Context, () => void>();
|
|
538
|
-
private static readonly contextBeforeRenderCallbacks = new Map<Context, () => void>();
|
|
539
|
-
private static tmuiNeedsUpdate = false;
|
|
540
|
-
|
|
541
|
-
private static onBeforeRender(ctx: Context, objects: Array<Object3D>) {
|
|
542
|
-
// const cameraWorldPosition = getWorldPosition(ctx.mainCamera!, _tmp);
|
|
543
|
-
if (this.tmuiNeedsUpdate) {
|
|
544
|
-
this.tmuiNeedsUpdate = false;
|
|
545
|
-
ThreeMeshUI.update();
|
|
546
|
-
}
|
|
547
|
-
for (let i = 0; i < objects.length; i++) {
|
|
548
|
-
const obj = objects[i];
|
|
549
|
-
if (ctx.mainCamera && obj instanceof ThreeMeshUI.MeshUIBaseElement) {
|
|
550
|
-
if (isDestroyed(obj as any)) {
|
|
551
|
-
continue;
|
|
552
|
-
}
|
|
553
|
-
const isInXR = ctx.isInVR;
|
|
554
|
-
const keepUp = false;
|
|
555
|
-
const copyRotation = !isInXR;
|
|
556
|
-
lookAtObject(obj as any, ctx.mainCamera, keepUp, copyRotation);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
private static onPostRender(ctx: Context, objects: Array<Object3D>, times: Array<number>) {
|
|
562
|
-
const time = ctx.time.realtimeSinceStartup;
|
|
563
|
-
for (let i = objects.length - 1; i >= 0; i--) {
|
|
564
|
-
const obj = objects[i];
|
|
565
|
-
// floating point comparison, so we subtract a small epsilon
|
|
566
|
-
if (time >= times[i] - 0.000001) {
|
|
567
|
-
objects.splice(i, 1);
|
|
568
|
-
times.splice(i, 1);
|
|
569
|
-
obj.removeFromParent();
|
|
570
|
-
if (isDestroyed(obj) != true) {
|
|
571
|
-
const cache = obj[$cacheSymbol];
|
|
572
|
-
cache.push(obj);
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
|
|
1
|
+
import { AxesHelper, Box3, BoxGeometry, BufferAttribute, BufferGeometry, Color, type ColorRepresentation, CylinderGeometry, EdgesGeometry, Line, LineBasicMaterial, LineSegments, Matrix4, Mesh, MeshBasicMaterial, Object3D, Quaternion, SphereGeometry, Vector3 } from 'three';
|
|
2
|
+
import ThreeMeshUI, { Inline, Text } from "three-mesh-ui"
|
|
3
|
+
import { type Options } from 'three-mesh-ui/build/types/core/elements/MeshUIBaseElement.js';
|
|
4
|
+
|
|
5
|
+
import { isDestroyed } from './engine_gameobject.js';
|
|
6
|
+
import { Context, FrameEvent } from './engine_setup.js';
|
|
7
|
+
import { getTempVector, getWorldPosition, lookAtObject, setWorldPositionXYZ } from './engine_three_utils.js';
|
|
8
|
+
import type { Vec3, Vec4 } from './engine_types.js';
|
|
9
|
+
import { getParam } from './engine_utils.js';
|
|
10
|
+
import { NeedleXRSession } from './engine_xr.js';
|
|
11
|
+
|
|
12
|
+
const _tmp = new Vector3();
|
|
13
|
+
const _tmp2 = new Vector3();
|
|
14
|
+
const _quat = new Quaternion();
|
|
15
|
+
|
|
16
|
+
const debug = getParam("debuggizmos");
|
|
17
|
+
const defaultColor: ColorRepresentation = 0x888888;
|
|
18
|
+
|
|
19
|
+
const circleSegments: number = 32;
|
|
20
|
+
|
|
21
|
+
export type LabelHandle = {
|
|
22
|
+
setText(str: string);
|
|
23
|
+
}
|
|
24
|
+
declare type ColorWithAlpha = Color & { a: number };
|
|
25
|
+
|
|
26
|
+
/** Gizmos are temporary objects that are drawn in the scene for debugging or visualization purposes
|
|
27
|
+
* They are automatically removed after a given duration and cached internally to reduce overhead.
|
|
28
|
+
* Use the static methods of this class to draw gizmos in the scene.
|
|
29
|
+
*/
|
|
30
|
+
export class Gizmos {
|
|
31
|
+
|
|
32
|
+
private constructor() { }
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Allow creating gizmos
|
|
36
|
+
* If disabled then no gizmos will be added to the scene anymore
|
|
37
|
+
*/
|
|
38
|
+
static enabled = true;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Returns true if a given object is a gizmo
|
|
42
|
+
*/
|
|
43
|
+
static isGizmo(obj: Object3D) {
|
|
44
|
+
return obj[$cacheSymbol] !== undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Set visibility of all currently rendered gizmos */
|
|
48
|
+
static setVisible(visible: boolean) {
|
|
49
|
+
for (const obj of Internal.timedObjectsBuffer) {
|
|
50
|
+
obj.visible = visible;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Draw a label in the scene or attached to an object (if a parent is provided)
|
|
56
|
+
* @param position the position of the label in world space
|
|
57
|
+
* @param text the text of the label
|
|
58
|
+
* @param size the size of the label in world space
|
|
59
|
+
* @param duration the duration in seconds the label will be rendered. If 0 it will be rendered for one frame
|
|
60
|
+
* @param color the color of the label
|
|
61
|
+
* @param backgroundColor the background color of the label
|
|
62
|
+
* @param parent the parent object to attach the label to. If no parent is provided the label will be attached to the scene
|
|
63
|
+
* @returns a handle to the label that can be used to update the text
|
|
64
|
+
*/
|
|
65
|
+
static DrawLabel(position: Vec3, text: string, size: number = .05, duration: number = 0, color?: ColorRepresentation, backgroundColor?: ColorRepresentation | ColorWithAlpha, parent?: Object3D,) {
|
|
66
|
+
if (!Gizmos.enabled) return null;
|
|
67
|
+
if (!color) color = defaultColor;
|
|
68
|
+
const rigScale = NeedleXRSession.active?.rigScale ?? 1;
|
|
69
|
+
const element = Internal.getTextLabel(duration, text, size * rigScale, color, backgroundColor);
|
|
70
|
+
if (parent instanceof Object3D) parent.add(element as any);
|
|
71
|
+
element.position.x = position.x;
|
|
72
|
+
element.position.y = position.y;
|
|
73
|
+
element.position.z = position.z;
|
|
74
|
+
return element as LabelHandle;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Draw a ray gizmo in the scene
|
|
79
|
+
* @param origin the origin of the ray in world space
|
|
80
|
+
* @param dir the direction of the ray in world space
|
|
81
|
+
* @param color the color of the ray
|
|
82
|
+
* @param duration the duration in seconds the ray will be rendered. If 0 it will be rendered for one frame
|
|
83
|
+
* @param depthTest if true the ray will be rendered with depth test
|
|
84
|
+
*/
|
|
85
|
+
static DrawRay(origin: Vec3, dir: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
86
|
+
if (!Gizmos.enabled) return;
|
|
87
|
+
const obj = Internal.getLine(duration);
|
|
88
|
+
const positions = obj.geometry.getAttribute("position");
|
|
89
|
+
positions.setXYZ(0, origin.x, origin.y, origin.z);
|
|
90
|
+
_tmp.set(dir.x, dir.y, dir.z).multiplyScalar(999999999);
|
|
91
|
+
positions.setXYZ(1, origin.x + _tmp.x, origin.y + _tmp.y, origin.z + _tmp.z);
|
|
92
|
+
positions.needsUpdate = true;
|
|
93
|
+
obj.material["color"].set(color);
|
|
94
|
+
obj.material["depthTest"] = depthTest;
|
|
95
|
+
obj.material["depthWrite"] = false;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Draw a line gizmo in the scene
|
|
100
|
+
* @param pt0 the start point of the line in world space
|
|
101
|
+
* @param pt1 the end point of the line in world space
|
|
102
|
+
* @param color the color of the line
|
|
103
|
+
* @param duration the duration in seconds the line will be rendered. If 0 it will be rendered for one frame
|
|
104
|
+
* @param depthTest if true the line will be rendered with depth test
|
|
105
|
+
* @param lengthFactor the length of the line. Default is 1
|
|
106
|
+
*/
|
|
107
|
+
static DrawDirection(pt: Vec3, direction: Vec3 | Vec4, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true, lengthFactor: number = 1) {
|
|
108
|
+
if (!Gizmos.enabled) return;
|
|
109
|
+
const obj = Internal.getLine(duration);
|
|
110
|
+
const positions = obj.geometry.getAttribute("position");
|
|
111
|
+
positions.setXYZ(0, pt.x, pt.y, pt.z);
|
|
112
|
+
if (direction["w"] !== undefined) {
|
|
113
|
+
_tmp.set(0, 0, -lengthFactor);
|
|
114
|
+
_quat.set(direction["x"], direction["y"], direction["z"], direction["w"]);
|
|
115
|
+
_tmp.applyQuaternion(_quat);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
_tmp.set(direction.x, direction.y, direction.z);
|
|
119
|
+
_tmp.multiplyScalar(lengthFactor);
|
|
120
|
+
}
|
|
121
|
+
positions.setXYZ(1, pt.x + _tmp.x, pt.y + _tmp.y, pt.z + _tmp.z);
|
|
122
|
+
positions.needsUpdate = true;
|
|
123
|
+
obj.material["color"].set(color);
|
|
124
|
+
obj.material["depthTest"] = depthTest;
|
|
125
|
+
obj.material["depthWrite"] = false;
|
|
126
|
+
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Draw a line gizmo in the scene
|
|
131
|
+
* @param pt0 the start point of the line in world space
|
|
132
|
+
* @param pt1 the end point of the line in world space
|
|
133
|
+
* @param color the color of the line
|
|
134
|
+
* @param duration the duration in seconds the line will be rendered. If 0 it will be rendered for one frame
|
|
135
|
+
* @param depthTest if true the line will be rendered with depth test
|
|
136
|
+
*/
|
|
137
|
+
static DrawLine(pt0: Vec3, pt1: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
138
|
+
if (!Gizmos.enabled) return;
|
|
139
|
+
const obj = Internal.getLine(duration);
|
|
140
|
+
const positions = obj.geometry.getAttribute("position");
|
|
141
|
+
positions.setXYZ(0, pt0.x, pt0.y, pt0.z);
|
|
142
|
+
positions.setXYZ(1, pt1.x, pt1.y, pt1.z);
|
|
143
|
+
positions.needsUpdate = true;
|
|
144
|
+
obj.material["color"].set(color);
|
|
145
|
+
obj.material["depthTest"] = depthTest;
|
|
146
|
+
obj.material["depthWrite"] = false;
|
|
147
|
+
obj.material["fog"] = false;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Draw a 2D circle gizmo in the scene
|
|
152
|
+
* @param pt0 the center of the circle in world space
|
|
153
|
+
* @param normal the normal of the circle in world space
|
|
154
|
+
* @param radius the radius of the circle in world space
|
|
155
|
+
* @param color the color of the circle
|
|
156
|
+
* @param duration the duration in seconds the circle will be rendered. If 0 it will be rendered for one frame
|
|
157
|
+
* @param depthTest if true the circle will be rendered with depth test
|
|
158
|
+
*/
|
|
159
|
+
static DrawCircle(pt0: Vec3, normal: Vec3, radius: number, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
160
|
+
if (!Gizmos.enabled) return;
|
|
161
|
+
const obj = Internal.getCircle(duration);
|
|
162
|
+
obj.position.set(pt0.x, pt0.y, pt0.z);
|
|
163
|
+
obj.scale.set(radius, radius, radius);
|
|
164
|
+
obj.quaternion.setFromUnitVectors(this._up, _tmp.set(normal.x, normal.y, normal.z).normalize());
|
|
165
|
+
obj.material["color"].set(color);
|
|
166
|
+
obj.material["depthTest"] = depthTest;
|
|
167
|
+
obj.material["depthWrite"] = false;
|
|
168
|
+
obj.material["fog"] = false;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Draw a 3D wiremesh sphere gizmo in the scene
|
|
173
|
+
* @param center the center of the sphere in world space
|
|
174
|
+
* @param radius the radius of the sphere in world space
|
|
175
|
+
* @param color the color of the sphere
|
|
176
|
+
* @param duration the duration in seconds the sphere will be rendered. If 0 it will be rendered for one frame
|
|
177
|
+
* @param depthTest if true the sphere will be rendered with depth test
|
|
178
|
+
*/
|
|
179
|
+
static DrawWireSphere(center: Vec3, radius: number, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
180
|
+
if (!Gizmos.enabled) return;
|
|
181
|
+
const obj = Internal.getSphere(radius, duration, true);
|
|
182
|
+
setWorldPositionXYZ(obj, center.x, center.y, center.z);
|
|
183
|
+
obj.material["color"].set(color);
|
|
184
|
+
obj.material["depthTest"] = depthTest;
|
|
185
|
+
obj.material["depthWrite"] = false;
|
|
186
|
+
obj.material["fog"] = false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Draw a 3D sphere gizmo in the scene
|
|
191
|
+
* @param center the center of the sphere in world space
|
|
192
|
+
* @param radius the radius of the sphere in world space
|
|
193
|
+
* @param color the color of the sphere
|
|
194
|
+
* @param duration the duration in seconds the sphere will be rendered. If 0 it will be rendered for one frame
|
|
195
|
+
* @param depthTest if true the sphere will be rendered with depth test
|
|
196
|
+
*/
|
|
197
|
+
static DrawSphere(center: Vec3, radius: number, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
198
|
+
if (!Gizmos.enabled) return;
|
|
199
|
+
const obj = Internal.getSphere(radius, duration, false);
|
|
200
|
+
setWorldPositionXYZ(obj, center.x, center.y, center.z);
|
|
201
|
+
obj.material["color"].set(color);
|
|
202
|
+
obj.material["depthTest"] = depthTest;
|
|
203
|
+
obj.material["depthWrite"] = false;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Draw a 3D wiremesh box gizmo in the scene
|
|
208
|
+
* @param center the center of the box in world space
|
|
209
|
+
* @param size the size of the box in world space
|
|
210
|
+
* @param color the color of the box
|
|
211
|
+
* @param duration the duration in seconds the box will be rendered. If 0 it will be rendered for one frame
|
|
212
|
+
* @param depthTest if true the box will be rendered with depth test
|
|
213
|
+
*/
|
|
214
|
+
static DrawWireBox(center: Vec3, size: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
215
|
+
if (!Gizmos.enabled) return;
|
|
216
|
+
const obj = Internal.getBox(duration);
|
|
217
|
+
obj.position.set(center.x, center.y, center.z);
|
|
218
|
+
obj.scale.set(size.x, size.y, size.z);
|
|
219
|
+
obj.material["color"].set(color);
|
|
220
|
+
obj.material["depthTest"] = depthTest;
|
|
221
|
+
obj.material["wireframe"] = true;
|
|
222
|
+
obj.material["depthWrite"] = false;
|
|
223
|
+
obj.material["fog"] = false;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Draw a 3D wiremesh box gizmo in the scene
|
|
228
|
+
* @param box the box in world space
|
|
229
|
+
* @param color the color of the box
|
|
230
|
+
* @param duration the duration in seconds the box will be rendered. If 0 it will be rendered for one frame
|
|
231
|
+
* @param depthTest if true the box will be rendered with depth test
|
|
232
|
+
*/
|
|
233
|
+
static DrawWireBox3(box: Box3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true) {
|
|
234
|
+
if (!Gizmos.enabled) return;
|
|
235
|
+
const obj = Internal.getBox(duration);
|
|
236
|
+
obj.position.copy(box.getCenter(_tmp));
|
|
237
|
+
obj.scale.copy(box.getSize(_tmp));
|
|
238
|
+
obj.material["color"].set(color);
|
|
239
|
+
obj.material["depthTest"] = depthTest;
|
|
240
|
+
obj.material["wireframe"] = true;
|
|
241
|
+
obj.material["depthWrite"] = false;
|
|
242
|
+
obj.material["fog"] = false;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
private static _up = new Vector3(0, 1, 0);
|
|
246
|
+
/**
|
|
247
|
+
* Draw an arrow gizmo in the scene
|
|
248
|
+
* @param pt0 the start point of the arrow in world space
|
|
249
|
+
* @param pt1 the end point of the arrow in world space
|
|
250
|
+
* @param color the color of the arrow
|
|
251
|
+
* @param duration the duration in seconds the arrow will be rendered. If 0 it will be rendered for one frame
|
|
252
|
+
* @param depthTest if true the arrow will be rendered with depth test
|
|
253
|
+
* @param wireframe if true the arrow will be rendered as wireframe
|
|
254
|
+
*/
|
|
255
|
+
static DrawArrow(pt0: Vec3, pt1: Vec3, color: ColorRepresentation = defaultColor, duration: number = 0, depthTest: boolean = true, wireframe: boolean = false) {
|
|
256
|
+
if (!Gizmos.enabled) return;
|
|
257
|
+
const obj = Internal.getArrowHead(duration);
|
|
258
|
+
obj.position.set(pt1.x, pt1.y, pt1.z);
|
|
259
|
+
obj.quaternion.setFromUnitVectors(this._up.set(0, 1, 0), _tmp.set(pt1.x, pt1.y, pt1.z).sub(_tmp2.set(pt0.x, pt0.y, pt0.z)).normalize());
|
|
260
|
+
const dist = _tmp.set(pt1.x, pt1.y, pt1.z).sub(_tmp2.set(pt0.x, pt0.y, pt0.z)).length();
|
|
261
|
+
const scale = dist * 0.1;
|
|
262
|
+
obj.scale.set(scale, scale, scale);
|
|
263
|
+
obj.material["color"].set(color);
|
|
264
|
+
obj.material["depthTest"] = depthTest;
|
|
265
|
+
obj.material["wireframe"] = wireframe;
|
|
266
|
+
this.DrawLine(pt0, pt1, color, duration, depthTest);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Render a wireframe mesh in the scene. The mesh will be removed after the given duration (if duration is 0 it will be rendered for one frame).
|
|
271
|
+
* If a mesh object is provided then the mesh's matrixWorld and geometry will be used. Otherwise, the provided matrix and geometry will be used.
|
|
272
|
+
* @param options the options for the wire mesh
|
|
273
|
+
* @param options.duration the duration in seconds the mesh will be rendered. If 0 it will be rendered for one frame
|
|
274
|
+
* @param options.color the color of the wire mesh
|
|
275
|
+
* @param options.depthTest if true the wire mesh will be rendered with depth test
|
|
276
|
+
* @param options.mesh the mesh object to render (if it is provided the matrix and geometry will be used)
|
|
277
|
+
* @param options.matrix the matrix of the mesh to render
|
|
278
|
+
* @param options.geometry the geometry of the mesh to render
|
|
279
|
+
* @example
|
|
280
|
+
* ```typescript
|
|
281
|
+
* Gizmos.DrawWireMesh({ duration: 1, color: 0xff0000, mesh: myMesh });
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
static DrawWireMesh(options: { duration?: number, color?: ColorRepresentation, depthTest?: boolean } & ({ mesh: Mesh } | { matrix: Matrix4, geometry: BufferGeometry })) {
|
|
285
|
+
const mesh = Internal.getMesh(options.duration ?? 0);
|
|
286
|
+
if ("mesh" in options) {
|
|
287
|
+
mesh.geometry = options.mesh.geometry;
|
|
288
|
+
mesh.matrix.copy(options.mesh.matrixWorld);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
mesh.geometry = options.geometry;
|
|
292
|
+
mesh.matrix.copy(options.matrix);
|
|
293
|
+
}
|
|
294
|
+
mesh.matrixAutoUpdate = false;
|
|
295
|
+
mesh.matrixWorldAutoUpdate = false;
|
|
296
|
+
mesh.material["color"].set(options.color ?? defaultColor);
|
|
297
|
+
mesh.material["depthTest"] = options.depthTest ?? true;
|
|
298
|
+
mesh.material["wireframe"] = true;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const box: BoxGeometry = new BoxGeometry(1, 1, 1);
|
|
303
|
+
export function CreateWireCube(col: ColorRepresentation | null = null): LineSegments {
|
|
304
|
+
const color = new Color(col ?? 0xdddddd);
|
|
305
|
+
// const material = new MeshBasicMaterial();
|
|
306
|
+
// material.color = new Color(col ?? 0xdddddd);
|
|
307
|
+
// material.wireframe = true;
|
|
308
|
+
// const box = new Mesh(box, material);
|
|
309
|
+
// box.name = "BOX_GIZMO";
|
|
310
|
+
const edges = new EdgesGeometry(box);
|
|
311
|
+
const line = new LineSegments(edges, new LineBasicMaterial({ color: color }));
|
|
312
|
+
return line;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
const $cacheSymbol = Symbol("GizmoCache");
|
|
318
|
+
class Internal {
|
|
319
|
+
// private static createdLines: number = 0;
|
|
320
|
+
|
|
321
|
+
private static readonly familyName = "needle-gizmos";
|
|
322
|
+
private static ensureFont() {
|
|
323
|
+
let fontFamily = ThreeMeshUI.FontLibrary.getFontFamily(this.familyName);
|
|
324
|
+
|
|
325
|
+
if (!fontFamily) {
|
|
326
|
+
fontFamily = ThreeMeshUI.FontLibrary.addFontFamily(this.familyName);
|
|
327
|
+
const variant = fontFamily.addVariant("normal", "normal", "https://uploads.needle.tools/include/font-msdf.json", "https://uploads.needle.tools/include/font.png") as any as ThreeMeshUI.FontVariant;
|
|
328
|
+
/** @ts-ignore */
|
|
329
|
+
variant?.addEventListener('ready', () => {
|
|
330
|
+
ThreeMeshUI.update();
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
static getTextLabel(duration: number, text: string, size: number, color: ColorRepresentation, backgroundColor?: ColorRepresentation | ColorWithAlpha): Text & LabelHandle {
|
|
336
|
+
this.ensureFont();
|
|
337
|
+
let element = this.textLabelCache.pop();
|
|
338
|
+
|
|
339
|
+
let opacity = 1;
|
|
340
|
+
if (backgroundColor && typeof backgroundColor === "string" && backgroundColor?.length >= 8 && backgroundColor.startsWith("#")) {
|
|
341
|
+
opacity = parseInt(backgroundColor.substring(7), 16) / 255;
|
|
342
|
+
backgroundColor = backgroundColor.substring(0, 7);
|
|
343
|
+
if (debug)
|
|
344
|
+
console.log(backgroundColor, opacity);
|
|
345
|
+
}
|
|
346
|
+
else if (typeof backgroundColor === "object" && backgroundColor["a"] !== undefined) {
|
|
347
|
+
opacity = backgroundColor["a"]
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
const props: Options = {
|
|
351
|
+
boxSizing: 'border-box',
|
|
352
|
+
fontFamily: this.familyName,
|
|
353
|
+
width: "auto",
|
|
354
|
+
fontSize: size,
|
|
355
|
+
color: color,
|
|
356
|
+
lineHeight: 1,
|
|
357
|
+
backgroundColor: backgroundColor ?? undefined,
|
|
358
|
+
backgroundOpacity: opacity,
|
|
359
|
+
textContent: text,
|
|
360
|
+
borderRadius: .5 * size,
|
|
361
|
+
padding: .8 * size,
|
|
362
|
+
whiteSpace: 'pre',
|
|
363
|
+
offset: 0.05 * size,
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
if (!element) {
|
|
367
|
+
element = new Text(props);
|
|
368
|
+
const global = this;
|
|
369
|
+
const labelHandle = element as LabelHandle & Text;
|
|
370
|
+
labelHandle.setText = function (str: string) {
|
|
371
|
+
this.set({ textContent: str });
|
|
372
|
+
global.tmuiNeedsUpdate = true;
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
element.set(props);
|
|
377
|
+
// const handle = element as any as LabelHandle;
|
|
378
|
+
// handle.setText(text);
|
|
379
|
+
}
|
|
380
|
+
this.tmuiNeedsUpdate = true;
|
|
381
|
+
this.registerTimedObject(Context.Current, element as any, duration, this.textLabelCache as any);
|
|
382
|
+
return element as Text & LabelHandle;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
static getBox(duration: number): Mesh {
|
|
386
|
+
let box = this.boxesCache.pop();
|
|
387
|
+
if (!box) {
|
|
388
|
+
const geo: BoxGeometry = new BoxGeometry(1, 1, 1);
|
|
389
|
+
box = new Mesh(geo);
|
|
390
|
+
}
|
|
391
|
+
this.registerTimedObject(Context.Current, box, duration, this.boxesCache);
|
|
392
|
+
return box;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
static getLine(duration: number): Line {
|
|
396
|
+
let line = this.linesCache.pop();
|
|
397
|
+
if (!line) {
|
|
398
|
+
line = new Line();
|
|
399
|
+
let positions = line.geometry.getAttribute("position");
|
|
400
|
+
if (!positions) {
|
|
401
|
+
positions = new BufferAttribute(new Float32Array(2 * 3), 3);
|
|
402
|
+
line.geometry.setAttribute("position", positions);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
line.frustumCulled = false;
|
|
406
|
+
this.registerTimedObject(Context.Current, line, duration, this.linesCache);
|
|
407
|
+
return line;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
static getCircle(duration: number): Line {
|
|
411
|
+
let circle = this.circlesCache.pop();
|
|
412
|
+
if (!circle) {
|
|
413
|
+
circle = new Line();
|
|
414
|
+
let positions = circle.geometry.getAttribute("position");
|
|
415
|
+
if (!positions) {
|
|
416
|
+
positions = new BufferAttribute(new Float32Array(circleSegments * 3), 3);
|
|
417
|
+
circle.geometry.setAttribute("position", positions);
|
|
418
|
+
|
|
419
|
+
// calculate directional vectors
|
|
420
|
+
const calcVec1 = getTempVector(0, 1, 0);
|
|
421
|
+
const up = getTempVector(0, 0, 1);
|
|
422
|
+
const calcVec2 = getTempVector(up);
|
|
423
|
+
calcVec2.cross(calcVec1).normalize();
|
|
424
|
+
const right = getTempVector(calcVec2);
|
|
425
|
+
const angleStep = Math.PI * 2 / (circleSegments - 1); // offset the period to close the circle
|
|
426
|
+
|
|
427
|
+
// + closing
|
|
428
|
+
for (let i = 0; i < circleSegments + 1; i++) {
|
|
429
|
+
const angle = angleStep * i;
|
|
430
|
+
|
|
431
|
+
calcVec1.copy(right).multiplyScalar(Math.cos(angle) * 1);
|
|
432
|
+
calcVec2.copy(up).multiplyScalar(Math.sin(angle) * 1);
|
|
433
|
+
const pos = calcVec1.add(calcVec2);
|
|
434
|
+
positions.setXYZ(i, pos.x, pos.y, pos.z);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
circle.frustumCulled = false;
|
|
439
|
+
this.registerTimedObject(Context.Current, circle, duration, this.circlesCache);
|
|
440
|
+
return circle;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
static getSphere(radius: number, duration: number, wireframe: boolean): Mesh {
|
|
444
|
+
let sphere = this.spheresCache.pop();
|
|
445
|
+
if (!sphere) {
|
|
446
|
+
sphere = new Mesh(new SphereGeometry(1, 8, 8));
|
|
447
|
+
}
|
|
448
|
+
sphere.scale.set(radius, radius, radius);
|
|
449
|
+
sphere.material["wireframe"] = wireframe;
|
|
450
|
+
this.registerTimedObject(Context.Current, sphere, duration, this.spheresCache);
|
|
451
|
+
return sphere;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
static getArrowHead(duration: number): Mesh {
|
|
455
|
+
let arrowHead = this.arrowHeadsCache.pop();
|
|
456
|
+
if (!arrowHead) {
|
|
457
|
+
arrowHead = new Mesh(new CylinderGeometry(0, .5, 1, 8));
|
|
458
|
+
}
|
|
459
|
+
this.registerTimedObject(Context.Current, arrowHead, duration, this.arrowHeadsCache);
|
|
460
|
+
return arrowHead;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
static getMesh(duration: number): Mesh {
|
|
464
|
+
let mesh = this.mesh.pop();
|
|
465
|
+
if (!mesh) {
|
|
466
|
+
mesh = new Mesh();
|
|
467
|
+
mesh.material = new MeshBasicMaterial();
|
|
468
|
+
}
|
|
469
|
+
this.registerTimedObject(Context.Current, mesh, duration, this.mesh);
|
|
470
|
+
return mesh;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
private static linesCache: Array<Line> = [];
|
|
474
|
+
private static circlesCache: Array<Line> = [];
|
|
475
|
+
private static spheresCache: Mesh[] = [];
|
|
476
|
+
private static boxesCache: Mesh[] = [];
|
|
477
|
+
private static arrowHeadsCache: Mesh[] = [];
|
|
478
|
+
private static mesh: Mesh[] = [];
|
|
479
|
+
private static textLabelCache: Array<Text> = [];
|
|
480
|
+
|
|
481
|
+
private static registerTimedObject(context: Context, object: Object3D, duration: number, cache: Array<Object3D>) {
|
|
482
|
+
if (!context) {
|
|
483
|
+
console.error("No Needle Engine context available. Did you call a Gizmos function in global scope?");
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
const beforeRender = this.contextBeforeRenderCallbacks.get(context);
|
|
488
|
+
const postRender = this.contextPostRenderCallbacks.get(context);
|
|
489
|
+
|
|
490
|
+
if (!beforeRender) {
|
|
491
|
+
const cb = () => { this.onBeforeRender(context, this.timedObjectsBuffer) };
|
|
492
|
+
this.contextBeforeRenderCallbacks.set(context, cb);
|
|
493
|
+
context.pre_render_callbacks.push(cb);
|
|
494
|
+
}
|
|
495
|
+
// make sure gizmo pre render is the last one being called
|
|
496
|
+
else if (context.pre_render_callbacks[context.pre_render_callbacks.length - 1] !== beforeRender) {
|
|
497
|
+
const index = context.pre_render_callbacks.indexOf(beforeRender);
|
|
498
|
+
if (index >= 0) {
|
|
499
|
+
context.pre_render_callbacks.splice(index, 1);
|
|
500
|
+
}
|
|
501
|
+
context.pre_render_callbacks.push(beforeRender);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
if (!postRender) {
|
|
505
|
+
const cb = () => { this.onPostRender(context, this.timedObjectsBuffer, this.timesBuffer) };
|
|
506
|
+
this.contextPostRenderCallbacks.set(context, cb);
|
|
507
|
+
context.post_render_callbacks.push(cb);
|
|
508
|
+
}
|
|
509
|
+
// make sure gizmo post render is the last one being called
|
|
510
|
+
else if (context.post_render_callbacks[context.post_render_callbacks.length - 1] !== postRender) {
|
|
511
|
+
const index = context.post_render_callbacks.indexOf(postRender);
|
|
512
|
+
if (index >= 0) {
|
|
513
|
+
context.post_render_callbacks.splice(index, 1);
|
|
514
|
+
}
|
|
515
|
+
context.post_render_callbacks.push(postRender);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
object.traverse(obj => {
|
|
519
|
+
obj.layers.disableAll();
|
|
520
|
+
obj.layers.enable(2);
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
object.renderOrder = 999999;
|
|
524
|
+
object[$cacheSymbol] = cache;
|
|
525
|
+
object.castShadow = false;
|
|
526
|
+
object.receiveShadow = false;
|
|
527
|
+
object["isGizmo"] = true;
|
|
528
|
+
this.timedObjectsBuffer.push(object);
|
|
529
|
+
|
|
530
|
+
this.timesBuffer.push(Context.Current.time.realtimeSinceStartup + duration);
|
|
531
|
+
context.scene.add(object);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
public static readonly timedObjectsBuffer = new Array<Object3D>();
|
|
536
|
+
private static readonly timesBuffer = new Array<number>();
|
|
537
|
+
private static readonly contextPostRenderCallbacks = new Map<Context, () => void>();
|
|
538
|
+
private static readonly contextBeforeRenderCallbacks = new Map<Context, () => void>();
|
|
539
|
+
private static tmuiNeedsUpdate = false;
|
|
540
|
+
|
|
541
|
+
private static onBeforeRender(ctx: Context, objects: Array<Object3D>) {
|
|
542
|
+
// const cameraWorldPosition = getWorldPosition(ctx.mainCamera!, _tmp);
|
|
543
|
+
if (this.tmuiNeedsUpdate) {
|
|
544
|
+
this.tmuiNeedsUpdate = false;
|
|
545
|
+
ThreeMeshUI.update();
|
|
546
|
+
}
|
|
547
|
+
for (let i = 0; i < objects.length; i++) {
|
|
548
|
+
const obj = objects[i];
|
|
549
|
+
if (ctx.mainCamera && obj instanceof ThreeMeshUI.MeshUIBaseElement) {
|
|
550
|
+
if (isDestroyed(obj as any)) {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
const isInXR = ctx.isInVR;
|
|
554
|
+
const keepUp = false;
|
|
555
|
+
const copyRotation = !isInXR;
|
|
556
|
+
lookAtObject(obj as any, ctx.mainCamera, keepUp, copyRotation);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
private static onPostRender(ctx: Context, objects: Array<Object3D>, times: Array<number>) {
|
|
562
|
+
const time = ctx.time.realtimeSinceStartup;
|
|
563
|
+
for (let i = objects.length - 1; i >= 0; i--) {
|
|
564
|
+
const obj = objects[i];
|
|
565
|
+
// floating point comparison, so we subtract a small epsilon
|
|
566
|
+
if (time >= times[i] - 0.000001) {
|
|
567
|
+
objects.splice(i, 1);
|
|
568
|
+
times.splice(i, 1);
|
|
569
|
+
obj.removeFromParent();
|
|
570
|
+
if (isDestroyed(obj) != true) {
|
|
571
|
+
const cache = obj[$cacheSymbol];
|
|
572
|
+
cache.push(obj);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
578
|
}
|