@needle-tools/engine 4.7.0-alpha → 4.7.0-next.da47826
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3768 -3768
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +25 -0
- package/dist/{gltf-progressive-Bm9eEfgu.min.js → gltf-progressive-Bl4okF1b.min.js} +1 -1
- package/dist/{gltf-progressive-GjIqwSG3.js → gltf-progressive-DSpdn0QT.js} +2 -2
- package/dist/{gltf-progressive-Dn6o99rH.umd.cjs → gltf-progressive-P8b8a0qY.umd.cjs} +1 -1
- package/dist/{needle-engine.bundle-CK8cQ3FX.umd.cjs → needle-engine.bundle-Bu88IoKB.umd.cjs} +57 -57
- package/dist/{needle-engine.bundle-CXtflnL6.js → needle-engine.bundle-CO1Ub9sm.js} +638 -638
- package/dist/{needle-engine.bundle-BEUFTdl6.min.js → needle-engine.bundle-D95XN5pP.min.js} +62 -62
- package/dist/needle-engine.d.ts +130 -129
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-8AQTeZsr.umd.cjs → postprocessing-CjW23fio.umd.cjs} +2 -2
- package/dist/{postprocessing-BkxN_08g.js → postprocessing-DYLNOL3W.js} +3 -3
- package/dist/{postprocessing-BDScN9yu.min.js → postprocessing-xYQWCHFu.min.js} +2 -2
- package/dist/{three-DMrv-4ar.umd.cjs → three-B_hneGZr.umd.cjs} +4 -4
- package/dist/{three-Bz6X1mrw.js → three-DrqIzZTH.js} +4198 -4198
- package/dist/{three-Boa-jOq-.min.js → three-DuDKwKB8.min.js} +33 -33
- package/dist/{three-examples-GggCDHv0.js → three-examples-B50TT3Iu.js} +5 -5
- package/dist/{three-examples-DuVhxqft.min.js → three-examples-DaDLBuy6.min.js} +14 -14
- package/dist/{three-examples-C7ryg8vN.umd.cjs → three-examples-X3OadjXB.umd.cjs} +3 -3
- package/dist/{three-mesh-ui-CY6Izc7C.min.js → three-mesh-ui-B3p3gyUz.min.js} +1 -1
- package/dist/{three-mesh-ui-CwlN0FUC.umd.cjs → three-mesh-ui-CQiIQIlA.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-CLNOfsWn.js → three-mesh-ui-CxuWt7m-.js} +1 -1
- package/dist/{vendor-zxXa3Dmr.min.js → vendor-BlSxe9JJ.min.js} +3 -3
- package/dist/{vendor-BSD1RQIh.js → vendor-BmYIgaS1.js} +3 -3
- package/dist/{vendor-DHr4aqIZ.umd.cjs → vendor-Cavtu3CP.umd.cjs} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +166 -166
- package/lib/engine/engine_addressables.js +608 -608
- package/lib/engine/engine_animation.d.ts +43 -43
- package/lib/engine/engine_animation.js +133 -133
- package/lib/engine/engine_application.d.ts +45 -45
- package/lib/engine/engine_application.js +104 -104
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +346 -346
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +13 -13
- package/lib/engine/engine_camera.js +30 -30
- package/lib/engine/engine_components.d.ts +110 -110
- package/lib/engine/engine_components.js +374 -374
- package/lib/engine/engine_components_internal.d.ts +9 -9
- package/lib/engine/engine_components_internal.js +36 -36
- package/lib/engine/engine_constants.d.ts +10 -10
- package/lib/engine/engine_constants.js +41 -41
- package/lib/engine/engine_context.d.ts +475 -475
- package/lib/engine/engine_context.js +1672 -1672
- package/lib/engine/engine_context_registry.d.ts +71 -71
- package/lib/engine/engine_context_registry.js +117 -117
- package/lib/engine/engine_coroutine.d.ts +35 -35
- package/lib/engine/engine_coroutine.js +52 -52
- package/lib/engine/engine_create_objects.d.ts +119 -119
- package/lib/engine/engine_create_objects.js +320 -320
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_default_parameters.js +3 -3
- package/lib/engine/engine_editor-sync.d.ts +21 -21
- package/lib/engine/engine_editor-sync.js +4 -4
- package/lib/engine/engine_fileloader.d.ts +2 -2
- package/lib/engine/engine_fileloader.js +8 -8
- package/lib/engine/engine_gameobject.d.ts +68 -68
- package/lib/engine/engine_gameobject.js +619 -619
- package/lib/engine/engine_generic_utils.d.ts +1 -1
- package/lib/engine/engine_generic_utils.js +13 -13
- package/lib/engine/engine_gizmos.d.ts +149 -149
- package/lib/engine/engine_gizmos.js +530 -530
- package/lib/engine/engine_gltf.d.ts +12 -12
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +11 -11
- package/lib/engine/engine_gltf_builtin_components.js +341 -341
- package/lib/engine/engine_hot_reload.d.ts +8 -8
- package/lib/engine/engine_hot_reload.js +197 -197
- package/lib/engine/engine_input.d.ts +362 -362
- package/lib/engine/engine_input.js +1294 -1294
- package/lib/engine/engine_input_utils.d.ts +2 -2
- package/lib/engine/engine_input_utils.js +22 -22
- package/lib/engine/engine_instancing.d.ts +19 -19
- package/lib/engine/engine_instancing.js +39 -39
- package/lib/engine/engine_license.d.ts +11 -11
- package/lib/engine/engine_license.js +369 -369
- package/lib/engine/engine_lifecycle_api.d.ts +83 -83
- package/lib/engine/engine_lifecycle_api.js +106 -106
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +32 -32
- package/lib/engine/engine_lifecycle_functions_internal.js +146 -146
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +91 -91
- package/lib/engine/engine_loaders.callbacks.d.ts +97 -97
- package/lib/engine/engine_loaders.callbacks.js +86 -86
- package/lib/engine/engine_loaders.d.ts +48 -48
- package/lib/engine/engine_loaders.gltf.d.ts +13 -13
- package/lib/engine/engine_loaders.gltf.js +62 -62
- package/lib/engine/engine_loaders.js +337 -337
- package/lib/engine/engine_lods.d.ts +31 -31
- package/lib/engine/engine_lods.js +146 -146
- package/lib/engine/engine_mainloop_utils.d.ts +32 -32
- package/lib/engine/engine_mainloop_utils.js +466 -466
- package/lib/engine/engine_math.d.ts +114 -114
- package/lib/engine/engine_math.js +247 -247
- package/lib/engine/engine_modules.d.ts +36 -36
- package/lib/engine/engine_modules.js +85 -85
- package/lib/engine/engine_networking.d.ts +260 -260
- package/lib/engine/engine_networking.js +764 -764
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +310 -310
- package/lib/engine/engine_networking_blob.d.ts +48 -48
- package/lib/engine/engine_networking_blob.js +228 -228
- package/lib/engine/engine_networking_files.d.ts +35 -35
- package/lib/engine/engine_networking_files.js +172 -172
- package/lib/engine/engine_networking_files_default_components.d.ts +6 -6
- package/lib/engine/engine_networking_files_default_components.js +42 -42
- package/lib/engine/engine_networking_instantiate.d.ts +100 -100
- package/lib/engine/engine_networking_instantiate.js +345 -345
- package/lib/engine/engine_networking_peer.d.ts +15 -15
- package/lib/engine/engine_networking_peer.js +132 -132
- package/lib/engine/engine_networking_streams.d.ts +123 -123
- package/lib/engine/engine_networking_streams.js +645 -645
- package/lib/engine/engine_networking_types.d.ts +22 -22
- package/lib/engine/engine_networking_types.js +7 -7
- package/lib/engine/engine_networking_utils.d.ts +2 -2
- package/lib/engine/engine_networking_utils.js +20 -20
- package/lib/engine/engine_networking_websocket.d.ts +1 -1
- package/lib/engine/engine_networking_websocket.js +2 -2
- package/lib/engine/engine_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +152 -152
- package/lib/engine/engine_physics.js +645 -645
- package/lib/engine/engine_physics.types.d.ts +40 -40
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +147 -147
- package/lib/engine/engine_physics_rapier.js +1433 -1433
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +71 -71
- package/lib/engine/engine_scenelighting.js +226 -226
- package/lib/engine/engine_serialization.d.ts +3 -3
- package/lib/engine/engine_serialization.js +3 -3
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +72 -72
- package/lib/engine/engine_serialization_builtin_serializer.js +403 -403
- package/lib/engine/engine_serialization_core.d.ts +94 -94
- package/lib/engine/engine_serialization_core.js +607 -607
- package/lib/engine/engine_serialization_decorator.d.ts +23 -23
- package/lib/engine/engine_serialization_decorator.js +66 -66
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +53 -53
- package/lib/engine/engine_shaders.js +252 -252
- package/lib/engine/engine_shims.d.ts +4 -4
- package/lib/engine/engine_shims.js +24 -24
- package/lib/engine/engine_test_utils.d.ts +39 -39
- package/lib/engine/engine_test_utils.js +83 -83
- package/lib/engine/engine_texture.d.ts +28 -28
- package/lib/engine/engine_texture.js +64 -64
- package/lib/engine/engine_three_utils.d.ts +204 -204
- package/lib/engine/engine_three_utils.js +784 -784
- package/lib/engine/engine_time.d.ts +51 -51
- package/lib/engine/engine_time.js +82 -82
- package/lib/engine/engine_time_utils.d.ts +88 -88
- package/lib/engine/engine_time_utils.js +215 -215
- package/lib/engine/engine_tonemapping.d.ts +6 -6
- package/lib/engine/engine_tonemapping.js +197 -197
- package/lib/engine/engine_types.d.ts +578 -578
- package/lib/engine/engine_types.js +95 -95
- package/lib/engine/engine_typestore.d.ts +28 -28
- package/lib/engine/engine_typestore.js +55 -55
- package/lib/engine/engine_util_decorator.d.ts +13 -13
- package/lib/engine/engine_util_decorator.js +116 -116
- package/lib/engine/engine_utils.d.ts +248 -248
- package/lib/engine/engine_utils.js +1012 -1012
- package/lib/engine/engine_utils_format.d.ts +24 -24
- package/lib/engine/engine_utils_format.js +239 -239
- package/lib/engine/engine_utils_screenshot.d.ts +159 -159
- package/lib/engine/engine_utils_screenshot.js +522 -522
- package/lib/engine/engine_utils_screenshot.xr.d.ts +5 -5
- package/lib/engine/engine_utils_screenshot.xr.js +90 -90
- package/lib/engine/engine_xr.d.ts +1 -1
- package/lib/engine/engine_xr.js +1 -1
- package/lib/engine/export/gltf/Writers.d.ts +19 -19
- package/lib/engine/export/gltf/Writers.js +24 -24
- package/lib/engine/export/gltf/index.d.ts +11 -11
- package/lib/engine/export/gltf/index.js +123 -123
- package/lib/engine/export/index.d.ts +2 -2
- package/lib/engine/export/index.js +2 -2
- package/lib/engine/export/state.d.ts +7 -7
- package/lib/engine/export/state.js +17 -17
- package/lib/engine/export/utils.d.ts +2 -2
- package/lib/engine/export/utils.js +7 -7
- package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
- package/lib/engine/extensions/EXT_texture_exr.js +32 -32
- package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +122 -122
- package/lib/engine/extensions/NEEDLE_animator_controller_model.js +95 -95
- package/lib/engine/extensions/NEEDLE_components.d.ts +35 -35
- package/lib/engine/extensions/NEEDLE_components.js +220 -220
- package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
- package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +37 -37
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +157 -157
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
- package/lib/engine/extensions/NEEDLE_lightmaps.js +99 -99
- package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
- package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
- package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
- package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +38 -38
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +564 -564
- package/lib/engine/extensions/extension_resolver.d.ts +4 -4
- package/lib/engine/extensions/extension_resolver.js +1 -1
- package/lib/engine/extensions/extension_utils.d.ts +12 -12
- package/lib/engine/extensions/extension_utils.js +152 -152
- package/lib/engine/extensions/extensions.d.ts +32 -32
- package/lib/engine/extensions/extensions.js +107 -107
- package/lib/engine/extensions/index.d.ts +6 -6
- package/lib/engine/extensions/index.js +6 -6
- package/lib/engine/extensions/usage_tracker.d.ts +13 -13
- package/lib/engine/extensions/usage_tracker.js +65 -65
- package/lib/engine/js-extensions/Camera.d.ts +1 -1
- package/lib/engine/js-extensions/Camera.js +39 -39
- package/lib/engine/js-extensions/ExtensionUtils.d.ts +9 -9
- package/lib/engine/js-extensions/ExtensionUtils.js +67 -67
- package/lib/engine/js-extensions/Layers.d.ts +6 -6
- package/lib/engine/js-extensions/Layers.js +22 -22
- package/lib/engine/js-extensions/Object3D.d.ts +120 -120
- package/lib/engine/js-extensions/Object3D.js +136 -136
- package/lib/engine/js-extensions/RGBAColor.d.ts +23 -23
- package/lib/engine/js-extensions/RGBAColor.js +111 -111
- package/lib/engine/js-extensions/Vector.d.ts +3 -3
- package/lib/engine/js-extensions/Vector.js +13 -13
- package/lib/engine/js-extensions/index.d.ts +5 -5
- package/lib/engine/js-extensions/index.js +5 -5
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.d.ts +4 -4
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +79 -79
- package/lib/engine/shaders/shaderData.d.ts +55 -55
- package/lib/engine/shaders/shaderData.js +58 -58
- package/lib/engine/tests/test_utils.d.ts +2 -2
- package/lib/engine/tests/test_utils.js +53 -53
- package/lib/engine/webcomponents/WebXRButtons.d.ts +56 -56
- package/lib/engine/webcomponents/WebXRButtons.js +230 -230
- package/lib/engine/webcomponents/api.d.ts +5 -5
- package/lib/engine/webcomponents/api.js +4 -4
- package/lib/engine/webcomponents/buttons.d.ts +51 -51
- package/lib/engine/webcomponents/buttons.js +264 -264
- package/lib/engine/webcomponents/fonts.d.ts +9 -9
- package/lib/engine/webcomponents/fonts.js +32 -32
- package/lib/engine/webcomponents/icons.d.ts +9 -9
- package/lib/engine/webcomponents/icons.js +52 -52
- package/lib/engine/webcomponents/index.d.ts +1 -1
- package/lib/engine/webcomponents/index.js +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +10 -10
- package/lib/engine/webcomponents/logo-element.js +67 -67
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.d.ts +37 -37
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +513 -513
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +155 -155
- package/lib/engine/webcomponents/needle menu/needle-menu.js +1029 -1029
- package/lib/engine/webcomponents/needle-button.d.ts +34 -34
- package/lib/engine/webcomponents/needle-button.js +161 -161
- package/lib/engine/webcomponents/needle-engine.ar-overlay.d.ts +21 -21
- package/lib/engine/webcomponents/needle-engine.ar-overlay.js +166 -166
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -69
- package/lib/engine/webcomponents/needle-engine.attributes.js +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +116 -116
- package/lib/engine/webcomponents/needle-engine.extras.d.ts +6 -6
- package/lib/engine/webcomponents/needle-engine.extras.js +13 -13
- package/lib/engine/webcomponents/needle-engine.js +821 -821
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +341 -341
- package/lib/engine/xr/NeedleXRController.d.ts +313 -313
- package/lib/engine/xr/NeedleXRController.js +1007 -1007
- package/lib/engine/xr/NeedleXRSession.d.ts +340 -340
- package/lib/engine/xr/NeedleXRSession.js +1463 -1463
- package/lib/engine/xr/NeedleXRSync.d.ts +22 -22
- package/lib/engine/xr/NeedleXRSync.js +188 -188
- package/lib/engine/xr/SceneTransition.d.ts +18 -18
- package/lib/engine/xr/SceneTransition.js +69 -69
- package/lib/engine/xr/TempXRContext.d.ts +34 -34
- package/lib/engine/xr/TempXRContext.js +187 -187
- package/lib/engine/xr/XRRig.d.ts +7 -7
- package/lib/engine/xr/XRRig.js +1 -1
- package/lib/engine/xr/api.d.ts +6 -6
- package/lib/engine/xr/api.js +6 -6
- package/lib/engine/xr/events.d.ts +66 -66
- package/lib/engine/xr/events.js +93 -93
- package/lib/engine/xr/internal.d.ts +12 -12
- package/lib/engine/xr/internal.js +25 -25
- package/lib/engine/xr/usdz.d.ts +12 -12
- package/lib/engine/xr/usdz.js +29 -29
- package/lib/engine/xr/utils.d.ts +11 -11
- package/lib/engine/xr/utils.js +34 -34
- package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +156 -156
- package/lib/engine-components/Animation.js +508 -508
- package/lib/engine-components/AnimationCurve.d.ts +40 -40
- package/lib/engine-components/AnimationCurve.js +159 -159
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +27 -27
- package/lib/engine-components/AnimationUtilsAutoplay.d.ts +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +39 -39
- package/lib/engine-components/Animator.d.ts +217 -217
- package/lib/engine-components/Animator.js +354 -354
- package/lib/engine-components/AnimatorController.d.ts +227 -227
- package/lib/engine-components/AnimatorController.js +1152 -1152
- package/lib/engine-components/AudioListener.d.ts +33 -33
- package/lib/engine-components/AudioListener.js +86 -86
- package/lib/engine-components/AudioSource.d.ts +217 -217
- package/lib/engine-components/AudioSource.js +635 -635
- package/lib/engine-components/AvatarLoader.d.ts +80 -80
- package/lib/engine-components/AvatarLoader.js +231 -231
- package/lib/engine-components/AxesHelper.d.ts +32 -32
- package/lib/engine-components/AxesHelper.js +67 -67
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxCollider.d.ts +2 -2
- package/lib/engine-components/BoxCollider.js +2 -2
- package/lib/engine-components/BoxHelperComponent.d.ts +47 -47
- package/lib/engine-components/BoxHelperComponent.js +102 -102
- package/lib/engine-components/Camera.d.ts +231 -231
- package/lib/engine-components/Camera.js +700 -700
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +121 -121
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +52 -52
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +46 -46
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +113 -113
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -39
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +23 -23
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +111 -111
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +25 -25
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +104 -104
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +18 -18
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +32 -32
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +91 -91
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +70 -70
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +176 -176
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +127 -127
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +70 -70
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +19 -19
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +94 -94
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +15 -15
- package/lib/engine-components/postprocessing/Effects/Vignette.js +60 -60
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +90 -90
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +168 -168
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +42 -42
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +480 -480
- package/lib/engine-components/postprocessing/Volume.d.ts +90 -90
- package/lib/engine-components/postprocessing/Volume.js +385 -385
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +26 -26
- package/lib/engine-components/postprocessing/VolumeParameter.js +136 -136
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +15 -15
- package/lib/engine-components/postprocessing/VolumeProfile.js +60 -60
- package/lib/engine-components/postprocessing/index.d.ts +6 -6
- package/lib/engine-components/postprocessing/index.js +6 -6
- package/lib/engine-components/postprocessing/utils.d.ts +55 -55
- package/lib/engine-components/postprocessing/utils.js +119 -119
- package/lib/engine-components/timeline/PlayableDirector.d.ts +163 -163
- package/lib/engine-components/timeline/PlayableDirector.js +686 -686
- package/lib/engine-components/timeline/SignalAsset.d.ts +24 -24
- package/lib/engine-components/timeline/SignalAsset.js +130 -130
- package/lib/engine-components/timeline/TimelineModels.d.ts +89 -89
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +110 -110
- package/lib/engine-components/timeline/TimelineTracks.js +879 -879
- package/lib/engine-components/timeline/index.d.ts +4 -4
- package/lib/engine-components/timeline/index.js +3 -3
- package/lib/engine-components/ui/BaseUIComponent.d.ts +48 -48
- package/lib/engine-components/ui/BaseUIComponent.js +170 -170
- package/lib/engine-components/ui/Button.d.ts +64 -64
- package/lib/engine-components/ui/Button.js +315 -315
- package/lib/engine-components/ui/Canvas.d.ts +74 -74
- package/lib/engine-components/ui/Canvas.js +407 -407
- package/lib/engine-components/ui/CanvasGroup.d.ts +19 -19
- package/lib/engine-components/ui/CanvasGroup.js +58 -58
- package/lib/engine-components/ui/EventSystem.d.ts +125 -125
- package/lib/engine-components/ui/EventSystem.js +765 -765
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +255 -255
- package/lib/engine-components/ui/Image.d.ts +35 -35
- package/lib/engine-components/ui/Image.js +116 -116
- package/lib/engine-components/ui/InputField.d.ts +42 -42
- package/lib/engine-components/ui/InputField.js +268 -268
- package/lib/engine-components/ui/Interfaces.d.ts +38 -38
- package/lib/engine-components/ui/Interfaces.js +12 -12
- package/lib/engine-components/ui/Layout.d.ts +84 -84
- package/lib/engine-components/ui/Layout.js +330 -330
- package/lib/engine-components/ui/Outline.d.ts +7 -7
- package/lib/engine-components/ui/Outline.js +20 -20
- package/lib/engine-components/ui/PointerEvents.d.ts +115 -115
- package/lib/engine-components/ui/PointerEvents.js +145 -145
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
- package/lib/engine-components/ui/RaycastUtils.js +67 -67
- package/lib/engine-components/ui/Raycaster.d.ts +30 -30
- package/lib/engine-components/ui/Raycaster.js +95 -95
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +356 -356
- package/lib/engine-components/ui/SpatialHtml.d.ts +8 -8
- package/lib/engine-components/ui/SpatialHtml.js +79 -79
- package/lib/engine-components/ui/Symbols.d.ts +1 -1
- package/lib/engine-components/ui/Symbols.js +1 -1
- package/lib/engine-components/ui/Text.d.ts +78 -78
- package/lib/engine-components/ui/Text.js +539 -539
- package/lib/engine-components/ui/Utils.d.ts +24 -24
- package/lib/engine-components/ui/Utils.js +90 -90
- package/lib/engine-components/ui/index.d.ts +1 -1
- package/lib/engine-components/ui/index.js +1 -1
- package/lib/engine-components/utils/EnvironmentScene.d.ts +5 -5
- package/lib/engine-components/utils/EnvironmentScene.js +205 -205
- package/lib/engine-components/utils/LookAt.d.ts +31 -31
- package/lib/engine-components/utils/LookAt.js +82 -82
- package/lib/engine-components/utils/OpenURL.d.ts +42 -42
- package/lib/engine-components/utils/OpenURL.js +119 -119
- package/lib/engine-components/webxr/Avatar.d.ts +25 -25
- package/lib/engine-components/webxr/Avatar.js +255 -255
- package/lib/engine-components/webxr/TeleportTarget.d.ts +7 -7
- package/lib/engine-components/webxr/TeleportTarget.js +7 -7
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +30 -30
- package/lib/engine-components/webxr/WebARCameraBackground.js +155 -155
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +98 -98
- package/lib/engine-components/webxr/WebARSessionRoot.js +770 -770
- package/lib/engine-components/webxr/WebXR.d.ts +232 -232
- package/lib/engine-components/webxr/WebXR.js +561 -561
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +27 -27
- package/lib/engine-components/webxr/WebXRAvatar.js +44 -44
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +86 -86
- package/lib/engine-components/webxr/WebXRImageTracking.js +471 -471
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +92 -92
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +500 -500
- package/lib/engine-components/webxr/WebXRRig.d.ts +32 -32
- package/lib/engine-components/webxr/WebXRRig.js +72 -72
- package/lib/engine-components/webxr/XRFlag.d.ts +38 -38
- package/lib/engine-components/webxr/XRFlag.js +139 -139
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +47 -47
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +120 -120
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +43 -43
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +352 -352
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +78 -78
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +506 -506
- package/lib/engine-components/webxr/index.d.ts +3 -3
- package/lib/engine-components/webxr/index.js +3 -3
- package/lib/engine-components/webxr/types.d.ts +3 -3
- package/lib/engine-components/webxr/types.js +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -6
- package/lib/engine-components-experimental/Presentation.js +9 -9
- package/lib/engine-components-experimental/api.d.ts +4 -4
- package/lib/engine-components-experimental/api.js +4 -4
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +156 -156
- package/lib/engine-components-experimental/networking/PlayerSync.js +377 -377
- package/lib/engine-schemes/api.d.ts +12 -12
- package/lib/engine-schemes/api.js +12 -12
- package/lib/engine-schemes/schemes.d.ts +7 -7
- package/lib/engine-schemes/schemes.js +19 -19
- package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
- package/lib/engine-schemes/synced-camera-model.js +67 -67
- package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
- package/lib/engine-schemes/synced-transform-model.js +66 -66
- package/lib/engine-schemes/transform.d.ts +12 -12
- package/lib/engine-schemes/transform.js +39 -39
- package/lib/engine-schemes/vec2.d.ts +10 -10
- package/lib/engine-schemes/vec2.js +25 -25
- package/lib/engine-schemes/vec3.d.ts +11 -11
- package/lib/engine-schemes/vec3.js +29 -29
- package/lib/engine-schemes/vec4.d.ts +12 -12
- package/lib/engine-schemes/vec4.js +33 -33
- package/lib/engine-schemes/vr-user-state-buffer.d.ts +37 -37
- package/lib/engine-schemes/vr-user-state-buffer.js +110 -110
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
- package/lib/needle-engine.d.ts +7 -7
- package/lib/needle-engine.js +64 -64
- package/package.json +2 -2
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +31 -31
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/gltf-packer.mjs +1 -1
- package/plugins/next/alias.cjs +39 -39
- package/plugins/next/license.cjs +24 -24
- package/plugins/next/meshbvhworker.cjs +18 -18
- package/plugins/next/next.js +141 -141
- package/plugins/types/index.d.ts +2 -2
- package/plugins/types/license.d.ts +24 -24
- package/plugins/types/needleConfig.d.ts +27 -27
- package/plugins/types/next.d.ts +2 -2
- package/plugins/types/userconfig.d.ts +120 -120
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +174 -174
- package/plugins/vite/asap.js +251 -251
- package/plugins/vite/build-pipeline.js +371 -371
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/buildinfo.js +41 -41
- package/plugins/vite/config.js +106 -106
- package/plugins/vite/copyfiles.js +138 -138
- package/plugins/vite/defines.js +70 -70
- package/plugins/vite/dependencies.js +232 -232
- package/plugins/vite/dependency-watcher.js +237 -237
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +87 -87
- package/plugins/vite/editor-connection.js +124 -124
- package/plugins/vite/facebook-instant-games.js +102 -102
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +143 -143
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +29 -29
- package/plugins/vite/poster-client.js +73 -73
- package/plugins/vite/poster.js +79 -79
- package/plugins/vite/pwa.js +604 -604
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +351 -351
- package/plugins/vite/server.js +66 -66
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/transform.js +31 -31
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/asap/needle-asap.ts +111 -111
- package/src/asap/sessiongranted.ts +75 -75
- package/src/asap/utils.ts +4 -4
- package/src/engine/analytics/index.ts +10 -10
- package/src/engine/analytics/lcp.ts +35 -35
- package/src/engine/api.ts +82 -82
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +300 -300
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +333 -333
- package/src/engine/debug/debug_overlay.ts +332 -332
- package/src/engine/debug/debug_spatial_console.ts +429 -429
- package/src/engine/debug/index.ts +1 -1
- package/src/engine/engine_addressables.ts +680 -680
- package/src/engine/engine_animation.ts +145 -145
- package/src/engine/engine_application.ts +113 -113
- package/src/engine/engine_assetdatabase.ts +389 -389
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.ts +39 -39
- package/src/engine/engine_components.ts +366 -366
- package/src/engine/engine_components_internal.ts +40 -40
- package/src/engine/engine_constants.ts +52 -52
- package/src/engine/engine_context.ts +1823 -1823
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +411 -411
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +28 -28
- package/src/engine/engine_fileloader.js +9 -9
- package/src/engine/engine_gameobject.ts +712 -712
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +577 -577
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +403 -403
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1500 -1500
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +45 -45
- package/src/engine/engine_license.ts +386 -386
- package/src/engine/engine_lifecycle_api.ts +113 -113
- package/src/engine/engine_lifecycle_functions_internal.ts +193 -193
- package/src/engine/engine_lightdata.ts +117 -117
- package/src/engine/engine_loaders.callbacks.ts +136 -136
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +378 -378
- package/src/engine/engine_lods.ts +168 -168
- package/src/engine/engine_mainloop_utils.ts +472 -472
- package/src/engine/engine_math.ts +282 -282
- package/src/engine/engine_modules.ts +83 -83
- package/src/engine/engine_networking.ts +862 -862
- package/src/engine/engine_networking_auto.ts +352 -352
- package/src/engine/engine_networking_blob.ts +275 -275
- package/src/engine/engine_networking_files.ts +217 -217
- package/src/engine/engine_networking_files_default_components.ts +58 -58
- package/src/engine/engine_networking_instantiate.ts +419 -419
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +713 -713
- package/src/engine/engine_networking_types.ts +24 -24
- package/src/engine/engine_networking_utils.ts +23 -23
- package/src/engine/engine_networking_websocket.ts +2 -2
- package/src/engine/engine_patcher.ts +199 -199
- package/src/engine/engine_physics.ts +783 -783
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1577 -1577
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_scenelighting.ts +294 -294
- package/src/engine/engine_serialization.ts +2 -2
- package/src/engine/engine_serialization_builtin_serializer.ts +473 -473
- package/src/engine/engine_serialization_core.ts +720 -720
- package/src/engine/engine_serialization_decorator.ts +80 -80
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +267 -267
- package/src/engine/engine_shims.ts +32 -32
- package/src/engine/engine_test_utils.ts +109 -109
- package/src/engine/engine_texture.ts +82 -82
- package/src/engine/engine_three_utils.ts +925 -925
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +208 -208
- package/src/engine/engine_types.ts +730 -730
- package/src/engine/engine_typestore.ts +63 -63
- package/src/engine/engine_util_decorator.ts +136 -136
- package/src/engine/engine_utils.ts +1115 -1115
- package/src/engine/engine_utils_format.ts +273 -273
- package/src/engine/engine_utils_screenshot.ts +708 -708
- package/src/engine/engine_utils_screenshot.xr.ts +103 -103
- package/src/engine/export/gltf/Writers.ts +34 -34
- package/src/engine/export/gltf/index.ts +158 -158
- package/src/engine/export/index.ts +2 -2
- package/src/engine/export/state.ts +19 -19
- package/src/engine/export/utils.ts +9 -9
- package/src/engine/extensions/EXT_texture_exr.ts +50 -50
- package/src/engine/extensions/NEEDLE_animator_controller_model.ts +195 -195
- package/src/engine/extensions/NEEDLE_components.ts +268 -268
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +81 -81
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +185 -185
- package/src/engine/extensions/NEEDLE_lightmaps.ts +119 -119
- package/src/engine/extensions/NEEDLE_persistent_assets.ts +76 -76
- package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +640 -640
- package/src/engine/extensions/extension_resolver.ts +4 -4
- package/src/engine/extensions/extension_utils.ts +166 -166
- package/src/engine/extensions/extensions.ts +140 -140
- package/src/engine/extensions/index.ts +5 -5
- package/src/engine/extensions/usage_tracker.ts +100 -100
- package/src/engine/js-extensions/Camera.ts +37 -37
- package/src/engine/js-extensions/ExtensionUtils.ts +85 -85
- package/src/engine/js-extensions/Layers.ts +23 -23
- package/src/engine/js-extensions/Object3D.ts +296 -296
- package/src/engine/js-extensions/RGBAColor.ts +126 -126
- package/src/engine/js-extensions/Vector.ts +18 -18
- package/src/engine/js-extensions/index.ts +4 -4
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +125 -125
- package/src/engine/shaders/shaderData.ts +67 -67
- package/src/engine/tests/test_utils.ts +63 -63
- package/src/engine/webcomponents/WebXRButtons.ts +260 -260
- package/src/engine/webcomponents/api.ts +6 -6
- package/src/engine/webcomponents/buttons.ts +292 -292
- package/src/engine/webcomponents/fonts.ts +41 -41
- package/src/engine/webcomponents/icons.ts +57 -57
- package/src/engine/webcomponents/index.ts +1 -1
- package/src/engine/webcomponents/logo-element.ts +78 -78
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +573 -573
- package/src/engine/webcomponents/needle menu/needle-menu.ts +1118 -1118
- package/src/engine/webcomponents/needle-button.ts +181 -181
- package/src/engine/webcomponents/needle-engine.ar-overlay.ts +186 -186
- package/src/engine/webcomponents/needle-engine.attributes.ts +82 -82
- package/src/engine/webcomponents/needle-engine.extras.ts +16 -16
- package/src/engine/webcomponents/needle-engine.loading.ts +373 -373
- package/src/engine/webcomponents/needle-engine.ts +860 -860
- package/src/engine/xr/NeedleXRController.ts +1125 -1125
- package/src/engine/xr/NeedleXRSession.ts +1624 -1624
- package/src/engine/xr/NeedleXRSync.ts +220 -220
- package/src/engine/xr/SceneTransition.ts +78 -78
- package/src/engine/xr/TempXRContext.ts +216 -216
- package/src/engine/xr/XRRig.ts +9 -9
- package/src/engine/xr/api.ts +5 -5
- package/src/engine/xr/events.ts +102 -102
- package/src/engine/xr/internal.ts +34 -34
- package/src/engine/xr/usdz.ts +30 -30
- package/src/engine/xr/utils.ts +39 -39
- package/src/engine-components/AlignmentConstraint.ts +36 -36
- package/src/engine-components/Animation.ts +557 -557
- package/src/engine-components/AnimationCurve.ts +150 -150
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +43 -43
- package/src/engine-components/Animator.ts +397 -397
- package/src/engine-components/AnimatorController.ts +1293 -1293
- package/src/engine-components/AudioListener.ts +92 -92
- package/src/engine-components/AudioSource.ts +644 -644
- package/src/engine-components/AvatarLoader.ts +263 -263
- package/src/engine-components/AxesHelper.ts +59 -59
- package/src/engine-components/BasicIKConstraint.ts +54 -54
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +114 -114
- package/src/engine-components/Camera.ts +719 -719
- package/src/engine-components/CameraUtils.ts +136 -136
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +374 -374
- package/src/engine-components/Component.ts +1297 -1297
- package/src/engine-components/ContactShadows.ts +506 -506
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1623 -1623
- package/src/engine-components/DropListener.ts +713 -713
- package/src/engine-components/Duplicatable.ts +198 -198
- package/src/engine-components/EventList.ts +266 -266
- package/src/engine-components/EventTrigger.ts +74 -74
- package/src/engine-components/EventType.ts +22 -22
- package/src/engine-components/Fog.ts +60 -60
- package/src/engine-components/Gizmos.ts +56 -56
- package/src/engine-components/GridHelper.ts +48 -48
- package/src/engine-components/GroundProjection.ts +356 -356
- package/src/engine-components/Interactable.ts +14 -14
- package/src/engine-components/Joints.ts +52 -52
- package/src/engine-components/LODGroup.ts +153 -153
- package/src/engine-components/Light.ts +558 -558
- package/src/engine-components/LookAtConstraint.ts +25 -25
- package/src/engine-components/NeedleMenu.ts +84 -84
- package/src/engine-components/NestedGltf.ts +86 -86
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1074 -1074
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +220 -220
- package/src/engine-components/Renderer.ts +903 -903
- package/src/engine-components/RendererInstancing.ts +855 -855
- package/src/engine-components/RendererLightmap.ts +198 -198
- package/src/engine-components/RigidBody.ts +526 -526
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +475 -475
- package/src/engine-components/SmoothFollow.ts +76 -76
- package/src/engine-components/SpatialTrigger.ts +229 -229
- package/src/engine-components/SpectatorCamera.ts +787 -787
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +468 -468
- package/src/engine-components/SyncedCamera.ts +220 -220
- package/src/engine-components/SyncedRoom.ts +380 -380
- package/src/engine-components/SyncedTransform.ts +383 -383
- package/src/engine-components/TestRunner.ts +118 -118
- package/src/engine-components/TransformGizmo.ts +219 -219
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +60 -60
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +69 -69
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +63 -63
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +139 -139
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +83 -83
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +31 -31
- package/src/engine-components/codegen/components.ts +217 -217
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +265 -265
- package/src/engine-components/export/usdz/Extension.ts +24 -24
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2426 -2426
- package/src/engine-components/export/usdz/USDZExporter.ts +705 -705
- package/src/engine-components/export/usdz/extensions/Animation.ts +1204 -1204
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -532
- package/src/engine-components/export/usdz/extensions/USDZText.ts +240 -240
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +189 -189
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -99
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +102 -102
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +320 -320
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1225 -1225
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +646 -646
- package/src/engine-components/export/usdz/extensions/behavior/PhysicsExtension.ts +132 -132
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +191 -191
- package/src/engine-components/export/usdz/utils/quicklook.ts +50 -50
- package/src/engine-components/particlesystem/ParticleSystem.ts +1287 -1287
- package/src/engine-components/particlesystem/ParticleSystemModules.ts +1765 -1765
- package/src/engine-components/particlesystem/ParticleSystemSubEmitter.ts +111 -111
- package/src/engine-components/particlesystem/api.ts +1 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +57 -57
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +116 -116
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +37 -37
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +106 -106
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +103 -103
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +25 -25
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +32 -32
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +90 -90
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +192 -192
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +143 -143
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +61 -61
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +103 -103
- package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -60
- package/src/engine-components/postprocessing/Effects/Vignette.ts +59 -59
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +192 -192
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +560 -560
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +0 -25
- package/src/engine-schemes/dist/api.js +0 -17
- package/src/engine-schemes/dist/api.js.meta +0 -7
- package/src/engine-schemes/dist/schemes.js +0 -25
- package/src/engine-schemes/dist/schemes.js.meta +0 -7
- package/src/engine-schemes/dist/synced-camera-model.js +0 -74
- package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
- package/src/engine-schemes/dist/synced-transform-model.js +0 -73
- package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
- package/src/engine-schemes/dist/transform.js +0 -46
- package/src/engine-schemes/dist/transform.js.meta +0 -7
- package/src/engine-schemes/dist/vec2.js +0 -32
- package/src/engine-schemes/dist/vec2.js.meta +0 -7
- package/src/engine-schemes/dist/vec3.js +0 -36
- package/src/engine-schemes/dist/vec3.js.meta +0 -7
- package/src/engine-schemes/dist/vec4.js +0 -40
- package/src/engine-schemes/dist/vec4.js.meta +0 -7
- package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
|
@@ -1,402 +1,402 @@
|
|
|
1
|
-
import { Object3D } from "three";
|
|
2
|
-
|
|
3
|
-
import { AssetReference } from "../../engine/engine_addressables.js";
|
|
4
|
-
import { RoomEvents } from "../../engine/engine_networking.js";
|
|
5
|
-
import { syncField } from "../../engine/engine_networking_auto.js"
|
|
6
|
-
import { syncDestroy } from "../../engine/engine_networking_instantiate.js";
|
|
7
|
-
import { serializable } from "../../engine/engine_serialization_decorator.js";
|
|
8
|
-
import type { ComponentInit, IGameObject } from "../../engine/engine_types.js";
|
|
9
|
-
import { delay, getParam } from "../../engine/engine_utils.js";
|
|
10
|
-
import { Behaviour, Component, GameObject } from "../../engine-components/Component.js";
|
|
11
|
-
import { EventList } from "../../engine-components/EventList.js";
|
|
12
|
-
|
|
13
|
-
const debug = getParam("debugplayersync");
|
|
14
|
-
|
|
15
|
-
/** Type definition for a PlayerSync instance with a guaranteed asset property */
|
|
16
|
-
declare type PlayerSyncWithAsset = PlayerSync & Required<Pick<PlayerSync, "asset">>;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* This component instantiates an asset for each player that joins a networked room. The asset will be destroyed when the player leaves the room.
|
|
20
|
-
* The asset should have a PlayerState component, and can have other components like SyncedTransform, custom components, etc.
|
|
21
|
-
* @category Networking
|
|
22
|
-
*/
|
|
23
|
-
export class PlayerSync extends Behaviour {
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* This API is experimental and may change or be removed in the future.
|
|
27
|
-
* Creates a PlayerSync instance at runtime from a given URL and sets it up for networking
|
|
28
|
-
* @param url Path to the asset that should be instantiated for each player
|
|
29
|
-
* @param init Optional initialization parameters for the PlayerSync component
|
|
30
|
-
* @returns Promise resolving to a PlayerSync instance with a guaranteed asset property
|
|
31
|
-
* @example
|
|
32
|
-
* ```typescript
|
|
33
|
-
* const res = await PlayerSync.setupFrom("/assets/demo.glb");
|
|
34
|
-
* addComponent(res.asset?.asset, DragControls);
|
|
35
|
-
* addComponent(res.asset?.asset, SyncedTransform);
|
|
36
|
-
* scene.add(res.gameObject);
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
static async setupFrom(url: string, init?: Omit<ComponentInit<PlayerSync>, "asset">): Promise<PlayerSyncWithAsset> {
|
|
40
|
-
const assetReference = AssetReference.getOrCreateFromUrl(url);
|
|
41
|
-
if (!assetReference.asset) {
|
|
42
|
-
const i = await assetReference.loadAssetAsync();
|
|
43
|
-
if(i) GameObject.getOrAddComponent(i, PlayerState);
|
|
44
|
-
}
|
|
45
|
-
const ps = new PlayerSync();
|
|
46
|
-
ps._internalInit(init);
|
|
47
|
-
ps.asset = assetReference;
|
|
48
|
-
const obj = new Object3D();
|
|
49
|
-
obj["guid"] = url;
|
|
50
|
-
GameObject.addComponent(obj, ps);
|
|
51
|
-
return ps as PlayerSyncWithAsset;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* When enabled, PlayerSync will automatically load and instantiate the assigned asset when joining a networked room
|
|
56
|
-
*/
|
|
57
|
-
@serializable()
|
|
58
|
-
autoSync: boolean = true;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* The asset that will be loaded and instantiated when PlayerSync becomes active and joins a networked room
|
|
62
|
-
*/
|
|
63
|
-
@serializable(AssetReference)
|
|
64
|
-
asset?: AssetReference;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Event invoked when a player instance is spawned with the spawned {@link Object3D} as parameter
|
|
68
|
-
* @serializable
|
|
69
|
-
*/
|
|
70
|
-
@serializable(EventList)
|
|
71
|
-
onPlayerSpawned?: EventList<Object3D>;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
private _localInstance?: Promise<IGameObject>;
|
|
75
|
-
|
|
76
|
-
awake(): void {
|
|
77
|
-
this.watchTabVisible();
|
|
78
|
-
if (!this.onPlayerSpawned) this.onPlayerSpawned = new EventList();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
onEnable(): void {
|
|
82
|
-
this.context.connection.beginListen(RoomEvents.RoomStateSent, this.onJoinedRoom);
|
|
83
|
-
this.context.connection.beginListen(RoomEvents.JoinedRoom, this.onJoinedRoom);
|
|
84
|
-
this.context.connection.beginListen(RoomEvents.LeftRoom, this.destroyInstance);
|
|
85
|
-
if (this.context.connection.isInRoom) {
|
|
86
|
-
this.onJoinedRoom();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
onDisable(): void {
|
|
90
|
-
this.context.connection.stopListen(RoomEvents.RoomStateSent, this.onJoinedRoom);
|
|
91
|
-
this.context.connection.stopListen(RoomEvents.JoinedRoom, this.onJoinedRoom);
|
|
92
|
-
this.context.connection.stopListen(RoomEvents.LeftRoom, this.destroyInstance);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
private onJoinedRoom = () => {
|
|
96
|
-
if (debug) console.log("PlayerSync.joinedRoom. autoSync is set to " + this.autoSync);
|
|
97
|
-
if (this.autoSync) this.getInstance();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Gets or creates an instance of the assigned asset for the local player
|
|
102
|
-
* @returns Promise resolving to the instantiated player object or null if creation failed
|
|
103
|
-
*/
|
|
104
|
-
async getInstance() {
|
|
105
|
-
if (this._localInstance) return this._localInstance;
|
|
106
|
-
|
|
107
|
-
if (debug) console.log("PlayerSync.createInstance", this.asset?.url);
|
|
108
|
-
|
|
109
|
-
if (!this.asset?.asset && !this.asset?.url) {
|
|
110
|
-
console.error("PlayerSync: can not create an instance because \"asset\" is not set and or has no URL!");
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (!this.gameObject.guid) {
|
|
115
|
-
console.warn("PlayerSync: gameObject has no guid! This might cause issues with syncing the player state.");
|
|
116
|
-
}
|
|
117
|
-
this._localInstance = this.asset?.instantiateSynced({ parent: this.gameObject, deleteOnDisconnect: true }, true) as Promise<IGameObject>;
|
|
118
|
-
const instance = await this._localInstance;
|
|
119
|
-
if (instance) {
|
|
120
|
-
const pl = GameObject.getComponentsInChildren(instance, PlayerState);
|
|
121
|
-
if (debug) console.log(`PlayerSync.createInstance: found ${pl?.length} PlayerState components. Owner: ${this.context.connection.connectionId}`);
|
|
122
|
-
if (pl?.length) {
|
|
123
|
-
for (const state of pl)
|
|
124
|
-
state.owner = this.context.connection.connectionId!;
|
|
125
|
-
this.onPlayerSpawned?.invoke(instance);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
this._localInstance = undefined;
|
|
129
|
-
console.error("<strong>Failed finding PlayerState on " + this.asset?.url + "</strong>: please make sure the asset has a PlayerState component!");
|
|
130
|
-
GameObject.destroySynced(instance);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
this._localInstance = undefined;
|
|
135
|
-
console.warn("PlayerSync: failed instantiating asset!")
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return this._localInstance;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Destroys the current player instance and cleans up networking state
|
|
143
|
-
*/
|
|
144
|
-
destroyInstance = () => {
|
|
145
|
-
this._localInstance?.then(go => {
|
|
146
|
-
if (debug) console.log("PlayerSync.destroyInstance", go);
|
|
147
|
-
syncDestroy(go, this.context.connection, true, { saveInRoom: false });
|
|
148
|
-
});
|
|
149
|
-
this._localInstance = undefined;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Sets up visibility change listeners to handle player cleanup when browser tab visibility changes
|
|
154
|
-
*/
|
|
155
|
-
private watchTabVisible() {
|
|
156
|
-
window.addEventListener("visibilitychange", _ => {
|
|
157
|
-
if (document.visibilityState === "visible") {
|
|
158
|
-
for (let i = PlayerState.all.length - 1; i >= 0; i--) {
|
|
159
|
-
const pl = PlayerState.all[i];
|
|
160
|
-
if (!pl.owner || !this.context.connection.userIsInRoom(pl.owner)) {
|
|
161
|
-
pl.doDestroy();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Enum defining events that can be triggered by PlayerState
|
|
171
|
-
*/
|
|
172
|
-
export enum PlayerStateEvent {
|
|
173
|
-
/** Triggered when a PlayerState's owner property changes */
|
|
174
|
-
OwnerChanged = "ownerChanged",
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/** Arguments passed when a PlayerState's owner changes */
|
|
178
|
-
export declare interface PlayerStateOwnerChangedArgs {
|
|
179
|
-
/** The PlayerState instance that changed */
|
|
180
|
-
playerState: PlayerState;
|
|
181
|
-
/** Previous owner's connection ID */
|
|
182
|
-
oldValue: string;
|
|
183
|
-
/** New owner's connection ID */
|
|
184
|
-
newValue: string;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/** Callback type for PlayerState events */
|
|
188
|
-
export declare type PlayerStateEventCallback = (args: CustomEvent<PlayerStateOwnerChangedArgs>) => void;
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Represents a player instance in the networked environment.
|
|
192
|
-
* Handles ownership, synchronization, and lifecycle management of player objects.
|
|
193
|
-
*/
|
|
194
|
-
export class PlayerState extends Behaviour {
|
|
195
|
-
|
|
196
|
-
private static _all: PlayerState[] = [];
|
|
197
|
-
/** All PlayerState instances for all players in the scene */
|
|
198
|
-
static get all(): PlayerState[] {
|
|
199
|
-
return PlayerState._all;
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
private static _local: PlayerState[] = [];
|
|
203
|
-
/** All PlayerState instances that belong to the local player */
|
|
204
|
-
static get local(): PlayerState[] {
|
|
205
|
-
return PlayerState._local;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Gets the PlayerState component for a given object or component
|
|
210
|
-
* @param obj Object3D or Component to find the PlayerState for
|
|
211
|
-
* @returns The PlayerState component if found, undefined otherwise
|
|
212
|
-
*/
|
|
213
|
-
static getFor(obj: Object3D | Component) {
|
|
214
|
-
if (obj instanceof Object3D) {
|
|
215
|
-
return GameObject.getComponentInParent(obj, PlayerState);
|
|
216
|
-
}
|
|
217
|
-
else if (obj instanceof Component) {
|
|
218
|
-
return GameObject.getComponentInParent(obj.gameObject, PlayerState);
|
|
219
|
-
}
|
|
220
|
-
return undefined;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Checks if a given object or component belongs to the local player
|
|
225
|
-
* @param obj Object3D or Component to check
|
|
226
|
-
* @returns True if the object belongs to the local player, false otherwise
|
|
227
|
-
*/
|
|
228
|
-
static isLocalPlayer(obj: Object3D | Component): boolean {
|
|
229
|
-
const state = PlayerState.getFor(obj);
|
|
230
|
-
return state?.isLocalPlayer ?? false;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
private static _callbacks: { [key: string]: PlayerStateEventCallback[] } = {};
|
|
234
|
-
/**
|
|
235
|
-
* Registers a callback for a specific PlayerState event
|
|
236
|
-
* @param event The event to listen for
|
|
237
|
-
* @param cb Callback function that will be invoked when the event occurs
|
|
238
|
-
* @returns The provided callback function for chaining
|
|
239
|
-
*/
|
|
240
|
-
static addEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
|
|
241
|
-
if (!this._callbacks[event]) this._callbacks[event] = [];
|
|
242
|
-
this._callbacks[event].push(cb);
|
|
243
|
-
return cb;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Removes a previously registered event callback
|
|
248
|
-
* @param event The event type to remove the callback from
|
|
249
|
-
* @param cb The callback function to remove
|
|
250
|
-
*/
|
|
251
|
-
static removeEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
|
|
252
|
-
if (!this._callbacks[event]) return;
|
|
253
|
-
const index = this._callbacks[event].indexOf(cb);
|
|
254
|
-
if (index >= 0) this._callbacks[event].splice(index, 1);
|
|
255
|
-
}
|
|
256
|
-
private static dispatchEvent(event: PlayerStateEvent, args: CustomEvent<PlayerStateOwnerChangedArgs>) {
|
|
257
|
-
if (!this._callbacks[event]) return;
|
|
258
|
-
for (const cb of this._callbacks[event]) {
|
|
259
|
-
cb(args);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
/** Event triggered when the owner of this PlayerState changes */
|
|
265
|
-
public onOwnerChangeEvent = new EventList();
|
|
266
|
-
|
|
267
|
-
/** Event triggered the first time an owner is assigned to this PlayerState */
|
|
268
|
-
public onFirstOwnerChangeEvent = new EventList();
|
|
269
|
-
|
|
270
|
-
/** Indicates if this PlayerState has an owner assigned */
|
|
271
|
-
public hasOwner = false;
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* The connection ID of the player who owns this PlayerState instance
|
|
275
|
-
* @syncField Synchronized across the network
|
|
276
|
-
*/
|
|
277
|
-
@syncField(PlayerState.prototype.onOwnerChange)
|
|
278
|
-
owner?: string;
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* When enabled, PlayerState will not destroy itself when the owner is not connected anymore
|
|
282
|
-
*/
|
|
283
|
-
dontDestroy: boolean = false;
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Indicates if this PlayerState belongs to the local player
|
|
287
|
-
*/
|
|
288
|
-
get isLocalPlayer(): boolean {
|
|
289
|
-
return this.owner === this.context.connection.connectionId;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Handles owner change events and updates relevant state
|
|
294
|
-
* @param newOwner The new owner's connection ID
|
|
295
|
-
* @param oldOwner The previous owner's connection ID
|
|
296
|
-
*/
|
|
297
|
-
private onOwnerChange(newOwner: string, oldOwner: string) {
|
|
298
|
-
if (debug) console.log(`PlayerSync.onOwnerChange: ${oldOwner} → ${newOwner} (me: ${this.context.connection.connectionId})`);
|
|
299
|
-
|
|
300
|
-
// Remove from local owner array if it was local before
|
|
301
|
-
const index = PlayerState._local.indexOf(this);
|
|
302
|
-
if (index >= 0) PlayerState._local.splice(index, 1);
|
|
303
|
-
|
|
304
|
-
// Args to use for dispatching events
|
|
305
|
-
const detail: PlayerStateOwnerChangedArgs = {
|
|
306
|
-
playerState: this,
|
|
307
|
-
oldValue: oldOwner,
|
|
308
|
-
newValue: newOwner
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// call local events
|
|
312
|
-
if (!this.hasOwner) {
|
|
313
|
-
this.hasOwner = true;
|
|
314
|
-
this.onFirstOwnerChangeEvent?.invoke(detail);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
this.onOwnerChangeEvent?.invoke(detail);
|
|
318
|
-
|
|
319
|
-
// call remote events
|
|
320
|
-
if (this.owner === this.context.connection.connectionId) {
|
|
321
|
-
PlayerState._local.push(this);
|
|
322
|
-
// console.warn(this.gameObject.guid, this.guid, this.owner, this.isLocalPlayer, PlayerState.isLocalPlayer(this));
|
|
323
|
-
const evt = new CustomEvent("local-owner-changed", { detail: detail });
|
|
324
|
-
this.dispatchEvent(evt);
|
|
325
|
-
}
|
|
326
|
-
const evt = new CustomEvent("owner-changed", { detail: detail });
|
|
327
|
-
this.dispatchEvent(evt);
|
|
328
|
-
PlayerState.dispatchEvent(PlayerStateEvent.OwnerChanged, evt);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/** @internal */
|
|
332
|
-
awake(): void {
|
|
333
|
-
PlayerState.all.push(this);
|
|
334
|
-
if (debug) console.log("Registered new PlayerState", this.guid, PlayerState.all.length - 1, PlayerState.all)
|
|
335
|
-
|
|
336
|
-
this.context.connection.beginListen(RoomEvents.UserLeftRoom, this.onUserLeftRoom);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/** @internal */
|
|
340
|
-
async start() {
|
|
341
|
-
if (debug) console.log("PLAYERSTATE.START, owner: " + this.owner, this.context.connection.usersInRoom([]))
|
|
342
|
-
|
|
343
|
-
// If a player is spawned but not in the room anymore we want to destroy it
|
|
344
|
-
// this might happen in a case where all users get disconnected at once and the server
|
|
345
|
-
// still has the syncInstantiate messages that are sent to all clients
|
|
346
|
-
if (this.owner) {
|
|
347
|
-
// a slight delay is necessary right now because the syncInstantiate call might has created this object already with the owner assigned but the user has not yet joined the room
|
|
348
|
-
if (!this.context.connection.isInRoom) await delay(300);
|
|
349
|
-
if (this.context.connection.userIsInRoom(this.owner) == false) {
|
|
350
|
-
if (debug) console.log(`PlayerSync.start → doDestroy \"${this.name}\" because user \"${this.owner}\" is not in room anymore...`, "Currently in room:", ...this.context.connection.usersInRoom())
|
|
351
|
-
this.doDestroy();
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
else if (!this.owner) {
|
|
355
|
-
if (debug) console.warn("PlayerState.start → owner is undefined!", this.name);
|
|
356
|
-
// we can delete it here immediately because it is not synced anymore or the owner has left the room
|
|
357
|
-
// we could also do this in a timeout and check if the owner is still not assigned after a second (but that would be a hack)
|
|
358
|
-
setTimeout(() => {
|
|
359
|
-
if (!this.destroyed && !this.owner) {
|
|
360
|
-
if (!this.dontDestroy) {
|
|
361
|
-
if (debug) console.warn(`PlayerState.start → owner is still undefined: destroying \"${this.name}\" instance now`);
|
|
362
|
-
this.doDestroy();
|
|
363
|
-
}
|
|
364
|
-
else if (debug) console.warn("PlayerState.start → owner is still undefined but dontDestroy is set to true", this.name);
|
|
365
|
-
}
|
|
366
|
-
else if (debug) console.log("PlayerState.start → owner is assigned", this.owner);
|
|
367
|
-
}, 2000);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
/** Tells the server that this client has been destroyed, and the networking message for the instantiate will be removed */
|
|
372
|
-
doDestroy() {
|
|
373
|
-
if (debug) console.log("PlayerSync.doDestroy → syncDestroy", this.name);
|
|
374
|
-
syncDestroy(this.gameObject, this.context.connection, true, { saveInRoom: false });
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
/** @internal */
|
|
378
|
-
onDestroy() {
|
|
379
|
-
if(debug) console.warn("PlayerState.onDestroy", this.owner);
|
|
380
|
-
this.context.connection.stopListen(RoomEvents.UserLeftRoom, this.onUserLeftRoom);
|
|
381
|
-
PlayerState.all.splice(PlayerState.all.indexOf(this), 1);
|
|
382
|
-
|
|
383
|
-
if (this.isLocalPlayer) {
|
|
384
|
-
const index = PlayerState._local.indexOf(this);
|
|
385
|
-
if (index >= 0)
|
|
386
|
-
PlayerState._local.splice(index, 1);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
/**
|
|
391
|
-
* Handler for when a user leaves the networked room
|
|
392
|
-
* @param model Object containing the ID of the user who left
|
|
393
|
-
*/
|
|
394
|
-
private onUserLeftRoom = (model: { userId: string }) => {
|
|
395
|
-
if (model.userId === this.owner) {
|
|
396
|
-
if (debug)
|
|
397
|
-
console.log("PLAYERSYNC LEFT", this.owner)
|
|
398
|
-
this.doDestroy();
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
}
|
|
1
|
+
import { Object3D } from "three";
|
|
2
|
+
|
|
3
|
+
import { AssetReference } from "../../engine/engine_addressables.js";
|
|
4
|
+
import { RoomEvents } from "../../engine/engine_networking.js";
|
|
5
|
+
import { syncField } from "../../engine/engine_networking_auto.js"
|
|
6
|
+
import { syncDestroy } from "../../engine/engine_networking_instantiate.js";
|
|
7
|
+
import { serializable } from "../../engine/engine_serialization_decorator.js";
|
|
8
|
+
import type { ComponentInit, IGameObject } from "../../engine/engine_types.js";
|
|
9
|
+
import { delay, getParam } from "../../engine/engine_utils.js";
|
|
10
|
+
import { Behaviour, Component, GameObject } from "../../engine-components/Component.js";
|
|
11
|
+
import { EventList } from "../../engine-components/EventList.js";
|
|
12
|
+
|
|
13
|
+
const debug = getParam("debugplayersync");
|
|
14
|
+
|
|
15
|
+
/** Type definition for a PlayerSync instance with a guaranteed asset property */
|
|
16
|
+
declare type PlayerSyncWithAsset = PlayerSync & Required<Pick<PlayerSync, "asset">>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* This component instantiates an asset for each player that joins a networked room. The asset will be destroyed when the player leaves the room.
|
|
20
|
+
* The asset should have a PlayerState component, and can have other components like SyncedTransform, custom components, etc.
|
|
21
|
+
* @category Networking
|
|
22
|
+
*/
|
|
23
|
+
export class PlayerSync extends Behaviour {
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* This API is experimental and may change or be removed in the future.
|
|
27
|
+
* Creates a PlayerSync instance at runtime from a given URL and sets it up for networking
|
|
28
|
+
* @param url Path to the asset that should be instantiated for each player
|
|
29
|
+
* @param init Optional initialization parameters for the PlayerSync component
|
|
30
|
+
* @returns Promise resolving to a PlayerSync instance with a guaranteed asset property
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const res = await PlayerSync.setupFrom("/assets/demo.glb");
|
|
34
|
+
* addComponent(res.asset?.asset, DragControls);
|
|
35
|
+
* addComponent(res.asset?.asset, SyncedTransform);
|
|
36
|
+
* scene.add(res.gameObject);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
static async setupFrom(url: string, init?: Omit<ComponentInit<PlayerSync>, "asset">): Promise<PlayerSyncWithAsset> {
|
|
40
|
+
const assetReference = AssetReference.getOrCreateFromUrl(url);
|
|
41
|
+
if (!assetReference.asset) {
|
|
42
|
+
const i = await assetReference.loadAssetAsync();
|
|
43
|
+
if(i) GameObject.getOrAddComponent(i, PlayerState);
|
|
44
|
+
}
|
|
45
|
+
const ps = new PlayerSync();
|
|
46
|
+
ps._internalInit(init);
|
|
47
|
+
ps.asset = assetReference;
|
|
48
|
+
const obj = new Object3D();
|
|
49
|
+
obj["guid"] = url;
|
|
50
|
+
GameObject.addComponent(obj, ps);
|
|
51
|
+
return ps as PlayerSyncWithAsset;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* When enabled, PlayerSync will automatically load and instantiate the assigned asset when joining a networked room
|
|
56
|
+
*/
|
|
57
|
+
@serializable()
|
|
58
|
+
autoSync: boolean = true;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The asset that will be loaded and instantiated when PlayerSync becomes active and joins a networked room
|
|
62
|
+
*/
|
|
63
|
+
@serializable(AssetReference)
|
|
64
|
+
asset?: AssetReference;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Event invoked when a player instance is spawned with the spawned {@link Object3D} as parameter
|
|
68
|
+
* @serializable
|
|
69
|
+
*/
|
|
70
|
+
@serializable(EventList)
|
|
71
|
+
onPlayerSpawned?: EventList<Object3D>;
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
private _localInstance?: Promise<IGameObject>;
|
|
75
|
+
|
|
76
|
+
awake(): void {
|
|
77
|
+
this.watchTabVisible();
|
|
78
|
+
if (!this.onPlayerSpawned) this.onPlayerSpawned = new EventList();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
onEnable(): void {
|
|
82
|
+
this.context.connection.beginListen(RoomEvents.RoomStateSent, this.onJoinedRoom);
|
|
83
|
+
this.context.connection.beginListen(RoomEvents.JoinedRoom, this.onJoinedRoom);
|
|
84
|
+
this.context.connection.beginListen(RoomEvents.LeftRoom, this.destroyInstance);
|
|
85
|
+
if (this.context.connection.isInRoom) {
|
|
86
|
+
this.onJoinedRoom();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
onDisable(): void {
|
|
90
|
+
this.context.connection.stopListen(RoomEvents.RoomStateSent, this.onJoinedRoom);
|
|
91
|
+
this.context.connection.stopListen(RoomEvents.JoinedRoom, this.onJoinedRoom);
|
|
92
|
+
this.context.connection.stopListen(RoomEvents.LeftRoom, this.destroyInstance);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private onJoinedRoom = () => {
|
|
96
|
+
if (debug) console.log("PlayerSync.joinedRoom. autoSync is set to " + this.autoSync);
|
|
97
|
+
if (this.autoSync) this.getInstance();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Gets or creates an instance of the assigned asset for the local player
|
|
102
|
+
* @returns Promise resolving to the instantiated player object or null if creation failed
|
|
103
|
+
*/
|
|
104
|
+
async getInstance() {
|
|
105
|
+
if (this._localInstance) return this._localInstance;
|
|
106
|
+
|
|
107
|
+
if (debug) console.log("PlayerSync.createInstance", this.asset?.url);
|
|
108
|
+
|
|
109
|
+
if (!this.asset?.asset && !this.asset?.url) {
|
|
110
|
+
console.error("PlayerSync: can not create an instance because \"asset\" is not set and or has no URL!");
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (!this.gameObject.guid) {
|
|
115
|
+
console.warn("PlayerSync: gameObject has no guid! This might cause issues with syncing the player state.");
|
|
116
|
+
}
|
|
117
|
+
this._localInstance = this.asset?.instantiateSynced({ parent: this.gameObject, deleteOnDisconnect: true }, true) as Promise<IGameObject>;
|
|
118
|
+
const instance = await this._localInstance;
|
|
119
|
+
if (instance) {
|
|
120
|
+
const pl = GameObject.getComponentsInChildren(instance, PlayerState);
|
|
121
|
+
if (debug) console.log(`PlayerSync.createInstance: found ${pl?.length} PlayerState components. Owner: ${this.context.connection.connectionId}`);
|
|
122
|
+
if (pl?.length) {
|
|
123
|
+
for (const state of pl)
|
|
124
|
+
state.owner = this.context.connection.connectionId!;
|
|
125
|
+
this.onPlayerSpawned?.invoke(instance);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
this._localInstance = undefined;
|
|
129
|
+
console.error("<strong>Failed finding PlayerState on " + this.asset?.url + "</strong>: please make sure the asset has a PlayerState component!");
|
|
130
|
+
GameObject.destroySynced(instance);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this._localInstance = undefined;
|
|
135
|
+
console.warn("PlayerSync: failed instantiating asset!")
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return this._localInstance;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Destroys the current player instance and cleans up networking state
|
|
143
|
+
*/
|
|
144
|
+
destroyInstance = () => {
|
|
145
|
+
this._localInstance?.then(go => {
|
|
146
|
+
if (debug) console.log("PlayerSync.destroyInstance", go);
|
|
147
|
+
syncDestroy(go, this.context.connection, true, { saveInRoom: false });
|
|
148
|
+
});
|
|
149
|
+
this._localInstance = undefined;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Sets up visibility change listeners to handle player cleanup when browser tab visibility changes
|
|
154
|
+
*/
|
|
155
|
+
private watchTabVisible() {
|
|
156
|
+
window.addEventListener("visibilitychange", _ => {
|
|
157
|
+
if (document.visibilityState === "visible") {
|
|
158
|
+
for (let i = PlayerState.all.length - 1; i >= 0; i--) {
|
|
159
|
+
const pl = PlayerState.all[i];
|
|
160
|
+
if (!pl.owner || !this.context.connection.userIsInRoom(pl.owner)) {
|
|
161
|
+
pl.doDestroy();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Enum defining events that can be triggered by PlayerState
|
|
171
|
+
*/
|
|
172
|
+
export enum PlayerStateEvent {
|
|
173
|
+
/** Triggered when a PlayerState's owner property changes */
|
|
174
|
+
OwnerChanged = "ownerChanged",
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** Arguments passed when a PlayerState's owner changes */
|
|
178
|
+
export declare interface PlayerStateOwnerChangedArgs {
|
|
179
|
+
/** The PlayerState instance that changed */
|
|
180
|
+
playerState: PlayerState;
|
|
181
|
+
/** Previous owner's connection ID */
|
|
182
|
+
oldValue: string;
|
|
183
|
+
/** New owner's connection ID */
|
|
184
|
+
newValue: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Callback type for PlayerState events */
|
|
188
|
+
export declare type PlayerStateEventCallback = (args: CustomEvent<PlayerStateOwnerChangedArgs>) => void;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Represents a player instance in the networked environment.
|
|
192
|
+
* Handles ownership, synchronization, and lifecycle management of player objects.
|
|
193
|
+
*/
|
|
194
|
+
export class PlayerState extends Behaviour {
|
|
195
|
+
|
|
196
|
+
private static _all: PlayerState[] = [];
|
|
197
|
+
/** All PlayerState instances for all players in the scene */
|
|
198
|
+
static get all(): PlayerState[] {
|
|
199
|
+
return PlayerState._all;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
private static _local: PlayerState[] = [];
|
|
203
|
+
/** All PlayerState instances that belong to the local player */
|
|
204
|
+
static get local(): PlayerState[] {
|
|
205
|
+
return PlayerState._local;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Gets the PlayerState component for a given object or component
|
|
210
|
+
* @param obj Object3D or Component to find the PlayerState for
|
|
211
|
+
* @returns The PlayerState component if found, undefined otherwise
|
|
212
|
+
*/
|
|
213
|
+
static getFor(obj: Object3D | Component) {
|
|
214
|
+
if (obj instanceof Object3D) {
|
|
215
|
+
return GameObject.getComponentInParent(obj, PlayerState);
|
|
216
|
+
}
|
|
217
|
+
else if (obj instanceof Component) {
|
|
218
|
+
return GameObject.getComponentInParent(obj.gameObject, PlayerState);
|
|
219
|
+
}
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Checks if a given object or component belongs to the local player
|
|
225
|
+
* @param obj Object3D or Component to check
|
|
226
|
+
* @returns True if the object belongs to the local player, false otherwise
|
|
227
|
+
*/
|
|
228
|
+
static isLocalPlayer(obj: Object3D | Component): boolean {
|
|
229
|
+
const state = PlayerState.getFor(obj);
|
|
230
|
+
return state?.isLocalPlayer ?? false;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private static _callbacks: { [key: string]: PlayerStateEventCallback[] } = {};
|
|
234
|
+
/**
|
|
235
|
+
* Registers a callback for a specific PlayerState event
|
|
236
|
+
* @param event The event to listen for
|
|
237
|
+
* @param cb Callback function that will be invoked when the event occurs
|
|
238
|
+
* @returns The provided callback function for chaining
|
|
239
|
+
*/
|
|
240
|
+
static addEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
|
|
241
|
+
if (!this._callbacks[event]) this._callbacks[event] = [];
|
|
242
|
+
this._callbacks[event].push(cb);
|
|
243
|
+
return cb;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Removes a previously registered event callback
|
|
248
|
+
* @param event The event type to remove the callback from
|
|
249
|
+
* @param cb The callback function to remove
|
|
250
|
+
*/
|
|
251
|
+
static removeEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
|
|
252
|
+
if (!this._callbacks[event]) return;
|
|
253
|
+
const index = this._callbacks[event].indexOf(cb);
|
|
254
|
+
if (index >= 0) this._callbacks[event].splice(index, 1);
|
|
255
|
+
}
|
|
256
|
+
private static dispatchEvent(event: PlayerStateEvent, args: CustomEvent<PlayerStateOwnerChangedArgs>) {
|
|
257
|
+
if (!this._callbacks[event]) return;
|
|
258
|
+
for (const cb of this._callbacks[event]) {
|
|
259
|
+
cb(args);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
/** Event triggered when the owner of this PlayerState changes */
|
|
265
|
+
public onOwnerChangeEvent = new EventList();
|
|
266
|
+
|
|
267
|
+
/** Event triggered the first time an owner is assigned to this PlayerState */
|
|
268
|
+
public onFirstOwnerChangeEvent = new EventList();
|
|
269
|
+
|
|
270
|
+
/** Indicates if this PlayerState has an owner assigned */
|
|
271
|
+
public hasOwner = false;
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* The connection ID of the player who owns this PlayerState instance
|
|
275
|
+
* @syncField Synchronized across the network
|
|
276
|
+
*/
|
|
277
|
+
@syncField(PlayerState.prototype.onOwnerChange)
|
|
278
|
+
owner?: string;
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* When enabled, PlayerState will not destroy itself when the owner is not connected anymore
|
|
282
|
+
*/
|
|
283
|
+
dontDestroy: boolean = false;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Indicates if this PlayerState belongs to the local player
|
|
287
|
+
*/
|
|
288
|
+
get isLocalPlayer(): boolean {
|
|
289
|
+
return this.owner === this.context.connection.connectionId;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Handles owner change events and updates relevant state
|
|
294
|
+
* @param newOwner The new owner's connection ID
|
|
295
|
+
* @param oldOwner The previous owner's connection ID
|
|
296
|
+
*/
|
|
297
|
+
private onOwnerChange(newOwner: string, oldOwner: string) {
|
|
298
|
+
if (debug) console.log(`PlayerSync.onOwnerChange: ${oldOwner} → ${newOwner} (me: ${this.context.connection.connectionId})`);
|
|
299
|
+
|
|
300
|
+
// Remove from local owner array if it was local before
|
|
301
|
+
const index = PlayerState._local.indexOf(this);
|
|
302
|
+
if (index >= 0) PlayerState._local.splice(index, 1);
|
|
303
|
+
|
|
304
|
+
// Args to use for dispatching events
|
|
305
|
+
const detail: PlayerStateOwnerChangedArgs = {
|
|
306
|
+
playerState: this,
|
|
307
|
+
oldValue: oldOwner,
|
|
308
|
+
newValue: newOwner
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// call local events
|
|
312
|
+
if (!this.hasOwner) {
|
|
313
|
+
this.hasOwner = true;
|
|
314
|
+
this.onFirstOwnerChangeEvent?.invoke(detail);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
this.onOwnerChangeEvent?.invoke(detail);
|
|
318
|
+
|
|
319
|
+
// call remote events
|
|
320
|
+
if (this.owner === this.context.connection.connectionId) {
|
|
321
|
+
PlayerState._local.push(this);
|
|
322
|
+
// console.warn(this.gameObject.guid, this.guid, this.owner, this.isLocalPlayer, PlayerState.isLocalPlayer(this));
|
|
323
|
+
const evt = new CustomEvent("local-owner-changed", { detail: detail });
|
|
324
|
+
this.dispatchEvent(evt);
|
|
325
|
+
}
|
|
326
|
+
const evt = new CustomEvent("owner-changed", { detail: detail });
|
|
327
|
+
this.dispatchEvent(evt);
|
|
328
|
+
PlayerState.dispatchEvent(PlayerStateEvent.OwnerChanged, evt);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/** @internal */
|
|
332
|
+
awake(): void {
|
|
333
|
+
PlayerState.all.push(this);
|
|
334
|
+
if (debug) console.log("Registered new PlayerState", this.guid, PlayerState.all.length - 1, PlayerState.all)
|
|
335
|
+
|
|
336
|
+
this.context.connection.beginListen(RoomEvents.UserLeftRoom, this.onUserLeftRoom);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/** @internal */
|
|
340
|
+
async start() {
|
|
341
|
+
if (debug) console.log("PLAYERSTATE.START, owner: " + this.owner, this.context.connection.usersInRoom([]))
|
|
342
|
+
|
|
343
|
+
// If a player is spawned but not in the room anymore we want to destroy it
|
|
344
|
+
// this might happen in a case where all users get disconnected at once and the server
|
|
345
|
+
// still has the syncInstantiate messages that are sent to all clients
|
|
346
|
+
if (this.owner) {
|
|
347
|
+
// a slight delay is necessary right now because the syncInstantiate call might has created this object already with the owner assigned but the user has not yet joined the room
|
|
348
|
+
if (!this.context.connection.isInRoom) await delay(300);
|
|
349
|
+
if (this.context.connection.userIsInRoom(this.owner) == false) {
|
|
350
|
+
if (debug) console.log(`PlayerSync.start → doDestroy \"${this.name}\" because user \"${this.owner}\" is not in room anymore...`, "Currently in room:", ...this.context.connection.usersInRoom())
|
|
351
|
+
this.doDestroy();
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
else if (!this.owner) {
|
|
355
|
+
if (debug) console.warn("PlayerState.start → owner is undefined!", this.name);
|
|
356
|
+
// we can delete it here immediately because it is not synced anymore or the owner has left the room
|
|
357
|
+
// we could also do this in a timeout and check if the owner is still not assigned after a second (but that would be a hack)
|
|
358
|
+
setTimeout(() => {
|
|
359
|
+
if (!this.destroyed && !this.owner) {
|
|
360
|
+
if (!this.dontDestroy) {
|
|
361
|
+
if (debug) console.warn(`PlayerState.start → owner is still undefined: destroying \"${this.name}\" instance now`);
|
|
362
|
+
this.doDestroy();
|
|
363
|
+
}
|
|
364
|
+
else if (debug) console.warn("PlayerState.start → owner is still undefined but dontDestroy is set to true", this.name);
|
|
365
|
+
}
|
|
366
|
+
else if (debug) console.log("PlayerState.start → owner is assigned", this.owner);
|
|
367
|
+
}, 2000);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Tells the server that this client has been destroyed, and the networking message for the instantiate will be removed */
|
|
372
|
+
doDestroy() {
|
|
373
|
+
if (debug) console.log("PlayerSync.doDestroy → syncDestroy", this.name);
|
|
374
|
+
syncDestroy(this.gameObject, this.context.connection, true, { saveInRoom: false });
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/** @internal */
|
|
378
|
+
onDestroy() {
|
|
379
|
+
if(debug) console.warn("PlayerState.onDestroy", this.owner);
|
|
380
|
+
this.context.connection.stopListen(RoomEvents.UserLeftRoom, this.onUserLeftRoom);
|
|
381
|
+
PlayerState.all.splice(PlayerState.all.indexOf(this), 1);
|
|
382
|
+
|
|
383
|
+
if (this.isLocalPlayer) {
|
|
384
|
+
const index = PlayerState._local.indexOf(this);
|
|
385
|
+
if (index >= 0)
|
|
386
|
+
PlayerState._local.splice(index, 1);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Handler for when a user leaves the networked room
|
|
392
|
+
* @param model Object containing the ID of the user who left
|
|
393
|
+
*/
|
|
394
|
+
private onUserLeftRoom = (model: { userId: string }) => {
|
|
395
|
+
if (model.userId === this.owner) {
|
|
396
|
+
if (debug)
|
|
397
|
+
console.log("PLAYERSYNC LEFT", this.owner)
|
|
398
|
+
this.doDestroy();
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
402
|
}
|