@needle-tools/engine 4.11.5-next.f5ee735 → 4.11.6
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 +3958 -3958
- package/LICENSE.md +10 -10
- package/README.md +84 -84
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-DwpFkqPR.js +21 -0
- package/dist/{gltf-progressive-DZrY8VT6.min.js → gltf-progressive-BmSygnAC.min.js} +2 -2
- package/dist/{gltf-progressive-DgYz5BYa.js → gltf-progressive-DnLBuGK5.js} +24 -24
- package/dist/{gltf-progressive-DWcmTMCh.umd.cjs → gltf-progressive-Rs-ojtXy.umd.cjs} +1 -1
- package/dist/{loader.worker-Dip-PthR.js → loader.worker-DWzfDpAl.js} +4 -4
- package/dist/{needle-engine.bundle-CpC_7cRL.umd.cjs → needle-engine.bundle-B8HwiMM3.umd.cjs} +125 -133
- package/dist/{needle-engine.bundle-DtudWpG2.js → needle-engine.bundle-Cxvg_Ilj.js} +3622 -3735
- package/dist/{needle-engine.bundle-DvGMCIAT.min.js → needle-engine.bundle-PcoEsc5V.min.js} +113 -121
- package/dist/needle-engine.d.ts +176 -179
- package/dist/needle-engine.js +343 -344
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-Dzq4RXcy.min.js → postprocessing-B5ksn9-G.min.js} +223 -147
- package/dist/{postprocessing-DEkzT9iD.umd.cjs → postprocessing-DZtb9Nnn.umd.cjs} +222 -146
- package/dist/{postprocessing-DqdcvaFn.js → postprocessing-__7s9wON.js} +1656 -1542
- package/dist/{three-DfMvBzXi.js → three-BCCkyCA5.js} +1 -7
- package/dist/{three-qj71I7J3.umd.cjs → three-Bf2NBxAw.umd.cjs} +2 -2
- package/dist/{three-B7CT31Bt.min.js → three-W7zWTcfP.min.js} +1 -1
- package/dist/{three-examples-CsW4_6LI.umd.cjs → three-examples-Dho7cuu4.umd.cjs} +4 -4
- package/dist/{three-examples-D1P7eEhn.min.js → three-examples-MsJjauyk.min.js} +10 -10
- package/dist/{three-examples-D1SK93ek.js → three-examples-y2GeYlze.js} +2 -20
- package/dist/{three-mesh-ui-C_uSB5dD.js → three-mesh-ui-3nSSizT4.js} +1 -1
- package/dist/{three-mesh-ui-LQ44s0AL.min.js → three-mesh-ui-CIez6qJQ.min.js} +1 -1
- package/dist/{three-mesh-ui-DpATDXwU.umd.cjs → three-mesh-ui-zsOOA5Pq.umd.cjs} +1 -1
- package/dist/{vendor-DhTcel4c.umd.cjs → vendor-BrxSfR_8.umd.cjs} +38 -38
- package/dist/{vendor-DtTGRuXh.min.js → vendor-C0rT6Ytq.min.js} +45 -45
- package/dist/{vendor-Dkpn1a8s.js → vendor-CoLbzydV.js} +3068 -3134
- 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 +86 -86
- package/lib/engine/api.js +85 -85
- 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 +320 -320
- 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 +277 -277
- 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/debug_spector.d.ts +16 -16
- package/lib/engine/debug/debug_spector.js +27 -27
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +232 -232
- package/lib/engine/engine_addressables.js +684 -684
- package/lib/engine/engine_animation.d.ts +61 -61
- package/lib/engine/engine_animation.js +170 -170
- package/lib/engine/engine_application.d.ts +45 -52
- package/lib/engine/engine_application.js +104 -111
- package/lib/engine/engine_application.js.map +1 -1
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +352 -352
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +39 -39
- package/lib/engine/engine_camera.fit.d.ts +113 -113
- package/lib/engine/engine_camera.fit.js +194 -194
- package/lib/engine/engine_camera.js +102 -102
- 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 +523 -523
- package/lib/engine/engine_context.js +1781 -1784
- package/lib/engine/engine_context.js.map +1 -1
- 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 +344 -344
- 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_feature_flags.d.ts +3 -3
- package/lib/engine/engine_feature_flags.js +5 -5
- 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 +676 -676
- 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 +151 -151
- package/lib/engine/engine_gizmos.js +549 -549
- 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_gltf_builtin_components.js.map +1 -1
- 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 +1297 -1297
- 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 +103 -103
- package/lib/engine/engine_loaders.callbacks.d.ts +98 -98
- package/lib/engine/engine_loaders.callbacks.js +87 -87
- package/lib/engine/engine_loaders.d.ts +42 -42
- 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 +341 -341
- package/lib/engine/engine_lods.d.ts +37 -37
- package/lib/engine/engine_lods.js +162 -162
- package/lib/engine/engine_mainloop_utils.d.ts +33 -33
- package/lib/engine/engine_mainloop_utils.js +478 -478
- 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 +362 -362
- 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 +656 -656
- 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 +164 -164
- package/lib/engine/engine_physics.js +687 -691
- package/lib/engine/engine_physics.js.map +1 -1
- 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 +156 -156
- package/lib/engine/engine_physics_rapier.js +1460 -1460
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_pmrem.d.ts +8 -8
- package/lib/engine/engine_pmrem.js +68 -68
- package/lib/engine/engine_scenelighting.d.ts +82 -82
- package/lib/engine/engine_scenelighting.js +245 -245
- 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 +67 -67
- 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 +210 -210
- package/lib/engine/engine_three_utils.js +792 -792
- 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 +198 -198
- package/lib/engine/engine_types.d.ts +585 -585
- 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 +227 -227
- package/lib/engine/engine_utils.js +821 -821
- package/lib/engine/engine_utils_attributes.d.ts +48 -48
- package/lib/engine/engine_utils_attributes.js +69 -69
- package/lib/engine/engine_utils_format.d.ts +24 -24
- package/lib/engine/engine_utils_format.js +245 -245
- package/lib/engine/engine_utils_qrcode.d.ts +23 -23
- package/lib/engine/engine_utils_qrcode.js +233 -233
- 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 +239 -239
- 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 +160 -160
- 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 +113 -113
- 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 +141 -141
- package/lib/engine/js-extensions/Object3D.js +190 -190
- 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 +8 -8
- package/lib/engine/js-extensions/Vector.js +13 -13
- package/lib/engine/js-extensions/index.d.ts +6 -6
- 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 +80 -80
- 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 +53 -53
- package/lib/engine/webcomponents/buttons.js +270 -270
- 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 +91 -91
- 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 +192 -192
- package/lib/engine/webcomponents/needle menu/needle-menu.js +1077 -1077
- 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 +70 -70
- 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 +906 -906
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +336 -336
- package/lib/engine/xr/NeedleXRController.d.ts +314 -314
- package/lib/engine/xr/NeedleXRController.js +1057 -1057
- package/lib/engine/xr/NeedleXRSession.d.ts +342 -342
- package/lib/engine/xr/NeedleXRSession.js +1491 -1492
- package/lib/engine/xr/NeedleXRSession.js.map +1 -1
- 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 +157 -157
- package/lib/engine-components/Animation.js +518 -518
- package/lib/engine-components/AnimationCurve.d.ts +43 -43
- package/lib/engine-components/AnimationCurve.js +162 -162
- 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 +34 -34
- package/lib/engine-components/Animator.d.ts +218 -218
- package/lib/engine-components/Animator.js +355 -355
- package/lib/engine-components/AnimatorController.d.ts +230 -230
- package/lib/engine-components/AnimatorController.js +1171 -1171
- 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 +233 -233
- package/lib/engine-components/Camera.js +704 -704
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +118 -118
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +214 -214
- package/lib/engine-components/Collider.js +395 -395
- package/lib/engine-components/Component.d.ts +796 -796
- package/lib/engine-components/Component.js +923 -923
- package/lib/engine-components/ContactShadows.d.ts +113 -113
- package/lib/engine-components/ContactShadows.js +482 -482
- 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 +1420 -1420
- package/lib/engine-components/DropListener.d.ts +224 -224
- package/lib/engine-components/DropListener.js +669 -669
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +205 -205
- package/lib/engine-components/EventList.d.ts +71 -71
- package/lib/engine-components/EventList.js +249 -249
- 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 +70 -70
- package/lib/engine-components/GroundProjection.js +346 -346
- package/lib/engine-components/Interactable.d.ts +16 -16
- package/lib/engine-components/Interactable.js +16 -16
- 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 +27 -27
- package/lib/engine-components/LookAtConstraint.js +47 -47
- package/lib/engine-components/NeedleMenu.d.ts +51 -51
- package/lib/engine-components/NeedleMenu.js +93 -93
- package/lib/engine-components/NestedGltf.d.ts +33 -33
- package/lib/engine-components/NestedGltf.js +97 -97
- 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 +315 -315
- package/lib/engine-components/OrbitControls.js +1046 -1046
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +32 -32
- package/lib/engine-components/ReflectionProbe.js +214 -214
- package/lib/engine-components/Renderer.d.ts +154 -154
- package/lib/engine-components/Renderer.js +824 -824
- package/lib/engine-components/RendererInstancing.d.ts +140 -142
- package/lib/engine-components/RendererInstancing.js +744 -777
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/RendererLightmap.d.ts +33 -33
- package/lib/engine-components/RendererLightmap.js +192 -192
- package/lib/engine-components/RigidBody.d.ts +160 -160
- package/lib/engine-components/RigidBody.js +522 -522
- 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/SeeThrough.d.ts +73 -73
- package/lib/engine-components/SeeThrough.js +249 -249
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +90 -100
- package/lib/engine-components/Skybox.js +426 -438
- package/lib/engine-components/Skybox.js.map +1 -1
- 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 +145 -145
- package/lib/engine-components/SpriteRenderer.js +491 -491
- 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 +217 -217
- 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 +53 -53
- package/lib/engine-components/api.js +52 -52
- 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 +227 -227
- package/lib/engine-components/codegen/components.js +229 -229
- package/lib/engine-components/debug/LogStats.d.ts +6 -6
- package/lib/engine-components/debug/LogStats.js +19 -19
- 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 +164 -164
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1847 -1847
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +137 -137
- package/lib/engine-components/export/usdz/USDZExporter.js +669 -669
- 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 +198 -198
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1084 -1084
- 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/physics/Attractor.d.ts +20 -20
- package/lib/engine-components/physics/Attractor.js +53 -53
- 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 +43 -43
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +502 -502
- package/lib/engine-components/postprocessing/Volume.d.ts +92 -92
- package/lib/engine-components/postprocessing/Volume.js +387 -387
- 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/splines/Spline.d.ts +61 -61
- package/lib/engine-components/splines/Spline.js +272 -272
- package/lib/engine-components/splines/SplineUtils.d.ts +15 -15
- package/lib/engine-components/splines/SplineUtils.js +35 -35
- package/lib/engine-components/splines/SplineWalker.d.ts +89 -89
- package/lib/engine-components/splines/SplineWalker.js +192 -192
- package/lib/engine-components/splines/index.d.ts +3 -3
- package/lib/engine-components/splines/index.js +3 -3
- package/lib/engine-components/timeline/PlayableDirector.d.ts +193 -193
- package/lib/engine-components/timeline/PlayableDirector.js +734 -734
- package/lib/engine-components/timeline/SignalAsset.d.ts +34 -34
- package/lib/engine-components/timeline/SignalAsset.js +140 -140
- package/lib/engine-components/timeline/TimelineModels.d.ts +135 -135
- package/lib/engine-components/timeline/TimelineModels.js +28 -28
- package/lib/engine-components/timeline/TimelineTracks.d.ts +118 -118
- package/lib/engine-components/timeline/TimelineTracks.js +903 -903
- 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 +764 -764
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +267 -267
- 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 +69 -69
- package/lib/engine-components/ui/Raycaster.d.ts +48 -48
- package/lib/engine-components/ui/Raycaster.js +113 -113
- 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 +544 -544
- 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 +34 -34
- package/lib/engine-components/utils/LookAt.js +91 -91
- package/lib/engine-components/utils/OpenURL.d.ts +43 -43
- package/lib/engine-components/utils/OpenURL.js +120 -120
- package/lib/engine-components/web/Clickthrough.d.ts +26 -26
- package/lib/engine-components/web/Clickthrough.js +92 -92
- package/lib/engine-components/web/CursorFollow.d.ts +44 -44
- package/lib/engine-components/web/CursorFollow.js +132 -132
- package/lib/engine-components/web/HoverAnimation.d.ts +47 -47
- package/lib/engine-components/web/HoverAnimation.js +107 -107
- package/lib/engine-components/web/ScrollFollow.d.ts +128 -128
- package/lib/engine-components/web/ScrollFollow.js +430 -430
- package/lib/engine-components/web/ViewBox.d.ts +61 -61
- package/lib/engine-components/web/ViewBox.js +300 -300
- package/lib/engine-components/web/index.d.ts +5 -5
- package/lib/engine-components/web/index.js +5 -5
- 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 +10 -10
- package/lib/engine-components/webxr/TeleportTarget.js +10 -10
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +35 -35
- package/lib/engine-components/webxr/WebARCameraBackground.js +160 -160
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +99 -99
- package/lib/engine-components/webxr/WebARSessionRoot.js +772 -772
- package/lib/engine-components/webxr/WebXR.d.ts +259 -259
- package/lib/engine-components/webxr/WebXR.js +588 -592
- package/lib/engine-components/webxr/WebXR.js.map +1 -1
- 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 +139 -139
- package/lib/engine-components/webxr/WebXRImageTracking.js +590 -590
- 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 +36 -36
- package/lib/engine-components/webxr/WebXRRig.js +76 -76
- package/lib/engine-components/webxr/XRFlag.d.ts +41 -41
- package/lib/engine-components/webxr/XRFlag.js +142 -142
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +59 -59
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +132 -132
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +46 -46
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +355 -355
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +85 -85
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +517 -517
- 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 +7 -7
- package/lib/engine-components-experimental/Presentation.js +10 -10
- 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 -65
- package/lib/needle-engine.js.map +1 -1
- package/package.json +3 -3
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +34 -34
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/logger.js +345 -345
- package/plugins/common/needle-engine.js +40 -40
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/common/worker.js +128 -128
- 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 +131 -131
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +214 -214
- package/plugins/vite/asap.js +233 -233
- package/plugins/vite/build-pipeline.js +379 -379
- package/plugins/vite/build.js +22 -22
- 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 +251 -251
- package/plugins/vite/dependency-watcher.js +242 -242
- 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 +154 -154
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/logger.client.js +343 -343
- package/plugins/vite/logger.js +100 -100
- package/plugins/vite/materialx.js +31 -31
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/needle-app.js +193 -193
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +90 -90
- package/plugins/vite/poster-client.js +58 -58
- package/plugins/vite/poster.js +78 -78
- 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 +86 -86
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +322 -322
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +303 -303
- 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/dist/engine_utils.js +82 -0
- package/src/engine/engine_addressables.ts +763 -763
- package/src/engine/engine_animation.ts +221 -221
- package/src/engine/engine_application.ts +113 -128
- package/src/engine/engine_assetdatabase.ts +396 -396
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.fit.ts +302 -302
- package/src/engine/engine_camera.ts +143 -143
- 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 +1947 -1951
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +435 -435
- 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 +775 -775
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +594 -594
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +404 -404
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1507 -1507
- 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 +127 -127
- package/src/engine/engine_loaders.callbacks.ts +137 -137
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +383 -383
- package/src/engine/engine_lods.ts +189 -189
- package/src/engine/engine_mainloop_utils.ts +488 -488
- 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 +434 -434
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +722 -722
- 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 +841 -845
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1603 -1603
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_pmrem.ts +83 -83
- package/src/engine/engine_scenelighting.ts +315 -315
- 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 +81 -81
- 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 +941 -941
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +209 -209
- package/src/engine/engine_types.ts +739 -739
- package/src/engine/engine_typestore.ts +63 -63
- package/src/engine/engine_util_decorator.ts +136 -136
- package/src/engine/engine_utils.ts +899 -899
- package/src/engine/engine_utils_attributes.ts +72 -72
- package/src/engine/engine_utils_format.ts +280 -280
- package/src/engine/engine_utils_qrcode.ts +266 -266
- 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 +290 -290
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +81 -81
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +188 -188
- 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 +146 -146
- 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 +384 -384
- package/src/engine/js-extensions/RGBAColor.ts +126 -126
- package/src/engine/js-extensions/Vector.ts +24 -24
- package/src/engine/js-extensions/index.ts +5 -5
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +127 -127
- 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 +298 -298
- 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 +103 -103
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +573 -573
- package/src/engine/webcomponents/needle menu/needle-menu.ts +1166 -1166
- 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 +84 -84
- package/src/engine/webcomponents/needle-engine.extras.ts +16 -16
- package/src/engine/webcomponents/needle-engine.loading.ts +404 -404
- package/src/engine/webcomponents/needle-engine.ts +959 -959
- package/src/engine/xr/NeedleXRController.ts +1182 -1182
- package/src/engine/xr/NeedleXRSession.ts +1656 -1658
- 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 +567 -567
- package/src/engine-components/AnimationCurve.ts +153 -153
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +38 -38
- package/src/engine-components/Animator.ts +398 -398
- package/src/engine-components/AnimatorController.ts +1315 -1315
- 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 +725 -725
- package/src/engine-components/CameraUtils.ts +132 -132
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +400 -400
- package/src/engine-components/Component.ts +1301 -1301
- package/src/engine-components/ContactShadows.ts +535 -535
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1622 -1622
- package/src/engine-components/DropListener.ts +744 -744
- package/src/engine-components/Duplicatable.ts +199 -199
- package/src/engine-components/EventList.ts +283 -283
- package/src/engine-components/EventTrigger.ts +73 -73
- 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 +359 -359
- package/src/engine-components/Interactable.ts +17 -17
- 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 +38 -38
- package/src/engine-components/NeedleMenu.ts +85 -85
- package/src/engine-components/NestedGltf.ts +98 -98
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1087 -1087
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +232 -232
- package/src/engine-components/Renderer.ts +893 -893
- package/src/engine-components/RendererInstancing.ts +855 -891
- package/src/engine-components/RendererLightmap.ts +211 -211
- package/src/engine-components/RigidBody.ts +531 -531
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/SeeThrough.ts +302 -302
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +440 -451
- 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 +486 -486
- 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 +228 -228
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +62 -62
- 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 +228 -228
- package/src/engine-components/debug/LogStats.ts +22 -22
- 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 +2538 -2538
- package/src/engine-components/export/usdz/USDZExporter.ts +713 -713
- 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 +1253 -1253
- 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/physics/Attractor.ts +44 -44
- 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 +586 -586
- package/src/engine-components/postprocessing/Volume.ts +427 -427
- 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/splines/Spline.ts +287 -287
- package/src/engine-components/splines/SplineUtils.ts +33 -33
- package/src/engine-components/splines/SplineWalker.ts +195 -195
- package/src/engine-components/splines/index.ts +2 -2
- package/src/engine-components/timeline/PlayableDirector.ts +782 -782
- package/src/engine-components/timeline/SignalAsset.ts +155 -155
- package/src/engine-components/timeline/TimelineModels.ts +136 -136
- package/src/engine-components/timeline/TimelineTracks.ts +994 -994
- 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 +853 -853
- package/src/engine-components/ui/Graphic.ts +287 -287
- 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 +70 -70
- package/src/engine-components/ui/Raycaster.ts +121 -121
- 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 +587 -587
- 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 +98 -98
- package/src/engine-components/utils/OpenURL.ts +115 -115
- package/src/engine-components/web/Clickthrough.ts +105 -105
- package/src/engine-components/web/CursorFollow.ts +144 -144
- package/src/engine-components/web/HoverAnimation.ts +101 -101
- package/src/engine-components/web/ScrollFollow.ts +513 -513
- package/src/engine-components/web/ViewBox.ts +320 -320
- package/src/engine-components/web/index.ts +4 -4
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +13 -13
- package/src/engine-components/webxr/WebARCameraBackground.ts +180 -180
- package/src/engine-components/webxr/WebARSessionRoot.ts +882 -882
- package/src/engine-components/webxr/WebXR.ts +612 -616
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +649 -649
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +81 -81
- package/src/engine-components/webxr/XRFlag.ts +150 -150
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +130 -130
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +377 -377
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +561 -561
- 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 +13 -13
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +19 -19
- 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 -72
- package/dist/generateMeshBVH.worker-D1Vr8UHG.js +0 -21
- package/src/engine/debug/debug_spector.ts +0 -43
|
@@ -1,514 +1,514 @@
|
|
|
1
|
-
// For firefox ViewTimeline support
|
|
2
|
-
import "scroll-timeline-polyfill/dist/scroll-timeline.js";
|
|
3
|
-
|
|
4
|
-
import { Box3, Object3D } from "three";
|
|
5
|
-
|
|
6
|
-
import { isDevEnvironment } from "../../engine/debug/debug.js";
|
|
7
|
-
import { Mathf } from "../../engine/engine_math.js";
|
|
8
|
-
import { serializable } from "../../engine/engine_serialization.js";
|
|
9
|
-
import { getBoundingBox, setVisibleInCustomShadowRendering } from "../../engine/engine_three_utils.js";
|
|
10
|
-
import { getParam } from "../../engine/engine_utils.js";
|
|
11
|
-
import { Animation } from "../Animation.js";
|
|
12
|
-
import { Animator } from "../Animator.js";
|
|
13
|
-
import { AudioSource } from "../AudioSource.js";
|
|
14
|
-
import { Behaviour } from "../Component.js";
|
|
15
|
-
import { EventList } from "../EventList.js";
|
|
16
|
-
import { Light } from "../Light.js";
|
|
17
|
-
import { SplineWalker } from "../splines/SplineWalker.js";
|
|
18
|
-
import { PlayableDirector } from "../timeline/PlayableDirector.js";
|
|
19
|
-
import { ScrollMarkerModel } from "../timeline/TimelineModels.js";
|
|
20
|
-
|
|
21
|
-
const debug = getParam("debugscroll");
|
|
22
|
-
|
|
23
|
-
type ScrollFollowEvent = {
|
|
24
|
-
/** Event type */
|
|
25
|
-
type: "change",
|
|
26
|
-
/** Current scroll value */
|
|
27
|
-
value: number,
|
|
28
|
-
/** ScrollFollow component that raised the event */
|
|
29
|
-
component: ScrollFollow,
|
|
30
|
-
/** Call to prevent invocation of default (e.g. updating targets) */
|
|
31
|
-
preventDefault: () => void,
|
|
32
|
-
defaultPrevented: boolean,
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* The ScrollFollow component allows you to link the scroll position of the page (or a specific element) to one or more target objects.
|
|
37
|
-
* This can be used to create scroll-based animations, audio playback, or other effects. For example you can link the scroll position to a timeline (PlayableDirector) to create scroll-based storytelling effects or to an Animator component to change the animation state based on scroll.
|
|
38
|
-
*
|
|
39
|
-
* Assign {@link target} objects to the component to have them updated based on the current scroll position (check the 'target' property for supported types).
|
|
40
|
-
*
|
|
41
|
-
* @link Example at https://scrollytelling-2-z23hmxby7c6x-u30ld.needle.run/
|
|
42
|
-
* @link Template at https://github.com/needle-engine/scrollytelling-template
|
|
43
|
-
* @link [Scrollytelling Bike Demo](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/)
|
|
44
|
-
*
|
|
45
|
-
* ## How to use with an Animator
|
|
46
|
-
* 1. Create an Animator component and set up a float parameter named "scroll".
|
|
47
|
-
* 2. Create transitions between animation states based on the "scroll" parameter (e.g. from 0 to 1).
|
|
48
|
-
* 3. Add a ScrollFollow component to the same GameObject or another GameObject in the scene.
|
|
49
|
-
* 4. Assign the Animator component to the ScrollFollow's target property.
|
|
50
|
-
*
|
|
51
|
-
* ## How to use with a PlayableDirector (timeline)
|
|
52
|
-
* 1. Create a PlayableDirector component and set up a timeline asset.
|
|
53
|
-
* 2. Add a ScrollFollow component to the same GameObject or another GameObject in the scene.
|
|
54
|
-
* 3. Assign the PlayableDirector component to the ScrollFollow's target property.
|
|
55
|
-
* 4. The timeline will now scrub based on the scroll position of the page.
|
|
56
|
-
* 5. (Optional) Add ScrollMarker markers to your HTML to define specific points in the timeline that correspond to elements on the page. For example:
|
|
57
|
-
* ```html
|
|
58
|
-
* <div data-timeline-marker="0.0">Start of Timeline</div>
|
|
59
|
-
* <div data-timeline-marker="0.5">Middle of Timeline</div>
|
|
60
|
-
* <div data-timeline-marker="1.0">End of Timeline</div>
|
|
61
|
-
* ```
|
|
62
|
-
*
|
|
63
|
-
* @category Web
|
|
64
|
-
* @group Components
|
|
65
|
-
* @component
|
|
66
|
-
*/
|
|
67
|
-
export class ScrollFollow extends Behaviour {
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Target object(s) to follow the scroll position of the page.
|
|
71
|
-
*
|
|
72
|
-
* Supported target types:
|
|
73
|
-
* - PlayableDirector (timeline), the scroll position will be mapped to the timeline time
|
|
74
|
-
* - Animator, the scroll position will be set to a float parameter named "scroll"
|
|
75
|
-
* - Animation, the scroll position will be mapped to the animation time
|
|
76
|
-
* - AudioSource, the scroll position will be mapped to the audio time
|
|
77
|
-
* - SplineWalker, the scroll position will be mapped to the position01 property
|
|
78
|
-
* - Light, the scroll position will be mapped to the intensity property
|
|
79
|
-
* - Object3D, the object will move vertically based on the scroll position
|
|
80
|
-
* - Any object with a `scroll` property (number or function)
|
|
81
|
-
*/
|
|
82
|
-
@serializable([Behaviour, Object3D])
|
|
83
|
-
target: object[] | object | null = null;
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Damping for the movement, set to 0 for instant movement
|
|
87
|
-
* @default 0
|
|
88
|
-
*/
|
|
89
|
-
@serializable()
|
|
90
|
-
damping: number = 0;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* If true, the scroll value will be inverted (e.g. scrolling down will result in a value of 0)
|
|
94
|
-
* @default false
|
|
95
|
-
*/
|
|
96
|
-
@serializable()
|
|
97
|
-
invert: boolean = false;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* **Experimental - might change in future updates**
|
|
102
|
-
* If set, the scroll position will be read from the specified element instead of the window.
|
|
103
|
-
* Use a CSS selector to specify the element, e.g. `#my-scrollable-div` or `.scroll-container`.
|
|
104
|
-
* @default null
|
|
105
|
-
*/
|
|
106
|
-
@serializable()
|
|
107
|
-
htmlSelector: string | null = null;
|
|
108
|
-
|
|
109
|
-
@serializable()
|
|
110
|
-
mode: "window" = "window";
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Event fired when the scroll position changes
|
|
114
|
-
*/
|
|
115
|
-
@serializable(EventList)
|
|
116
|
-
changed: EventList<ScrollFollowEvent> = new EventList<ScrollFollowEvent>();
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Current scroll value in "pages" (0 = top of page, 1 = bottom of page)
|
|
120
|
-
*/
|
|
121
|
-
get currentValue() {
|
|
122
|
-
return this._current_value;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
private _current_value: number = 0;
|
|
126
|
-
private _target_value: number = 0;
|
|
127
|
-
private _appliedValue: number = -1;
|
|
128
|
-
private _needsUpdate = false;
|
|
129
|
-
private _firstUpdate = false;
|
|
130
|
-
|
|
131
|
-
awake() {
|
|
132
|
-
this._firstUpdate = true;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
/** @internal */
|
|
137
|
-
onEnable() {
|
|
138
|
-
window.addEventListener("wheel", this.updateCurrentScrollValue, { passive: true });
|
|
139
|
-
this._appliedValue = -1;
|
|
140
|
-
this._needsUpdate = true;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/** @internal */
|
|
144
|
-
onDisable() {
|
|
145
|
-
window.removeEventListener("wheel", this.updateCurrentScrollValue);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/** @internal */
|
|
149
|
-
lateUpdate() {
|
|
150
|
-
|
|
151
|
-
this.updateCurrentScrollValue();
|
|
152
|
-
|
|
153
|
-
if (this._target_value >= 0) {
|
|
154
|
-
if (this.damping > 0 && !this._firstUpdate) { // apply damping
|
|
155
|
-
this._current_value = Mathf.lerp(this._current_value, this._target_value, this.context.time.deltaTime / this.damping);
|
|
156
|
-
if (Math.abs(this._current_value - this._target_value) < 0.001) {
|
|
157
|
-
this._current_value = this._target_value;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
this._current_value = this._target_value;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (this._needsUpdate || this._current_value !== this._appliedValue)
|
|
166
|
-
{
|
|
167
|
-
this._appliedValue = this._current_value;
|
|
168
|
-
this._needsUpdate = false;
|
|
169
|
-
|
|
170
|
-
let defaultPrevented = false;
|
|
171
|
-
if (this.changed.listenerCount > 0) {
|
|
172
|
-
// fire change event
|
|
173
|
-
const event: ScrollFollowEvent = {
|
|
174
|
-
type: "change",
|
|
175
|
-
value: this._current_value,
|
|
176
|
-
component: this,
|
|
177
|
-
preventDefault: () => { event.defaultPrevented = true; },
|
|
178
|
-
defaultPrevented: false,
|
|
179
|
-
};
|
|
180
|
-
this.changed.invoke(event);
|
|
181
|
-
defaultPrevented = event.defaultPrevented;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// if not prevented apply scroll
|
|
185
|
-
if (!defaultPrevented) {
|
|
186
|
-
|
|
187
|
-
const value = this.invert ? 1 - this._current_value : this._current_value;
|
|
188
|
-
|
|
189
|
-
// apply scroll to target(s)
|
|
190
|
-
if (Array.isArray(this.target)) {
|
|
191
|
-
this.target.forEach(t => t && this.applyScroll(t, value));
|
|
192
|
-
}
|
|
193
|
-
else if (this.target) {
|
|
194
|
-
this.applyScroll(this.target, value);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (debug && this.context.time.frame % 30 === 0) {
|
|
198
|
-
console.debug(`[ScrollFollow] ${this._current_value.toFixed(5)} — ${(this._target_value * 100).toFixed(0)}%, targets [${Array.isArray(this.target) ? this.target.length : 1}]`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
this._firstUpdate = false;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
private _lastSelectorValue: string | null = null;
|
|
207
|
-
private _lastSelectorElement: Element | null = null;
|
|
208
|
-
|
|
209
|
-
private updateCurrentScrollValue = () => {
|
|
210
|
-
|
|
211
|
-
switch (this.mode) {
|
|
212
|
-
case "window":
|
|
213
|
-
if (this.htmlSelector?.length) {
|
|
214
|
-
if (this.htmlSelector !== this._lastSelectorValue) {
|
|
215
|
-
this._lastSelectorElement = document.querySelector(this.htmlSelector);
|
|
216
|
-
this._lastSelectorValue = this.htmlSelector;
|
|
217
|
-
}
|
|
218
|
-
if (this._lastSelectorElement) {
|
|
219
|
-
const rect = this._lastSelectorElement.getBoundingClientRect();
|
|
220
|
-
this._target_value = -rect.top / (rect.height - window.innerHeight);
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
if (window.document.body.scrollHeight <= window.innerHeight) {
|
|
226
|
-
// If the page is not scrollable we can still increment the scroll value to allow triggering timelines etc.
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
const diff = window.document.body.scrollHeight - window.innerHeight;
|
|
230
|
-
this._target_value = window.scrollY / (diff || 1);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
if (isNaN(this._target_value) || !isFinite(this._target_value)) this._target_value = -1;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
private applyScroll(target: object, value: number) {
|
|
242
|
-
|
|
243
|
-
if (!target) return;
|
|
244
|
-
|
|
245
|
-
if (target instanceof PlayableDirector) {
|
|
246
|
-
this.handleTimelineTarget(target, value);
|
|
247
|
-
if (target.isPlaying) target.pause();
|
|
248
|
-
target.evaluate();
|
|
249
|
-
}
|
|
250
|
-
else if (target instanceof Animator) {
|
|
251
|
-
target.setFloat("scroll", value);
|
|
252
|
-
}
|
|
253
|
-
else if (target instanceof Animation) {
|
|
254
|
-
target.time = value * target.duration;
|
|
255
|
-
}
|
|
256
|
-
else if (target instanceof AudioSource) {
|
|
257
|
-
if (!target.duration) return;
|
|
258
|
-
target.time = value * target.duration;
|
|
259
|
-
}
|
|
260
|
-
else if (target instanceof SplineWalker) {
|
|
261
|
-
target.position01 = value;
|
|
262
|
-
}
|
|
263
|
-
else if (target instanceof Light) {
|
|
264
|
-
target.intensity = value;
|
|
265
|
-
}
|
|
266
|
-
else if (target instanceof Object3D) {
|
|
267
|
-
const t = target as any;
|
|
268
|
-
// When objects are assigned they're expected to move vertically based on scroll
|
|
269
|
-
if (t["needle:scrollbounds"] === undefined) {
|
|
270
|
-
t["needle:scrollbounds"] = getBoundingBox(target) || null;
|
|
271
|
-
}
|
|
272
|
-
const bounds = t["needle:scrollbounds"] as Box3;
|
|
273
|
-
if (bounds) {
|
|
274
|
-
// TODO: remap position to use upper screen edge and lower edge instead of center
|
|
275
|
-
target.position.y = -bounds.min.y - value * (bounds.max.y - bounds.min.y);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
else if ("scroll" in target) {
|
|
279
|
-
if (typeof target.scroll === "number") {
|
|
280
|
-
target.scroll = value;
|
|
281
|
-
}
|
|
282
|
-
else if (typeof target.scroll === "function") {
|
|
283
|
-
target.scroll(value);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
private handleTimelineTarget(director: PlayableDirector, value: number) {
|
|
291
|
-
|
|
292
|
-
const duration = director.duration;
|
|
293
|
-
let markersArray = timelineMarkerArrays.get(director);
|
|
294
|
-
|
|
295
|
-
// Create markers array
|
|
296
|
-
if (!markersArray) {
|
|
297
|
-
markersArray = [];
|
|
298
|
-
timelineMarkerArrays.set(director, markersArray);
|
|
299
|
-
|
|
300
|
-
let markerIndex = 0;
|
|
301
|
-
|
|
302
|
-
for (const marker of director.foreachMarker<ScrollMarkerModel & { element?: HTMLElement | null, needsUpdate?: boolean, timeline?: ViewTimeline }>("ScrollMarker")) {
|
|
303
|
-
|
|
304
|
-
const index = markerIndex++;
|
|
305
|
-
|
|
306
|
-
// Get marker elements from DOM
|
|
307
|
-
if ((marker.element === undefined || marker.needsUpdate === true || /** element is not in DOM anymore? */ (marker.element && !marker.element?.parentNode))) {
|
|
308
|
-
marker.needsUpdate = false;
|
|
309
|
-
try {
|
|
310
|
-
// TODO: with this it's currently not possible to remap markers from HTML. For example if I have two sections and I want to now use the marker["center"] multiple times to stay at that marker for a longer time
|
|
311
|
-
marker.element = tryGetElementsForSelector(index) as HTMLElement | null;
|
|
312
|
-
if (debug) console.debug(`ScrollMarker #${index} (${marker.time.toFixed(2)}) found`, marker.element);
|
|
313
|
-
if (!marker.element) {
|
|
314
|
-
if (debug || isDevEnvironment()) console.warn(`No HTML element found for ScrollMarker: ${marker.name} (index ${index})`);
|
|
315
|
-
continue;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
catch (error) {
|
|
319
|
-
marker.element = null;
|
|
320
|
-
console.error("ScrollMarker selector is not valid: " + marker.name + "\n", error);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// skip markers without element (e.g. if the selector didn't return any element)
|
|
325
|
-
if (!marker.element) continue;
|
|
326
|
-
|
|
327
|
-
markersArray.push(marker);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// If the timeline has no markers defined we can use timeline-marker elements in the DOM. These must define times then
|
|
331
|
-
if (markersArray.length <= 0) {
|
|
332
|
-
const markers = document.querySelectorAll(`[data-timeline-marker]`);
|
|
333
|
-
markers.forEach((element) => {
|
|
334
|
-
const value = element.getAttribute("data-timeline-marker");
|
|
335
|
-
const time = parseFloat(value || ("NaN"));
|
|
336
|
-
if (!isNaN(time)) {
|
|
337
|
-
markersArray!.push({
|
|
338
|
-
time,
|
|
339
|
-
element: element as HTMLElement,
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
else if (isDevEnvironment() || debug) {
|
|
343
|
-
console.warn("[ScrollFollow] data-timeline-marker attribute is not a valid number. Supported are numbers only (e.g. <div data-timeline-marker=\"0.5\">)");
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// Init ViewTimeline for markers
|
|
349
|
-
for (const marker of markersArray) {
|
|
350
|
-
if (marker.element) {
|
|
351
|
-
// https://scroll-driven-animations.style/tools/view-timeline/ranges
|
|
352
|
-
/** @ts-ignore */
|
|
353
|
-
marker.timeline = new ViewTimeline({
|
|
354
|
-
subject: marker.element,
|
|
355
|
-
axis: 'block', // https://drafts.csswg.org/scroll-animations/#scroll-notation
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
weightsArray.length = 0;
|
|
363
|
-
let sum = 0;
|
|
364
|
-
const oneFrameTime = 1 / 60;
|
|
365
|
-
|
|
366
|
-
// We keep a separate count here in case there are some markers that could not be resolved so point to *invalid* elements - the timeline should fallback to 0-1 scroll behaviour then
|
|
367
|
-
let markerCount = 0;
|
|
368
|
-
for (let i = 0; i < markersArray.length; i++) {
|
|
369
|
-
const marker = markersArray[i];
|
|
370
|
-
if (!marker.element) continue;
|
|
371
|
-
const nextMarker = markersArray[i + 1];
|
|
372
|
-
|
|
373
|
-
const nextTime = nextMarker
|
|
374
|
-
? (nextMarker.time - oneFrameTime)
|
|
375
|
-
: duration;
|
|
376
|
-
|
|
377
|
-
markerCount += 1;
|
|
378
|
-
|
|
379
|
-
const timeline = marker.timeline;
|
|
380
|
-
if (timeline) {
|
|
381
|
-
const time01 = calculateTimelinePositionNormalized(timeline);
|
|
382
|
-
// remap 0-1 to 0 - 1 - 0 (full weight at center)
|
|
383
|
-
const weight = 1 - Math.abs(time01 - 0.5) * 2;
|
|
384
|
-
const name = `marker${i}`;
|
|
385
|
-
if (time01 > 0 && time01 <= 1) {
|
|
386
|
-
const lerpTime = marker.time + (nextTime - marker.time) * time01;
|
|
387
|
-
weightsArray.push({ name, time: lerpTime, weight: weight });
|
|
388
|
-
sum += weight;
|
|
389
|
-
}
|
|
390
|
-
// Before the first marker is reached
|
|
391
|
-
else if (i === 0 && time01 <= 0) {
|
|
392
|
-
weightsArray.push({ name, time: 0, weight: 1 });
|
|
393
|
-
sum += 1;
|
|
394
|
-
}
|
|
395
|
-
// After the last marker is reached
|
|
396
|
-
else if (i === markersArray.length - 1 && time01 >= 1) {
|
|
397
|
-
weightsArray.push({ name, time: duration, weight: 1 });
|
|
398
|
-
sum += 1;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (weightsArray.length <= 0 && markerCount <= 0) {
|
|
404
|
-
director.time = value * duration;
|
|
405
|
-
}
|
|
406
|
-
else if (weightsArray.length > 0) {
|
|
407
|
-
// normalize and calculate weighted time
|
|
408
|
-
let time = weightsArray[0].time; // fallback to first time
|
|
409
|
-
if (weightsArray.length > 1) {
|
|
410
|
-
for (const entry of weightsArray) {
|
|
411
|
-
const weight = entry.weight / Math.max(0.00001, sum);
|
|
412
|
-
// console.log(weight.toFixed(2))
|
|
413
|
-
// lerp time based on weight
|
|
414
|
-
const diff = Math.abs(entry.time - time);
|
|
415
|
-
time += diff * weight;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
if (this.damping <= 0 || this._firstUpdate) {
|
|
419
|
-
director.time = time;
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
director.time = Mathf.lerp(director.time, time, this.context.time.deltaTime / this.damping);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
const delta = Math.abs(director.time - time);
|
|
426
|
-
if (delta > .001) { // if the time is > 1/100th of a second off we need another update
|
|
427
|
-
this._needsUpdate = true;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
if (debug && this.context.time.frame % 30 === 0) {
|
|
431
|
-
console.log(`[ScrollFollow ] Timeline ${director.name}: ${time.toFixed(3)}`, weightsArray.map(w => `[${w.name} ${(w.weight * 100).toFixed(0)}%]`).join(", "));
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
const timelineMarkerArrays: WeakMap<PlayableDirector,
|
|
440
|
-
Array<{
|
|
441
|
-
time: number,
|
|
442
|
-
element?: HTMLElement | null | undefined,
|
|
443
|
-
timeline?: ViewTimeline,
|
|
444
|
-
}>
|
|
445
|
-
> = new WeakMap();
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
type OverlapInfo = {
|
|
449
|
-
name: string,
|
|
450
|
-
/** Marker time */
|
|
451
|
-
time: number,
|
|
452
|
-
/** Overlap in pixels */
|
|
453
|
-
weight: number,
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
const weightsArray: OverlapInfo[] = [];
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
// type SelectorCache = {
|
|
460
|
-
// /** The selector used to query the *elements */
|
|
461
|
-
// selector: string,
|
|
462
|
-
// elements: Element[] | null,
|
|
463
|
-
// usedElementCount: number,
|
|
464
|
-
// }
|
|
465
|
-
// const querySelectorResults: Array<SelectorCache> = [];
|
|
466
|
-
|
|
467
|
-
const needleScrollMarkerCache = new Array<Element>();
|
|
468
|
-
let needsScrollMarkerRefresh = true;
|
|
469
|
-
|
|
470
|
-
function tryGetElementsForSelector(index: number): Element | null {
|
|
471
|
-
|
|
472
|
-
if (!needsScrollMarkerRefresh) {
|
|
473
|
-
const element = needleScrollMarkerCache[index] || null;
|
|
474
|
-
return element;
|
|
475
|
-
}
|
|
476
|
-
needsScrollMarkerRefresh = false;
|
|
477
|
-
needleScrollMarkerCache.length = 0;
|
|
478
|
-
const markers = document.querySelectorAll(`[data-timeline-marker]`);
|
|
479
|
-
markers.forEach((m, i) => {
|
|
480
|
-
needleScrollMarkerCache[i] = m;
|
|
481
|
-
});
|
|
482
|
-
needsScrollMarkerRefresh = false;
|
|
483
|
-
return tryGetElementsForSelector(index);
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
// #region ScrollTimeline
|
|
488
|
-
|
|
489
|
-
function calculateTimelinePositionNormalized(timeline: ViewTimeline) {
|
|
490
|
-
if (!timeline.source) return 0;
|
|
491
|
-
const currentTime = timeline.currentTime;
|
|
492
|
-
const duration = timeline.duration;
|
|
493
|
-
let durationValue = 1;
|
|
494
|
-
if (duration.unit === "seconds") {
|
|
495
|
-
durationValue = duration.value;
|
|
496
|
-
}
|
|
497
|
-
else if (duration.unit === "percent") {
|
|
498
|
-
durationValue = duration.value;
|
|
499
|
-
}
|
|
500
|
-
const t01 = currentTime.unit === "seconds" ? (currentTime.value / durationValue) : (currentTime.value / 100);
|
|
501
|
-
return t01;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
declare global {
|
|
506
|
-
interface ViewTimeline {
|
|
507
|
-
axis: 'block' | 'inline';
|
|
508
|
-
currentTime: { unit: 'seconds' | 'percent', value: number };
|
|
509
|
-
duration: { unit: 'seconds' | 'percent', value: number };
|
|
510
|
-
source: Element | null;
|
|
511
|
-
startOffset: { unit: 'px', value: number };
|
|
512
|
-
endOffset: { unit: 'px', value: number };
|
|
513
|
-
}
|
|
1
|
+
// For firefox ViewTimeline support
|
|
2
|
+
import "scroll-timeline-polyfill/dist/scroll-timeline.js";
|
|
3
|
+
|
|
4
|
+
import { Box3, Object3D } from "three";
|
|
5
|
+
|
|
6
|
+
import { isDevEnvironment } from "../../engine/debug/debug.js";
|
|
7
|
+
import { Mathf } from "../../engine/engine_math.js";
|
|
8
|
+
import { serializable } from "../../engine/engine_serialization.js";
|
|
9
|
+
import { getBoundingBox, setVisibleInCustomShadowRendering } from "../../engine/engine_three_utils.js";
|
|
10
|
+
import { getParam } from "../../engine/engine_utils.js";
|
|
11
|
+
import { Animation } from "../Animation.js";
|
|
12
|
+
import { Animator } from "../Animator.js";
|
|
13
|
+
import { AudioSource } from "../AudioSource.js";
|
|
14
|
+
import { Behaviour } from "../Component.js";
|
|
15
|
+
import { EventList } from "../EventList.js";
|
|
16
|
+
import { Light } from "../Light.js";
|
|
17
|
+
import { SplineWalker } from "../splines/SplineWalker.js";
|
|
18
|
+
import { PlayableDirector } from "../timeline/PlayableDirector.js";
|
|
19
|
+
import { ScrollMarkerModel } from "../timeline/TimelineModels.js";
|
|
20
|
+
|
|
21
|
+
const debug = getParam("debugscroll");
|
|
22
|
+
|
|
23
|
+
type ScrollFollowEvent = {
|
|
24
|
+
/** Event type */
|
|
25
|
+
type: "change",
|
|
26
|
+
/** Current scroll value */
|
|
27
|
+
value: number,
|
|
28
|
+
/** ScrollFollow component that raised the event */
|
|
29
|
+
component: ScrollFollow,
|
|
30
|
+
/** Call to prevent invocation of default (e.g. updating targets) */
|
|
31
|
+
preventDefault: () => void,
|
|
32
|
+
defaultPrevented: boolean,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The ScrollFollow component allows you to link the scroll position of the page (or a specific element) to one or more target objects.
|
|
37
|
+
* This can be used to create scroll-based animations, audio playback, or other effects. For example you can link the scroll position to a timeline (PlayableDirector) to create scroll-based storytelling effects or to an Animator component to change the animation state based on scroll.
|
|
38
|
+
*
|
|
39
|
+
* Assign {@link target} objects to the component to have them updated based on the current scroll position (check the 'target' property for supported types).
|
|
40
|
+
*
|
|
41
|
+
* @link Example at https://scrollytelling-2-z23hmxby7c6x-u30ld.needle.run/
|
|
42
|
+
* @link Template at https://github.com/needle-engine/scrollytelling-template
|
|
43
|
+
* @link [Scrollytelling Bike Demo](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/)
|
|
44
|
+
*
|
|
45
|
+
* ## How to use with an Animator
|
|
46
|
+
* 1. Create an Animator component and set up a float parameter named "scroll".
|
|
47
|
+
* 2. Create transitions between animation states based on the "scroll" parameter (e.g. from 0 to 1).
|
|
48
|
+
* 3. Add a ScrollFollow component to the same GameObject or another GameObject in the scene.
|
|
49
|
+
* 4. Assign the Animator component to the ScrollFollow's target property.
|
|
50
|
+
*
|
|
51
|
+
* ## How to use with a PlayableDirector (timeline)
|
|
52
|
+
* 1. Create a PlayableDirector component and set up a timeline asset.
|
|
53
|
+
* 2. Add a ScrollFollow component to the same GameObject or another GameObject in the scene.
|
|
54
|
+
* 3. Assign the PlayableDirector component to the ScrollFollow's target property.
|
|
55
|
+
* 4. The timeline will now scrub based on the scroll position of the page.
|
|
56
|
+
* 5. (Optional) Add ScrollMarker markers to your HTML to define specific points in the timeline that correspond to elements on the page. For example:
|
|
57
|
+
* ```html
|
|
58
|
+
* <div data-timeline-marker="0.0">Start of Timeline</div>
|
|
59
|
+
* <div data-timeline-marker="0.5">Middle of Timeline</div>
|
|
60
|
+
* <div data-timeline-marker="1.0">End of Timeline</div>
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @category Web
|
|
64
|
+
* @group Components
|
|
65
|
+
* @component
|
|
66
|
+
*/
|
|
67
|
+
export class ScrollFollow extends Behaviour {
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Target object(s) to follow the scroll position of the page.
|
|
71
|
+
*
|
|
72
|
+
* Supported target types:
|
|
73
|
+
* - PlayableDirector (timeline), the scroll position will be mapped to the timeline time
|
|
74
|
+
* - Animator, the scroll position will be set to a float parameter named "scroll"
|
|
75
|
+
* - Animation, the scroll position will be mapped to the animation time
|
|
76
|
+
* - AudioSource, the scroll position will be mapped to the audio time
|
|
77
|
+
* - SplineWalker, the scroll position will be mapped to the position01 property
|
|
78
|
+
* - Light, the scroll position will be mapped to the intensity property
|
|
79
|
+
* - Object3D, the object will move vertically based on the scroll position
|
|
80
|
+
* - Any object with a `scroll` property (number or function)
|
|
81
|
+
*/
|
|
82
|
+
@serializable([Behaviour, Object3D])
|
|
83
|
+
target: object[] | object | null = null;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Damping for the movement, set to 0 for instant movement
|
|
87
|
+
* @default 0
|
|
88
|
+
*/
|
|
89
|
+
@serializable()
|
|
90
|
+
damping: number = 0;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* If true, the scroll value will be inverted (e.g. scrolling down will result in a value of 0)
|
|
94
|
+
* @default false
|
|
95
|
+
*/
|
|
96
|
+
@serializable()
|
|
97
|
+
invert: boolean = false;
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* **Experimental - might change in future updates**
|
|
102
|
+
* If set, the scroll position will be read from the specified element instead of the window.
|
|
103
|
+
* Use a CSS selector to specify the element, e.g. `#my-scrollable-div` or `.scroll-container`.
|
|
104
|
+
* @default null
|
|
105
|
+
*/
|
|
106
|
+
@serializable()
|
|
107
|
+
htmlSelector: string | null = null;
|
|
108
|
+
|
|
109
|
+
@serializable()
|
|
110
|
+
mode: "window" = "window";
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Event fired when the scroll position changes
|
|
114
|
+
*/
|
|
115
|
+
@serializable(EventList)
|
|
116
|
+
changed: EventList<ScrollFollowEvent> = new EventList<ScrollFollowEvent>();
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Current scroll value in "pages" (0 = top of page, 1 = bottom of page)
|
|
120
|
+
*/
|
|
121
|
+
get currentValue() {
|
|
122
|
+
return this._current_value;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private _current_value: number = 0;
|
|
126
|
+
private _target_value: number = 0;
|
|
127
|
+
private _appliedValue: number = -1;
|
|
128
|
+
private _needsUpdate = false;
|
|
129
|
+
private _firstUpdate = false;
|
|
130
|
+
|
|
131
|
+
awake() {
|
|
132
|
+
this._firstUpdate = true;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
/** @internal */
|
|
137
|
+
onEnable() {
|
|
138
|
+
window.addEventListener("wheel", this.updateCurrentScrollValue, { passive: true });
|
|
139
|
+
this._appliedValue = -1;
|
|
140
|
+
this._needsUpdate = true;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** @internal */
|
|
144
|
+
onDisable() {
|
|
145
|
+
window.removeEventListener("wheel", this.updateCurrentScrollValue);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** @internal */
|
|
149
|
+
lateUpdate() {
|
|
150
|
+
|
|
151
|
+
this.updateCurrentScrollValue();
|
|
152
|
+
|
|
153
|
+
if (this._target_value >= 0) {
|
|
154
|
+
if (this.damping > 0 && !this._firstUpdate) { // apply damping
|
|
155
|
+
this._current_value = Mathf.lerp(this._current_value, this._target_value, this.context.time.deltaTime / this.damping);
|
|
156
|
+
if (Math.abs(this._current_value - this._target_value) < 0.001) {
|
|
157
|
+
this._current_value = this._target_value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this._current_value = this._target_value;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (this._needsUpdate || this._current_value !== this._appliedValue)
|
|
166
|
+
{
|
|
167
|
+
this._appliedValue = this._current_value;
|
|
168
|
+
this._needsUpdate = false;
|
|
169
|
+
|
|
170
|
+
let defaultPrevented = false;
|
|
171
|
+
if (this.changed.listenerCount > 0) {
|
|
172
|
+
// fire change event
|
|
173
|
+
const event: ScrollFollowEvent = {
|
|
174
|
+
type: "change",
|
|
175
|
+
value: this._current_value,
|
|
176
|
+
component: this,
|
|
177
|
+
preventDefault: () => { event.defaultPrevented = true; },
|
|
178
|
+
defaultPrevented: false,
|
|
179
|
+
};
|
|
180
|
+
this.changed.invoke(event);
|
|
181
|
+
defaultPrevented = event.defaultPrevented;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// if not prevented apply scroll
|
|
185
|
+
if (!defaultPrevented) {
|
|
186
|
+
|
|
187
|
+
const value = this.invert ? 1 - this._current_value : this._current_value;
|
|
188
|
+
|
|
189
|
+
// apply scroll to target(s)
|
|
190
|
+
if (Array.isArray(this.target)) {
|
|
191
|
+
this.target.forEach(t => t && this.applyScroll(t, value));
|
|
192
|
+
}
|
|
193
|
+
else if (this.target) {
|
|
194
|
+
this.applyScroll(this.target, value);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (debug && this.context.time.frame % 30 === 0) {
|
|
198
|
+
console.debug(`[ScrollFollow] ${this._current_value.toFixed(5)} — ${(this._target_value * 100).toFixed(0)}%, targets [${Array.isArray(this.target) ? this.target.length : 1}]`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
this._firstUpdate = false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
private _lastSelectorValue: string | null = null;
|
|
207
|
+
private _lastSelectorElement: Element | null = null;
|
|
208
|
+
|
|
209
|
+
private updateCurrentScrollValue = () => {
|
|
210
|
+
|
|
211
|
+
switch (this.mode) {
|
|
212
|
+
case "window":
|
|
213
|
+
if (this.htmlSelector?.length) {
|
|
214
|
+
if (this.htmlSelector !== this._lastSelectorValue) {
|
|
215
|
+
this._lastSelectorElement = document.querySelector(this.htmlSelector);
|
|
216
|
+
this._lastSelectorValue = this.htmlSelector;
|
|
217
|
+
}
|
|
218
|
+
if (this._lastSelectorElement) {
|
|
219
|
+
const rect = this._lastSelectorElement.getBoundingClientRect();
|
|
220
|
+
this._target_value = -rect.top / (rect.height - window.innerHeight);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (window.document.body.scrollHeight <= window.innerHeight) {
|
|
226
|
+
// If the page is not scrollable we can still increment the scroll value to allow triggering timelines etc.
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
const diff = window.document.body.scrollHeight - window.innerHeight;
|
|
230
|
+
this._target_value = window.scrollY / (diff || 1);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (isNaN(this._target_value) || !isFinite(this._target_value)) this._target_value = -1;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
private applyScroll(target: object, value: number) {
|
|
242
|
+
|
|
243
|
+
if (!target) return;
|
|
244
|
+
|
|
245
|
+
if (target instanceof PlayableDirector) {
|
|
246
|
+
this.handleTimelineTarget(target, value);
|
|
247
|
+
if (target.isPlaying) target.pause();
|
|
248
|
+
target.evaluate();
|
|
249
|
+
}
|
|
250
|
+
else if (target instanceof Animator) {
|
|
251
|
+
target.setFloat("scroll", value);
|
|
252
|
+
}
|
|
253
|
+
else if (target instanceof Animation) {
|
|
254
|
+
target.time = value * target.duration;
|
|
255
|
+
}
|
|
256
|
+
else if (target instanceof AudioSource) {
|
|
257
|
+
if (!target.duration) return;
|
|
258
|
+
target.time = value * target.duration;
|
|
259
|
+
}
|
|
260
|
+
else if (target instanceof SplineWalker) {
|
|
261
|
+
target.position01 = value;
|
|
262
|
+
}
|
|
263
|
+
else if (target instanceof Light) {
|
|
264
|
+
target.intensity = value;
|
|
265
|
+
}
|
|
266
|
+
else if (target instanceof Object3D) {
|
|
267
|
+
const t = target as any;
|
|
268
|
+
// When objects are assigned they're expected to move vertically based on scroll
|
|
269
|
+
if (t["needle:scrollbounds"] === undefined) {
|
|
270
|
+
t["needle:scrollbounds"] = getBoundingBox(target) || null;
|
|
271
|
+
}
|
|
272
|
+
const bounds = t["needle:scrollbounds"] as Box3;
|
|
273
|
+
if (bounds) {
|
|
274
|
+
// TODO: remap position to use upper screen edge and lower edge instead of center
|
|
275
|
+
target.position.y = -bounds.min.y - value * (bounds.max.y - bounds.min.y);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
else if ("scroll" in target) {
|
|
279
|
+
if (typeof target.scroll === "number") {
|
|
280
|
+
target.scroll = value;
|
|
281
|
+
}
|
|
282
|
+
else if (typeof target.scroll === "function") {
|
|
283
|
+
target.scroll(value);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
private handleTimelineTarget(director: PlayableDirector, value: number) {
|
|
291
|
+
|
|
292
|
+
const duration = director.duration;
|
|
293
|
+
let markersArray = timelineMarkerArrays.get(director);
|
|
294
|
+
|
|
295
|
+
// Create markers array
|
|
296
|
+
if (!markersArray) {
|
|
297
|
+
markersArray = [];
|
|
298
|
+
timelineMarkerArrays.set(director, markersArray);
|
|
299
|
+
|
|
300
|
+
let markerIndex = 0;
|
|
301
|
+
|
|
302
|
+
for (const marker of director.foreachMarker<ScrollMarkerModel & { element?: HTMLElement | null, needsUpdate?: boolean, timeline?: ViewTimeline }>("ScrollMarker")) {
|
|
303
|
+
|
|
304
|
+
const index = markerIndex++;
|
|
305
|
+
|
|
306
|
+
// Get marker elements from DOM
|
|
307
|
+
if ((marker.element === undefined || marker.needsUpdate === true || /** element is not in DOM anymore? */ (marker.element && !marker.element?.parentNode))) {
|
|
308
|
+
marker.needsUpdate = false;
|
|
309
|
+
try {
|
|
310
|
+
// TODO: with this it's currently not possible to remap markers from HTML. For example if I have two sections and I want to now use the marker["center"] multiple times to stay at that marker for a longer time
|
|
311
|
+
marker.element = tryGetElementsForSelector(index) as HTMLElement | null;
|
|
312
|
+
if (debug) console.debug(`ScrollMarker #${index} (${marker.time.toFixed(2)}) found`, marker.element);
|
|
313
|
+
if (!marker.element) {
|
|
314
|
+
if (debug || isDevEnvironment()) console.warn(`No HTML element found for ScrollMarker: ${marker.name} (index ${index})`);
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
marker.element = null;
|
|
320
|
+
console.error("ScrollMarker selector is not valid: " + marker.name + "\n", error);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// skip markers without element (e.g. if the selector didn't return any element)
|
|
325
|
+
if (!marker.element) continue;
|
|
326
|
+
|
|
327
|
+
markersArray.push(marker);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// If the timeline has no markers defined we can use timeline-marker elements in the DOM. These must define times then
|
|
331
|
+
if (markersArray.length <= 0) {
|
|
332
|
+
const markers = document.querySelectorAll(`[data-timeline-marker]`);
|
|
333
|
+
markers.forEach((element) => {
|
|
334
|
+
const value = element.getAttribute("data-timeline-marker");
|
|
335
|
+
const time = parseFloat(value || ("NaN"));
|
|
336
|
+
if (!isNaN(time)) {
|
|
337
|
+
markersArray!.push({
|
|
338
|
+
time,
|
|
339
|
+
element: element as HTMLElement,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
else if (isDevEnvironment() || debug) {
|
|
343
|
+
console.warn("[ScrollFollow] data-timeline-marker attribute is not a valid number. Supported are numbers only (e.g. <div data-timeline-marker=\"0.5\">)");
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Init ViewTimeline for markers
|
|
349
|
+
for (const marker of markersArray) {
|
|
350
|
+
if (marker.element) {
|
|
351
|
+
// https://scroll-driven-animations.style/tools/view-timeline/ranges
|
|
352
|
+
/** @ts-ignore */
|
|
353
|
+
marker.timeline = new ViewTimeline({
|
|
354
|
+
subject: marker.element,
|
|
355
|
+
axis: 'block', // https://drafts.csswg.org/scroll-animations/#scroll-notation
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
weightsArray.length = 0;
|
|
363
|
+
let sum = 0;
|
|
364
|
+
const oneFrameTime = 1 / 60;
|
|
365
|
+
|
|
366
|
+
// We keep a separate count here in case there are some markers that could not be resolved so point to *invalid* elements - the timeline should fallback to 0-1 scroll behaviour then
|
|
367
|
+
let markerCount = 0;
|
|
368
|
+
for (let i = 0; i < markersArray.length; i++) {
|
|
369
|
+
const marker = markersArray[i];
|
|
370
|
+
if (!marker.element) continue;
|
|
371
|
+
const nextMarker = markersArray[i + 1];
|
|
372
|
+
|
|
373
|
+
const nextTime = nextMarker
|
|
374
|
+
? (nextMarker.time - oneFrameTime)
|
|
375
|
+
: duration;
|
|
376
|
+
|
|
377
|
+
markerCount += 1;
|
|
378
|
+
|
|
379
|
+
const timeline = marker.timeline;
|
|
380
|
+
if (timeline) {
|
|
381
|
+
const time01 = calculateTimelinePositionNormalized(timeline);
|
|
382
|
+
// remap 0-1 to 0 - 1 - 0 (full weight at center)
|
|
383
|
+
const weight = 1 - Math.abs(time01 - 0.5) * 2;
|
|
384
|
+
const name = `marker${i}`;
|
|
385
|
+
if (time01 > 0 && time01 <= 1) {
|
|
386
|
+
const lerpTime = marker.time + (nextTime - marker.time) * time01;
|
|
387
|
+
weightsArray.push({ name, time: lerpTime, weight: weight });
|
|
388
|
+
sum += weight;
|
|
389
|
+
}
|
|
390
|
+
// Before the first marker is reached
|
|
391
|
+
else if (i === 0 && time01 <= 0) {
|
|
392
|
+
weightsArray.push({ name, time: 0, weight: 1 });
|
|
393
|
+
sum += 1;
|
|
394
|
+
}
|
|
395
|
+
// After the last marker is reached
|
|
396
|
+
else if (i === markersArray.length - 1 && time01 >= 1) {
|
|
397
|
+
weightsArray.push({ name, time: duration, weight: 1 });
|
|
398
|
+
sum += 1;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
if (weightsArray.length <= 0 && markerCount <= 0) {
|
|
404
|
+
director.time = value * duration;
|
|
405
|
+
}
|
|
406
|
+
else if (weightsArray.length > 0) {
|
|
407
|
+
// normalize and calculate weighted time
|
|
408
|
+
let time = weightsArray[0].time; // fallback to first time
|
|
409
|
+
if (weightsArray.length > 1) {
|
|
410
|
+
for (const entry of weightsArray) {
|
|
411
|
+
const weight = entry.weight / Math.max(0.00001, sum);
|
|
412
|
+
// console.log(weight.toFixed(2))
|
|
413
|
+
// lerp time based on weight
|
|
414
|
+
const diff = Math.abs(entry.time - time);
|
|
415
|
+
time += diff * weight;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if (this.damping <= 0 || this._firstUpdate) {
|
|
419
|
+
director.time = time;
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
director.time = Mathf.lerp(director.time, time, this.context.time.deltaTime / this.damping);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const delta = Math.abs(director.time - time);
|
|
426
|
+
if (delta > .001) { // if the time is > 1/100th of a second off we need another update
|
|
427
|
+
this._needsUpdate = true;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
if (debug && this.context.time.frame % 30 === 0) {
|
|
431
|
+
console.log(`[ScrollFollow ] Timeline ${director.name}: ${time.toFixed(3)}`, weightsArray.map(w => `[${w.name} ${(w.weight * 100).toFixed(0)}%]`).join(", "));
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
const timelineMarkerArrays: WeakMap<PlayableDirector,
|
|
440
|
+
Array<{
|
|
441
|
+
time: number,
|
|
442
|
+
element?: HTMLElement | null | undefined,
|
|
443
|
+
timeline?: ViewTimeline,
|
|
444
|
+
}>
|
|
445
|
+
> = new WeakMap();
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
type OverlapInfo = {
|
|
449
|
+
name: string,
|
|
450
|
+
/** Marker time */
|
|
451
|
+
time: number,
|
|
452
|
+
/** Overlap in pixels */
|
|
453
|
+
weight: number,
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const weightsArray: OverlapInfo[] = [];
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
// type SelectorCache = {
|
|
460
|
+
// /** The selector used to query the *elements */
|
|
461
|
+
// selector: string,
|
|
462
|
+
// elements: Element[] | null,
|
|
463
|
+
// usedElementCount: number,
|
|
464
|
+
// }
|
|
465
|
+
// const querySelectorResults: Array<SelectorCache> = [];
|
|
466
|
+
|
|
467
|
+
const needleScrollMarkerCache = new Array<Element>();
|
|
468
|
+
let needsScrollMarkerRefresh = true;
|
|
469
|
+
|
|
470
|
+
function tryGetElementsForSelector(index: number): Element | null {
|
|
471
|
+
|
|
472
|
+
if (!needsScrollMarkerRefresh) {
|
|
473
|
+
const element = needleScrollMarkerCache[index] || null;
|
|
474
|
+
return element;
|
|
475
|
+
}
|
|
476
|
+
needsScrollMarkerRefresh = false;
|
|
477
|
+
needleScrollMarkerCache.length = 0;
|
|
478
|
+
const markers = document.querySelectorAll(`[data-timeline-marker]`);
|
|
479
|
+
markers.forEach((m, i) => {
|
|
480
|
+
needleScrollMarkerCache[i] = m;
|
|
481
|
+
});
|
|
482
|
+
needsScrollMarkerRefresh = false;
|
|
483
|
+
return tryGetElementsForSelector(index);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
// #region ScrollTimeline
|
|
488
|
+
|
|
489
|
+
function calculateTimelinePositionNormalized(timeline: ViewTimeline) {
|
|
490
|
+
if (!timeline.source) return 0;
|
|
491
|
+
const currentTime = timeline.currentTime;
|
|
492
|
+
const duration = timeline.duration;
|
|
493
|
+
let durationValue = 1;
|
|
494
|
+
if (duration.unit === "seconds") {
|
|
495
|
+
durationValue = duration.value;
|
|
496
|
+
}
|
|
497
|
+
else if (duration.unit === "percent") {
|
|
498
|
+
durationValue = duration.value;
|
|
499
|
+
}
|
|
500
|
+
const t01 = currentTime.unit === "seconds" ? (currentTime.value / durationValue) : (currentTime.value / 100);
|
|
501
|
+
return t01;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
declare global {
|
|
506
|
+
interface ViewTimeline {
|
|
507
|
+
axis: 'block' | 'inline';
|
|
508
|
+
currentTime: { unit: 'seconds' | 'percent', value: number };
|
|
509
|
+
duration: { unit: 'seconds' | 'percent', value: number };
|
|
510
|
+
source: Element | null;
|
|
511
|
+
startOffset: { unit: 'px', value: number };
|
|
512
|
+
endOffset: { unit: 'px', value: number };
|
|
513
|
+
}
|
|
514
514
|
}
|