@needle-tools/engine 4.7.1 → 4.7.2-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3782 -3782
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +25 -0
- package/dist/gltf-progressive-YjtQYFa9.js +1052 -0
- package/dist/gltf-progressive-yOP1mp5W.min.js +8 -0
- package/dist/gltf-progressive-zdhlW609.umd.cjs +8 -0
- package/dist/{needle-engine.bundle-CN9UC6Ju.min.js → needle-engine.bundle-BhDF-YSv.min.js} +65 -65
- package/dist/{needle-engine.bundle-B7M9iBIa.umd.cjs → needle-engine.bundle-D2myV4E4.umd.cjs} +61 -61
- package/dist/{needle-engine.bundle-BpCihhaP.js → needle-engine.bundle-gp00DTS4.js} +641 -641
- package/dist/needle-engine.d.ts +129 -130
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-CjW23fio.umd.cjs → postprocessing-8AQTeZsr.umd.cjs} +2 -2
- package/dist/{postprocessing-xYQWCHFu.min.js → postprocessing-BDScN9yu.min.js} +2 -2
- package/dist/{postprocessing-DYLNOL3W.js → postprocessing-BkxN_08g.js} +3 -3
- package/dist/{three-DuDKwKB8.min.js → three-Boa-jOq-.min.js} +33 -33
- package/dist/{three-DrqIzZTH.js → three-Bz6X1mrw.js} +4198 -4198
- package/dist/{three-B_hneGZr.umd.cjs → three-DMrv-4ar.umd.cjs} +4 -4
- package/dist/{three-examples-X3OadjXB.umd.cjs → three-examples-C7ryg8vN.umd.cjs} +3 -3
- package/dist/{three-examples-DaDLBuy6.min.js → three-examples-DuVhxqft.min.js} +14 -14
- package/dist/{three-examples-B50TT3Iu.js → three-examples-GggCDHv0.js} +5 -5
- package/dist/{three-mesh-ui-CxuWt7m-.js → three-mesh-ui-CLNOfsWn.js} +1 -1
- package/dist/{three-mesh-ui-B3p3gyUz.min.js → three-mesh-ui-CY6Izc7C.min.js} +1 -1
- package/dist/{three-mesh-ui-CQiIQIlA.umd.cjs → three-mesh-ui-CwlN0FUC.umd.cjs} +1 -1
- package/dist/{vendor-BmYIgaS1.js → vendor-BSD1RQIh.js} +3 -3
- package/dist/{vendor-Cavtu3CP.umd.cjs → vendor-DHr4aqIZ.umd.cjs} +3 -3
- package/dist/{vendor-BlSxe9JJ.min.js → vendor-zxXa3Dmr.min.js} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +164 -164
- package/lib/engine/engine_addressables.js +601 -601
- package/lib/engine/engine_animation.d.ts +43 -43
- package/lib/engine/engine_animation.js +133 -133
- package/lib/engine/engine_application.d.ts +45 -45
- package/lib/engine/engine_application.js +104 -104
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +346 -346
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +13 -13
- package/lib/engine/engine_camera.js +30 -30
- package/lib/engine/engine_components.d.ts +110 -110
- package/lib/engine/engine_components.js +374 -374
- package/lib/engine/engine_components_internal.d.ts +9 -9
- package/lib/engine/engine_components_internal.js +36 -36
- package/lib/engine/engine_constants.d.ts +10 -10
- package/lib/engine/engine_constants.js +41 -41
- package/lib/engine/engine_context.d.ts +475 -475
- package/lib/engine/engine_context.js +1673 -1673
- package/lib/engine/engine_context_registry.d.ts +71 -71
- package/lib/engine/engine_context_registry.js +117 -117
- package/lib/engine/engine_coroutine.d.ts +35 -35
- package/lib/engine/engine_coroutine.js +52 -52
- package/lib/engine/engine_create_objects.d.ts +119 -119
- package/lib/engine/engine_create_objects.js +320 -320
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_default_parameters.js +3 -3
- package/lib/engine/engine_editor-sync.d.ts +21 -21
- package/lib/engine/engine_editor-sync.js +4 -4
- package/lib/engine/engine_fileloader.d.ts +2 -2
- package/lib/engine/engine_fileloader.js +8 -8
- package/lib/engine/engine_gameobject.d.ts +68 -68
- package/lib/engine/engine_gameobject.js +619 -619
- package/lib/engine/engine_generic_utils.d.ts +1 -1
- package/lib/engine/engine_generic_utils.js +13 -13
- package/lib/engine/engine_gizmos.d.ts +149 -149
- package/lib/engine/engine_gizmos.js +530 -530
- package/lib/engine/engine_gltf.d.ts +12 -12
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +11 -11
- package/lib/engine/engine_gltf_builtin_components.js +341 -341
- package/lib/engine/engine_hot_reload.d.ts +8 -8
- package/lib/engine/engine_hot_reload.js +197 -197
- package/lib/engine/engine_input.d.ts +362 -362
- package/lib/engine/engine_input.js +1294 -1294
- package/lib/engine/engine_input_utils.d.ts +2 -2
- package/lib/engine/engine_input_utils.js +22 -22
- package/lib/engine/engine_instancing.d.ts +19 -19
- package/lib/engine/engine_instancing.js +39 -39
- package/lib/engine/engine_license.d.ts +11 -11
- package/lib/engine/engine_license.js +369 -369
- package/lib/engine/engine_lifecycle_api.d.ts +83 -83
- package/lib/engine/engine_lifecycle_api.js +106 -106
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +32 -32
- package/lib/engine/engine_lifecycle_functions_internal.js +146 -146
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +101 -101
- package/lib/engine/engine_loaders.callbacks.d.ts +97 -97
- package/lib/engine/engine_loaders.callbacks.js +86 -86
- package/lib/engine/engine_loaders.d.ts +48 -48
- package/lib/engine/engine_loaders.gltf.d.ts +13 -13
- package/lib/engine/engine_loaders.gltf.js +62 -62
- package/lib/engine/engine_loaders.js +337 -337
- package/lib/engine/engine_lods.d.ts +35 -35
- package/lib/engine/engine_lods.js +160 -160
- package/lib/engine/engine_lods.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +32 -32
- package/lib/engine/engine_mainloop_utils.js +466 -466
- package/lib/engine/engine_math.d.ts +114 -114
- package/lib/engine/engine_math.js +247 -247
- package/lib/engine/engine_modules.d.ts +36 -36
- package/lib/engine/engine_modules.js +85 -85
- package/lib/engine/engine_networking.d.ts +260 -260
- package/lib/engine/engine_networking.js +764 -764
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +310 -310
- package/lib/engine/engine_networking_blob.d.ts +48 -48
- package/lib/engine/engine_networking_blob.js +228 -228
- package/lib/engine/engine_networking_files.d.ts +35 -35
- package/lib/engine/engine_networking_files.js +172 -172
- package/lib/engine/engine_networking_files_default_components.d.ts +6 -6
- package/lib/engine/engine_networking_files_default_components.js +42 -42
- package/lib/engine/engine_networking_instantiate.d.ts +100 -100
- package/lib/engine/engine_networking_instantiate.js +345 -345
- package/lib/engine/engine_networking_peer.d.ts +15 -15
- package/lib/engine/engine_networking_peer.js +132 -132
- package/lib/engine/engine_networking_streams.d.ts +123 -123
- package/lib/engine/engine_networking_streams.js +645 -645
- package/lib/engine/engine_networking_types.d.ts +22 -22
- package/lib/engine/engine_networking_types.js +7 -7
- package/lib/engine/engine_networking_utils.d.ts +2 -2
- package/lib/engine/engine_networking_utils.js +20 -20
- package/lib/engine/engine_networking_websocket.d.ts +1 -1
- package/lib/engine/engine_networking_websocket.js +2 -2
- package/lib/engine/engine_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +152 -152
- package/lib/engine/engine_physics.js +645 -645
- package/lib/engine/engine_physics.types.d.ts +40 -40
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +147 -147
- package/lib/engine/engine_physics_rapier.js +1433 -1433
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +71 -71
- package/lib/engine/engine_scenelighting.js +226 -226
- package/lib/engine/engine_serialization.d.ts +3 -3
- package/lib/engine/engine_serialization.js +3 -3
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +72 -72
- package/lib/engine/engine_serialization_builtin_serializer.js +403 -403
- package/lib/engine/engine_serialization_core.d.ts +94 -94
- package/lib/engine/engine_serialization_core.js +607 -607
- package/lib/engine/engine_serialization_decorator.d.ts +23 -23
- package/lib/engine/engine_serialization_decorator.js +66 -66
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +53 -53
- package/lib/engine/engine_shaders.js +252 -252
- package/lib/engine/engine_shims.d.ts +4 -4
- package/lib/engine/engine_shims.js +24 -24
- package/lib/engine/engine_test_utils.d.ts +39 -39
- package/lib/engine/engine_test_utils.js +83 -83
- package/lib/engine/engine_texture.d.ts +28 -28
- package/lib/engine/engine_texture.js +64 -64
- package/lib/engine/engine_three_utils.d.ts +204 -204
- package/lib/engine/engine_three_utils.js +788 -788
- package/lib/engine/engine_time.d.ts +51 -51
- package/lib/engine/engine_time.js +82 -82
- package/lib/engine/engine_time_utils.d.ts +88 -88
- package/lib/engine/engine_time_utils.js +215 -215
- package/lib/engine/engine_tonemapping.d.ts +6 -6
- package/lib/engine/engine_tonemapping.js +197 -197
- package/lib/engine/engine_types.d.ts +578 -578
- package/lib/engine/engine_types.js +95 -95
- package/lib/engine/engine_typestore.d.ts +28 -28
- package/lib/engine/engine_typestore.js +55 -55
- package/lib/engine/engine_util_decorator.d.ts +13 -13
- package/lib/engine/engine_util_decorator.js +116 -116
- package/lib/engine/engine_utils.d.ts +248 -248
- package/lib/engine/engine_utils.js +1012 -1012
- package/lib/engine/engine_utils_format.d.ts +24 -24
- package/lib/engine/engine_utils_format.js +239 -239
- package/lib/engine/engine_utils_screenshot.d.ts +159 -159
- package/lib/engine/engine_utils_screenshot.js +522 -522
- package/lib/engine/engine_utils_screenshot.xr.d.ts +5 -5
- package/lib/engine/engine_utils_screenshot.xr.js +90 -90
- package/lib/engine/engine_xr.d.ts +1 -1
- package/lib/engine/engine_xr.js +1 -1
- package/lib/engine/export/gltf/Writers.d.ts +19 -19
- package/lib/engine/export/gltf/Writers.js +24 -24
- package/lib/engine/export/gltf/index.d.ts +11 -11
- package/lib/engine/export/gltf/index.js +123 -123
- package/lib/engine/export/index.d.ts +2 -2
- package/lib/engine/export/index.js +2 -2
- package/lib/engine/export/state.d.ts +7 -7
- package/lib/engine/export/state.js +17 -17
- package/lib/engine/export/utils.d.ts +2 -2
- package/lib/engine/export/utils.js +7 -7
- package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
- package/lib/engine/extensions/EXT_texture_exr.js +32 -32
- package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +122 -122
- package/lib/engine/extensions/NEEDLE_animator_controller_model.js +95 -95
- package/lib/engine/extensions/NEEDLE_components.d.ts +35 -35
- package/lib/engine/extensions/NEEDLE_components.js +220 -220
- package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
- package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +37 -37
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +157 -157
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
- package/lib/engine/extensions/NEEDLE_lightmaps.js +99 -99
- package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
- package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
- package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
- package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +38 -38
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +564 -564
- package/lib/engine/extensions/extension_resolver.d.ts +4 -4
- package/lib/engine/extensions/extension_resolver.js +1 -1
- package/lib/engine/extensions/extension_utils.d.ts +12 -12
- package/lib/engine/extensions/extension_utils.js +152 -152
- package/lib/engine/extensions/extensions.d.ts +32 -32
- package/lib/engine/extensions/extensions.js +107 -107
- package/lib/engine/extensions/index.d.ts +6 -6
- package/lib/engine/extensions/index.js +6 -6
- package/lib/engine/extensions/usage_tracker.d.ts +13 -13
- package/lib/engine/extensions/usage_tracker.js +65 -65
- package/lib/engine/js-extensions/Camera.d.ts +1 -1
- package/lib/engine/js-extensions/Camera.js +39 -39
- package/lib/engine/js-extensions/ExtensionUtils.d.ts +9 -9
- package/lib/engine/js-extensions/ExtensionUtils.js +67 -67
- package/lib/engine/js-extensions/Layers.d.ts +6 -6
- package/lib/engine/js-extensions/Layers.js +22 -22
- package/lib/engine/js-extensions/Object3D.d.ts +120 -120
- package/lib/engine/js-extensions/Object3D.js +136 -136
- package/lib/engine/js-extensions/RGBAColor.d.ts +23 -23
- package/lib/engine/js-extensions/RGBAColor.js +111 -111
- package/lib/engine/js-extensions/Vector.d.ts +3 -3
- package/lib/engine/js-extensions/Vector.js +13 -13
- package/lib/engine/js-extensions/index.d.ts +5 -5
- package/lib/engine/js-extensions/index.js +5 -5
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.d.ts +4 -4
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +79 -79
- package/lib/engine/shaders/shaderData.d.ts +55 -55
- package/lib/engine/shaders/shaderData.js +58 -58
- package/lib/engine/tests/test_utils.d.ts +2 -2
- package/lib/engine/tests/test_utils.js +53 -53
- package/lib/engine/webcomponents/WebXRButtons.d.ts +56 -56
- package/lib/engine/webcomponents/WebXRButtons.js +230 -230
- package/lib/engine/webcomponents/api.d.ts +5 -5
- package/lib/engine/webcomponents/api.js +4 -4
- package/lib/engine/webcomponents/buttons.d.ts +51 -51
- package/lib/engine/webcomponents/buttons.js +264 -264
- package/lib/engine/webcomponents/fonts.d.ts +9 -9
- package/lib/engine/webcomponents/fonts.js +32 -32
- package/lib/engine/webcomponents/icons.d.ts +9 -9
- package/lib/engine/webcomponents/icons.js +52 -52
- package/lib/engine/webcomponents/index.d.ts +1 -1
- package/lib/engine/webcomponents/index.js +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +10 -10
- package/lib/engine/webcomponents/logo-element.js +67 -67
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.d.ts +37 -37
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +513 -513
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +155 -155
- package/lib/engine/webcomponents/needle menu/needle-menu.js +1029 -1029
- package/lib/engine/webcomponents/needle-button.d.ts +34 -34
- package/lib/engine/webcomponents/needle-button.js +161 -161
- package/lib/engine/webcomponents/needle-engine.ar-overlay.d.ts +21 -21
- package/lib/engine/webcomponents/needle-engine.ar-overlay.js +166 -166
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -69
- package/lib/engine/webcomponents/needle-engine.attributes.js +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +116 -116
- package/lib/engine/webcomponents/needle-engine.extras.d.ts +6 -6
- package/lib/engine/webcomponents/needle-engine.extras.js +13 -13
- package/lib/engine/webcomponents/needle-engine.js +821 -821
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +341 -341
- package/lib/engine/xr/NeedleXRController.d.ts +313 -313
- package/lib/engine/xr/NeedleXRController.js +1007 -1007
- package/lib/engine/xr/NeedleXRSession.d.ts +340 -340
- package/lib/engine/xr/NeedleXRSession.js +1463 -1463
- package/lib/engine/xr/NeedleXRSync.d.ts +22 -22
- package/lib/engine/xr/NeedleXRSync.js +188 -188
- package/lib/engine/xr/SceneTransition.d.ts +18 -18
- package/lib/engine/xr/SceneTransition.js +69 -69
- package/lib/engine/xr/TempXRContext.d.ts +34 -34
- package/lib/engine/xr/TempXRContext.js +187 -187
- package/lib/engine/xr/XRRig.d.ts +7 -7
- package/lib/engine/xr/XRRig.js +1 -1
- package/lib/engine/xr/api.d.ts +6 -6
- package/lib/engine/xr/api.js +6 -6
- package/lib/engine/xr/events.d.ts +66 -66
- package/lib/engine/xr/events.js +93 -93
- package/lib/engine/xr/internal.d.ts +12 -12
- package/lib/engine/xr/internal.js +25 -25
- package/lib/engine/xr/usdz.d.ts +12 -12
- package/lib/engine/xr/usdz.js +29 -29
- package/lib/engine/xr/utils.d.ts +11 -11
- package/lib/engine/xr/utils.js +34 -34
- package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +156 -156
- package/lib/engine-components/Animation.js +508 -508
- package/lib/engine-components/AnimationCurve.d.ts +40 -40
- package/lib/engine-components/AnimationCurve.js +159 -159
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +27 -27
- package/lib/engine-components/AnimationUtilsAutoplay.d.ts +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +39 -39
- package/lib/engine-components/Animator.d.ts +217 -217
- package/lib/engine-components/Animator.js +354 -354
- package/lib/engine-components/AnimatorController.d.ts +227 -227
- package/lib/engine-components/AnimatorController.js +1152 -1152
- package/lib/engine-components/AudioListener.d.ts +33 -33
- package/lib/engine-components/AudioListener.js +86 -86
- package/lib/engine-components/AudioSource.d.ts +217 -217
- package/lib/engine-components/AudioSource.js +635 -635
- package/lib/engine-components/AvatarLoader.d.ts +80 -80
- package/lib/engine-components/AvatarLoader.js +231 -231
- package/lib/engine-components/AxesHelper.d.ts +32 -32
- package/lib/engine-components/AxesHelper.js +67 -67
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxCollider.d.ts +2 -2
- package/lib/engine-components/BoxCollider.js +2 -2
- package/lib/engine-components/BoxHelperComponent.d.ts +47 -47
- package/lib/engine-components/BoxHelperComponent.js +102 -102
- package/lib/engine-components/Camera.d.ts +231 -231
- package/lib/engine-components/Camera.js +700 -700
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +123 -123
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +59 -59
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +46 -46
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +113 -113
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -39
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +23 -23
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +111 -111
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +25 -25
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +104 -104
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +18 -18
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +32 -32
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +91 -91
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +70 -70
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +176 -176
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +127 -127
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +70 -70
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +19 -19
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +94 -94
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +15 -15
- package/lib/engine-components/postprocessing/Effects/Vignette.js +60 -60
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +90 -90
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +168 -168
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +42 -42
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +494 -494
- package/lib/engine-components/postprocessing/Volume.d.ts +90 -90
- package/lib/engine-components/postprocessing/Volume.js +385 -385
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +26 -26
- package/lib/engine-components/postprocessing/VolumeParameter.js +136 -136
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +15 -15
- package/lib/engine-components/postprocessing/VolumeProfile.js +60 -60
- package/lib/engine-components/postprocessing/index.d.ts +6 -6
- package/lib/engine-components/postprocessing/index.js +6 -6
- package/lib/engine-components/postprocessing/utils.d.ts +55 -55
- package/lib/engine-components/postprocessing/utils.js +119 -119
- package/lib/engine-components/timeline/PlayableDirector.d.ts +163 -163
- package/lib/engine-components/timeline/PlayableDirector.js +686 -686
- package/lib/engine-components/timeline/SignalAsset.d.ts +24 -24
- package/lib/engine-components/timeline/SignalAsset.js +130 -130
- package/lib/engine-components/timeline/TimelineModels.d.ts +89 -89
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +110 -110
- package/lib/engine-components/timeline/TimelineTracks.js +879 -879
- package/lib/engine-components/timeline/index.d.ts +4 -4
- package/lib/engine-components/timeline/index.js +3 -3
- package/lib/engine-components/ui/BaseUIComponent.d.ts +48 -48
- package/lib/engine-components/ui/BaseUIComponent.js +170 -170
- package/lib/engine-components/ui/Button.d.ts +64 -64
- package/lib/engine-components/ui/Button.js +315 -315
- package/lib/engine-components/ui/Canvas.d.ts +74 -74
- package/lib/engine-components/ui/Canvas.js +407 -407
- package/lib/engine-components/ui/CanvasGroup.d.ts +19 -19
- package/lib/engine-components/ui/CanvasGroup.js +58 -58
- package/lib/engine-components/ui/EventSystem.d.ts +125 -125
- package/lib/engine-components/ui/EventSystem.js +765 -765
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +255 -255
- package/lib/engine-components/ui/Image.d.ts +35 -35
- package/lib/engine-components/ui/Image.js +116 -116
- package/lib/engine-components/ui/InputField.d.ts +42 -42
- package/lib/engine-components/ui/InputField.js +268 -268
- package/lib/engine-components/ui/Interfaces.d.ts +38 -38
- package/lib/engine-components/ui/Interfaces.js +12 -12
- package/lib/engine-components/ui/Layout.d.ts +84 -84
- package/lib/engine-components/ui/Layout.js +330 -330
- package/lib/engine-components/ui/Outline.d.ts +7 -7
- package/lib/engine-components/ui/Outline.js +20 -20
- package/lib/engine-components/ui/PointerEvents.d.ts +115 -115
- package/lib/engine-components/ui/PointerEvents.js +145 -145
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
- package/lib/engine-components/ui/RaycastUtils.js +67 -67
- package/lib/engine-components/ui/Raycaster.d.ts +30 -30
- package/lib/engine-components/ui/Raycaster.js +95 -95
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +356 -356
- package/lib/engine-components/ui/SpatialHtml.d.ts +8 -8
- package/lib/engine-components/ui/SpatialHtml.js +79 -79
- package/lib/engine-components/ui/Symbols.d.ts +1 -1
- package/lib/engine-components/ui/Symbols.js +1 -1
- package/lib/engine-components/ui/Text.d.ts +78 -78
- package/lib/engine-components/ui/Text.js +539 -539
- package/lib/engine-components/ui/Utils.d.ts +24 -24
- package/lib/engine-components/ui/Utils.js +90 -90
- package/lib/engine-components/ui/index.d.ts +1 -1
- package/lib/engine-components/ui/index.js +1 -1
- package/lib/engine-components/utils/EnvironmentScene.d.ts +5 -5
- package/lib/engine-components/utils/EnvironmentScene.js +205 -205
- package/lib/engine-components/utils/LookAt.d.ts +31 -31
- package/lib/engine-components/utils/LookAt.js +82 -82
- package/lib/engine-components/utils/OpenURL.d.ts +42 -42
- package/lib/engine-components/utils/OpenURL.js +119 -119
- package/lib/engine-components/webxr/Avatar.d.ts +25 -25
- package/lib/engine-components/webxr/Avatar.js +255 -255
- package/lib/engine-components/webxr/TeleportTarget.d.ts +7 -7
- package/lib/engine-components/webxr/TeleportTarget.js +7 -7
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +30 -30
- package/lib/engine-components/webxr/WebARCameraBackground.js +155 -155
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +98 -98
- package/lib/engine-components/webxr/WebARSessionRoot.js +770 -770
- package/lib/engine-components/webxr/WebXR.d.ts +232 -232
- package/lib/engine-components/webxr/WebXR.js +561 -561
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +27 -27
- package/lib/engine-components/webxr/WebXRAvatar.js +44 -44
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +86 -86
- package/lib/engine-components/webxr/WebXRImageTracking.js +471 -471
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +92 -92
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +500 -500
- package/lib/engine-components/webxr/WebXRRig.d.ts +32 -32
- package/lib/engine-components/webxr/WebXRRig.js +72 -72
- package/lib/engine-components/webxr/XRFlag.d.ts +38 -38
- package/lib/engine-components/webxr/XRFlag.js +139 -139
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +47 -47
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +120 -120
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +43 -43
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +352 -352
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +78 -78
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +506 -506
- package/lib/engine-components/webxr/index.d.ts +3 -3
- package/lib/engine-components/webxr/index.js +3 -3
- package/lib/engine-components/webxr/types.d.ts +3 -3
- package/lib/engine-components/webxr/types.js +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -6
- package/lib/engine-components-experimental/Presentation.js +9 -9
- package/lib/engine-components-experimental/api.d.ts +4 -4
- package/lib/engine-components-experimental/api.js +4 -4
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +156 -156
- package/lib/engine-components-experimental/networking/PlayerSync.js +377 -377
- package/lib/engine-schemes/api.d.ts +12 -12
- package/lib/engine-schemes/api.js +12 -12
- package/lib/engine-schemes/schemes.d.ts +7 -7
- package/lib/engine-schemes/schemes.js +19 -19
- package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
- package/lib/engine-schemes/synced-camera-model.js +67 -67
- package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
- package/lib/engine-schemes/synced-transform-model.js +66 -66
- package/lib/engine-schemes/transform.d.ts +12 -12
- package/lib/engine-schemes/transform.js +39 -39
- package/lib/engine-schemes/vec2.d.ts +10 -10
- package/lib/engine-schemes/vec2.js +25 -25
- package/lib/engine-schemes/vec3.d.ts +11 -11
- package/lib/engine-schemes/vec3.js +29 -29
- package/lib/engine-schemes/vec4.d.ts +12 -12
- package/lib/engine-schemes/vec4.js +33 -33
- package/lib/engine-schemes/vr-user-state-buffer.d.ts +37 -37
- package/lib/engine-schemes/vr-user-state-buffer.js +110 -110
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
- package/lib/needle-engine.d.ts +7 -7
- package/lib/needle-engine.js +64 -64
- package/package.json +2 -2
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +31 -31
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/logger.js +327 -327
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/gltf-packer.mjs +1 -1
- package/plugins/next/alias.cjs +39 -39
- package/plugins/next/license.cjs +24 -24
- package/plugins/next/meshbvhworker.cjs +18 -18
- package/plugins/next/next.js +141 -141
- package/plugins/types/index.d.ts +2 -2
- package/plugins/types/license.d.ts +24 -24
- package/plugins/types/needleConfig.d.ts +27 -27
- package/plugins/types/next.d.ts +2 -2
- package/plugins/types/userconfig.d.ts +124 -124
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +189 -189
- package/plugins/vite/asap.js +251 -251
- package/plugins/vite/build-pipeline.js +371 -371
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/buildinfo.js +41 -41
- package/plugins/vite/config.js +106 -106
- package/plugins/vite/copyfiles.js +138 -138
- package/plugins/vite/defines.js +70 -70
- package/plugins/vite/dependencies.js +232 -232
- package/plugins/vite/dependency-watcher.js +237 -237
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +87 -87
- package/plugins/vite/editor-connection.js +124 -124
- package/plugins/vite/facebook-instant-games.js +102 -102
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +147 -147
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/logger.client.js +272 -272
- package/plugins/vite/logger.js +100 -100
- package/plugins/vite/materialx.js +31 -31
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +29 -29
- package/plugins/vite/poster-client.js +73 -73
- package/plugins/vite/poster.js +79 -79
- package/plugins/vite/pwa.js +604 -604
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +351 -351
- package/plugins/vite/server.js +66 -66
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/transform.js +32 -32
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/asap/needle-asap.ts +111 -111
- package/src/asap/sessiongranted.ts +75 -75
- package/src/asap/utils.ts +4 -4
- package/src/engine/analytics/index.ts +10 -10
- package/src/engine/analytics/lcp.ts +35 -35
- package/src/engine/api.ts +82 -82
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +300 -300
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +333 -333
- package/src/engine/debug/debug_overlay.ts +332 -332
- package/src/engine/debug/debug_spatial_console.ts +429 -429
- package/src/engine/debug/index.ts +1 -1
- package/src/engine/engine_addressables.ts +671 -671
- package/src/engine/engine_animation.ts +145 -145
- package/src/engine/engine_application.ts +113 -113
- package/src/engine/engine_assetdatabase.ts +389 -389
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.ts +39 -39
- package/src/engine/engine_components.ts +366 -366
- package/src/engine/engine_components_internal.ts +40 -40
- package/src/engine/engine_constants.ts +52 -52
- package/src/engine/engine_context.ts +1824 -1824
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +411 -411
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +28 -28
- package/src/engine/engine_fileloader.js +9 -9
- package/src/engine/engine_gameobject.ts +712 -712
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +577 -577
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +403 -403
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1500 -1500
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +45 -45
- package/src/engine/engine_license.ts +386 -386
- package/src/engine/engine_lifecycle_api.ts +113 -113
- package/src/engine/engine_lifecycle_functions_internal.ts +193 -193
- package/src/engine/engine_lightdata.ts +125 -125
- package/src/engine/engine_loaders.callbacks.ts +136 -136
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +378 -378
- package/src/engine/engine_lods.ts +186 -186
- package/src/engine/engine_mainloop_utils.ts +472 -472
- package/src/engine/engine_math.ts +282 -282
- package/src/engine/engine_modules.ts +83 -83
- package/src/engine/engine_networking.ts +862 -862
- package/src/engine/engine_networking_auto.ts +352 -352
- package/src/engine/engine_networking_blob.ts +275 -275
- package/src/engine/engine_networking_files.ts +217 -217
- package/src/engine/engine_networking_files_default_components.ts +58 -58
- package/src/engine/engine_networking_instantiate.ts +419 -419
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +713 -713
- package/src/engine/engine_networking_types.ts +24 -24
- package/src/engine/engine_networking_utils.ts +23 -23
- package/src/engine/engine_networking_websocket.ts +2 -2
- package/src/engine/engine_patcher.ts +199 -199
- package/src/engine/engine_physics.ts +783 -783
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1577 -1577
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_scenelighting.ts +294 -294
- package/src/engine/engine_serialization.ts +2 -2
- package/src/engine/engine_serialization_builtin_serializer.ts +473 -473
- package/src/engine/engine_serialization_core.ts +720 -720
- package/src/engine/engine_serialization_decorator.ts +80 -80
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +267 -267
- package/src/engine/engine_shims.ts +32 -32
- package/src/engine/engine_test_utils.ts +109 -109
- package/src/engine/engine_texture.ts +82 -82
- package/src/engine/engine_three_utils.ts +928 -928
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +208 -208
- package/src/engine/engine_types.ts +730 -730
- package/src/engine/engine_typestore.ts +63 -63
- package/src/engine/engine_util_decorator.ts +136 -136
- package/src/engine/engine_utils.ts +1115 -1115
- package/src/engine/engine_utils_format.ts +273 -273
- package/src/engine/engine_utils_screenshot.ts +708 -708
- package/src/engine/engine_utils_screenshot.xr.ts +103 -103
- package/src/engine/export/gltf/Writers.ts +34 -34
- package/src/engine/export/gltf/index.ts +158 -158
- package/src/engine/export/index.ts +2 -2
- package/src/engine/export/state.ts +19 -19
- package/src/engine/export/utils.ts +9 -9
- package/src/engine/extensions/EXT_texture_exr.ts +50 -50
- package/src/engine/extensions/NEEDLE_animator_controller_model.ts +195 -195
- package/src/engine/extensions/NEEDLE_components.ts +268 -268
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +81 -81
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +185 -185
- package/src/engine/extensions/NEEDLE_lightmaps.ts +119 -119
- package/src/engine/extensions/NEEDLE_persistent_assets.ts +76 -76
- package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +640 -640
- package/src/engine/extensions/extension_resolver.ts +4 -4
- package/src/engine/extensions/extension_utils.ts +166 -166
- package/src/engine/extensions/extensions.ts +140 -140
- package/src/engine/extensions/index.ts +5 -5
- package/src/engine/extensions/usage_tracker.ts +100 -100
- package/src/engine/js-extensions/Camera.ts +37 -37
- package/src/engine/js-extensions/ExtensionUtils.ts +85 -85
- package/src/engine/js-extensions/Layers.ts +23 -23
- package/src/engine/js-extensions/Object3D.ts +296 -296
- package/src/engine/js-extensions/RGBAColor.ts +126 -126
- package/src/engine/js-extensions/Vector.ts +18 -18
- package/src/engine/js-extensions/index.ts +4 -4
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +125 -125
- package/src/engine/shaders/shaderData.ts +67 -67
- package/src/engine/tests/test_utils.ts +63 -63
- package/src/engine/webcomponents/WebXRButtons.ts +260 -260
- package/src/engine/webcomponents/api.ts +6 -6
- package/src/engine/webcomponents/buttons.ts +292 -292
- package/src/engine/webcomponents/fonts.ts +41 -41
- package/src/engine/webcomponents/icons.ts +57 -57
- package/src/engine/webcomponents/index.ts +1 -1
- package/src/engine/webcomponents/logo-element.ts +78 -78
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +573 -573
- package/src/engine/webcomponents/needle menu/needle-menu.ts +1118 -1118
- package/src/engine/webcomponents/needle-button.ts +181 -181
- package/src/engine/webcomponents/needle-engine.ar-overlay.ts +186 -186
- package/src/engine/webcomponents/needle-engine.attributes.ts +82 -82
- package/src/engine/webcomponents/needle-engine.extras.ts +16 -16
- package/src/engine/webcomponents/needle-engine.loading.ts +373 -373
- package/src/engine/webcomponents/needle-engine.ts +860 -860
- package/src/engine/xr/NeedleXRController.ts +1125 -1125
- package/src/engine/xr/NeedleXRSession.ts +1624 -1624
- package/src/engine/xr/NeedleXRSync.ts +220 -220
- package/src/engine/xr/SceneTransition.ts +78 -78
- package/src/engine/xr/TempXRContext.ts +216 -216
- package/src/engine/xr/XRRig.ts +9 -9
- package/src/engine/xr/api.ts +5 -5
- package/src/engine/xr/events.ts +102 -102
- package/src/engine/xr/internal.ts +34 -34
- package/src/engine/xr/usdz.ts +30 -30
- package/src/engine/xr/utils.ts +39 -39
- package/src/engine-components/AlignmentConstraint.ts +36 -36
- package/src/engine-components/Animation.ts +557 -557
- package/src/engine-components/AnimationCurve.ts +150 -150
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +43 -43
- package/src/engine-components/Animator.ts +397 -397
- package/src/engine-components/AnimatorController.ts +1293 -1293
- package/src/engine-components/AudioListener.ts +92 -92
- package/src/engine-components/AudioSource.ts +644 -644
- package/src/engine-components/AvatarLoader.ts +263 -263
- package/src/engine-components/AxesHelper.ts +59 -59
- package/src/engine-components/BasicIKConstraint.ts +54 -54
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +114 -114
- package/src/engine-components/Camera.ts +719 -719
- package/src/engine-components/CameraUtils.ts +138 -138
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +374 -374
- package/src/engine-components/Component.ts +1297 -1297
- package/src/engine-components/ContactShadows.ts +506 -506
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1623 -1623
- package/src/engine-components/DropListener.ts +713 -713
- package/src/engine-components/Duplicatable.ts +198 -198
- package/src/engine-components/EventList.ts +266 -266
- package/src/engine-components/EventTrigger.ts +74 -74
- package/src/engine-components/EventType.ts +22 -22
- package/src/engine-components/Fog.ts +60 -60
- package/src/engine-components/Gizmos.ts +56 -56
- package/src/engine-components/GridHelper.ts +48 -48
- package/src/engine-components/GroundProjection.ts +356 -356
- package/src/engine-components/Interactable.ts +14 -14
- package/src/engine-components/Joints.ts +52 -52
- package/src/engine-components/LODGroup.ts +153 -153
- package/src/engine-components/Light.ts +558 -558
- package/src/engine-components/LookAtConstraint.ts +25 -25
- package/src/engine-components/NeedleMenu.ts +84 -84
- package/src/engine-components/NestedGltf.ts +86 -86
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1074 -1074
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +220 -220
- package/src/engine-components/Renderer.ts +903 -903
- package/src/engine-components/RendererInstancing.ts +855 -855
- package/src/engine-components/RendererLightmap.ts +198 -198
- package/src/engine-components/RigidBody.ts +526 -526
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +475 -475
- package/src/engine-components/SmoothFollow.ts +76 -76
- package/src/engine-components/SpatialTrigger.ts +229 -229
- package/src/engine-components/SpectatorCamera.ts +787 -787
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +468 -468
- package/src/engine-components/SyncedCamera.ts +220 -220
- package/src/engine-components/SyncedRoom.ts +380 -380
- package/src/engine-components/SyncedTransform.ts +383 -383
- package/src/engine-components/TestRunner.ts +118 -118
- package/src/engine-components/TransformGizmo.ts +219 -219
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +60 -60
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +69 -69
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +63 -63
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +139 -139
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +83 -83
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +31 -31
- package/src/engine-components/codegen/components.ts +217 -217
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +265 -265
- package/src/engine-components/export/usdz/Extension.ts +24 -24
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2426 -2426
- package/src/engine-components/export/usdz/USDZExporter.ts +705 -705
- package/src/engine-components/export/usdz/extensions/Animation.ts +1204 -1204
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -532
- package/src/engine-components/export/usdz/extensions/USDZText.ts +240 -240
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +189 -189
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -99
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +102 -102
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +320 -320
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1225 -1225
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +646 -646
- package/src/engine-components/export/usdz/extensions/behavior/PhysicsExtension.ts +132 -132
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +191 -191
- package/src/engine-components/export/usdz/utils/quicklook.ts +50 -50
- package/src/engine-components/particlesystem/ParticleSystem.ts +1287 -1287
- package/src/engine-components/particlesystem/ParticleSystemModules.ts +1765 -1765
- package/src/engine-components/particlesystem/ParticleSystemSubEmitter.ts +111 -111
- package/src/engine-components/particlesystem/api.ts +1 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +64 -64
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +116 -116
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +37 -37
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +106 -106
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +103 -103
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +25 -25
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +32 -32
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +90 -90
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +192 -192
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +143 -143
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +61 -61
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +103 -103
- package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -60
- package/src/engine-components/postprocessing/Effects/Vignette.ts +59 -59
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +192 -192
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +572 -572
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/dist/api.js +17 -0
- package/src/engine-schemes/dist/api.js.meta +7 -0
- package/src/engine-schemes/dist/schemes.js +25 -0
- package/src/engine-schemes/dist/schemes.js.meta +7 -0
- package/src/engine-schemes/dist/synced-camera-model.js +74 -0
- package/src/engine-schemes/dist/synced-camera-model.js.meta +7 -0
- package/src/engine-schemes/dist/synced-transform-model.js +73 -0
- package/src/engine-schemes/dist/synced-transform-model.js.meta +7 -0
- package/src/engine-schemes/dist/transform.js +46 -0
- package/src/engine-schemes/dist/transform.js.meta +7 -0
- package/src/engine-schemes/dist/vec2.js +32 -0
- package/src/engine-schemes/dist/vec2.js.meta +7 -0
- package/src/engine-schemes/dist/vec3.js +36 -0
- package/src/engine-schemes/dist/vec3.js.meta +7 -0
- package/src/engine-schemes/dist/vec4.js +40 -0
- package/src/engine-schemes/dist/vec4.js.meta +7 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js +110 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +7 -0
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +0 -25
- package/dist/gltf-progressive-60Qk5ebF.min.js +0 -8
- package/dist/gltf-progressive-DM5ZiecW.js +0 -1060
- package/dist/gltf-progressive-wxtaVmio.umd.cjs +0 -8
|
@@ -1,687 +1,687 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { AnimationMixer, Object3D } from 'three';
|
|
8
|
-
import { isDevEnvironment } from '../../engine/debug/index.js';
|
|
9
|
-
import { FrameEvent } from '../../engine/engine_context.js';
|
|
10
|
-
import { isLocalNetwork } from '../../engine/engine_networking_utils.js';
|
|
11
|
-
import { serializable } from '../../engine/engine_serialization.js';
|
|
12
|
-
import { deepClone, delay, getParam } from '../../engine/engine_utils.js';
|
|
13
|
-
import { Animator } from '../Animator.js';
|
|
14
|
-
import { AudioListener } from '../AudioListener.js';
|
|
15
|
-
import { AudioSource } from '../AudioSource.js';
|
|
16
|
-
import { Behaviour, GameObject } from '../Component.js';
|
|
17
|
-
import { SignalReceiver } from './SignalAsset.js';
|
|
18
|
-
import * as Models from "./TimelineModels.js";
|
|
19
|
-
import * as Tracks from "./TimelineTracks.js";
|
|
20
|
-
const debug = getParam("debugtimeline");
|
|
21
|
-
/**
|
|
22
|
-
* The wrap mode of the {@link PlayableDirector}.
|
|
23
|
-
*/
|
|
24
|
-
export var DirectorWrapMode;
|
|
25
|
-
(function (DirectorWrapMode) {
|
|
26
|
-
/// <summary>
|
|
27
|
-
/// <para>Hold the last frame when the playable time reaches it's duration.</para>
|
|
28
|
-
/// </summary>
|
|
29
|
-
DirectorWrapMode[DirectorWrapMode["Hold"] = 0] = "Hold";
|
|
30
|
-
/// <summary>
|
|
31
|
-
/// <para>Loop back to zero time and continue playing.</para>
|
|
32
|
-
/// </summary>
|
|
33
|
-
DirectorWrapMode[DirectorWrapMode["Loop"] = 1] = "Loop";
|
|
34
|
-
/// <summary>
|
|
35
|
-
/// <para>Do not keep playing when the time reaches the duration.</para>
|
|
36
|
-
/// </summary>
|
|
37
|
-
DirectorWrapMode[DirectorWrapMode["None"] = 2] = "None";
|
|
38
|
-
})(DirectorWrapMode || (DirectorWrapMode = {}));
|
|
39
|
-
/** How the clip handles time outside its start and end range. */
|
|
40
|
-
export var ClipExtrapolation;
|
|
41
|
-
(function (ClipExtrapolation) {
|
|
42
|
-
/** No extrapolation is applied. */
|
|
43
|
-
ClipExtrapolation[ClipExtrapolation["None"] = 0] = "None";
|
|
44
|
-
/** Hold the time at the end value of the clip. */
|
|
45
|
-
ClipExtrapolation[ClipExtrapolation["Hold"] = 1] = "Hold";
|
|
46
|
-
/** Repeat time values outside the start/end range. */
|
|
47
|
-
ClipExtrapolation[ClipExtrapolation["Loop"] = 2] = "Loop";
|
|
48
|
-
/** Repeat time values outside the start/end range, reversing direction at each loop */
|
|
49
|
-
ClipExtrapolation[ClipExtrapolation["PingPong"] = 3] = "PingPong";
|
|
50
|
-
/** Time values are passed in without modification, extending beyond the clips range */
|
|
51
|
-
ClipExtrapolation[ClipExtrapolation["Continue"] = 4] = "Continue";
|
|
52
|
-
})(ClipExtrapolation || (ClipExtrapolation = {}));
|
|
53
|
-
;
|
|
54
|
-
/**
|
|
55
|
-
* The PlayableDirector component is the main component to control timelines in needle engine.
|
|
56
|
-
* It is used to play, pause, stop and evaluate timelines.
|
|
57
|
-
* Assign a TimelineAsset to the `playableAsset` property to start playing a timeline.
|
|
58
|
-
* @category Animation and Sequencing
|
|
59
|
-
* @group Components
|
|
60
|
-
*/
|
|
61
|
-
export class PlayableDirector extends Behaviour {
|
|
62
|
-
static createTrackFunctions = {};
|
|
63
|
-
static registerCreateTrack(type, fn) {
|
|
64
|
-
this.createTrackFunctions[type] = fn;
|
|
65
|
-
}
|
|
66
|
-
playableAsset;
|
|
67
|
-
/** Set to true to start playing the timeline when the scene starts */
|
|
68
|
-
playOnAwake;
|
|
69
|
-
extrapolationMode = DirectorWrapMode.Loop;
|
|
70
|
-
/** @returns true if the timeline is currently playing */
|
|
71
|
-
get isPlaying() { return this._isPlaying; }
|
|
72
|
-
/** @returns true if the timeline is currently paused */
|
|
73
|
-
get isPaused() { return this._isPaused; }
|
|
74
|
-
/** the current time of the timeline */
|
|
75
|
-
get time() { return this._time; }
|
|
76
|
-
set time(value) {
|
|
77
|
-
if (typeof value === "number" && !Number.isNaN(value))
|
|
78
|
-
this._time = value;
|
|
79
|
-
else if (debug || isLocalNetwork()) {
|
|
80
|
-
console.error("INVALID TIMELINE.TIME VALUE", value, this.name);
|
|
81
|
-
}
|
|
82
|
-
;
|
|
83
|
-
}
|
|
84
|
-
/** the duration of the timeline */
|
|
85
|
-
get duration() { return this._duration; }
|
|
86
|
-
set duration(value) { this._duration = value; }
|
|
87
|
-
/** the weight of the timeline. Set to a value below 1 to blend with other timelines */
|
|
88
|
-
get weight() { return this._weight; }
|
|
89
|
-
;
|
|
90
|
-
set weight(value) { this._weight = value; }
|
|
91
|
-
/** the playback speed of the timeline */
|
|
92
|
-
get speed() { return this._speed; }
|
|
93
|
-
set speed(value) { this._speed = value; }
|
|
94
|
-
/** When enabled the timeline will wait for audio tracks to load at the current time before starting to play */
|
|
95
|
-
waitForAudio = true;
|
|
96
|
-
_visibilityChangeEvt;
|
|
97
|
-
_clonedPlayableAsset = false;
|
|
98
|
-
_speed = 1;
|
|
99
|
-
/** @internal */
|
|
100
|
-
awake() {
|
|
101
|
-
if (debug)
|
|
102
|
-
console.log(this, this.playableAsset?.tracks);
|
|
103
|
-
this.rebuildGraph();
|
|
104
|
-
if (!this.isValid() && (debug || isDevEnvironment())) {
|
|
105
|
-
if (debug) {
|
|
106
|
-
console.warn("PlayableDirector is not valid", "Asset?", this.playableAsset, "Tracks:", this.playableAsset?.tracks, "IsArray?", Array.isArray(this.playableAsset?.tracks), this);
|
|
107
|
-
}
|
|
108
|
-
else if (!this.playableAsset?.tracks?.length) {
|
|
109
|
-
console.warn("PlayableDirector has no tracks");
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
console.warn("PlayableDirector is not valid");
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/** @internal */
|
|
117
|
-
onEnable() {
|
|
118
|
-
for (const track of this._audioTracks) {
|
|
119
|
-
track.onEnable?.();
|
|
120
|
-
}
|
|
121
|
-
for (const track of this._customTracks) {
|
|
122
|
-
track.onEnable?.();
|
|
123
|
-
}
|
|
124
|
-
for (const track of this._animationTracks) {
|
|
125
|
-
track.onEnable?.();
|
|
126
|
-
}
|
|
127
|
-
if (this.playOnAwake) {
|
|
128
|
-
this.play();
|
|
129
|
-
}
|
|
130
|
-
if (!this._visibilityChangeEvt)
|
|
131
|
-
this._visibilityChangeEvt = () => {
|
|
132
|
-
switch (document.visibilityState) {
|
|
133
|
-
case "hidden":
|
|
134
|
-
this.setAudioTracksAllowPlaying(false);
|
|
135
|
-
break;
|
|
136
|
-
case "visible":
|
|
137
|
-
this.setAudioTracksAllowPlaying(true);
|
|
138
|
-
break;
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
window.addEventListener('visibilitychange', this._visibilityChangeEvt);
|
|
142
|
-
}
|
|
143
|
-
/** @internal */
|
|
144
|
-
onDisable() {
|
|
145
|
-
this.stop();
|
|
146
|
-
for (const track of this._audioTracks) {
|
|
147
|
-
track.onDisable?.();
|
|
148
|
-
}
|
|
149
|
-
for (const track of this._customTracks) {
|
|
150
|
-
track.onDisable?.();
|
|
151
|
-
}
|
|
152
|
-
for (const track of this._animationTracks) {
|
|
153
|
-
track.onDisable?.();
|
|
154
|
-
}
|
|
155
|
-
if (this._visibilityChangeEvt)
|
|
156
|
-
window.removeEventListener('visibilitychange', this._visibilityChangeEvt);
|
|
157
|
-
}
|
|
158
|
-
/** @internal */
|
|
159
|
-
onDestroy() {
|
|
160
|
-
for (const tracks of this._allTracks) {
|
|
161
|
-
for (const track of tracks)
|
|
162
|
-
track.onDestroy?.();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/** @internal */
|
|
166
|
-
rebuildGraph() {
|
|
167
|
-
if (!this.isValid())
|
|
168
|
-
return;
|
|
169
|
-
this.resolveBindings();
|
|
170
|
-
this.updateTimelineDuration();
|
|
171
|
-
this.setupAndCreateTrackHandlers();
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Play the timeline from the current time.
|
|
175
|
-
* If the timeline is already playing this method does nothing.
|
|
176
|
-
*/
|
|
177
|
-
async play() {
|
|
178
|
-
if (!this.isValid())
|
|
179
|
-
return;
|
|
180
|
-
const pauseChanged = this._isPaused == true;
|
|
181
|
-
this._isPaused = false;
|
|
182
|
-
if (this._isPlaying)
|
|
183
|
-
return;
|
|
184
|
-
this._isPlaying = true;
|
|
185
|
-
if (pauseChanged)
|
|
186
|
-
this.invokePauseChangedMethodsOnTracks();
|
|
187
|
-
if (this.waitForAudio) {
|
|
188
|
-
// Make sure audio tracks have loaded at the current time
|
|
189
|
-
const promises = [];
|
|
190
|
-
for (const track of this._audioTracks) {
|
|
191
|
-
const promise = track.loadAudio(this._time, 1, 0);
|
|
192
|
-
if (promise)
|
|
193
|
-
promises.push(promise);
|
|
194
|
-
}
|
|
195
|
-
if (promises.length > 0) {
|
|
196
|
-
await Promise.all(promises);
|
|
197
|
-
if (!this._isPlaying)
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
while (this._audioTracks.length > 0 && this._isPlaying && !AudioSource.userInteractionRegistered && this.waitForAudio)
|
|
201
|
-
await delay(200);
|
|
202
|
-
}
|
|
203
|
-
this.invokeStateChangedMethodsOnTracks();
|
|
204
|
-
// Update timeline in LateUpdate to give other scripts time to react to the updated state
|
|
205
|
-
// e.g. if we animate OrbitControls look at target we want those changes to be applied in onBeforeRender
|
|
206
|
-
// if we use onBeforeRender here it will be called *after* the regular onBeforeRender events
|
|
207
|
-
// which is too late
|
|
208
|
-
this._internalUpdateRoutine = this.startCoroutine(this.internalUpdate(), FrameEvent.LateUpdate);
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Pause the timeline.
|
|
212
|
-
*/
|
|
213
|
-
pause() {
|
|
214
|
-
if (!this.isValid())
|
|
215
|
-
return;
|
|
216
|
-
this._isPlaying = false;
|
|
217
|
-
if (this._isPaused)
|
|
218
|
-
return;
|
|
219
|
-
this._isPaused = true;
|
|
220
|
-
this.internalEvaluate();
|
|
221
|
-
this.invokePauseChangedMethodsOnTracks();
|
|
222
|
-
this.invokeStateChangedMethodsOnTracks();
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Stop the timeline.
|
|
226
|
-
*/
|
|
227
|
-
stop() {
|
|
228
|
-
this._isStopping = true;
|
|
229
|
-
for (const track of this._audioTracks)
|
|
230
|
-
track.stop();
|
|
231
|
-
const pauseChanged = this._isPaused == true;
|
|
232
|
-
const wasPlaying = this._isPlaying;
|
|
233
|
-
if (this._isPlaying) {
|
|
234
|
-
this._time = 0;
|
|
235
|
-
this._isPlaying = false;
|
|
236
|
-
this._isPaused = false;
|
|
237
|
-
this.internalEvaluate();
|
|
238
|
-
if (pauseChanged)
|
|
239
|
-
this.invokePauseChangedMethodsOnTracks();
|
|
240
|
-
}
|
|
241
|
-
this._isPlaying = false;
|
|
242
|
-
this._isPaused = false;
|
|
243
|
-
if (pauseChanged && !wasPlaying)
|
|
244
|
-
this.invokePauseChangedMethodsOnTracks();
|
|
245
|
-
if (wasPlaying)
|
|
246
|
-
this.invokeStateChangedMethodsOnTracks();
|
|
247
|
-
if (this._internalUpdateRoutine)
|
|
248
|
-
this.stopCoroutine(this._internalUpdateRoutine);
|
|
249
|
-
this._internalUpdateRoutine = null;
|
|
250
|
-
this._isStopping = false;
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Evaluate the timeline at the current time. This is useful when you want to manually update the timeline e.g. when the timeline is paused and you set `time` to a new value.
|
|
254
|
-
*/
|
|
255
|
-
evaluate() {
|
|
256
|
-
this.internalEvaluate(true);
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* @returns true if the timeline is valid and has tracks
|
|
260
|
-
*/
|
|
261
|
-
isValid() {
|
|
262
|
-
return this.playableAsset && this.playableAsset.tracks && Array.isArray(this.playableAsset.tracks);
|
|
263
|
-
}
|
|
264
|
-
/** Iterates over all tracks of the timeline
|
|
265
|
-
* @returns all tracks of the timeline
|
|
266
|
-
*/
|
|
267
|
-
*forEachTrack() {
|
|
268
|
-
for (const tracks of this._allTracks) {
|
|
269
|
-
for (const track of tracks)
|
|
270
|
-
yield track;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* @returns all animation tracks of the timeline
|
|
275
|
-
*/
|
|
276
|
-
get animationTracks() {
|
|
277
|
-
return this._animationTracks;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* @returns all audio tracks of the timeline
|
|
281
|
-
*/
|
|
282
|
-
get audioTracks() {
|
|
283
|
-
return this._audioTracks;
|
|
284
|
-
}
|
|
285
|
-
_guidsMap;
|
|
286
|
-
/** @internal */
|
|
287
|
-
resolveGuids(map) {
|
|
288
|
-
this._guidsMap = map;
|
|
289
|
-
}
|
|
290
|
-
// INTERNALS
|
|
291
|
-
_isPlaying = false;
|
|
292
|
-
_internalUpdateRoutine;
|
|
293
|
-
_isPaused = false;
|
|
294
|
-
/** internal, true during the time stop() is being processed */
|
|
295
|
-
_isStopping = false;
|
|
296
|
-
_time = 0;
|
|
297
|
-
_duration = 0;
|
|
298
|
-
_weight = 1;
|
|
299
|
-
_animationTracks = [];
|
|
300
|
-
_audioTracks = [];
|
|
301
|
-
_signalTracks = [];
|
|
302
|
-
_controlTracks = [];
|
|
303
|
-
_customTracks = [];
|
|
304
|
-
_allTracks = [
|
|
305
|
-
this._animationTracks,
|
|
306
|
-
this._audioTracks,
|
|
307
|
-
this._signalTracks,
|
|
308
|
-
this._controlTracks,
|
|
309
|
-
this._customTracks
|
|
310
|
-
];
|
|
311
|
-
/** should be called after evaluate if the director was playing */
|
|
312
|
-
invokePauseChangedMethodsOnTracks() {
|
|
313
|
-
for (const track of this.forEachTrack()) {
|
|
314
|
-
track.onPauseChanged?.call(track);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
invokeStateChangedMethodsOnTracks() {
|
|
318
|
-
for (const track of this.forEachTrack()) {
|
|
319
|
-
track.onStateChanged?.call(track, this._isPlaying);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
*internalUpdate() {
|
|
323
|
-
while (this._isPlaying && this.activeAndEnabled) {
|
|
324
|
-
if (!this._isPaused && this._isPlaying) {
|
|
325
|
-
this._time += this.context.time.deltaTime * this.speed;
|
|
326
|
-
this.internalEvaluate();
|
|
327
|
-
}
|
|
328
|
-
// for (let i = 0; i < 5; i++)
|
|
329
|
-
yield;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* PlayableDirector lifecycle should always call this instead of "evaluate"
|
|
334
|
-
* @param called_by_user If true the evaluation is called by the user (e.g. via evaluate())
|
|
335
|
-
*/
|
|
336
|
-
internalEvaluate(called_by_user = false) {
|
|
337
|
-
// when the timeline is called by a user via evaluate() we want to keep updating activation tracks
|
|
338
|
-
// because "isPlaying" might be false but the director is still active. See NE-3737
|
|
339
|
-
if (!this.isValid())
|
|
340
|
-
return;
|
|
341
|
-
let t = this._time;
|
|
342
|
-
switch (this.extrapolationMode) {
|
|
343
|
-
case DirectorWrapMode.Hold:
|
|
344
|
-
if (this._speed > 0)
|
|
345
|
-
t = Math.min(t, this._duration);
|
|
346
|
-
else if (this._speed < 0)
|
|
347
|
-
t = Math.max(t, 0);
|
|
348
|
-
this._time = t;
|
|
349
|
-
break;
|
|
350
|
-
case DirectorWrapMode.Loop:
|
|
351
|
-
t %= this._duration;
|
|
352
|
-
this._time = t;
|
|
353
|
-
break;
|
|
354
|
-
case DirectorWrapMode.None:
|
|
355
|
-
if (t > this._duration) {
|
|
356
|
-
this.stop();
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
const time = this._time;
|
|
362
|
-
for (const track of this.playableAsset.tracks) {
|
|
363
|
-
if (track.muted)
|
|
364
|
-
continue;
|
|
365
|
-
switch (track.type) {
|
|
366
|
-
case Models.TrackType.Activation:
|
|
367
|
-
// when the timeline is being disabled or stopped
|
|
368
|
-
// then we want to leave objects active state as they were
|
|
369
|
-
// see NE-3241
|
|
370
|
-
// TODO: support all "post-playback-state" settings an activation track has, this is just "Leave as is"
|
|
371
|
-
if (!called_by_user && !this._isPlaying)
|
|
372
|
-
continue;
|
|
373
|
-
for (let i = 0; i < track.outputs.length; i++) {
|
|
374
|
-
const binding = track.outputs[i];
|
|
375
|
-
if (typeof binding === "object") {
|
|
376
|
-
let isActive = false;
|
|
377
|
-
if (track.clips) {
|
|
378
|
-
for (const clip of track.clips) {
|
|
379
|
-
if (clip.start <= time && time <= clip.end) {
|
|
380
|
-
isActive = true;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
const obj = binding;
|
|
385
|
-
if (obj.visible !== undefined) {
|
|
386
|
-
if (obj.visible !== isActive) {
|
|
387
|
-
obj.visible = isActive;
|
|
388
|
-
if (debug)
|
|
389
|
-
console.warn(this.name, "set ActivationTrack-" + i, obj.name, isActive, time);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
break;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
// When timeline reaches the end "stop()" is called which is evaluating with time 0
|
|
398
|
-
// We don't want to re-evaluate the animation then in case the timeline is blended with the Animator
|
|
399
|
-
// e.g then the timeline animation at time 0 is 100% applied on top of the animator animation
|
|
400
|
-
if (!this._isStopping) {
|
|
401
|
-
for (const handler of this._animationTracks) {
|
|
402
|
-
handler.evaluate(time);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
for (const handler of this._audioTracks) {
|
|
406
|
-
handler.evaluate(time);
|
|
407
|
-
}
|
|
408
|
-
for (const sig of this._signalTracks) {
|
|
409
|
-
sig.evaluate(time);
|
|
410
|
-
}
|
|
411
|
-
for (const ctrl of this._controlTracks) {
|
|
412
|
-
ctrl.evaluate(time);
|
|
413
|
-
}
|
|
414
|
-
for (const cust of this._customTracks) {
|
|
415
|
-
cust.evaluate(time);
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
resolveBindings() {
|
|
419
|
-
if (!this._clonedPlayableAsset) {
|
|
420
|
-
this._clonedPlayableAsset = true;
|
|
421
|
-
this.playableAsset = deepClone(this.playableAsset);
|
|
422
|
-
}
|
|
423
|
-
if (!this.playableAsset || !this.playableAsset.tracks)
|
|
424
|
-
return;
|
|
425
|
-
// if the director has a parent we assume it is part of the current scene
|
|
426
|
-
// if not (e.g. when loaded via adressable but not yet added to any scene)
|
|
427
|
-
// we can only resolve objects that are children
|
|
428
|
-
const root = this.findRoot(this.gameObject);
|
|
429
|
-
for (const track of this.playableAsset.tracks) {
|
|
430
|
-
for (let i = track.outputs.length - 1; i >= 0; i--) {
|
|
431
|
-
let binding = track.outputs[i];
|
|
432
|
-
if (typeof binding === "string") {
|
|
433
|
-
if (this._guidsMap && this._guidsMap[binding])
|
|
434
|
-
binding = this._guidsMap[binding];
|
|
435
|
-
const obj = GameObject.findByGuid(binding, root);
|
|
436
|
-
if (obj === null || typeof obj !== "object") {
|
|
437
|
-
// if the binding is missing remove it to avoid unnecessary loops
|
|
438
|
-
track.outputs.splice(i, 1);
|
|
439
|
-
console.warn("Failed to resolve binding", binding, track.name, track.type);
|
|
440
|
-
}
|
|
441
|
-
else {
|
|
442
|
-
if (debug)
|
|
443
|
-
console.log("Resolved binding", binding, "to", obj);
|
|
444
|
-
track.outputs[i] = obj;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
else if (binding === null) {
|
|
448
|
-
track.outputs.splice(i, 1);
|
|
449
|
-
if (PlayableDirector.createTrackFunctions[track.type]) {
|
|
450
|
-
// if a custom track doesnt have a binding its ok
|
|
451
|
-
continue;
|
|
452
|
-
}
|
|
453
|
-
// if the binding is missing remove it to avoid unnecessary loops
|
|
454
|
-
if (track.type !== Models.TrackType.Audio && track.type !== Models.TrackType.Control && track.type !== Models.TrackType.Marker && track.type !== Models.TrackType.Signal)
|
|
455
|
-
console.warn("Missing binding", binding, track.name, track.type, this.name, this.playableAsset.name);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
if (track.type === Models.TrackType.Control) {
|
|
459
|
-
if (track.clips) {
|
|
460
|
-
for (let i = 0; i < track.clips.length; i++) {
|
|
461
|
-
const clip = track.clips[i];
|
|
462
|
-
let binding = clip.asset.sourceObject;
|
|
463
|
-
if (typeof binding === "string") {
|
|
464
|
-
if (this._guidsMap && this._guidsMap[binding])
|
|
465
|
-
binding = this._guidsMap[binding];
|
|
466
|
-
const obj = GameObject.findByGuid(binding, root);
|
|
467
|
-
if (obj === null || typeof obj !== "object") {
|
|
468
|
-
console.warn("Failed to resolve sourceObject binding", binding, track.name, clip);
|
|
469
|
-
}
|
|
470
|
-
else {
|
|
471
|
-
if (debug)
|
|
472
|
-
console.log("Resolved binding", binding, "to", obj);
|
|
473
|
-
clip.asset.sourceObject = obj;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
findRoot(current) {
|
|
482
|
-
if (current.parent)
|
|
483
|
-
return this.findRoot(current.parent);
|
|
484
|
-
return current;
|
|
485
|
-
}
|
|
486
|
-
updateTimelineDuration() {
|
|
487
|
-
this._duration = 0;
|
|
488
|
-
if (!this.playableAsset || !this.playableAsset.tracks)
|
|
489
|
-
return;
|
|
490
|
-
for (const track of this.playableAsset.tracks) {
|
|
491
|
-
if (track.muted === true)
|
|
492
|
-
continue;
|
|
493
|
-
if (track.clips) {
|
|
494
|
-
for (const clip of track.clips) {
|
|
495
|
-
if (clip.end > this._duration)
|
|
496
|
-
this._duration = clip.end;
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
if (track.markers) {
|
|
500
|
-
for (const marker of track.markers) {
|
|
501
|
-
if (marker.time > this._duration)
|
|
502
|
-
this._duration = marker.time + .001;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
// console.log("timeline duration", this._duration, this.playableAsset);
|
|
507
|
-
}
|
|
508
|
-
setupAndCreateTrackHandlers() {
|
|
509
|
-
this._animationTracks.length = 0;
|
|
510
|
-
this._audioTracks.length = 0;
|
|
511
|
-
this._signalTracks.length = 0;
|
|
512
|
-
if (!this.playableAsset)
|
|
513
|
-
return;
|
|
514
|
-
let audioListener = GameObject.findObjectOfType(AudioListener, this.context);
|
|
515
|
-
for (const track of this.playableAsset.tracks) {
|
|
516
|
-
const type = track.type;
|
|
517
|
-
const registered = PlayableDirector.createTrackFunctions[type];
|
|
518
|
-
if (registered !== null && registered !== undefined) {
|
|
519
|
-
const res = registered(this, track);
|
|
520
|
-
if (typeof res.evaluate === "function") {
|
|
521
|
-
res.director = this;
|
|
522
|
-
res.track = track;
|
|
523
|
-
this._customTracks.push(res);
|
|
524
|
-
continue;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
// only handle animation tracks
|
|
528
|
-
if (track.type === Models.TrackType.Animation) {
|
|
529
|
-
if (!track.clips || track.clips.length <= 0) {
|
|
530
|
-
if (debug)
|
|
531
|
-
console.warn("Animation track has no clips", track);
|
|
532
|
-
continue;
|
|
533
|
-
}
|
|
534
|
-
// loop outputs / bindings, they should contain animator references
|
|
535
|
-
for (let i = track.outputs.length - 1; i >= 0; i--) {
|
|
536
|
-
let binding = track.outputs[i];
|
|
537
|
-
if (binding instanceof Object3D) {
|
|
538
|
-
const anim = GameObject.getOrAddComponent(binding, Animator);
|
|
539
|
-
if (anim)
|
|
540
|
-
binding = anim;
|
|
541
|
-
}
|
|
542
|
-
const animationClips = binding?.gameObject?.animations;
|
|
543
|
-
if (animationClips) {
|
|
544
|
-
const handler = new Tracks.AnimationTrackHandler();
|
|
545
|
-
handler.trackOffset = track.trackOffset;
|
|
546
|
-
handler.director = this;
|
|
547
|
-
handler.track = track;
|
|
548
|
-
for (let i = 0; i < track.clips.length; i++) {
|
|
549
|
-
const clipModel = track.clips[i];
|
|
550
|
-
const animModel = clipModel.asset;
|
|
551
|
-
if (!animModel) {
|
|
552
|
-
console.error(`Timeline ${this.name}: clip #${i} on track \"${track.name}\" has no animation data`);
|
|
553
|
-
continue;
|
|
554
|
-
}
|
|
555
|
-
// console.log(clipModel, track);
|
|
556
|
-
const targetObjectId = animModel.clip;
|
|
557
|
-
let clip = targetObjectId;
|
|
558
|
-
if (typeof clip === "string" || typeof clip === "number") {
|
|
559
|
-
clip = animationClips.find(c => c.name === targetObjectId);
|
|
560
|
-
}
|
|
561
|
-
if (debug)
|
|
562
|
-
console.log(animModel, targetObjectId, "→", clip);
|
|
563
|
-
if (!clip) {
|
|
564
|
-
console.warn("Could not find animationClip for model", clipModel, track.name, this.name, this.playableAsset?.name, animationClips, binding);
|
|
565
|
-
continue;
|
|
566
|
-
}
|
|
567
|
-
// Try to share the mixer with the animator
|
|
568
|
-
if (binding instanceof Animator && binding.runtimeAnimatorController) {
|
|
569
|
-
if (!binding.__internalDidAwakeAndStart)
|
|
570
|
-
binding.initializeRuntimeAnimatorController();
|
|
571
|
-
// Call bind once to ensure the animator is setup and has a mixer
|
|
572
|
-
if (!binding.runtimeAnimatorController.mixer)
|
|
573
|
-
binding.runtimeAnimatorController.bind(binding);
|
|
574
|
-
handler.mixer = binding.runtimeAnimatorController.mixer;
|
|
575
|
-
}
|
|
576
|
-
// If we can not get the mixer from the animator then create a new one
|
|
577
|
-
if (!handler.mixer) {
|
|
578
|
-
handler.mixer = new AnimationMixer(binding.gameObject);
|
|
579
|
-
this.context.animations.registerAnimationMixer(handler.mixer);
|
|
580
|
-
}
|
|
581
|
-
handler.clips.push(clip);
|
|
582
|
-
// uncache because we want to create a new action
|
|
583
|
-
// this is needed because if a clip is used multiple times in a track (or even multiple tracks)
|
|
584
|
-
// we want to avoid setting weights on the same instance for clips/objects that are not active
|
|
585
|
-
handler.mixer.uncacheAction(clip);
|
|
586
|
-
handler.createHooks(clipModel.asset, clip);
|
|
587
|
-
const clipAction = handler.mixer.clipAction(clip); // new AnimationAction(handler.mixer, clip, null, null);
|
|
588
|
-
handler.actions.push(clipAction);
|
|
589
|
-
handler.models.push(clipModel);
|
|
590
|
-
}
|
|
591
|
-
this._animationTracks.push(handler);
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
else if (track.type === Models.TrackType.Audio) {
|
|
596
|
-
if (!track.clips || track.clips.length <= 0)
|
|
597
|
-
continue;
|
|
598
|
-
const audio = new Tracks.AudioTrackHandler();
|
|
599
|
-
audio.director = this;
|
|
600
|
-
audio.track = track;
|
|
601
|
-
audio.audioSource = track.outputs.find(o => o instanceof AudioSource);
|
|
602
|
-
this._audioTracks.push(audio);
|
|
603
|
-
if (!audioListener) {
|
|
604
|
-
// If the scene doesnt have an AudioListener we add one to the main camera
|
|
605
|
-
audioListener = this.context.mainCameraComponent?.gameObject.addComponent(AudioListener);
|
|
606
|
-
}
|
|
607
|
-
audio.listener = audioListener.listener;
|
|
608
|
-
for (let i = 0; i < track.clips.length; i++) {
|
|
609
|
-
const clipModel = track.clips[i];
|
|
610
|
-
audio.addModel(clipModel);
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
else if (track.type === Models.TrackType.Marker) {
|
|
614
|
-
const signalHandler = new Tracks.SignalTrackHandler();
|
|
615
|
-
signalHandler.director = this;
|
|
616
|
-
signalHandler.track = track;
|
|
617
|
-
if (track.markers) {
|
|
618
|
-
for (const marker of track.markers) {
|
|
619
|
-
switch (marker.type) {
|
|
620
|
-
case Models.MarkerType.Signal:
|
|
621
|
-
signalHandler.models.push(marker);
|
|
622
|
-
signalHandler.didTrigger.push(false);
|
|
623
|
-
break;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
if (signalHandler !== null && signalHandler.models.length > 0) {
|
|
628
|
-
const rec = GameObject.getComponent(this.gameObject, SignalReceiver);
|
|
629
|
-
if (rec) {
|
|
630
|
-
signalHandler.receivers.push(rec);
|
|
631
|
-
this._signalTracks.push(signalHandler);
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
else if (track.type === Models.TrackType.Signal) {
|
|
636
|
-
const handler = new Tracks.SignalTrackHandler();
|
|
637
|
-
handler.director = this;
|
|
638
|
-
handler.track = track;
|
|
639
|
-
if (track.markers) {
|
|
640
|
-
for (const marker of track.markers) {
|
|
641
|
-
handler.models.push(marker);
|
|
642
|
-
handler.didTrigger.push(false);
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
for (const bound of track.outputs) {
|
|
646
|
-
handler.receivers.push(bound);
|
|
647
|
-
}
|
|
648
|
-
this._signalTracks.push(handler);
|
|
649
|
-
}
|
|
650
|
-
else if (track.type === Models.TrackType.Control) {
|
|
651
|
-
const handler = new Tracks.ControlTrackHandler();
|
|
652
|
-
handler.director = this;
|
|
653
|
-
handler.track = track;
|
|
654
|
-
if (track.clips) {
|
|
655
|
-
for (const clip of track.clips) {
|
|
656
|
-
handler.models.push(clip);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
handler.resolveSourceObjects(this.context);
|
|
660
|
-
this._controlTracks.push(handler);
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
setAudioTracksAllowPlaying(allow) {
|
|
665
|
-
for (const track of this._audioTracks) {
|
|
666
|
-
track.onAllowAudioChanged(allow);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
/** Experimental support for overriding timeline animation data (position or rotation) */
|
|
670
|
-
animationCallbackReceivers = [];
|
|
671
|
-
/** Experimental: Receive callbacks for timeline animation. Allows modification of final value */
|
|
672
|
-
registerAnimationCallback(receiver) { this.animationCallbackReceivers.push(receiver); }
|
|
673
|
-
/** Experimental: Unregister callbacks for timeline animation. Allows modification of final value */
|
|
674
|
-
unregisterAnimationCallback(receiver) {
|
|
675
|
-
const index = this.animationCallbackReceivers.indexOf(receiver);
|
|
676
|
-
if (index === -1)
|
|
677
|
-
return;
|
|
678
|
-
this.animationCallbackReceivers.splice(index, 1);
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
__decorate([
|
|
682
|
-
serializable()
|
|
683
|
-
], PlayableDirector.prototype, "playOnAwake", void 0);
|
|
684
|
-
__decorate([
|
|
685
|
-
serializable()
|
|
686
|
-
], PlayableDirector.prototype, "extrapolationMode", void 0);
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { AnimationMixer, Object3D } from 'three';
|
|
8
|
+
import { isDevEnvironment } from '../../engine/debug/index.js';
|
|
9
|
+
import { FrameEvent } from '../../engine/engine_context.js';
|
|
10
|
+
import { isLocalNetwork } from '../../engine/engine_networking_utils.js';
|
|
11
|
+
import { serializable } from '../../engine/engine_serialization.js';
|
|
12
|
+
import { deepClone, delay, getParam } from '../../engine/engine_utils.js';
|
|
13
|
+
import { Animator } from '../Animator.js';
|
|
14
|
+
import { AudioListener } from '../AudioListener.js';
|
|
15
|
+
import { AudioSource } from '../AudioSource.js';
|
|
16
|
+
import { Behaviour, GameObject } from '../Component.js';
|
|
17
|
+
import { SignalReceiver } from './SignalAsset.js';
|
|
18
|
+
import * as Models from "./TimelineModels.js";
|
|
19
|
+
import * as Tracks from "./TimelineTracks.js";
|
|
20
|
+
const debug = getParam("debugtimeline");
|
|
21
|
+
/**
|
|
22
|
+
* The wrap mode of the {@link PlayableDirector}.
|
|
23
|
+
*/
|
|
24
|
+
export var DirectorWrapMode;
|
|
25
|
+
(function (DirectorWrapMode) {
|
|
26
|
+
/// <summary>
|
|
27
|
+
/// <para>Hold the last frame when the playable time reaches it's duration.</para>
|
|
28
|
+
/// </summary>
|
|
29
|
+
DirectorWrapMode[DirectorWrapMode["Hold"] = 0] = "Hold";
|
|
30
|
+
/// <summary>
|
|
31
|
+
/// <para>Loop back to zero time and continue playing.</para>
|
|
32
|
+
/// </summary>
|
|
33
|
+
DirectorWrapMode[DirectorWrapMode["Loop"] = 1] = "Loop";
|
|
34
|
+
/// <summary>
|
|
35
|
+
/// <para>Do not keep playing when the time reaches the duration.</para>
|
|
36
|
+
/// </summary>
|
|
37
|
+
DirectorWrapMode[DirectorWrapMode["None"] = 2] = "None";
|
|
38
|
+
})(DirectorWrapMode || (DirectorWrapMode = {}));
|
|
39
|
+
/** How the clip handles time outside its start and end range. */
|
|
40
|
+
export var ClipExtrapolation;
|
|
41
|
+
(function (ClipExtrapolation) {
|
|
42
|
+
/** No extrapolation is applied. */
|
|
43
|
+
ClipExtrapolation[ClipExtrapolation["None"] = 0] = "None";
|
|
44
|
+
/** Hold the time at the end value of the clip. */
|
|
45
|
+
ClipExtrapolation[ClipExtrapolation["Hold"] = 1] = "Hold";
|
|
46
|
+
/** Repeat time values outside the start/end range. */
|
|
47
|
+
ClipExtrapolation[ClipExtrapolation["Loop"] = 2] = "Loop";
|
|
48
|
+
/** Repeat time values outside the start/end range, reversing direction at each loop */
|
|
49
|
+
ClipExtrapolation[ClipExtrapolation["PingPong"] = 3] = "PingPong";
|
|
50
|
+
/** Time values are passed in without modification, extending beyond the clips range */
|
|
51
|
+
ClipExtrapolation[ClipExtrapolation["Continue"] = 4] = "Continue";
|
|
52
|
+
})(ClipExtrapolation || (ClipExtrapolation = {}));
|
|
53
|
+
;
|
|
54
|
+
/**
|
|
55
|
+
* The PlayableDirector component is the main component to control timelines in needle engine.
|
|
56
|
+
* It is used to play, pause, stop and evaluate timelines.
|
|
57
|
+
* Assign a TimelineAsset to the `playableAsset` property to start playing a timeline.
|
|
58
|
+
* @category Animation and Sequencing
|
|
59
|
+
* @group Components
|
|
60
|
+
*/
|
|
61
|
+
export class PlayableDirector extends Behaviour {
|
|
62
|
+
static createTrackFunctions = {};
|
|
63
|
+
static registerCreateTrack(type, fn) {
|
|
64
|
+
this.createTrackFunctions[type] = fn;
|
|
65
|
+
}
|
|
66
|
+
playableAsset;
|
|
67
|
+
/** Set to true to start playing the timeline when the scene starts */
|
|
68
|
+
playOnAwake;
|
|
69
|
+
extrapolationMode = DirectorWrapMode.Loop;
|
|
70
|
+
/** @returns true if the timeline is currently playing */
|
|
71
|
+
get isPlaying() { return this._isPlaying; }
|
|
72
|
+
/** @returns true if the timeline is currently paused */
|
|
73
|
+
get isPaused() { return this._isPaused; }
|
|
74
|
+
/** the current time of the timeline */
|
|
75
|
+
get time() { return this._time; }
|
|
76
|
+
set time(value) {
|
|
77
|
+
if (typeof value === "number" && !Number.isNaN(value))
|
|
78
|
+
this._time = value;
|
|
79
|
+
else if (debug || isLocalNetwork()) {
|
|
80
|
+
console.error("INVALID TIMELINE.TIME VALUE", value, this.name);
|
|
81
|
+
}
|
|
82
|
+
;
|
|
83
|
+
}
|
|
84
|
+
/** the duration of the timeline */
|
|
85
|
+
get duration() { return this._duration; }
|
|
86
|
+
set duration(value) { this._duration = value; }
|
|
87
|
+
/** the weight of the timeline. Set to a value below 1 to blend with other timelines */
|
|
88
|
+
get weight() { return this._weight; }
|
|
89
|
+
;
|
|
90
|
+
set weight(value) { this._weight = value; }
|
|
91
|
+
/** the playback speed of the timeline */
|
|
92
|
+
get speed() { return this._speed; }
|
|
93
|
+
set speed(value) { this._speed = value; }
|
|
94
|
+
/** When enabled the timeline will wait for audio tracks to load at the current time before starting to play */
|
|
95
|
+
waitForAudio = true;
|
|
96
|
+
_visibilityChangeEvt;
|
|
97
|
+
_clonedPlayableAsset = false;
|
|
98
|
+
_speed = 1;
|
|
99
|
+
/** @internal */
|
|
100
|
+
awake() {
|
|
101
|
+
if (debug)
|
|
102
|
+
console.log(this, this.playableAsset?.tracks);
|
|
103
|
+
this.rebuildGraph();
|
|
104
|
+
if (!this.isValid() && (debug || isDevEnvironment())) {
|
|
105
|
+
if (debug) {
|
|
106
|
+
console.warn("PlayableDirector is not valid", "Asset?", this.playableAsset, "Tracks:", this.playableAsset?.tracks, "IsArray?", Array.isArray(this.playableAsset?.tracks), this);
|
|
107
|
+
}
|
|
108
|
+
else if (!this.playableAsset?.tracks?.length) {
|
|
109
|
+
console.warn("PlayableDirector has no tracks");
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.warn("PlayableDirector is not valid");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** @internal */
|
|
117
|
+
onEnable() {
|
|
118
|
+
for (const track of this._audioTracks) {
|
|
119
|
+
track.onEnable?.();
|
|
120
|
+
}
|
|
121
|
+
for (const track of this._customTracks) {
|
|
122
|
+
track.onEnable?.();
|
|
123
|
+
}
|
|
124
|
+
for (const track of this._animationTracks) {
|
|
125
|
+
track.onEnable?.();
|
|
126
|
+
}
|
|
127
|
+
if (this.playOnAwake) {
|
|
128
|
+
this.play();
|
|
129
|
+
}
|
|
130
|
+
if (!this._visibilityChangeEvt)
|
|
131
|
+
this._visibilityChangeEvt = () => {
|
|
132
|
+
switch (document.visibilityState) {
|
|
133
|
+
case "hidden":
|
|
134
|
+
this.setAudioTracksAllowPlaying(false);
|
|
135
|
+
break;
|
|
136
|
+
case "visible":
|
|
137
|
+
this.setAudioTracksAllowPlaying(true);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
window.addEventListener('visibilitychange', this._visibilityChangeEvt);
|
|
142
|
+
}
|
|
143
|
+
/** @internal */
|
|
144
|
+
onDisable() {
|
|
145
|
+
this.stop();
|
|
146
|
+
for (const track of this._audioTracks) {
|
|
147
|
+
track.onDisable?.();
|
|
148
|
+
}
|
|
149
|
+
for (const track of this._customTracks) {
|
|
150
|
+
track.onDisable?.();
|
|
151
|
+
}
|
|
152
|
+
for (const track of this._animationTracks) {
|
|
153
|
+
track.onDisable?.();
|
|
154
|
+
}
|
|
155
|
+
if (this._visibilityChangeEvt)
|
|
156
|
+
window.removeEventListener('visibilitychange', this._visibilityChangeEvt);
|
|
157
|
+
}
|
|
158
|
+
/** @internal */
|
|
159
|
+
onDestroy() {
|
|
160
|
+
for (const tracks of this._allTracks) {
|
|
161
|
+
for (const track of tracks)
|
|
162
|
+
track.onDestroy?.();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** @internal */
|
|
166
|
+
rebuildGraph() {
|
|
167
|
+
if (!this.isValid())
|
|
168
|
+
return;
|
|
169
|
+
this.resolveBindings();
|
|
170
|
+
this.updateTimelineDuration();
|
|
171
|
+
this.setupAndCreateTrackHandlers();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Play the timeline from the current time.
|
|
175
|
+
* If the timeline is already playing this method does nothing.
|
|
176
|
+
*/
|
|
177
|
+
async play() {
|
|
178
|
+
if (!this.isValid())
|
|
179
|
+
return;
|
|
180
|
+
const pauseChanged = this._isPaused == true;
|
|
181
|
+
this._isPaused = false;
|
|
182
|
+
if (this._isPlaying)
|
|
183
|
+
return;
|
|
184
|
+
this._isPlaying = true;
|
|
185
|
+
if (pauseChanged)
|
|
186
|
+
this.invokePauseChangedMethodsOnTracks();
|
|
187
|
+
if (this.waitForAudio) {
|
|
188
|
+
// Make sure audio tracks have loaded at the current time
|
|
189
|
+
const promises = [];
|
|
190
|
+
for (const track of this._audioTracks) {
|
|
191
|
+
const promise = track.loadAudio(this._time, 1, 0);
|
|
192
|
+
if (promise)
|
|
193
|
+
promises.push(promise);
|
|
194
|
+
}
|
|
195
|
+
if (promises.length > 0) {
|
|
196
|
+
await Promise.all(promises);
|
|
197
|
+
if (!this._isPlaying)
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
while (this._audioTracks.length > 0 && this._isPlaying && !AudioSource.userInteractionRegistered && this.waitForAudio)
|
|
201
|
+
await delay(200);
|
|
202
|
+
}
|
|
203
|
+
this.invokeStateChangedMethodsOnTracks();
|
|
204
|
+
// Update timeline in LateUpdate to give other scripts time to react to the updated state
|
|
205
|
+
// e.g. if we animate OrbitControls look at target we want those changes to be applied in onBeforeRender
|
|
206
|
+
// if we use onBeforeRender here it will be called *after* the regular onBeforeRender events
|
|
207
|
+
// which is too late
|
|
208
|
+
this._internalUpdateRoutine = this.startCoroutine(this.internalUpdate(), FrameEvent.LateUpdate);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Pause the timeline.
|
|
212
|
+
*/
|
|
213
|
+
pause() {
|
|
214
|
+
if (!this.isValid())
|
|
215
|
+
return;
|
|
216
|
+
this._isPlaying = false;
|
|
217
|
+
if (this._isPaused)
|
|
218
|
+
return;
|
|
219
|
+
this._isPaused = true;
|
|
220
|
+
this.internalEvaluate();
|
|
221
|
+
this.invokePauseChangedMethodsOnTracks();
|
|
222
|
+
this.invokeStateChangedMethodsOnTracks();
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Stop the timeline.
|
|
226
|
+
*/
|
|
227
|
+
stop() {
|
|
228
|
+
this._isStopping = true;
|
|
229
|
+
for (const track of this._audioTracks)
|
|
230
|
+
track.stop();
|
|
231
|
+
const pauseChanged = this._isPaused == true;
|
|
232
|
+
const wasPlaying = this._isPlaying;
|
|
233
|
+
if (this._isPlaying) {
|
|
234
|
+
this._time = 0;
|
|
235
|
+
this._isPlaying = false;
|
|
236
|
+
this._isPaused = false;
|
|
237
|
+
this.internalEvaluate();
|
|
238
|
+
if (pauseChanged)
|
|
239
|
+
this.invokePauseChangedMethodsOnTracks();
|
|
240
|
+
}
|
|
241
|
+
this._isPlaying = false;
|
|
242
|
+
this._isPaused = false;
|
|
243
|
+
if (pauseChanged && !wasPlaying)
|
|
244
|
+
this.invokePauseChangedMethodsOnTracks();
|
|
245
|
+
if (wasPlaying)
|
|
246
|
+
this.invokeStateChangedMethodsOnTracks();
|
|
247
|
+
if (this._internalUpdateRoutine)
|
|
248
|
+
this.stopCoroutine(this._internalUpdateRoutine);
|
|
249
|
+
this._internalUpdateRoutine = null;
|
|
250
|
+
this._isStopping = false;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Evaluate the timeline at the current time. This is useful when you want to manually update the timeline e.g. when the timeline is paused and you set `time` to a new value.
|
|
254
|
+
*/
|
|
255
|
+
evaluate() {
|
|
256
|
+
this.internalEvaluate(true);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* @returns true if the timeline is valid and has tracks
|
|
260
|
+
*/
|
|
261
|
+
isValid() {
|
|
262
|
+
return this.playableAsset && this.playableAsset.tracks && Array.isArray(this.playableAsset.tracks);
|
|
263
|
+
}
|
|
264
|
+
/** Iterates over all tracks of the timeline
|
|
265
|
+
* @returns all tracks of the timeline
|
|
266
|
+
*/
|
|
267
|
+
*forEachTrack() {
|
|
268
|
+
for (const tracks of this._allTracks) {
|
|
269
|
+
for (const track of tracks)
|
|
270
|
+
yield track;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* @returns all animation tracks of the timeline
|
|
275
|
+
*/
|
|
276
|
+
get animationTracks() {
|
|
277
|
+
return this._animationTracks;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* @returns all audio tracks of the timeline
|
|
281
|
+
*/
|
|
282
|
+
get audioTracks() {
|
|
283
|
+
return this._audioTracks;
|
|
284
|
+
}
|
|
285
|
+
_guidsMap;
|
|
286
|
+
/** @internal */
|
|
287
|
+
resolveGuids(map) {
|
|
288
|
+
this._guidsMap = map;
|
|
289
|
+
}
|
|
290
|
+
// INTERNALS
|
|
291
|
+
_isPlaying = false;
|
|
292
|
+
_internalUpdateRoutine;
|
|
293
|
+
_isPaused = false;
|
|
294
|
+
/** internal, true during the time stop() is being processed */
|
|
295
|
+
_isStopping = false;
|
|
296
|
+
_time = 0;
|
|
297
|
+
_duration = 0;
|
|
298
|
+
_weight = 1;
|
|
299
|
+
_animationTracks = [];
|
|
300
|
+
_audioTracks = [];
|
|
301
|
+
_signalTracks = [];
|
|
302
|
+
_controlTracks = [];
|
|
303
|
+
_customTracks = [];
|
|
304
|
+
_allTracks = [
|
|
305
|
+
this._animationTracks,
|
|
306
|
+
this._audioTracks,
|
|
307
|
+
this._signalTracks,
|
|
308
|
+
this._controlTracks,
|
|
309
|
+
this._customTracks
|
|
310
|
+
];
|
|
311
|
+
/** should be called after evaluate if the director was playing */
|
|
312
|
+
invokePauseChangedMethodsOnTracks() {
|
|
313
|
+
for (const track of this.forEachTrack()) {
|
|
314
|
+
track.onPauseChanged?.call(track);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
invokeStateChangedMethodsOnTracks() {
|
|
318
|
+
for (const track of this.forEachTrack()) {
|
|
319
|
+
track.onStateChanged?.call(track, this._isPlaying);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
*internalUpdate() {
|
|
323
|
+
while (this._isPlaying && this.activeAndEnabled) {
|
|
324
|
+
if (!this._isPaused && this._isPlaying) {
|
|
325
|
+
this._time += this.context.time.deltaTime * this.speed;
|
|
326
|
+
this.internalEvaluate();
|
|
327
|
+
}
|
|
328
|
+
// for (let i = 0; i < 5; i++)
|
|
329
|
+
yield;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* PlayableDirector lifecycle should always call this instead of "evaluate"
|
|
334
|
+
* @param called_by_user If true the evaluation is called by the user (e.g. via evaluate())
|
|
335
|
+
*/
|
|
336
|
+
internalEvaluate(called_by_user = false) {
|
|
337
|
+
// when the timeline is called by a user via evaluate() we want to keep updating activation tracks
|
|
338
|
+
// because "isPlaying" might be false but the director is still active. See NE-3737
|
|
339
|
+
if (!this.isValid())
|
|
340
|
+
return;
|
|
341
|
+
let t = this._time;
|
|
342
|
+
switch (this.extrapolationMode) {
|
|
343
|
+
case DirectorWrapMode.Hold:
|
|
344
|
+
if (this._speed > 0)
|
|
345
|
+
t = Math.min(t, this._duration);
|
|
346
|
+
else if (this._speed < 0)
|
|
347
|
+
t = Math.max(t, 0);
|
|
348
|
+
this._time = t;
|
|
349
|
+
break;
|
|
350
|
+
case DirectorWrapMode.Loop:
|
|
351
|
+
t %= this._duration;
|
|
352
|
+
this._time = t;
|
|
353
|
+
break;
|
|
354
|
+
case DirectorWrapMode.None:
|
|
355
|
+
if (t > this._duration) {
|
|
356
|
+
this.stop();
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
const time = this._time;
|
|
362
|
+
for (const track of this.playableAsset.tracks) {
|
|
363
|
+
if (track.muted)
|
|
364
|
+
continue;
|
|
365
|
+
switch (track.type) {
|
|
366
|
+
case Models.TrackType.Activation:
|
|
367
|
+
// when the timeline is being disabled or stopped
|
|
368
|
+
// then we want to leave objects active state as they were
|
|
369
|
+
// see NE-3241
|
|
370
|
+
// TODO: support all "post-playback-state" settings an activation track has, this is just "Leave as is"
|
|
371
|
+
if (!called_by_user && !this._isPlaying)
|
|
372
|
+
continue;
|
|
373
|
+
for (let i = 0; i < track.outputs.length; i++) {
|
|
374
|
+
const binding = track.outputs[i];
|
|
375
|
+
if (typeof binding === "object") {
|
|
376
|
+
let isActive = false;
|
|
377
|
+
if (track.clips) {
|
|
378
|
+
for (const clip of track.clips) {
|
|
379
|
+
if (clip.start <= time && time <= clip.end) {
|
|
380
|
+
isActive = true;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
const obj = binding;
|
|
385
|
+
if (obj.visible !== undefined) {
|
|
386
|
+
if (obj.visible !== isActive) {
|
|
387
|
+
obj.visible = isActive;
|
|
388
|
+
if (debug)
|
|
389
|
+
console.warn(this.name, "set ActivationTrack-" + i, obj.name, isActive, time);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// When timeline reaches the end "stop()" is called which is evaluating with time 0
|
|
398
|
+
// We don't want to re-evaluate the animation then in case the timeline is blended with the Animator
|
|
399
|
+
// e.g then the timeline animation at time 0 is 100% applied on top of the animator animation
|
|
400
|
+
if (!this._isStopping) {
|
|
401
|
+
for (const handler of this._animationTracks) {
|
|
402
|
+
handler.evaluate(time);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
for (const handler of this._audioTracks) {
|
|
406
|
+
handler.evaluate(time);
|
|
407
|
+
}
|
|
408
|
+
for (const sig of this._signalTracks) {
|
|
409
|
+
sig.evaluate(time);
|
|
410
|
+
}
|
|
411
|
+
for (const ctrl of this._controlTracks) {
|
|
412
|
+
ctrl.evaluate(time);
|
|
413
|
+
}
|
|
414
|
+
for (const cust of this._customTracks) {
|
|
415
|
+
cust.evaluate(time);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
resolveBindings() {
|
|
419
|
+
if (!this._clonedPlayableAsset) {
|
|
420
|
+
this._clonedPlayableAsset = true;
|
|
421
|
+
this.playableAsset = deepClone(this.playableAsset);
|
|
422
|
+
}
|
|
423
|
+
if (!this.playableAsset || !this.playableAsset.tracks)
|
|
424
|
+
return;
|
|
425
|
+
// if the director has a parent we assume it is part of the current scene
|
|
426
|
+
// if not (e.g. when loaded via adressable but not yet added to any scene)
|
|
427
|
+
// we can only resolve objects that are children
|
|
428
|
+
const root = this.findRoot(this.gameObject);
|
|
429
|
+
for (const track of this.playableAsset.tracks) {
|
|
430
|
+
for (let i = track.outputs.length - 1; i >= 0; i--) {
|
|
431
|
+
let binding = track.outputs[i];
|
|
432
|
+
if (typeof binding === "string") {
|
|
433
|
+
if (this._guidsMap && this._guidsMap[binding])
|
|
434
|
+
binding = this._guidsMap[binding];
|
|
435
|
+
const obj = GameObject.findByGuid(binding, root);
|
|
436
|
+
if (obj === null || typeof obj !== "object") {
|
|
437
|
+
// if the binding is missing remove it to avoid unnecessary loops
|
|
438
|
+
track.outputs.splice(i, 1);
|
|
439
|
+
console.warn("Failed to resolve binding", binding, track.name, track.type);
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
if (debug)
|
|
443
|
+
console.log("Resolved binding", binding, "to", obj);
|
|
444
|
+
track.outputs[i] = obj;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
else if (binding === null) {
|
|
448
|
+
track.outputs.splice(i, 1);
|
|
449
|
+
if (PlayableDirector.createTrackFunctions[track.type]) {
|
|
450
|
+
// if a custom track doesnt have a binding its ok
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
// if the binding is missing remove it to avoid unnecessary loops
|
|
454
|
+
if (track.type !== Models.TrackType.Audio && track.type !== Models.TrackType.Control && track.type !== Models.TrackType.Marker && track.type !== Models.TrackType.Signal)
|
|
455
|
+
console.warn("Missing binding", binding, track.name, track.type, this.name, this.playableAsset.name);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
if (track.type === Models.TrackType.Control) {
|
|
459
|
+
if (track.clips) {
|
|
460
|
+
for (let i = 0; i < track.clips.length; i++) {
|
|
461
|
+
const clip = track.clips[i];
|
|
462
|
+
let binding = clip.asset.sourceObject;
|
|
463
|
+
if (typeof binding === "string") {
|
|
464
|
+
if (this._guidsMap && this._guidsMap[binding])
|
|
465
|
+
binding = this._guidsMap[binding];
|
|
466
|
+
const obj = GameObject.findByGuid(binding, root);
|
|
467
|
+
if (obj === null || typeof obj !== "object") {
|
|
468
|
+
console.warn("Failed to resolve sourceObject binding", binding, track.name, clip);
|
|
469
|
+
}
|
|
470
|
+
else {
|
|
471
|
+
if (debug)
|
|
472
|
+
console.log("Resolved binding", binding, "to", obj);
|
|
473
|
+
clip.asset.sourceObject = obj;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
findRoot(current) {
|
|
482
|
+
if (current.parent)
|
|
483
|
+
return this.findRoot(current.parent);
|
|
484
|
+
return current;
|
|
485
|
+
}
|
|
486
|
+
updateTimelineDuration() {
|
|
487
|
+
this._duration = 0;
|
|
488
|
+
if (!this.playableAsset || !this.playableAsset.tracks)
|
|
489
|
+
return;
|
|
490
|
+
for (const track of this.playableAsset.tracks) {
|
|
491
|
+
if (track.muted === true)
|
|
492
|
+
continue;
|
|
493
|
+
if (track.clips) {
|
|
494
|
+
for (const clip of track.clips) {
|
|
495
|
+
if (clip.end > this._duration)
|
|
496
|
+
this._duration = clip.end;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
if (track.markers) {
|
|
500
|
+
for (const marker of track.markers) {
|
|
501
|
+
if (marker.time > this._duration)
|
|
502
|
+
this._duration = marker.time + .001;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
// console.log("timeline duration", this._duration, this.playableAsset);
|
|
507
|
+
}
|
|
508
|
+
setupAndCreateTrackHandlers() {
|
|
509
|
+
this._animationTracks.length = 0;
|
|
510
|
+
this._audioTracks.length = 0;
|
|
511
|
+
this._signalTracks.length = 0;
|
|
512
|
+
if (!this.playableAsset)
|
|
513
|
+
return;
|
|
514
|
+
let audioListener = GameObject.findObjectOfType(AudioListener, this.context);
|
|
515
|
+
for (const track of this.playableAsset.tracks) {
|
|
516
|
+
const type = track.type;
|
|
517
|
+
const registered = PlayableDirector.createTrackFunctions[type];
|
|
518
|
+
if (registered !== null && registered !== undefined) {
|
|
519
|
+
const res = registered(this, track);
|
|
520
|
+
if (typeof res.evaluate === "function") {
|
|
521
|
+
res.director = this;
|
|
522
|
+
res.track = track;
|
|
523
|
+
this._customTracks.push(res);
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
// only handle animation tracks
|
|
528
|
+
if (track.type === Models.TrackType.Animation) {
|
|
529
|
+
if (!track.clips || track.clips.length <= 0) {
|
|
530
|
+
if (debug)
|
|
531
|
+
console.warn("Animation track has no clips", track);
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
// loop outputs / bindings, they should contain animator references
|
|
535
|
+
for (let i = track.outputs.length - 1; i >= 0; i--) {
|
|
536
|
+
let binding = track.outputs[i];
|
|
537
|
+
if (binding instanceof Object3D) {
|
|
538
|
+
const anim = GameObject.getOrAddComponent(binding, Animator);
|
|
539
|
+
if (anim)
|
|
540
|
+
binding = anim;
|
|
541
|
+
}
|
|
542
|
+
const animationClips = binding?.gameObject?.animations;
|
|
543
|
+
if (animationClips) {
|
|
544
|
+
const handler = new Tracks.AnimationTrackHandler();
|
|
545
|
+
handler.trackOffset = track.trackOffset;
|
|
546
|
+
handler.director = this;
|
|
547
|
+
handler.track = track;
|
|
548
|
+
for (let i = 0; i < track.clips.length; i++) {
|
|
549
|
+
const clipModel = track.clips[i];
|
|
550
|
+
const animModel = clipModel.asset;
|
|
551
|
+
if (!animModel) {
|
|
552
|
+
console.error(`Timeline ${this.name}: clip #${i} on track \"${track.name}\" has no animation data`);
|
|
553
|
+
continue;
|
|
554
|
+
}
|
|
555
|
+
// console.log(clipModel, track);
|
|
556
|
+
const targetObjectId = animModel.clip;
|
|
557
|
+
let clip = targetObjectId;
|
|
558
|
+
if (typeof clip === "string" || typeof clip === "number") {
|
|
559
|
+
clip = animationClips.find(c => c.name === targetObjectId);
|
|
560
|
+
}
|
|
561
|
+
if (debug)
|
|
562
|
+
console.log(animModel, targetObjectId, "→", clip);
|
|
563
|
+
if (!clip) {
|
|
564
|
+
console.warn("Could not find animationClip for model", clipModel, track.name, this.name, this.playableAsset?.name, animationClips, binding);
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
// Try to share the mixer with the animator
|
|
568
|
+
if (binding instanceof Animator && binding.runtimeAnimatorController) {
|
|
569
|
+
if (!binding.__internalDidAwakeAndStart)
|
|
570
|
+
binding.initializeRuntimeAnimatorController();
|
|
571
|
+
// Call bind once to ensure the animator is setup and has a mixer
|
|
572
|
+
if (!binding.runtimeAnimatorController.mixer)
|
|
573
|
+
binding.runtimeAnimatorController.bind(binding);
|
|
574
|
+
handler.mixer = binding.runtimeAnimatorController.mixer;
|
|
575
|
+
}
|
|
576
|
+
// If we can not get the mixer from the animator then create a new one
|
|
577
|
+
if (!handler.mixer) {
|
|
578
|
+
handler.mixer = new AnimationMixer(binding.gameObject);
|
|
579
|
+
this.context.animations.registerAnimationMixer(handler.mixer);
|
|
580
|
+
}
|
|
581
|
+
handler.clips.push(clip);
|
|
582
|
+
// uncache because we want to create a new action
|
|
583
|
+
// this is needed because if a clip is used multiple times in a track (or even multiple tracks)
|
|
584
|
+
// we want to avoid setting weights on the same instance for clips/objects that are not active
|
|
585
|
+
handler.mixer.uncacheAction(clip);
|
|
586
|
+
handler.createHooks(clipModel.asset, clip);
|
|
587
|
+
const clipAction = handler.mixer.clipAction(clip); // new AnimationAction(handler.mixer, clip, null, null);
|
|
588
|
+
handler.actions.push(clipAction);
|
|
589
|
+
handler.models.push(clipModel);
|
|
590
|
+
}
|
|
591
|
+
this._animationTracks.push(handler);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
else if (track.type === Models.TrackType.Audio) {
|
|
596
|
+
if (!track.clips || track.clips.length <= 0)
|
|
597
|
+
continue;
|
|
598
|
+
const audio = new Tracks.AudioTrackHandler();
|
|
599
|
+
audio.director = this;
|
|
600
|
+
audio.track = track;
|
|
601
|
+
audio.audioSource = track.outputs.find(o => o instanceof AudioSource);
|
|
602
|
+
this._audioTracks.push(audio);
|
|
603
|
+
if (!audioListener) {
|
|
604
|
+
// If the scene doesnt have an AudioListener we add one to the main camera
|
|
605
|
+
audioListener = this.context.mainCameraComponent?.gameObject.addComponent(AudioListener);
|
|
606
|
+
}
|
|
607
|
+
audio.listener = audioListener.listener;
|
|
608
|
+
for (let i = 0; i < track.clips.length; i++) {
|
|
609
|
+
const clipModel = track.clips[i];
|
|
610
|
+
audio.addModel(clipModel);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
else if (track.type === Models.TrackType.Marker) {
|
|
614
|
+
const signalHandler = new Tracks.SignalTrackHandler();
|
|
615
|
+
signalHandler.director = this;
|
|
616
|
+
signalHandler.track = track;
|
|
617
|
+
if (track.markers) {
|
|
618
|
+
for (const marker of track.markers) {
|
|
619
|
+
switch (marker.type) {
|
|
620
|
+
case Models.MarkerType.Signal:
|
|
621
|
+
signalHandler.models.push(marker);
|
|
622
|
+
signalHandler.didTrigger.push(false);
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
if (signalHandler !== null && signalHandler.models.length > 0) {
|
|
628
|
+
const rec = GameObject.getComponent(this.gameObject, SignalReceiver);
|
|
629
|
+
if (rec) {
|
|
630
|
+
signalHandler.receivers.push(rec);
|
|
631
|
+
this._signalTracks.push(signalHandler);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
else if (track.type === Models.TrackType.Signal) {
|
|
636
|
+
const handler = new Tracks.SignalTrackHandler();
|
|
637
|
+
handler.director = this;
|
|
638
|
+
handler.track = track;
|
|
639
|
+
if (track.markers) {
|
|
640
|
+
for (const marker of track.markers) {
|
|
641
|
+
handler.models.push(marker);
|
|
642
|
+
handler.didTrigger.push(false);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
for (const bound of track.outputs) {
|
|
646
|
+
handler.receivers.push(bound);
|
|
647
|
+
}
|
|
648
|
+
this._signalTracks.push(handler);
|
|
649
|
+
}
|
|
650
|
+
else if (track.type === Models.TrackType.Control) {
|
|
651
|
+
const handler = new Tracks.ControlTrackHandler();
|
|
652
|
+
handler.director = this;
|
|
653
|
+
handler.track = track;
|
|
654
|
+
if (track.clips) {
|
|
655
|
+
for (const clip of track.clips) {
|
|
656
|
+
handler.models.push(clip);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
handler.resolveSourceObjects(this.context);
|
|
660
|
+
this._controlTracks.push(handler);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
setAudioTracksAllowPlaying(allow) {
|
|
665
|
+
for (const track of this._audioTracks) {
|
|
666
|
+
track.onAllowAudioChanged(allow);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
/** Experimental support for overriding timeline animation data (position or rotation) */
|
|
670
|
+
animationCallbackReceivers = [];
|
|
671
|
+
/** Experimental: Receive callbacks for timeline animation. Allows modification of final value */
|
|
672
|
+
registerAnimationCallback(receiver) { this.animationCallbackReceivers.push(receiver); }
|
|
673
|
+
/** Experimental: Unregister callbacks for timeline animation. Allows modification of final value */
|
|
674
|
+
unregisterAnimationCallback(receiver) {
|
|
675
|
+
const index = this.animationCallbackReceivers.indexOf(receiver);
|
|
676
|
+
if (index === -1)
|
|
677
|
+
return;
|
|
678
|
+
this.animationCallbackReceivers.splice(index, 1);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
__decorate([
|
|
682
|
+
serializable()
|
|
683
|
+
], PlayableDirector.prototype, "playOnAwake", void 0);
|
|
684
|
+
__decorate([
|
|
685
|
+
serializable()
|
|
686
|
+
], PlayableDirector.prototype, "extrapolationMode", void 0);
|
|
687
687
|
//# sourceMappingURL=PlayableDirector.js.map
|