@needle-tools/engine 4.7.1 → 4.7.2-alpha
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-Cdfpaq5W.js +25 -0
- package/dist/gltf-progressive-YjtQYFa9.js +1052 -0
- package/dist/gltf-progressive-yOP1mp5W.min.js +8 -0
- package/dist/gltf-progressive-zdhlW609.umd.cjs +8 -0
- package/dist/{needle-engine.bundle-CN9UC6Ju.min.js → needle-engine.bundle-BhDF-YSv.min.js} +65 -65
- package/dist/{needle-engine.bundle-B7M9iBIa.umd.cjs → needle-engine.bundle-D2myV4E4.umd.cjs} +61 -61
- package/dist/{needle-engine.bundle-BpCihhaP.js → needle-engine.bundle-gp00DTS4.js} +641 -641
- package/dist/needle-engine.d.ts +129 -130
- 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-CjW23fio.umd.cjs → postprocessing-8AQTeZsr.umd.cjs} +2 -2
- package/dist/{postprocessing-xYQWCHFu.min.js → postprocessing-BDScN9yu.min.js} +2 -2
- package/dist/{postprocessing-DYLNOL3W.js → postprocessing-BkxN_08g.js} +3 -3
- package/dist/{three-DuDKwKB8.min.js → three-Boa-jOq-.min.js} +33 -33
- package/dist/{three-DrqIzZTH.js → three-Bz6X1mrw.js} +4198 -4198
- package/dist/{three-B_hneGZr.umd.cjs → three-DMrv-4ar.umd.cjs} +4 -4
- package/dist/{three-examples-X3OadjXB.umd.cjs → three-examples-C7ryg8vN.umd.cjs} +3 -3
- package/dist/{three-examples-DaDLBuy6.min.js → three-examples-DuVhxqft.min.js} +14 -14
- package/dist/{three-examples-B50TT3Iu.js → three-examples-GggCDHv0.js} +5 -5
- package/dist/{three-mesh-ui-CxuWt7m-.js → three-mesh-ui-CLNOfsWn.js} +1 -1
- package/dist/{three-mesh-ui-B3p3gyUz.min.js → three-mesh-ui-CY6Izc7C.min.js} +1 -1
- package/dist/{three-mesh-ui-CQiIQIlA.umd.cjs → three-mesh-ui-CwlN0FUC.umd.cjs} +1 -1
- package/dist/{vendor-BmYIgaS1.js → vendor-BSD1RQIh.js} +3 -3
- package/dist/{vendor-Cavtu3CP.umd.cjs → vendor-DHr4aqIZ.umd.cjs} +3 -3
- package/dist/{vendor-BlSxe9JJ.min.js → vendor-zxXa3Dmr.min.js} +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_lods.js.map +1 -1
- 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/RendererInstancing.js.map +1 -1
- 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 +2 -2
- 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/dist/api.js +17 -0
- package/src/engine-schemes/dist/api.js.meta +7 -0
- package/src/engine-schemes/dist/schemes.js +25 -0
- package/src/engine-schemes/dist/schemes.js.meta +7 -0
- package/src/engine-schemes/dist/synced-camera-model.js +74 -0
- package/src/engine-schemes/dist/synced-camera-model.js.meta +7 -0
- package/src/engine-schemes/dist/synced-transform-model.js +73 -0
- package/src/engine-schemes/dist/synced-transform-model.js.meta +7 -0
- package/src/engine-schemes/dist/transform.js +46 -0
- package/src/engine-schemes/dist/transform.js.meta +7 -0
- package/src/engine-schemes/dist/vec2.js +32 -0
- package/src/engine-schemes/dist/vec2.js.meta +7 -0
- package/src/engine-schemes/dist/vec3.js +36 -0
- package/src/engine-schemes/dist/vec3.js.meta +7 -0
- package/src/engine-schemes/dist/vec4.js +40 -0
- package/src/engine-schemes/dist/vec4.js.meta +7 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js +110 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +7 -0
- 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-BaNp_Xtp.js +0 -25
- package/dist/gltf-progressive-60Qk5ebF.min.js +0 -8
- package/dist/gltf-progressive-DM5ZiecW.js +0 -1060
- package/dist/gltf-progressive-wxtaVmio.umd.cjs +0 -8
|
@@ -1,579 +1,579 @@
|
|
|
1
|
-
import { Color } from 'three';
|
|
2
|
-
import * as ThreeMeshUI from 'three-mesh-ui'
|
|
3
|
-
import type { DocumentedOptions as ThreeMeshUIEveryOptions } from "three-mesh-ui/build/types/core/elements/MeshUIBaseElement.js";
|
|
4
|
-
|
|
5
|
-
import { serializable } from '../../engine/engine_serialization_decorator.js';
|
|
6
|
-
import { getParam } from '../../engine/engine_utils.js';
|
|
7
|
-
import { Canvas } from './Canvas.js';
|
|
8
|
-
import { Graphic } from './Graphic.js';
|
|
9
|
-
import { type ICanvas, type ICanvasEventReceiver, type IHasAlphaFactor } from './Interfaces.js';
|
|
10
|
-
import { updateRenderSettings } from './Utils.js';
|
|
11
|
-
|
|
12
|
-
const debug = getParam("debugtext");
|
|
13
|
-
|
|
14
|
-
export enum TextAnchor {
|
|
15
|
-
UpperLeft = 0,
|
|
16
|
-
UpperCenter = 1,
|
|
17
|
-
UpperRight = 2,
|
|
18
|
-
MiddleLeft = 3,
|
|
19
|
-
MiddleCenter = 4,
|
|
20
|
-
MiddleRight = 5,
|
|
21
|
-
LowerLeft = 6,
|
|
22
|
-
LowerCenter = 7,
|
|
23
|
-
LowerRight = 8,
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export enum VerticalWrapMode {
|
|
27
|
-
Truncate = 0,
|
|
28
|
-
Overflow = 1,
|
|
29
|
-
}
|
|
30
|
-
enum HorizontalWrapMode {
|
|
31
|
-
Wrap = 0,
|
|
32
|
-
Overflow = 1,
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export enum FontStyle {
|
|
36
|
-
Normal = 0,
|
|
37
|
-
Bold = 1,
|
|
38
|
-
Italic = 2,
|
|
39
|
-
BoldAndItalic = 3,
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* @category User Interface
|
|
44
|
-
* @group Components
|
|
45
|
-
*/
|
|
46
|
-
export class Text extends Graphic implements IHasAlphaFactor, ICanvasEventReceiver {
|
|
47
|
-
|
|
48
|
-
@serializable()
|
|
49
|
-
alignment: TextAnchor = TextAnchor.UpperLeft;
|
|
50
|
-
@serializable()
|
|
51
|
-
verticalOverflow: VerticalWrapMode = VerticalWrapMode.Truncate;
|
|
52
|
-
@serializable()
|
|
53
|
-
horizontalOverflow: HorizontalWrapMode = HorizontalWrapMode.Wrap;
|
|
54
|
-
@serializable()
|
|
55
|
-
lineSpacing: number = 1;
|
|
56
|
-
@serializable()
|
|
57
|
-
supportRichText: boolean = false;
|
|
58
|
-
@serializable(URL)
|
|
59
|
-
font?: string;
|
|
60
|
-
@serializable()
|
|
61
|
-
fontStyle: FontStyle = FontStyle.Normal;
|
|
62
|
-
|
|
63
|
-
// private _alphaFactor : number = 1;
|
|
64
|
-
setAlphaFactor(factor: number): void {
|
|
65
|
-
super.setAlphaFactor(factor);
|
|
66
|
-
this.uiObject?.set({ fontOpacity: this.color.alpha * this.alphaFactor });
|
|
67
|
-
this.markDirty();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
@serializable()
|
|
71
|
-
get text(): string {
|
|
72
|
-
return this._text;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
set text(val: string) {
|
|
76
|
-
if (val !== this._text) {
|
|
77
|
-
this._text = val;
|
|
78
|
-
this.feedText(this.text, this.supportRichText);
|
|
79
|
-
this.markDirty();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private set_text(val: string) {
|
|
84
|
-
this.text = val;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
@serializable()
|
|
88
|
-
get fontSize(): number {
|
|
89
|
-
return this._fontSize;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
set fontSize(val: number) {
|
|
93
|
-
// Setting that kind of property in a parent, would cascade to each 'non-overrided' children.
|
|
94
|
-
this._fontSize = val;
|
|
95
|
-
this.uiObject?.set({ fontSize: val });
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
private sRGBTextColor: Color = new Color(1, 0, 1);
|
|
99
|
-
protected onColorChanged(): void {
|
|
100
|
-
this.sRGBTextColor.copy(this.color);
|
|
101
|
-
this.sRGBTextColor.convertLinearToSRGB();
|
|
102
|
-
this.uiObject?.set({ color: this.sRGBTextColor, fontOpacity: this.color.alpha });
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
onParentRectTransformChanged(): void {
|
|
106
|
-
super.onParentRectTransformChanged();
|
|
107
|
-
if (this.uiObject) {
|
|
108
|
-
this.updateOverflow();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// onBeforeRender(): void {
|
|
113
|
-
// // TODO TMUI @swingingtom this is so we don't have text clipping
|
|
114
|
-
// if (this.uiObject && (this.Canvas?.screenspace || this.context.isInVR)) {
|
|
115
|
-
// this.updateOverflow();
|
|
116
|
-
// }
|
|
117
|
-
// }
|
|
118
|
-
onBeforeCanvasRender(_canvas: ICanvas) {
|
|
119
|
-
// ensure the text clipping matrix is updated (this was a problem with multiple screenspace canvases due to canvas reparenting)
|
|
120
|
-
this.updateOverflow();
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
private updateOverflow() {
|
|
124
|
-
// HACK: force the text overflow to update
|
|
125
|
-
const overflow = (this.uiObject as any)?._overflow;
|
|
126
|
-
if (overflow) {
|
|
127
|
-
overflow._needsUpdate = true;
|
|
128
|
-
// the screenspace canvas does force an update, no need to mark dirty here
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
protected onCreate(_opts: any): void {
|
|
133
|
-
if (debug) console.log(this);
|
|
134
|
-
|
|
135
|
-
if (this.horizontalOverflow == HorizontalWrapMode.Overflow) {
|
|
136
|
-
// Only line characters in the textContent (\n,\r\t) would be able to multiline the text
|
|
137
|
-
_opts.whiteSpace = 'pre';
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (this.verticalOverflow == VerticalWrapMode.Truncate) {
|
|
141
|
-
this.context.renderer.localClippingEnabled = true;
|
|
142
|
-
_opts.overflow = 'hidden';
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// @marwie : this combination is currently KO. See sample "Overflow Overview"
|
|
147
|
-
if (this.horizontalOverflow == HorizontalWrapMode.Overflow && this.verticalOverflow == VerticalWrapMode.Truncate) {
|
|
148
|
-
// This could fix this combination, but would require anchors updates to replace element
|
|
149
|
-
// _opts.width = 'auto';
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
_opts.lineHeight = this.lineSpacing;
|
|
154
|
-
|
|
155
|
-
// @marwie : Should be fixed. Currently _opts are always fed with :
|
|
156
|
-
// backgroundOpacity : color.opacity
|
|
157
|
-
// backgroundColor : color
|
|
158
|
-
delete _opts.backgroundOpacity;
|
|
159
|
-
delete _opts.backgroundColor;
|
|
160
|
-
|
|
161
|
-
// helper to show bounds of text element
|
|
162
|
-
if (debug) {
|
|
163
|
-
_opts.backgroundColor = 0xff9900;
|
|
164
|
-
_opts.backgroundOpacity = 0.5;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const rt = this.rectTransform;
|
|
168
|
-
|
|
169
|
-
// Texts now support both options, block and inline, and inline has all default to inherit
|
|
170
|
-
_opts = { ..._opts, ...this.getTextOpts() };
|
|
171
|
-
|
|
172
|
-
this.getAlignment(_opts);
|
|
173
|
-
|
|
174
|
-
if (debug) {
|
|
175
|
-
_opts.backgroundColor = Math.random() * 0xffffff;
|
|
176
|
-
_opts.backgroundOpacity = 0.1;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
this.uiObject = rt.createNewText(_opts);
|
|
180
|
-
this.feedText(this.text, this.supportRichText);
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
onAfterAddedToScene() {
|
|
185
|
-
super.onAfterAddedToScene();
|
|
186
|
-
this.handleTextRenderOnTop();
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
private _text: string = "";
|
|
190
|
-
private _fontSize: number = 12;
|
|
191
|
-
|
|
192
|
-
private _textMeshUi: Array<ThreeMeshUI.Inline> | null = null;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
private getTextOpts(): object {
|
|
196
|
-
const fontSize = this.fontSize;
|
|
197
|
-
// if (this.canvas) {
|
|
198
|
-
// fontSize /= this.canvas?.scaleFactor;
|
|
199
|
-
// }
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const textOpts = {
|
|
203
|
-
color: this.color,
|
|
204
|
-
fontOpacity: this.color.alpha,
|
|
205
|
-
fontSize: fontSize,
|
|
206
|
-
fontKerning: "normal",
|
|
207
|
-
|
|
208
|
-
};
|
|
209
|
-
this.setFont(textOpts as ThreeMeshUIEveryOptions, this.fontStyle);
|
|
210
|
-
return textOpts;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
onEnable(): void {
|
|
215
|
-
super.onEnable();
|
|
216
|
-
this._didHandleTextRenderOnTop = false;
|
|
217
|
-
if (this.uiObject) {
|
|
218
|
-
// @ts-ignore
|
|
219
|
-
|
|
220
|
-
// @TODO : Evaluate the need of keeping it anonymous.
|
|
221
|
-
// From v7.x afterUpdate can be removed but requires a reference
|
|
222
|
-
this.uiObject.addAfterUpdate(() => {
|
|
223
|
-
// We need to update the shadow owner when the text updates
|
|
224
|
-
// because once the font has loaded we get new children (a new mesh)
|
|
225
|
-
// which is the text, it needs to be linked back to this component
|
|
226
|
-
// to be properly handled by the EventSystem
|
|
227
|
-
// since the EventSystem looks for shadow component owners to handle events
|
|
228
|
-
this.setShadowComponentOwner(this.uiObject);
|
|
229
|
-
this.markDirty();
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
setTimeout(() => this.markDirty(), 10);
|
|
234
|
-
this.canvas?.registerEventReceiver(this);
|
|
235
|
-
}
|
|
236
|
-
onDisable(): void {
|
|
237
|
-
super.onDisable();
|
|
238
|
-
this.canvas?.unregisterEventReceiver(this);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
private getAlignment(opts: ThreeMeshUIEveryOptions): ThreeMeshUIEveryOptions {
|
|
242
|
-
|
|
243
|
-
opts.flexDirection = "column";
|
|
244
|
-
|
|
245
|
-
switch (this.alignment) {
|
|
246
|
-
case TextAnchor.UpperLeft:
|
|
247
|
-
case TextAnchor.MiddleLeft:
|
|
248
|
-
case TextAnchor.LowerLeft:
|
|
249
|
-
opts.textAlign = "left";
|
|
250
|
-
break;
|
|
251
|
-
case TextAnchor.UpperCenter:
|
|
252
|
-
case TextAnchor.MiddleCenter:
|
|
253
|
-
case TextAnchor.LowerCenter:
|
|
254
|
-
opts.textAlign = "center";
|
|
255
|
-
|
|
256
|
-
break;
|
|
257
|
-
case TextAnchor.UpperRight:
|
|
258
|
-
case TextAnchor.MiddleRight:
|
|
259
|
-
case TextAnchor.LowerRight:
|
|
260
|
-
opts.textAlign = "right";
|
|
261
|
-
break;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
switch (this.alignment) {
|
|
266
|
-
default:
|
|
267
|
-
case TextAnchor.UpperLeft:
|
|
268
|
-
case TextAnchor.UpperCenter:
|
|
269
|
-
case TextAnchor.UpperRight:
|
|
270
|
-
opts.alignItems = "start";
|
|
271
|
-
break;
|
|
272
|
-
case TextAnchor.MiddleLeft:
|
|
273
|
-
case TextAnchor.MiddleCenter:
|
|
274
|
-
case TextAnchor.MiddleRight:
|
|
275
|
-
opts.alignItems = "center";
|
|
276
|
-
break;
|
|
277
|
-
case TextAnchor.LowerLeft:
|
|
278
|
-
case TextAnchor.LowerCenter:
|
|
279
|
-
case TextAnchor.LowerRight:
|
|
280
|
-
opts.alignItems = "end";
|
|
281
|
-
break;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
return opts;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
private feedText(text: string, richText: boolean) : void {
|
|
288
|
-
// if (!text || text.length <= 0) return;
|
|
289
|
-
// if (!text ) return;
|
|
290
|
-
if (debug) console.log("feedText", this.uiObject, text, richText);
|
|
291
|
-
|
|
292
|
-
if (!this.uiObject) return;
|
|
293
|
-
if (!this._textMeshUi)
|
|
294
|
-
this._textMeshUi = [];
|
|
295
|
-
|
|
296
|
-
// this doesnt work and produces errors when length is 0:
|
|
297
|
-
// this.uiObject.textContent = " ";
|
|
298
|
-
|
|
299
|
-
// reset the current text (e.g. when switching from "Hello" to "Hello <b>World</b>")
|
|
300
|
-
// @TODO swingingtom: this is a hack to reset the text content, not sure how to do that right
|
|
301
|
-
this.uiObject.children.length = 0;
|
|
302
|
-
|
|
303
|
-
if (!richText || text.length === 0) {
|
|
304
|
-
//@TODO: @swingingtom how would the text content be set?
|
|
305
|
-
//@ts-ignore
|
|
306
|
-
this.uiObject.textContent = text;
|
|
307
|
-
} else {
|
|
308
|
-
let currentTag = this.getNextTag(text);
|
|
309
|
-
if (!currentTag) {
|
|
310
|
-
//@ts-ignore
|
|
311
|
-
// we have to set it to empty string, otherwise TMUI won't update it @swingingtom
|
|
312
|
-
this.uiObject.textContent = ""; // <
|
|
313
|
-
this.setOptions({ textContent: text });
|
|
314
|
-
return;
|
|
315
|
-
} else if (currentTag.startIndex > 0) {
|
|
316
|
-
// First segment should also clear children inlines
|
|
317
|
-
for (let i = this.uiObject.children.length - 1; i >= 0; i--) {
|
|
318
|
-
const child = this.uiObject.children[i];
|
|
319
|
-
// @ts-ignore
|
|
320
|
-
if (child.isUI) {
|
|
321
|
-
this.uiObject.remove(child as any);
|
|
322
|
-
child.clear();
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
const el = new ThreeMeshUI.Inline({ textContent: text.substring(0, currentTag.startIndex), color: 'inherit' });
|
|
326
|
-
this.uiObject.add(el as any);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
const stackArray: Array<TagStackEntry> = [];
|
|
330
|
-
while (currentTag) {
|
|
331
|
-
const next = this.getNextTag(text, currentTag.endIndex);
|
|
332
|
-
|
|
333
|
-
const opts = {
|
|
334
|
-
fontFamily: this.uiObject?.get('fontFamily'),
|
|
335
|
-
color: 'inherit',
|
|
336
|
-
textContent: ""
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
if (next) {
|
|
340
|
-
opts.textContent = this.getText(text, currentTag, next);
|
|
341
|
-
this.handleTag(currentTag, opts, stackArray);
|
|
342
|
-
const el = new ThreeMeshUI.Inline(opts);
|
|
343
|
-
this.uiObject?.add(el as any)
|
|
344
|
-
|
|
345
|
-
} else {
|
|
346
|
-
opts.textContent = text.substring(currentTag.endIndex);
|
|
347
|
-
this.handleTag(currentTag, opts, stackArray);
|
|
348
|
-
const el = new ThreeMeshUI.Inline(opts);
|
|
349
|
-
this.uiObject?.add(el as any);
|
|
350
|
-
}
|
|
351
|
-
currentTag = next;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
private _didHandleTextRenderOnTop: boolean = false;
|
|
357
|
-
|
|
358
|
-
private handleTextRenderOnTop() {
|
|
359
|
-
if (this._didHandleTextRenderOnTop) return;
|
|
360
|
-
this._didHandleTextRenderOnTop = true;
|
|
361
|
-
this.startCoroutine(this.renderOnTopCoroutine());
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// waits for all the text objects to be ready to set the render on top setting
|
|
365
|
-
// @THH : this isn't true anymore. We can set mesh and material properties before their counterparts are created.
|
|
366
|
-
// Values would automatically be passed when created. Not sure for depthWrite but it can be added;
|
|
367
|
-
private * renderOnTopCoroutine() {
|
|
368
|
-
if (!this.canvas) return;
|
|
369
|
-
const updatedRendering: boolean[] = [];
|
|
370
|
-
const canvas = this.canvas as Canvas;
|
|
371
|
-
const settings = {
|
|
372
|
-
renderOnTop: canvas.renderOnTop,
|
|
373
|
-
depthWrite: canvas.depthWrite,
|
|
374
|
-
doubleSided: canvas.doubleSided
|
|
375
|
-
};
|
|
376
|
-
while (true) {
|
|
377
|
-
let isWaitingForElementToUpdate = false;
|
|
378
|
-
if (this._textMeshUi) {
|
|
379
|
-
for (let i = 0; i < this._textMeshUi.length; i++) {
|
|
380
|
-
if (updatedRendering[i] === true) continue;
|
|
381
|
-
isWaitingForElementToUpdate = true;
|
|
382
|
-
const textMeshObject = this._textMeshUi[i];
|
|
383
|
-
// text objects have this textContent which is the mesh
|
|
384
|
-
// it is not ready immediately so we have to check if it exists
|
|
385
|
-
// and only then setting the render on top property works
|
|
386
|
-
if (!textMeshObject["textContent"]) continue;
|
|
387
|
-
updateRenderSettings(textMeshObject, settings);
|
|
388
|
-
updatedRendering[i] = true;
|
|
389
|
-
// console.log(textMeshObject);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
if (!isWaitingForElementToUpdate) break;
|
|
393
|
-
yield;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
private handleTag(tag: TagInfo, opts: any, stackArray: Array<TagStackEntry>) {
|
|
398
|
-
// console.log(tag);
|
|
399
|
-
if (!tag.isEndTag) {
|
|
400
|
-
if (tag.type.includes("color")) {
|
|
401
|
-
const stackEntry = new TagStackEntry(tag, { color: opts.color });
|
|
402
|
-
stackArray.push(stackEntry);
|
|
403
|
-
if (tag.type.length > 6) // color=
|
|
404
|
-
{
|
|
405
|
-
const col = parseInt("0x" + tag.type.substring(7));
|
|
406
|
-
opts.color = col;
|
|
407
|
-
} else {
|
|
408
|
-
// if it does not contain a color it is white
|
|
409
|
-
opts.color = new Color(1, 1, 1);
|
|
410
|
-
}
|
|
411
|
-
} else if (tag.type == "b") {
|
|
412
|
-
this.setFont(opts, FontStyle.Bold);
|
|
413
|
-
const stackEntry = new TagStackEntry(tag, {
|
|
414
|
-
fontWeight: 700,
|
|
415
|
-
});
|
|
416
|
-
stackArray.push(stackEntry);
|
|
417
|
-
} else if (tag.type == "i") {
|
|
418
|
-
this.setFont(opts, FontStyle.Italic);
|
|
419
|
-
const stackEntry = new TagStackEntry(tag, {
|
|
420
|
-
fontStyle: 'italic'
|
|
421
|
-
});
|
|
422
|
-
stackArray.push(stackEntry);
|
|
423
|
-
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
private getText(text: string, start: TagInfo, end: TagInfo) {
|
|
429
|
-
return text.substring(start.endIndex, end.startIndex);
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
private getNextTag(text: string, startIndex: number = 0): TagInfo | null {
|
|
433
|
-
const start = text.indexOf("<", startIndex);
|
|
434
|
-
const end = text.indexOf(">", start);
|
|
435
|
-
if (start >= 0 && end >= 0) {
|
|
436
|
-
const tag = text.substring(start + 1, end);
|
|
437
|
-
return { type: tag, startIndex: start, endIndex: end + 1, isEndTag: tag.startsWith("/") };
|
|
438
|
-
}
|
|
439
|
-
return null;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Update provided opts to have a proper fontDefinition : family+weight+style
|
|
444
|
-
* Ensure Family and Variant are registered in FontLibrary
|
|
445
|
-
*
|
|
446
|
-
* @param opts
|
|
447
|
-
* @param fontStyle
|
|
448
|
-
* @private
|
|
449
|
-
*/
|
|
450
|
-
private setFont(opts: ThreeMeshUIEveryOptions, fontStyle: FontStyle) {
|
|
451
|
-
|
|
452
|
-
// @TODO : THH could be useful to uniformize font family name :
|
|
453
|
-
// This would ease possible html/vr matching
|
|
454
|
-
// - Arial instead of assets/arial
|
|
455
|
-
// - Arial should stay Arial instead of arial
|
|
456
|
-
if (!this.font) return;
|
|
457
|
-
const fontName = this.font;
|
|
458
|
-
const familyName = this.getFamilyNameWithCorrectSuffix(fontName, fontStyle);
|
|
459
|
-
if (debug) console.log("Selected font family:" + familyName);
|
|
460
|
-
|
|
461
|
-
// ensure a font family is register under this name
|
|
462
|
-
let fontFamily = ThreeMeshUI.FontLibrary.getFontFamily(familyName as string);
|
|
463
|
-
if (!fontFamily)
|
|
464
|
-
fontFamily = ThreeMeshUI.FontLibrary.addFontFamily(familyName as string);
|
|
465
|
-
|
|
466
|
-
// @TODO: @swingingtom how should the font be set?
|
|
467
|
-
//@ts-ignore
|
|
468
|
-
opts.fontFamily = fontFamily;
|
|
469
|
-
|
|
470
|
-
switch (fontStyle) {
|
|
471
|
-
default:
|
|
472
|
-
case FontStyle.Normal:
|
|
473
|
-
opts.fontWeight = 400;
|
|
474
|
-
opts.fontStyle = "normal";
|
|
475
|
-
break
|
|
476
|
-
|
|
477
|
-
case FontStyle.Bold:
|
|
478
|
-
opts.fontWeight = 700;
|
|
479
|
-
opts.fontStyle = "normal";
|
|
480
|
-
break;
|
|
481
|
-
|
|
482
|
-
case FontStyle.Italic:
|
|
483
|
-
opts.fontWeight = 400;
|
|
484
|
-
opts.fontStyle = "italic"
|
|
485
|
-
break;
|
|
486
|
-
|
|
487
|
-
case FontStyle.BoldAndItalic:
|
|
488
|
-
opts.fontStyle = 'italic';
|
|
489
|
-
opts.fontWeight = 400;
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
// Ensure a fontVariant is registered
|
|
494
|
-
//@TODO: @swingingtom add type for fontWeight
|
|
495
|
-
let fontVariant = fontFamily.getVariant(opts.fontWeight as any as string, opts.fontStyle);
|
|
496
|
-
if (!fontVariant) {
|
|
497
|
-
let jsonPath = familyName;
|
|
498
|
-
if (!jsonPath?.endsWith("-msdf.json")) jsonPath += "-msdf.json";
|
|
499
|
-
let texturePath = familyName;
|
|
500
|
-
if (!texturePath?.endsWith(".png")) texturePath += ".png";
|
|
501
|
-
|
|
502
|
-
//@TODO: @swingingtom add type for fontWeight
|
|
503
|
-
//@TODO: @swingingtom addVariant return type is wrong (should be FontVariant)
|
|
504
|
-
fontVariant = fontFamily.addVariant(opts.fontWeight as any as string, opts.fontStyle, jsonPath, texturePath as string) as any as ThreeMeshUI.FontVariant;
|
|
505
|
-
/** @ts-ignore */
|
|
506
|
-
fontVariant?.addEventListener('ready', () => {
|
|
507
|
-
this.markDirty();
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
private getFamilyNameWithCorrectSuffix(familyName: string, style: FontStyle): string {
|
|
514
|
-
// we can only change the style for the family if the name has a suffix (e.g. Arial-Bold)
|
|
515
|
-
const styleSeparator = familyName.lastIndexOf('-');
|
|
516
|
-
if (styleSeparator < 0) return familyName;
|
|
517
|
-
|
|
518
|
-
// Check if the font name contains a style that we don't support in the enum
|
|
519
|
-
// e.g. -Medium, -Black, -Thin...
|
|
520
|
-
const styleName = familyName.substring(styleSeparator + 1)?.toLowerCase();
|
|
521
|
-
if (unsupportedStyleNames.includes(styleName)) {
|
|
522
|
-
if (debug) console.warn("Unsupported font style: " + styleName);
|
|
523
|
-
return familyName;
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
// Try find a suffix that matches the style
|
|
527
|
-
// We assume that if the font name is "Arial-Regular" then the bold version is "Arial-Bold"
|
|
528
|
-
// and if the font name is "arial-regular" then the bold version is "arial-bold"
|
|
529
|
-
const pathSeparatorIndex = familyName.lastIndexOf("/");
|
|
530
|
-
let fontBaseName = familyName;
|
|
531
|
-
if (pathSeparatorIndex >= 0) {
|
|
532
|
-
fontBaseName = fontBaseName.substring(pathSeparatorIndex + 1);
|
|
533
|
-
}
|
|
534
|
-
const isUpperCase = fontBaseName[0] === fontBaseName[0].toUpperCase();
|
|
535
|
-
const fontNameWithoutSuffix = familyName.substring(0, styleSeparator);
|
|
536
|
-
if (debug) console.log("Select font: ", familyName, FontStyle[style], fontBaseName, isUpperCase, fontNameWithoutSuffix);
|
|
537
|
-
|
|
538
|
-
switch (style) {
|
|
539
|
-
case FontStyle.Normal:
|
|
540
|
-
if (isUpperCase) return fontNameWithoutSuffix + "-Regular";
|
|
541
|
-
else return fontNameWithoutSuffix + "-regular";
|
|
542
|
-
case FontStyle.Bold:
|
|
543
|
-
if (isUpperCase) return fontNameWithoutSuffix + "-Bold";
|
|
544
|
-
else return fontNameWithoutSuffix + "-bold";
|
|
545
|
-
case FontStyle.Italic:
|
|
546
|
-
if (isUpperCase) return fontNameWithoutSuffix + "-Italic";
|
|
547
|
-
else return fontNameWithoutSuffix + "-italic";
|
|
548
|
-
case FontStyle.BoldAndItalic:
|
|
549
|
-
if (isUpperCase) return fontNameWithoutSuffix + "-BoldItalic";
|
|
550
|
-
else return fontNameWithoutSuffix + "-bolditalic";
|
|
551
|
-
default:
|
|
552
|
-
return familyName;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
class TagStackEntry {
|
|
558
|
-
tag: TagInfo;
|
|
559
|
-
previousValues: object;
|
|
560
|
-
constructor(tag: TagInfo, previousValues: object) {
|
|
561
|
-
this.tag = tag;
|
|
562
|
-
this.previousValues = previousValues;
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
declare type TagInfo = {
|
|
567
|
-
type: string,
|
|
568
|
-
startIndex: number,
|
|
569
|
-
endIndex: number,
|
|
570
|
-
isEndTag: boolean
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
// const anyTag = new RegExp('<.+?>', 'g');
|
|
574
|
-
// const regex = new RegExp('<(?<type>.+?)>(?<text>.+?)<\/.+?>', 'g');
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
const unsupportedStyleNames = [
|
|
578
|
-
"medium", "mediumitalic", "black", "blackitalic", "thin", "thinitalic", "extrabold", "light", "lightitalic", "semibold"
|
|
1
|
+
import { Color } from 'three';
|
|
2
|
+
import * as ThreeMeshUI from 'three-mesh-ui'
|
|
3
|
+
import type { DocumentedOptions as ThreeMeshUIEveryOptions } from "three-mesh-ui/build/types/core/elements/MeshUIBaseElement.js";
|
|
4
|
+
|
|
5
|
+
import { serializable } from '../../engine/engine_serialization_decorator.js';
|
|
6
|
+
import { getParam } from '../../engine/engine_utils.js';
|
|
7
|
+
import { Canvas } from './Canvas.js';
|
|
8
|
+
import { Graphic } from './Graphic.js';
|
|
9
|
+
import { type ICanvas, type ICanvasEventReceiver, type IHasAlphaFactor } from './Interfaces.js';
|
|
10
|
+
import { updateRenderSettings } from './Utils.js';
|
|
11
|
+
|
|
12
|
+
const debug = getParam("debugtext");
|
|
13
|
+
|
|
14
|
+
export enum TextAnchor {
|
|
15
|
+
UpperLeft = 0,
|
|
16
|
+
UpperCenter = 1,
|
|
17
|
+
UpperRight = 2,
|
|
18
|
+
MiddleLeft = 3,
|
|
19
|
+
MiddleCenter = 4,
|
|
20
|
+
MiddleRight = 5,
|
|
21
|
+
LowerLeft = 6,
|
|
22
|
+
LowerCenter = 7,
|
|
23
|
+
LowerRight = 8,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export enum VerticalWrapMode {
|
|
27
|
+
Truncate = 0,
|
|
28
|
+
Overflow = 1,
|
|
29
|
+
}
|
|
30
|
+
enum HorizontalWrapMode {
|
|
31
|
+
Wrap = 0,
|
|
32
|
+
Overflow = 1,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export enum FontStyle {
|
|
36
|
+
Normal = 0,
|
|
37
|
+
Bold = 1,
|
|
38
|
+
Italic = 2,
|
|
39
|
+
BoldAndItalic = 3,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @category User Interface
|
|
44
|
+
* @group Components
|
|
45
|
+
*/
|
|
46
|
+
export class Text extends Graphic implements IHasAlphaFactor, ICanvasEventReceiver {
|
|
47
|
+
|
|
48
|
+
@serializable()
|
|
49
|
+
alignment: TextAnchor = TextAnchor.UpperLeft;
|
|
50
|
+
@serializable()
|
|
51
|
+
verticalOverflow: VerticalWrapMode = VerticalWrapMode.Truncate;
|
|
52
|
+
@serializable()
|
|
53
|
+
horizontalOverflow: HorizontalWrapMode = HorizontalWrapMode.Wrap;
|
|
54
|
+
@serializable()
|
|
55
|
+
lineSpacing: number = 1;
|
|
56
|
+
@serializable()
|
|
57
|
+
supportRichText: boolean = false;
|
|
58
|
+
@serializable(URL)
|
|
59
|
+
font?: string;
|
|
60
|
+
@serializable()
|
|
61
|
+
fontStyle: FontStyle = FontStyle.Normal;
|
|
62
|
+
|
|
63
|
+
// private _alphaFactor : number = 1;
|
|
64
|
+
setAlphaFactor(factor: number): void {
|
|
65
|
+
super.setAlphaFactor(factor);
|
|
66
|
+
this.uiObject?.set({ fontOpacity: this.color.alpha * this.alphaFactor });
|
|
67
|
+
this.markDirty();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@serializable()
|
|
71
|
+
get text(): string {
|
|
72
|
+
return this._text;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
set text(val: string) {
|
|
76
|
+
if (val !== this._text) {
|
|
77
|
+
this._text = val;
|
|
78
|
+
this.feedText(this.text, this.supportRichText);
|
|
79
|
+
this.markDirty();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private set_text(val: string) {
|
|
84
|
+
this.text = val;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@serializable()
|
|
88
|
+
get fontSize(): number {
|
|
89
|
+
return this._fontSize;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
set fontSize(val: number) {
|
|
93
|
+
// Setting that kind of property in a parent, would cascade to each 'non-overrided' children.
|
|
94
|
+
this._fontSize = val;
|
|
95
|
+
this.uiObject?.set({ fontSize: val });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private sRGBTextColor: Color = new Color(1, 0, 1);
|
|
99
|
+
protected onColorChanged(): void {
|
|
100
|
+
this.sRGBTextColor.copy(this.color);
|
|
101
|
+
this.sRGBTextColor.convertLinearToSRGB();
|
|
102
|
+
this.uiObject?.set({ color: this.sRGBTextColor, fontOpacity: this.color.alpha });
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
onParentRectTransformChanged(): void {
|
|
106
|
+
super.onParentRectTransformChanged();
|
|
107
|
+
if (this.uiObject) {
|
|
108
|
+
this.updateOverflow();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// onBeforeRender(): void {
|
|
113
|
+
// // TODO TMUI @swingingtom this is so we don't have text clipping
|
|
114
|
+
// if (this.uiObject && (this.Canvas?.screenspace || this.context.isInVR)) {
|
|
115
|
+
// this.updateOverflow();
|
|
116
|
+
// }
|
|
117
|
+
// }
|
|
118
|
+
onBeforeCanvasRender(_canvas: ICanvas) {
|
|
119
|
+
// ensure the text clipping matrix is updated (this was a problem with multiple screenspace canvases due to canvas reparenting)
|
|
120
|
+
this.updateOverflow();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private updateOverflow() {
|
|
124
|
+
// HACK: force the text overflow to update
|
|
125
|
+
const overflow = (this.uiObject as any)?._overflow;
|
|
126
|
+
if (overflow) {
|
|
127
|
+
overflow._needsUpdate = true;
|
|
128
|
+
// the screenspace canvas does force an update, no need to mark dirty here
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
protected onCreate(_opts: any): void {
|
|
133
|
+
if (debug) console.log(this);
|
|
134
|
+
|
|
135
|
+
if (this.horizontalOverflow == HorizontalWrapMode.Overflow) {
|
|
136
|
+
// Only line characters in the textContent (\n,\r\t) would be able to multiline the text
|
|
137
|
+
_opts.whiteSpace = 'pre';
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (this.verticalOverflow == VerticalWrapMode.Truncate) {
|
|
141
|
+
this.context.renderer.localClippingEnabled = true;
|
|
142
|
+
_opts.overflow = 'hidden';
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
// @marwie : this combination is currently KO. See sample "Overflow Overview"
|
|
147
|
+
if (this.horizontalOverflow == HorizontalWrapMode.Overflow && this.verticalOverflow == VerticalWrapMode.Truncate) {
|
|
148
|
+
// This could fix this combination, but would require anchors updates to replace element
|
|
149
|
+
// _opts.width = 'auto';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
_opts.lineHeight = this.lineSpacing;
|
|
154
|
+
|
|
155
|
+
// @marwie : Should be fixed. Currently _opts are always fed with :
|
|
156
|
+
// backgroundOpacity : color.opacity
|
|
157
|
+
// backgroundColor : color
|
|
158
|
+
delete _opts.backgroundOpacity;
|
|
159
|
+
delete _opts.backgroundColor;
|
|
160
|
+
|
|
161
|
+
// helper to show bounds of text element
|
|
162
|
+
if (debug) {
|
|
163
|
+
_opts.backgroundColor = 0xff9900;
|
|
164
|
+
_opts.backgroundOpacity = 0.5;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const rt = this.rectTransform;
|
|
168
|
+
|
|
169
|
+
// Texts now support both options, block and inline, and inline has all default to inherit
|
|
170
|
+
_opts = { ..._opts, ...this.getTextOpts() };
|
|
171
|
+
|
|
172
|
+
this.getAlignment(_opts);
|
|
173
|
+
|
|
174
|
+
if (debug) {
|
|
175
|
+
_opts.backgroundColor = Math.random() * 0xffffff;
|
|
176
|
+
_opts.backgroundOpacity = 0.1;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
this.uiObject = rt.createNewText(_opts);
|
|
180
|
+
this.feedText(this.text, this.supportRichText);
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
onAfterAddedToScene() {
|
|
185
|
+
super.onAfterAddedToScene();
|
|
186
|
+
this.handleTextRenderOnTop();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private _text: string = "";
|
|
190
|
+
private _fontSize: number = 12;
|
|
191
|
+
|
|
192
|
+
private _textMeshUi: Array<ThreeMeshUI.Inline> | null = null;
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
private getTextOpts(): object {
|
|
196
|
+
const fontSize = this.fontSize;
|
|
197
|
+
// if (this.canvas) {
|
|
198
|
+
// fontSize /= this.canvas?.scaleFactor;
|
|
199
|
+
// }
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
const textOpts = {
|
|
203
|
+
color: this.color,
|
|
204
|
+
fontOpacity: this.color.alpha,
|
|
205
|
+
fontSize: fontSize,
|
|
206
|
+
fontKerning: "normal",
|
|
207
|
+
|
|
208
|
+
};
|
|
209
|
+
this.setFont(textOpts as ThreeMeshUIEveryOptions, this.fontStyle);
|
|
210
|
+
return textOpts;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
onEnable(): void {
|
|
215
|
+
super.onEnable();
|
|
216
|
+
this._didHandleTextRenderOnTop = false;
|
|
217
|
+
if (this.uiObject) {
|
|
218
|
+
// @ts-ignore
|
|
219
|
+
|
|
220
|
+
// @TODO : Evaluate the need of keeping it anonymous.
|
|
221
|
+
// From v7.x afterUpdate can be removed but requires a reference
|
|
222
|
+
this.uiObject.addAfterUpdate(() => {
|
|
223
|
+
// We need to update the shadow owner when the text updates
|
|
224
|
+
// because once the font has loaded we get new children (a new mesh)
|
|
225
|
+
// which is the text, it needs to be linked back to this component
|
|
226
|
+
// to be properly handled by the EventSystem
|
|
227
|
+
// since the EventSystem looks for shadow component owners to handle events
|
|
228
|
+
this.setShadowComponentOwner(this.uiObject);
|
|
229
|
+
this.markDirty();
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
setTimeout(() => this.markDirty(), 10);
|
|
234
|
+
this.canvas?.registerEventReceiver(this);
|
|
235
|
+
}
|
|
236
|
+
onDisable(): void {
|
|
237
|
+
super.onDisable();
|
|
238
|
+
this.canvas?.unregisterEventReceiver(this);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
private getAlignment(opts: ThreeMeshUIEveryOptions): ThreeMeshUIEveryOptions {
|
|
242
|
+
|
|
243
|
+
opts.flexDirection = "column";
|
|
244
|
+
|
|
245
|
+
switch (this.alignment) {
|
|
246
|
+
case TextAnchor.UpperLeft:
|
|
247
|
+
case TextAnchor.MiddleLeft:
|
|
248
|
+
case TextAnchor.LowerLeft:
|
|
249
|
+
opts.textAlign = "left";
|
|
250
|
+
break;
|
|
251
|
+
case TextAnchor.UpperCenter:
|
|
252
|
+
case TextAnchor.MiddleCenter:
|
|
253
|
+
case TextAnchor.LowerCenter:
|
|
254
|
+
opts.textAlign = "center";
|
|
255
|
+
|
|
256
|
+
break;
|
|
257
|
+
case TextAnchor.UpperRight:
|
|
258
|
+
case TextAnchor.MiddleRight:
|
|
259
|
+
case TextAnchor.LowerRight:
|
|
260
|
+
opts.textAlign = "right";
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
switch (this.alignment) {
|
|
266
|
+
default:
|
|
267
|
+
case TextAnchor.UpperLeft:
|
|
268
|
+
case TextAnchor.UpperCenter:
|
|
269
|
+
case TextAnchor.UpperRight:
|
|
270
|
+
opts.alignItems = "start";
|
|
271
|
+
break;
|
|
272
|
+
case TextAnchor.MiddleLeft:
|
|
273
|
+
case TextAnchor.MiddleCenter:
|
|
274
|
+
case TextAnchor.MiddleRight:
|
|
275
|
+
opts.alignItems = "center";
|
|
276
|
+
break;
|
|
277
|
+
case TextAnchor.LowerLeft:
|
|
278
|
+
case TextAnchor.LowerCenter:
|
|
279
|
+
case TextAnchor.LowerRight:
|
|
280
|
+
opts.alignItems = "end";
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return opts;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
private feedText(text: string, richText: boolean) : void {
|
|
288
|
+
// if (!text || text.length <= 0) return;
|
|
289
|
+
// if (!text ) return;
|
|
290
|
+
if (debug) console.log("feedText", this.uiObject, text, richText);
|
|
291
|
+
|
|
292
|
+
if (!this.uiObject) return;
|
|
293
|
+
if (!this._textMeshUi)
|
|
294
|
+
this._textMeshUi = [];
|
|
295
|
+
|
|
296
|
+
// this doesnt work and produces errors when length is 0:
|
|
297
|
+
// this.uiObject.textContent = " ";
|
|
298
|
+
|
|
299
|
+
// reset the current text (e.g. when switching from "Hello" to "Hello <b>World</b>")
|
|
300
|
+
// @TODO swingingtom: this is a hack to reset the text content, not sure how to do that right
|
|
301
|
+
this.uiObject.children.length = 0;
|
|
302
|
+
|
|
303
|
+
if (!richText || text.length === 0) {
|
|
304
|
+
//@TODO: @swingingtom how would the text content be set?
|
|
305
|
+
//@ts-ignore
|
|
306
|
+
this.uiObject.textContent = text;
|
|
307
|
+
} else {
|
|
308
|
+
let currentTag = this.getNextTag(text);
|
|
309
|
+
if (!currentTag) {
|
|
310
|
+
//@ts-ignore
|
|
311
|
+
// we have to set it to empty string, otherwise TMUI won't update it @swingingtom
|
|
312
|
+
this.uiObject.textContent = ""; // <
|
|
313
|
+
this.setOptions({ textContent: text });
|
|
314
|
+
return;
|
|
315
|
+
} else if (currentTag.startIndex > 0) {
|
|
316
|
+
// First segment should also clear children inlines
|
|
317
|
+
for (let i = this.uiObject.children.length - 1; i >= 0; i--) {
|
|
318
|
+
const child = this.uiObject.children[i];
|
|
319
|
+
// @ts-ignore
|
|
320
|
+
if (child.isUI) {
|
|
321
|
+
this.uiObject.remove(child as any);
|
|
322
|
+
child.clear();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const el = new ThreeMeshUI.Inline({ textContent: text.substring(0, currentTag.startIndex), color: 'inherit' });
|
|
326
|
+
this.uiObject.add(el as any);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const stackArray: Array<TagStackEntry> = [];
|
|
330
|
+
while (currentTag) {
|
|
331
|
+
const next = this.getNextTag(text, currentTag.endIndex);
|
|
332
|
+
|
|
333
|
+
const opts = {
|
|
334
|
+
fontFamily: this.uiObject?.get('fontFamily'),
|
|
335
|
+
color: 'inherit',
|
|
336
|
+
textContent: ""
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (next) {
|
|
340
|
+
opts.textContent = this.getText(text, currentTag, next);
|
|
341
|
+
this.handleTag(currentTag, opts, stackArray);
|
|
342
|
+
const el = new ThreeMeshUI.Inline(opts);
|
|
343
|
+
this.uiObject?.add(el as any)
|
|
344
|
+
|
|
345
|
+
} else {
|
|
346
|
+
opts.textContent = text.substring(currentTag.endIndex);
|
|
347
|
+
this.handleTag(currentTag, opts, stackArray);
|
|
348
|
+
const el = new ThreeMeshUI.Inline(opts);
|
|
349
|
+
this.uiObject?.add(el as any);
|
|
350
|
+
}
|
|
351
|
+
currentTag = next;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
private _didHandleTextRenderOnTop: boolean = false;
|
|
357
|
+
|
|
358
|
+
private handleTextRenderOnTop() {
|
|
359
|
+
if (this._didHandleTextRenderOnTop) return;
|
|
360
|
+
this._didHandleTextRenderOnTop = true;
|
|
361
|
+
this.startCoroutine(this.renderOnTopCoroutine());
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// waits for all the text objects to be ready to set the render on top setting
|
|
365
|
+
// @THH : this isn't true anymore. We can set mesh and material properties before their counterparts are created.
|
|
366
|
+
// Values would automatically be passed when created. Not sure for depthWrite but it can be added;
|
|
367
|
+
private * renderOnTopCoroutine() {
|
|
368
|
+
if (!this.canvas) return;
|
|
369
|
+
const updatedRendering: boolean[] = [];
|
|
370
|
+
const canvas = this.canvas as Canvas;
|
|
371
|
+
const settings = {
|
|
372
|
+
renderOnTop: canvas.renderOnTop,
|
|
373
|
+
depthWrite: canvas.depthWrite,
|
|
374
|
+
doubleSided: canvas.doubleSided
|
|
375
|
+
};
|
|
376
|
+
while (true) {
|
|
377
|
+
let isWaitingForElementToUpdate = false;
|
|
378
|
+
if (this._textMeshUi) {
|
|
379
|
+
for (let i = 0; i < this._textMeshUi.length; i++) {
|
|
380
|
+
if (updatedRendering[i] === true) continue;
|
|
381
|
+
isWaitingForElementToUpdate = true;
|
|
382
|
+
const textMeshObject = this._textMeshUi[i];
|
|
383
|
+
// text objects have this textContent which is the mesh
|
|
384
|
+
// it is not ready immediately so we have to check if it exists
|
|
385
|
+
// and only then setting the render on top property works
|
|
386
|
+
if (!textMeshObject["textContent"]) continue;
|
|
387
|
+
updateRenderSettings(textMeshObject, settings);
|
|
388
|
+
updatedRendering[i] = true;
|
|
389
|
+
// console.log(textMeshObject);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
if (!isWaitingForElementToUpdate) break;
|
|
393
|
+
yield;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
private handleTag(tag: TagInfo, opts: any, stackArray: Array<TagStackEntry>) {
|
|
398
|
+
// console.log(tag);
|
|
399
|
+
if (!tag.isEndTag) {
|
|
400
|
+
if (tag.type.includes("color")) {
|
|
401
|
+
const stackEntry = new TagStackEntry(tag, { color: opts.color });
|
|
402
|
+
stackArray.push(stackEntry);
|
|
403
|
+
if (tag.type.length > 6) // color=
|
|
404
|
+
{
|
|
405
|
+
const col = parseInt("0x" + tag.type.substring(7));
|
|
406
|
+
opts.color = col;
|
|
407
|
+
} else {
|
|
408
|
+
// if it does not contain a color it is white
|
|
409
|
+
opts.color = new Color(1, 1, 1);
|
|
410
|
+
}
|
|
411
|
+
} else if (tag.type == "b") {
|
|
412
|
+
this.setFont(opts, FontStyle.Bold);
|
|
413
|
+
const stackEntry = new TagStackEntry(tag, {
|
|
414
|
+
fontWeight: 700,
|
|
415
|
+
});
|
|
416
|
+
stackArray.push(stackEntry);
|
|
417
|
+
} else if (tag.type == "i") {
|
|
418
|
+
this.setFont(opts, FontStyle.Italic);
|
|
419
|
+
const stackEntry = new TagStackEntry(tag, {
|
|
420
|
+
fontStyle: 'italic'
|
|
421
|
+
});
|
|
422
|
+
stackArray.push(stackEntry);
|
|
423
|
+
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
private getText(text: string, start: TagInfo, end: TagInfo) {
|
|
429
|
+
return text.substring(start.endIndex, end.startIndex);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
private getNextTag(text: string, startIndex: number = 0): TagInfo | null {
|
|
433
|
+
const start = text.indexOf("<", startIndex);
|
|
434
|
+
const end = text.indexOf(">", start);
|
|
435
|
+
if (start >= 0 && end >= 0) {
|
|
436
|
+
const tag = text.substring(start + 1, end);
|
|
437
|
+
return { type: tag, startIndex: start, endIndex: end + 1, isEndTag: tag.startsWith("/") };
|
|
438
|
+
}
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Update provided opts to have a proper fontDefinition : family+weight+style
|
|
444
|
+
* Ensure Family and Variant are registered in FontLibrary
|
|
445
|
+
*
|
|
446
|
+
* @param opts
|
|
447
|
+
* @param fontStyle
|
|
448
|
+
* @private
|
|
449
|
+
*/
|
|
450
|
+
private setFont(opts: ThreeMeshUIEveryOptions, fontStyle: FontStyle) {
|
|
451
|
+
|
|
452
|
+
// @TODO : THH could be useful to uniformize font family name :
|
|
453
|
+
// This would ease possible html/vr matching
|
|
454
|
+
// - Arial instead of assets/arial
|
|
455
|
+
// - Arial should stay Arial instead of arial
|
|
456
|
+
if (!this.font) return;
|
|
457
|
+
const fontName = this.font;
|
|
458
|
+
const familyName = this.getFamilyNameWithCorrectSuffix(fontName, fontStyle);
|
|
459
|
+
if (debug) console.log("Selected font family:" + familyName);
|
|
460
|
+
|
|
461
|
+
// ensure a font family is register under this name
|
|
462
|
+
let fontFamily = ThreeMeshUI.FontLibrary.getFontFamily(familyName as string);
|
|
463
|
+
if (!fontFamily)
|
|
464
|
+
fontFamily = ThreeMeshUI.FontLibrary.addFontFamily(familyName as string);
|
|
465
|
+
|
|
466
|
+
// @TODO: @swingingtom how should the font be set?
|
|
467
|
+
//@ts-ignore
|
|
468
|
+
opts.fontFamily = fontFamily;
|
|
469
|
+
|
|
470
|
+
switch (fontStyle) {
|
|
471
|
+
default:
|
|
472
|
+
case FontStyle.Normal:
|
|
473
|
+
opts.fontWeight = 400;
|
|
474
|
+
opts.fontStyle = "normal";
|
|
475
|
+
break
|
|
476
|
+
|
|
477
|
+
case FontStyle.Bold:
|
|
478
|
+
opts.fontWeight = 700;
|
|
479
|
+
opts.fontStyle = "normal";
|
|
480
|
+
break;
|
|
481
|
+
|
|
482
|
+
case FontStyle.Italic:
|
|
483
|
+
opts.fontWeight = 400;
|
|
484
|
+
opts.fontStyle = "italic"
|
|
485
|
+
break;
|
|
486
|
+
|
|
487
|
+
case FontStyle.BoldAndItalic:
|
|
488
|
+
opts.fontStyle = 'italic';
|
|
489
|
+
opts.fontWeight = 400;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
// Ensure a fontVariant is registered
|
|
494
|
+
//@TODO: @swingingtom add type for fontWeight
|
|
495
|
+
let fontVariant = fontFamily.getVariant(opts.fontWeight as any as string, opts.fontStyle);
|
|
496
|
+
if (!fontVariant) {
|
|
497
|
+
let jsonPath = familyName;
|
|
498
|
+
if (!jsonPath?.endsWith("-msdf.json")) jsonPath += "-msdf.json";
|
|
499
|
+
let texturePath = familyName;
|
|
500
|
+
if (!texturePath?.endsWith(".png")) texturePath += ".png";
|
|
501
|
+
|
|
502
|
+
//@TODO: @swingingtom add type for fontWeight
|
|
503
|
+
//@TODO: @swingingtom addVariant return type is wrong (should be FontVariant)
|
|
504
|
+
fontVariant = fontFamily.addVariant(opts.fontWeight as any as string, opts.fontStyle, jsonPath, texturePath as string) as any as ThreeMeshUI.FontVariant;
|
|
505
|
+
/** @ts-ignore */
|
|
506
|
+
fontVariant?.addEventListener('ready', () => {
|
|
507
|
+
this.markDirty();
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
private getFamilyNameWithCorrectSuffix(familyName: string, style: FontStyle): string {
|
|
514
|
+
// we can only change the style for the family if the name has a suffix (e.g. Arial-Bold)
|
|
515
|
+
const styleSeparator = familyName.lastIndexOf('-');
|
|
516
|
+
if (styleSeparator < 0) return familyName;
|
|
517
|
+
|
|
518
|
+
// Check if the font name contains a style that we don't support in the enum
|
|
519
|
+
// e.g. -Medium, -Black, -Thin...
|
|
520
|
+
const styleName = familyName.substring(styleSeparator + 1)?.toLowerCase();
|
|
521
|
+
if (unsupportedStyleNames.includes(styleName)) {
|
|
522
|
+
if (debug) console.warn("Unsupported font style: " + styleName);
|
|
523
|
+
return familyName;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Try find a suffix that matches the style
|
|
527
|
+
// We assume that if the font name is "Arial-Regular" then the bold version is "Arial-Bold"
|
|
528
|
+
// and if the font name is "arial-regular" then the bold version is "arial-bold"
|
|
529
|
+
const pathSeparatorIndex = familyName.lastIndexOf("/");
|
|
530
|
+
let fontBaseName = familyName;
|
|
531
|
+
if (pathSeparatorIndex >= 0) {
|
|
532
|
+
fontBaseName = fontBaseName.substring(pathSeparatorIndex + 1);
|
|
533
|
+
}
|
|
534
|
+
const isUpperCase = fontBaseName[0] === fontBaseName[0].toUpperCase();
|
|
535
|
+
const fontNameWithoutSuffix = familyName.substring(0, styleSeparator);
|
|
536
|
+
if (debug) console.log("Select font: ", familyName, FontStyle[style], fontBaseName, isUpperCase, fontNameWithoutSuffix);
|
|
537
|
+
|
|
538
|
+
switch (style) {
|
|
539
|
+
case FontStyle.Normal:
|
|
540
|
+
if (isUpperCase) return fontNameWithoutSuffix + "-Regular";
|
|
541
|
+
else return fontNameWithoutSuffix + "-regular";
|
|
542
|
+
case FontStyle.Bold:
|
|
543
|
+
if (isUpperCase) return fontNameWithoutSuffix + "-Bold";
|
|
544
|
+
else return fontNameWithoutSuffix + "-bold";
|
|
545
|
+
case FontStyle.Italic:
|
|
546
|
+
if (isUpperCase) return fontNameWithoutSuffix + "-Italic";
|
|
547
|
+
else return fontNameWithoutSuffix + "-italic";
|
|
548
|
+
case FontStyle.BoldAndItalic:
|
|
549
|
+
if (isUpperCase) return fontNameWithoutSuffix + "-BoldItalic";
|
|
550
|
+
else return fontNameWithoutSuffix + "-bolditalic";
|
|
551
|
+
default:
|
|
552
|
+
return familyName;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
class TagStackEntry {
|
|
558
|
+
tag: TagInfo;
|
|
559
|
+
previousValues: object;
|
|
560
|
+
constructor(tag: TagInfo, previousValues: object) {
|
|
561
|
+
this.tag = tag;
|
|
562
|
+
this.previousValues = previousValues;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
declare type TagInfo = {
|
|
567
|
+
type: string,
|
|
568
|
+
startIndex: number,
|
|
569
|
+
endIndex: number,
|
|
570
|
+
isEndTag: boolean
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// const anyTag = new RegExp('<.+?>', 'g');
|
|
574
|
+
// const regex = new RegExp('<(?<type>.+?)>(?<text>.+?)<\/.+?>', 'g');
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
const unsupportedStyleNames = [
|
|
578
|
+
"medium", "mediumitalic", "black", "blackitalic", "thin", "thinitalic", "extrabold", "light", "lightitalic", "semibold"
|
|
579
579
|
]
|