@needle-tools/engine 4.7.0-alpha → 4.7.0-next.da47826
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 +3768 -3768
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +25 -0
- package/dist/{gltf-progressive-Bm9eEfgu.min.js → gltf-progressive-Bl4okF1b.min.js} +1 -1
- package/dist/{gltf-progressive-GjIqwSG3.js → gltf-progressive-DSpdn0QT.js} +2 -2
- package/dist/{gltf-progressive-Dn6o99rH.umd.cjs → gltf-progressive-P8b8a0qY.umd.cjs} +1 -1
- package/dist/{needle-engine.bundle-CK8cQ3FX.umd.cjs → needle-engine.bundle-Bu88IoKB.umd.cjs} +57 -57
- package/dist/{needle-engine.bundle-CXtflnL6.js → needle-engine.bundle-CO1Ub9sm.js} +638 -638
- package/dist/{needle-engine.bundle-BEUFTdl6.min.js → needle-engine.bundle-D95XN5pP.min.js} +62 -62
- package/dist/needle-engine.d.ts +130 -129
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-8AQTeZsr.umd.cjs → postprocessing-CjW23fio.umd.cjs} +2 -2
- package/dist/{postprocessing-BkxN_08g.js → postprocessing-DYLNOL3W.js} +3 -3
- package/dist/{postprocessing-BDScN9yu.min.js → postprocessing-xYQWCHFu.min.js} +2 -2
- package/dist/{three-DMrv-4ar.umd.cjs → three-B_hneGZr.umd.cjs} +4 -4
- package/dist/{three-Bz6X1mrw.js → three-DrqIzZTH.js} +4198 -4198
- package/dist/{three-Boa-jOq-.min.js → three-DuDKwKB8.min.js} +33 -33
- package/dist/{three-examples-GggCDHv0.js → three-examples-B50TT3Iu.js} +5 -5
- package/dist/{three-examples-DuVhxqft.min.js → three-examples-DaDLBuy6.min.js} +14 -14
- package/dist/{three-examples-C7ryg8vN.umd.cjs → three-examples-X3OadjXB.umd.cjs} +3 -3
- package/dist/{three-mesh-ui-CY6Izc7C.min.js → three-mesh-ui-B3p3gyUz.min.js} +1 -1
- package/dist/{three-mesh-ui-CwlN0FUC.umd.cjs → three-mesh-ui-CQiIQIlA.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-CLNOfsWn.js → three-mesh-ui-CxuWt7m-.js} +1 -1
- package/dist/{vendor-zxXa3Dmr.min.js → vendor-BlSxe9JJ.min.js} +3 -3
- package/dist/{vendor-BSD1RQIh.js → vendor-BmYIgaS1.js} +3 -3
- package/dist/{vendor-DHr4aqIZ.umd.cjs → vendor-Cavtu3CP.umd.cjs} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +166 -166
- package/lib/engine/engine_addressables.js +608 -608
- 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 +1672 -1672
- 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 +91 -91
- 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 +31 -31
- package/lib/engine/engine_lods.js +146 -146
- 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 +784 -784
- 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 +121 -121
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +52 -52
- 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 +480 -480
- 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/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 +120 -120
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +174 -174
- 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 +143 -143
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- 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 +31 -31
- 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 +680 -680
- 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 +1823 -1823
- 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 +117 -117
- 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 +168 -168
- 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 +925 -925
- 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 +136 -136
- 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 +57 -57
- 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 +560 -560
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +0 -25
- package/src/engine-schemes/dist/api.js +0 -17
- package/src/engine-schemes/dist/api.js.meta +0 -7
- package/src/engine-schemes/dist/schemes.js +0 -25
- package/src/engine-schemes/dist/schemes.js.meta +0 -7
- package/src/engine-schemes/dist/synced-camera-model.js +0 -74
- package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
- package/src/engine-schemes/dist/synced-transform-model.js +0 -73
- package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
- package/src/engine-schemes/dist/transform.js +0 -46
- package/src/engine-schemes/dist/transform.js.meta +0 -7
- package/src/engine-schemes/dist/vec2.js +0 -32
- package/src/engine-schemes/dist/vec2.js.meta +0 -7
- package/src/engine-schemes/dist/vec3.js +0 -36
- package/src/engine-schemes/dist/vec3.js.meta +0 -7
- package/src/engine-schemes/dist/vec4.js +0 -40
- package/src/engine-schemes/dist/vec4.js.meta +0 -7
- package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
|
@@ -1,647 +1,647 @@
|
|
|
1
|
-
import { Object3D } from "three";
|
|
2
|
-
|
|
3
|
-
import { getParam } from "../../../../../engine/engine_utils.js";
|
|
4
|
-
import { makeNameSafeForUSD,USDDocument, USDObject, USDWriter } from "../../ThreeUSDZExporter.js";
|
|
5
|
-
import type { RegisteredAnimationInfo } from "./../Animation.js";
|
|
6
|
-
import { BehaviorExtension } from "./Behaviour.js";
|
|
7
|
-
|
|
8
|
-
const debug = getParam("debugusdz");
|
|
9
|
-
|
|
10
|
-
// TODO: rename to usdz element
|
|
11
|
-
export interface IBehaviorElement {
|
|
12
|
-
id: string;
|
|
13
|
-
writeTo(document: USDDocument, writer: USDWriter);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export class BehaviorModel {
|
|
17
|
-
|
|
18
|
-
static global_id: number = 0;
|
|
19
|
-
id: string;
|
|
20
|
-
trigger: IBehaviorElement | IBehaviorElement[];
|
|
21
|
-
action: IBehaviorElement;
|
|
22
|
-
exclusive: boolean = false;
|
|
23
|
-
|
|
24
|
-
makeExclusive(exclusive: boolean): BehaviorModel {
|
|
25
|
-
this.exclusive = exclusive;
|
|
26
|
-
return this;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
constructor(id: string, trigger: IBehaviorElement | IBehaviorElement[], action: IBehaviorElement) {
|
|
30
|
-
this.id = "Behavior_" + makeNameSafeForUSD(id) + "_" + BehaviorModel.global_id++;
|
|
31
|
-
this.trigger = trigger;
|
|
32
|
-
this.action = action;
|
|
33
|
-
|
|
34
|
-
// Special case: SceneTransition enter triggers should never run multiple times, even if the stage loops.
|
|
35
|
-
// There seems to have been a change in behavior in iOS, where SceneTransition enter runs even
|
|
36
|
-
// when the stage length is reached...
|
|
37
|
-
// BUT unfortunately it looks like child groups are also ignored then, and their own loops stop working
|
|
38
|
-
// once any parent is set to "ignore", which is different than what's in the documentation.
|
|
39
|
-
/*
|
|
40
|
-
if (trigger instanceof TriggerModel) {
|
|
41
|
-
if (trigger.tokenId === "SceneTransition" && trigger.type === "enter") {
|
|
42
|
-
const wrapper = ActionBuilder.sequence(action);
|
|
43
|
-
wrapper.multiplePerformOperation = "ignore";
|
|
44
|
-
this.action = wrapper;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
*/
|
|
48
|
-
// Another idea: we let actions run forever by appending a waitAction to them
|
|
49
|
-
// Also doesn't seem to work... the scene start action still runs again
|
|
50
|
-
/*
|
|
51
|
-
if (trigger instanceof TriggerModel) {
|
|
52
|
-
if (trigger.tokenId === "SceneTransition" && trigger.type === "enter") {
|
|
53
|
-
const wrapper = ActionBuilder.sequence(action, ActionBuilder.waitAction(9999999999));
|
|
54
|
-
this.action = wrapper;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
*/
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
writeTo(_ext: BehaviorExtension, document: USDDocument, writer: USDWriter) {
|
|
61
|
-
if (!this.trigger || !this.action) return;
|
|
62
|
-
writer.beginBlock(`def Preliminary_Behavior "${this.id}"`);
|
|
63
|
-
let triggerString = "";
|
|
64
|
-
if (Array.isArray(this.trigger)) {
|
|
65
|
-
triggerString = "[";
|
|
66
|
-
for (let i = 0; i < this.trigger.length; i++) {
|
|
67
|
-
const tr = this.trigger[i];
|
|
68
|
-
triggerString += "<" + tr.id + ">";
|
|
69
|
-
if (i + 1 < this.trigger.length) triggerString += ", ";
|
|
70
|
-
}
|
|
71
|
-
triggerString += "]";
|
|
72
|
-
}
|
|
73
|
-
else
|
|
74
|
-
triggerString = `<${this.trigger.id}>`;
|
|
75
|
-
|
|
76
|
-
writer.appendLine(`rel triggers = ${triggerString}`);
|
|
77
|
-
writer.appendLine(`rel actions = <${this.action.id}>`);
|
|
78
|
-
writer.appendLine(`uniform bool exclusive = ${this.exclusive ? 1 : 0}`); // Apple uses 0 and 1 for bools
|
|
79
|
-
writer.appendLine();
|
|
80
|
-
if (Array.isArray(this.trigger)) {
|
|
81
|
-
for (const trigger of this.trigger) {
|
|
82
|
-
trigger.writeTo(document, writer);
|
|
83
|
-
writer.appendLine();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else
|
|
87
|
-
this.trigger.writeTo(document, writer);
|
|
88
|
-
writer.appendLine();
|
|
89
|
-
this.action.writeTo(document, writer);
|
|
90
|
-
writer.closeBlock();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
export type Target = USDObject | USDObject[] | Object3D | Object3D[];
|
|
96
|
-
|
|
97
|
-
const addedStrings = new Set<string>();
|
|
98
|
-
/** called to resolve target objects to usdz paths */
|
|
99
|
-
function resolve(targetObject: Target, document: USDDocument): string {
|
|
100
|
-
let result: string = "";
|
|
101
|
-
if (Array.isArray(targetObject)) {
|
|
102
|
-
addedStrings.clear();
|
|
103
|
-
let str = "[ ";
|
|
104
|
-
for (let i = 0; i < targetObject.length; i++) {
|
|
105
|
-
let obj = targetObject[i];
|
|
106
|
-
if (!obj) {
|
|
107
|
-
console.warn("Invalid target object in behavior", targetObject + ". Is the object exported?");
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
if (typeof obj === "string") {
|
|
111
|
-
if (addedStrings.has(obj)) continue;
|
|
112
|
-
str += obj;
|
|
113
|
-
addedStrings.add(obj);
|
|
114
|
-
}
|
|
115
|
-
else if (typeof obj === "object") {
|
|
116
|
-
//@ts-ignore
|
|
117
|
-
if (obj.isObject3D) {
|
|
118
|
-
//@ts-ignore
|
|
119
|
-
obj = document.findById(obj.uuid);
|
|
120
|
-
if (!obj) {
|
|
121
|
-
console.warn("Invalid target object in behavior", targetObject + ". Is the object exported?");
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
const res = (obj as any).getPath?.call(obj) as string;
|
|
126
|
-
if (addedStrings.has(res)) continue;
|
|
127
|
-
// console.log(str, res, addedStrings)
|
|
128
|
-
str += res;
|
|
129
|
-
addedStrings.add(res);
|
|
130
|
-
}
|
|
131
|
-
if (i + 1 < targetObject.length) str += ", ";
|
|
132
|
-
}
|
|
133
|
-
str += " ]";
|
|
134
|
-
result = str;
|
|
135
|
-
addedStrings.clear();
|
|
136
|
-
}
|
|
137
|
-
else if (typeof targetObject === "object") {
|
|
138
|
-
const sourceObject = targetObject;
|
|
139
|
-
//@ts-ignore
|
|
140
|
-
if (sourceObject.isObject3D) {
|
|
141
|
-
//@ts-ignore
|
|
142
|
-
targetObject = document.findById(sourceObject.uuid);
|
|
143
|
-
}
|
|
144
|
-
if (!targetObject) {
|
|
145
|
-
console.error("Invalid target object in behavior, the target object is likely missing from USDZ export. Is the object exported?", sourceObject);
|
|
146
|
-
throw new Error(`Invalid target object in behavior, the target object is likely missing from USDZ export. Please report a bug. uuid: ${sourceObject.uuid}.`);
|
|
147
|
-
}
|
|
148
|
-
result = (targetObject as any).getPath?.call(targetObject) as string;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return result;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export class TriggerModel implements IBehaviorElement {
|
|
155
|
-
static global_id: number = 0;
|
|
156
|
-
|
|
157
|
-
id: string;
|
|
158
|
-
targetId?: string | Target;
|
|
159
|
-
tokenId?: string;
|
|
160
|
-
type?: string;
|
|
161
|
-
distance?: number;
|
|
162
|
-
|
|
163
|
-
constructor(targetId?: string | Target, id?: string) {
|
|
164
|
-
if (targetId) this.targetId = targetId;
|
|
165
|
-
if (id) this.id = id;
|
|
166
|
-
else this.id = "Trigger_" + TriggerModel.global_id++;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
writeTo(document: USDDocument, writer: USDWriter) {
|
|
170
|
-
writer.beginBlock(`def Preliminary_Trigger "${this.id}"`);
|
|
171
|
-
if (this.targetId) {
|
|
172
|
-
if (typeof this.targetId !== "string") this.targetId = resolve(this.targetId, document);
|
|
173
|
-
writer.appendLine(`rel affectedObjects = ` + this.targetId);
|
|
174
|
-
}
|
|
175
|
-
if (this.tokenId)
|
|
176
|
-
writer.appendLine(`token info:id = "${this.tokenId}"`);
|
|
177
|
-
if (this.type)
|
|
178
|
-
writer.appendLine(`token type = "${this.type}"`);
|
|
179
|
-
if (typeof this.distance === "number")
|
|
180
|
-
writer.appendLine(`double distance = ${this.distance}`);
|
|
181
|
-
writer.closeBlock();
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/** Adds `RealityKit.InputTarget` child prim to enable Vision OS direct/indirect interactions
|
|
186
|
-
(by default, only indirect interactions are allowed) */
|
|
187
|
-
function addInputTargetComponent(model: USDObject, options: { direct: boolean, indirect: boolean } = { direct: true, indirect: true }) {
|
|
188
|
-
const empty = USDObject.createEmpty();
|
|
189
|
-
empty.name = "InputTarget_" + empty.name;
|
|
190
|
-
empty.displayName = undefined;
|
|
191
|
-
empty.type = "RealityKitComponent";
|
|
192
|
-
empty.onSerialize = (writer: USDWriter) => {
|
|
193
|
-
writer.appendLine("bool allowsDirectInput = " + (options.direct ? 1 : 0));
|
|
194
|
-
writer.appendLine("bool allowsIndirectInput = " + (options.indirect ? 1 : 0));
|
|
195
|
-
writer.appendLine('uniform token info:id = "RealityKit.InputTarget"');
|
|
196
|
-
};
|
|
197
|
-
model.add(empty);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
export class TriggerBuilder {
|
|
201
|
-
|
|
202
|
-
private static __sceneStartTrigger?: TriggerModel;
|
|
203
|
-
|
|
204
|
-
static sceneStartTrigger(): TriggerModel {
|
|
205
|
-
if (this.__sceneStartTrigger !== undefined) return this.__sceneStartTrigger;
|
|
206
|
-
const trigger = new TriggerModel(undefined, "SceneStart");
|
|
207
|
-
trigger.tokenId = "SceneTransition";
|
|
208
|
-
trigger.type = "enter";
|
|
209
|
-
this.__sceneStartTrigger = trigger;
|
|
210
|
-
return trigger;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/** Trigger that fires when an object has been tapped/clicked.
|
|
214
|
-
* @param targetObject The object or list of objects that can be interacted with.
|
|
215
|
-
* @param inputMode Input Mode (direct and/or indirect). Only available for USDObject targets. Only supported on Vision OS at the moment. */
|
|
216
|
-
static tapTrigger(targetObject: Target, inputMode: { direct: boolean, indirect: boolean } = { direct: true, indirect: true }): TriggerModel {
|
|
217
|
-
const trigger = new TriggerModel(targetObject);
|
|
218
|
-
if (Array.isArray(targetObject) && targetObject.length > 1) {
|
|
219
|
-
for (const obj of targetObject) {
|
|
220
|
-
if (!(obj instanceof USDObject)) continue;
|
|
221
|
-
addInputTargetComponent(obj, inputMode);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
if (targetObject instanceof USDObject) {
|
|
226
|
-
addInputTargetComponent(targetObject, inputMode);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
trigger.tokenId = "TapGesture";
|
|
230
|
-
return trigger;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
static isTapTrigger(trigger?: TriggerModel) {
|
|
234
|
-
return trigger?.tokenId === "TapGesture";
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
static proximityToCameraTrigger(targetObject: Target, distance: number): TriggerModel {
|
|
238
|
-
const trigger = new TriggerModel(targetObject);
|
|
239
|
-
trigger.tokenId = "ProximityToCamera";
|
|
240
|
-
trigger.distance = distance;
|
|
241
|
-
return trigger;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
export class GroupActionModel implements IBehaviorElement {
|
|
246
|
-
|
|
247
|
-
static global_id: number = 0;
|
|
248
|
-
static getId(): number {
|
|
249
|
-
return this.global_id++;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
id: string;
|
|
253
|
-
actions: IBehaviorElement[];
|
|
254
|
-
loops: number = 0;
|
|
255
|
-
performCount: number = 1;
|
|
256
|
-
type: string = "serial";
|
|
257
|
-
multiplePerformOperation: MultiplePerformOperation | undefined = undefined;
|
|
258
|
-
|
|
259
|
-
constructor(id: string, actions: IBehaviorElement[]) {
|
|
260
|
-
this.id = id;
|
|
261
|
-
this.actions = actions;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
addAction(el: IBehaviorElement): GroupActionModel {
|
|
265
|
-
this.actions.push(el);
|
|
266
|
-
return this;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
makeParallel(): GroupActionModel {
|
|
270
|
-
this.type = "parallel";
|
|
271
|
-
return this;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
makeSequence(): GroupActionModel {
|
|
275
|
-
this.type = "serial";
|
|
276
|
-
return this;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
makeLooping() {
|
|
280
|
-
this.loops = 1;
|
|
281
|
-
this.performCount = 0;
|
|
282
|
-
return this;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
makeRepeat(count: number) {
|
|
286
|
-
this.performCount = count;
|
|
287
|
-
return this;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
writeTo(document: USDDocument, writer: USDWriter) {
|
|
291
|
-
writer.beginBlock(`def Preliminary_Action "${this.id}"`);
|
|
292
|
-
writer.beginArray("rel actions");
|
|
293
|
-
for (const act of this.actions) {
|
|
294
|
-
if (!act) continue;
|
|
295
|
-
const isLast = act === this.actions[this.actions.length - 1];
|
|
296
|
-
writer.appendLine("<" + act.id + ">" + (isLast ? "" : ", "));
|
|
297
|
-
}
|
|
298
|
-
writer.closeArray();
|
|
299
|
-
writer.appendLine();
|
|
300
|
-
|
|
301
|
-
writer.appendLine(`token info:id = "Group"`);
|
|
302
|
-
writer.appendLine(`bool loops = ${this.loops}`);
|
|
303
|
-
writer.appendLine(`int performCount = ${this.loops > 0 ? 0 : Math.max(0, this.performCount)}`);
|
|
304
|
-
writer.appendLine(`token type = "${this.type}"`);
|
|
305
|
-
if (typeof this.multiplePerformOperation === "string") {
|
|
306
|
-
writer.appendLine(`token multiplePerformOperation = "${this.multiplePerformOperation}"`);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
writer.appendLine();
|
|
310
|
-
|
|
311
|
-
for (const act of this.actions) {
|
|
312
|
-
if (!act) continue;
|
|
313
|
-
act.writeTo(document, writer);
|
|
314
|
-
writer.appendLine();
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
writer.closeBlock();
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/** @internal */
|
|
322
|
-
export type EmphasizeActionMotionType = "pop" | "blink" | "bounce" | "flip" | "float" | "jiggle" | "pulse" | "spin";
|
|
323
|
-
|
|
324
|
-
/** @internal */
|
|
325
|
-
export type VisibilityActionMotionType = "none" | "pop" | "scaleUp" | "scaleDown" | "moveLeft" | "moveRight" | "moveAbove" | "moveBelow" | "moveForward" | "moveBack";
|
|
326
|
-
|
|
327
|
-
/** @internal */
|
|
328
|
-
export type MotionStyle = "basic";
|
|
329
|
-
|
|
330
|
-
/** @internal */
|
|
331
|
-
export type Space = "relative" | "absolute";
|
|
332
|
-
|
|
333
|
-
/** @internal */
|
|
334
|
-
export type PlayAction = "play" | "pause" | "stop";
|
|
335
|
-
|
|
336
|
-
/** @internal */
|
|
337
|
-
export type AuralMode = "spatial" | "nonSpatial" | "ambient";
|
|
338
|
-
|
|
339
|
-
/** @internal */
|
|
340
|
-
export type VisibilityMode = "show" | "hide";
|
|
341
|
-
|
|
342
|
-
// https://developer.apple.com/documentation/arkit/usdz_schemas_for_ar/actions_and_triggers/preliminary_action/multipleperformoperation
|
|
343
|
-
/** @internal */
|
|
344
|
-
export type MultiplePerformOperation = "allow" | "ignore" | "stop";
|
|
345
|
-
|
|
346
|
-
/** @internal */
|
|
347
|
-
export type EaseType = "none" | "in" | "out" | "inout";
|
|
348
|
-
|
|
349
|
-
export class ActionModel implements IBehaviorElement {
|
|
350
|
-
|
|
351
|
-
private static global_id: number = 0;
|
|
352
|
-
|
|
353
|
-
id: string;
|
|
354
|
-
tokenId?: "ChangeScene" | "Visibility" | "StartAnimation" | "Wait" | "LookAtCamera" | "Emphasize" | "Transform" | "Audio" | "Impulse";
|
|
355
|
-
affectedObjects?: string | Target;
|
|
356
|
-
easeType?: EaseType;;
|
|
357
|
-
motionType: EmphasizeActionMotionType | VisibilityActionMotionType | undefined = undefined;
|
|
358
|
-
duration?: number;
|
|
359
|
-
moveDistance?: number;
|
|
360
|
-
style?: MotionStyle;
|
|
361
|
-
type?: Space | PlayAction | VisibilityMode; // combined types of different actions
|
|
362
|
-
front?: Vec3;
|
|
363
|
-
up?: Vec3;
|
|
364
|
-
start?: number;
|
|
365
|
-
animationSpeed?: number;
|
|
366
|
-
reversed?: boolean;
|
|
367
|
-
pingPong?: boolean;
|
|
368
|
-
xFormTarget?: Target | string;
|
|
369
|
-
audio?: string;
|
|
370
|
-
gain?: number;
|
|
371
|
-
auralMode?: AuralMode;
|
|
372
|
-
multiplePerformOperation?: MultiplePerformOperation;
|
|
373
|
-
velocity?: Vec3;
|
|
374
|
-
|
|
375
|
-
// extra info written as comment at the beginning of the action
|
|
376
|
-
comment?: string;
|
|
377
|
-
animationName?: string;
|
|
378
|
-
|
|
379
|
-
clone(): ActionModel {
|
|
380
|
-
const copy = new ActionModel();
|
|
381
|
-
const id = copy.id;
|
|
382
|
-
Object.assign(copy, this);
|
|
383
|
-
copy.id = id;
|
|
384
|
-
return copy;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
constructor(affectedObjects?: string | Target, id?: string) {
|
|
388
|
-
if (affectedObjects) this.affectedObjects = affectedObjects;
|
|
389
|
-
if (id) this.id = id;
|
|
390
|
-
else this.id = "Action";
|
|
391
|
-
this.id += "_" + ActionModel.global_id++;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
writeTo(document: USDDocument, writer: USDWriter) {
|
|
395
|
-
writer.beginBlock(`def Preliminary_Action "${this.id}"`);
|
|
396
|
-
if (this.comment)
|
|
397
|
-
writer.appendLine(`# ${this.comment}`);
|
|
398
|
-
if (this.affectedObjects) {
|
|
399
|
-
if (typeof this.affectedObjects !== "string") this.affectedObjects = resolve(this.affectedObjects, document);
|
|
400
|
-
writer.appendLine('rel affectedObjects = ' + this.affectedObjects);
|
|
401
|
-
}
|
|
402
|
-
if (typeof this.duration === "number") {
|
|
403
|
-
if (typeof this.animationSpeed === "number" && this.animationSpeed !== 1) {
|
|
404
|
-
writer.appendLine(`double duration = ${this.duration / this.animationSpeed} `);
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
writer.appendLine(`double duration = ${this.duration} `);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
if (this.easeType)
|
|
411
|
-
writer.appendLine(`token easeType = "${this.easeType}"`);
|
|
412
|
-
if (this.tokenId)
|
|
413
|
-
writer.appendLine(`token info:id = "${this.tokenId}"`);
|
|
414
|
-
if (this.tokenId === "ChangeScene")
|
|
415
|
-
writer.appendLine(`rel scene = </StageRoot/Scenes/Scene>`);
|
|
416
|
-
if (this.motionType !== undefined)
|
|
417
|
-
writer.appendLine(`token motionType = "${this.motionType}"`);
|
|
418
|
-
if (typeof this.moveDistance === "number")
|
|
419
|
-
writer.appendLine(`double moveDistance = ${this.moveDistance} `);
|
|
420
|
-
if (this.style)
|
|
421
|
-
writer.appendLine(`token style = "${this.style}"`);
|
|
422
|
-
if (this.type)
|
|
423
|
-
writer.appendLine(`token type = "${this.type}"`);
|
|
424
|
-
if (this.front)
|
|
425
|
-
writer.appendLine(`vector3d front = (${this.front.x}, ${this.front.y}, ${this.front.z})`);
|
|
426
|
-
if (this.up)
|
|
427
|
-
writer.appendLine(`vector3d upVector = (${this.up.x}, ${this.up.y}, ${this.up.z})`);
|
|
428
|
-
if (typeof this.start === "number") {
|
|
429
|
-
writer.appendLine(`double start = ${this.start} `);
|
|
430
|
-
}
|
|
431
|
-
if (typeof this.animationSpeed === "number") {
|
|
432
|
-
writer.appendLine(`double animationSpeed = ${this.animationSpeed.toFixed(2)} `);
|
|
433
|
-
}
|
|
434
|
-
if (typeof this.reversed === "boolean") {
|
|
435
|
-
writer.appendLine(`bool reversed = ${this.reversed}`)
|
|
436
|
-
}
|
|
437
|
-
if (typeof this.pingPong === "boolean") {
|
|
438
|
-
writer.appendLine(`bool reverses = ${this.pingPong}`)
|
|
439
|
-
}
|
|
440
|
-
if (this.xFormTarget) {
|
|
441
|
-
if (typeof this.xFormTarget !== "string")
|
|
442
|
-
this.xFormTarget = resolve(this.xFormTarget, document);
|
|
443
|
-
writer.appendLine(`rel xformTarget = ${this.xFormTarget}`)
|
|
444
|
-
}
|
|
445
|
-
if (typeof this.audio === "string") {
|
|
446
|
-
writer.appendLine(`asset audio = @${this.audio}@`);
|
|
447
|
-
}
|
|
448
|
-
if (typeof this.gain ==="number") {
|
|
449
|
-
writer.appendLine(`double gain = ${this.gain}`);
|
|
450
|
-
}
|
|
451
|
-
if (typeof this.auralMode === "string") {
|
|
452
|
-
writer.appendLine(`token auralMode = "${this.auralMode}"`);
|
|
453
|
-
}
|
|
454
|
-
if (typeof this.multiplePerformOperation === "string") {
|
|
455
|
-
writer.appendLine(`token multiplePerformOperation = "${this.multiplePerformOperation}"`);
|
|
456
|
-
}
|
|
457
|
-
if (typeof this.velocity === "object") {
|
|
458
|
-
writer.appendLine(`vector3d velocity = (${this.velocity.x}, ${this.velocity.y}, ${this.velocity.z})`);
|
|
459
|
-
}
|
|
460
|
-
writer.closeBlock();
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
class Vec3 {
|
|
465
|
-
x: number = 0;
|
|
466
|
-
y: number = 0;
|
|
467
|
-
z: number = 0;
|
|
468
|
-
|
|
469
|
-
constructor(x: number, y: number, z: number) {
|
|
470
|
-
this.x = x;
|
|
471
|
-
this.y = y;
|
|
472
|
-
this.z = z;
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
static get up(): Vec3 {
|
|
476
|
-
return new Vec3(0, 1, 0);
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
static get right(): Vec3 {
|
|
480
|
-
return new Vec3(1, 0, 0);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
static get forward(): Vec3 {
|
|
484
|
-
return new Vec3(0, 0, 1);
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
static get back(): Vec3 {
|
|
488
|
-
return new Vec3(0, 0, -1);
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
static get zero(): Vec3 {
|
|
492
|
-
return new Vec3(0, 0, 0);
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
export class ActionBuilder {
|
|
497
|
-
|
|
498
|
-
static sequence(...params: IBehaviorElement[]) {
|
|
499
|
-
const group = new GroupActionModel("Group_" + GroupActionModel.getId(), params);
|
|
500
|
-
return group.makeSequence();
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
static parallel(...params: IBehaviorElement[]) {
|
|
504
|
-
const group = new GroupActionModel("Group_" + GroupActionModel.getId(), params);
|
|
505
|
-
return group.makeParallel();
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
static fadeAction(targetObject: Target, duration: number, show: boolean): ActionModel {
|
|
509
|
-
const act = new ActionModel(targetObject);
|
|
510
|
-
act.tokenId = "Visibility";
|
|
511
|
-
act.type = show ? "show" : "hide";
|
|
512
|
-
act.duration = duration;
|
|
513
|
-
|
|
514
|
-
act.style = "basic";
|
|
515
|
-
act.motionType = "none"; // only VisibilityActionMotionType allowed
|
|
516
|
-
act.moveDistance = 0;
|
|
517
|
-
act.easeType = "none";
|
|
518
|
-
return act;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
/**
|
|
522
|
-
* creates an action that plays an animation
|
|
523
|
-
* @param start offset in seconds!
|
|
524
|
-
* @param duration in seconds! 0 means play to end
|
|
525
|
-
*/
|
|
526
|
-
static startAnimationAction(targetObject: Target, anim: RegisteredAnimationInfo, reversed: boolean = false, pingPong: boolean = false): IBehaviorElement {
|
|
527
|
-
const act = new ActionModel(targetObject);
|
|
528
|
-
act.tokenId = "StartAnimation";
|
|
529
|
-
|
|
530
|
-
/*
|
|
531
|
-
if (targetObject instanceof USDObject) {
|
|
532
|
-
act.cachedTargetObject = targetObject;
|
|
533
|
-
// try to retarget the animation – this improves animation playback with overlapping roots.
|
|
534
|
-
act.affectedObjects = anim.nearestAnimatedRoot;
|
|
535
|
-
}
|
|
536
|
-
*/
|
|
537
|
-
|
|
538
|
-
const start = anim.start;
|
|
539
|
-
const duration = anim.duration;
|
|
540
|
-
const animationSpeed = anim.speed;
|
|
541
|
-
const animationName = anim.clipName;
|
|
542
|
-
|
|
543
|
-
act.comment = `Animation: ${animationName}, start=${start * 60}, length=${duration * 60}, end=${(start + duration) * 60}`;
|
|
544
|
-
act.animationName = animationName;
|
|
545
|
-
|
|
546
|
-
// start is time in seconds, the documentation is not right here
|
|
547
|
-
act.start = start;
|
|
548
|
-
// duration of 0 is play to end
|
|
549
|
-
act.duration = duration;
|
|
550
|
-
act.animationSpeed = animationSpeed;
|
|
551
|
-
act.reversed = reversed;
|
|
552
|
-
act.pingPong = pingPong;
|
|
553
|
-
act.multiplePerformOperation = "allow";
|
|
554
|
-
if (reversed) {
|
|
555
|
-
act.start -= duration;
|
|
556
|
-
//console.warn("Reversed animation does currently not work. The resulting file will most likely not playback.", act.id, targetObject);
|
|
557
|
-
}
|
|
558
|
-
if (pingPong) {
|
|
559
|
-
act.pingPong = false;
|
|
560
|
-
const back = act.clone();
|
|
561
|
-
back.reversed = !reversed;
|
|
562
|
-
back.start = act.start;
|
|
563
|
-
if (back.reversed) {
|
|
564
|
-
back.start -= duration;
|
|
565
|
-
}
|
|
566
|
-
const group = ActionBuilder.sequence(act, back);
|
|
567
|
-
return group;
|
|
568
|
-
}
|
|
569
|
-
// if (debug) console.log("Start Animation Action", act);
|
|
570
|
-
return act;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
static waitAction(duration: number): ActionModel {
|
|
574
|
-
const act = new ActionModel();
|
|
575
|
-
act.tokenId = "Wait";
|
|
576
|
-
act.duration = duration;
|
|
577
|
-
act.motionType = undefined;
|
|
578
|
-
return act;
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
static lookAtCameraAction(targets: Target, duration?: number, front?: Vec3, up?: Vec3): ActionModel {
|
|
582
|
-
const act = new ActionModel(targets);
|
|
583
|
-
act.tokenId = "LookAtCamera";
|
|
584
|
-
act.duration = duration === undefined ? 9999999999999 : duration;
|
|
585
|
-
act.front = front ?? Vec3.forward;
|
|
586
|
-
// 0,0,0 is a special case for "free look"
|
|
587
|
-
// 0,1,0 is for "y-locked look-at"
|
|
588
|
-
act.up = up ?? Vec3.up;
|
|
589
|
-
return act;
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
static emphasize(targets: Target, duration: number, motionType: EmphasizeActionMotionType = "bounce", moveDistance: number = 1, style: MotionStyle = "basic") {
|
|
593
|
-
const act = new ActionModel(targets);
|
|
594
|
-
act.tokenId = "Emphasize";
|
|
595
|
-
act.duration = duration;
|
|
596
|
-
act.style = style ?? "basic";
|
|
597
|
-
act.motionType = motionType;
|
|
598
|
-
act.moveDistance = moveDistance;
|
|
599
|
-
return act;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
static transformAction(targets: Target, transformTarget: Target, duration: number, transformType: Space, easeType: EaseType = "inout") {
|
|
603
|
-
const act = new ActionModel(targets);
|
|
604
|
-
act.tokenId = "Transform";
|
|
605
|
-
act.duration = duration;
|
|
606
|
-
// Workaround for a bug in QuickLook: if duration is 0, loops stop somewhat randomly. FB13759712
|
|
607
|
-
act.duration = Math.max(0.000001, duration);
|
|
608
|
-
act.type = transformType;
|
|
609
|
-
act.easeType = duration > 0 ? easeType : "none";
|
|
610
|
-
if (Array.isArray(transformTarget)) {
|
|
611
|
-
console.error("Transform target must not be an array", transformTarget);
|
|
612
|
-
}
|
|
613
|
-
act.xFormTarget = transformTarget;
|
|
614
|
-
return act;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
static playAudioAction(targets: Target, audio: string, type: PlayAction = "play", gain: number = 1, auralMode: AuralMode = "spatial") {
|
|
618
|
-
const act = new ActionModel(targets);
|
|
619
|
-
act.tokenId = "Audio";
|
|
620
|
-
act.type = type;
|
|
621
|
-
act.audio = audio;
|
|
622
|
-
act.gain = gain;
|
|
623
|
-
act.auralMode = auralMode;
|
|
624
|
-
act.multiplePerformOperation = "allow";
|
|
625
|
-
return act;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
// Supported only on VisionOS, Preliminary Behaviours can affect RealityKit physics as well
|
|
629
|
-
static impulseAction(targets: Target, velocity: Vec3) {
|
|
630
|
-
const act = new ActionModel(targets);
|
|
631
|
-
act.tokenId = "Impulse";
|
|
632
|
-
act.velocity = velocity;
|
|
633
|
-
return act;
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
// Currently doesn't work on VisionOS, see FB13761990
|
|
637
|
-
/*
|
|
638
|
-
static reloadSceneAction() {
|
|
639
|
-
const act = new ActionModel();
|
|
640
|
-
act.tokenId = "ChangeScene";
|
|
641
|
-
// rel scene = ... is implicit since we only allow one scene right now
|
|
642
|
-
return act;
|
|
643
|
-
}
|
|
644
|
-
*/
|
|
645
|
-
}
|
|
646
|
-
|
|
1
|
+
import { Object3D } from "three";
|
|
2
|
+
|
|
3
|
+
import { getParam } from "../../../../../engine/engine_utils.js";
|
|
4
|
+
import { makeNameSafeForUSD,USDDocument, USDObject, USDWriter } from "../../ThreeUSDZExporter.js";
|
|
5
|
+
import type { RegisteredAnimationInfo } from "./../Animation.js";
|
|
6
|
+
import { BehaviorExtension } from "./Behaviour.js";
|
|
7
|
+
|
|
8
|
+
const debug = getParam("debugusdz");
|
|
9
|
+
|
|
10
|
+
// TODO: rename to usdz element
|
|
11
|
+
export interface IBehaviorElement {
|
|
12
|
+
id: string;
|
|
13
|
+
writeTo(document: USDDocument, writer: USDWriter);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class BehaviorModel {
|
|
17
|
+
|
|
18
|
+
static global_id: number = 0;
|
|
19
|
+
id: string;
|
|
20
|
+
trigger: IBehaviorElement | IBehaviorElement[];
|
|
21
|
+
action: IBehaviorElement;
|
|
22
|
+
exclusive: boolean = false;
|
|
23
|
+
|
|
24
|
+
makeExclusive(exclusive: boolean): BehaviorModel {
|
|
25
|
+
this.exclusive = exclusive;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
constructor(id: string, trigger: IBehaviorElement | IBehaviorElement[], action: IBehaviorElement) {
|
|
30
|
+
this.id = "Behavior_" + makeNameSafeForUSD(id) + "_" + BehaviorModel.global_id++;
|
|
31
|
+
this.trigger = trigger;
|
|
32
|
+
this.action = action;
|
|
33
|
+
|
|
34
|
+
// Special case: SceneTransition enter triggers should never run multiple times, even if the stage loops.
|
|
35
|
+
// There seems to have been a change in behavior in iOS, where SceneTransition enter runs even
|
|
36
|
+
// when the stage length is reached...
|
|
37
|
+
// BUT unfortunately it looks like child groups are also ignored then, and their own loops stop working
|
|
38
|
+
// once any parent is set to "ignore", which is different than what's in the documentation.
|
|
39
|
+
/*
|
|
40
|
+
if (trigger instanceof TriggerModel) {
|
|
41
|
+
if (trigger.tokenId === "SceneTransition" && trigger.type === "enter") {
|
|
42
|
+
const wrapper = ActionBuilder.sequence(action);
|
|
43
|
+
wrapper.multiplePerformOperation = "ignore";
|
|
44
|
+
this.action = wrapper;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
*/
|
|
48
|
+
// Another idea: we let actions run forever by appending a waitAction to them
|
|
49
|
+
// Also doesn't seem to work... the scene start action still runs again
|
|
50
|
+
/*
|
|
51
|
+
if (trigger instanceof TriggerModel) {
|
|
52
|
+
if (trigger.tokenId === "SceneTransition" && trigger.type === "enter") {
|
|
53
|
+
const wrapper = ActionBuilder.sequence(action, ActionBuilder.waitAction(9999999999));
|
|
54
|
+
this.action = wrapper;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
*/
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
writeTo(_ext: BehaviorExtension, document: USDDocument, writer: USDWriter) {
|
|
61
|
+
if (!this.trigger || !this.action) return;
|
|
62
|
+
writer.beginBlock(`def Preliminary_Behavior "${this.id}"`);
|
|
63
|
+
let triggerString = "";
|
|
64
|
+
if (Array.isArray(this.trigger)) {
|
|
65
|
+
triggerString = "[";
|
|
66
|
+
for (let i = 0; i < this.trigger.length; i++) {
|
|
67
|
+
const tr = this.trigger[i];
|
|
68
|
+
triggerString += "<" + tr.id + ">";
|
|
69
|
+
if (i + 1 < this.trigger.length) triggerString += ", ";
|
|
70
|
+
}
|
|
71
|
+
triggerString += "]";
|
|
72
|
+
}
|
|
73
|
+
else
|
|
74
|
+
triggerString = `<${this.trigger.id}>`;
|
|
75
|
+
|
|
76
|
+
writer.appendLine(`rel triggers = ${triggerString}`);
|
|
77
|
+
writer.appendLine(`rel actions = <${this.action.id}>`);
|
|
78
|
+
writer.appendLine(`uniform bool exclusive = ${this.exclusive ? 1 : 0}`); // Apple uses 0 and 1 for bools
|
|
79
|
+
writer.appendLine();
|
|
80
|
+
if (Array.isArray(this.trigger)) {
|
|
81
|
+
for (const trigger of this.trigger) {
|
|
82
|
+
trigger.writeTo(document, writer);
|
|
83
|
+
writer.appendLine();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
this.trigger.writeTo(document, writer);
|
|
88
|
+
writer.appendLine();
|
|
89
|
+
this.action.writeTo(document, writer);
|
|
90
|
+
writer.closeBlock();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
export type Target = USDObject | USDObject[] | Object3D | Object3D[];
|
|
96
|
+
|
|
97
|
+
const addedStrings = new Set<string>();
|
|
98
|
+
/** called to resolve target objects to usdz paths */
|
|
99
|
+
function resolve(targetObject: Target, document: USDDocument): string {
|
|
100
|
+
let result: string = "";
|
|
101
|
+
if (Array.isArray(targetObject)) {
|
|
102
|
+
addedStrings.clear();
|
|
103
|
+
let str = "[ ";
|
|
104
|
+
for (let i = 0; i < targetObject.length; i++) {
|
|
105
|
+
let obj = targetObject[i];
|
|
106
|
+
if (!obj) {
|
|
107
|
+
console.warn("Invalid target object in behavior", targetObject + ". Is the object exported?");
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (typeof obj === "string") {
|
|
111
|
+
if (addedStrings.has(obj)) continue;
|
|
112
|
+
str += obj;
|
|
113
|
+
addedStrings.add(obj);
|
|
114
|
+
}
|
|
115
|
+
else if (typeof obj === "object") {
|
|
116
|
+
//@ts-ignore
|
|
117
|
+
if (obj.isObject3D) {
|
|
118
|
+
//@ts-ignore
|
|
119
|
+
obj = document.findById(obj.uuid);
|
|
120
|
+
if (!obj) {
|
|
121
|
+
console.warn("Invalid target object in behavior", targetObject + ". Is the object exported?");
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const res = (obj as any).getPath?.call(obj) as string;
|
|
126
|
+
if (addedStrings.has(res)) continue;
|
|
127
|
+
// console.log(str, res, addedStrings)
|
|
128
|
+
str += res;
|
|
129
|
+
addedStrings.add(res);
|
|
130
|
+
}
|
|
131
|
+
if (i + 1 < targetObject.length) str += ", ";
|
|
132
|
+
}
|
|
133
|
+
str += " ]";
|
|
134
|
+
result = str;
|
|
135
|
+
addedStrings.clear();
|
|
136
|
+
}
|
|
137
|
+
else if (typeof targetObject === "object") {
|
|
138
|
+
const sourceObject = targetObject;
|
|
139
|
+
//@ts-ignore
|
|
140
|
+
if (sourceObject.isObject3D) {
|
|
141
|
+
//@ts-ignore
|
|
142
|
+
targetObject = document.findById(sourceObject.uuid);
|
|
143
|
+
}
|
|
144
|
+
if (!targetObject) {
|
|
145
|
+
console.error("Invalid target object in behavior, the target object is likely missing from USDZ export. Is the object exported?", sourceObject);
|
|
146
|
+
throw new Error(`Invalid target object in behavior, the target object is likely missing from USDZ export. Please report a bug. uuid: ${sourceObject.uuid}.`);
|
|
147
|
+
}
|
|
148
|
+
result = (targetObject as any).getPath?.call(targetObject) as string;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export class TriggerModel implements IBehaviorElement {
|
|
155
|
+
static global_id: number = 0;
|
|
156
|
+
|
|
157
|
+
id: string;
|
|
158
|
+
targetId?: string | Target;
|
|
159
|
+
tokenId?: string;
|
|
160
|
+
type?: string;
|
|
161
|
+
distance?: number;
|
|
162
|
+
|
|
163
|
+
constructor(targetId?: string | Target, id?: string) {
|
|
164
|
+
if (targetId) this.targetId = targetId;
|
|
165
|
+
if (id) this.id = id;
|
|
166
|
+
else this.id = "Trigger_" + TriggerModel.global_id++;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
writeTo(document: USDDocument, writer: USDWriter) {
|
|
170
|
+
writer.beginBlock(`def Preliminary_Trigger "${this.id}"`);
|
|
171
|
+
if (this.targetId) {
|
|
172
|
+
if (typeof this.targetId !== "string") this.targetId = resolve(this.targetId, document);
|
|
173
|
+
writer.appendLine(`rel affectedObjects = ` + this.targetId);
|
|
174
|
+
}
|
|
175
|
+
if (this.tokenId)
|
|
176
|
+
writer.appendLine(`token info:id = "${this.tokenId}"`);
|
|
177
|
+
if (this.type)
|
|
178
|
+
writer.appendLine(`token type = "${this.type}"`);
|
|
179
|
+
if (typeof this.distance === "number")
|
|
180
|
+
writer.appendLine(`double distance = ${this.distance}`);
|
|
181
|
+
writer.closeBlock();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Adds `RealityKit.InputTarget` child prim to enable Vision OS direct/indirect interactions
|
|
186
|
+
(by default, only indirect interactions are allowed) */
|
|
187
|
+
function addInputTargetComponent(model: USDObject, options: { direct: boolean, indirect: boolean } = { direct: true, indirect: true }) {
|
|
188
|
+
const empty = USDObject.createEmpty();
|
|
189
|
+
empty.name = "InputTarget_" + empty.name;
|
|
190
|
+
empty.displayName = undefined;
|
|
191
|
+
empty.type = "RealityKitComponent";
|
|
192
|
+
empty.onSerialize = (writer: USDWriter) => {
|
|
193
|
+
writer.appendLine("bool allowsDirectInput = " + (options.direct ? 1 : 0));
|
|
194
|
+
writer.appendLine("bool allowsIndirectInput = " + (options.indirect ? 1 : 0));
|
|
195
|
+
writer.appendLine('uniform token info:id = "RealityKit.InputTarget"');
|
|
196
|
+
};
|
|
197
|
+
model.add(empty);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export class TriggerBuilder {
|
|
201
|
+
|
|
202
|
+
private static __sceneStartTrigger?: TriggerModel;
|
|
203
|
+
|
|
204
|
+
static sceneStartTrigger(): TriggerModel {
|
|
205
|
+
if (this.__sceneStartTrigger !== undefined) return this.__sceneStartTrigger;
|
|
206
|
+
const trigger = new TriggerModel(undefined, "SceneStart");
|
|
207
|
+
trigger.tokenId = "SceneTransition";
|
|
208
|
+
trigger.type = "enter";
|
|
209
|
+
this.__sceneStartTrigger = trigger;
|
|
210
|
+
return trigger;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Trigger that fires when an object has been tapped/clicked.
|
|
214
|
+
* @param targetObject The object or list of objects that can be interacted with.
|
|
215
|
+
* @param inputMode Input Mode (direct and/or indirect). Only available for USDObject targets. Only supported on Vision OS at the moment. */
|
|
216
|
+
static tapTrigger(targetObject: Target, inputMode: { direct: boolean, indirect: boolean } = { direct: true, indirect: true }): TriggerModel {
|
|
217
|
+
const trigger = new TriggerModel(targetObject);
|
|
218
|
+
if (Array.isArray(targetObject) && targetObject.length > 1) {
|
|
219
|
+
for (const obj of targetObject) {
|
|
220
|
+
if (!(obj instanceof USDObject)) continue;
|
|
221
|
+
addInputTargetComponent(obj, inputMode);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (targetObject instanceof USDObject) {
|
|
226
|
+
addInputTargetComponent(targetObject, inputMode);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
trigger.tokenId = "TapGesture";
|
|
230
|
+
return trigger;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
static isTapTrigger(trigger?: TriggerModel) {
|
|
234
|
+
return trigger?.tokenId === "TapGesture";
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
static proximityToCameraTrigger(targetObject: Target, distance: number): TriggerModel {
|
|
238
|
+
const trigger = new TriggerModel(targetObject);
|
|
239
|
+
trigger.tokenId = "ProximityToCamera";
|
|
240
|
+
trigger.distance = distance;
|
|
241
|
+
return trigger;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export class GroupActionModel implements IBehaviorElement {
|
|
246
|
+
|
|
247
|
+
static global_id: number = 0;
|
|
248
|
+
static getId(): number {
|
|
249
|
+
return this.global_id++;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
id: string;
|
|
253
|
+
actions: IBehaviorElement[];
|
|
254
|
+
loops: number = 0;
|
|
255
|
+
performCount: number = 1;
|
|
256
|
+
type: string = "serial";
|
|
257
|
+
multiplePerformOperation: MultiplePerformOperation | undefined = undefined;
|
|
258
|
+
|
|
259
|
+
constructor(id: string, actions: IBehaviorElement[]) {
|
|
260
|
+
this.id = id;
|
|
261
|
+
this.actions = actions;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
addAction(el: IBehaviorElement): GroupActionModel {
|
|
265
|
+
this.actions.push(el);
|
|
266
|
+
return this;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
makeParallel(): GroupActionModel {
|
|
270
|
+
this.type = "parallel";
|
|
271
|
+
return this;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
makeSequence(): GroupActionModel {
|
|
275
|
+
this.type = "serial";
|
|
276
|
+
return this;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
makeLooping() {
|
|
280
|
+
this.loops = 1;
|
|
281
|
+
this.performCount = 0;
|
|
282
|
+
return this;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
makeRepeat(count: number) {
|
|
286
|
+
this.performCount = count;
|
|
287
|
+
return this;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
writeTo(document: USDDocument, writer: USDWriter) {
|
|
291
|
+
writer.beginBlock(`def Preliminary_Action "${this.id}"`);
|
|
292
|
+
writer.beginArray("rel actions");
|
|
293
|
+
for (const act of this.actions) {
|
|
294
|
+
if (!act) continue;
|
|
295
|
+
const isLast = act === this.actions[this.actions.length - 1];
|
|
296
|
+
writer.appendLine("<" + act.id + ">" + (isLast ? "" : ", "));
|
|
297
|
+
}
|
|
298
|
+
writer.closeArray();
|
|
299
|
+
writer.appendLine();
|
|
300
|
+
|
|
301
|
+
writer.appendLine(`token info:id = "Group"`);
|
|
302
|
+
writer.appendLine(`bool loops = ${this.loops}`);
|
|
303
|
+
writer.appendLine(`int performCount = ${this.loops > 0 ? 0 : Math.max(0, this.performCount)}`);
|
|
304
|
+
writer.appendLine(`token type = "${this.type}"`);
|
|
305
|
+
if (typeof this.multiplePerformOperation === "string") {
|
|
306
|
+
writer.appendLine(`token multiplePerformOperation = "${this.multiplePerformOperation}"`);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
writer.appendLine();
|
|
310
|
+
|
|
311
|
+
for (const act of this.actions) {
|
|
312
|
+
if (!act) continue;
|
|
313
|
+
act.writeTo(document, writer);
|
|
314
|
+
writer.appendLine();
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
writer.closeBlock();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/** @internal */
|
|
322
|
+
export type EmphasizeActionMotionType = "pop" | "blink" | "bounce" | "flip" | "float" | "jiggle" | "pulse" | "spin";
|
|
323
|
+
|
|
324
|
+
/** @internal */
|
|
325
|
+
export type VisibilityActionMotionType = "none" | "pop" | "scaleUp" | "scaleDown" | "moveLeft" | "moveRight" | "moveAbove" | "moveBelow" | "moveForward" | "moveBack";
|
|
326
|
+
|
|
327
|
+
/** @internal */
|
|
328
|
+
export type MotionStyle = "basic";
|
|
329
|
+
|
|
330
|
+
/** @internal */
|
|
331
|
+
export type Space = "relative" | "absolute";
|
|
332
|
+
|
|
333
|
+
/** @internal */
|
|
334
|
+
export type PlayAction = "play" | "pause" | "stop";
|
|
335
|
+
|
|
336
|
+
/** @internal */
|
|
337
|
+
export type AuralMode = "spatial" | "nonSpatial" | "ambient";
|
|
338
|
+
|
|
339
|
+
/** @internal */
|
|
340
|
+
export type VisibilityMode = "show" | "hide";
|
|
341
|
+
|
|
342
|
+
// https://developer.apple.com/documentation/arkit/usdz_schemas_for_ar/actions_and_triggers/preliminary_action/multipleperformoperation
|
|
343
|
+
/** @internal */
|
|
344
|
+
export type MultiplePerformOperation = "allow" | "ignore" | "stop";
|
|
345
|
+
|
|
346
|
+
/** @internal */
|
|
347
|
+
export type EaseType = "none" | "in" | "out" | "inout";
|
|
348
|
+
|
|
349
|
+
export class ActionModel implements IBehaviorElement {
|
|
350
|
+
|
|
351
|
+
private static global_id: number = 0;
|
|
352
|
+
|
|
353
|
+
id: string;
|
|
354
|
+
tokenId?: "ChangeScene" | "Visibility" | "StartAnimation" | "Wait" | "LookAtCamera" | "Emphasize" | "Transform" | "Audio" | "Impulse";
|
|
355
|
+
affectedObjects?: string | Target;
|
|
356
|
+
easeType?: EaseType;;
|
|
357
|
+
motionType: EmphasizeActionMotionType | VisibilityActionMotionType | undefined = undefined;
|
|
358
|
+
duration?: number;
|
|
359
|
+
moveDistance?: number;
|
|
360
|
+
style?: MotionStyle;
|
|
361
|
+
type?: Space | PlayAction | VisibilityMode; // combined types of different actions
|
|
362
|
+
front?: Vec3;
|
|
363
|
+
up?: Vec3;
|
|
364
|
+
start?: number;
|
|
365
|
+
animationSpeed?: number;
|
|
366
|
+
reversed?: boolean;
|
|
367
|
+
pingPong?: boolean;
|
|
368
|
+
xFormTarget?: Target | string;
|
|
369
|
+
audio?: string;
|
|
370
|
+
gain?: number;
|
|
371
|
+
auralMode?: AuralMode;
|
|
372
|
+
multiplePerformOperation?: MultiplePerformOperation;
|
|
373
|
+
velocity?: Vec3;
|
|
374
|
+
|
|
375
|
+
// extra info written as comment at the beginning of the action
|
|
376
|
+
comment?: string;
|
|
377
|
+
animationName?: string;
|
|
378
|
+
|
|
379
|
+
clone(): ActionModel {
|
|
380
|
+
const copy = new ActionModel();
|
|
381
|
+
const id = copy.id;
|
|
382
|
+
Object.assign(copy, this);
|
|
383
|
+
copy.id = id;
|
|
384
|
+
return copy;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
constructor(affectedObjects?: string | Target, id?: string) {
|
|
388
|
+
if (affectedObjects) this.affectedObjects = affectedObjects;
|
|
389
|
+
if (id) this.id = id;
|
|
390
|
+
else this.id = "Action";
|
|
391
|
+
this.id += "_" + ActionModel.global_id++;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
writeTo(document: USDDocument, writer: USDWriter) {
|
|
395
|
+
writer.beginBlock(`def Preliminary_Action "${this.id}"`);
|
|
396
|
+
if (this.comment)
|
|
397
|
+
writer.appendLine(`# ${this.comment}`);
|
|
398
|
+
if (this.affectedObjects) {
|
|
399
|
+
if (typeof this.affectedObjects !== "string") this.affectedObjects = resolve(this.affectedObjects, document);
|
|
400
|
+
writer.appendLine('rel affectedObjects = ' + this.affectedObjects);
|
|
401
|
+
}
|
|
402
|
+
if (typeof this.duration === "number") {
|
|
403
|
+
if (typeof this.animationSpeed === "number" && this.animationSpeed !== 1) {
|
|
404
|
+
writer.appendLine(`double duration = ${this.duration / this.animationSpeed} `);
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
writer.appendLine(`double duration = ${this.duration} `);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
if (this.easeType)
|
|
411
|
+
writer.appendLine(`token easeType = "${this.easeType}"`);
|
|
412
|
+
if (this.tokenId)
|
|
413
|
+
writer.appendLine(`token info:id = "${this.tokenId}"`);
|
|
414
|
+
if (this.tokenId === "ChangeScene")
|
|
415
|
+
writer.appendLine(`rel scene = </StageRoot/Scenes/Scene>`);
|
|
416
|
+
if (this.motionType !== undefined)
|
|
417
|
+
writer.appendLine(`token motionType = "${this.motionType}"`);
|
|
418
|
+
if (typeof this.moveDistance === "number")
|
|
419
|
+
writer.appendLine(`double moveDistance = ${this.moveDistance} `);
|
|
420
|
+
if (this.style)
|
|
421
|
+
writer.appendLine(`token style = "${this.style}"`);
|
|
422
|
+
if (this.type)
|
|
423
|
+
writer.appendLine(`token type = "${this.type}"`);
|
|
424
|
+
if (this.front)
|
|
425
|
+
writer.appendLine(`vector3d front = (${this.front.x}, ${this.front.y}, ${this.front.z})`);
|
|
426
|
+
if (this.up)
|
|
427
|
+
writer.appendLine(`vector3d upVector = (${this.up.x}, ${this.up.y}, ${this.up.z})`);
|
|
428
|
+
if (typeof this.start === "number") {
|
|
429
|
+
writer.appendLine(`double start = ${this.start} `);
|
|
430
|
+
}
|
|
431
|
+
if (typeof this.animationSpeed === "number") {
|
|
432
|
+
writer.appendLine(`double animationSpeed = ${this.animationSpeed.toFixed(2)} `);
|
|
433
|
+
}
|
|
434
|
+
if (typeof this.reversed === "boolean") {
|
|
435
|
+
writer.appendLine(`bool reversed = ${this.reversed}`)
|
|
436
|
+
}
|
|
437
|
+
if (typeof this.pingPong === "boolean") {
|
|
438
|
+
writer.appendLine(`bool reverses = ${this.pingPong}`)
|
|
439
|
+
}
|
|
440
|
+
if (this.xFormTarget) {
|
|
441
|
+
if (typeof this.xFormTarget !== "string")
|
|
442
|
+
this.xFormTarget = resolve(this.xFormTarget, document);
|
|
443
|
+
writer.appendLine(`rel xformTarget = ${this.xFormTarget}`)
|
|
444
|
+
}
|
|
445
|
+
if (typeof this.audio === "string") {
|
|
446
|
+
writer.appendLine(`asset audio = @${this.audio}@`);
|
|
447
|
+
}
|
|
448
|
+
if (typeof this.gain ==="number") {
|
|
449
|
+
writer.appendLine(`double gain = ${this.gain}`);
|
|
450
|
+
}
|
|
451
|
+
if (typeof this.auralMode === "string") {
|
|
452
|
+
writer.appendLine(`token auralMode = "${this.auralMode}"`);
|
|
453
|
+
}
|
|
454
|
+
if (typeof this.multiplePerformOperation === "string") {
|
|
455
|
+
writer.appendLine(`token multiplePerformOperation = "${this.multiplePerformOperation}"`);
|
|
456
|
+
}
|
|
457
|
+
if (typeof this.velocity === "object") {
|
|
458
|
+
writer.appendLine(`vector3d velocity = (${this.velocity.x}, ${this.velocity.y}, ${this.velocity.z})`);
|
|
459
|
+
}
|
|
460
|
+
writer.closeBlock();
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
class Vec3 {
|
|
465
|
+
x: number = 0;
|
|
466
|
+
y: number = 0;
|
|
467
|
+
z: number = 0;
|
|
468
|
+
|
|
469
|
+
constructor(x: number, y: number, z: number) {
|
|
470
|
+
this.x = x;
|
|
471
|
+
this.y = y;
|
|
472
|
+
this.z = z;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
static get up(): Vec3 {
|
|
476
|
+
return new Vec3(0, 1, 0);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
static get right(): Vec3 {
|
|
480
|
+
return new Vec3(1, 0, 0);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
static get forward(): Vec3 {
|
|
484
|
+
return new Vec3(0, 0, 1);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
static get back(): Vec3 {
|
|
488
|
+
return new Vec3(0, 0, -1);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
static get zero(): Vec3 {
|
|
492
|
+
return new Vec3(0, 0, 0);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
export class ActionBuilder {
|
|
497
|
+
|
|
498
|
+
static sequence(...params: IBehaviorElement[]) {
|
|
499
|
+
const group = new GroupActionModel("Group_" + GroupActionModel.getId(), params);
|
|
500
|
+
return group.makeSequence();
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
static parallel(...params: IBehaviorElement[]) {
|
|
504
|
+
const group = new GroupActionModel("Group_" + GroupActionModel.getId(), params);
|
|
505
|
+
return group.makeParallel();
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
static fadeAction(targetObject: Target, duration: number, show: boolean): ActionModel {
|
|
509
|
+
const act = new ActionModel(targetObject);
|
|
510
|
+
act.tokenId = "Visibility";
|
|
511
|
+
act.type = show ? "show" : "hide";
|
|
512
|
+
act.duration = duration;
|
|
513
|
+
|
|
514
|
+
act.style = "basic";
|
|
515
|
+
act.motionType = "none"; // only VisibilityActionMotionType allowed
|
|
516
|
+
act.moveDistance = 0;
|
|
517
|
+
act.easeType = "none";
|
|
518
|
+
return act;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* creates an action that plays an animation
|
|
523
|
+
* @param start offset in seconds!
|
|
524
|
+
* @param duration in seconds! 0 means play to end
|
|
525
|
+
*/
|
|
526
|
+
static startAnimationAction(targetObject: Target, anim: RegisteredAnimationInfo, reversed: boolean = false, pingPong: boolean = false): IBehaviorElement {
|
|
527
|
+
const act = new ActionModel(targetObject);
|
|
528
|
+
act.tokenId = "StartAnimation";
|
|
529
|
+
|
|
530
|
+
/*
|
|
531
|
+
if (targetObject instanceof USDObject) {
|
|
532
|
+
act.cachedTargetObject = targetObject;
|
|
533
|
+
// try to retarget the animation – this improves animation playback with overlapping roots.
|
|
534
|
+
act.affectedObjects = anim.nearestAnimatedRoot;
|
|
535
|
+
}
|
|
536
|
+
*/
|
|
537
|
+
|
|
538
|
+
const start = anim.start;
|
|
539
|
+
const duration = anim.duration;
|
|
540
|
+
const animationSpeed = anim.speed;
|
|
541
|
+
const animationName = anim.clipName;
|
|
542
|
+
|
|
543
|
+
act.comment = `Animation: ${animationName}, start=${start * 60}, length=${duration * 60}, end=${(start + duration) * 60}`;
|
|
544
|
+
act.animationName = animationName;
|
|
545
|
+
|
|
546
|
+
// start is time in seconds, the documentation is not right here
|
|
547
|
+
act.start = start;
|
|
548
|
+
// duration of 0 is play to end
|
|
549
|
+
act.duration = duration;
|
|
550
|
+
act.animationSpeed = animationSpeed;
|
|
551
|
+
act.reversed = reversed;
|
|
552
|
+
act.pingPong = pingPong;
|
|
553
|
+
act.multiplePerformOperation = "allow";
|
|
554
|
+
if (reversed) {
|
|
555
|
+
act.start -= duration;
|
|
556
|
+
//console.warn("Reversed animation does currently not work. The resulting file will most likely not playback.", act.id, targetObject);
|
|
557
|
+
}
|
|
558
|
+
if (pingPong) {
|
|
559
|
+
act.pingPong = false;
|
|
560
|
+
const back = act.clone();
|
|
561
|
+
back.reversed = !reversed;
|
|
562
|
+
back.start = act.start;
|
|
563
|
+
if (back.reversed) {
|
|
564
|
+
back.start -= duration;
|
|
565
|
+
}
|
|
566
|
+
const group = ActionBuilder.sequence(act, back);
|
|
567
|
+
return group;
|
|
568
|
+
}
|
|
569
|
+
// if (debug) console.log("Start Animation Action", act);
|
|
570
|
+
return act;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
static waitAction(duration: number): ActionModel {
|
|
574
|
+
const act = new ActionModel();
|
|
575
|
+
act.tokenId = "Wait";
|
|
576
|
+
act.duration = duration;
|
|
577
|
+
act.motionType = undefined;
|
|
578
|
+
return act;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
static lookAtCameraAction(targets: Target, duration?: number, front?: Vec3, up?: Vec3): ActionModel {
|
|
582
|
+
const act = new ActionModel(targets);
|
|
583
|
+
act.tokenId = "LookAtCamera";
|
|
584
|
+
act.duration = duration === undefined ? 9999999999999 : duration;
|
|
585
|
+
act.front = front ?? Vec3.forward;
|
|
586
|
+
// 0,0,0 is a special case for "free look"
|
|
587
|
+
// 0,1,0 is for "y-locked look-at"
|
|
588
|
+
act.up = up ?? Vec3.up;
|
|
589
|
+
return act;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
static emphasize(targets: Target, duration: number, motionType: EmphasizeActionMotionType = "bounce", moveDistance: number = 1, style: MotionStyle = "basic") {
|
|
593
|
+
const act = new ActionModel(targets);
|
|
594
|
+
act.tokenId = "Emphasize";
|
|
595
|
+
act.duration = duration;
|
|
596
|
+
act.style = style ?? "basic";
|
|
597
|
+
act.motionType = motionType;
|
|
598
|
+
act.moveDistance = moveDistance;
|
|
599
|
+
return act;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
static transformAction(targets: Target, transformTarget: Target, duration: number, transformType: Space, easeType: EaseType = "inout") {
|
|
603
|
+
const act = new ActionModel(targets);
|
|
604
|
+
act.tokenId = "Transform";
|
|
605
|
+
act.duration = duration;
|
|
606
|
+
// Workaround for a bug in QuickLook: if duration is 0, loops stop somewhat randomly. FB13759712
|
|
607
|
+
act.duration = Math.max(0.000001, duration);
|
|
608
|
+
act.type = transformType;
|
|
609
|
+
act.easeType = duration > 0 ? easeType : "none";
|
|
610
|
+
if (Array.isArray(transformTarget)) {
|
|
611
|
+
console.error("Transform target must not be an array", transformTarget);
|
|
612
|
+
}
|
|
613
|
+
act.xFormTarget = transformTarget;
|
|
614
|
+
return act;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
static playAudioAction(targets: Target, audio: string, type: PlayAction = "play", gain: number = 1, auralMode: AuralMode = "spatial") {
|
|
618
|
+
const act = new ActionModel(targets);
|
|
619
|
+
act.tokenId = "Audio";
|
|
620
|
+
act.type = type;
|
|
621
|
+
act.audio = audio;
|
|
622
|
+
act.gain = gain;
|
|
623
|
+
act.auralMode = auralMode;
|
|
624
|
+
act.multiplePerformOperation = "allow";
|
|
625
|
+
return act;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// Supported only on VisionOS, Preliminary Behaviours can affect RealityKit physics as well
|
|
629
|
+
static impulseAction(targets: Target, velocity: Vec3) {
|
|
630
|
+
const act = new ActionModel(targets);
|
|
631
|
+
act.tokenId = "Impulse";
|
|
632
|
+
act.velocity = velocity;
|
|
633
|
+
return act;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// Currently doesn't work on VisionOS, see FB13761990
|
|
637
|
+
/*
|
|
638
|
+
static reloadSceneAction() {
|
|
639
|
+
const act = new ActionModel();
|
|
640
|
+
act.tokenId = "ChangeScene";
|
|
641
|
+
// rel scene = ... is implicit since we only allow one scene right now
|
|
642
|
+
return act;
|
|
643
|
+
}
|
|
644
|
+
*/
|
|
645
|
+
}
|
|
646
|
+
|
|
647
647
|
export { Vec3 as USDVec3 }
|