@needle-tools/engine 4.11.5-beta → 4.11.5-next.4201116
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 +7 -5
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-mO20N_b8.js +21 -0
- package/dist/{gltf-progressive-GwdQV1Qx.umd.cjs → gltf-progressive-DWcmTMCh.umd.cjs} +1 -1
- package/dist/{gltf-progressive-CftVUJy3.min.js → gltf-progressive-DZrY8VT6.min.js} +2 -2
- package/dist/{gltf-progressive-BvlZQAkt.js → gltf-progressive-DgYz5BYa.js} +19 -19
- package/dist/loader.worker-Dip-PthR.js +23 -0
- package/dist/{needle-engine.bundle-CtMdIm9E.umd.cjs → needle-engine.bundle-Cb9DQNr9.umd.cjs} +154 -159
- package/dist/{needle-engine.bundle-DLreKDiJ.js → needle-engine.bundle-D2l0lwCn.js} +6181 -6037
- package/dist/{needle-engine.bundle-78QepNU6.min.js → needle-engine.bundle-DaoW7sFK.min.js} +161 -166
- package/dist/needle-engine.d.ts +18189 -1
- package/dist/needle-engine.js +336 -335
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-CJC0Npcd.js → postprocessing-BTW9pD_s.js} +1822 -1723
- package/dist/{postprocessing-DrM4PWU3.umd.cjs → postprocessing-CMgoN5t5.umd.cjs} +229 -158
- package/dist/{postprocessing-l7zsdO_Q.min.js → postprocessing-DYDtB188.min.js} +227 -156
- package/dist/rapier-B3oL1ap-.js +5217 -0
- package/dist/rapier-DJ-luMxr.min.js +1 -0
- package/dist/rapier-DQltNJbN.umd.cjs +1 -0
- package/dist/{three-BDW9I486.min.js → three-B7CT31Bt.min.js} +1 -5
- package/dist/{three-MHVqtJYj.js → three-DfMvBzXi.js} +0 -5
- package/dist/{three-examples-CgwGHSgz.umd.cjs → three-examples-CsW4_6LI.umd.cjs} +2 -7
- package/dist/{three-examples-fvEPSC8L.min.js → three-examples-D1P7eEhn.min.js} +2 -7
- package/dist/{three-examples-C5Ht-QFN.js → three-examples-D1SK93ek.js} +1 -7
- package/dist/{three-mesh-ui-BjWTTk1R.js → three-mesh-ui-C_uSB5dD.js} +1 -1
- package/dist/{three-mesh-ui-Bm32sS2a.umd.cjs → three-mesh-ui-DpATDXwU.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-CLdkp21K.min.js → three-mesh-ui-LQ44s0AL.min.js} +1 -1
- package/dist/{three-iFaDq9U3.umd.cjs → three-qj71I7J3.umd.cjs} +2 -6
- package/dist/{vendor-CsyK1CFs.min.js → vendor-BKGa4GE0.min.js} +34 -39
- package/dist/{vendor-petGQl0N.js → vendor-D0zoswDa.js} +1626 -1605
- package/dist/{vendor-6kAXU6fm.umd.cjs → vendor-UCpFAwt1.umd.cjs} +30 -35
- package/lib/engine/debug/debug_spector.d.ts +16 -0
- package/lib/engine/debug/debug_spector.js +28 -0
- package/lib/engine/debug/debug_spector.js.map +1 -0
- package/lib/engine/engine_application.d.ts +7 -0
- package/lib/engine/engine_application.js +8 -1
- package/lib/engine/engine_application.js.map +1 -1
- package/lib/engine/engine_context.d.ts +15 -5
- package/lib/engine/engine_context.js +29 -5
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_loaders.d.ts +0 -6
- package/lib/engine/engine_loaders.js +5 -5
- package/lib/engine/engine_loaders.js.map +1 -1
- package/lib/engine/engine_physics.js +6 -2
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_physics_rapier.d.ts +11 -2
- package/lib/engine/engine_physics_rapier.js +9 -0
- package/lib/engine/engine_physics_rapier.js.map +1 -1
- package/lib/engine/engine_scenelighting.d.ts +12 -1
- package/lib/engine/engine_scenelighting.js +21 -1
- package/lib/engine/engine_scenelighting.js.map +1 -1
- package/lib/engine/engine_texture.d.ts +1 -1
- package/lib/engine/engine_tonemapping.d.ts +1 -1
- package/lib/engine/engine_types.d.ts +16 -0
- package/lib/engine/engine_typestore.d.ts +1 -0
- package/lib/engine/engine_typestore.js +5 -6
- package/lib/engine/engine_typestore.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_lightmaps.js +2 -2
- package/lib/engine/extensions/NEEDLE_lightmaps.js.map +1 -1
- package/lib/engine/extensions/extensions.d.ts +2 -2
- package/lib/engine/extensions/extensions.js +11 -5
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +11 -0
- package/lib/engine/webcomponents/logo-element.js +6 -0
- package/lib/engine/webcomponents/logo-element.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +24 -3
- package/lib/engine/webcomponents/needle menu/needle-menu.js +18 -3
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-button.d.ts +5 -0
- package/lib/engine/webcomponents/needle-button.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +11 -2
- package/lib/engine/webcomponents/needle-engine.d.ts +162 -8
- package/lib/engine/webcomponents/needle-engine.js +33 -7
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/xr/NeedleXRSession.js +2 -1
- package/lib/engine/xr/NeedleXRSession.js.map +1 -1
- package/lib/engine-components/AlignmentConstraint.d.ts +9 -0
- package/lib/engine-components/AlignmentConstraint.js +9 -0
- package/lib/engine-components/AlignmentConstraint.js.map +1 -1
- package/lib/engine-components/Animator.d.ts +1 -0
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AudioListener.d.ts +2 -0
- package/lib/engine-components/AudioListener.js +2 -0
- package/lib/engine-components/AudioListener.js.map +1 -1
- package/lib/engine-components/AudioSource.d.ts +1 -0
- package/lib/engine-components/AudioSource.js +1 -0
- package/lib/engine-components/AudioSource.js.map +1 -1
- package/lib/engine-components/AxesHelper.d.ts +2 -0
- package/lib/engine-components/AxesHelper.js +2 -0
- package/lib/engine-components/AxesHelper.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +1 -0
- package/lib/engine-components/Camera.js +1 -0
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CharacterController.d.ts +4 -1
- package/lib/engine-components/CharacterController.js +4 -1
- package/lib/engine-components/CharacterController.js.map +1 -1
- package/lib/engine-components/Component.d.ts +5 -0
- package/lib/engine-components/Component.js +7 -0
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/DeleteBox.d.ts +2 -0
- package/lib/engine-components/DeleteBox.js +2 -0
- package/lib/engine-components/DeleteBox.js.map +1 -1
- package/lib/engine-components/DeviceFlag.d.ts +4 -0
- package/lib/engine-components/DeviceFlag.js +4 -0
- package/lib/engine-components/DeviceFlag.js.map +1 -1
- package/lib/engine-components/DragControls.d.ts +1 -0
- package/lib/engine-components/DragControls.js +1 -0
- package/lib/engine-components/DragControls.js.map +1 -1
- package/lib/engine-components/DropListener.d.ts +1 -0
- package/lib/engine-components/DropListener.js +1 -0
- package/lib/engine-components/DropListener.js.map +1 -1
- package/lib/engine-components/Duplicatable.d.ts +1 -0
- package/lib/engine-components/Duplicatable.js +1 -0
- package/lib/engine-components/Duplicatable.js.map +1 -1
- package/lib/engine-components/EventTrigger.d.ts +2 -0
- package/lib/engine-components/EventTrigger.js +2 -0
- package/lib/engine-components/EventTrigger.js.map +1 -1
- package/lib/engine-components/GridHelper.d.ts +2 -0
- package/lib/engine-components/GridHelper.js +2 -0
- package/lib/engine-components/GridHelper.js.map +1 -1
- package/lib/engine-components/GroundProjection.d.ts +1 -0
- package/lib/engine-components/GroundProjection.js +1 -0
- package/lib/engine-components/GroundProjection.js.map +1 -1
- package/lib/engine-components/LODGroup.d.ts +2 -0
- package/lib/engine-components/LODGroup.js +2 -0
- package/lib/engine-components/LODGroup.js.map +1 -1
- package/lib/engine-components/Light.d.ts +1 -0
- package/lib/engine-components/Light.js +1 -0
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/LookAtConstraint.d.ts +1 -0
- package/lib/engine-components/LookAtConstraint.js +1 -0
- package/lib/engine-components/LookAtConstraint.js.map +1 -1
- package/lib/engine-components/NeedleMenu.d.ts +1 -0
- package/lib/engine-components/NeedleMenu.js +1 -0
- package/lib/engine-components/NeedleMenu.js.map +1 -1
- package/lib/engine-components/NestedGltf.d.ts +1 -0
- package/lib/engine-components/NestedGltf.js +1 -0
- package/lib/engine-components/NestedGltf.js.map +1 -1
- package/lib/engine-components/Networking.d.ts +1 -0
- package/lib/engine-components/Networking.js +1 -0
- package/lib/engine-components/Networking.js.map +1 -1
- package/lib/engine-components/OffsetConstraint.d.ts +7 -0
- package/lib/engine-components/OffsetConstraint.js +7 -0
- package/lib/engine-components/OffsetConstraint.js.map +1 -1
- package/lib/engine-components/OrbitControls.d.ts +1 -0
- package/lib/engine-components/OrbitControls.js +1 -0
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/PlayerColor.d.ts +2 -0
- package/lib/engine-components/PlayerColor.js +2 -0
- package/lib/engine-components/PlayerColor.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.d.ts +1 -0
- package/lib/engine-components/ReflectionProbe.js +17 -10
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/Renderer.js +2 -2
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/RendererInstancing.d.ts +5 -3
- package/lib/engine-components/RendererInstancing.js +64 -31
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/RigidBody.d.ts +1 -0
- package/lib/engine-components/RigidBody.js +1 -0
- package/lib/engine-components/RigidBody.js.map +1 -1
- package/lib/engine-components/SceneSwitcher.d.ts +1 -0
- package/lib/engine-components/SceneSwitcher.js +1 -0
- package/lib/engine-components/SceneSwitcher.js.map +1 -1
- package/lib/engine-components/ScreenCapture.d.ts +1 -0
- package/lib/engine-components/ScreenCapture.js +1 -0
- package/lib/engine-components/ScreenCapture.js.map +1 -1
- package/lib/engine-components/SeeThrough.d.ts +1 -0
- package/lib/engine-components/SeeThrough.js +1 -0
- package/lib/engine-components/SeeThrough.js.map +1 -1
- package/lib/engine-components/ShadowCatcher.d.ts +2 -0
- package/lib/engine-components/ShadowCatcher.js +2 -0
- package/lib/engine-components/ShadowCatcher.js.map +1 -1
- package/lib/engine-components/Skybox.d.ts +16 -5
- package/lib/engine-components/Skybox.js +38 -25
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/SmoothFollow.d.ts +1 -0
- package/lib/engine-components/SmoothFollow.js +1 -0
- package/lib/engine-components/SmoothFollow.js.map +1 -1
- package/lib/engine-components/SpatialTrigger.d.ts +1 -0
- package/lib/engine-components/SpatialTrigger.js +1 -0
- package/lib/engine-components/SpatialTrigger.js.map +1 -1
- package/lib/engine-components/SpectatorCamera.d.ts +1 -0
- package/lib/engine-components/SpectatorCamera.js +1 -0
- package/lib/engine-components/SpectatorCamera.js.map +1 -1
- package/lib/engine-components/SpriteRenderer.d.ts +1 -0
- package/lib/engine-components/SpriteRenderer.js +1 -0
- package/lib/engine-components/SpriteRenderer.js.map +1 -1
- package/lib/engine-components/SyncedCamera.d.ts +2 -0
- package/lib/engine-components/SyncedCamera.js +2 -0
- package/lib/engine-components/SyncedCamera.js.map +1 -1
- package/lib/engine-components/SyncedRoom.d.ts +1 -0
- package/lib/engine-components/SyncedRoom.js +1 -0
- package/lib/engine-components/SyncedRoom.js.map +1 -1
- package/lib/engine-components/SyncedTransform.d.ts +2 -0
- package/lib/engine-components/SyncedTransform.js +2 -0
- package/lib/engine-components/SyncedTransform.js.map +1 -1
- package/lib/engine-components/TransformGizmo.d.ts +2 -0
- package/lib/engine-components/TransformGizmo.js +2 -0
- package/lib/engine-components/TransformGizmo.js.map +1 -1
- package/lib/engine-components/VideoPlayer.d.ts +1 -0
- package/lib/engine-components/VideoPlayer.js +1 -0
- package/lib/engine-components/VideoPlayer.js.map +1 -1
- package/lib/engine-components/Voip.d.ts +1 -0
- package/lib/engine-components/Voip.js +1 -0
- package/lib/engine-components/Voip.js.map +1 -1
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +24 -3
- package/lib/engine-components/export/usdz/USDZExporter.js +36 -2
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +18 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +18 -0
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +1 -0
- package/lib/engine-components/particlesystem/ParticleSystem.js +1 -0
- package/lib/engine-components/particlesystem/ParticleSystem.js.map +1 -1
- package/lib/engine-components/physics/Attractor.d.ts +3 -0
- package/lib/engine-components/physics/Attractor.js +3 -0
- package/lib/engine-components/physics/Attractor.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +1 -0
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +1 -0
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +4 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +3 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +3 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +4 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +1 -0
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +1 -0
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +3 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +3 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +4 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +4 -0
- package/lib/engine-components/postprocessing/Effects/Sharpening.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +4 -0
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +4 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +4 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.js +4 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.js.map +1 -1
- package/lib/engine-components/postprocessing/Volume.d.ts +1 -0
- package/lib/engine-components/postprocessing/Volume.js +1 -0
- package/lib/engine-components/postprocessing/Volume.js.map +1 -1
- package/lib/engine-components/splines/Spline.d.ts +1 -0
- package/lib/engine-components/splines/Spline.js +1 -0
- package/lib/engine-components/splines/Spline.js.map +1 -1
- package/lib/engine-components/splines/SplineWalker.d.ts +1 -0
- package/lib/engine-components/splines/SplineWalker.js +1 -0
- package/lib/engine-components/splines/SplineWalker.js.map +1 -1
- package/lib/engine-components/timeline/PlayableDirector.d.ts +1 -0
- package/lib/engine-components/timeline/PlayableDirector.js +1 -0
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/timeline/SignalAsset.d.ts +1 -0
- package/lib/engine-components/timeline/SignalAsset.js +1 -0
- package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
- package/lib/engine-components/ui/Button.d.ts +4 -0
- package/lib/engine-components/ui/Button.js +4 -0
- package/lib/engine-components/ui/Button.js.map +1 -1
- package/lib/engine-components/ui/Canvas.d.ts +5 -0
- package/lib/engine-components/ui/Canvas.js +5 -0
- package/lib/engine-components/ui/Canvas.js.map +1 -1
- package/lib/engine-components/ui/CanvasGroup.d.ts +4 -0
- package/lib/engine-components/ui/CanvasGroup.js +4 -0
- package/lib/engine-components/ui/CanvasGroup.js.map +1 -1
- package/lib/engine-components/ui/EventSystem.d.ts +2 -0
- package/lib/engine-components/ui/EventSystem.js +2 -0
- package/lib/engine-components/ui/EventSystem.js.map +1 -1
- package/lib/engine-components/ui/Image.d.ts +4 -0
- package/lib/engine-components/ui/Image.js +4 -0
- package/lib/engine-components/ui/Image.js.map +1 -1
- package/lib/engine-components/ui/InputField.d.ts +4 -0
- package/lib/engine-components/ui/InputField.js +4 -0
- package/lib/engine-components/ui/InputField.js.map +1 -1
- package/lib/engine-components/ui/Outline.d.ts +7 -0
- package/lib/engine-components/ui/Outline.js +7 -0
- package/lib/engine-components/ui/Outline.js.map +1 -1
- package/lib/engine-components/ui/Text.d.ts +1 -0
- package/lib/engine-components/ui/Text.js +1 -0
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components/utils/LookAt.d.ts +1 -0
- package/lib/engine-components/utils/LookAt.js +1 -0
- package/lib/engine-components/utils/LookAt.js.map +1 -1
- package/lib/engine-components/web/Clickthrough.d.ts +1 -1
- package/lib/engine-components/web/Clickthrough.js +1 -1
- package/lib/engine-components/web/CursorFollow.d.ts +2 -0
- package/lib/engine-components/web/CursorFollow.js +3 -0
- package/lib/engine-components/web/CursorFollow.js.map +1 -1
- package/lib/engine-components/web/HoverAnimation.d.ts +1 -0
- package/lib/engine-components/web/HoverAnimation.js +1 -0
- package/lib/engine-components/web/HoverAnimation.js.map +1 -1
- package/lib/engine-components/web/ScrollFollow.d.ts +2 -0
- package/lib/engine-components/web/ScrollFollow.js +2 -0
- package/lib/engine-components/web/ScrollFollow.js.map +1 -1
- package/lib/engine-components/web/ViewBox.d.ts +1 -0
- package/lib/engine-components/web/ViewBox.js +1 -0
- package/lib/engine-components/web/ViewBox.js.map +1 -1
- package/lib/engine-components/webxr/Avatar.d.ts +5 -0
- package/lib/engine-components/webxr/Avatar.js +5 -0
- package/lib/engine-components/webxr/Avatar.js.map +1 -1
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +1 -0
- package/lib/engine-components/webxr/WebARCameraBackground.js +1 -0
- package/lib/engine-components/webxr/WebARCameraBackground.js.map +1 -1
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +1 -0
- package/lib/engine-components/webxr/WebARSessionRoot.js +1 -0
- package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -1
- package/lib/engine-components/webxr/WebXR.d.ts +1 -1
- package/lib/engine-components/webxr/WebXR.js +5 -1
- package/lib/engine-components/webxr/WebXR.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +1 -0
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +1 -0
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +4 -0
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +5 -1
- package/lib/engine-components/webxr/controllers/XRControllerModel.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +1 -0
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +1 -0
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js.map +1 -1
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +2 -0
- package/lib/engine-components-experimental/networking/PlayerSync.js +2 -0
- package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
- package/lib/needle-engine.js +2 -1
- package/lib/needle-engine.js.map +1 -1
- package/package.json +18 -12
- package/plugins/types/needleConfig.d.ts +1 -1
- package/plugins/types/next.d.ts +1 -1
- package/plugins/types/userconfig.d.ts +1 -1
- package/src/engine/debug/debug_spector.ts +43 -0
- package/src/engine/engine_application.ts +16 -1
- package/src/engine/engine_context.ts +41 -7
- package/src/engine/engine_loaders.ts +6 -6
- package/src/engine/engine_physics.ts +6 -2
- package/src/engine/engine_physics_rapier.ts +11 -2
- package/src/engine/engine_scenelighting.ts +30 -8
- package/src/engine/engine_texture.ts +1 -1
- package/src/engine/engine_tonemapping.ts +1 -1
- package/src/engine/engine_types.ts +17 -0
- package/src/engine/engine_typestore.ts +5 -6
- package/src/engine/extensions/NEEDLE_lightmaps.ts +2 -2
- package/src/engine/extensions/extensions.ts +11 -5
- package/src/engine/webcomponents/logo-element.ts +12 -0
- package/src/engine/webcomponents/needle menu/needle-menu.ts +24 -3
- package/src/engine/webcomponents/needle-button.ts +6 -0
- package/src/engine/webcomponents/needle-engine.attributes.ts +12 -3
- package/src/engine/webcomponents/needle-engine.ts +165 -13
- package/src/engine/xr/NeedleXRSession.ts +3 -1
- package/src/engine-components/AlignmentConstraint.ts +9 -0
- package/src/engine-components/Animator.ts +1 -0
- package/src/engine-components/AudioListener.ts +2 -0
- package/src/engine-components/AudioSource.ts +1 -0
- package/src/engine-components/AxesHelper.ts +2 -0
- package/src/engine-components/Camera.ts +1 -0
- package/src/engine-components/CharacterController.ts +4 -1
- package/src/engine-components/Component.ts +9 -1
- package/src/engine-components/DeleteBox.ts +2 -0
- package/src/engine-components/DeviceFlag.ts +4 -0
- package/src/engine-components/DragControls.ts +1 -0
- package/src/engine-components/DropListener.ts +1 -0
- package/src/engine-components/Duplicatable.ts +1 -0
- package/src/engine-components/EventTrigger.ts +2 -0
- package/src/engine-components/GridHelper.ts +2 -0
- package/src/engine-components/GroundProjection.ts +1 -0
- package/src/engine-components/LODGroup.ts +2 -0
- package/src/engine-components/Light.ts +1 -0
- package/src/engine-components/LookAtConstraint.ts +1 -0
- package/src/engine-components/NeedleMenu.ts +1 -0
- package/src/engine-components/NestedGltf.ts +1 -0
- package/src/engine-components/Networking.ts +1 -0
- package/src/engine-components/OffsetConstraint.ts +7 -0
- package/src/engine-components/OrbitControls.ts +1 -0
- package/src/engine-components/PlayerColor.ts +2 -0
- package/src/engine-components/ReflectionProbe.ts +19 -10
- package/src/engine-components/Renderer.ts +2 -2
- package/src/engine-components/RendererInstancing.ts +69 -33
- package/src/engine-components/RigidBody.ts +1 -0
- package/src/engine-components/SceneSwitcher.ts +1 -0
- package/src/engine-components/ScreenCapture.ts +1 -0
- package/src/engine-components/SeeThrough.ts +1 -0
- package/src/engine-components/ShadowCatcher.ts +2 -0
- package/src/engine-components/Skybox.ts +48 -36
- package/src/engine-components/SmoothFollow.ts +1 -0
- package/src/engine-components/SpatialTrigger.ts +1 -0
- package/src/engine-components/SpectatorCamera.ts +1 -0
- package/src/engine-components/SpriteRenderer.ts +1 -0
- package/src/engine-components/SyncedCamera.ts +2 -0
- package/src/engine-components/SyncedRoom.ts +1 -0
- package/src/engine-components/SyncedTransform.ts +2 -0
- package/src/engine-components/TransformGizmo.ts +2 -0
- package/src/engine-components/VideoPlayer.ts +1 -0
- package/src/engine-components/Voip.ts +1 -0
- package/src/engine-components/export/usdz/USDZExporter.ts +52 -5
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +18 -0
- package/src/engine-components/particlesystem/ParticleSystem.ts +1 -0
- package/src/engine-components/physics/Attractor.ts +3 -0
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +1 -0
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +4 -0
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +3 -0
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +4 -0
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +1 -0
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +3 -0
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +4 -0
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +4 -0
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +4 -0
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +4 -0
- package/src/engine-components/postprocessing/Effects/Vignette.ts +4 -0
- package/src/engine-components/postprocessing/Volume.ts +1 -0
- package/src/engine-components/splines/Spline.ts +1 -0
- package/src/engine-components/splines/SplineWalker.ts +1 -0
- package/src/engine-components/timeline/PlayableDirector.ts +1 -0
- package/src/engine-components/timeline/SignalAsset.ts +1 -0
- package/src/engine-components/ui/Button.ts +4 -0
- package/src/engine-components/ui/Canvas.ts +5 -0
- package/src/engine-components/ui/CanvasGroup.ts +4 -0
- package/src/engine-components/ui/EventSystem.ts +2 -0
- package/src/engine-components/ui/Image.ts +4 -0
- package/src/engine-components/ui/InputField.ts +4 -0
- package/src/engine-components/ui/Outline.ts +7 -0
- package/src/engine-components/ui/Text.ts +1 -0
- package/src/engine-components/utils/LookAt.ts +1 -0
- package/src/engine-components/web/Clickthrough.ts +1 -1
- package/src/engine-components/web/CursorFollow.ts +4 -0
- package/src/engine-components/web/HoverAnimation.ts +1 -0
- package/src/engine-components/web/ScrollFollow.ts +2 -0
- package/src/engine-components/web/ViewBox.ts +1 -0
- package/src/engine-components/webxr/Avatar.ts +5 -0
- package/src/engine-components/webxr/WebARCameraBackground.ts +1 -0
- package/src/engine-components/webxr/WebARSessionRoot.ts +1 -0
- package/src/engine-components/webxr/WebXR.ts +5 -1
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +1 -0
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +5 -1
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +1 -0
- package/src/engine-components-experimental/networking/PlayerSync.ts +2 -0
- package/src/needle-engine.ts +4 -2
- package/dist/generateMeshBVH.worker-B9bjdr6J.js +0 -25
- package/dist/loader.worker-CiTwpNPW.js +0 -27
- package/dist/rapier-BqdcSmKY.umd.cjs +0 -1
- package/dist/rapier-Cg3w3nFI.min.js +0 -1
- package/dist/rapier-sU12SWAs.js +0 -5217
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EquirectangularReflectionMapping, LightProbe, SphericalHarmonics3, SRGBColorSpace,Texture, Vector4, WebGLCubeRenderTarget } from "three";
|
|
1
|
+
import { EquirectangularReflectionMapping, LightProbe, Source, SphericalHarmonics3, SRGBColorSpace, Texture, Vector4, WebGLCubeRenderTarget } from "three";
|
|
2
2
|
|
|
3
3
|
import { AssetReference } from "./engine_addressables.js";
|
|
4
4
|
import { Context } from "./engine_setup.js";
|
|
@@ -44,9 +44,16 @@ export class RendererData {
|
|
|
44
44
|
this.context.pre_update_callbacks.push(this.preUpdate.bind(this))
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The id of the currently active scene light settings (source identifier).
|
|
49
|
+
*/
|
|
47
50
|
private _currentLightSettingsId?: SourceIdentifier;
|
|
48
51
|
private _sceneLightSettings?: Map<SourceIdentifier, SceneLightSettings>;
|
|
49
52
|
|
|
53
|
+
get currentLightSettingsId(): SourceIdentifier | undefined {
|
|
54
|
+
return this._currentLightSettingsId;
|
|
55
|
+
}
|
|
56
|
+
|
|
50
57
|
private preUpdate() {
|
|
51
58
|
const time = this.context.time;
|
|
52
59
|
this._timevec4.x = time.time;
|
|
@@ -82,11 +89,11 @@ export class RendererData {
|
|
|
82
89
|
|
|
83
90
|
/** set the scene lighting from a specific scene. Will disable any previously enabled lighting settings */
|
|
84
91
|
enable(sourceId: SourceIdentifier | AssetReference) {
|
|
85
|
-
if(sourceId instanceof AssetReference)
|
|
92
|
+
if (sourceId instanceof AssetReference)
|
|
86
93
|
sourceId = sourceId.url;
|
|
87
94
|
const settings = this._sceneLightSettings?.get(sourceId);
|
|
88
95
|
if (!settings) {
|
|
89
|
-
if(debug) console.warn("No light settings found for", sourceId);
|
|
96
|
+
if (debug) console.warn("No light settings found for", sourceId);
|
|
90
97
|
return false;
|
|
91
98
|
}
|
|
92
99
|
if (debug) console.log("Enable scene light settings", sourceId, settings);
|
|
@@ -100,7 +107,7 @@ export class RendererData {
|
|
|
100
107
|
|
|
101
108
|
/** disable the lighting of a specific scene, will only have any effect if it is currently active */
|
|
102
109
|
disable(sourceId: SourceIdentifier | AssetReference) {
|
|
103
|
-
if(sourceId instanceof AssetReference)
|
|
110
|
+
if (sourceId instanceof AssetReference)
|
|
104
111
|
sourceId = sourceId.url;
|
|
105
112
|
if (sourceId === null || sourceId === undefined) return false;
|
|
106
113
|
const settings = this._sceneLightSettings?.get(sourceId);
|
|
@@ -112,8 +119,22 @@ export class RendererData {
|
|
|
112
119
|
return true;
|
|
113
120
|
}
|
|
114
121
|
|
|
115
|
-
/**
|
|
116
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Enables the currently active scene lighting (if any), returns the id of the enabled lighting.
|
|
124
|
+
* @returns The id of the enabled lighting, or null if no lighting is currently active.
|
|
125
|
+
*/
|
|
126
|
+
enableCurrent(): SourceIdentifier | null {
|
|
127
|
+
if (this._currentLightSettingsId) {
|
|
128
|
+
this.enable(this._currentLightSettingsId);
|
|
129
|
+
return this._currentLightSettingsId ?? null;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Disables the currently active scene lighting (if any), returns the id of the previously active lighting
|
|
135
|
+
* @returns The id of the previously active lighting, or null if no lighting was active.
|
|
136
|
+
*/
|
|
137
|
+
disableCurrent(): SourceIdentifier | null {
|
|
117
138
|
if (this._currentLightSettingsId) {
|
|
118
139
|
const prev = this._currentLightSettingsId;
|
|
119
140
|
this.disable(this._currentLightSettingsId);
|
|
@@ -162,7 +183,7 @@ export class RendererData {
|
|
|
162
183
|
private __currentReflectionId: SourceIdentifier | null = null;
|
|
163
184
|
|
|
164
185
|
/** @internal */
|
|
165
|
-
internalEnableReflection(sourceId: SourceIdentifier)
|
|
186
|
+
internalEnableReflection(sourceId: SourceIdentifier): Texture | null {
|
|
166
187
|
this.__currentReflectionId = sourceId;
|
|
167
188
|
const settings = this._sceneLightSettings?.get(sourceId);
|
|
168
189
|
|
|
@@ -181,6 +202,7 @@ export class RendererData {
|
|
|
181
202
|
const tex = existing.Source;
|
|
182
203
|
tex.mapping = EquirectangularReflectionMapping;
|
|
183
204
|
scene.environment = tex;
|
|
205
|
+
scene.environmentIntensity = this.environmentIntensity || 1;
|
|
184
206
|
return tex;
|
|
185
207
|
}
|
|
186
208
|
else if (debug) console.warn("Could not find reflection for source", sourceId);
|
|
@@ -216,7 +238,7 @@ export class RendererData {
|
|
|
216
238
|
/** @internal */
|
|
217
239
|
internalDisableReflection(sourceId?: SourceIdentifier) {
|
|
218
240
|
if (sourceId && sourceId !== this.__currentReflectionId) {
|
|
219
|
-
if(debug) console.log("Not disabling reflection for", sourceId, "because it is not the current light settings id", this.__currentReflectionId)
|
|
241
|
+
if (debug) console.log("Not disabling reflection for", sourceId, "because it is not the current light settings id", this.__currentReflectionId)
|
|
220
242
|
return;
|
|
221
243
|
}
|
|
222
244
|
if (debug) console.log("Disable reflection", sourceId)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EffectComposer } from "postprocessing";
|
|
2
2
|
import { Camera, Mesh, Object3D, Texture, WebGLRenderer, WebGLRenderTarget } from "three";
|
|
3
|
-
import type { EffectComposer as ThreeEffectComposer } from "three/examples/jsm/postprocessing/EffectComposer";
|
|
3
|
+
import type { EffectComposer as ThreeEffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
|
|
4
4
|
|
|
5
5
|
import { findResourceUsers } from "./engine_assetdatabase.js";
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ACESFilmicToneMapping, AgXToneMapping, NeutralToneMapping, NoToneMapping, ShaderChunk, ToneMapping } from "three";
|
|
2
2
|
|
|
3
3
|
import { isDevEnvironment } from "./debug/index.js";
|
|
4
|
-
import type { Context } from "./engine_setup";
|
|
4
|
+
import type { Context } from "./engine_setup.js";
|
|
5
5
|
|
|
6
6
|
let patchedTonemapping = false;
|
|
7
7
|
export function patchTonemapping(_ctx?: Context) {
|
|
@@ -566,6 +566,23 @@ export interface IPhysicsEngine {
|
|
|
566
566
|
*/
|
|
567
567
|
boxOverlap(point: Vector3, size: Vector3, rotation: Vector4Like | null): Array<ShapeOverlapResult>;
|
|
568
568
|
|
|
569
|
+
/**
|
|
570
|
+
* Creates a collider in the physics world.
|
|
571
|
+
*
|
|
572
|
+
* @param collider - The collider component.
|
|
573
|
+
* @param desc - The collider description.
|
|
574
|
+
* @returns The created collider.
|
|
575
|
+
*
|
|
576
|
+
* @throws Will throw an error if the physics world is not initialized. Make sure to call `initialize()` before creating colliders.
|
|
577
|
+
*
|
|
578
|
+
* @example
|
|
579
|
+
* ```typescript
|
|
580
|
+
* const boxColliderDesc = NEEDLE_ENGINE_MODULES.RAPIER_PHYSICS.MODULE.ColliderDesc.cuboid(1, 1, 1);
|
|
581
|
+
* const collider = physicsEngine.createCollider(myBoxColliderComponent, boxColliderDesc);
|
|
582
|
+
* ```
|
|
583
|
+
*/
|
|
584
|
+
createCollider(collider: ICollider, desc: any): any;
|
|
585
|
+
|
|
569
586
|
// Collider methods
|
|
570
587
|
/**
|
|
571
588
|
* Adds a sphere collider to the physics world
|
|
@@ -7,6 +7,7 @@ declare type Type = new (...args: any[]) => any;
|
|
|
7
7
|
class _TypeStore {
|
|
8
8
|
|
|
9
9
|
private _types: Map<string, Type> = new Map();
|
|
10
|
+
private _reverseTypes: Map<Type, string> = new Map();
|
|
10
11
|
|
|
11
12
|
constructor() {
|
|
12
13
|
if (debug) console.warn("TypeStore: Created", this);
|
|
@@ -18,8 +19,10 @@ class _TypeStore {
|
|
|
18
19
|
public add(key: string, type: Type) {
|
|
19
20
|
if (debug) console.warn("ADD TYPE", key);
|
|
20
21
|
const existing = this._types.get(key);
|
|
21
|
-
if (!existing)
|
|
22
|
+
if (!existing) {
|
|
22
23
|
this._types.set(key, type);
|
|
24
|
+
this._reverseTypes.set(type, key);
|
|
25
|
+
}
|
|
23
26
|
else {
|
|
24
27
|
if (debug) {
|
|
25
28
|
if (existing !== type) {
|
|
@@ -40,11 +43,7 @@ class _TypeStore {
|
|
|
40
43
|
* @returns the key/name for the given type if registered
|
|
41
44
|
*/
|
|
42
45
|
public getKey(type: Type): string | null {
|
|
43
|
-
|
|
44
|
-
if (value === type)
|
|
45
|
-
return key;
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
46
|
+
return this._reverseTypes.get(type) || null;
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
|
|
@@ -95,8 +95,8 @@ export class NEEDLE_lightmaps implements GLTFLoaderPlugin {
|
|
|
95
95
|
}
|
|
96
96
|
const results = await PromiseAllWithErrors(dependencies);
|
|
97
97
|
if (results?.anyFailed) {
|
|
98
|
-
if (isDevEnvironment())
|
|
99
|
-
console.error("
|
|
98
|
+
if (isDevEnvironment() || debug)
|
|
99
|
+
console.error("[NEEDLE_lightmaps]Error during extension loading:", results);
|
|
100
100
|
}
|
|
101
101
|
resolve();
|
|
102
102
|
});
|
|
@@ -92,18 +92,24 @@ class PointerResolver {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
export async function registerExtensions(loader: GLTFLoader, context: Context, url: string) {
|
|
95
|
+
export async function registerExtensions(loader: GLTFLoader, context: Context, url: string, sourceId: SourceIdentifier) {
|
|
96
96
|
|
|
97
97
|
// Make sure to remove any url parameters from the sourceId (because the source id in the renderer does not have a ?v=xxx so it will not be able to register the resolved lightmap otherwise)
|
|
98
98
|
const idEnd = url.indexOf("?");
|
|
99
99
|
if (idEnd >= 0) url = url.substring(0, idEnd);
|
|
100
|
+
if (!sourceId) {
|
|
101
|
+
sourceId = url;
|
|
102
|
+
}
|
|
103
|
+
if (sourceId.startsWith("blob:") || sourceId.startsWith("data:")) {
|
|
104
|
+
console.debug("[GLTFLoader] Suspicious sourceId detected");
|
|
105
|
+
}
|
|
100
106
|
|
|
101
107
|
loader.register(p => new NEEDLE_gameobject_data(p));
|
|
102
108
|
loader.register(p => new NEEDLE_persistent_assets(p));
|
|
103
|
-
loader.register(p => new NEEDLE_lightmaps(p, context.lightmaps,
|
|
104
|
-
loader.register(p => new NEEDLE_lighting_settings(p,
|
|
105
|
-
loader.register(p => new NEEDLE_techniques_webgl(p,
|
|
106
|
-
loader.register(p => new NEEDLE_render_objects(p,
|
|
109
|
+
loader.register(p => new NEEDLE_lightmaps(p, context.lightmaps, sourceId));
|
|
110
|
+
loader.register(p => new NEEDLE_lighting_settings(p, sourceId, context));
|
|
111
|
+
loader.register(p => new NEEDLE_techniques_webgl(p, sourceId));
|
|
112
|
+
loader.register(p => new NEEDLE_render_objects(p, sourceId));
|
|
107
113
|
loader.register(p => new NEEDLE_progressive(p));
|
|
108
114
|
loader.register(p => new EXT_texture_exr(p));
|
|
109
115
|
if (isResourceTrackingEnabled()) loader.register(p => new InternalUsageTrackerPlugin(p))
|
|
@@ -2,6 +2,16 @@ import { madeWithNeedleSVG, needleLogoOnlySVG, needleLogoSVG } from "../assets/i
|
|
|
2
2
|
|
|
3
3
|
const elementName = "needle-logo-element";
|
|
4
4
|
|
|
5
|
+
declare global {
|
|
6
|
+
interface HTMLElementTagNameMap {
|
|
7
|
+
"needle-logo-element": NeedleLogoElement;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Needle logo web component used in the hosting UI (small, compact logo or full)
|
|
13
|
+
* @element needle-logo-element
|
|
14
|
+
*/
|
|
5
15
|
export class NeedleLogoElement extends HTMLElement {
|
|
6
16
|
|
|
7
17
|
static get elementName() { return elementName; }
|
|
@@ -83,10 +93,12 @@ export class NeedleLogoElement extends HTMLElement {
|
|
|
83
93
|
private readonly wrapper: HTMLDivElement;
|
|
84
94
|
private readonly logoElement: HTMLImageElement;
|
|
85
95
|
|
|
96
|
+
/** Show or hide the logo element (used by the menu) */
|
|
86
97
|
setLogoVisible(val: boolean) {
|
|
87
98
|
this.logoElement.style.display = val ? "block" : "none";
|
|
88
99
|
}
|
|
89
100
|
|
|
101
|
+
/** Switch the logo between full and compact versions */
|
|
90
102
|
setType(type: "full" | "compact") {
|
|
91
103
|
if (type === "full") {
|
|
92
104
|
this.logoElement.src = needleLogoSVG;
|
|
@@ -9,6 +9,12 @@ import { getIconElement } from "../icons.js";
|
|
|
9
9
|
import { NeedleLogoElement } from "../logo-element.js";
|
|
10
10
|
import { NeedleSpatialMenu } from "./needle-menu-spatial.js";
|
|
11
11
|
|
|
12
|
+
declare global {
|
|
13
|
+
interface HTMLElementTagNameMap {
|
|
14
|
+
"needle-logo-element": NeedleLogoElement;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
12
18
|
const elementName = "needle-menu";
|
|
13
19
|
const debug = getParam("debugmenu");
|
|
14
20
|
const debugNonCommercial = getParam("debugnoncommercial");
|
|
@@ -264,6 +270,16 @@ export class NeedleMenu {
|
|
|
264
270
|
|
|
265
271
|
}
|
|
266
272
|
|
|
273
|
+
/**
|
|
274
|
+
* `<needle-menu>` web component — lightweight menu used by Needle Engine.
|
|
275
|
+
*
|
|
276
|
+
* This element is intended as an internal UI primitive for hosting application
|
|
277
|
+
* menus and buttons. Use the higher-level `NeedleMenu` API from the engine
|
|
278
|
+
* code to manipulate it programmatically. Public DOM-facing methods are
|
|
279
|
+
* documented (appendChild / append / prepend / setPosition / setVisible).
|
|
280
|
+
*
|
|
281
|
+
* @element needle-menu
|
|
282
|
+
*/
|
|
267
283
|
export class NeedleMenuElement extends HTMLElement {
|
|
268
284
|
|
|
269
285
|
static create() {
|
|
@@ -851,6 +867,7 @@ export class NeedleMenuElement extends HTMLElement {
|
|
|
851
867
|
}
|
|
852
868
|
}
|
|
853
869
|
|
|
870
|
+
/** @private user preference for logo visibility */
|
|
854
871
|
private _userRequestedLogoVisible?: boolean = undefined;
|
|
855
872
|
showNeedleLogo(visible: boolean) {
|
|
856
873
|
this._userRequestedLogoVisible = visible;
|
|
@@ -891,6 +908,7 @@ export class NeedleMenuElement extends HTMLElement {
|
|
|
891
908
|
this.root.classList.add(position);
|
|
892
909
|
}
|
|
893
910
|
|
|
911
|
+
/** @private user preference for menu visibility */
|
|
894
912
|
private _userRequestedMenuVisible?: boolean = undefined;
|
|
895
913
|
setVisible(visible: boolean) {
|
|
896
914
|
this._userRequestedMenuVisible = visible;
|
|
@@ -905,14 +923,17 @@ export class NeedleMenuElement extends HTMLElement {
|
|
|
905
923
|
}
|
|
906
924
|
|
|
907
925
|
// private _root: ShadowRoot | null = null;
|
|
926
|
+
/** @private root container element inside shadow DOM */
|
|
908
927
|
private readonly root: HTMLDivElement;
|
|
909
|
-
/** wraps the whole content */
|
|
928
|
+
/** @private wraps the whole content (internal layout) */
|
|
910
929
|
private readonly wrapper: HTMLDivElement;
|
|
911
|
-
/** contains the buttons and dynamic elements */
|
|
930
|
+
/** @private contains the buttons and dynamic elements */
|
|
912
931
|
private readonly options: HTMLDivElement;
|
|
913
|
-
/** contains the needle-logo html element */
|
|
932
|
+
/** @private contains the needle-logo html element */
|
|
914
933
|
private readonly logoContainer: HTMLDivElement;
|
|
934
|
+
/** @private compact menu button element */
|
|
915
935
|
private readonly compactMenuButton: HTMLButtonElement;
|
|
936
|
+
/** @private foldout container used in compact mode */
|
|
916
937
|
private readonly foldout: HTMLDivElement;
|
|
917
938
|
|
|
918
939
|
append(...nodes: (string | Node)[]): void {
|
|
@@ -2,6 +2,12 @@ import { isDevEnvironment } from "../debug/index.js";
|
|
|
2
2
|
import { iconFontUrl, loadFont } from "./fonts.js";
|
|
3
3
|
import { WebXRButtonFactory } from "./WebXRButtons.js";
|
|
4
4
|
|
|
5
|
+
declare global {
|
|
6
|
+
interface HTMLElementTagNameMap {
|
|
7
|
+
"needle-button": NeedleButtonElement;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
5
11
|
const htmlTagName = "needle-button";
|
|
6
12
|
const isDev = isDevEnvironment();
|
|
7
13
|
|
|
@@ -28,6 +28,14 @@ type MainAttributes = {
|
|
|
28
28
|
|
|
29
29
|
addEventListener?(event: "ready", callback: (event: CustomEvent) => void): void;
|
|
30
30
|
addEventListener?(event: "error", callback: (event: CustomEvent) => void): void;
|
|
31
|
+
addEventListener?(event: "loadstart", callback: (event: CustomEvent) => void): void;
|
|
32
|
+
addEventListener?(event: "progress", callback: (event: CustomEvent) => void): void;
|
|
33
|
+
addEventListener?(event: "loadfinished", callback: (event: CustomEvent) => void): void;
|
|
34
|
+
addEventListener?(event: "xr-session-ended", callback: (event: CustomEvent) => void): void;
|
|
35
|
+
addEventListener?(event: "enter-ar", callback: (event: CustomEvent) => void): void;
|
|
36
|
+
addEventListener?(event: "exit-ar", callback: (event: CustomEvent) => void): void;
|
|
37
|
+
addEventListener?(event: "enter-vr", callback: (event: CustomEvent) => void): void;
|
|
38
|
+
addEventListener?(event: "exit-vr", callback: (event: CustomEvent) => void): void;
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
type LoadingAttributes = {
|
|
@@ -47,7 +55,7 @@ type SkyboxAttributes = {
|
|
|
47
55
|
/** @deprecated. Use background-image instead - URL to .exr, .hdr, .png, .jpg to be used as skybox */
|
|
48
56
|
"skybox-image"?: string,
|
|
49
57
|
/** URL to .exr, .hdr, .png, .jpg to be used as skybox */
|
|
50
|
-
"background-image"?: string,
|
|
58
|
+
"background-image"?: string,
|
|
51
59
|
/** Blurs the background image (if any) - value between 0 and 1
|
|
52
60
|
* 0: no blur
|
|
53
61
|
* 1: full blur
|
|
@@ -69,16 +77,17 @@ type RenderingAttributes = {
|
|
|
69
77
|
"transparent"?: boolean,
|
|
70
78
|
"contactshadows"?: boolean,
|
|
71
79
|
"tone-mapping"?: TonemappingAttributeOptions,
|
|
80
|
+
"tonemapping"?: TonemappingAttributeOptions,
|
|
72
81
|
"tone-mapping-exposure"?: number,
|
|
73
82
|
}
|
|
74
83
|
|
|
75
84
|
/**
|
|
76
|
-
* Available attributes for the `<needle-engine>` web component
|
|
85
|
+
* Available attributes for the `<needle-engine>` web component.
|
|
77
86
|
* @inheritdoc
|
|
78
87
|
*/
|
|
79
88
|
export type NeedleEngineAttributes =
|
|
80
89
|
MainAttributes
|
|
81
|
-
& Partial<Omit<HTMLElement, "style">>
|
|
90
|
+
// & Partial<Omit<HTMLElement, "style">>
|
|
82
91
|
& LoadingAttributes
|
|
83
92
|
& SkyboxAttributes
|
|
84
93
|
& RenderingAttributes
|
|
@@ -16,6 +16,12 @@ import { arContainerClassName, AROverlayHandler } from "./needle-engine.ar-overl
|
|
|
16
16
|
import { NeedleEngineAttributes, TonemappingAttributeOptions } from "./needle-engine.attributes.js";
|
|
17
17
|
import { calculateProgress01, EngineLoadingView, type ILoadingViewHandler } from "./needle-engine.loading.js";
|
|
18
18
|
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
"needle-engine": NeedleEngineWebComponent;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
19
25
|
// registering loader here too to make sure it's imported when using engine via vanilla js
|
|
20
26
|
registerLoader(NeedleLoader);
|
|
21
27
|
|
|
@@ -55,17 +61,17 @@ const observedAttributes = [
|
|
|
55
61
|
// https://developers.google.com/web/fundamentals/web-components/customelements
|
|
56
62
|
|
|
57
63
|
/**
|
|
58
|
-
*
|
|
59
|
-
* The
|
|
60
|
-
* The
|
|
61
|
-
* The
|
|
64
|
+
* The `<needle-engine>` web component. See {@link NeedleEngineAttributes} attributes for supported attributes
|
|
65
|
+
* The web component creates and manages a Needle Engine context, which is responsible for rendering a 3D scene using threejs.
|
|
66
|
+
* The context is created when the `src` attribute is set, and disposed when the element is removed from the DOM. You can prevent cleanup by setting the `keep-alive` attribute to `true`.
|
|
67
|
+
* The context is accessible from the `<needle-engine>` element: `document.querySelector("needle-engine").context`.
|
|
62
68
|
* See {@link https://engine.needle.tools/docs/reference/needle-engine-attributes}
|
|
63
69
|
*
|
|
64
70
|
* @example
|
|
65
71
|
* <needle-engine src="https://example.com/scene.glb"></needle-engine>
|
|
66
72
|
* @example
|
|
67
73
|
* <needle-engine src="https://example.com/scene.glb" camera-controls="false"></needle-engine>
|
|
68
|
-
*/
|
|
74
|
+
*/
|
|
69
75
|
export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngineComponent {
|
|
70
76
|
|
|
71
77
|
static get observedAttributes() {
|
|
@@ -100,7 +106,6 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
100
106
|
else this.setAttribute("camera-controls", value ? "true" : "false");
|
|
101
107
|
}
|
|
102
108
|
|
|
103
|
-
|
|
104
109
|
/**
|
|
105
110
|
* Get the current context for this web component instance. The context is created when the src attribute is set and the loading has finished.
|
|
106
111
|
* The context is disposed when the needle engine is removed from the document (you can prevent this by setting the keep-alive attribute to true).
|
|
@@ -133,7 +138,7 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
133
138
|
private _loadingProgress01: number = 0;
|
|
134
139
|
private _loadingView?: ILoadingViewHandler;
|
|
135
140
|
private _previousSrc: string | null | string[] = null;
|
|
136
|
-
/** set to true after <needle-engine> did load completely at least once. Set to false when <needle-engine> is removed from the document */
|
|
141
|
+
/** @private set to true after <needle-engine> did load completely at least once. Set to false when < to false when <needle-engine> is removed from the document removed from the document */
|
|
137
142
|
private _didFullyLoad: boolean = false;
|
|
138
143
|
|
|
139
144
|
constructor() {
|
|
@@ -296,6 +301,10 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
296
301
|
}
|
|
297
302
|
}
|
|
298
303
|
|
|
304
|
+
connectedMoveCallback() {
|
|
305
|
+
// we dont want needle-engine to cleanup JUST because the element is moved in the DOM. See https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks
|
|
306
|
+
}
|
|
307
|
+
|
|
299
308
|
/**
|
|
300
309
|
* @internal
|
|
301
310
|
*/
|
|
@@ -317,7 +326,7 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
317
326
|
case "loadfinished":
|
|
318
327
|
if (typeof newValue === "string" && newValue.length > 0) {
|
|
319
328
|
if (debug) console.log(name + " attribute changed", newValue);
|
|
320
|
-
this.registerEventFromAttribute(
|
|
329
|
+
this.registerEventFromAttribute("loadfinished", newValue);
|
|
321
330
|
}
|
|
322
331
|
break;
|
|
323
332
|
case "dracoDecoderPath":
|
|
@@ -441,7 +450,7 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
441
450
|
if (allowOverridingDefaultLoading) {
|
|
442
451
|
// Handle the <needle-engine hide-loading-overlay> attribute
|
|
443
452
|
const hideOverlay = this.getAttribute("hide-loading-overlay");
|
|
444
|
-
if (hideOverlay !== null && hideOverlay !== undefined && hideOverlay !== "0") {
|
|
453
|
+
if (hideOverlay !== null && hideOverlay !== undefined && (hideOverlay as any) !== "0") {
|
|
445
454
|
useDefaultLoading = false;
|
|
446
455
|
}
|
|
447
456
|
}
|
|
@@ -668,7 +677,7 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
668
677
|
if (attributeValue)
|
|
669
678
|
this.registerEventFromAttribute("loadstart", attributeValue);
|
|
670
679
|
}
|
|
671
|
-
private registerEventFromAttribute(eventName:
|
|
680
|
+
private registerEventFromAttribute(eventName: 'loadfinished' | 'loadstart', code: string) {
|
|
672
681
|
const prev = this._previouslyRegisteredMap.get(eventName);
|
|
673
682
|
if (prev) {
|
|
674
683
|
this._previouslyRegisteredMap.delete(eventName);
|
|
@@ -681,6 +690,7 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
681
690
|
// const fn = new Function(newValue);
|
|
682
691
|
if (typeof fn === "function") {
|
|
683
692
|
this._previouslyRegisteredMap.set(eventName, fn);
|
|
693
|
+
// @ts-ignore // not sure how to type this properly
|
|
684
694
|
this.addEventListener(eventName, evt => fn?.call(globalThis, this._context, evt));
|
|
685
695
|
}
|
|
686
696
|
}
|
|
@@ -828,15 +838,157 @@ export class NeedleEngineWebComponent extends HTMLElement implements INeedleEngi
|
|
|
828
838
|
setKtx2TranscoderPath(customKtx2DecoderPath);
|
|
829
839
|
}
|
|
830
840
|
}
|
|
841
|
+
|
|
842
|
+
/** Change which model gets loaded. This will trigger a reload of the model. */
|
|
843
|
+
setAttribute(name: 'src', value: string | string[]): void;
|
|
844
|
+
/** Optional string that will be applied to the context as a hash and can influence caching/identification. */
|
|
845
|
+
setAttribute(name: 'hash', value: string): void;
|
|
846
|
+
/** Public key used for licensing and feature gating (read-only on runtime if compiled-in). */
|
|
847
|
+
setAttribute(name: 'public-key', value: string): void;
|
|
848
|
+
/** Engine version string — usually set by the build/runtime. */
|
|
849
|
+
setAttribute(name: 'version', value: string): void;
|
|
850
|
+
/** If set to false the camera controls are disabled. Accepted values: true/false/none. Default behaviour is enabled. */
|
|
851
|
+
setAttribute(name: 'camera-controls', value: string): void;
|
|
852
|
+
/** Override path for the Draco decoder files. */
|
|
853
|
+
setAttribute(name: 'dracoDecoderPath', value: string): void;
|
|
854
|
+
/** Choose Draco decoder type: 'wasm' or 'js'. */
|
|
855
|
+
setAttribute(name: 'dracoDecoderType', value: 'wasm' | 'js'): void;
|
|
856
|
+
/** Override path for the KTX2 transcoder/decoder files. */
|
|
857
|
+
setAttribute(name: 'ktx2DecoderPath', value: string): void;
|
|
858
|
+
/** Tonemapping mode. Accepted values: 'none' | 'linear' | 'agx' | 'neutral'. */
|
|
859
|
+
setAttribute(name: 'tone-mapping', value: 'none' | 'linear' | 'agx' | 'neutral'): void;
|
|
860
|
+
/** Numeric exposure multiplier for tonemapping; accepts number or stringified number. */
|
|
861
|
+
setAttribute(name: 'tone-mapping-exposure', value: string | number): void;
|
|
862
|
+
/** Background image blur strength (0..1). Accepts number or string value. */
|
|
863
|
+
setAttribute(name: 'background-blurriness', value: string | number): void;
|
|
864
|
+
/** CSS color for the background; string color value expected (e.g. '#fff', 'rgba()' etc). */
|
|
865
|
+
setAttribute(name: 'background-color', value: string): void;
|
|
866
|
+
/** Intensity multiplier for environment lighting; accepts numeric value or string. */
|
|
867
|
+
setAttribute(name: 'environment-intensity', value: string | number): void;
|
|
868
|
+
/** When true the engine context is kept alive after the element is removed from DOM. Use 'true' or 'false'. */
|
|
869
|
+
setAttribute(name: 'keep-alive', value: 'true' | 'false'): void;
|
|
870
|
+
/** Generic typed setter for known Needle Engine attributes (useful from TS):
|
|
871
|
+
* setAttribute<T extends keyof NeedleEngineAttributes>(name, value) will type-check against the declared attribute shape.
|
|
872
|
+
*/
|
|
873
|
+
setAttribute<T extends keyof NeedleEngineAttributes>(qualifiedName: T, value: NeedleEngineAttributes[T]): void;
|
|
874
|
+
setAttribute(qualifiedName: ({} & string), value: string): void;
|
|
875
|
+
setAttribute(qualifiedName: string, value: string): void {
|
|
876
|
+
super.setAttribute(qualifiedName, value);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
/** Read the `src` attribute. Returns string, string[] (if codegen provided an array) or null if unset. */
|
|
880
|
+
getAttribute(name: 'src'): string | string[] | null;
|
|
881
|
+
/** Read the `hash` attribute — an optional string attached to the context for caching/identification. */
|
|
882
|
+
getAttribute(name: 'hash'): string | null;
|
|
883
|
+
/** Read the `public-key` attribute used for licensing/feature gating. */
|
|
884
|
+
getAttribute(name: 'public-key'): string | null;
|
|
885
|
+
/** Read the `version` attribute — the engine build/version string. */
|
|
886
|
+
getAttribute(name: 'version'): string | null;
|
|
887
|
+
/** Read the `camera-controls` attribute; string values include 'true'|'false'|'none' or null if unset. */
|
|
888
|
+
getAttribute(name: 'camera-controls'): string | null;
|
|
889
|
+
/** Read custom Draco decoder path if configured. */
|
|
890
|
+
getAttribute(name: 'dracoDecoderPath'): string | null;
|
|
891
|
+
/** Read Draco decoder type ('wasm'|'js') if configured. */
|
|
892
|
+
getAttribute(name: 'dracoDecoderType'): string | null;
|
|
893
|
+
/** Read custom KTX2 decoder/transcoder path if configured. */
|
|
894
|
+
getAttribute(name: 'ktx2DecoderPath'): string | null;
|
|
895
|
+
/** Read configured tone-mapping value, as a string matching accepted modes (none, linear, neutral, agx). */
|
|
896
|
+
getAttribute(name: 'tone-mapping'): string | null;
|
|
897
|
+
/** Read tone-mapping exposure multiplier (string or numeric string). */
|
|
898
|
+
getAttribute(name: 'tone-mapping-exposure'): string | null;
|
|
899
|
+
/** Read background-blurriness value (0..1) as string or null. */
|
|
900
|
+
getAttribute(name: 'background-blurriness'): string | null;
|
|
901
|
+
/** Read CSS background-color string value (e.g. '#fff', 'rgba()'). */
|
|
902
|
+
getAttribute(name: 'background-color'): string | null;
|
|
903
|
+
/** Read environment-intensity (numeric) as string or null. */
|
|
904
|
+
getAttribute(name: 'environment-intensity'): string | null;
|
|
905
|
+
/** Read keep-alive attribute; presence ("true") prevents the context from being disposed on disconnect. */
|
|
906
|
+
getAttribute(name: 'keep-alive'): string | null;
|
|
907
|
+
/** Defines a CSS selector or HTMLElement used to define the camera focus rectangle. */
|
|
908
|
+
getAttribute(name: 'focus-rect'): string | null;
|
|
909
|
+
/** @private */
|
|
910
|
+
getAttribute(name: 'loading-blur'): string | null;
|
|
911
|
+
/** @private */
|
|
912
|
+
getAttribute(name: 'alias'): string | null;
|
|
913
|
+
/** Typed getter for known NeedleEngine attribute names; returns the typed shape declared in NeedleEngineAttributes or null. */
|
|
914
|
+
getAttribute<T extends keyof NeedleEngineAttributes>(qualifiedName: T): NeedleEngineAttributes[T] | null;
|
|
915
|
+
// getAttribute(qualifiedName: ({} & string)): string | null
|
|
916
|
+
getAttribute(qualifiedName: ({} & string)): string | null;
|
|
917
|
+
getAttribute(qualifiedName: string): string | null {
|
|
918
|
+
return super.getAttribute(qualifiedName);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
/**
|
|
922
|
+
* Emitted when loading begins for the engine/scene. The event is cancelable — calling preventDefault()
|
|
923
|
+
* will stop the default loading UI behavior (apps can implement custom loading flows).
|
|
924
|
+
* Event contains a small detail object with context and optional alias.
|
|
925
|
+
*/
|
|
926
|
+
addEventListener(type: 'loadstart', listener: (ev: CustomEvent<{ context: Context; alias: string | null }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
927
|
+
/**
|
|
928
|
+
* Emitted repeatedly while loading resources. Use the event detail to show progress:
|
|
929
|
+
* Event contains progress metadata to report loader state.
|
|
930
|
+
*/
|
|
931
|
+
addEventListener(type: 'progress', listener: (ev: CustomEvent<{ context: Context; name: string; progress: ProgressEvent<EventTarget>; index: number; count: number; totalProgress01: number }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
932
|
+
/**
|
|
933
|
+
* Emitted when the initial loading has finished. detail contains the context, the source alias (if available) and a list of loaded models.
|
|
934
|
+
* Emitted when the initial load completes; contains helpful summary data.
|
|
935
|
+
*/
|
|
936
|
+
addEventListener(type: 'loadfinished', listener: (ev: CustomEvent<{ context: Context; src: string | null; loadedFiles: LoadedModel[] }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
937
|
+
/**
|
|
938
|
+
* Emitted when an XR session ends.
|
|
939
|
+
*/
|
|
940
|
+
addEventListener(type: 'xr-session-ended', listener: (ev: CustomEvent<{ session: XRSession | null; context: Context; sessionMode: XRSessionMode | undefined }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
941
|
+
/**
|
|
942
|
+
* Emitted when entering AR.
|
|
943
|
+
*/
|
|
944
|
+
addEventListener(type: 'enter-ar', listener: (ev: CustomEvent<{ session: XRSession; context: Context; htmlContainer: HTMLElement | null }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
945
|
+
/**
|
|
946
|
+
* Emitted when exiting AR.
|
|
947
|
+
*/
|
|
948
|
+
addEventListener(type: 'exit-ar', listener: (ev: CustomEvent<{ session: XRSession; context: Context; htmlContainer: HTMLElement | null }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
949
|
+
/**
|
|
950
|
+
* Emitted when entering VR.
|
|
951
|
+
*/
|
|
952
|
+
addEventListener(type: 'enter-vr', listener: (ev: CustomEvent<{ session: XRSession; context: Context }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
953
|
+
/**
|
|
954
|
+
* Emitted when exiting VR.
|
|
955
|
+
*/
|
|
956
|
+
addEventListener(type: 'exit-vr', listener: (ev: CustomEvent<{ session: XRSession; context: Context }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
957
|
+
/** Emitted when the engine has rendered its first frame and is ready. */
|
|
958
|
+
addEventListener(type: 'ready', listener: (ev: Event) => void, options?: boolean | AddEventListenerOptions): void;
|
|
959
|
+
/** Emitted when an XR session is started — useful to prepare AR/VR UI. */
|
|
960
|
+
addEventListener(type: 'xr-session-started', listener: (ev: CustomEvent<{ session: XRSession; context: Context }>) => void, options?: boolean | AddEventListenerOptions): void;
|
|
961
|
+
|
|
962
|
+
// Sadly not enough to make types work (see comment below)
|
|
963
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: ({} & K), listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
|
|
964
|
+
// These are from the super type. Not sure how we can remove intellisense for the "regular" events while still making the types work...
|
|
965
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
966
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
967
|
+
|
|
968
|
+
addEventListener(type: string, listener: any, options?: boolean | AddEventListenerOptions): void
|
|
969
|
+
{
|
|
970
|
+
return super.addEventListener(type, listener as EventListenerOrEventListenerObject, options);
|
|
971
|
+
}
|
|
831
972
|
}
|
|
832
973
|
|
|
833
974
|
if (typeof window !== "undefined" && !window.customElements.get(htmlTagName))
|
|
834
975
|
window.customElements.define(htmlTagName, NeedleEngineWebComponent);
|
|
835
976
|
|
|
977
|
+
/** Usage of the types declared above */
|
|
836
978
|
|
|
979
|
+
const elem = document.querySelector("needle-engine")!;
|
|
980
|
+
elem.setAttribute("src", "model.glb");
|
|
981
|
+
elem.addEventListener("loadfinished", (ev) => {
|
|
982
|
+
const context = ev.detail.context;
|
|
983
|
+
});
|
|
984
|
+
elem.setAttribute("dracoDecoderType", "wasm");
|
|
985
|
+
elem.addEventListener("enter-ar", (ev) => {
|
|
986
|
+
const session = ev.detail.session;
|
|
987
|
+
});
|
|
837
988
|
|
|
838
|
-
|
|
839
|
-
|
|
989
|
+
elem.addEventListener("mousedown", (ev) => {
|
|
990
|
+
console.log("regular mousedown event", ev);
|
|
991
|
+
});
|
|
840
992
|
|
|
841
993
|
function getDisplayName(str: string) {
|
|
842
994
|
if (str.startsWith("blob:")) {
|
|
@@ -956,4 +1108,4 @@ function handleLoadingBlur(needleEngineElement: NeedleEngineWebComponent) {
|
|
|
956
1108
|
}
|
|
957
1109
|
}
|
|
958
1110
|
}, { once: true });
|
|
959
|
-
}
|
|
1111
|
+
}
|
|
@@ -527,7 +527,9 @@ export class NeedleXRSession implements INeedleXRSession {
|
|
|
527
527
|
else
|
|
528
528
|
console.log("%c" + `Requesting ${mode} session`, "font-weight:bold;");
|
|
529
529
|
for (const script of scripts) {
|
|
530
|
-
if (script.onBeforeXR
|
|
530
|
+
if (script.onBeforeXR && script.activeAndEnabled && !script.destroyed) {
|
|
531
|
+
script.onBeforeXR(mode, init);
|
|
532
|
+
}
|
|
531
533
|
}
|
|
532
534
|
for (const listener of this._sessionRequestStartListeners) {
|
|
533
535
|
listener({ mode, init });
|