@needle-tools/engine 4.7.2-alpha → 4.7.2-next.0e4e068
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3782 -3782
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +25 -0
- package/dist/gltf-progressive-CNdBjvz6.js +1145 -0
- package/dist/gltf-progressive-C_oN6wCA.umd.cjs +8 -0
- package/dist/gltf-progressive-MgWOszRl.min.js +8 -0
- package/dist/{needle-engine.bundle-BhDF-YSv.min.js → needle-engine.bundle-B1OlKJHF.min.js} +108 -107
- package/dist/{needle-engine.bundle-gp00DTS4.js → needle-engine.bundle-Bwsx9VYm.js} +2077 -2061
- package/dist/{needle-engine.bundle-D2myV4E4.umd.cjs → needle-engine.bundle-Cd6HpRz5.umd.cjs} +99 -98
- package/dist/needle-engine.d.ts +130 -129
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-8AQTeZsr.umd.cjs → postprocessing-CjW23fio.umd.cjs} +2 -2
- package/dist/{postprocessing-BkxN_08g.js → postprocessing-DYLNOL3W.js} +3 -3
- package/dist/{postprocessing-BDScN9yu.min.js → postprocessing-xYQWCHFu.min.js} +2 -2
- package/dist/{three-DMrv-4ar.umd.cjs → three-B_hneGZr.umd.cjs} +4 -4
- package/dist/{three-Bz6X1mrw.js → three-DrqIzZTH.js} +4198 -4198
- package/dist/{three-Boa-jOq-.min.js → three-DuDKwKB8.min.js} +33 -33
- package/dist/{three-examples-GggCDHv0.js → three-examples-B50TT3Iu.js} +5 -5
- package/dist/{three-examples-DuVhxqft.min.js → three-examples-DaDLBuy6.min.js} +14 -14
- package/dist/{three-examples-C7ryg8vN.umd.cjs → three-examples-X3OadjXB.umd.cjs} +3 -3
- package/dist/{three-mesh-ui-CY6Izc7C.min.js → three-mesh-ui-B3p3gyUz.min.js} +1 -1
- package/dist/{three-mesh-ui-CwlN0FUC.umd.cjs → three-mesh-ui-CQiIQIlA.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-CLNOfsWn.js → three-mesh-ui-CxuWt7m-.js} +1 -1
- package/dist/{vendor-zxXa3Dmr.min.js → vendor-BlSxe9JJ.min.js} +3 -3
- package/dist/{vendor-BSD1RQIh.js → vendor-BmYIgaS1.js} +3 -3
- package/dist/{vendor-DHr4aqIZ.umd.cjs → vendor-Cavtu3CP.umd.cjs} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +164 -164
- package/lib/engine/engine_addressables.js +601 -601
- package/lib/engine/engine_animation.d.ts +43 -43
- package/lib/engine/engine_animation.js +133 -133
- package/lib/engine/engine_application.d.ts +45 -45
- package/lib/engine/engine_application.js +104 -104
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +346 -346
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +13 -13
- package/lib/engine/engine_camera.js +30 -30
- package/lib/engine/engine_components.d.ts +110 -110
- package/lib/engine/engine_components.js +374 -374
- package/lib/engine/engine_components_internal.d.ts +9 -9
- package/lib/engine/engine_components_internal.js +36 -36
- package/lib/engine/engine_constants.d.ts +10 -10
- package/lib/engine/engine_constants.js +41 -41
- package/lib/engine/engine_context.d.ts +475 -475
- package/lib/engine/engine_context.js +1672 -1673
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_context_registry.d.ts +71 -71
- package/lib/engine/engine_context_registry.js +117 -117
- package/lib/engine/engine_coroutine.d.ts +35 -35
- package/lib/engine/engine_coroutine.js +52 -52
- package/lib/engine/engine_create_objects.d.ts +119 -119
- package/lib/engine/engine_create_objects.js +320 -320
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_default_parameters.js +3 -3
- package/lib/engine/engine_editor-sync.d.ts +21 -21
- package/lib/engine/engine_editor-sync.js +4 -4
- package/lib/engine/engine_fileloader.d.ts +2 -2
- package/lib/engine/engine_fileloader.js +8 -8
- package/lib/engine/engine_gameobject.d.ts +68 -68
- package/lib/engine/engine_gameobject.js +619 -619
- package/lib/engine/engine_generic_utils.d.ts +1 -1
- package/lib/engine/engine_generic_utils.js +13 -13
- package/lib/engine/engine_gizmos.d.ts +149 -149
- package/lib/engine/engine_gizmos.js +530 -530
- package/lib/engine/engine_gltf.d.ts +12 -12
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +11 -11
- package/lib/engine/engine_gltf_builtin_components.js +341 -341
- package/lib/engine/engine_hot_reload.d.ts +8 -8
- package/lib/engine/engine_hot_reload.js +197 -197
- package/lib/engine/engine_input.d.ts +362 -362
- package/lib/engine/engine_input.js +1294 -1294
- package/lib/engine/engine_input_utils.d.ts +2 -2
- package/lib/engine/engine_input_utils.js +22 -22
- package/lib/engine/engine_instancing.d.ts +19 -19
- package/lib/engine/engine_instancing.js +39 -39
- package/lib/engine/engine_license.d.ts +11 -11
- package/lib/engine/engine_license.js +369 -369
- package/lib/engine/engine_lifecycle_api.d.ts +83 -83
- package/lib/engine/engine_lifecycle_api.js +106 -106
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +32 -32
- package/lib/engine/engine_lifecycle_functions_internal.js +146 -146
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +101 -101
- package/lib/engine/engine_loaders.callbacks.d.ts +97 -97
- package/lib/engine/engine_loaders.callbacks.js +86 -86
- package/lib/engine/engine_loaders.d.ts +48 -48
- package/lib/engine/engine_loaders.gltf.d.ts +13 -13
- package/lib/engine/engine_loaders.gltf.js +62 -62
- package/lib/engine/engine_loaders.js +337 -337
- package/lib/engine/engine_lods.d.ts +35 -35
- package/lib/engine/engine_lods.js +160 -160
- package/lib/engine/engine_lods.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +32 -32
- package/lib/engine/engine_mainloop_utils.js +466 -466
- package/lib/engine/engine_math.d.ts +114 -114
- package/lib/engine/engine_math.js +247 -247
- package/lib/engine/engine_modules.d.ts +36 -36
- package/lib/engine/engine_modules.js +85 -85
- package/lib/engine/engine_networking.d.ts +260 -260
- package/lib/engine/engine_networking.js +764 -764
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +310 -310
- package/lib/engine/engine_networking_blob.d.ts +48 -48
- package/lib/engine/engine_networking_blob.js +228 -228
- package/lib/engine/engine_networking_files.d.ts +35 -35
- package/lib/engine/engine_networking_files.js +172 -172
- package/lib/engine/engine_networking_files_default_components.d.ts +6 -6
- package/lib/engine/engine_networking_files_default_components.js +42 -42
- package/lib/engine/engine_networking_instantiate.d.ts +100 -100
- package/lib/engine/engine_networking_instantiate.js +345 -345
- package/lib/engine/engine_networking_peer.d.ts +15 -15
- package/lib/engine/engine_networking_peer.js +132 -132
- package/lib/engine/engine_networking_streams.d.ts +123 -123
- package/lib/engine/engine_networking_streams.js +645 -645
- package/lib/engine/engine_networking_types.d.ts +22 -22
- package/lib/engine/engine_networking_types.js +7 -7
- package/lib/engine/engine_networking_utils.d.ts +2 -2
- package/lib/engine/engine_networking_utils.js +20 -20
- package/lib/engine/engine_networking_websocket.d.ts +1 -1
- package/lib/engine/engine_networking_websocket.js +2 -2
- package/lib/engine/engine_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +152 -152
- package/lib/engine/engine_physics.js +645 -645
- package/lib/engine/engine_physics.types.d.ts +40 -40
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +147 -147
- package/lib/engine/engine_physics_rapier.js +1433 -1433
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +71 -71
- package/lib/engine/engine_scenelighting.js +226 -226
- package/lib/engine/engine_serialization.d.ts +3 -3
- package/lib/engine/engine_serialization.js +3 -3
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +72 -72
- package/lib/engine/engine_serialization_builtin_serializer.js +403 -403
- package/lib/engine/engine_serialization_core.d.ts +94 -94
- package/lib/engine/engine_serialization_core.js +607 -607
- package/lib/engine/engine_serialization_decorator.d.ts +23 -23
- package/lib/engine/engine_serialization_decorator.js +66 -66
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +53 -53
- package/lib/engine/engine_shaders.js +252 -252
- package/lib/engine/engine_shims.d.ts +4 -4
- package/lib/engine/engine_shims.js +24 -24
- package/lib/engine/engine_test_utils.d.ts +39 -39
- package/lib/engine/engine_test_utils.js +83 -83
- package/lib/engine/engine_texture.d.ts +28 -28
- package/lib/engine/engine_texture.js +64 -64
- package/lib/engine/engine_three_utils.d.ts +204 -204
- package/lib/engine/engine_three_utils.js +788 -788
- package/lib/engine/engine_time.d.ts +51 -51
- package/lib/engine/engine_time.js +82 -82
- package/lib/engine/engine_time_utils.d.ts +88 -88
- package/lib/engine/engine_time_utils.js +215 -215
- package/lib/engine/engine_tonemapping.d.ts +6 -6
- package/lib/engine/engine_tonemapping.js +198 -197
- package/lib/engine/engine_tonemapping.js.map +1 -1
- 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 +115 -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 +845 -821
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +341 -341
- package/lib/engine/xr/NeedleXRController.d.ts +313 -313
- package/lib/engine/xr/NeedleXRController.js +1007 -1007
- package/lib/engine/xr/NeedleXRSession.d.ts +340 -340
- package/lib/engine/xr/NeedleXRSession.js +1463 -1463
- package/lib/engine/xr/NeedleXRSync.d.ts +22 -22
- package/lib/engine/xr/NeedleXRSync.js +188 -188
- package/lib/engine/xr/SceneTransition.d.ts +18 -18
- package/lib/engine/xr/SceneTransition.js +69 -69
- package/lib/engine/xr/TempXRContext.d.ts +34 -34
- package/lib/engine/xr/TempXRContext.js +187 -187
- package/lib/engine/xr/XRRig.d.ts +7 -7
- package/lib/engine/xr/XRRig.js +1 -1
- package/lib/engine/xr/api.d.ts +6 -6
- package/lib/engine/xr/api.js +6 -6
- package/lib/engine/xr/events.d.ts +66 -66
- package/lib/engine/xr/events.js +93 -93
- package/lib/engine/xr/internal.d.ts +12 -12
- package/lib/engine/xr/internal.js +25 -25
- package/lib/engine/xr/usdz.d.ts +12 -12
- package/lib/engine/xr/usdz.js +29 -29
- package/lib/engine/xr/utils.d.ts +11 -11
- package/lib/engine/xr/utils.js +34 -34
- package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +156 -156
- package/lib/engine-components/Animation.js +508 -508
- package/lib/engine-components/AnimationCurve.d.ts +40 -40
- package/lib/engine-components/AnimationCurve.js +159 -159
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +27 -27
- package/lib/engine-components/AnimationUtilsAutoplay.d.ts +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +39 -39
- package/lib/engine-components/Animator.d.ts +217 -217
- package/lib/engine-components/Animator.js +354 -354
- package/lib/engine-components/AnimatorController.d.ts +227 -227
- package/lib/engine-components/AnimatorController.js +1152 -1152
- package/lib/engine-components/AudioListener.d.ts +33 -33
- package/lib/engine-components/AudioListener.js +86 -86
- package/lib/engine-components/AudioSource.d.ts +217 -217
- package/lib/engine-components/AudioSource.js +635 -635
- package/lib/engine-components/AvatarLoader.d.ts +80 -80
- package/lib/engine-components/AvatarLoader.js +231 -231
- package/lib/engine-components/AxesHelper.d.ts +32 -32
- package/lib/engine-components/AxesHelper.js +67 -67
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxCollider.d.ts +2 -2
- package/lib/engine-components/BoxCollider.js +2 -2
- package/lib/engine-components/BoxHelperComponent.d.ts +47 -47
- package/lib/engine-components/BoxHelperComponent.js +102 -102
- package/lib/engine-components/Camera.d.ts +231 -231
- package/lib/engine-components/Camera.js +700 -700
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +123 -123
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +59 -59
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +46 -46
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +113 -113
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -39
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +23 -23
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +111 -111
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +25 -25
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +104 -104
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +18 -18
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +32 -32
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +91 -91
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +70 -70
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +176 -176
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +127 -127
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +70 -70
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +19 -19
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +94 -94
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +15 -15
- package/lib/engine-components/postprocessing/Effects/Vignette.js +60 -60
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +90 -90
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +168 -168
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +42 -42
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +494 -494
- package/lib/engine-components/postprocessing/Volume.d.ts +90 -90
- package/lib/engine-components/postprocessing/Volume.js +385 -385
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +26 -26
- package/lib/engine-components/postprocessing/VolumeParameter.js +136 -136
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +15 -15
- package/lib/engine-components/postprocessing/VolumeProfile.js +60 -60
- package/lib/engine-components/postprocessing/index.d.ts +6 -6
- package/lib/engine-components/postprocessing/index.js +6 -6
- package/lib/engine-components/postprocessing/utils.d.ts +55 -55
- package/lib/engine-components/postprocessing/utils.js +119 -119
- package/lib/engine-components/timeline/PlayableDirector.d.ts +163 -163
- package/lib/engine-components/timeline/PlayableDirector.js +686 -686
- package/lib/engine-components/timeline/SignalAsset.d.ts +24 -24
- package/lib/engine-components/timeline/SignalAsset.js +130 -130
- package/lib/engine-components/timeline/TimelineModels.d.ts +89 -89
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +110 -110
- package/lib/engine-components/timeline/TimelineTracks.js +879 -879
- package/lib/engine-components/timeline/index.d.ts +4 -4
- package/lib/engine-components/timeline/index.js +3 -3
- package/lib/engine-components/ui/BaseUIComponent.d.ts +48 -48
- package/lib/engine-components/ui/BaseUIComponent.js +170 -170
- package/lib/engine-components/ui/Button.d.ts +64 -64
- package/lib/engine-components/ui/Button.js +315 -315
- package/lib/engine-components/ui/Canvas.d.ts +74 -74
- package/lib/engine-components/ui/Canvas.js +407 -407
- package/lib/engine-components/ui/CanvasGroup.d.ts +19 -19
- package/lib/engine-components/ui/CanvasGroup.js +58 -58
- package/lib/engine-components/ui/EventSystem.d.ts +125 -125
- package/lib/engine-components/ui/EventSystem.js +765 -765
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +255 -255
- package/lib/engine-components/ui/Image.d.ts +35 -35
- package/lib/engine-components/ui/Image.js +116 -116
- package/lib/engine-components/ui/InputField.d.ts +42 -42
- package/lib/engine-components/ui/InputField.js +268 -268
- package/lib/engine-components/ui/Interfaces.d.ts +38 -38
- package/lib/engine-components/ui/Interfaces.js +12 -12
- package/lib/engine-components/ui/Layout.d.ts +84 -84
- package/lib/engine-components/ui/Layout.js +330 -330
- package/lib/engine-components/ui/Outline.d.ts +7 -7
- package/lib/engine-components/ui/Outline.js +20 -20
- package/lib/engine-components/ui/PointerEvents.d.ts +115 -115
- package/lib/engine-components/ui/PointerEvents.js +145 -145
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
- package/lib/engine-components/ui/RaycastUtils.js +67 -67
- package/lib/engine-components/ui/Raycaster.d.ts +30 -30
- package/lib/engine-components/ui/Raycaster.js +95 -95
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +356 -356
- package/lib/engine-components/ui/SpatialHtml.d.ts +8 -8
- package/lib/engine-components/ui/SpatialHtml.js +79 -79
- package/lib/engine-components/ui/Symbols.d.ts +1 -1
- package/lib/engine-components/ui/Symbols.js +1 -1
- package/lib/engine-components/ui/Text.d.ts +78 -78
- package/lib/engine-components/ui/Text.js +539 -539
- package/lib/engine-components/ui/Utils.d.ts +24 -24
- package/lib/engine-components/ui/Utils.js +90 -90
- package/lib/engine-components/ui/index.d.ts +1 -1
- package/lib/engine-components/ui/index.js +1 -1
- package/lib/engine-components/utils/EnvironmentScene.d.ts +5 -5
- package/lib/engine-components/utils/EnvironmentScene.js +205 -205
- package/lib/engine-components/utils/LookAt.d.ts +31 -31
- package/lib/engine-components/utils/LookAt.js +82 -82
- package/lib/engine-components/utils/OpenURL.d.ts +42 -42
- package/lib/engine-components/utils/OpenURL.js +119 -119
- package/lib/engine-components/webxr/Avatar.d.ts +25 -25
- package/lib/engine-components/webxr/Avatar.js +255 -255
- package/lib/engine-components/webxr/TeleportTarget.d.ts +7 -7
- package/lib/engine-components/webxr/TeleportTarget.js +7 -7
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +30 -30
- package/lib/engine-components/webxr/WebARCameraBackground.js +155 -155
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +98 -98
- package/lib/engine-components/webxr/WebARSessionRoot.js +770 -770
- package/lib/engine-components/webxr/WebXR.d.ts +232 -232
- package/lib/engine-components/webxr/WebXR.js +561 -561
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +27 -27
- package/lib/engine-components/webxr/WebXRAvatar.js +44 -44
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +86 -86
- package/lib/engine-components/webxr/WebXRImageTracking.js +471 -471
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +92 -92
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +500 -500
- package/lib/engine-components/webxr/WebXRRig.d.ts +32 -32
- package/lib/engine-components/webxr/WebXRRig.js +72 -72
- package/lib/engine-components/webxr/XRFlag.d.ts +38 -38
- package/lib/engine-components/webxr/XRFlag.js +139 -139
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +47 -47
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +120 -120
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +43 -43
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +352 -352
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +78 -78
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +506 -506
- package/lib/engine-components/webxr/index.d.ts +3 -3
- package/lib/engine-components/webxr/index.js +3 -3
- package/lib/engine-components/webxr/types.d.ts +3 -3
- package/lib/engine-components/webxr/types.js +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -6
- package/lib/engine-components-experimental/Presentation.js +9 -9
- package/lib/engine-components-experimental/api.d.ts +4 -4
- package/lib/engine-components-experimental/api.js +4 -4
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +156 -156
- package/lib/engine-components-experimental/networking/PlayerSync.js +377 -377
- package/lib/engine-schemes/api.d.ts +12 -12
- package/lib/engine-schemes/api.js +12 -12
- package/lib/engine-schemes/schemes.d.ts +7 -7
- package/lib/engine-schemes/schemes.js +19 -19
- package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
- package/lib/engine-schemes/synced-camera-model.js +67 -67
- package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
- package/lib/engine-schemes/synced-transform-model.js +66 -66
- package/lib/engine-schemes/transform.d.ts +12 -12
- package/lib/engine-schemes/transform.js +39 -39
- package/lib/engine-schemes/vec2.d.ts +10 -10
- package/lib/engine-schemes/vec2.js +25 -25
- package/lib/engine-schemes/vec3.d.ts +11 -11
- package/lib/engine-schemes/vec3.js +29 -29
- package/lib/engine-schemes/vec4.d.ts +12 -12
- package/lib/engine-schemes/vec4.js +33 -33
- package/lib/engine-schemes/vr-user-state-buffer.d.ts +37 -37
- package/lib/engine-schemes/vr-user-state-buffer.js +110 -110
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
- package/lib/needle-engine.d.ts +7 -7
- package/lib/needle-engine.js +64 -64
- package/package.json +3 -3
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +31 -31
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/logger.js +327 -327
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/gltf-packer.mjs +1 -1
- package/plugins/next/alias.cjs +39 -39
- package/plugins/next/license.cjs +24 -24
- package/plugins/next/meshbvhworker.cjs +18 -18
- package/plugins/next/next.js +141 -141
- package/plugins/types/index.d.ts +2 -2
- package/plugins/types/license.d.ts +24 -24
- package/plugins/types/needleConfig.d.ts +27 -27
- package/plugins/types/next.d.ts +2 -2
- package/plugins/types/userconfig.d.ts +124 -124
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +189 -189
- package/plugins/vite/asap.js +251 -251
- package/plugins/vite/build-pipeline.js +371 -371
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/buildinfo.js +41 -41
- package/plugins/vite/config.js +106 -106
- package/plugins/vite/copyfiles.js +138 -138
- package/plugins/vite/defines.js +70 -70
- package/plugins/vite/dependencies.js +232 -232
- package/plugins/vite/dependency-watcher.js +237 -237
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +87 -87
- package/plugins/vite/editor-connection.js +124 -124
- package/plugins/vite/facebook-instant-games.js +102 -102
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +147 -147
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/logger.client.js +272 -272
- package/plugins/vite/logger.js +100 -100
- package/plugins/vite/materialx.js +31 -31
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +29 -29
- package/plugins/vite/poster-client.js +73 -73
- package/plugins/vite/poster.js +79 -79
- package/plugins/vite/pwa.js +604 -604
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +351 -351
- package/plugins/vite/server.js +66 -66
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/transform.js +32 -32
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/asap/needle-asap.ts +111 -111
- package/src/asap/sessiongranted.ts +75 -75
- package/src/asap/utils.ts +4 -4
- package/src/engine/analytics/index.ts +10 -10
- package/src/engine/analytics/lcp.ts +35 -35
- package/src/engine/api.ts +82 -82
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +300 -300
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +333 -333
- package/src/engine/debug/debug_overlay.ts +332 -332
- package/src/engine/debug/debug_spatial_console.ts +429 -429
- package/src/engine/debug/index.ts +1 -1
- package/src/engine/engine_addressables.ts +671 -671
- package/src/engine/engine_animation.ts +145 -145
- package/src/engine/engine_application.ts +113 -113
- package/src/engine/engine_assetdatabase.ts +389 -389
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.ts +39 -39
- package/src/engine/engine_components.ts +366 -366
- package/src/engine/engine_components_internal.ts +40 -40
- package/src/engine/engine_constants.ts +52 -52
- package/src/engine/engine_context.ts +1822 -1824
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +411 -411
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +28 -28
- package/src/engine/engine_fileloader.js +9 -9
- package/src/engine/engine_gameobject.ts +712 -712
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +577 -577
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +403 -403
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1500 -1500
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +45 -45
- package/src/engine/engine_license.ts +386 -386
- package/src/engine/engine_lifecycle_api.ts +113 -113
- package/src/engine/engine_lifecycle_functions_internal.ts +193 -193
- package/src/engine/engine_lightdata.ts +125 -125
- package/src/engine/engine_loaders.callbacks.ts +136 -136
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +378 -378
- package/src/engine/engine_lods.ts +185 -186
- package/src/engine/engine_mainloop_utils.ts +472 -472
- package/src/engine/engine_math.ts +282 -282
- package/src/engine/engine_modules.ts +83 -83
- package/src/engine/engine_networking.ts +862 -862
- package/src/engine/engine_networking_auto.ts +352 -352
- package/src/engine/engine_networking_blob.ts +275 -275
- package/src/engine/engine_networking_files.ts +217 -217
- package/src/engine/engine_networking_files_default_components.ts +58 -58
- package/src/engine/engine_networking_instantiate.ts +419 -419
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +713 -713
- package/src/engine/engine_networking_types.ts +24 -24
- package/src/engine/engine_networking_utils.ts +23 -23
- package/src/engine/engine_networking_websocket.ts +2 -2
- package/src/engine/engine_patcher.ts +199 -199
- package/src/engine/engine_physics.ts +783 -783
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1577 -1577
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_scenelighting.ts +294 -294
- package/src/engine/engine_serialization.ts +2 -2
- package/src/engine/engine_serialization_builtin_serializer.ts +473 -473
- package/src/engine/engine_serialization_core.ts +720 -720
- package/src/engine/engine_serialization_decorator.ts +80 -80
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +267 -267
- package/src/engine/engine_shims.ts +32 -32
- package/src/engine/engine_test_utils.ts +109 -109
- package/src/engine/engine_texture.ts +82 -82
- package/src/engine/engine_three_utils.ts +928 -928
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +209 -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 +890 -860
- package/src/engine/xr/NeedleXRController.ts +1125 -1125
- package/src/engine/xr/NeedleXRSession.ts +1624 -1624
- package/src/engine/xr/NeedleXRSync.ts +220 -220
- package/src/engine/xr/SceneTransition.ts +78 -78
- package/src/engine/xr/TempXRContext.ts +216 -216
- package/src/engine/xr/XRRig.ts +9 -9
- package/src/engine/xr/api.ts +5 -5
- package/src/engine/xr/events.ts +102 -102
- package/src/engine/xr/internal.ts +34 -34
- package/src/engine/xr/usdz.ts +30 -30
- package/src/engine/xr/utils.ts +39 -39
- package/src/engine-components/AlignmentConstraint.ts +36 -36
- package/src/engine-components/Animation.ts +557 -557
- package/src/engine-components/AnimationCurve.ts +150 -150
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +43 -43
- package/src/engine-components/Animator.ts +397 -397
- package/src/engine-components/AnimatorController.ts +1293 -1293
- package/src/engine-components/AudioListener.ts +92 -92
- package/src/engine-components/AudioSource.ts +644 -644
- package/src/engine-components/AvatarLoader.ts +263 -263
- package/src/engine-components/AxesHelper.ts +59 -59
- package/src/engine-components/BasicIKConstraint.ts +54 -54
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +114 -114
- package/src/engine-components/Camera.ts +719 -719
- package/src/engine-components/CameraUtils.ts +138 -138
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +374 -374
- package/src/engine-components/Component.ts +1297 -1297
- package/src/engine-components/ContactShadows.ts +506 -506
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1623 -1623
- package/src/engine-components/DropListener.ts +713 -713
- package/src/engine-components/Duplicatable.ts +198 -198
- package/src/engine-components/EventList.ts +266 -266
- package/src/engine-components/EventTrigger.ts +74 -74
- package/src/engine-components/EventType.ts +22 -22
- package/src/engine-components/Fog.ts +60 -60
- package/src/engine-components/Gizmos.ts +56 -56
- package/src/engine-components/GridHelper.ts +48 -48
- package/src/engine-components/GroundProjection.ts +356 -356
- package/src/engine-components/Interactable.ts +14 -14
- package/src/engine-components/Joints.ts +52 -52
- package/src/engine-components/LODGroup.ts +153 -153
- package/src/engine-components/Light.ts +558 -558
- package/src/engine-components/LookAtConstraint.ts +25 -25
- package/src/engine-components/NeedleMenu.ts +84 -84
- package/src/engine-components/NestedGltf.ts +86 -86
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1074 -1074
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +220 -220
- package/src/engine-components/Renderer.ts +903 -903
- package/src/engine-components/RendererInstancing.ts +855 -855
- package/src/engine-components/RendererLightmap.ts +198 -198
- package/src/engine-components/RigidBody.ts +526 -526
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +475 -475
- package/src/engine-components/SmoothFollow.ts +76 -76
- package/src/engine-components/SpatialTrigger.ts +229 -229
- package/src/engine-components/SpectatorCamera.ts +787 -787
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +468 -468
- package/src/engine-components/SyncedCamera.ts +220 -220
- package/src/engine-components/SyncedRoom.ts +380 -380
- package/src/engine-components/SyncedTransform.ts +383 -383
- package/src/engine-components/TestRunner.ts +118 -118
- package/src/engine-components/TransformGizmo.ts +219 -219
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +60 -60
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +69 -69
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +63 -63
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +139 -139
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +83 -83
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +31 -31
- package/src/engine-components/codegen/components.ts +217 -217
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +265 -265
- package/src/engine-components/export/usdz/Extension.ts +24 -24
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2426 -2426
- package/src/engine-components/export/usdz/USDZExporter.ts +705 -705
- package/src/engine-components/export/usdz/extensions/Animation.ts +1204 -1204
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -532
- package/src/engine-components/export/usdz/extensions/USDZText.ts +240 -240
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +189 -189
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -99
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +102 -102
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +320 -320
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1225 -1225
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +646 -646
- package/src/engine-components/export/usdz/extensions/behavior/PhysicsExtension.ts +132 -132
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +191 -191
- package/src/engine-components/export/usdz/utils/quicklook.ts +50 -50
- package/src/engine-components/particlesystem/ParticleSystem.ts +1287 -1287
- package/src/engine-components/particlesystem/ParticleSystemModules.ts +1765 -1765
- package/src/engine-components/particlesystem/ParticleSystemSubEmitter.ts +111 -111
- package/src/engine-components/particlesystem/api.ts +1 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +64 -64
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +116 -116
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +37 -37
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +106 -106
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +103 -103
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +25 -25
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +32 -32
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +90 -90
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +192 -192
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +143 -143
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +61 -61
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +103 -103
- package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -60
- package/src/engine-components/postprocessing/Effects/Vignette.ts +59 -59
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +192 -192
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +572 -572
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +0 -25
- package/dist/gltf-progressive-YjtQYFa9.js +0 -1052
- package/dist/gltf-progressive-yOP1mp5W.min.js +0 -8
- package/dist/gltf-progressive-zdhlW609.umd.cjs +0 -8
- 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,713 +1,713 @@
|
|
|
1
|
-
import { Bone, Object3D, Quaternion, SkinnedMesh, Vector3 } from "three";
|
|
2
|
-
|
|
3
|
-
import { $shadowDomOwner } from "../engine-components/ui/Symbols.js";
|
|
4
|
-
import { type AssetReference } from "./engine_addressables.js";
|
|
5
|
-
import { __internalNotifyObjectDestroyed as __internalRemoveReferences, disposeObjectResources } from "./engine_assetdatabase.js";
|
|
6
|
-
import { ComponentLifecycleEvents } from "./engine_components_internal.js";
|
|
7
|
-
import { activeInHierarchyFieldName } from "./engine_constants.js";
|
|
8
|
-
import { editorGuidKeyName } from "./engine_constants.js";
|
|
9
|
-
import { $isUsingInstancing, InstancingUtil } from "./engine_instancing.js";
|
|
10
|
-
import { processNewScripts } from "./engine_mainloop_utils.js";
|
|
11
|
-
import { InstantiateIdProvider } from "./engine_networking_instantiate.js";
|
|
12
|
-
import { assign, ISerializable } from "./engine_serialization_core.js";
|
|
13
|
-
import { Context, registerComponent } from "./engine_setup.js";
|
|
14
|
-
import { logHierarchy, setWorldPosition, setWorldQuaternion } from "./engine_three_utils.js";
|
|
15
|
-
import { type Constructor, type GuidsMap, type IComponent as Component, type IComponent, IEventList, type IGameObject as GameObject, type UIDProvider } from "./engine_types.js";
|
|
16
|
-
import { deepClone, getParam, tryFindObject } from "./engine_utils.js";
|
|
17
|
-
import { apply } from "./js-extensions/index.js";
|
|
18
|
-
|
|
19
|
-
const debug = getParam("debuggetcomponent");
|
|
20
|
-
const debugInstantiate = getParam("debuginstantiate");
|
|
21
|
-
|
|
22
|
-
export type IInstantiateOptions = {
|
|
23
|
-
idProvider?: UIDProvider;
|
|
24
|
-
//** parent guid or object */
|
|
25
|
-
parent?: string | Object3D;
|
|
26
|
-
/** position in local space. Set `keepWorldPosition` to true if this is world space */
|
|
27
|
-
position?: Vector3;
|
|
28
|
-
/** for duplicatable parenting */
|
|
29
|
-
keepWorldPosition?: boolean;
|
|
30
|
-
/** rotation in local space. Set `keepWorldPosition` to true if this is world space */
|
|
31
|
-
rotation?: Quaternion;
|
|
32
|
-
scale?: Vector3;
|
|
33
|
-
/** if the instantiated object should be visible */
|
|
34
|
-
visible?: boolean;
|
|
35
|
-
context?: Context;
|
|
36
|
-
/** If true the components will be cloned as well
|
|
37
|
-
* @default true
|
|
38
|
-
*/
|
|
39
|
-
components?: boolean;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Instantiation options for {@link syncInstantiate}
|
|
44
|
-
*/
|
|
45
|
-
export class InstantiateOptions implements IInstantiateOptions {
|
|
46
|
-
idProvider?: UIDProvider | undefined;
|
|
47
|
-
parent?: string | undefined | Object3D;
|
|
48
|
-
keepWorldPosition?: boolean
|
|
49
|
-
position?: Vector3 | undefined;
|
|
50
|
-
rotation?: Quaternion | undefined;
|
|
51
|
-
scale?: Vector3 | undefined;
|
|
52
|
-
visible?: boolean | undefined;
|
|
53
|
-
context?: Context | undefined;
|
|
54
|
-
components?: boolean | undefined;
|
|
55
|
-
|
|
56
|
-
clone() {
|
|
57
|
-
const clone = new InstantiateOptions();
|
|
58
|
-
clone.idProvider = this.idProvider;
|
|
59
|
-
clone.parent = this.parent;
|
|
60
|
-
clone.keepWorldPosition = this.keepWorldPosition;
|
|
61
|
-
clone.position = this.position?.clone();
|
|
62
|
-
clone.rotation = this.rotation?.clone();
|
|
63
|
-
clone.scale = this.scale?.clone();
|
|
64
|
-
clone.visible = this.visible;
|
|
65
|
-
clone.context = this.context;
|
|
66
|
-
clone.components = this.components;
|
|
67
|
-
return clone;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/** Copy fields from another object, clone field references */
|
|
71
|
-
cloneAssign(other: InstantiateOptions | IInstantiateOptions) {
|
|
72
|
-
this.idProvider = other.idProvider;
|
|
73
|
-
this.parent = other.parent;
|
|
74
|
-
this.keepWorldPosition = other.keepWorldPosition;
|
|
75
|
-
this.position = other.position?.clone();
|
|
76
|
-
this.rotation = other.rotation?.clone();
|
|
77
|
-
this.scale = other.scale?.clone();
|
|
78
|
-
this.visible = other.visible;
|
|
79
|
-
this.context = other.context;
|
|
80
|
-
this.components = other.components;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
// export function setActive(go: Object3D, active: boolean, processStart: boolean = true) {
|
|
86
|
-
// if (!go) return;
|
|
87
|
-
// go.visible = active;
|
|
88
|
-
// main.updateActiveInHierarchyWithoutEventCall(go);
|
|
89
|
-
// if (active && processStart)
|
|
90
|
-
// main.processStart(Context.Current, go);
|
|
91
|
-
// }
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// Object.defineProperty(Object3D.prototype, "visible", {
|
|
95
|
-
// get: function () {
|
|
96
|
-
// return this._visible;
|
|
97
|
-
// },
|
|
98
|
-
// set: function (val) {
|
|
99
|
-
// // const changed = val !== this._visible;
|
|
100
|
-
// this._visible = val;
|
|
101
|
-
// // if (changed) {
|
|
102
|
-
// // setActive(this, val);
|
|
103
|
-
// // }
|
|
104
|
-
// }
|
|
105
|
-
// });
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const $isActive = Symbol("isActive");
|
|
109
|
-
export function isActiveSelf(go: Object3D): boolean {
|
|
110
|
-
// if (go[$isActive] === undefined) {
|
|
111
|
-
// go[$isActive] = true;
|
|
112
|
-
// }
|
|
113
|
-
return go.visible;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export function setActive(go: Object3D, active: boolean | number): boolean {
|
|
117
|
-
if (typeof active === "number") active = active > .5;
|
|
118
|
-
// go[$isActive] = active;
|
|
119
|
-
go.visible = active;
|
|
120
|
-
return go.visible;// go[$isActive];
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function isActiveInHierarchy(go: Object3D): boolean {
|
|
124
|
-
return go[activeInHierarchyFieldName] || isUsingInstancing(go);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function markAsInstancedRendered(go: Object3D, instanced: boolean) {
|
|
128
|
-
go[$isUsingInstancing] = instanced;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export function isUsingInstancing(instance: Object3D): boolean { return InstancingUtil.isUsingInstancing(instance); }
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
export function findByGuid(guid: string, hierarchy: Object3D): GameObject | IComponent | null | undefined {
|
|
135
|
-
return tryFindObject(guid, hierarchy, true, true);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const $isDestroyed = Symbol("isDestroyed");
|
|
140
|
-
export function isDestroyed(go: Object3D): boolean {
|
|
141
|
-
return go[$isDestroyed];
|
|
142
|
-
}
|
|
143
|
-
export function setDestroyed(go: Object3D, value: boolean) {
|
|
144
|
-
go[$isDestroyed] = value;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const $isDontDestroy = Symbol("isDontDestroy");
|
|
148
|
-
|
|
149
|
-
/** Mark an Object3D or component as not destroyable
|
|
150
|
-
* @param instance the object to be marked as not destroyable
|
|
151
|
-
* @param value true if the object should not be destroyed in `destroy`
|
|
152
|
-
*/
|
|
153
|
-
export function setDontDestroy(instance: Object3D | Component, value: boolean = true) {
|
|
154
|
-
instance[$isDontDestroy] = value;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const destroyed_components: Array<IComponent> = [];
|
|
158
|
-
const destroyed_objects: Array<Object3D> = [];
|
|
159
|
-
export function destroy(instance: Object3D | Component, recursive: boolean = true, dispose: boolean = false) {
|
|
160
|
-
destroyed_components.length = 0;
|
|
161
|
-
destroyed_objects.length = 0;
|
|
162
|
-
internalDestroy(instance, recursive, true);
|
|
163
|
-
for (const comp of destroyed_components) {
|
|
164
|
-
comp.gameObject = null!;
|
|
165
|
-
//@ts-ignore
|
|
166
|
-
comp.context = null;
|
|
167
|
-
}
|
|
168
|
-
// dipose resources and remove references
|
|
169
|
-
for (const obj of destroyed_objects) {
|
|
170
|
-
setDestroyed(obj, true);
|
|
171
|
-
if (dispose) {
|
|
172
|
-
disposeObjectResources(obj);
|
|
173
|
-
}
|
|
174
|
-
// This needs to be called after disposing because it removes the references to resources
|
|
175
|
-
__internalRemoveReferences(obj);
|
|
176
|
-
}
|
|
177
|
-
destroyed_objects.length = 0;
|
|
178
|
-
destroyed_components.length = 0;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
function internalDestroy(instance: Object3D | Component, recursive: boolean = true, isRoot: boolean = true) {
|
|
182
|
-
if (instance === null || instance === undefined)
|
|
183
|
-
return;
|
|
184
|
-
|
|
185
|
-
const comp = instance as Component;
|
|
186
|
-
if (comp.isComponent) {
|
|
187
|
-
// Handle Component
|
|
188
|
-
if (comp[$isDontDestroy]) return;
|
|
189
|
-
destroyed_components.push(comp);
|
|
190
|
-
const go = comp.gameObject;
|
|
191
|
-
comp.__internalDisable();
|
|
192
|
-
comp.__internalDestroy();
|
|
193
|
-
comp.gameObject = go;
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// handle Object3D
|
|
198
|
-
if (instance[$isDontDestroy]) return;
|
|
199
|
-
|
|
200
|
-
const obj = instance as GameObject;
|
|
201
|
-
if (debug) console.log(obj);
|
|
202
|
-
destroyed_objects.push(obj);
|
|
203
|
-
|
|
204
|
-
// first disable and call onDestroy on components
|
|
205
|
-
const components = obj.userData?.components;
|
|
206
|
-
if (components != null && Array.isArray(components)) {
|
|
207
|
-
let lastLength = components.length;
|
|
208
|
-
for (let i = 0; i < components.length; i++) {
|
|
209
|
-
const comp: Component = components[i];
|
|
210
|
-
internalDestroy(comp, recursive, false);
|
|
211
|
-
// components will be removed from componentlist in destroy
|
|
212
|
-
if (components.length < lastLength) {
|
|
213
|
-
lastLength = components.length;
|
|
214
|
-
i--;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
// then continue in children of the passed in object
|
|
219
|
-
if (recursive && obj.children) {
|
|
220
|
-
for (const ch of obj.children) {
|
|
221
|
-
internalDestroy(ch, recursive, false);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if (isRoot)
|
|
226
|
-
obj.removeFromParent();
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
declare type ForEachComponentCallback = (comp: Component) => any;
|
|
230
|
-
|
|
231
|
-
export function foreachComponent(instance: Object3D, cb: ForEachComponentCallback, recursive: boolean = true): any {
|
|
232
|
-
return internalForEachComponent(instance, cb, recursive);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
export function* foreachComponentEnumerator<T extends IComponent>(instance: Object3D, type?: Constructor<T>, includeChildren: boolean = false, maxLevel: number = 999, _currentLevel: number = 0): Generator<T> {
|
|
236
|
-
if (!instance?.userData.components) return;
|
|
237
|
-
if (_currentLevel > maxLevel) return;
|
|
238
|
-
for (const comp of instance.userData.components) {
|
|
239
|
-
if (type && comp?.isComponent === true && comp instanceof type) {
|
|
240
|
-
yield comp;
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
yield comp;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
if (includeChildren === true) {
|
|
247
|
-
for (const ch of instance.children) {
|
|
248
|
-
yield* foreachComponentEnumerator(ch, type, true, maxLevel, _currentLevel + 1);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
function internalForEachComponent(instance: Object3D, cb: ForEachComponentCallback, recursive: boolean, level: number = 0): any {
|
|
254
|
-
if (!instance) return;
|
|
255
|
-
if (!instance.isObject3D) {
|
|
256
|
-
new Error("Expected Object3D but got " + instance);
|
|
257
|
-
}
|
|
258
|
-
if (level > 1000) {
|
|
259
|
-
console.warn("Failed to iterate components: too many levels");
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
if (instance.userData?.components) {
|
|
263
|
-
for (let i = 0; i < instance.userData.components.length; i++) {
|
|
264
|
-
const comp = instance.userData.components[i];
|
|
265
|
-
if (comp?.isComponent === true) {
|
|
266
|
-
const res = cb(comp);
|
|
267
|
-
if (res !== undefined) return res;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
if (recursive && instance.children) {
|
|
273
|
-
// childArrayBuffer.length = 0;
|
|
274
|
-
// childArrayBuffer.push(...instance.children);
|
|
275
|
-
const nextLevel = level + 1;
|
|
276
|
-
for (let i = 0; i < instance.children.length; i++) {
|
|
277
|
-
const child = instance.children[i];
|
|
278
|
-
if (!child) continue;
|
|
279
|
-
const res = internalForEachComponent(child, cb, recursive, nextLevel);
|
|
280
|
-
if (res !== undefined) return res;
|
|
281
|
-
}
|
|
282
|
-
// childArrayBuffer.length = 0;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
declare type ObjectCloneReference = {
|
|
288
|
-
readonly original: object;
|
|
289
|
-
readonly clone: object;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
declare type InstantiateReferenceMap = Record<string, ObjectCloneReference>;
|
|
294
|
-
/**
|
|
295
|
-
* Provides access to the instantiated object and its clone
|
|
296
|
-
*/
|
|
297
|
-
export declare type InstantiateContext = Readonly<InstantiateReferenceMap>;
|
|
298
|
-
|
|
299
|
-
export function instantiate(instance: AssetReference, opts?: IInstantiateOptions | null): Promise<Object3D | null>
|
|
300
|
-
export function instantiate(instance: GameObject | Object3D, opts?: IInstantiateOptions | null): GameObject
|
|
301
|
-
export function instantiate(instance: AssetReference | GameObject | Object3D, opts?: IInstantiateOptions | null | undefined): GameObject | Promise<Object3D | null> {
|
|
302
|
-
|
|
303
|
-
if ("isAssetReference" in instance) {
|
|
304
|
-
return instance.instantiate(opts ?? undefined);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
let options: InstantiateOptions | null = null;
|
|
308
|
-
|
|
309
|
-
if (opts !== null && opts !== undefined) {
|
|
310
|
-
// if x is defined assume this is a vec3 - this is just to not break everything at once and stay a little bit backwards compatible
|
|
311
|
-
if (opts["x"] !== undefined) {
|
|
312
|
-
options = new InstantiateOptions();
|
|
313
|
-
options.position = opts as unknown as Vector3;
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
// if (opts instanceof InstantiateOptions)
|
|
317
|
-
options = opts as InstantiateOptions;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
let context = Context.Current;
|
|
322
|
-
if (options?.context) context = options.context;
|
|
323
|
-
if (debug && context.alias)
|
|
324
|
-
console.log("context", context.alias);
|
|
325
|
-
|
|
326
|
-
// we need to create the id provider before calling internal instantiate because cloned gameobjects also create new guids
|
|
327
|
-
if (options && !options.idProvider) {
|
|
328
|
-
options.idProvider = new InstantiateIdProvider(Date.now());
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
const components: Array<Component> = [];
|
|
332
|
-
const goMapping: InstantiateReferenceMap = {}; // used to resolve references on components to components on other gameobjects to their new counterpart
|
|
333
|
-
const skinnedMeshes: InstantiateReferenceMap = {}; // used to resolve skinned mesh bones
|
|
334
|
-
const clone = internalInstantiate(context, instance, options, components, goMapping, skinnedMeshes);
|
|
335
|
-
|
|
336
|
-
if (clone) {
|
|
337
|
-
resolveReferences(goMapping);
|
|
338
|
-
resolveAndBindSkinnedMeshBones(skinnedMeshes, goMapping);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
if (debug) {
|
|
342
|
-
logHierarchy(instance, true);
|
|
343
|
-
logHierarchy(clone, true);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
const guidsMap: GuidsMap = {};
|
|
347
|
-
if (options?.components !== false) {
|
|
348
|
-
for (const i in components) {
|
|
349
|
-
const copy = components[i];
|
|
350
|
-
const oldGuid = copy.guid;
|
|
351
|
-
if (options && options.idProvider) {
|
|
352
|
-
copy.guid = options.idProvider.generateUUID();
|
|
353
|
-
guidsMap[oldGuid] = copy.guid;
|
|
354
|
-
if (debug)
|
|
355
|
-
console.log(copy.name, copy.guid)
|
|
356
|
-
}
|
|
357
|
-
registerComponent(copy, context);
|
|
358
|
-
if (copy.__internalNewInstanceCreated)
|
|
359
|
-
copy.__internalNewInstanceCreated();
|
|
360
|
-
}
|
|
361
|
-
for (const i in components) {
|
|
362
|
-
const copy = components[i];
|
|
363
|
-
if (copy.resolveGuids)
|
|
364
|
-
copy.resolveGuids(guidsMap);
|
|
365
|
-
if (copy.enabled === false) continue;
|
|
366
|
-
else copy.enabled = true;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
processNewScripts(context);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
return clone as GameObject;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
function internalInstantiate(
|
|
377
|
-
context: Context, instance: GameObject | Object3D, opts: IInstantiateOptions | InstantiateOptions | null,
|
|
378
|
-
componentsList: Array<Component>,
|
|
379
|
-
objectsMap: InstantiateReferenceMap,
|
|
380
|
-
skinnedMeshesMap: InstantiateReferenceMap
|
|
381
|
-
)
|
|
382
|
-
: GameObject | Object3D | null {
|
|
383
|
-
if (!instance) return null;
|
|
384
|
-
|
|
385
|
-
// Don't clone UI shadow objects
|
|
386
|
-
if (instance[$shadowDomOwner]) {
|
|
387
|
-
return null;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
// prepare, remove things that dont work out of the box
|
|
391
|
-
// e.g. user data we want to manually clone
|
|
392
|
-
// also children throw errors (e.g. recursive toJson with nested meshes)
|
|
393
|
-
const userData = instance.userData;
|
|
394
|
-
instance.userData = {};
|
|
395
|
-
const children = instance.children;
|
|
396
|
-
instance.children = [];
|
|
397
|
-
const clone: Object3D | GameObject = instance.clone(false);
|
|
398
|
-
apply(clone);
|
|
399
|
-
// if(instance[$originalGuid])
|
|
400
|
-
// clone[$originalGuid] = instance[$originalGuid];
|
|
401
|
-
instance.userData = userData;
|
|
402
|
-
instance.children = children;
|
|
403
|
-
|
|
404
|
-
// make reference from old id to new object
|
|
405
|
-
objectsMap[instance.uuid] = { original: instance, clone: clone };
|
|
406
|
-
if (debugInstantiate) console.log("ADD", instance, clone)
|
|
407
|
-
|
|
408
|
-
if (instance.type === "SkinnedMesh") {
|
|
409
|
-
skinnedMeshesMap[instance.uuid] = { original: instance, clone: clone };
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// DO NOT EVER RENAME BECAUSE IT BREAKS / MIGHT BREAK ANIMATIONS
|
|
413
|
-
// clone.name += " (Clone)";
|
|
414
|
-
|
|
415
|
-
if (opts?.visible !== undefined)
|
|
416
|
-
clone.visible = opts.visible;
|
|
417
|
-
|
|
418
|
-
if (opts?.idProvider) {
|
|
419
|
-
clone.uuid = opts.idProvider.generateUUID();
|
|
420
|
-
const cloneGo: GameObject = clone as GameObject;
|
|
421
|
-
if (cloneGo) cloneGo.guid = clone.uuid;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
if (instance.animations && instance.animations.length > 0) {
|
|
425
|
-
clone.animations = [...instance.animations];
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
const parent = instance.parent;
|
|
429
|
-
if (parent) {
|
|
430
|
-
parent.add(clone);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// apply transform
|
|
434
|
-
if (opts?.position) {
|
|
435
|
-
setWorldPosition(clone, opts.position);
|
|
436
|
-
}
|
|
437
|
-
else clone.position.copy(instance.position);
|
|
438
|
-
if (opts?.rotation) {
|
|
439
|
-
setWorldQuaternion(clone, opts.rotation);
|
|
440
|
-
}
|
|
441
|
-
else clone.quaternion.copy(instance.quaternion);
|
|
442
|
-
if (opts?.scale) {
|
|
443
|
-
clone.scale.copy(opts.scale);
|
|
444
|
-
// TODO MAJOR: replace with worldscale
|
|
445
|
-
// clone.worldScale = opts.scale;
|
|
446
|
-
}
|
|
447
|
-
else clone.scale.copy(instance.scale);
|
|
448
|
-
|
|
449
|
-
if (opts?.parent && opts.parent !== "scene") {
|
|
450
|
-
let requestedParent: Object3D | null = null;
|
|
451
|
-
if (typeof opts.parent === "string") {
|
|
452
|
-
requestedParent = tryFindObject(opts.parent, context.scene, true);
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
requestedParent = opts.parent;
|
|
456
|
-
}
|
|
457
|
-
if (requestedParent) {
|
|
458
|
-
const func = opts.keepWorldPosition === true ? requestedParent.attach : requestedParent.add;
|
|
459
|
-
if (!func) console.error("Invalid parent object", requestedParent, "received when instantiating:", instance);
|
|
460
|
-
else func.call(requestedParent, clone);
|
|
461
|
-
}
|
|
462
|
-
else console.warn("could not find parent:", opts.parent);
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
for (const [key, value] of Object.entries(instance.userData)) {
|
|
466
|
-
if (key === "components") continue;
|
|
467
|
-
clone.userData[key] = value;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
if (instance.userData?.components) {
|
|
471
|
-
const components = instance.userData.components;
|
|
472
|
-
const newComponents: Component[] = [];
|
|
473
|
-
clone.userData.components = newComponents;
|
|
474
|
-
for (let i = 0; i < components.length; i++) {
|
|
475
|
-
const comp = components[i];
|
|
476
|
-
const copy = new comp.constructor();
|
|
477
|
-
assign(copy, comp, undefined, {
|
|
478
|
-
// onAssign: (source, key, value) => {
|
|
479
|
-
// if (typeof value === "object") {
|
|
480
|
-
// const serializable = source as ISerializable;
|
|
481
|
-
// if (serializable?.$serializedTypes?.[key]) {
|
|
482
|
-
// console.debug("TODO CLONE", key, value);
|
|
483
|
-
// }
|
|
484
|
-
// }
|
|
485
|
-
// return value;
|
|
486
|
-
// }
|
|
487
|
-
});
|
|
488
|
-
// make sure the original guid stays intact
|
|
489
|
-
if (comp[editorGuidKeyName] !== undefined)
|
|
490
|
-
copy[editorGuidKeyName] = comp[editorGuidKeyName];
|
|
491
|
-
newComponents.push(copy);
|
|
492
|
-
copy.gameObject = clone;
|
|
493
|
-
// copy.transform = clone;
|
|
494
|
-
componentsList.push(copy);
|
|
495
|
-
objectsMap[comp.guid] = { original: comp, clone: copy };
|
|
496
|
-
ComponentLifecycleEvents.dispatchComponentLifecycleEvent("component-added", copy);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// children should just clone the original transform
|
|
501
|
-
if (opts) {
|
|
502
|
-
opts.position = undefined;
|
|
503
|
-
opts.rotation = undefined;
|
|
504
|
-
opts.scale = undefined;
|
|
505
|
-
opts.parent = undefined;
|
|
506
|
-
opts.visible = undefined;
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
for (const ch in instance.children) {
|
|
510
|
-
const child = instance.children[ch];
|
|
511
|
-
const newChild = internalInstantiate(context, child as GameObject, opts, componentsList, objectsMap, skinnedMeshesMap);
|
|
512
|
-
if (newChild) {
|
|
513
|
-
objectsMap[newChild.uuid] = { original: child, clone: newChild };
|
|
514
|
-
clone.add(newChild);
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
return clone;
|
|
519
|
-
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
function resolveAndBindSkinnedMeshBones(
|
|
523
|
-
skinnedMeshes: { [key: string]: ObjectCloneReference },
|
|
524
|
-
newObjectsMap: { [key: string]: ObjectCloneReference }
|
|
525
|
-
) {
|
|
526
|
-
for (const key in skinnedMeshes) {
|
|
527
|
-
const val = skinnedMeshes[key];
|
|
528
|
-
const original = val.original as SkinnedMesh;
|
|
529
|
-
const originalSkeleton = original.skeleton;
|
|
530
|
-
const clone = val.clone as SkinnedMesh;
|
|
531
|
-
// clone.updateWorldMatrix(true, true);
|
|
532
|
-
if (!originalSkeleton) {
|
|
533
|
-
console.warn("Skinned mesh has no skeleton?", val);
|
|
534
|
-
continue;
|
|
535
|
-
}
|
|
536
|
-
const originalBones = originalSkeleton.bones;
|
|
537
|
-
const clonedSkeleton = clone.skeleton.clone();
|
|
538
|
-
|
|
539
|
-
clone.skeleton = clonedSkeleton;
|
|
540
|
-
clone.bindMatrix.clone().copy(original.bindMatrix);
|
|
541
|
-
// console.log(clone.bindMatrix)
|
|
542
|
-
clone.bindMatrixInverse.copy(original.bindMatrixInverse);
|
|
543
|
-
// clone.bindMatrix.multiplyScalar(.025);
|
|
544
|
-
// console.assert(originalSkeleton.uuid !== clonedSkeleton.uuid);
|
|
545
|
-
// console.assert(originalBones.length === clonedSkeleton.bones.length);
|
|
546
|
-
const bones: Array<Bone> = [];
|
|
547
|
-
clonedSkeleton.bones = bones;
|
|
548
|
-
for (let i = 0; i < originalBones.length; i++) {
|
|
549
|
-
const bone = originalBones[i];
|
|
550
|
-
const newBoneInfo = newObjectsMap[bone.uuid];
|
|
551
|
-
const clonedBone = newBoneInfo.clone as Bone;
|
|
552
|
-
// console.log("NEW BONE: ", clonedBone, "BEFORE", newBoneInfo.original);
|
|
553
|
-
bones.push(clonedBone);
|
|
554
|
-
}
|
|
555
|
-
// clone.skeleton = new Skeleton(bones);
|
|
556
|
-
// clone.skeleton.update();
|
|
557
|
-
// clone.pose();
|
|
558
|
-
// clone.scale.set(1,1,1);
|
|
559
|
-
// clone.position.y += .1;
|
|
560
|
-
// console.log("ORIG", original, "CLONE", clone);
|
|
561
|
-
}
|
|
562
|
-
for (const key in skinnedMeshes) {
|
|
563
|
-
const clone = skinnedMeshes[key].clone as SkinnedMesh;
|
|
564
|
-
clone.skeleton.update();
|
|
565
|
-
// clone.skeleton.calculateInverses();
|
|
566
|
-
clone.bind(clone.skeleton, clone.bindMatrix);
|
|
567
|
-
clone.updateMatrixWorld(true);
|
|
568
|
-
// clone.pose();
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
// private static bindNewSkinnedMeshBones(source, clone) {
|
|
573
|
-
// const sourceLookup = new Map();
|
|
574
|
-
// const cloneLookup = new Map();
|
|
575
|
-
// // const clone = source.clone(false);
|
|
576
|
-
|
|
577
|
-
// function parallelTraverse(a, b, callback) {
|
|
578
|
-
// callback(a, b);
|
|
579
|
-
// for (let i = 0; i < a.children.length; i++) {
|
|
580
|
-
// parallelTraverse(a.children[i], b.children[i], callback);
|
|
581
|
-
// }
|
|
582
|
-
// }
|
|
583
|
-
// parallelTraverse(source, clone, function (sourceNode, clonedNode) {
|
|
584
|
-
// sourceLookup.set(clonedNode, sourceNode);
|
|
585
|
-
// cloneLookup.set(sourceNode, clonedNode);
|
|
586
|
-
// });
|
|
587
|
-
|
|
588
|
-
// clone.traverse(function (node) {
|
|
589
|
-
// if (!node.isSkinnedMesh) return;
|
|
590
|
-
// const clonedMesh = node;
|
|
591
|
-
// const sourceMesh = sourceLookup.get(node);
|
|
592
|
-
// const sourceBones = sourceMesh.skeleton.bones;
|
|
593
|
-
|
|
594
|
-
// clonedMesh.skeleton = sourceMesh.skeleton.clone();
|
|
595
|
-
// clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);
|
|
596
|
-
|
|
597
|
-
// clonedMesh.skeleton.bones = sourceBones.map(function (bone) {
|
|
598
|
-
// return cloneLookup.get(bone);
|
|
599
|
-
// });
|
|
600
|
-
// clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);
|
|
601
|
-
// });
|
|
602
|
-
// return clone;
|
|
603
|
-
|
|
604
|
-
// }
|
|
605
|
-
|
|
606
|
-
function resolveReferences(newObjectsMap: InstantiateReferenceMap) {
|
|
607
|
-
// for every object that is newly created we want to update references to their newly created counterparts
|
|
608
|
-
// e.g. a collider instance referencing a rigidbody instance should be updated so that
|
|
609
|
-
// the cloned collider does not reference the cloned rigidbody (instead of the original rigidbody)
|
|
610
|
-
for (const key in newObjectsMap) {
|
|
611
|
-
const val = newObjectsMap[key];
|
|
612
|
-
const clone = val.clone as Object3D;
|
|
613
|
-
// resolve references
|
|
614
|
-
if (clone?.isObject3D && clone?.userData?.components) {
|
|
615
|
-
for (let i = 0; i < clone.userData.components.length; i++) {
|
|
616
|
-
const copy = clone.userData.components[i];
|
|
617
|
-
// find referenced within a cloned gameobject
|
|
618
|
-
const entries = Object.entries(copy);
|
|
619
|
-
// console.log(copy, entries);
|
|
620
|
-
for (const [key, value] of entries) {
|
|
621
|
-
if (Array.isArray(value)) {
|
|
622
|
-
const clonedArray: Array<any> = [];
|
|
623
|
-
copy[key] = clonedArray;
|
|
624
|
-
// console.log(copy, key, value, copy[key]);
|
|
625
|
-
for (let i = 0; i < value.length; i++) {
|
|
626
|
-
const entry = value[i];
|
|
627
|
-
// push value types into new array
|
|
628
|
-
if (typeof entry !== "object") {
|
|
629
|
-
clonedArray.push(entry);
|
|
630
|
-
continue;
|
|
631
|
-
}
|
|
632
|
-
const res: any = postProcessNewInstance(copy, key, entry, newObjectsMap);
|
|
633
|
-
if (res !== undefined) {
|
|
634
|
-
if (debugInstantiate) console.log("Found new instance for", key, entry, "->", res);
|
|
635
|
-
clonedArray.push(res);
|
|
636
|
-
}
|
|
637
|
-
else {
|
|
638
|
-
if (debugInstantiate) console.warn("Could not find new instance for", key, entry);
|
|
639
|
-
clonedArray.push(entry);
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
// console.log(copy[key])
|
|
643
|
-
}
|
|
644
|
-
else if (typeof value === "object") {
|
|
645
|
-
const res = postProcessNewInstance(copy, key, value as IComponent | Object3D, newObjectsMap);
|
|
646
|
-
if (res !== undefined) {
|
|
647
|
-
copy[key] = res;
|
|
648
|
-
}
|
|
649
|
-
else {
|
|
650
|
-
if (debugInstantiate) console.warn("Could not find new instance for", key, value);
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
function postProcessNewInstance(copy: Object3D, key: string, value: IComponent | Object3D | any, newObjectsMap: InstantiateReferenceMap) {
|
|
661
|
-
if (value === null || value === undefined) return;
|
|
662
|
-
if ((value as IComponent).isComponent === true) {
|
|
663
|
-
const originalGameObjectReference = value["gameObject"];
|
|
664
|
-
// console.log(key, value, originalGameObjectReference);
|
|
665
|
-
if (originalGameObjectReference) {
|
|
666
|
-
const id = originalGameObjectReference.uuid;
|
|
667
|
-
const newGameObject = newObjectsMap[id]?.clone;
|
|
668
|
-
if (!newGameObject) {
|
|
669
|
-
// reference has not changed!
|
|
670
|
-
if (debugInstantiate)
|
|
671
|
-
console.log("reference did not change", key, copy, value);
|
|
672
|
-
return;
|
|
673
|
-
}
|
|
674
|
-
const index = originalGameObjectReference.userData.components.indexOf(value);
|
|
675
|
-
if (index >= 0 && (newGameObject as Object3D).isObject3D) {
|
|
676
|
-
if (debugInstantiate)
|
|
677
|
-
console.log(key, id);
|
|
678
|
-
const found = (newGameObject as Object3D).userData.components[index];
|
|
679
|
-
return found;
|
|
680
|
-
}
|
|
681
|
-
else {
|
|
682
|
-
console.warn("could not find component", key, value);
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
} else if ((value as Object3D).isObject3D === true) {
|
|
686
|
-
// console.log(value);
|
|
687
|
-
if (key === "gameObject") return;
|
|
688
|
-
const originalGameObjectReference = value as Object3D;
|
|
689
|
-
if (originalGameObjectReference) {
|
|
690
|
-
const id = originalGameObjectReference.uuid;
|
|
691
|
-
const newGameObject = newObjectsMap[id]?.clone;
|
|
692
|
-
if (newGameObject) {
|
|
693
|
-
if (debugInstantiate)
|
|
694
|
-
console.log(key, "old", value, "new", newGameObject);
|
|
695
|
-
return newGameObject;
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
else {
|
|
700
|
-
// create new instances for some types that we know should usually not be shared and can safely be cloned
|
|
701
|
-
if (value.isVector4 || value.isVector3 || value.isVector2 || value.isQuaternion || value.isEuler) {
|
|
702
|
-
return value.clone();
|
|
703
|
-
}
|
|
704
|
-
else if (value.isColor === true) {
|
|
705
|
-
return value.clone();
|
|
706
|
-
}
|
|
707
|
-
else if ((value as IEventList).isEventList === true) {
|
|
708
|
-
// create a new instance of the object
|
|
709
|
-
const copy = (value as IEventList).__internalOnInstantiate(newObjectsMap);
|
|
710
|
-
return copy;
|
|
711
|
-
}
|
|
712
|
-
}
|
|
1
|
+
import { Bone, Object3D, Quaternion, SkinnedMesh, Vector3 } from "three";
|
|
2
|
+
|
|
3
|
+
import { $shadowDomOwner } from "../engine-components/ui/Symbols.js";
|
|
4
|
+
import { type AssetReference } from "./engine_addressables.js";
|
|
5
|
+
import { __internalNotifyObjectDestroyed as __internalRemoveReferences, disposeObjectResources } from "./engine_assetdatabase.js";
|
|
6
|
+
import { ComponentLifecycleEvents } from "./engine_components_internal.js";
|
|
7
|
+
import { activeInHierarchyFieldName } from "./engine_constants.js";
|
|
8
|
+
import { editorGuidKeyName } from "./engine_constants.js";
|
|
9
|
+
import { $isUsingInstancing, InstancingUtil } from "./engine_instancing.js";
|
|
10
|
+
import { processNewScripts } from "./engine_mainloop_utils.js";
|
|
11
|
+
import { InstantiateIdProvider } from "./engine_networking_instantiate.js";
|
|
12
|
+
import { assign, ISerializable } from "./engine_serialization_core.js";
|
|
13
|
+
import { Context, registerComponent } from "./engine_setup.js";
|
|
14
|
+
import { logHierarchy, setWorldPosition, setWorldQuaternion } from "./engine_three_utils.js";
|
|
15
|
+
import { type Constructor, type GuidsMap, type IComponent as Component, type IComponent, IEventList, type IGameObject as GameObject, type UIDProvider } from "./engine_types.js";
|
|
16
|
+
import { deepClone, getParam, tryFindObject } from "./engine_utils.js";
|
|
17
|
+
import { apply } from "./js-extensions/index.js";
|
|
18
|
+
|
|
19
|
+
const debug = getParam("debuggetcomponent");
|
|
20
|
+
const debugInstantiate = getParam("debuginstantiate");
|
|
21
|
+
|
|
22
|
+
export type IInstantiateOptions = {
|
|
23
|
+
idProvider?: UIDProvider;
|
|
24
|
+
//** parent guid or object */
|
|
25
|
+
parent?: string | Object3D;
|
|
26
|
+
/** position in local space. Set `keepWorldPosition` to true if this is world space */
|
|
27
|
+
position?: Vector3;
|
|
28
|
+
/** for duplicatable parenting */
|
|
29
|
+
keepWorldPosition?: boolean;
|
|
30
|
+
/** rotation in local space. Set `keepWorldPosition` to true if this is world space */
|
|
31
|
+
rotation?: Quaternion;
|
|
32
|
+
scale?: Vector3;
|
|
33
|
+
/** if the instantiated object should be visible */
|
|
34
|
+
visible?: boolean;
|
|
35
|
+
context?: Context;
|
|
36
|
+
/** If true the components will be cloned as well
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
components?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Instantiation options for {@link syncInstantiate}
|
|
44
|
+
*/
|
|
45
|
+
export class InstantiateOptions implements IInstantiateOptions {
|
|
46
|
+
idProvider?: UIDProvider | undefined;
|
|
47
|
+
parent?: string | undefined | Object3D;
|
|
48
|
+
keepWorldPosition?: boolean
|
|
49
|
+
position?: Vector3 | undefined;
|
|
50
|
+
rotation?: Quaternion | undefined;
|
|
51
|
+
scale?: Vector3 | undefined;
|
|
52
|
+
visible?: boolean | undefined;
|
|
53
|
+
context?: Context | undefined;
|
|
54
|
+
components?: boolean | undefined;
|
|
55
|
+
|
|
56
|
+
clone() {
|
|
57
|
+
const clone = new InstantiateOptions();
|
|
58
|
+
clone.idProvider = this.idProvider;
|
|
59
|
+
clone.parent = this.parent;
|
|
60
|
+
clone.keepWorldPosition = this.keepWorldPosition;
|
|
61
|
+
clone.position = this.position?.clone();
|
|
62
|
+
clone.rotation = this.rotation?.clone();
|
|
63
|
+
clone.scale = this.scale?.clone();
|
|
64
|
+
clone.visible = this.visible;
|
|
65
|
+
clone.context = this.context;
|
|
66
|
+
clone.components = this.components;
|
|
67
|
+
return clone;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Copy fields from another object, clone field references */
|
|
71
|
+
cloneAssign(other: InstantiateOptions | IInstantiateOptions) {
|
|
72
|
+
this.idProvider = other.idProvider;
|
|
73
|
+
this.parent = other.parent;
|
|
74
|
+
this.keepWorldPosition = other.keepWorldPosition;
|
|
75
|
+
this.position = other.position?.clone();
|
|
76
|
+
this.rotation = other.rotation?.clone();
|
|
77
|
+
this.scale = other.scale?.clone();
|
|
78
|
+
this.visible = other.visible;
|
|
79
|
+
this.context = other.context;
|
|
80
|
+
this.components = other.components;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
// export function setActive(go: Object3D, active: boolean, processStart: boolean = true) {
|
|
86
|
+
// if (!go) return;
|
|
87
|
+
// go.visible = active;
|
|
88
|
+
// main.updateActiveInHierarchyWithoutEventCall(go);
|
|
89
|
+
// if (active && processStart)
|
|
90
|
+
// main.processStart(Context.Current, go);
|
|
91
|
+
// }
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// Object.defineProperty(Object3D.prototype, "visible", {
|
|
95
|
+
// get: function () {
|
|
96
|
+
// return this._visible;
|
|
97
|
+
// },
|
|
98
|
+
// set: function (val) {
|
|
99
|
+
// // const changed = val !== this._visible;
|
|
100
|
+
// this._visible = val;
|
|
101
|
+
// // if (changed) {
|
|
102
|
+
// // setActive(this, val);
|
|
103
|
+
// // }
|
|
104
|
+
// }
|
|
105
|
+
// });
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
const $isActive = Symbol("isActive");
|
|
109
|
+
export function isActiveSelf(go: Object3D): boolean {
|
|
110
|
+
// if (go[$isActive] === undefined) {
|
|
111
|
+
// go[$isActive] = true;
|
|
112
|
+
// }
|
|
113
|
+
return go.visible;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function setActive(go: Object3D, active: boolean | number): boolean {
|
|
117
|
+
if (typeof active === "number") active = active > .5;
|
|
118
|
+
// go[$isActive] = active;
|
|
119
|
+
go.visible = active;
|
|
120
|
+
return go.visible;// go[$isActive];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function isActiveInHierarchy(go: Object3D): boolean {
|
|
124
|
+
return go[activeInHierarchyFieldName] || isUsingInstancing(go);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function markAsInstancedRendered(go: Object3D, instanced: boolean) {
|
|
128
|
+
go[$isUsingInstancing] = instanced;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function isUsingInstancing(instance: Object3D): boolean { return InstancingUtil.isUsingInstancing(instance); }
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
export function findByGuid(guid: string, hierarchy: Object3D): GameObject | IComponent | null | undefined {
|
|
135
|
+
return tryFindObject(guid, hierarchy, true, true);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
const $isDestroyed = Symbol("isDestroyed");
|
|
140
|
+
export function isDestroyed(go: Object3D): boolean {
|
|
141
|
+
return go[$isDestroyed];
|
|
142
|
+
}
|
|
143
|
+
export function setDestroyed(go: Object3D, value: boolean) {
|
|
144
|
+
go[$isDestroyed] = value;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const $isDontDestroy = Symbol("isDontDestroy");
|
|
148
|
+
|
|
149
|
+
/** Mark an Object3D or component as not destroyable
|
|
150
|
+
* @param instance the object to be marked as not destroyable
|
|
151
|
+
* @param value true if the object should not be destroyed in `destroy`
|
|
152
|
+
*/
|
|
153
|
+
export function setDontDestroy(instance: Object3D | Component, value: boolean = true) {
|
|
154
|
+
instance[$isDontDestroy] = value;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const destroyed_components: Array<IComponent> = [];
|
|
158
|
+
const destroyed_objects: Array<Object3D> = [];
|
|
159
|
+
export function destroy(instance: Object3D | Component, recursive: boolean = true, dispose: boolean = false) {
|
|
160
|
+
destroyed_components.length = 0;
|
|
161
|
+
destroyed_objects.length = 0;
|
|
162
|
+
internalDestroy(instance, recursive, true);
|
|
163
|
+
for (const comp of destroyed_components) {
|
|
164
|
+
comp.gameObject = null!;
|
|
165
|
+
//@ts-ignore
|
|
166
|
+
comp.context = null;
|
|
167
|
+
}
|
|
168
|
+
// dipose resources and remove references
|
|
169
|
+
for (const obj of destroyed_objects) {
|
|
170
|
+
setDestroyed(obj, true);
|
|
171
|
+
if (dispose) {
|
|
172
|
+
disposeObjectResources(obj);
|
|
173
|
+
}
|
|
174
|
+
// This needs to be called after disposing because it removes the references to resources
|
|
175
|
+
__internalRemoveReferences(obj);
|
|
176
|
+
}
|
|
177
|
+
destroyed_objects.length = 0;
|
|
178
|
+
destroyed_components.length = 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function internalDestroy(instance: Object3D | Component, recursive: boolean = true, isRoot: boolean = true) {
|
|
182
|
+
if (instance === null || instance === undefined)
|
|
183
|
+
return;
|
|
184
|
+
|
|
185
|
+
const comp = instance as Component;
|
|
186
|
+
if (comp.isComponent) {
|
|
187
|
+
// Handle Component
|
|
188
|
+
if (comp[$isDontDestroy]) return;
|
|
189
|
+
destroyed_components.push(comp);
|
|
190
|
+
const go = comp.gameObject;
|
|
191
|
+
comp.__internalDisable();
|
|
192
|
+
comp.__internalDestroy();
|
|
193
|
+
comp.gameObject = go;
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// handle Object3D
|
|
198
|
+
if (instance[$isDontDestroy]) return;
|
|
199
|
+
|
|
200
|
+
const obj = instance as GameObject;
|
|
201
|
+
if (debug) console.log(obj);
|
|
202
|
+
destroyed_objects.push(obj);
|
|
203
|
+
|
|
204
|
+
// first disable and call onDestroy on components
|
|
205
|
+
const components = obj.userData?.components;
|
|
206
|
+
if (components != null && Array.isArray(components)) {
|
|
207
|
+
let lastLength = components.length;
|
|
208
|
+
for (let i = 0; i < components.length; i++) {
|
|
209
|
+
const comp: Component = components[i];
|
|
210
|
+
internalDestroy(comp, recursive, false);
|
|
211
|
+
// components will be removed from componentlist in destroy
|
|
212
|
+
if (components.length < lastLength) {
|
|
213
|
+
lastLength = components.length;
|
|
214
|
+
i--;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// then continue in children of the passed in object
|
|
219
|
+
if (recursive && obj.children) {
|
|
220
|
+
for (const ch of obj.children) {
|
|
221
|
+
internalDestroy(ch, recursive, false);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (isRoot)
|
|
226
|
+
obj.removeFromParent();
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
declare type ForEachComponentCallback = (comp: Component) => any;
|
|
230
|
+
|
|
231
|
+
export function foreachComponent(instance: Object3D, cb: ForEachComponentCallback, recursive: boolean = true): any {
|
|
232
|
+
return internalForEachComponent(instance, cb, recursive);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function* foreachComponentEnumerator<T extends IComponent>(instance: Object3D, type?: Constructor<T>, includeChildren: boolean = false, maxLevel: number = 999, _currentLevel: number = 0): Generator<T> {
|
|
236
|
+
if (!instance?.userData.components) return;
|
|
237
|
+
if (_currentLevel > maxLevel) return;
|
|
238
|
+
for (const comp of instance.userData.components) {
|
|
239
|
+
if (type && comp?.isComponent === true && comp instanceof type) {
|
|
240
|
+
yield comp;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
yield comp;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (includeChildren === true) {
|
|
247
|
+
for (const ch of instance.children) {
|
|
248
|
+
yield* foreachComponentEnumerator(ch, type, true, maxLevel, _currentLevel + 1);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function internalForEachComponent(instance: Object3D, cb: ForEachComponentCallback, recursive: boolean, level: number = 0): any {
|
|
254
|
+
if (!instance) return;
|
|
255
|
+
if (!instance.isObject3D) {
|
|
256
|
+
new Error("Expected Object3D but got " + instance);
|
|
257
|
+
}
|
|
258
|
+
if (level > 1000) {
|
|
259
|
+
console.warn("Failed to iterate components: too many levels");
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (instance.userData?.components) {
|
|
263
|
+
for (let i = 0; i < instance.userData.components.length; i++) {
|
|
264
|
+
const comp = instance.userData.components[i];
|
|
265
|
+
if (comp?.isComponent === true) {
|
|
266
|
+
const res = cb(comp);
|
|
267
|
+
if (res !== undefined) return res;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (recursive && instance.children) {
|
|
273
|
+
// childArrayBuffer.length = 0;
|
|
274
|
+
// childArrayBuffer.push(...instance.children);
|
|
275
|
+
const nextLevel = level + 1;
|
|
276
|
+
for (let i = 0; i < instance.children.length; i++) {
|
|
277
|
+
const child = instance.children[i];
|
|
278
|
+
if (!child) continue;
|
|
279
|
+
const res = internalForEachComponent(child, cb, recursive, nextLevel);
|
|
280
|
+
if (res !== undefined) return res;
|
|
281
|
+
}
|
|
282
|
+
// childArrayBuffer.length = 0;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
declare type ObjectCloneReference = {
|
|
288
|
+
readonly original: object;
|
|
289
|
+
readonly clone: object;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
declare type InstantiateReferenceMap = Record<string, ObjectCloneReference>;
|
|
294
|
+
/**
|
|
295
|
+
* Provides access to the instantiated object and its clone
|
|
296
|
+
*/
|
|
297
|
+
export declare type InstantiateContext = Readonly<InstantiateReferenceMap>;
|
|
298
|
+
|
|
299
|
+
export function instantiate(instance: AssetReference, opts?: IInstantiateOptions | null): Promise<Object3D | null>
|
|
300
|
+
export function instantiate(instance: GameObject | Object3D, opts?: IInstantiateOptions | null): GameObject
|
|
301
|
+
export function instantiate(instance: AssetReference | GameObject | Object3D, opts?: IInstantiateOptions | null | undefined): GameObject | Promise<Object3D | null> {
|
|
302
|
+
|
|
303
|
+
if ("isAssetReference" in instance) {
|
|
304
|
+
return instance.instantiate(opts ?? undefined);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
let options: InstantiateOptions | null = null;
|
|
308
|
+
|
|
309
|
+
if (opts !== null && opts !== undefined) {
|
|
310
|
+
// if x is defined assume this is a vec3 - this is just to not break everything at once and stay a little bit backwards compatible
|
|
311
|
+
if (opts["x"] !== undefined) {
|
|
312
|
+
options = new InstantiateOptions();
|
|
313
|
+
options.position = opts as unknown as Vector3;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
// if (opts instanceof InstantiateOptions)
|
|
317
|
+
options = opts as InstantiateOptions;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
let context = Context.Current;
|
|
322
|
+
if (options?.context) context = options.context;
|
|
323
|
+
if (debug && context.alias)
|
|
324
|
+
console.log("context", context.alias);
|
|
325
|
+
|
|
326
|
+
// we need to create the id provider before calling internal instantiate because cloned gameobjects also create new guids
|
|
327
|
+
if (options && !options.idProvider) {
|
|
328
|
+
options.idProvider = new InstantiateIdProvider(Date.now());
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const components: Array<Component> = [];
|
|
332
|
+
const goMapping: InstantiateReferenceMap = {}; // used to resolve references on components to components on other gameobjects to their new counterpart
|
|
333
|
+
const skinnedMeshes: InstantiateReferenceMap = {}; // used to resolve skinned mesh bones
|
|
334
|
+
const clone = internalInstantiate(context, instance, options, components, goMapping, skinnedMeshes);
|
|
335
|
+
|
|
336
|
+
if (clone) {
|
|
337
|
+
resolveReferences(goMapping);
|
|
338
|
+
resolveAndBindSkinnedMeshBones(skinnedMeshes, goMapping);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (debug) {
|
|
342
|
+
logHierarchy(instance, true);
|
|
343
|
+
logHierarchy(clone, true);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
const guidsMap: GuidsMap = {};
|
|
347
|
+
if (options?.components !== false) {
|
|
348
|
+
for (const i in components) {
|
|
349
|
+
const copy = components[i];
|
|
350
|
+
const oldGuid = copy.guid;
|
|
351
|
+
if (options && options.idProvider) {
|
|
352
|
+
copy.guid = options.idProvider.generateUUID();
|
|
353
|
+
guidsMap[oldGuid] = copy.guid;
|
|
354
|
+
if (debug)
|
|
355
|
+
console.log(copy.name, copy.guid)
|
|
356
|
+
}
|
|
357
|
+
registerComponent(copy, context);
|
|
358
|
+
if (copy.__internalNewInstanceCreated)
|
|
359
|
+
copy.__internalNewInstanceCreated();
|
|
360
|
+
}
|
|
361
|
+
for (const i in components) {
|
|
362
|
+
const copy = components[i];
|
|
363
|
+
if (copy.resolveGuids)
|
|
364
|
+
copy.resolveGuids(guidsMap);
|
|
365
|
+
if (copy.enabled === false) continue;
|
|
366
|
+
else copy.enabled = true;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
processNewScripts(context);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return clone as GameObject;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
function internalInstantiate(
|
|
377
|
+
context: Context, instance: GameObject | Object3D, opts: IInstantiateOptions | InstantiateOptions | null,
|
|
378
|
+
componentsList: Array<Component>,
|
|
379
|
+
objectsMap: InstantiateReferenceMap,
|
|
380
|
+
skinnedMeshesMap: InstantiateReferenceMap
|
|
381
|
+
)
|
|
382
|
+
: GameObject | Object3D | null {
|
|
383
|
+
if (!instance) return null;
|
|
384
|
+
|
|
385
|
+
// Don't clone UI shadow objects
|
|
386
|
+
if (instance[$shadowDomOwner]) {
|
|
387
|
+
return null;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// prepare, remove things that dont work out of the box
|
|
391
|
+
// e.g. user data we want to manually clone
|
|
392
|
+
// also children throw errors (e.g. recursive toJson with nested meshes)
|
|
393
|
+
const userData = instance.userData;
|
|
394
|
+
instance.userData = {};
|
|
395
|
+
const children = instance.children;
|
|
396
|
+
instance.children = [];
|
|
397
|
+
const clone: Object3D | GameObject = instance.clone(false);
|
|
398
|
+
apply(clone);
|
|
399
|
+
// if(instance[$originalGuid])
|
|
400
|
+
// clone[$originalGuid] = instance[$originalGuid];
|
|
401
|
+
instance.userData = userData;
|
|
402
|
+
instance.children = children;
|
|
403
|
+
|
|
404
|
+
// make reference from old id to new object
|
|
405
|
+
objectsMap[instance.uuid] = { original: instance, clone: clone };
|
|
406
|
+
if (debugInstantiate) console.log("ADD", instance, clone)
|
|
407
|
+
|
|
408
|
+
if (instance.type === "SkinnedMesh") {
|
|
409
|
+
skinnedMeshesMap[instance.uuid] = { original: instance, clone: clone };
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// DO NOT EVER RENAME BECAUSE IT BREAKS / MIGHT BREAK ANIMATIONS
|
|
413
|
+
// clone.name += " (Clone)";
|
|
414
|
+
|
|
415
|
+
if (opts?.visible !== undefined)
|
|
416
|
+
clone.visible = opts.visible;
|
|
417
|
+
|
|
418
|
+
if (opts?.idProvider) {
|
|
419
|
+
clone.uuid = opts.idProvider.generateUUID();
|
|
420
|
+
const cloneGo: GameObject = clone as GameObject;
|
|
421
|
+
if (cloneGo) cloneGo.guid = clone.uuid;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
if (instance.animations && instance.animations.length > 0) {
|
|
425
|
+
clone.animations = [...instance.animations];
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const parent = instance.parent;
|
|
429
|
+
if (parent) {
|
|
430
|
+
parent.add(clone);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// apply transform
|
|
434
|
+
if (opts?.position) {
|
|
435
|
+
setWorldPosition(clone, opts.position);
|
|
436
|
+
}
|
|
437
|
+
else clone.position.copy(instance.position);
|
|
438
|
+
if (opts?.rotation) {
|
|
439
|
+
setWorldQuaternion(clone, opts.rotation);
|
|
440
|
+
}
|
|
441
|
+
else clone.quaternion.copy(instance.quaternion);
|
|
442
|
+
if (opts?.scale) {
|
|
443
|
+
clone.scale.copy(opts.scale);
|
|
444
|
+
// TODO MAJOR: replace with worldscale
|
|
445
|
+
// clone.worldScale = opts.scale;
|
|
446
|
+
}
|
|
447
|
+
else clone.scale.copy(instance.scale);
|
|
448
|
+
|
|
449
|
+
if (opts?.parent && opts.parent !== "scene") {
|
|
450
|
+
let requestedParent: Object3D | null = null;
|
|
451
|
+
if (typeof opts.parent === "string") {
|
|
452
|
+
requestedParent = tryFindObject(opts.parent, context.scene, true);
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
requestedParent = opts.parent;
|
|
456
|
+
}
|
|
457
|
+
if (requestedParent) {
|
|
458
|
+
const func = opts.keepWorldPosition === true ? requestedParent.attach : requestedParent.add;
|
|
459
|
+
if (!func) console.error("Invalid parent object", requestedParent, "received when instantiating:", instance);
|
|
460
|
+
else func.call(requestedParent, clone);
|
|
461
|
+
}
|
|
462
|
+
else console.warn("could not find parent:", opts.parent);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
for (const [key, value] of Object.entries(instance.userData)) {
|
|
466
|
+
if (key === "components") continue;
|
|
467
|
+
clone.userData[key] = value;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
if (instance.userData?.components) {
|
|
471
|
+
const components = instance.userData.components;
|
|
472
|
+
const newComponents: Component[] = [];
|
|
473
|
+
clone.userData.components = newComponents;
|
|
474
|
+
for (let i = 0; i < components.length; i++) {
|
|
475
|
+
const comp = components[i];
|
|
476
|
+
const copy = new comp.constructor();
|
|
477
|
+
assign(copy, comp, undefined, {
|
|
478
|
+
// onAssign: (source, key, value) => {
|
|
479
|
+
// if (typeof value === "object") {
|
|
480
|
+
// const serializable = source as ISerializable;
|
|
481
|
+
// if (serializable?.$serializedTypes?.[key]) {
|
|
482
|
+
// console.debug("TODO CLONE", key, value);
|
|
483
|
+
// }
|
|
484
|
+
// }
|
|
485
|
+
// return value;
|
|
486
|
+
// }
|
|
487
|
+
});
|
|
488
|
+
// make sure the original guid stays intact
|
|
489
|
+
if (comp[editorGuidKeyName] !== undefined)
|
|
490
|
+
copy[editorGuidKeyName] = comp[editorGuidKeyName];
|
|
491
|
+
newComponents.push(copy);
|
|
492
|
+
copy.gameObject = clone;
|
|
493
|
+
// copy.transform = clone;
|
|
494
|
+
componentsList.push(copy);
|
|
495
|
+
objectsMap[comp.guid] = { original: comp, clone: copy };
|
|
496
|
+
ComponentLifecycleEvents.dispatchComponentLifecycleEvent("component-added", copy);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// children should just clone the original transform
|
|
501
|
+
if (opts) {
|
|
502
|
+
opts.position = undefined;
|
|
503
|
+
opts.rotation = undefined;
|
|
504
|
+
opts.scale = undefined;
|
|
505
|
+
opts.parent = undefined;
|
|
506
|
+
opts.visible = undefined;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
for (const ch in instance.children) {
|
|
510
|
+
const child = instance.children[ch];
|
|
511
|
+
const newChild = internalInstantiate(context, child as GameObject, opts, componentsList, objectsMap, skinnedMeshesMap);
|
|
512
|
+
if (newChild) {
|
|
513
|
+
objectsMap[newChild.uuid] = { original: child, clone: newChild };
|
|
514
|
+
clone.add(newChild);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return clone;
|
|
519
|
+
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
function resolveAndBindSkinnedMeshBones(
|
|
523
|
+
skinnedMeshes: { [key: string]: ObjectCloneReference },
|
|
524
|
+
newObjectsMap: { [key: string]: ObjectCloneReference }
|
|
525
|
+
) {
|
|
526
|
+
for (const key in skinnedMeshes) {
|
|
527
|
+
const val = skinnedMeshes[key];
|
|
528
|
+
const original = val.original as SkinnedMesh;
|
|
529
|
+
const originalSkeleton = original.skeleton;
|
|
530
|
+
const clone = val.clone as SkinnedMesh;
|
|
531
|
+
// clone.updateWorldMatrix(true, true);
|
|
532
|
+
if (!originalSkeleton) {
|
|
533
|
+
console.warn("Skinned mesh has no skeleton?", val);
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
const originalBones = originalSkeleton.bones;
|
|
537
|
+
const clonedSkeleton = clone.skeleton.clone();
|
|
538
|
+
|
|
539
|
+
clone.skeleton = clonedSkeleton;
|
|
540
|
+
clone.bindMatrix.clone().copy(original.bindMatrix);
|
|
541
|
+
// console.log(clone.bindMatrix)
|
|
542
|
+
clone.bindMatrixInverse.copy(original.bindMatrixInverse);
|
|
543
|
+
// clone.bindMatrix.multiplyScalar(.025);
|
|
544
|
+
// console.assert(originalSkeleton.uuid !== clonedSkeleton.uuid);
|
|
545
|
+
// console.assert(originalBones.length === clonedSkeleton.bones.length);
|
|
546
|
+
const bones: Array<Bone> = [];
|
|
547
|
+
clonedSkeleton.bones = bones;
|
|
548
|
+
for (let i = 0; i < originalBones.length; i++) {
|
|
549
|
+
const bone = originalBones[i];
|
|
550
|
+
const newBoneInfo = newObjectsMap[bone.uuid];
|
|
551
|
+
const clonedBone = newBoneInfo.clone as Bone;
|
|
552
|
+
// console.log("NEW BONE: ", clonedBone, "BEFORE", newBoneInfo.original);
|
|
553
|
+
bones.push(clonedBone);
|
|
554
|
+
}
|
|
555
|
+
// clone.skeleton = new Skeleton(bones);
|
|
556
|
+
// clone.skeleton.update();
|
|
557
|
+
// clone.pose();
|
|
558
|
+
// clone.scale.set(1,1,1);
|
|
559
|
+
// clone.position.y += .1;
|
|
560
|
+
// console.log("ORIG", original, "CLONE", clone);
|
|
561
|
+
}
|
|
562
|
+
for (const key in skinnedMeshes) {
|
|
563
|
+
const clone = skinnedMeshes[key].clone as SkinnedMesh;
|
|
564
|
+
clone.skeleton.update();
|
|
565
|
+
// clone.skeleton.calculateInverses();
|
|
566
|
+
clone.bind(clone.skeleton, clone.bindMatrix);
|
|
567
|
+
clone.updateMatrixWorld(true);
|
|
568
|
+
// clone.pose();
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// private static bindNewSkinnedMeshBones(source, clone) {
|
|
573
|
+
// const sourceLookup = new Map();
|
|
574
|
+
// const cloneLookup = new Map();
|
|
575
|
+
// // const clone = source.clone(false);
|
|
576
|
+
|
|
577
|
+
// function parallelTraverse(a, b, callback) {
|
|
578
|
+
// callback(a, b);
|
|
579
|
+
// for (let i = 0; i < a.children.length; i++) {
|
|
580
|
+
// parallelTraverse(a.children[i], b.children[i], callback);
|
|
581
|
+
// }
|
|
582
|
+
// }
|
|
583
|
+
// parallelTraverse(source, clone, function (sourceNode, clonedNode) {
|
|
584
|
+
// sourceLookup.set(clonedNode, sourceNode);
|
|
585
|
+
// cloneLookup.set(sourceNode, clonedNode);
|
|
586
|
+
// });
|
|
587
|
+
|
|
588
|
+
// clone.traverse(function (node) {
|
|
589
|
+
// if (!node.isSkinnedMesh) return;
|
|
590
|
+
// const clonedMesh = node;
|
|
591
|
+
// const sourceMesh = sourceLookup.get(node);
|
|
592
|
+
// const sourceBones = sourceMesh.skeleton.bones;
|
|
593
|
+
|
|
594
|
+
// clonedMesh.skeleton = sourceMesh.skeleton.clone();
|
|
595
|
+
// clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);
|
|
596
|
+
|
|
597
|
+
// clonedMesh.skeleton.bones = sourceBones.map(function (bone) {
|
|
598
|
+
// return cloneLookup.get(bone);
|
|
599
|
+
// });
|
|
600
|
+
// clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);
|
|
601
|
+
// });
|
|
602
|
+
// return clone;
|
|
603
|
+
|
|
604
|
+
// }
|
|
605
|
+
|
|
606
|
+
function resolveReferences(newObjectsMap: InstantiateReferenceMap) {
|
|
607
|
+
// for every object that is newly created we want to update references to their newly created counterparts
|
|
608
|
+
// e.g. a collider instance referencing a rigidbody instance should be updated so that
|
|
609
|
+
// the cloned collider does not reference the cloned rigidbody (instead of the original rigidbody)
|
|
610
|
+
for (const key in newObjectsMap) {
|
|
611
|
+
const val = newObjectsMap[key];
|
|
612
|
+
const clone = val.clone as Object3D;
|
|
613
|
+
// resolve references
|
|
614
|
+
if (clone?.isObject3D && clone?.userData?.components) {
|
|
615
|
+
for (let i = 0; i < clone.userData.components.length; i++) {
|
|
616
|
+
const copy = clone.userData.components[i];
|
|
617
|
+
// find referenced within a cloned gameobject
|
|
618
|
+
const entries = Object.entries(copy);
|
|
619
|
+
// console.log(copy, entries);
|
|
620
|
+
for (const [key, value] of entries) {
|
|
621
|
+
if (Array.isArray(value)) {
|
|
622
|
+
const clonedArray: Array<any> = [];
|
|
623
|
+
copy[key] = clonedArray;
|
|
624
|
+
// console.log(copy, key, value, copy[key]);
|
|
625
|
+
for (let i = 0; i < value.length; i++) {
|
|
626
|
+
const entry = value[i];
|
|
627
|
+
// push value types into new array
|
|
628
|
+
if (typeof entry !== "object") {
|
|
629
|
+
clonedArray.push(entry);
|
|
630
|
+
continue;
|
|
631
|
+
}
|
|
632
|
+
const res: any = postProcessNewInstance(copy, key, entry, newObjectsMap);
|
|
633
|
+
if (res !== undefined) {
|
|
634
|
+
if (debugInstantiate) console.log("Found new instance for", key, entry, "->", res);
|
|
635
|
+
clonedArray.push(res);
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
if (debugInstantiate) console.warn("Could not find new instance for", key, entry);
|
|
639
|
+
clonedArray.push(entry);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
// console.log(copy[key])
|
|
643
|
+
}
|
|
644
|
+
else if (typeof value === "object") {
|
|
645
|
+
const res = postProcessNewInstance(copy, key, value as IComponent | Object3D, newObjectsMap);
|
|
646
|
+
if (res !== undefined) {
|
|
647
|
+
copy[key] = res;
|
|
648
|
+
}
|
|
649
|
+
else {
|
|
650
|
+
if (debugInstantiate) console.warn("Could not find new instance for", key, value);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
function postProcessNewInstance(copy: Object3D, key: string, value: IComponent | Object3D | any, newObjectsMap: InstantiateReferenceMap) {
|
|
661
|
+
if (value === null || value === undefined) return;
|
|
662
|
+
if ((value as IComponent).isComponent === true) {
|
|
663
|
+
const originalGameObjectReference = value["gameObject"];
|
|
664
|
+
// console.log(key, value, originalGameObjectReference);
|
|
665
|
+
if (originalGameObjectReference) {
|
|
666
|
+
const id = originalGameObjectReference.uuid;
|
|
667
|
+
const newGameObject = newObjectsMap[id]?.clone;
|
|
668
|
+
if (!newGameObject) {
|
|
669
|
+
// reference has not changed!
|
|
670
|
+
if (debugInstantiate)
|
|
671
|
+
console.log("reference did not change", key, copy, value);
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
const index = originalGameObjectReference.userData.components.indexOf(value);
|
|
675
|
+
if (index >= 0 && (newGameObject as Object3D).isObject3D) {
|
|
676
|
+
if (debugInstantiate)
|
|
677
|
+
console.log(key, id);
|
|
678
|
+
const found = (newGameObject as Object3D).userData.components[index];
|
|
679
|
+
return found;
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
682
|
+
console.warn("could not find component", key, value);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
} else if ((value as Object3D).isObject3D === true) {
|
|
686
|
+
// console.log(value);
|
|
687
|
+
if (key === "gameObject") return;
|
|
688
|
+
const originalGameObjectReference = value as Object3D;
|
|
689
|
+
if (originalGameObjectReference) {
|
|
690
|
+
const id = originalGameObjectReference.uuid;
|
|
691
|
+
const newGameObject = newObjectsMap[id]?.clone;
|
|
692
|
+
if (newGameObject) {
|
|
693
|
+
if (debugInstantiate)
|
|
694
|
+
console.log(key, "old", value, "new", newGameObject);
|
|
695
|
+
return newGameObject;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
else {
|
|
700
|
+
// create new instances for some types that we know should usually not be shared and can safely be cloned
|
|
701
|
+
if (value.isVector4 || value.isVector3 || value.isVector2 || value.isQuaternion || value.isEuler) {
|
|
702
|
+
return value.clone();
|
|
703
|
+
}
|
|
704
|
+
else if (value.isColor === true) {
|
|
705
|
+
return value.clone();
|
|
706
|
+
}
|
|
707
|
+
else if ((value as IEventList).isEventList === true) {
|
|
708
|
+
// create a new instance of the object
|
|
709
|
+
const copy = (value as IEventList).__internalOnInstantiate(newObjectsMap);
|
|
710
|
+
return copy;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
713
|
}
|