@needle-tools/engine 3.28.6-beta → 3.28.7-beta.1
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 +2259 -2253
- package/LICENSE.md +10 -10
- package/README.md +52 -52
- package/dist/needle-engine.js +7 -10
- package/dist/needle-engine.light.js +7 -10
- package/dist/needle-engine.light.min.js +7 -10
- package/dist/needle-engine.light.umd.cjs +7 -10
- package/dist/needle-engine.min.js +7 -10
- package/dist/needle-engine.umd.cjs +7 -10
- package/lib/engine/api.d.ts +52 -52
- package/lib/engine/api.js +51 -51
- package/lib/engine/assets/index.d.ts +1 -1
- package/lib/engine/assets/index.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +439 -439
- package/lib/engine/debug/debug.d.ts +12 -12
- package/lib/engine/debug/debug.js +26 -26
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +204 -204
- package/lib/engine/debug/debug_overlay.d.ts +10 -10
- package/lib/engine/debug/debug_overlay.js +277 -277
- package/lib/engine/debug/index.d.ts +1 -1
- package/lib/engine/debug/index.js +1 -1
- package/lib/engine/engine_addressables.d.ts +75 -75
- package/lib/engine/engine_addressables.js +441 -441
- package/lib/engine/engine_application.d.ts +19 -19
- package/lib/engine/engine_application.js +45 -45
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +341 -341
- package/lib/engine/engine_camera.d.ts +6 -6
- package/lib/engine/engine_camera.js +23 -23
- package/lib/engine/engine_components.d.ts +17 -17
- package/lib/engine/engine_components.js +273 -273
- package/lib/engine/engine_components_internal.d.ts +11 -11
- package/lib/engine/engine_components_internal.js +41 -41
- package/lib/engine/engine_constants.d.ts +5 -5
- package/lib/engine/engine_constants.js +32 -32
- package/lib/engine/engine_context.d.ts +269 -269
- package/lib/engine/engine_context.js +1242 -1242
- package/lib/engine/engine_context_registry.d.ts +50 -50
- package/lib/engine/engine_context_registry.js +89 -89
- package/lib/engine/engine_coroutine.d.ts +4 -4
- package/lib/engine/engine_coroutine.js +21 -21
- package/lib/engine/engine_create_objects.d.ts +13 -13
- package/lib/engine/engine_create_objects.js +33 -33
- 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 +17 -17
- package/lib/engine/engine_editor-sync.js +7 -7
- package/lib/engine/engine_element.d.ts +55 -55
- package/lib/engine/engine_element.js +559 -559
- package/lib/engine/engine_element_attributes.d.ts +49 -49
- package/lib/engine/engine_element_attributes.js +1 -1
- package/lib/engine/engine_element_extras.d.ts +6 -6
- package/lib/engine/engine_element_extras.js +13 -13
- package/lib/engine/engine_element_loading.d.ts +40 -40
- package/lib/engine/engine_element_loading.js +312 -312
- package/lib/engine/engine_element_overlay.d.ts +19 -19
- package/lib/engine/engine_element_overlay.js +143 -143
- package/lib/engine/engine_fileloader.d.ts +3 -3
- package/lib/engine/engine_fileloader.js +7 -7
- package/lib/engine/engine_gameobject.d.ts +39 -39
- package/lib/engine/engine_gameobject.js +559 -559
- 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 +26 -26
- package/lib/engine/engine_gizmos.js +282 -282
- package/lib/engine/engine_gltf.d.ts +13 -13
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +7 -7
- package/lib/engine/engine_gltf_builtin_components.js +298 -298
- package/lib/engine/engine_hot_reload.d.ts +5 -5
- package/lib/engine/engine_hot_reload.js +182 -182
- package/lib/engine/engine_input.d.ts +129 -129
- package/lib/engine/engine_input.js +799 -799
- 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 +16 -16
- package/lib/engine/engine_instancing.js +36 -36
- package/lib/engine/engine_license.d.ts +4 -4
- package/lib/engine/engine_license.js +398 -398
- package/lib/engine/engine_lifecycle_api.d.ts +14 -14
- package/lib/engine/engine_lifecycle_api.js +24 -24
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +6 -6
- package/lib/engine/engine_lifecycle_functions_internal.js +28 -28
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +86 -86
- package/lib/engine/engine_loaders.d.ts +7 -7
- package/lib/engine/engine_loaders.js +69 -69
- package/lib/engine/engine_mainloop_utils.d.ts +13 -13
- package/lib/engine/engine_mainloop_utils.js +426 -426
- package/lib/engine/engine_math.d.ts +43 -43
- package/lib/engine/engine_math.js +147 -147
- package/lib/engine/engine_networking.d.ts +176 -176
- package/lib/engine/engine_networking.js +649 -649
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +324 -324
- package/lib/engine/engine_networking_files.d.ts +23 -23
- package/lib/engine/engine_networking_files.js +176 -176
- package/lib/engine/engine_networking_files_default_components.d.ts +3 -3
- package/lib/engine/engine_networking_files_default_components.js +39 -39
- package/lib/engine/engine_networking_instantiate.d.ts +39 -39
- package/lib/engine/engine_networking_instantiate.js +302 -302
- 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 +90 -90
- package/lib/engine/engine_networking_streams.js +428 -428
- package/lib/engine/engine_networking_types.d.ts +14 -14
- 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_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +115 -115
- package/lib/engine/engine_physics.js +228 -228
- package/lib/engine/engine_physics.types.d.ts +37 -37
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +112 -112
- package/lib/engine/engine_physics_rapier.js +1266 -1266
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +74 -74
- package/lib/engine/engine_scenelighting.js +285 -285
- package/lib/engine/engine_scenetools.d.ts +35 -35
- package/lib/engine/engine_scenetools.js +212 -212
- package/lib/engine/engine_serialization.d.ts +4 -4
- package/lib/engine/engine_serialization.js +4 -4
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +62 -62
- package/lib/engine/engine_serialization_builtin_serializer.js +369 -369
- package/lib/engine/engine_serialization_core.d.ts +84 -84
- package/lib/engine/engine_serialization_core.js +576 -576
- package/lib/engine/engine_serialization_decorator.d.ts +15 -15
- package/lib/engine/engine_serialization_decorator.js +54 -54
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +31 -31
- package/lib/engine/engine_shaders.js +229 -229
- package/lib/engine/engine_shims.d.ts +3 -3
- package/lib/engine/engine_shims.js +22 -22
- package/lib/engine/engine_texture.d.ts +20 -20
- package/lib/engine/engine_texture.js +57 -57
- package/lib/engine/engine_three_utils.d.ts +51 -51
- package/lib/engine/engine_three_utils.js +342 -342
- package/lib/engine/engine_time.d.ts +19 -19
- package/lib/engine/engine_time.js +47 -47
- package/lib/engine/engine_types.d.ts +358 -358
- package/lib/engine/engine_types.js +72 -72
- package/lib/engine/engine_typestore.d.ts +16 -16
- package/lib/engine/engine_typestore.js +35 -35
- package/lib/engine/engine_util_decorator.d.ts +12 -12
- package/lib/engine/engine_util_decorator.js +115 -115
- package/lib/engine/engine_utils.d.ts +104 -104
- package/lib/engine/engine_utils.js +518 -518
- package/lib/engine/engine_utils_screenshot.d.ts +10 -10
- package/lib/engine/engine_utils_screenshot.js +70 -70
- package/lib/engine/engine_web_api.d.ts +12 -12
- package/lib/engine/engine_web_api.js +112 -112
- 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 +116 -116
- package/lib/engine/extensions/NEEDLE_animator_controller_model.js +91 -91
- package/lib/engine/extensions/NEEDLE_components.d.ts +33 -33
- package/lib/engine/extensions/NEEDLE_components.js +206 -206
- 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 +38 -38
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +183 -183
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
- package/lib/engine/extensions/NEEDLE_lightmaps.js +108 -108
- 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 +41 -41
- package/lib/engine/extensions/NEEDLE_progressive.js +366 -366
- 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 +39 -39
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +544 -544
- 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 +2 -2
- package/lib/engine/extensions/extension_utils.js +140 -140
- package/lib/engine/extensions/extensions.d.ts +21 -21
- package/lib/engine/extensions/extensions.js +94 -94
- package/lib/engine/extensions/index.d.ts +5 -5
- package/lib/engine/extensions/index.js +5 -5
- package/lib/engine/extensions/usage_tracker.d.ts +13 -13
- package/lib/engine/extensions/usage_tracker.js +61 -61
- package/lib/engine/js-extensions/Camera.d.ts +1 -1
- package/lib/engine/js-extensions/Camera.js +36 -36
- package/lib/engine/js-extensions/Layers.d.ts +3 -3
- package/lib/engine/js-extensions/Layers.js +19 -19
- package/lib/engine/js-extensions/index.d.ts +2 -2
- package/lib/engine/js-extensions/index.js +2 -2
- 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-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +53 -53
- package/lib/engine-components/Animation.js +333 -333
- package/lib/engine-components/AnimationCurve.d.ts +16 -16
- package/lib/engine-components/AnimationCurve.js +97 -97
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +110 -110
- package/lib/engine-components/Animator.d.ts +81 -81
- package/lib/engine-components/Animator.js +229 -229
- package/lib/engine-components/AnimatorController.d.ts +57 -57
- package/lib/engine-components/AnimatorController.js +887 -887
- package/lib/engine-components/AudioListener.d.ts +7 -7
- package/lib/engine-components/AudioListener.js +30 -30
- package/lib/engine-components/AudioSource.d.ts +61 -61
- package/lib/engine-components/AudioSource.js +422 -422
- package/lib/engine-components/AvatarLoader.d.ts +19 -19
- package/lib/engine-components/AvatarLoader.js +173 -173
- package/lib/engine-components/AxesHelper.d.ts +9 -9
- package/lib/engine-components/AxesHelper.js +44 -44
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxHelperComponent.d.ts +16 -16
- package/lib/engine-components/BoxHelperComponent.js +89 -89
- package/lib/engine-components/Camera.d.ts +70 -70
- package/lib/engine-components/Camera.js +450 -450
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +77 -77
- package/lib/engine-components/CharacterController.d.ts +46 -46
- package/lib/engine-components/CharacterController.js +227 -227
- package/lib/engine-components/Collider.d.ts +46 -46
- package/lib/engine-components/Collider.js +153 -153
- package/lib/engine-components/Component.d.ts +228 -228
- package/lib/engine-components/Component.js +541 -541
- package/lib/engine-components/ContactShadows.d.ts +23 -23
- package/lib/engine-components/ContactShadows.js +233 -233
- package/lib/engine-components/DeleteBox.d.ts +9 -9
- package/lib/engine-components/DeleteBox.js +30 -30
- package/lib/engine-components/DeviceFlag.d.ts +12 -12
- package/lib/engine-components/DeviceFlag.js +43 -43
- package/lib/engine-components/DragControls.d.ts +51 -51
- package/lib/engine-components/DragControls.js +516 -516
- package/lib/engine-components/DropListener.d.ts +15 -15
- package/lib/engine-components/DropListener.js +120 -120
- package/lib/engine-components/Duplicatable.d.ts +16 -16
- package/lib/engine-components/Duplicatable.js +150 -150
- package/lib/engine-components/EventList.d.ts +28 -28
- package/lib/engine-components/EventList.js +105 -105
- package/lib/engine-components/EventTrigger.d.ts +12 -12
- package/lib/engine-components/EventTrigger.js +50 -50
- package/lib/engine-components/EventType.d.ts +19 -19
- package/lib/engine-components/EventType.js +71 -71
- package/lib/engine-components/FlyControls.d.ts +7 -7
- package/lib/engine-components/FlyControls.js +25 -25
- package/lib/engine-components/Fog.d.ts +20 -20
- package/lib/engine-components/Fog.js +60 -60
- package/lib/engine-components/Gizmos.d.ts +12 -12
- package/lib/engine-components/Gizmos.js +60 -60
- package/lib/engine-components/GridHelper.d.ts +12 -12
- package/lib/engine-components/GridHelper.js +47 -47
- package/lib/engine-components/GroundProjection.d.ts +21 -21
- package/lib/engine-components/GroundProjection.js +97 -97
- package/lib/engine-components/Interactable.d.ts +10 -10
- package/lib/engine-components/Interactable.js +11 -11
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +30 -30
- package/lib/engine-components/LODGroup.js +145 -145
- package/lib/engine-components/Light.d.ts +75 -75
- package/lib/engine-components/Light.js +475 -475
- package/lib/engine-components/LookAtConstraint.d.ts +7 -7
- package/lib/engine-components/LookAtConstraint.js +17 -17
- package/lib/engine-components/NestedGltf.d.ts +11 -11
- package/lib/engine-components/NestedGltf.js +74 -74
- package/lib/engine-components/Networking.d.ts +11 -11
- package/lib/engine-components/Networking.js +70 -70
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +111 -111
- package/lib/engine-components/OrbitControls.js +646 -646
- package/lib/engine-components/ParticleSystem.d.ts +145 -145
- package/lib/engine-components/ParticleSystem.js +1077 -1077
- package/lib/engine-components/ParticleSystemModules.d.ts +489 -489
- package/lib/engine-components/ParticleSystemModules.js +1667 -1667
- package/lib/engine-components/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/ParticleSystemSubEmitter.js +86 -86
- package/lib/engine-components/PlayerColor.d.ts +13 -13
- package/lib/engine-components/PlayerColor.js +83 -83
- package/lib/engine-components/ReflectionProbe.d.ts +22 -22
- package/lib/engine-components/ReflectionProbe.js +181 -181
- package/lib/engine-components/Renderer.d.ts +112 -112
- package/lib/engine-components/Renderer.js +1029 -1029
- package/lib/engine-components/RendererLightmap.d.ts +19 -19
- package/lib/engine-components/RendererLightmap.js +127 -127
- package/lib/engine-components/RigidBody.d.ts +120 -120
- package/lib/engine-components/RigidBody.js +452 -452
- package/lib/engine-components/SceneSwitcher.d.ts +72 -72
- package/lib/engine-components/SceneSwitcher.js +583 -583
- package/lib/engine-components/ScreenCapture.d.ts +64 -64
- package/lib/engine-components/ScreenCapture.js +405 -405
- package/lib/engine-components/ShadowCatcher.d.ts +18 -18
- package/lib/engine-components/ShadowCatcher.js +144 -144
- package/lib/engine-components/Skybox.d.ts +23 -23
- package/lib/engine-components/Skybox.js +287 -287
- package/lib/engine-components/SmoothFollow.d.ts +14 -14
- package/lib/engine-components/SmoothFollow.js +63 -63
- package/lib/engine-components/SpatialTrigger.d.ts +27 -27
- package/lib/engine-components/SpatialTrigger.js +144 -144
- package/lib/engine-components/SpectatorCamera.d.ts +45 -45
- package/lib/engine-components/SpectatorCamera.js +593 -593
- package/lib/engine-components/SpriteRenderer.d.ts +48 -48
- package/lib/engine-components/SpriteRenderer.js +257 -257
- package/lib/engine-components/SyncedCamera.d.ts +27 -27
- package/lib/engine-components/SyncedCamera.js +187 -187
- package/lib/engine-components/SyncedRoom.d.ts +24 -24
- package/lib/engine-components/SyncedRoom.js +162 -162
- package/lib/engine-components/SyncedTransform.d.ts +35 -35
- package/lib/engine-components/SyncedTransform.js +265 -265
- package/lib/engine-components/TestRunner.d.ts +13 -13
- package/lib/engine-components/TestRunner.js +99 -99
- package/lib/engine-components/TransformGizmo.d.ts +16 -16
- package/lib/engine-components/TransformGizmo.js +148 -148
- package/lib/engine-components/VideoPlayer.d.ts +86 -86
- package/lib/engine-components/VideoPlayer.js +792 -792
- package/lib/engine-components/Voip.d.ts +29 -29
- package/lib/engine-components/Voip.js +203 -203
- package/lib/engine-components/XRFlag.d.ts +33 -33
- package/lib/engine-components/XRFlag.js +128 -128
- package/lib/engine-components/api.d.ts +15 -15
- package/lib/engine-components/api.js +15 -15
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +10 -10
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +75 -75
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +13 -13
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +74 -74
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +27 -27
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +119 -119
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +13 -13
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +78 -78
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +8 -8
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +28 -28
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +217 -217
- 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 +25 -25
- package/lib/engine-components/export/gltf/GltfExport.js +215 -215
- 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 +10 -10
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +114 -114
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1211 -1211
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +59 -59
- package/lib/engine-components/export/usdz/USDZExporter.js +450 -450
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +69 -69
- package/lib/engine-components/export/usdz/extensions/Animation.js +650 -650
- 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/USDZText.d.ts +55 -55
- package/lib/engine-components/export/usdz/extensions/USDZText.js +246 -246
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +100 -100
- 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 +9 -9
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +52 -52
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +22 -22
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +134 -134
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +126 -126
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +824 -824
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +133 -133
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +464 -464
- 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 +3 -3
- package/lib/engine-components/export/usdz/utils/animationutils.js +85 -85
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +35 -35
- package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -1
- package/lib/engine-components/export/usdz/utils/timeutils.js +14 -14
- package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +6 -6
- package/lib/engine-components/js-extensions/ExtensionUtils.js +65 -65
- package/lib/engine-components/js-extensions/Object3D.d.ts +2 -2
- package/lib/engine-components/js-extensions/Object3D.js +140 -140
- package/lib/engine-components/js-extensions/RGBAColor.d.ts +14 -14
- package/lib/engine-components/js-extensions/RGBAColor.js +49 -49
- package/lib/engine-components/js-extensions/index.d.ts +3 -3
- package/lib/engine-components/js-extensions/index.js +3 -3
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +45 -45
- package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/Bloom.js +77 -77
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -8
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +38 -38
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +81 -81
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -21
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +97 -97
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -7
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +28 -28
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +86 -86
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +24 -24
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +94 -94
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +62 -62
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -16
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Vignette.js +56 -56
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +33 -33
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +126 -126
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +22 -22
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +201 -201
- package/lib/engine-components/postprocessing/Volume.d.ts +25 -25
- package/lib/engine-components/postprocessing/Volume.js +193 -193
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +22 -22
- package/lib/engine-components/postprocessing/VolumeParameter.js +80 -80
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -7
- package/lib/engine-components/postprocessing/VolumeProfile.js +41 -41
- package/lib/engine-components/postprocessing/index.d.ts +4 -4
- package/lib/engine-components/postprocessing/index.js +4 -4
- package/lib/engine-components/timeline/PlayableDirector.d.ts +107 -107
- package/lib/engine-components/timeline/PlayableDirector.js +624 -624
- package/lib/engine-components/timeline/SignalAsset.d.ts +18 -18
- package/lib/engine-components/timeline/SignalAsset.js +124 -124
- package/lib/engine-components/timeline/TimelineModels.d.ts +88 -88
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +90 -90
- package/lib/engine-components/timeline/TimelineTracks.js +825 -825
- 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 +31 -31
- package/lib/engine-components/ui/BaseUIComponent.js +161 -161
- package/lib/engine-components/ui/Button.d.ts +56 -56
- package/lib/engine-components/ui/Button.js +282 -282
- package/lib/engine-components/ui/Canvas.d.ts +67 -67
- package/lib/engine-components/ui/Canvas.js +382 -382
- package/lib/engine-components/ui/CanvasGroup.d.ts +15 -15
- package/lib/engine-components/ui/CanvasGroup.js +53 -53
- package/lib/engine-components/ui/EventSystem.d.ts +102 -102
- package/lib/engine-components/ui/EventSystem.js +641 -641
- package/lib/engine-components/ui/Graphic.d.ts +45 -45
- package/lib/engine-components/ui/Graphic.js +236 -236
- package/lib/engine-components/ui/Image.d.ts +27 -27
- package/lib/engine-components/ui/Image.js +107 -107
- package/lib/engine-components/ui/InputField.d.ts +34 -34
- package/lib/engine-components/ui/InputField.js +234 -234
- 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 +72 -72
- package/lib/engine-components/ui/Layout.js +318 -318
- 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 +64 -64
- package/lib/engine-components/ui/PointerEvents.js +68 -68
- 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 +18 -18
- package/lib/engine-components/ui/Raycaster.js +69 -69
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +343 -343
- package/lib/engine-components/ui/SpatialHtml.d.ts +6 -6
- package/lib/engine-components/ui/SpatialHtml.js +57 -57
- package/lib/engine-components/ui/Text.d.ts +74 -74
- package/lib/engine-components/ui/Text.js +534 -534
- package/lib/engine-components/ui/Utils.d.ts +23 -23
- 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/LookAt.d.ts +13 -13
- package/lib/engine-components/utils/LookAt.js +59 -59
- package/lib/engine-components/utils/OpenURL.d.ts +21 -21
- package/lib/engine-components/utils/OpenURL.js +124 -124
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +19 -19
- package/lib/engine-components/webxr/WebARCameraBackground.js +193 -193
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +38 -38
- package/lib/engine-components/webxr/WebARSessionRoot.js +407 -407
- package/lib/engine-components/webxr/WebXR.d.ts +110 -110
- package/lib/engine-components/webxr/WebXR.js +672 -672
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +61 -61
- package/lib/engine-components/webxr/WebXRAvatar.js +289 -289
- package/lib/engine-components/webxr/WebXRController.d.ts +154 -154
- package/lib/engine-components/webxr/WebXRController.js +1028 -1028
- package/lib/engine-components/webxr/WebXRGrabRendering.d.ts +42 -42
- package/lib/engine-components/webxr/WebXRGrabRendering.js +137 -137
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +49 -49
- package/lib/engine-components/webxr/WebXRImageTracking.js +336 -336
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +49 -49
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +372 -372
- package/lib/engine-components/webxr/WebXRRig.d.ts +4 -4
- package/lib/engine-components/webxr/WebXRRig.js +19 -19
- package/lib/engine-components/webxr/WebXRSync.d.ts +54 -54
- package/lib/engine-components/webxr/WebXRSync.js +410 -410
- package/lib/engine-components/webxr/index.d.ts +4 -4
- package/lib/engine-components/webxr/index.js +4 -4
- 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 +1 -1
- package/lib/engine-components-experimental/api.js +1 -1
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +50 -50
- package/lib/engine-components-experimental/networking/PlayerSync.js +200 -200
- package/lib/engine-schemes/api.d.ts +1 -1
- package/lib/engine-schemes/api.js +1 -1
- 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/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 +36 -36
- package/lib/engine-schemes/vr-user-state-buffer.js +103 -103
- package/lib/include/three/ARButton.d.ts +3 -3
- package/lib/include/three/ARButton.js +151 -151
- 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/include/three/VRButton.d.ts +5 -5
- package/lib/include/three/VRButton.js +118 -118
- package/lib/needle-engine.d.ts +6 -6
- package/lib/needle-engine.js +49 -49
- package/package.json +1 -1
- package/plugins/common/config.cjs +14 -14
- package/plugins/common/config.js +19 -19
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.cjs +30 -30
- package/plugins/common/version.js +11 -11
- package/plugins/next/license.cjs +4 -4
- package/plugins/next/next.js +70 -70
- package/plugins/types/index.d.ts +1 -1
- package/plugins/types/needleConfig.d.ts +21 -21
- package/plugins/types/userconfig.d.ts +42 -42
- package/plugins/vite/alias.js +70 -70
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/config.js +73 -73
- package/plugins/vite/copyfiles.js +134 -134
- package/plugins/vite/defines.js +45 -45
- package/plugins/vite/dependency-watcher.js +224 -224
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +82 -82
- package/plugins/vite/editor-connection.js +121 -121
- package/plugins/vite/facebook-instant-games.js +99 -99
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +81 -81
- package/plugins/vite/license.js +42 -42
- package/plugins/vite/meta.js +149 -149
- package/plugins/vite/peer.js +31 -31
- package/plugins/vite/poster-client.js +59 -59
- package/plugins/vite/poster.js +73 -73
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +363 -363
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/engine/api.ts +54 -54
- package/src/engine/assets/index.ts +4 -4
- package/src/engine/codegen/register_types.ts +441 -441
- package/src/engine/debug/debug.ts +29 -29
- package/src/engine/debug/debug_console.ts +213 -213
- package/src/engine/debug/debug_overlay.ts +283 -283
- package/src/engine/engine.ts +13 -13
- package/src/engine/engine_addressables.ts +494 -494
- package/src/engine/engine_application.ts +53 -53
- package/src/engine/engine_assetdatabase.ts +383 -383
- package/src/engine/engine_camera.ts +32 -32
- package/src/engine/engine_components.ts +266 -266
- package/src/engine/engine_components_internal.ts +42 -42
- package/src/engine/engine_constants.ts +42 -42
- package/src/engine/engine_context.ts +1386 -1386
- package/src/engine/engine_context_registry.ts +103 -103
- package/src/engine/engine_coroutine.ts +24 -24
- package/src/engine/engine_create_objects.ts +39 -39
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +29 -29
- package/src/engine/engine_element.ts +592 -592
- package/src/engine/engine_element_attributes.ts +61 -61
- package/src/engine/engine_element_extras.ts +16 -16
- package/src/engine/engine_element_loading.ts +341 -341
- package/src/engine/engine_element_overlay.ts +160 -160
- package/src/engine/engine_fileloader.js +8 -8
- package/src/engine/engine_gameobject.ts +621 -621
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +321 -321
- package/src/engine/engine_gltf.ts +30 -30
- package/src/engine/engine_gltf_builtin_components.ts +350 -350
- package/src/engine/engine_hot_reload.ts +196 -196
- package/src/engine/engine_input.ts +879 -879
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +42 -42
- package/src/engine/engine_license.ts +413 -413
- package/src/engine/engine_lifecycle_api.ts +29 -29
- package/src/engine/engine_lifecycle_functions_internal.ts +36 -36
- package/src/engine/engine_lightdata.ts +113 -113
- package/src/engine/engine_loaders.ts +77 -77
- package/src/engine/engine_mainloop_utils.ts +431 -431
- package/src/engine/engine_math.ts +174 -174
- package/src/engine/engine_networking.ts +742 -742
- package/src/engine/engine_networking_auto.ts +373 -373
- package/src/engine/engine_networking_files.ts +206 -206
- package/src/engine/engine_networking_files_default_components.ts +54 -54
- package/src/engine/engine_networking_instantiate.ts +362 -362
- package/src/engine/engine_networking_peer.ts +158 -158
- package/src/engine/engine_networking_streams.ts +489 -489
- package/src/engine/engine_networking_types.ts +18 -18
- 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 +287 -287
- package/src/engine/engine_physics.types.ts +43 -43
- package/src/engine/engine_physics_rapier.ts +1385 -1385
- package/src/engine/engine_playerview.ts +79 -79
- package/src/engine/engine_scenelighting.ts +313 -313
- package/src/engine/engine_scenetools.ts +242 -242
- package/src/engine/engine_serialization.ts +6 -6
- package/src/engine/engine_serialization_builtin_serializer.ts +415 -415
- package/src/engine/engine_serialization_core.ts +680 -680
- package/src/engine/engine_serialization_decorator.ts +68 -68
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +242 -242
- package/src/engine/engine_shims.ts +28 -28
- package/src/engine/engine_texture.ts +70 -70
- package/src/engine/engine_three_utils.ts +382 -382
- package/src/engine/engine_time.ts +55 -55
- package/src/engine/engine_types.ts +489 -489
- package/src/engine/engine_typestore.ts +41 -41
- package/src/engine/engine_util_decorator.ts +134 -134
- package/src/engine/engine_utils.ts +605 -605
- package/src/engine/engine_utils_screenshot.ts +84 -84
- package/src/engine/engine_web_api.ts +119 -119
- package/src/engine/extensions/EXT_texture_exr.ts +49 -49
- package/src/engine/extensions/NEEDLE_animator_controller_model.ts +193 -193
- package/src/engine/extensions/NEEDLE_components.ts +250 -250
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +82 -82
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +210 -210
- package/src/engine/extensions/NEEDLE_lightmaps.ts +130 -130
- package/src/engine/extensions/NEEDLE_persistent_assets.ts +75 -75
- package/src/engine/extensions/NEEDLE_progressive.ts +412 -412
- package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +618 -618
- package/src/engine/extensions/extension_resolver.ts +4 -4
- package/src/engine/extensions/extension_utils.ts +149 -149
- package/src/engine/extensions/extensions.ts +118 -118
- package/src/engine/extensions/index.ts +4 -4
- package/src/engine/extensions/usage_tracker.ts +95 -95
- package/src/engine/js-extensions/Camera.ts +34 -34
- package/src/engine/js-extensions/Layers.ts +19 -19
- package/src/engine/js-extensions/index.ts +1 -1
- package/src/engine/shaders/shaderData.ts +67 -67
- package/src/engine/tests/test_utils.ts +63 -63
- package/src/engine-components/AlignmentConstraint.ts +35 -35
- package/src/engine-components/Animation.ts +345 -345
- package/src/engine-components/AnimationCurve.ts +83 -83
- package/src/engine-components/AnimationUtils.ts +117 -117
- package/src/engine-components/Animator.ts +243 -243
- package/src/engine-components/AnimatorController.ts +1020 -1020
- package/src/engine-components/AudioListener.ts +32 -32
- package/src/engine-components/AudioSource.ts +419 -419
- package/src/engine-components/AvatarLoader.ts +204 -204
- package/src/engine-components/AxesHelper.ts +33 -33
- package/src/engine-components/BasicIKConstraint.ts +53 -53
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +100 -100
- package/src/engine-components/Camera.ts +454 -454
- package/src/engine-components/CameraUtils.ts +89 -89
- package/src/engine-components/CharacterController.ts +243 -243
- package/src/engine-components/Collider.ts +160 -160
- package/src/engine-components/Component.ts +670 -670
- package/src/engine-components/ContactShadows.ts +265 -265
- package/src/engine-components/DeleteBox.ts +35 -35
- package/src/engine-components/DeviceFlag.ts +42 -42
- package/src/engine-components/DragControls.ts +574 -574
- package/src/engine-components/DropListener.ts +112 -112
- package/src/engine-components/Duplicatable.ts +146 -146
- package/src/engine-components/EventList.ts +125 -125
- package/src/engine-components/EventTrigger.ts +47 -47
- package/src/engine-components/EventType.ts +87 -87
- package/src/engine-components/FlyControls.ts +31 -31
- package/src/engine-components/Fog.ts +59 -59
- package/src/engine-components/Gizmos.ts +52 -52
- package/src/engine-components/GridHelper.ts +40 -40
- package/src/engine-components/GroundProjection.ts +97 -97
- package/src/engine-components/Interactable.ts +18 -18
- package/src/engine-components/Joints.ts +51 -51
- package/src/engine-components/LODGroup.ts +145 -145
- package/src/engine-components/Light.ts +493 -493
- package/src/engine-components/LookAtConstraint.ts +11 -11
- package/src/engine-components/NestedGltf.ts +70 -70
- package/src/engine-components/Networking.ts +72 -72
- package/src/engine-components/OffsetConstraint.ts +59 -59
- package/src/engine-components/OrbitControls.ts +653 -653
- package/src/engine-components/ParticleSystem.ts +1192 -1192
- package/src/engine-components/ParticleSystemModules.ts +1481 -1481
- package/src/engine-components/ParticleSystemSubEmitter.ts +110 -110
- package/src/engine-components/PlayerColor.ts +93 -93
- package/src/engine-components/ReflectionProbe.ts +192 -192
- package/src/engine-components/Renderer.ts +1125 -1125
- package/src/engine-components/RendererLightmap.ts +145 -145
- package/src/engine-components/RigidBody.ts +453 -453
- package/src/engine-components/SceneSwitcher.ts +594 -594
- package/src/engine-components/ScreenCapture.ts +437 -437
- package/src/engine-components/ShadowCatcher.ts +149 -149
- package/src/engine-components/Skybox.ts +281 -281
- package/src/engine-components/SmoothFollow.ts +57 -57
- package/src/engine-components/SpatialTrigger.ts +142 -142
- package/src/engine-components/SpectatorCamera.ts +675 -675
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +244 -244
- package/src/engine-components/SyncedCamera.ts +208 -208
- package/src/engine-components/SyncedRoom.ts +166 -166
- package/src/engine-components/SyncedTransform.ts +336 -336
- package/src/engine-components/TestRunner.ts +114 -114
- package/src/engine-components/TransformGizmo.ts +157 -157
- package/src/engine-components/VideoPlayer.ts +831 -831
- package/src/engine-components/Voip.ts +214 -214
- package/src/engine-components/XRFlag.ts +138 -138
- package/src/engine-components/api.ts +22 -22
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +67 -67
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +68 -68
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +136 -136
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +81 -81
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +28 -28
- package/src/engine-components/codegen/components.ts +216 -216
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +231 -231
- package/src/engine-components/export/usdz/Extension.ts +11 -11
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1773 -1773
- package/src/engine-components/export/usdz/USDZExporter.ts +477 -477
- package/src/engine-components/export/usdz/extensions/Animation.ts +774 -774
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/USDZText.ts +287 -287
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +119 -119
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +98 -98
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +67 -67
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +202 -202
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +963 -963
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +517 -517
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +100 -100
- package/src/engine-components/export/usdz/utils/quicklook.ts +42 -42
- package/src/engine-components/export/usdz/utils/timeutils.ts +19 -19
- package/src/engine-components/js-extensions/ExtensionUtils.ts +81 -81
- package/src/engine-components/js-extensions/Object3D.ts +181 -181
- package/src/engine-components/js-extensions/RGBAColor.ts +54 -54
- package/src/engine-components/js-extensions/Vector.ts +16 -16
- package/src/engine-components/js-extensions/index.ts +2 -2
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +51 -51
- package/src/engine-components/postprocessing/Effects/Bloom.ts +76 -76
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +35 -35
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +96 -96
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +93 -93
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +26 -26
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +84 -84
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +98 -98
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +55 -55
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +54 -54
- package/src/engine-components/postprocessing/Effects/Vignette.ts +54 -54
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +148 -148
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +232 -232
- package/src/engine-components/postprocessing/Volume.ts +216 -216
- package/src/engine-components/postprocessing/VolumeParameter.ts +92 -92
- package/src/engine-components/postprocessing/VolumeProfile.ts +40 -40
- package/src/engine-components/postprocessing/index.ts +3 -3
- package/src/engine-components/timeline/PlayableDirector.ts +666 -666
- package/src/engine-components/timeline/SignalAsset.ts +138 -138
- package/src/engine-components/timeline/TimelineModels.ts +93 -93
- package/src/engine-components/timeline/TimelineTracks.ts +906 -906
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +195 -195
- package/src/engine-components/ui/Button.ts +283 -283
- package/src/engine-components/ui/Canvas.ts +390 -390
- package/src/engine-components/ui/CanvasGroup.ts +49 -49
- package/src/engine-components/ui/EventSystem.ts +736 -736
- package/src/engine-components/ui/Graphic.ts +255 -255
- package/src/engine-components/ui/Image.ts +102 -102
- package/src/engine-components/ui/InputField.ts +290 -290
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +322 -322
- package/src/engine-components/ui/Outline.ts +12 -12
- package/src/engine-components/ui/PointerEvents.ts +118 -118
- package/src/engine-components/ui/RaycastUtils.ts +68 -68
- package/src/engine-components/ui/Raycaster.ts +73 -73
- package/src/engine-components/ui/RectTransform.ts +364 -364
- package/src/engine-components/ui/SpatialHtml.ts +63 -63
- package/src/engine-components/ui/Text.ts +572 -572
- package/src/engine-components/ui/Utils.ts +110 -110
- package/src/engine-components/utils/LookAt.ts +65 -65
- package/src/engine-components/utils/OpenURL.ts +118 -118
- package/src/engine-components/webxr/WebARCameraBackground.ts +224 -224
- package/src/engine-components/webxr/WebARSessionRoot.ts +446 -446
- package/src/engine-components/webxr/WebXR.ts +761 -761
- package/src/engine-components/webxr/WebXRAvatar.ts +356 -356
- package/src/engine-components/webxr/WebXRController.ts +1168 -1168
- package/src/engine-components/webxr/WebXRGrabRendering.ts +150 -150
- package/src/engine-components/webxr/WebXRImageTracking.ts +371 -371
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +429 -429
- package/src/engine-components/webxr/WebXRRig.ts +21 -21
- package/src/engine-components/webxr/WebXRSync.ts +463 -463
- package/src/engine-components/webxr/index.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/networking/PlayerSync.ts +217 -217
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/schemes.ts +27 -27
- 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 +138 -138
- package/src/engine-schemes/vrUserStateBuffer.fbs +16 -16
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/draco/draco_wasm_wrapper.js +117 -117
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/ARButton.js +231 -231
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/include/three/VRButton.js +194 -194
- package/src/needle-engine.ts +55 -55
- package/src/engine/dist/api.js +0 -73
- package/src/engine/dist/api.js.meta +0 -7
- package/src/engine/dist/engine_networking_streams.js +0 -474
- package/src/engine/dist/engine_networking_streams.js.meta +0 -7
- 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
- package/src/engine-schemes/flatc.exe +0 -0
|
@@ -1,670 +1,670 @@
|
|
|
1
|
-
import { Mathf } from "../engine/engine_math.js";
|
|
2
|
-
import * as threeutils from "../engine/engine_three_utils.js";
|
|
3
|
-
import { activeInHierarchyFieldName } from "../engine/engine_constants.js";
|
|
4
|
-
import { Context, FrameEvent } from "../engine/engine_setup.js";
|
|
5
|
-
import * as main from "../engine/engine_mainloop_utils.js";
|
|
6
|
-
import { syncDestroy, syncInstantiate } from "../engine/engine_networking_instantiate.js";
|
|
7
|
-
import type { ConstructorConcrete, SourceIdentifier, IComponent, IGameObject, Constructor, GuidsMap, Collision, ICollider } from "../engine/engine_types.js";
|
|
8
|
-
import { addNewComponent, destroyComponentInstance, findObjectOfType, findObjectsOfType, getComponent, getComponentInChildren, getComponentInParent, getComponents, getComponentsInChildren, getComponentsInParent, getOrAddComponent, moveComponentInstance, removeComponent } from "../engine/engine_components.js";
|
|
9
|
-
import { findByGuid, destroy, InstantiateOptions, instantiate, HideFlags, foreachComponent, markAsInstancedRendered, isActiveInHierarchy, isActiveSelf, isUsingInstancing, setActive, isDestroyed } from "../engine/engine_gameobject.js";
|
|
10
|
-
|
|
11
|
-
import { Euler, Object3D, Quaternion, Scene, Vector3 } from "three";
|
|
12
|
-
import { showBalloonWarning, isDevEnvironment } from "../engine/debug/index.js";
|
|
13
|
-
|
|
14
|
-
// export interface ISerializationCallbackReceiver {
|
|
15
|
-
// onBeforeSerialize?(): object | void;
|
|
16
|
-
// onAfterSerialize?();
|
|
17
|
-
// onBeforeDeserialize?(data?: any);
|
|
18
|
-
// onAfterDeserialize?();
|
|
19
|
-
// onDeserialize?(key: string, value: any): any | void;
|
|
20
|
-
// }
|
|
21
|
-
|
|
22
|
-
export abstract class GameObject extends Object3D implements Object3D, IGameObject {
|
|
23
|
-
|
|
24
|
-
guid: string | undefined;
|
|
25
|
-
|
|
26
|
-
// Added to the threejs Object3D prototype
|
|
27
|
-
abstract destroy();
|
|
28
|
-
|
|
29
|
-
public static isDestroyed(go: Object3D): boolean {
|
|
30
|
-
return isDestroyed(go);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public static setActive(go: Object3D, active: boolean, processStart: boolean = true) {
|
|
34
|
-
if (!go) return;
|
|
35
|
-
setActive(go, active);
|
|
36
|
-
|
|
37
|
-
// TODO: do we still need this?:
|
|
38
|
-
main.updateIsActive(go);
|
|
39
|
-
if (active && processStart)
|
|
40
|
-
main.processStart(Context.Current, go);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** If the object is active (same as go.visible) */
|
|
44
|
-
public static isActiveSelf(go: Object3D): boolean {
|
|
45
|
-
return isActiveSelf(go);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** If the object is active in the hierarchy (e.g. if any parent is invisible or not in the scene it will be false)
|
|
49
|
-
* @param go object to check
|
|
50
|
-
*/
|
|
51
|
-
public static isActiveInHierarchy(go: Object3D): boolean {
|
|
52
|
-
return isActiveInHierarchy(go);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public static markAsInstancedRendered(go: Object3D, instanced: boolean) {
|
|
56
|
-
markAsInstancedRendered(go, instanced);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public static isUsingInstancing(instance: Object3D): boolean { return isUsingInstancing(instance); }
|
|
60
|
-
|
|
61
|
-
/** Run a callback for all components of the provided type on the provided object and its children (if recursive is true)
|
|
62
|
-
* @param instance object to run the method on
|
|
63
|
-
* @param cb callback to run on each component, "return undefined;" to continue and "return <anything>;" to break the loop
|
|
64
|
-
* @param recursive if true, the method will be run on all children as well
|
|
65
|
-
* @returns the last return value of the callback
|
|
66
|
-
*/
|
|
67
|
-
public static foreachComponent(instance: Object3D, cb: (comp: Component) => any, recursive: boolean = true): any {
|
|
68
|
-
return foreachComponent(instance, cb as (comp: IComponent) => any, recursive);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** Creates a new instance of the provided object. The new instance will be created on all connected clients
|
|
72
|
-
* @param instance object to instantiate
|
|
73
|
-
* @param opts options for the instantiation
|
|
74
|
-
*/
|
|
75
|
-
public static instantiateSynced(instance: GameObject | Object3D | null, opts: InstantiateOptions): GameObject | null {
|
|
76
|
-
if (!instance) return null;
|
|
77
|
-
return syncInstantiate(instance as any, opts) as GameObject | null;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** Creates a new instance of the provided object (like cloning it including all components and children)
|
|
81
|
-
* @param instance object to instantiate
|
|
82
|
-
* @param opts options for the instantiation (e.g. with what parent, position, etc.)
|
|
83
|
-
*/
|
|
84
|
-
public static instantiate(instance: GameObject | Object3D | null, opts: InstantiateOptions | null = null): GameObject | null {
|
|
85
|
-
return instantiate(instance, opts) as GameObject | null;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/** Destroys a object on all connected clients (if you are in a networked session)
|
|
89
|
-
* @param instance object to destroy
|
|
90
|
-
*/
|
|
91
|
-
public static destroySynced(instance: Object3D | Component, context?: Context, recursive: boolean = true) {
|
|
92
|
-
if (!instance) return;
|
|
93
|
-
const go = instance as GameObject;
|
|
94
|
-
context = context ?? Context.Current;
|
|
95
|
-
syncDestroy(go as any, context.connection, recursive);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Destroys a object
|
|
99
|
-
* @param instance object to destroy
|
|
100
|
-
* @param recursive if true, all children will be destroyed as well. true by default
|
|
101
|
-
*/
|
|
102
|
-
public static destroy(instance: Object3D | Component, recursive: boolean = true, isRoot: boolean = true) {
|
|
103
|
-
return destroy(instance, recursive, isRoot);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Add an object to parent and also ensure all components are being registered
|
|
108
|
-
*/
|
|
109
|
-
public static add(instance: Object3D | null | undefined, parent: Object3D, context?: Context) {
|
|
110
|
-
if (!instance || !parent) return;
|
|
111
|
-
if (instance === parent) {
|
|
112
|
-
console.warn("Can not add object to self", instance);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
if (!context) {
|
|
116
|
-
context = Context.Current;
|
|
117
|
-
}
|
|
118
|
-
parent.add(instance);
|
|
119
|
-
setActive(instance, true);
|
|
120
|
-
main.updateIsActive(instance);
|
|
121
|
-
if (context) {
|
|
122
|
-
GameObject.foreachComponent(instance, (comp: Component) => {
|
|
123
|
-
main.addScriptToArrays(comp, context!);
|
|
124
|
-
if (comp.__internalDidAwakeAndStart) return;
|
|
125
|
-
if (context!.new_script_start.includes(comp) === false) {
|
|
126
|
-
context!.new_script_start.push(comp as Behaviour);
|
|
127
|
-
}
|
|
128
|
-
}, true);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
console.warn("Missing context");
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Removes the object from its parent and deactivates all of its components
|
|
137
|
-
*/
|
|
138
|
-
public static remove(instance: Object3D | null | undefined) {
|
|
139
|
-
if (!instance) return;
|
|
140
|
-
instance.parent?.remove(instance);
|
|
141
|
-
setActive(instance, false);
|
|
142
|
-
main.updateIsActive(instance);
|
|
143
|
-
GameObject.foreachComponent(instance, (comp) => {
|
|
144
|
-
main.processRemoveFromScene(comp);
|
|
145
|
-
}, true);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/** Invokes a method on all components including children (if a method with that name exists) */
|
|
149
|
-
public static invokeOnChildren(go: Object3D | null | undefined, functionName: string, ...args: any) {
|
|
150
|
-
this.invoke(go, functionName, true, args);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/** Invokes a method on all components that have a method matching the provided name
|
|
154
|
-
* @param go object to invoke the method on all components
|
|
155
|
-
* @param functionName name of the method to invoke
|
|
156
|
-
*/
|
|
157
|
-
public static invoke(go: Object3D | null | undefined, functionName: string, children: boolean = false, ...args: any) {
|
|
158
|
-
if (!go) return;
|
|
159
|
-
this.foreachComponent(go, c => {
|
|
160
|
-
const fn = c[functionName];
|
|
161
|
-
if (fn && typeof fn === "function") {
|
|
162
|
-
fn?.call(c, ...args)
|
|
163
|
-
}
|
|
164
|
-
}, children);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Adds a new component to the provided object
|
|
169
|
-
* @param go object to add the component to
|
|
170
|
-
* @param type type of the component to add
|
|
171
|
-
* @param callAwake if true, the component will be added and awake will be called immediately
|
|
172
|
-
*/
|
|
173
|
-
public static addNewComponent<T>(go: IGameObject | Object3D, type: ConstructorConcrete<T>, callAwake: boolean = true): T {
|
|
174
|
-
const instance = new type();
|
|
175
|
-
//@ts-ignore
|
|
176
|
-
addNewComponent(go, instance, callAwake);
|
|
177
|
-
return instance
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Moves a component to a new object
|
|
182
|
-
* BEWARE: this does MOVE a component. If you want to add a new component use `addNewComponent`
|
|
183
|
-
* @param go component to move the component to
|
|
184
|
-
* @param instance component to move to the GO
|
|
185
|
-
*/
|
|
186
|
-
public static addComponent<T extends IComponent>(go: IGameObject | Object3D, instance: T | ConstructorConcrete<T>) {
|
|
187
|
-
return this.moveComponent(go, instance);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Moves a component to a new object
|
|
192
|
-
* @param go component to move the component to
|
|
193
|
-
* @param instance component to move to the GO
|
|
194
|
-
*/
|
|
195
|
-
public static moveComponent<T extends IComponent>(go: IGameObject | Object3D, instance: T | ConstructorConcrete<T>) {
|
|
196
|
-
return moveComponentInstance(go, instance);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/** Removes a component from its object
|
|
200
|
-
* @param instance component to remove
|
|
201
|
-
*/
|
|
202
|
-
public static removeComponent<T extends IComponent>(instance: T): T {
|
|
203
|
-
removeComponent(instance.gameObject, instance as any);
|
|
204
|
-
return instance;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
public static getOrAddComponent<T extends IComponent>(go: IGameObject | Object3D, typeName: ConstructorConcrete<T>): T {
|
|
208
|
-
return getOrAddComponent<any>(go, typeName);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/** Gets a component on the provided object */
|
|
212
|
-
public static getComponent<T extends IComponent>(go: IGameObject | Object3D | null, typeName: Constructor<T> | null): T | null {
|
|
213
|
-
if (go === null) return null;
|
|
214
|
-
// if names are minified we could also use the type store and work with strings everywhere
|
|
215
|
-
// not ideal, but I dont know a good/sane way to do this otherwise
|
|
216
|
-
// const res = TypeStore.get(typeName);
|
|
217
|
-
// if(res) typeName = res;
|
|
218
|
-
return getComponent(go, typeName as any);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
public static getComponents<T extends IComponent>(go: IGameObject | Object3D | null, typeName: Constructor<T>, arr: T[] | null = null): T[] {
|
|
222
|
-
if (go === null) return arr ?? [];
|
|
223
|
-
return getComponents(go, typeName, arr);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
public static findByGuid(guid: string, hierarchy: Object3D): GameObject | Component | null | undefined {
|
|
227
|
-
const res = findByGuid(guid, hierarchy);
|
|
228
|
-
return res as GameObject | Component | null | undefined;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
public static findObjectOfType<T extends IComponent>(typeName: Constructor<T>, context?: Context | Object3D, includeInactive: boolean = true): T | null {
|
|
232
|
-
return findObjectOfType(typeName, context ?? Context.Current, includeInactive);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
public static findObjectsOfType<T extends IComponent>(typeName: Constructor<T>, context?: Context | Object3D): Array<T> {
|
|
236
|
-
const arr = [];
|
|
237
|
-
findObjectsOfType(typeName, arr, context);
|
|
238
|
-
return arr;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
public static getComponentInChildren<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>): T | null {
|
|
242
|
-
return getComponentInChildren(go, typeName);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
public static getComponentsInChildren<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>, arr: T[] | null = null): Array<T> {
|
|
246
|
-
return getComponentsInChildren<T>(go, typeName, arr ?? undefined) as T[]
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
public static getComponentInParent<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>): T | null {
|
|
250
|
-
return getComponentInParent(go, typeName);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
public static getComponentsInParent<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>, arr: Array<T> | null = null): Array<T> {
|
|
254
|
-
return getComponentsInParent(go, typeName, arr);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
public static getAllComponents(go: IGameObject | Object3D): Behaviour[] {
|
|
258
|
-
const componentsList = go.userData?.components;
|
|
259
|
-
const newList = [...componentsList];
|
|
260
|
-
return newList;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
public static *iterateComponents(go: IGameObject | Object3D) {
|
|
264
|
-
const list = go?.userData?.components;
|
|
265
|
-
if (list && Array.isArray(list)) {
|
|
266
|
-
for (let i = 0; i < list.length; i++) {
|
|
267
|
-
yield list[i];
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// these are implemented via threejs object extensions
|
|
273
|
-
abstract activeSelf: boolean;
|
|
274
|
-
|
|
275
|
-
// The actual implementation / prototype of threejs is modified in js-extensions/Object3D
|
|
276
|
-
abstract get transform(): GameObject;
|
|
277
|
-
|
|
278
|
-
/** creates a new component on this gameObject */
|
|
279
|
-
abstract addNewComponent<T>(type: ConstructorConcrete<T>): T | null;
|
|
280
|
-
/** adds an existing component to this gameObject */
|
|
281
|
-
abstract addComponent<T extends IComponent>(comp: T | ConstructorConcrete<T>): void;
|
|
282
|
-
abstract removeComponent(comp: Component): Component;
|
|
283
|
-
abstract getOrAddComponent<T>(typeName: ConstructorConcrete<T> | null): T;
|
|
284
|
-
abstract getComponent<T>(type: Constructor<T>): T | null;
|
|
285
|
-
abstract getComponents<T>(type: Constructor<T>, arr?: T[]): Array<T>;
|
|
286
|
-
abstract getComponentInChildren<T>(type: Constructor<T>): T | null;
|
|
287
|
-
abstract getComponentsInChildren<T>(type: Constructor<T>, arr?: T[]): Array<T>;
|
|
288
|
-
abstract getComponentInParent<T>(type: Constructor<T>): T | null;
|
|
289
|
-
abstract getComponentsInParent<T>(type: Constructor<T>, arr?: T[]): Array<T>;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
abstract get worldPosition(): Vector3
|
|
293
|
-
abstract set worldPosition(val: Vector3);
|
|
294
|
-
abstract set worldQuaternion(val: Quaternion);
|
|
295
|
-
abstract get worldQuaternion(): Quaternion;
|
|
296
|
-
abstract set worldRotation(val: Vector3);
|
|
297
|
-
abstract get worldRotation(): Vector3;
|
|
298
|
-
abstract set worldScale(val: Vector3);
|
|
299
|
-
abstract get worldScale(): Vector3;
|
|
300
|
-
|
|
301
|
-
abstract get worldForward(): Vector3;
|
|
302
|
-
abstract get worldRight(): Vector3;
|
|
303
|
-
abstract get worldUp(): Vector3;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
export class Component implements IComponent, EventTarget {
|
|
309
|
-
|
|
310
|
-
get isComponent(): boolean { return true; }
|
|
311
|
-
|
|
312
|
-
private __context: Context | undefined;
|
|
313
|
-
get context(): Context {
|
|
314
|
-
return this.__context ?? Context.Current;
|
|
315
|
-
}
|
|
316
|
-
set context(context: Context) {
|
|
317
|
-
this.__context = context;
|
|
318
|
-
}
|
|
319
|
-
get scene(): Scene { return this.context.scene; }
|
|
320
|
-
|
|
321
|
-
get layer(): number {
|
|
322
|
-
return this.gameObject?.userData?.layer;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
get name(): string {
|
|
326
|
-
if (this.gameObject?.name) {
|
|
327
|
-
return this.gameObject.name;
|
|
328
|
-
}
|
|
329
|
-
return this.gameObject?.userData.name;
|
|
330
|
-
}
|
|
331
|
-
private __name?: string;
|
|
332
|
-
set name(str: string) {
|
|
333
|
-
if (this.gameObject) {
|
|
334
|
-
if (!this.gameObject.userData) this.gameObject.userData = {}
|
|
335
|
-
this.gameObject.userData.name = str;
|
|
336
|
-
this.__name = str;
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
this.__name = str;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
get tag(): string {
|
|
343
|
-
return this.gameObject?.userData.tag;
|
|
344
|
-
}
|
|
345
|
-
set tag(str: string) {
|
|
346
|
-
if (this.gameObject) {
|
|
347
|
-
if (!this.gameObject.userData) this.gameObject.userData = {}
|
|
348
|
-
this.gameObject.userData.tag = str;
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
get static() {
|
|
352
|
-
return this.gameObject?.userData.static;
|
|
353
|
-
}
|
|
354
|
-
get hideFlags(): HideFlags {
|
|
355
|
-
return this.gameObject?.userData.hideFlags;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
get activeAndEnabled(): boolean {
|
|
360
|
-
if (this.destroyed) return false;
|
|
361
|
-
if (this.__isEnabled === false) return false;
|
|
362
|
-
if (!this.__isActiveInHierarchy) return false;
|
|
363
|
-
// let go = this.gameObject;
|
|
364
|
-
// do {
|
|
365
|
-
// // console.log(go.name, go.visible)
|
|
366
|
-
// if (!go.visible) return false;
|
|
367
|
-
// go = go.parent as GameObject;
|
|
368
|
-
// }
|
|
369
|
-
// while (go);
|
|
370
|
-
return true;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
private get __isActive(): boolean {
|
|
374
|
-
return this.gameObject.visible;
|
|
375
|
-
}
|
|
376
|
-
private get __isActiveInHierarchy(): boolean {
|
|
377
|
-
if (!this.gameObject) return false;
|
|
378
|
-
const res = this.gameObject[activeInHierarchyFieldName];
|
|
379
|
-
if (res === undefined) return true;
|
|
380
|
-
return res;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
private set __isActiveInHierarchy(val: boolean) {
|
|
384
|
-
if (!this.gameObject) return;
|
|
385
|
-
this.gameObject[activeInHierarchyFieldName] = val;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
gameObject!: GameObject;
|
|
389
|
-
guid: string = "invalid";
|
|
390
|
-
sourceId?: SourceIdentifier;
|
|
391
|
-
// transform: Object3D = nullObject;
|
|
392
|
-
|
|
393
|
-
/** called on a component with a map of old to new guids (e.g. when instantiate generated new guids and e.g. timeline track bindings needs to remape them) */
|
|
394
|
-
resolveGuids?(guidsMap: GuidsMap): void;
|
|
395
|
-
|
|
396
|
-
/** called once when the component becomes active for the first time */
|
|
397
|
-
awake() { }
|
|
398
|
-
/** called every time when the component gets enabled (this is invoked after awake and before start) */
|
|
399
|
-
onEnable() { }
|
|
400
|
-
onDisable() { }
|
|
401
|
-
onDestroy() {
|
|
402
|
-
this.__destroyed = true;
|
|
403
|
-
}
|
|
404
|
-
/** called when you decorate fields with the @validate() decorator
|
|
405
|
-
* @param field the name of the field that was changed
|
|
406
|
-
*/
|
|
407
|
-
onValidate?(prop?: string): void;
|
|
408
|
-
|
|
409
|
-
/** Called for all scripts when the context gets paused or unpaused */
|
|
410
|
-
onPausedChanged?(isPaused: boolean, wasPaused: boolean): void;
|
|
411
|
-
|
|
412
|
-
start?(): void;
|
|
413
|
-
earlyUpdate?(): void;
|
|
414
|
-
update?(): void;
|
|
415
|
-
lateUpdate?(): void;
|
|
416
|
-
onBeforeRender?(frame: XRFrame | null): void;
|
|
417
|
-
onAfterRender?(): void;
|
|
418
|
-
|
|
419
|
-
onCollisionEnter?(col: Collision);
|
|
420
|
-
onCollisionExit?(col: Collision);
|
|
421
|
-
onCollisionStay?(col: Collision);
|
|
422
|
-
|
|
423
|
-
onTriggerEnter?(col: ICollider);
|
|
424
|
-
onTriggerStay?(col: ICollider);
|
|
425
|
-
onTriggerExit?(col: ICollider);
|
|
426
|
-
|
|
427
|
-
startCoroutine(routine: Generator, evt: FrameEvent = FrameEvent.Update): Generator {
|
|
428
|
-
return this.context.registerCoroutineUpdate(this, routine, evt);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
stopCoroutine(routine: Generator, evt: FrameEvent = FrameEvent.Update): void {
|
|
432
|
-
this.context.unregisterCoroutineUpdate(routine, evt);
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
public get destroyed(): boolean {
|
|
436
|
-
return this.__destroyed;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
public destroy() {
|
|
440
|
-
if (this.__destroyed) return;
|
|
441
|
-
this.__internalDestroy();
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
/** @internal */
|
|
447
|
-
protected __didAwake: boolean = false;
|
|
448
|
-
|
|
449
|
-
/** @internal */
|
|
450
|
-
private __didStart: boolean = false;
|
|
451
|
-
|
|
452
|
-
/** @internal */
|
|
453
|
-
protected __didEnable: boolean = false;
|
|
454
|
-
|
|
455
|
-
/** @internal */
|
|
456
|
-
protected __isEnabled: boolean | undefined = undefined;
|
|
457
|
-
|
|
458
|
-
/** @internal */
|
|
459
|
-
private __destroyed: boolean = false;
|
|
460
|
-
|
|
461
|
-
/** @internal */
|
|
462
|
-
get __internalDidAwakeAndStart() { return this.__didAwake && this.__didStart; }
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
/** @internal */
|
|
466
|
-
constructor() {
|
|
467
|
-
this.__internalNewInstanceCreated();
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
/** @internal */
|
|
472
|
-
__internalNewInstanceCreated() {
|
|
473
|
-
this.__didAwake = false;
|
|
474
|
-
this.__didStart = false;
|
|
475
|
-
this.__didEnable = false;
|
|
476
|
-
this.__isEnabled = undefined;
|
|
477
|
-
this.__destroyed = false;
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
/** @internal */
|
|
482
|
-
__internalAwake() {
|
|
483
|
-
if (this.__didAwake) return;
|
|
484
|
-
this.__didAwake = true;
|
|
485
|
-
this.awake();
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
/** @internal */
|
|
490
|
-
__internalStart() {
|
|
491
|
-
if (this.__didStart) return;
|
|
492
|
-
this.__didStart = true;
|
|
493
|
-
if (this.start) this.start();
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
/** @internal */
|
|
498
|
-
__internalEnable(isAddingToScene?: boolean): boolean {
|
|
499
|
-
if (this.__destroyed) {
|
|
500
|
-
if (isDevEnvironment()) {
|
|
501
|
-
console.warn("[Needle Engine Dev] Trying to enable destroyed component");
|
|
502
|
-
}
|
|
503
|
-
return false;
|
|
504
|
-
}
|
|
505
|
-
// Don't change enable before awake
|
|
506
|
-
// But a user can change enable during awake
|
|
507
|
-
if (!this.__didAwake) return false;
|
|
508
|
-
if (this.__didEnable) {
|
|
509
|
-
// We dont want to change the enable state if we are adding to scene
|
|
510
|
-
// But we want to change the state when e.g. a user changes the enable state during awake
|
|
511
|
-
if (isAddingToScene !== true)
|
|
512
|
-
this.__isEnabled = true;
|
|
513
|
-
return false;
|
|
514
|
-
}
|
|
515
|
-
// console.trace("INTERNAL ENABLE");
|
|
516
|
-
this.__didEnable = true;
|
|
517
|
-
this.__isEnabled = true;
|
|
518
|
-
this.onEnable();
|
|
519
|
-
return true;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
/** @internal */
|
|
523
|
-
__internalDisable(isRemovingFromScene?: boolean) {
|
|
524
|
-
// Don't change enable before awake
|
|
525
|
-
// But a user can change enable during awake
|
|
526
|
-
if (!this.__didAwake) return;
|
|
527
|
-
if (!this.__didEnable) {
|
|
528
|
-
// We dont want to change the enable state if we are removing from a scene
|
|
529
|
-
if (isRemovingFromScene !== true)
|
|
530
|
-
this.__isEnabled = false;
|
|
531
|
-
return;
|
|
532
|
-
}
|
|
533
|
-
this.__didEnable = false;
|
|
534
|
-
this.__isEnabled = false;
|
|
535
|
-
this.onDisable();
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
/** @internal */
|
|
539
|
-
__internalDestroy() {
|
|
540
|
-
if (this.__destroyed) return;
|
|
541
|
-
this.__destroyed = true;
|
|
542
|
-
if (this.__didAwake) {
|
|
543
|
-
this.onDestroy?.call(this);
|
|
544
|
-
this.dispatchEvent(new CustomEvent("destroyed", { detail: this }));
|
|
545
|
-
}
|
|
546
|
-
destroyComponentInstance(this as any);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
get enabled(): boolean {
|
|
551
|
-
return typeof this.__isEnabled === "boolean" ? this.__isEnabled : true; // if it has no enabled field it is always enabled
|
|
552
|
-
}
|
|
553
|
-
set enabled(val: boolean) {
|
|
554
|
-
if (this.__destroyed) {
|
|
555
|
-
if (isDevEnvironment()) {
|
|
556
|
-
console.warn(`[Needle Engine Dev] Trying to ${val ? "enable" : "disable"} destroyed component`);
|
|
557
|
-
}
|
|
558
|
-
return;
|
|
559
|
-
}
|
|
560
|
-
// when called from animationclip we receive numbers
|
|
561
|
-
// due to interpolation they can be anything between 0 and 1
|
|
562
|
-
if (typeof val === "number") {
|
|
563
|
-
if (val >= 0.5) val = true;
|
|
564
|
-
else val = false;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
// need to check here because codegen is calling this before everything is setup
|
|
568
|
-
if (!this.__didAwake) {
|
|
569
|
-
this.__isEnabled = val;
|
|
570
|
-
return;
|
|
571
|
-
}
|
|
572
|
-
if (val) {
|
|
573
|
-
this.__internalEnable();
|
|
574
|
-
} else {
|
|
575
|
-
this.__internalDisable();
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
get worldPosition(): Vector3 {
|
|
580
|
-
return threeutils.getWorldPosition(this.gameObject);
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
set worldPosition(val: Vector3) {
|
|
584
|
-
threeutils.setWorldPosition(this.gameObject, val);
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
setWorldPosition(x: number, y: number, z: number) {
|
|
588
|
-
threeutils.setWorldPositionXYZ(this.gameObject, x, y, z);
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
get worldQuaternion(): Quaternion {
|
|
593
|
-
return threeutils.getWorldQuaternion(this.gameObject);
|
|
594
|
-
}
|
|
595
|
-
set worldQuaternion(val: Quaternion) {
|
|
596
|
-
threeutils.setWorldQuaternion(this.gameObject, val);
|
|
597
|
-
}
|
|
598
|
-
setWorldQuaternion(x: number, y: number, z: number, w: number) {
|
|
599
|
-
threeutils.setWorldQuaternionXYZW(this.gameObject, x, y, z, w);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
// world euler (in radians)
|
|
603
|
-
get worldEuler(): Euler {
|
|
604
|
-
return threeutils.getWorldEuler(this.gameObject);
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
// world euler (in radians)
|
|
608
|
-
set worldEuler(val: Euler) {
|
|
609
|
-
threeutils.setWorldEuler(this.gameObject, val);
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
// returns rotation in degrees
|
|
613
|
-
get worldRotation(): Vector3 {
|
|
614
|
-
return this.gameObject.worldRotation;;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
set worldRotation(val: Vector3) {
|
|
618
|
-
this.setWorldRotation(val.x, val.y, val.z, true);
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
setWorldRotation(x: number, y: number, z: number, degrees: boolean = true) {
|
|
622
|
-
threeutils.setWorldRotationXYZ(this.gameObject, x, y, z, degrees);
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
private static _forward: Vector3 = new Vector3();
|
|
626
|
-
/** Forward (0,0,-1) vector in world space */
|
|
627
|
-
public get forward(): Vector3 {
|
|
628
|
-
return Component._forward.set(0, 0, -1).applyQuaternion(this.worldQuaternion);
|
|
629
|
-
}
|
|
630
|
-
private static _right: Vector3 = new Vector3();
|
|
631
|
-
/** Right (1,0,0) vector in world space */
|
|
632
|
-
public get right(): Vector3 {
|
|
633
|
-
return Component._right.set(1, 0, 0).applyQuaternion(this.worldQuaternion);
|
|
634
|
-
}
|
|
635
|
-
private static _up: Vector3 = new Vector3();
|
|
636
|
-
/** Up (0,1,0) vector in world space */
|
|
637
|
-
public get up(): Vector3 {
|
|
638
|
-
return Component._up.set(0, 1, 0).applyQuaternion(this.worldQuaternion);
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
// EventTarget implementation:
|
|
644
|
-
|
|
645
|
-
private _eventListeners = new Map<string, EventListener[]>();
|
|
646
|
-
|
|
647
|
-
addEventListener<T extends Event>(type: string, listener: (evt: T) => any) {
|
|
648
|
-
this._eventListeners[type] = this._eventListeners[type] || [];
|
|
649
|
-
this._eventListeners[type].push(listener);
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
removeEventListener<T extends Event>(type: string, listener: (arg: T) => any) {
|
|
653
|
-
if (!this._eventListeners[type]) return;
|
|
654
|
-
const index = this._eventListeners[type].indexOf(listener);
|
|
655
|
-
if (index >= 0) this._eventListeners[type].splice(index, 1);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
dispatchEvent(evt: Event): boolean {
|
|
659
|
-
if (!evt || !this._eventListeners[evt.type]) return false;
|
|
660
|
-
const listeners = this._eventListeners[evt.type];
|
|
661
|
-
for (let i = 0; i < listeners.length; i++) {
|
|
662
|
-
listeners[i](evt);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
return false;
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
export class Behaviour extends Component {
|
|
670
|
-
}
|
|
1
|
+
import { Mathf } from "../engine/engine_math.js";
|
|
2
|
+
import * as threeutils from "../engine/engine_three_utils.js";
|
|
3
|
+
import { activeInHierarchyFieldName } from "../engine/engine_constants.js";
|
|
4
|
+
import { Context, FrameEvent } from "../engine/engine_setup.js";
|
|
5
|
+
import * as main from "../engine/engine_mainloop_utils.js";
|
|
6
|
+
import { syncDestroy, syncInstantiate } from "../engine/engine_networking_instantiate.js";
|
|
7
|
+
import type { ConstructorConcrete, SourceIdentifier, IComponent, IGameObject, Constructor, GuidsMap, Collision, ICollider } from "../engine/engine_types.js";
|
|
8
|
+
import { addNewComponent, destroyComponentInstance, findObjectOfType, findObjectsOfType, getComponent, getComponentInChildren, getComponentInParent, getComponents, getComponentsInChildren, getComponentsInParent, getOrAddComponent, moveComponentInstance, removeComponent } from "../engine/engine_components.js";
|
|
9
|
+
import { findByGuid, destroy, InstantiateOptions, instantiate, HideFlags, foreachComponent, markAsInstancedRendered, isActiveInHierarchy, isActiveSelf, isUsingInstancing, setActive, isDestroyed } from "../engine/engine_gameobject.js";
|
|
10
|
+
|
|
11
|
+
import { Euler, Object3D, Quaternion, Scene, Vector3 } from "three";
|
|
12
|
+
import { showBalloonWarning, isDevEnvironment } from "../engine/debug/index.js";
|
|
13
|
+
|
|
14
|
+
// export interface ISerializationCallbackReceiver {
|
|
15
|
+
// onBeforeSerialize?(): object | void;
|
|
16
|
+
// onAfterSerialize?();
|
|
17
|
+
// onBeforeDeserialize?(data?: any);
|
|
18
|
+
// onAfterDeserialize?();
|
|
19
|
+
// onDeserialize?(key: string, value: any): any | void;
|
|
20
|
+
// }
|
|
21
|
+
|
|
22
|
+
export abstract class GameObject extends Object3D implements Object3D, IGameObject {
|
|
23
|
+
|
|
24
|
+
guid: string | undefined;
|
|
25
|
+
|
|
26
|
+
// Added to the threejs Object3D prototype
|
|
27
|
+
abstract destroy();
|
|
28
|
+
|
|
29
|
+
public static isDestroyed(go: Object3D): boolean {
|
|
30
|
+
return isDestroyed(go);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public static setActive(go: Object3D, active: boolean, processStart: boolean = true) {
|
|
34
|
+
if (!go) return;
|
|
35
|
+
setActive(go, active);
|
|
36
|
+
|
|
37
|
+
// TODO: do we still need this?:
|
|
38
|
+
main.updateIsActive(go);
|
|
39
|
+
if (active && processStart)
|
|
40
|
+
main.processStart(Context.Current, go);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** If the object is active (same as go.visible) */
|
|
44
|
+
public static isActiveSelf(go: Object3D): boolean {
|
|
45
|
+
return isActiveSelf(go);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** If the object is active in the hierarchy (e.g. if any parent is invisible or not in the scene it will be false)
|
|
49
|
+
* @param go object to check
|
|
50
|
+
*/
|
|
51
|
+
public static isActiveInHierarchy(go: Object3D): boolean {
|
|
52
|
+
return isActiveInHierarchy(go);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public static markAsInstancedRendered(go: Object3D, instanced: boolean) {
|
|
56
|
+
markAsInstancedRendered(go, instanced);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public static isUsingInstancing(instance: Object3D): boolean { return isUsingInstancing(instance); }
|
|
60
|
+
|
|
61
|
+
/** Run a callback for all components of the provided type on the provided object and its children (if recursive is true)
|
|
62
|
+
* @param instance object to run the method on
|
|
63
|
+
* @param cb callback to run on each component, "return undefined;" to continue and "return <anything>;" to break the loop
|
|
64
|
+
* @param recursive if true, the method will be run on all children as well
|
|
65
|
+
* @returns the last return value of the callback
|
|
66
|
+
*/
|
|
67
|
+
public static foreachComponent(instance: Object3D, cb: (comp: Component) => any, recursive: boolean = true): any {
|
|
68
|
+
return foreachComponent(instance, cb as (comp: IComponent) => any, recursive);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Creates a new instance of the provided object. The new instance will be created on all connected clients
|
|
72
|
+
* @param instance object to instantiate
|
|
73
|
+
* @param opts options for the instantiation
|
|
74
|
+
*/
|
|
75
|
+
public static instantiateSynced(instance: GameObject | Object3D | null, opts: InstantiateOptions): GameObject | null {
|
|
76
|
+
if (!instance) return null;
|
|
77
|
+
return syncInstantiate(instance as any, opts) as GameObject | null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Creates a new instance of the provided object (like cloning it including all components and children)
|
|
81
|
+
* @param instance object to instantiate
|
|
82
|
+
* @param opts options for the instantiation (e.g. with what parent, position, etc.)
|
|
83
|
+
*/
|
|
84
|
+
public static instantiate(instance: GameObject | Object3D | null, opts: InstantiateOptions | null = null): GameObject | null {
|
|
85
|
+
return instantiate(instance, opts) as GameObject | null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Destroys a object on all connected clients (if you are in a networked session)
|
|
89
|
+
* @param instance object to destroy
|
|
90
|
+
*/
|
|
91
|
+
public static destroySynced(instance: Object3D | Component, context?: Context, recursive: boolean = true) {
|
|
92
|
+
if (!instance) return;
|
|
93
|
+
const go = instance as GameObject;
|
|
94
|
+
context = context ?? Context.Current;
|
|
95
|
+
syncDestroy(go as any, context.connection, recursive);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Destroys a object
|
|
99
|
+
* @param instance object to destroy
|
|
100
|
+
* @param recursive if true, all children will be destroyed as well. true by default
|
|
101
|
+
*/
|
|
102
|
+
public static destroy(instance: Object3D | Component, recursive: boolean = true, isRoot: boolean = true) {
|
|
103
|
+
return destroy(instance, recursive, isRoot);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Add an object to parent and also ensure all components are being registered
|
|
108
|
+
*/
|
|
109
|
+
public static add(instance: Object3D | null | undefined, parent: Object3D, context?: Context) {
|
|
110
|
+
if (!instance || !parent) return;
|
|
111
|
+
if (instance === parent) {
|
|
112
|
+
console.warn("Can not add object to self", instance);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!context) {
|
|
116
|
+
context = Context.Current;
|
|
117
|
+
}
|
|
118
|
+
parent.add(instance);
|
|
119
|
+
setActive(instance, true);
|
|
120
|
+
main.updateIsActive(instance);
|
|
121
|
+
if (context) {
|
|
122
|
+
GameObject.foreachComponent(instance, (comp: Component) => {
|
|
123
|
+
main.addScriptToArrays(comp, context!);
|
|
124
|
+
if (comp.__internalDidAwakeAndStart) return;
|
|
125
|
+
if (context!.new_script_start.includes(comp) === false) {
|
|
126
|
+
context!.new_script_start.push(comp as Behaviour);
|
|
127
|
+
}
|
|
128
|
+
}, true);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.warn("Missing context");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Removes the object from its parent and deactivates all of its components
|
|
137
|
+
*/
|
|
138
|
+
public static remove(instance: Object3D | null | undefined) {
|
|
139
|
+
if (!instance) return;
|
|
140
|
+
instance.parent?.remove(instance);
|
|
141
|
+
setActive(instance, false);
|
|
142
|
+
main.updateIsActive(instance);
|
|
143
|
+
GameObject.foreachComponent(instance, (comp) => {
|
|
144
|
+
main.processRemoveFromScene(comp);
|
|
145
|
+
}, true);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Invokes a method on all components including children (if a method with that name exists) */
|
|
149
|
+
public static invokeOnChildren(go: Object3D | null | undefined, functionName: string, ...args: any) {
|
|
150
|
+
this.invoke(go, functionName, true, args);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Invokes a method on all components that have a method matching the provided name
|
|
154
|
+
* @param go object to invoke the method on all components
|
|
155
|
+
* @param functionName name of the method to invoke
|
|
156
|
+
*/
|
|
157
|
+
public static invoke(go: Object3D | null | undefined, functionName: string, children: boolean = false, ...args: any) {
|
|
158
|
+
if (!go) return;
|
|
159
|
+
this.foreachComponent(go, c => {
|
|
160
|
+
const fn = c[functionName];
|
|
161
|
+
if (fn && typeof fn === "function") {
|
|
162
|
+
fn?.call(c, ...args)
|
|
163
|
+
}
|
|
164
|
+
}, children);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Adds a new component to the provided object
|
|
169
|
+
* @param go object to add the component to
|
|
170
|
+
* @param type type of the component to add
|
|
171
|
+
* @param callAwake if true, the component will be added and awake will be called immediately
|
|
172
|
+
*/
|
|
173
|
+
public static addNewComponent<T>(go: IGameObject | Object3D, type: ConstructorConcrete<T>, callAwake: boolean = true): T {
|
|
174
|
+
const instance = new type();
|
|
175
|
+
//@ts-ignore
|
|
176
|
+
addNewComponent(go, instance, callAwake);
|
|
177
|
+
return instance
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Moves a component to a new object
|
|
182
|
+
* BEWARE: this does MOVE a component. If you want to add a new component use `addNewComponent`
|
|
183
|
+
* @param go component to move the component to
|
|
184
|
+
* @param instance component to move to the GO
|
|
185
|
+
*/
|
|
186
|
+
public static addComponent<T extends IComponent>(go: IGameObject | Object3D, instance: T | ConstructorConcrete<T>) {
|
|
187
|
+
return this.moveComponent(go, instance);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Moves a component to a new object
|
|
192
|
+
* @param go component to move the component to
|
|
193
|
+
* @param instance component to move to the GO
|
|
194
|
+
*/
|
|
195
|
+
public static moveComponent<T extends IComponent>(go: IGameObject | Object3D, instance: T | ConstructorConcrete<T>) {
|
|
196
|
+
return moveComponentInstance(go, instance);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** Removes a component from its object
|
|
200
|
+
* @param instance component to remove
|
|
201
|
+
*/
|
|
202
|
+
public static removeComponent<T extends IComponent>(instance: T): T {
|
|
203
|
+
removeComponent(instance.gameObject, instance as any);
|
|
204
|
+
return instance;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
public static getOrAddComponent<T extends IComponent>(go: IGameObject | Object3D, typeName: ConstructorConcrete<T>): T {
|
|
208
|
+
return getOrAddComponent<any>(go, typeName);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Gets a component on the provided object */
|
|
212
|
+
public static getComponent<T extends IComponent>(go: IGameObject | Object3D | null, typeName: Constructor<T> | null): T | null {
|
|
213
|
+
if (go === null) return null;
|
|
214
|
+
// if names are minified we could also use the type store and work with strings everywhere
|
|
215
|
+
// not ideal, but I dont know a good/sane way to do this otherwise
|
|
216
|
+
// const res = TypeStore.get(typeName);
|
|
217
|
+
// if(res) typeName = res;
|
|
218
|
+
return getComponent(go, typeName as any);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
public static getComponents<T extends IComponent>(go: IGameObject | Object3D | null, typeName: Constructor<T>, arr: T[] | null = null): T[] {
|
|
222
|
+
if (go === null) return arr ?? [];
|
|
223
|
+
return getComponents(go, typeName, arr);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
public static findByGuid(guid: string, hierarchy: Object3D): GameObject | Component | null | undefined {
|
|
227
|
+
const res = findByGuid(guid, hierarchy);
|
|
228
|
+
return res as GameObject | Component | null | undefined;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
public static findObjectOfType<T extends IComponent>(typeName: Constructor<T>, context?: Context | Object3D, includeInactive: boolean = true): T | null {
|
|
232
|
+
return findObjectOfType(typeName, context ?? Context.Current, includeInactive);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
public static findObjectsOfType<T extends IComponent>(typeName: Constructor<T>, context?: Context | Object3D): Array<T> {
|
|
236
|
+
const arr = [];
|
|
237
|
+
findObjectsOfType(typeName, arr, context);
|
|
238
|
+
return arr;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
public static getComponentInChildren<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>): T | null {
|
|
242
|
+
return getComponentInChildren(go, typeName);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
public static getComponentsInChildren<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>, arr: T[] | null = null): Array<T> {
|
|
246
|
+
return getComponentsInChildren<T>(go, typeName, arr ?? undefined) as T[]
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
public static getComponentInParent<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>): T | null {
|
|
250
|
+
return getComponentInParent(go, typeName);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
public static getComponentsInParent<T extends IComponent>(go: IGameObject | Object3D, typeName: Constructor<T>, arr: Array<T> | null = null): Array<T> {
|
|
254
|
+
return getComponentsInParent(go, typeName, arr);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
public static getAllComponents(go: IGameObject | Object3D): Behaviour[] {
|
|
258
|
+
const componentsList = go.userData?.components;
|
|
259
|
+
const newList = [...componentsList];
|
|
260
|
+
return newList;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
public static *iterateComponents(go: IGameObject | Object3D) {
|
|
264
|
+
const list = go?.userData?.components;
|
|
265
|
+
if (list && Array.isArray(list)) {
|
|
266
|
+
for (let i = 0; i < list.length; i++) {
|
|
267
|
+
yield list[i];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// these are implemented via threejs object extensions
|
|
273
|
+
abstract activeSelf: boolean;
|
|
274
|
+
|
|
275
|
+
// The actual implementation / prototype of threejs is modified in js-extensions/Object3D
|
|
276
|
+
abstract get transform(): GameObject;
|
|
277
|
+
|
|
278
|
+
/** creates a new component on this gameObject */
|
|
279
|
+
abstract addNewComponent<T>(type: ConstructorConcrete<T>): T | null;
|
|
280
|
+
/** adds an existing component to this gameObject */
|
|
281
|
+
abstract addComponent<T extends IComponent>(comp: T | ConstructorConcrete<T>): void;
|
|
282
|
+
abstract removeComponent(comp: Component): Component;
|
|
283
|
+
abstract getOrAddComponent<T>(typeName: ConstructorConcrete<T> | null): T;
|
|
284
|
+
abstract getComponent<T>(type: Constructor<T>): T | null;
|
|
285
|
+
abstract getComponents<T>(type: Constructor<T>, arr?: T[]): Array<T>;
|
|
286
|
+
abstract getComponentInChildren<T>(type: Constructor<T>): T | null;
|
|
287
|
+
abstract getComponentsInChildren<T>(type: Constructor<T>, arr?: T[]): Array<T>;
|
|
288
|
+
abstract getComponentInParent<T>(type: Constructor<T>): T | null;
|
|
289
|
+
abstract getComponentsInParent<T>(type: Constructor<T>, arr?: T[]): Array<T>;
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
abstract get worldPosition(): Vector3
|
|
293
|
+
abstract set worldPosition(val: Vector3);
|
|
294
|
+
abstract set worldQuaternion(val: Quaternion);
|
|
295
|
+
abstract get worldQuaternion(): Quaternion;
|
|
296
|
+
abstract set worldRotation(val: Vector3);
|
|
297
|
+
abstract get worldRotation(): Vector3;
|
|
298
|
+
abstract set worldScale(val: Vector3);
|
|
299
|
+
abstract get worldScale(): Vector3;
|
|
300
|
+
|
|
301
|
+
abstract get worldForward(): Vector3;
|
|
302
|
+
abstract get worldRight(): Vector3;
|
|
303
|
+
abstract get worldUp(): Vector3;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
export class Component implements IComponent, EventTarget {
|
|
309
|
+
|
|
310
|
+
get isComponent(): boolean { return true; }
|
|
311
|
+
|
|
312
|
+
private __context: Context | undefined;
|
|
313
|
+
get context(): Context {
|
|
314
|
+
return this.__context ?? Context.Current;
|
|
315
|
+
}
|
|
316
|
+
set context(context: Context) {
|
|
317
|
+
this.__context = context;
|
|
318
|
+
}
|
|
319
|
+
get scene(): Scene { return this.context.scene; }
|
|
320
|
+
|
|
321
|
+
get layer(): number {
|
|
322
|
+
return this.gameObject?.userData?.layer;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
get name(): string {
|
|
326
|
+
if (this.gameObject?.name) {
|
|
327
|
+
return this.gameObject.name;
|
|
328
|
+
}
|
|
329
|
+
return this.gameObject?.userData.name;
|
|
330
|
+
}
|
|
331
|
+
private __name?: string;
|
|
332
|
+
set name(str: string) {
|
|
333
|
+
if (this.gameObject) {
|
|
334
|
+
if (!this.gameObject.userData) this.gameObject.userData = {}
|
|
335
|
+
this.gameObject.userData.name = str;
|
|
336
|
+
this.__name = str;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
this.__name = str;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
get tag(): string {
|
|
343
|
+
return this.gameObject?.userData.tag;
|
|
344
|
+
}
|
|
345
|
+
set tag(str: string) {
|
|
346
|
+
if (this.gameObject) {
|
|
347
|
+
if (!this.gameObject.userData) this.gameObject.userData = {}
|
|
348
|
+
this.gameObject.userData.tag = str;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
get static() {
|
|
352
|
+
return this.gameObject?.userData.static;
|
|
353
|
+
}
|
|
354
|
+
get hideFlags(): HideFlags {
|
|
355
|
+
return this.gameObject?.userData.hideFlags;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
get activeAndEnabled(): boolean {
|
|
360
|
+
if (this.destroyed) return false;
|
|
361
|
+
if (this.__isEnabled === false) return false;
|
|
362
|
+
if (!this.__isActiveInHierarchy) return false;
|
|
363
|
+
// let go = this.gameObject;
|
|
364
|
+
// do {
|
|
365
|
+
// // console.log(go.name, go.visible)
|
|
366
|
+
// if (!go.visible) return false;
|
|
367
|
+
// go = go.parent as GameObject;
|
|
368
|
+
// }
|
|
369
|
+
// while (go);
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
private get __isActive(): boolean {
|
|
374
|
+
return this.gameObject.visible;
|
|
375
|
+
}
|
|
376
|
+
private get __isActiveInHierarchy(): boolean {
|
|
377
|
+
if (!this.gameObject) return false;
|
|
378
|
+
const res = this.gameObject[activeInHierarchyFieldName];
|
|
379
|
+
if (res === undefined) return true;
|
|
380
|
+
return res;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
private set __isActiveInHierarchy(val: boolean) {
|
|
384
|
+
if (!this.gameObject) return;
|
|
385
|
+
this.gameObject[activeInHierarchyFieldName] = val;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
gameObject!: GameObject;
|
|
389
|
+
guid: string = "invalid";
|
|
390
|
+
sourceId?: SourceIdentifier;
|
|
391
|
+
// transform: Object3D = nullObject;
|
|
392
|
+
|
|
393
|
+
/** called on a component with a map of old to new guids (e.g. when instantiate generated new guids and e.g. timeline track bindings needs to remape them) */
|
|
394
|
+
resolveGuids?(guidsMap: GuidsMap): void;
|
|
395
|
+
|
|
396
|
+
/** called once when the component becomes active for the first time */
|
|
397
|
+
awake() { }
|
|
398
|
+
/** called every time when the component gets enabled (this is invoked after awake and before start) */
|
|
399
|
+
onEnable() { }
|
|
400
|
+
onDisable() { }
|
|
401
|
+
onDestroy() {
|
|
402
|
+
this.__destroyed = true;
|
|
403
|
+
}
|
|
404
|
+
/** called when you decorate fields with the @validate() decorator
|
|
405
|
+
* @param field the name of the field that was changed
|
|
406
|
+
*/
|
|
407
|
+
onValidate?(prop?: string): void;
|
|
408
|
+
|
|
409
|
+
/** Called for all scripts when the context gets paused or unpaused */
|
|
410
|
+
onPausedChanged?(isPaused: boolean, wasPaused: boolean): void;
|
|
411
|
+
|
|
412
|
+
start?(): void;
|
|
413
|
+
earlyUpdate?(): void;
|
|
414
|
+
update?(): void;
|
|
415
|
+
lateUpdate?(): void;
|
|
416
|
+
onBeforeRender?(frame: XRFrame | null): void;
|
|
417
|
+
onAfterRender?(): void;
|
|
418
|
+
|
|
419
|
+
onCollisionEnter?(col: Collision);
|
|
420
|
+
onCollisionExit?(col: Collision);
|
|
421
|
+
onCollisionStay?(col: Collision);
|
|
422
|
+
|
|
423
|
+
onTriggerEnter?(col: ICollider);
|
|
424
|
+
onTriggerStay?(col: ICollider);
|
|
425
|
+
onTriggerExit?(col: ICollider);
|
|
426
|
+
|
|
427
|
+
startCoroutine(routine: Generator, evt: FrameEvent = FrameEvent.Update): Generator {
|
|
428
|
+
return this.context.registerCoroutineUpdate(this, routine, evt);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
stopCoroutine(routine: Generator, evt: FrameEvent = FrameEvent.Update): void {
|
|
432
|
+
this.context.unregisterCoroutineUpdate(routine, evt);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
public get destroyed(): boolean {
|
|
436
|
+
return this.__destroyed;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
public destroy() {
|
|
440
|
+
if (this.__destroyed) return;
|
|
441
|
+
this.__internalDestroy();
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
/** @internal */
|
|
447
|
+
protected __didAwake: boolean = false;
|
|
448
|
+
|
|
449
|
+
/** @internal */
|
|
450
|
+
private __didStart: boolean = false;
|
|
451
|
+
|
|
452
|
+
/** @internal */
|
|
453
|
+
protected __didEnable: boolean = false;
|
|
454
|
+
|
|
455
|
+
/** @internal */
|
|
456
|
+
protected __isEnabled: boolean | undefined = undefined;
|
|
457
|
+
|
|
458
|
+
/** @internal */
|
|
459
|
+
private __destroyed: boolean = false;
|
|
460
|
+
|
|
461
|
+
/** @internal */
|
|
462
|
+
get __internalDidAwakeAndStart() { return this.__didAwake && this.__didStart; }
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
/** @internal */
|
|
466
|
+
constructor() {
|
|
467
|
+
this.__internalNewInstanceCreated();
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
/** @internal */
|
|
472
|
+
__internalNewInstanceCreated() {
|
|
473
|
+
this.__didAwake = false;
|
|
474
|
+
this.__didStart = false;
|
|
475
|
+
this.__didEnable = false;
|
|
476
|
+
this.__isEnabled = undefined;
|
|
477
|
+
this.__destroyed = false;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
/** @internal */
|
|
482
|
+
__internalAwake() {
|
|
483
|
+
if (this.__didAwake) return;
|
|
484
|
+
this.__didAwake = true;
|
|
485
|
+
this.awake();
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
/** @internal */
|
|
490
|
+
__internalStart() {
|
|
491
|
+
if (this.__didStart) return;
|
|
492
|
+
this.__didStart = true;
|
|
493
|
+
if (this.start) this.start();
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
/** @internal */
|
|
498
|
+
__internalEnable(isAddingToScene?: boolean): boolean {
|
|
499
|
+
if (this.__destroyed) {
|
|
500
|
+
if (isDevEnvironment()) {
|
|
501
|
+
console.warn("[Needle Engine Dev] Trying to enable destroyed component");
|
|
502
|
+
}
|
|
503
|
+
return false;
|
|
504
|
+
}
|
|
505
|
+
// Don't change enable before awake
|
|
506
|
+
// But a user can change enable during awake
|
|
507
|
+
if (!this.__didAwake) return false;
|
|
508
|
+
if (this.__didEnable) {
|
|
509
|
+
// We dont want to change the enable state if we are adding to scene
|
|
510
|
+
// But we want to change the state when e.g. a user changes the enable state during awake
|
|
511
|
+
if (isAddingToScene !== true)
|
|
512
|
+
this.__isEnabled = true;
|
|
513
|
+
return false;
|
|
514
|
+
}
|
|
515
|
+
// console.trace("INTERNAL ENABLE");
|
|
516
|
+
this.__didEnable = true;
|
|
517
|
+
this.__isEnabled = true;
|
|
518
|
+
this.onEnable();
|
|
519
|
+
return true;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/** @internal */
|
|
523
|
+
__internalDisable(isRemovingFromScene?: boolean) {
|
|
524
|
+
// Don't change enable before awake
|
|
525
|
+
// But a user can change enable during awake
|
|
526
|
+
if (!this.__didAwake) return;
|
|
527
|
+
if (!this.__didEnable) {
|
|
528
|
+
// We dont want to change the enable state if we are removing from a scene
|
|
529
|
+
if (isRemovingFromScene !== true)
|
|
530
|
+
this.__isEnabled = false;
|
|
531
|
+
return;
|
|
532
|
+
}
|
|
533
|
+
this.__didEnable = false;
|
|
534
|
+
this.__isEnabled = false;
|
|
535
|
+
this.onDisable();
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/** @internal */
|
|
539
|
+
__internalDestroy() {
|
|
540
|
+
if (this.__destroyed) return;
|
|
541
|
+
this.__destroyed = true;
|
|
542
|
+
if (this.__didAwake) {
|
|
543
|
+
this.onDestroy?.call(this);
|
|
544
|
+
this.dispatchEvent(new CustomEvent("destroyed", { detail: this }));
|
|
545
|
+
}
|
|
546
|
+
destroyComponentInstance(this as any);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
get enabled(): boolean {
|
|
551
|
+
return typeof this.__isEnabled === "boolean" ? this.__isEnabled : true; // if it has no enabled field it is always enabled
|
|
552
|
+
}
|
|
553
|
+
set enabled(val: boolean) {
|
|
554
|
+
if (this.__destroyed) {
|
|
555
|
+
if (isDevEnvironment()) {
|
|
556
|
+
console.warn(`[Needle Engine Dev] Trying to ${val ? "enable" : "disable"} destroyed component`);
|
|
557
|
+
}
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
// when called from animationclip we receive numbers
|
|
561
|
+
// due to interpolation they can be anything between 0 and 1
|
|
562
|
+
if (typeof val === "number") {
|
|
563
|
+
if (val >= 0.5) val = true;
|
|
564
|
+
else val = false;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// need to check here because codegen is calling this before everything is setup
|
|
568
|
+
if (!this.__didAwake) {
|
|
569
|
+
this.__isEnabled = val;
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
if (val) {
|
|
573
|
+
this.__internalEnable();
|
|
574
|
+
} else {
|
|
575
|
+
this.__internalDisable();
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
get worldPosition(): Vector3 {
|
|
580
|
+
return threeutils.getWorldPosition(this.gameObject);
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
set worldPosition(val: Vector3) {
|
|
584
|
+
threeutils.setWorldPosition(this.gameObject, val);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
setWorldPosition(x: number, y: number, z: number) {
|
|
588
|
+
threeutils.setWorldPositionXYZ(this.gameObject, x, y, z);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
get worldQuaternion(): Quaternion {
|
|
593
|
+
return threeutils.getWorldQuaternion(this.gameObject);
|
|
594
|
+
}
|
|
595
|
+
set worldQuaternion(val: Quaternion) {
|
|
596
|
+
threeutils.setWorldQuaternion(this.gameObject, val);
|
|
597
|
+
}
|
|
598
|
+
setWorldQuaternion(x: number, y: number, z: number, w: number) {
|
|
599
|
+
threeutils.setWorldQuaternionXYZW(this.gameObject, x, y, z, w);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// world euler (in radians)
|
|
603
|
+
get worldEuler(): Euler {
|
|
604
|
+
return threeutils.getWorldEuler(this.gameObject);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// world euler (in radians)
|
|
608
|
+
set worldEuler(val: Euler) {
|
|
609
|
+
threeutils.setWorldEuler(this.gameObject, val);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// returns rotation in degrees
|
|
613
|
+
get worldRotation(): Vector3 {
|
|
614
|
+
return this.gameObject.worldRotation;;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
set worldRotation(val: Vector3) {
|
|
618
|
+
this.setWorldRotation(val.x, val.y, val.z, true);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
setWorldRotation(x: number, y: number, z: number, degrees: boolean = true) {
|
|
622
|
+
threeutils.setWorldRotationXYZ(this.gameObject, x, y, z, degrees);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
private static _forward: Vector3 = new Vector3();
|
|
626
|
+
/** Forward (0,0,-1) vector in world space */
|
|
627
|
+
public get forward(): Vector3 {
|
|
628
|
+
return Component._forward.set(0, 0, -1).applyQuaternion(this.worldQuaternion);
|
|
629
|
+
}
|
|
630
|
+
private static _right: Vector3 = new Vector3();
|
|
631
|
+
/** Right (1,0,0) vector in world space */
|
|
632
|
+
public get right(): Vector3 {
|
|
633
|
+
return Component._right.set(1, 0, 0).applyQuaternion(this.worldQuaternion);
|
|
634
|
+
}
|
|
635
|
+
private static _up: Vector3 = new Vector3();
|
|
636
|
+
/** Up (0,1,0) vector in world space */
|
|
637
|
+
public get up(): Vector3 {
|
|
638
|
+
return Component._up.set(0, 1, 0).applyQuaternion(this.worldQuaternion);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
// EventTarget implementation:
|
|
644
|
+
|
|
645
|
+
private _eventListeners = new Map<string, EventListener[]>();
|
|
646
|
+
|
|
647
|
+
addEventListener<T extends Event>(type: string, listener: (evt: T) => any) {
|
|
648
|
+
this._eventListeners[type] = this._eventListeners[type] || [];
|
|
649
|
+
this._eventListeners[type].push(listener);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
removeEventListener<T extends Event>(type: string, listener: (arg: T) => any) {
|
|
653
|
+
if (!this._eventListeners[type]) return;
|
|
654
|
+
const index = this._eventListeners[type].indexOf(listener);
|
|
655
|
+
if (index >= 0) this._eventListeners[type].splice(index, 1);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
dispatchEvent(evt: Event): boolean {
|
|
659
|
+
if (!evt || !this._eventListeners[evt.type]) return false;
|
|
660
|
+
const listeners = this._eventListeners[evt.type];
|
|
661
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
662
|
+
listeners[i](evt);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
return false;
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
export class Behaviour extends Component {
|
|
670
|
+
}
|