@onerjs/gui 8.23.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/2D/FrameGraph/guiTask.d.ts +34 -0
- package/2D/FrameGraph/guiTask.js +62 -0
- package/2D/FrameGraph/guiTask.js.map +1 -0
- package/2D/FrameGraph/renderGraphGUIBlock.d.ts +43 -0
- package/2D/FrameGraph/renderGraphGUIBlock.js +66 -0
- package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -0
- package/2D/adtInstrumentation.d.ts +52 -0
- package/2D/adtInstrumentation.js +107 -0
- package/2D/adtInstrumentation.js.map +1 -0
- package/2D/advancedDynamicTexture.d.ts +548 -0
- package/2D/advancedDynamicTexture.js +1522 -0
- package/2D/advancedDynamicTexture.js.map +1 -0
- package/2D/controls/button.d.ts +109 -0
- package/2D/controls/button.js +246 -0
- package/2D/controls/button.js.map +1 -0
- package/2D/controls/checkbox.d.ts +53 -0
- package/2D/controls/checkbox.js +164 -0
- package/2D/controls/checkbox.js.map +1 -0
- package/2D/controls/colorpicker.d.ts +101 -0
- package/2D/controls/colorpicker.js +1396 -0
- package/2D/controls/colorpicker.js.map +1 -0
- package/2D/controls/container.d.ts +179 -0
- package/2D/controls/container.js +616 -0
- package/2D/controls/container.js.map +1 -0
- package/2D/controls/control.d.ts +943 -0
- package/2D/controls/control.js +2460 -0
- package/2D/controls/control.js.map +1 -0
- package/2D/controls/displayGrid.d.ts +53 -0
- package/2D/controls/displayGrid.js +202 -0
- package/2D/controls/displayGrid.js.map +1 -0
- package/2D/controls/ellipse.d.ts +25 -0
- package/2D/controls/ellipse.js +93 -0
- package/2D/controls/ellipse.js.map +1 -0
- package/2D/controls/focusableButton.d.ts +17 -0
- package/2D/controls/focusableButton.js +25 -0
- package/2D/controls/focusableButton.js.map +1 -0
- package/2D/controls/focusableControl.d.ts +43 -0
- package/2D/controls/focusableControl.js +2 -0
- package/2D/controls/focusableControl.js.map +1 -0
- package/2D/controls/gradient/BaseGradient.d.ts +69 -0
- package/2D/controls/gradient/BaseGradient.js +84 -0
- package/2D/controls/gradient/BaseGradient.js.map +1 -0
- package/2D/controls/gradient/LinearGradient.d.ts +45 -0
- package/2D/controls/gradient/LinearGradient.js +73 -0
- package/2D/controls/gradient/LinearGradient.js.map +1 -0
- package/2D/controls/gradient/RadialGradient.d.ts +53 -0
- package/2D/controls/gradient/RadialGradient.js +89 -0
- package/2D/controls/gradient/RadialGradient.js.map +1 -0
- package/2D/controls/grid.d.ts +151 -0
- package/2D/controls/grid.js +528 -0
- package/2D/controls/grid.js.map +1 -0
- package/2D/controls/image.d.ts +228 -0
- package/2D/controls/image.js +915 -0
- package/2D/controls/image.js.map +1 -0
- package/2D/controls/index.d.ts +34 -0
- package/2D/controls/index.js +35 -0
- package/2D/controls/index.js.map +1 -0
- package/2D/controls/inputPassword.d.ts +9 -0
- package/2D/controls/inputPassword.js +22 -0
- package/2D/controls/inputPassword.js.map +1 -0
- package/2D/controls/inputText.d.ts +197 -0
- package/2D/controls/inputText.js +1035 -0
- package/2D/controls/inputText.js.map +1 -0
- package/2D/controls/inputTextArea.d.ts +142 -0
- package/2D/controls/inputTextArea.js +1025 -0
- package/2D/controls/inputTextArea.js.map +1 -0
- package/2D/controls/line.d.ts +73 -0
- package/2D/controls/line.js +227 -0
- package/2D/controls/line.js.map +1 -0
- package/2D/controls/multiLine.d.ts +75 -0
- package/2D/controls/multiLine.js +237 -0
- package/2D/controls/multiLine.js.map +1 -0
- package/2D/controls/radioButton.d.ts +49 -0
- package/2D/controls/radioButton.js +185 -0
- package/2D/controls/radioButton.js.map +1 -0
- package/2D/controls/rectangle.d.ts +43 -0
- package/2D/controls/rectangle.js +204 -0
- package/2D/controls/rectangle.js.map +1 -0
- package/2D/controls/scrollViewers/scrollViewer.d.ts +178 -0
- package/2D/controls/scrollViewers/scrollViewer.js +587 -0
- package/2D/controls/scrollViewers/scrollViewer.js.map +1 -0
- package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +51 -0
- package/2D/controls/scrollViewers/scrollViewerWindow.js +254 -0
- package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -0
- package/2D/controls/selector.d.ts +237 -0
- package/2D/controls/selector.js +579 -0
- package/2D/controls/selector.js.map +1 -0
- package/2D/controls/sliders/baseSlider.d.ts +80 -0
- package/2D/controls/sliders/baseSlider.js +299 -0
- package/2D/controls/sliders/baseSlider.js.map +1 -0
- package/2D/controls/sliders/imageBasedSlider.d.ts +47 -0
- package/2D/controls/sliders/imageBasedSlider.js +168 -0
- package/2D/controls/sliders/imageBasedSlider.js.map +1 -0
- package/2D/controls/sliders/imageScrollBar.d.ts +67 -0
- package/2D/controls/sliders/imageScrollBar.js +248 -0
- package/2D/controls/sliders/imageScrollBar.js.map +1 -0
- package/2D/controls/sliders/scrollBar.d.ts +50 -0
- package/2D/controls/sliders/scrollBar.js +175 -0
- package/2D/controls/sliders/scrollBar.js.map +1 -0
- package/2D/controls/sliders/slider.d.ts +46 -0
- package/2D/controls/sliders/slider.js +281 -0
- package/2D/controls/sliders/slider.js.map +1 -0
- package/2D/controls/stackPanel.d.ts +64 -0
- package/2D/controls/stackPanel.js +244 -0
- package/2D/controls/stackPanel.js.map +1 -0
- package/2D/controls/statics.d.ts +6 -0
- package/2D/controls/statics.js +50 -0
- package/2D/controls/statics.js.map +1 -0
- package/2D/controls/textBlock.d.ts +219 -0
- package/2D/controls/textBlock.js +670 -0
- package/2D/controls/textBlock.js.map +1 -0
- package/2D/controls/textWrapper.d.ts +13 -0
- package/2D/controls/textWrapper.js +88 -0
- package/2D/controls/textWrapper.js.map +1 -0
- package/2D/controls/toggleButton.d.ts +93 -0
- package/2D/controls/toggleButton.js +229 -0
- package/2D/controls/toggleButton.js.map +1 -0
- package/2D/controls/virtualKeyboard.d.ts +102 -0
- package/2D/controls/virtualKeyboard.js +275 -0
- package/2D/controls/virtualKeyboard.js.map +1 -0
- package/2D/index.d.ts +11 -0
- package/2D/index.js +13 -0
- package/2D/index.js.map +1 -0
- package/2D/math2D.d.ts +136 -0
- package/2D/math2D.js +235 -0
- package/2D/math2D.js.map +1 -0
- package/2D/measure.d.ts +77 -0
- package/2D/measure.js +138 -0
- package/2D/measure.js.map +1 -0
- package/2D/multiLinePoint.d.ts +47 -0
- package/2D/multiLinePoint.js +110 -0
- package/2D/multiLinePoint.js.map +1 -0
- package/2D/style.d.ts +46 -0
- package/2D/style.js +80 -0
- package/2D/style.js.map +1 -0
- package/2D/valueAndUnit.d.ts +89 -0
- package/2D/valueAndUnit.js +194 -0
- package/2D/valueAndUnit.js.map +1 -0
- package/2D/xmlLoader.d.ts +60 -0
- package/2D/xmlLoader.js +348 -0
- package/2D/xmlLoader.js.map +1 -0
- package/3D/behaviors/defaultBehavior.d.ts +73 -0
- package/3D/behaviors/defaultBehavior.js +103 -0
- package/3D/behaviors/defaultBehavior.js.map +1 -0
- package/3D/controls/MRTK3/touchHolographicButton.d.ts +220 -0
- package/3D/controls/MRTK3/touchHolographicButton.js +868 -0
- package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -0
- package/3D/controls/abstractButton3D.d.ts +15 -0
- package/3D/controls/abstractButton3D.js +22 -0
- package/3D/controls/abstractButton3D.js.map +1 -0
- package/3D/controls/button3D.d.ts +51 -0
- package/3D/controls/button3D.js +98 -0
- package/3D/controls/button3D.js.map +1 -0
- package/3D/controls/container3D.d.ts +72 -0
- package/3D/controls/container3D.js +126 -0
- package/3D/controls/container3D.js.map +1 -0
- package/3D/controls/contentDisplay3D.d.ts +42 -0
- package/3D/controls/contentDisplay3D.js +81 -0
- package/3D/controls/contentDisplay3D.js.map +1 -0
- package/3D/controls/control3D.d.ts +183 -0
- package/3D/controls/control3D.js +401 -0
- package/3D/controls/control3D.js.map +1 -0
- package/3D/controls/cylinderPanel.d.ts +17 -0
- package/3D/controls/cylinderPanel.js +57 -0
- package/3D/controls/cylinderPanel.js.map +1 -0
- package/3D/controls/handMenu.d.ts +28 -0
- package/3D/controls/handMenu.js +39 -0
- package/3D/controls/handMenu.js.map +1 -0
- package/3D/controls/holographicBackplate.d.ts +49 -0
- package/3D/controls/holographicBackplate.js +104 -0
- package/3D/controls/holographicBackplate.js.map +1 -0
- package/3D/controls/holographicButton.d.ts +84 -0
- package/3D/controls/holographicButton.js +300 -0
- package/3D/controls/holographicButton.js.map +1 -0
- package/3D/controls/holographicSlate.d.ts +134 -0
- package/3D/controls/holographicSlate.js +413 -0
- package/3D/controls/holographicSlate.js.map +1 -0
- package/3D/controls/index.d.ts +22 -0
- package/3D/controls/index.js +24 -0
- package/3D/controls/index.js.map +1 -0
- package/3D/controls/meshButton3D.d.ts +21 -0
- package/3D/controls/meshButton3D.js +58 -0
- package/3D/controls/meshButton3D.js.map +1 -0
- package/3D/controls/nearMenu.d.ts +44 -0
- package/3D/controls/nearMenu.js +103 -0
- package/3D/controls/nearMenu.js.map +1 -0
- package/3D/controls/planePanel.d.ts +9 -0
- package/3D/controls/planePanel.js +30 -0
- package/3D/controls/planePanel.js.map +1 -0
- package/3D/controls/scatterPanel.d.ts +18 -0
- package/3D/controls/scatterPanel.js +98 -0
- package/3D/controls/scatterPanel.js.map +1 -0
- package/3D/controls/slider3D.d.ts +95 -0
- package/3D/controls/slider3D.js +256 -0
- package/3D/controls/slider3D.js.map +1 -0
- package/3D/controls/spherePanel.d.ts +17 -0
- package/3D/controls/spherePanel.js +58 -0
- package/3D/controls/spherePanel.js.map +1 -0
- package/3D/controls/stackPanel3D.d.ts +22 -0
- package/3D/controls/stackPanel3D.js +95 -0
- package/3D/controls/stackPanel3D.js.map +1 -0
- package/3D/controls/touchButton3D.d.ts +77 -0
- package/3D/controls/touchButton3D.js +205 -0
- package/3D/controls/touchButton3D.js.map +1 -0
- package/3D/controls/touchHolographicButton.d.ts +110 -0
- package/3D/controls/touchHolographicButton.js +400 -0
- package/3D/controls/touchHolographicButton.js.map +1 -0
- package/3D/controls/touchHolographicMenu.d.ts +61 -0
- package/3D/controls/touchHolographicMenu.js +139 -0
- package/3D/controls/touchHolographicMenu.js.map +1 -0
- package/3D/controls/touchMeshButton3D.d.ts +21 -0
- package/3D/controls/touchMeshButton3D.js +58 -0
- package/3D/controls/touchMeshButton3D.js.map +1 -0
- package/3D/controls/volumeBasedPanel.d.ts +53 -0
- package/3D/controls/volumeBasedPanel.js +158 -0
- package/3D/controls/volumeBasedPanel.js.map +1 -0
- package/3D/gizmos/gizmoHandle.d.ts +108 -0
- package/3D/gizmos/gizmoHandle.js +175 -0
- package/3D/gizmos/gizmoHandle.js.map +1 -0
- package/3D/gizmos/index.d.ts +2 -0
- package/3D/gizmos/index.js +3 -0
- package/3D/gizmos/index.js.map +1 -0
- package/3D/gizmos/slateGizmo.d.ts +57 -0
- package/3D/gizmos/slateGizmo.js +353 -0
- package/3D/gizmos/slateGizmo.js.map +1 -0
- package/3D/gui3DManager.d.ts +94 -0
- package/3D/gui3DManager.js +233 -0
- package/3D/gui3DManager.js.map +1 -0
- package/3D/index.d.ts +5 -0
- package/3D/index.js +7 -0
- package/3D/index.js.map +1 -0
- package/3D/materials/fluent/fluentMaterial.d.ts +91 -0
- package/3D/materials/fluent/fluentMaterial.js +286 -0
- package/3D/materials/fluent/fluentMaterial.js.map +1 -0
- package/3D/materials/fluent/index.d.ts +1 -0
- package/3D/materials/fluent/index.js +2 -0
- package/3D/materials/fluent/index.js.map +1 -0
- package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js +41 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
- package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -0
- package/3D/materials/fluent/shaders/fluent.vertex.js +40 -0
- package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +466 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
- package/3D/materials/fluentBackplate/index.d.ts +1 -0
- package/3D/materials/fluentBackplate/index.js +2 -0
- package/3D/materials/fluentBackplate/index.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +60 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +127 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js +536 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
- package/3D/materials/fluentButton/index.d.ts +1 -0
- package/3D/materials/fluentButton/index.js +2 -0
- package/3D/materials/fluentButton/index.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +57 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +162 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
- package/3D/materials/fluentMaterial.d.ts +4 -0
- package/3D/materials/fluentMaterial.js +5 -0
- package/3D/materials/fluentMaterial.js.map +1 -0
- package/3D/materials/handle/handleMaterial.d.ts +68 -0
- package/3D/materials/handle/handleMaterial.js +114 -0
- package/3D/materials/handle/handleMaterial.js.map +1 -0
- package/3D/materials/handle/index.d.ts +1 -0
- package/3D/materials/handle/index.js +2 -0
- package/3D/materials/handle/index.js.map +1 -0
- package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.fragment.js +11 -0
- package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
- package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.vertex.js +11 -0
- package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
- package/3D/materials/index.d.ts +5 -0
- package/3D/materials/index.js +7 -0
- package/3D/materials/index.js.map +1 -0
- package/3D/materials/mrdl/index.d.ts +3 -0
- package/3D/materials/mrdl/index.js +4 -0
- package/3D/materials/mrdl/index.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +87 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.js +302 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +433 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +186 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.js +532 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +56 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.js +230 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +337 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +855 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +337 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +855 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.js +25 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.js +12 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +88 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +96 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.js +48 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.js +158 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.js +27 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.js +13 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +236 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +137 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +236 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +137 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
- package/3D/vector3WithInfo.d.ts +16 -0
- package/3D/vector3WithInfo.js +18 -0
- package/3D/vector3WithInfo.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +4 -0
- package/index.js.map +1 -0
- package/legacy/legacy.d.ts +1 -0
- package/legacy/legacy.js +17 -0
- package/legacy/legacy.js.map +1 -0
- package/license.md +71 -0
- package/package.json +47 -0
- package/readme.md +31 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
2
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
3
|
+
import { Control3D } from "./control3D.js";
|
|
4
|
+
import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
|
|
5
|
+
import { PointerDragBehavior } from "@babylonjs/core/Behaviors/Meshes/pointerDragBehavior.js";
|
|
6
|
+
import { SceneLoader } from "@babylonjs/core/Loading/sceneLoader.js";
|
|
7
|
+
import { MRDLSliderBarMaterial } from "../materials/mrdl/mrdlSliderBarMaterial.js";
|
|
8
|
+
import { MRDLSliderThumbMaterial } from "../materials/mrdl/mrdlSliderThumbMaterial.js";
|
|
9
|
+
import { MRDLBackplateMaterial } from "../materials/mrdl/mrdlBackplateMaterial.js";
|
|
10
|
+
import { Tools } from "@babylonjs/core/Misc/tools.js";
|
|
11
|
+
const SLIDER_MIN = 0;
|
|
12
|
+
const SLIDER_MAX = 100;
|
|
13
|
+
const SLIDER_VAL = 50;
|
|
14
|
+
const SLIDER_STEP = 0;
|
|
15
|
+
const SLIDER_SCALING = 1.0;
|
|
16
|
+
const SLIDER_MARGIN = 0.2;
|
|
17
|
+
/**
|
|
18
|
+
* Class used to create a slider in 3D
|
|
19
|
+
*/
|
|
20
|
+
export class Slider3D extends Control3D {
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new slider
|
|
23
|
+
* @param name defines the control name
|
|
24
|
+
* @param sliderBackplateVisible defines if the control has a backplate, default is false
|
|
25
|
+
*/
|
|
26
|
+
constructor(name, sliderBackplateVisible) {
|
|
27
|
+
super(name);
|
|
28
|
+
/** Observable raised when the sldier value changes */
|
|
29
|
+
this.onValueChangedObservable = new Observable();
|
|
30
|
+
this._sliderBackplateVisible = sliderBackplateVisible || false;
|
|
31
|
+
this._minimum = SLIDER_MIN;
|
|
32
|
+
this._maximum = SLIDER_MAX;
|
|
33
|
+
this._step = SLIDER_STEP;
|
|
34
|
+
this._value = SLIDER_VAL;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets the mesh used to render this control
|
|
38
|
+
*/
|
|
39
|
+
get mesh() {
|
|
40
|
+
if (this.node) {
|
|
41
|
+
return this._sliderThumb;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/** Gets or sets minimum value */
|
|
46
|
+
get minimum() {
|
|
47
|
+
return this._minimum;
|
|
48
|
+
}
|
|
49
|
+
set minimum(value) {
|
|
50
|
+
if (this._minimum === value) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this._minimum = Math.max(value, SLIDER_MIN);
|
|
54
|
+
this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);
|
|
55
|
+
}
|
|
56
|
+
/** Gets or sets maximum value */
|
|
57
|
+
get maximum() {
|
|
58
|
+
return this._maximum;
|
|
59
|
+
}
|
|
60
|
+
set maximum(value) {
|
|
61
|
+
if (this._maximum === value) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this._maximum = Math.max(value, this._minimum);
|
|
65
|
+
this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);
|
|
66
|
+
}
|
|
67
|
+
/** Gets or sets step value */
|
|
68
|
+
get step() {
|
|
69
|
+
return this._step;
|
|
70
|
+
}
|
|
71
|
+
set step(value) {
|
|
72
|
+
if (this._step === value) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this._step = Math.max(Math.min(value, this._maximum - this._minimum), SLIDER_STEP);
|
|
76
|
+
}
|
|
77
|
+
/** Gets or sets current value */
|
|
78
|
+
get value() {
|
|
79
|
+
return this._value;
|
|
80
|
+
}
|
|
81
|
+
set value(value) {
|
|
82
|
+
if (this._value === value) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this._value = Math.max(Math.min(value, this._maximum), this._minimum);
|
|
86
|
+
if (this._sliderThumb) {
|
|
87
|
+
this._sliderThumb.position.x = this._convertToPosition(this.value);
|
|
88
|
+
}
|
|
89
|
+
this.onValueChangedObservable.notifyObservers(this._value);
|
|
90
|
+
}
|
|
91
|
+
get start() {
|
|
92
|
+
if (!this.node) {
|
|
93
|
+
return -SLIDER_SCALING / 2;
|
|
94
|
+
}
|
|
95
|
+
return this._sliderBar.position.x - this._sliderBar.scaling.x / 2;
|
|
96
|
+
}
|
|
97
|
+
get end() {
|
|
98
|
+
if (!this.node) {
|
|
99
|
+
return SLIDER_SCALING / 2;
|
|
100
|
+
}
|
|
101
|
+
return this._sliderBar.position.x + this._sliderBar.scaling.x / 2;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Gets the slider bar material used by this control
|
|
105
|
+
*/
|
|
106
|
+
get sliderBarMaterial() {
|
|
107
|
+
return this._sliderBarMaterial;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Gets the slider thumb material used by this control
|
|
111
|
+
*/
|
|
112
|
+
get sliderThumbMaterial() {
|
|
113
|
+
return this._sliderThumbMaterial;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Gets the slider backplate material used by this control
|
|
117
|
+
*/
|
|
118
|
+
get sliderBackplateMaterial() {
|
|
119
|
+
return this._sliderBackplateMaterial;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Gets the slider bar mesh used by this control
|
|
123
|
+
*/
|
|
124
|
+
get sliderBar() {
|
|
125
|
+
return this._sliderBar;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Gets the slider thumb mesh used by this control
|
|
129
|
+
*/
|
|
130
|
+
get sliderThumb() {
|
|
131
|
+
return this._sliderThumb;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Gets the slider backplate mesh used by this control
|
|
135
|
+
*/
|
|
136
|
+
get sliderBackplate() {
|
|
137
|
+
return this._sliderBackplate;
|
|
138
|
+
}
|
|
139
|
+
/** Sets a boolean indicating if the control is visible */
|
|
140
|
+
set isVisible(value) {
|
|
141
|
+
if (this._isVisible === value) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this._isVisible = value;
|
|
145
|
+
this.node?.setEnabled(value);
|
|
146
|
+
}
|
|
147
|
+
// Mesh association
|
|
148
|
+
_createNode(scene) {
|
|
149
|
+
const sliderBackplate = CreateBox(`${this.name}_sliderbackplate`, {
|
|
150
|
+
width: 1.0,
|
|
151
|
+
height: 1.0,
|
|
152
|
+
depth: 1.0,
|
|
153
|
+
}, scene);
|
|
154
|
+
sliderBackplate.isPickable = false;
|
|
155
|
+
sliderBackplate.visibility = 0;
|
|
156
|
+
sliderBackplate.scaling = new Vector3(1, 0.5, 0.8);
|
|
157
|
+
const baseUrl = Tools.GetAssetUrl(Slider3D.MODEL_BASE_URL);
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
|
|
159
|
+
SceneLoader.ImportMeshAsync(undefined, baseUrl, Slider3D.MODEL_FILENAME, scene).then((result) => {
|
|
160
|
+
// make all meshes not pickable. Required meshes' pickable state will be set later.
|
|
161
|
+
for (const m of result.meshes) {
|
|
162
|
+
m.isPickable = false;
|
|
163
|
+
}
|
|
164
|
+
const sliderBackplateModel = result.meshes[1];
|
|
165
|
+
const sliderBarModel = result.meshes[1].clone(`${this.name}_sliderbar`, sliderBackplate);
|
|
166
|
+
const sliderThumbModel = result.meshes[1].clone(`${this.name}_sliderthumb`, sliderBackplate);
|
|
167
|
+
sliderBackplateModel.visibility = 0;
|
|
168
|
+
if (this._sliderBackplateVisible) {
|
|
169
|
+
sliderBackplateModel.visibility = 1;
|
|
170
|
+
sliderBackplateModel.name = `${this.name}_sliderbackplate`;
|
|
171
|
+
sliderBackplateModel.scaling.x = 1;
|
|
172
|
+
sliderBackplateModel.scaling.z = 0.2;
|
|
173
|
+
sliderBackplateModel.parent = sliderBackplate;
|
|
174
|
+
if (this._sliderBackplateMaterial) {
|
|
175
|
+
sliderBackplateModel.material = this._sliderBackplateMaterial;
|
|
176
|
+
}
|
|
177
|
+
this._sliderBackplate = sliderBackplateModel;
|
|
178
|
+
}
|
|
179
|
+
if (sliderBarModel) {
|
|
180
|
+
sliderBarModel.parent = sliderBackplate;
|
|
181
|
+
sliderBarModel.position.z = -0.1;
|
|
182
|
+
sliderBarModel.scaling = new Vector3(SLIDER_SCALING - SLIDER_MARGIN, 0.04, 0.3);
|
|
183
|
+
if (this._sliderBarMaterial) {
|
|
184
|
+
sliderBarModel.material = this._sliderBarMaterial;
|
|
185
|
+
}
|
|
186
|
+
this._sliderBar = sliderBarModel;
|
|
187
|
+
}
|
|
188
|
+
if (sliderThumbModel) {
|
|
189
|
+
sliderThumbModel.parent = sliderBackplate;
|
|
190
|
+
sliderThumbModel.isPickable = true;
|
|
191
|
+
sliderThumbModel.position.z = -0.115;
|
|
192
|
+
sliderThumbModel.scaling = new Vector3(0.025, 0.3, 0.6);
|
|
193
|
+
sliderThumbModel.position.x = this._convertToPosition(this.value);
|
|
194
|
+
sliderThumbModel.addBehavior(this._createBehavior());
|
|
195
|
+
if (this._sliderThumbMaterial) {
|
|
196
|
+
sliderThumbModel.material = this._sliderThumbMaterial;
|
|
197
|
+
}
|
|
198
|
+
this._sliderThumb = sliderThumbModel;
|
|
199
|
+
}
|
|
200
|
+
this._injectGUI3DReservedDataStore(sliderBackplate).control = this;
|
|
201
|
+
const meshes = sliderBackplate.getChildMeshes();
|
|
202
|
+
for (const mesh of meshes) {
|
|
203
|
+
this._injectGUI3DReservedDataStore(mesh).control = this;
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
this._affectMaterial(sliderBackplate);
|
|
207
|
+
return sliderBackplate;
|
|
208
|
+
}
|
|
209
|
+
_affectMaterial(mesh) {
|
|
210
|
+
this._sliderBackplateMaterial = this._sliderBackplateMaterial ?? new MRDLBackplateMaterial(`${this.name}_sliderbackplate_material`, mesh.getScene());
|
|
211
|
+
this._sliderBarMaterial = this._sliderBarMaterial ?? new MRDLSliderBarMaterial(`${this.name}_sliderbar_material`, mesh.getScene());
|
|
212
|
+
this._sliderThumbMaterial = this._sliderThumbMaterial ?? new MRDLSliderThumbMaterial(`${this.name}_sliderthumb_material`, mesh.getScene());
|
|
213
|
+
}
|
|
214
|
+
_createBehavior() {
|
|
215
|
+
const pointerDragBehavior = new PointerDragBehavior({ dragAxis: Vector3.Right() });
|
|
216
|
+
pointerDragBehavior.moveAttached = false;
|
|
217
|
+
pointerDragBehavior.onDragStartObservable.add(() => {
|
|
218
|
+
this._draggedPosition = this._sliderThumb.position.x;
|
|
219
|
+
});
|
|
220
|
+
pointerDragBehavior.onDragObservable.add((event) => {
|
|
221
|
+
this._draggedPosition += event.dragDistance / this.scaling.x;
|
|
222
|
+
this.value = this._convertToValue(this._draggedPosition);
|
|
223
|
+
});
|
|
224
|
+
return pointerDragBehavior;
|
|
225
|
+
}
|
|
226
|
+
_convertToPosition(value) {
|
|
227
|
+
const position = ((value - this.minimum) / (this.maximum - this.minimum)) * (this.end - this.start) + this.start;
|
|
228
|
+
return Math.min(Math.max(position, this.start), this.end);
|
|
229
|
+
}
|
|
230
|
+
_convertToValue(position) {
|
|
231
|
+
let value = ((position - this.start) / (this.end - this.start)) * (this.maximum - this.minimum);
|
|
232
|
+
value = this.step ? Math.round(value / this.step) * this.step : value;
|
|
233
|
+
return Math.max(Math.min(this.minimum + value, this._maximum), this._minimum);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Releases all associated resources
|
|
237
|
+
*/
|
|
238
|
+
dispose() {
|
|
239
|
+
super.dispose();
|
|
240
|
+
this._sliderBar?.dispose();
|
|
241
|
+
this._sliderThumb?.dispose();
|
|
242
|
+
this._sliderBarMaterial?.dispose();
|
|
243
|
+
this._sliderThumbMaterial?.dispose();
|
|
244
|
+
this._sliderBackplate?.dispose();
|
|
245
|
+
this._sliderBackplateMaterial?.dispose();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Base Url for the models.
|
|
250
|
+
*/
|
|
251
|
+
Slider3D.MODEL_BASE_URL = "https://assets.babylonjs.com/core/MRTK/";
|
|
252
|
+
/**
|
|
253
|
+
* File name for the 8x4 model.
|
|
254
|
+
*/
|
|
255
|
+
Slider3D.MODEL_FILENAME = "mrtk-fluent-backplate.glb";
|
|
256
|
+
//# sourceMappingURL=slider3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider3D.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/slider3D.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { PointerDragBehavior } from \"core/Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { MRDLSliderBarMaterial } from \"../materials/mrdl/mrdlSliderBarMaterial\";\r\nimport { MRDLSliderThumbMaterial } from \"../materials/mrdl/mrdlSliderThumbMaterial\";\r\nimport { MRDLBackplateMaterial } from \"../materials/mrdl/mrdlBackplateMaterial\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\nconst SLIDER_MIN: number = 0;\r\nconst SLIDER_MAX: number = 100;\r\nconst SLIDER_VAL: number = 50;\r\nconst SLIDER_STEP: number = 0;\r\nconst SLIDER_SCALING: number = 1.0;\r\nconst SLIDER_MARGIN: number = 0.2;\r\n\r\n/**\r\n * Class used to create a slider in 3D\r\n */\r\nexport class Slider3D extends Control3D {\r\n /**\r\n * Base Url for the models.\r\n */\r\n public static MODEL_BASE_URL: string = \"https://assets.babylonjs.com/core/MRTK/\";\r\n\r\n /**\r\n * File name for the 8x4 model.\r\n */\r\n public static MODEL_FILENAME: string = \"mrtk-fluent-backplate.glb\";\r\n\r\n private _sliderBackplate: AbstractMesh;\r\n private _sliderBackplateMaterial: MRDLBackplateMaterial;\r\n private _sliderBarMaterial: MRDLSliderBarMaterial;\r\n private _sliderThumbMaterial: MRDLSliderThumbMaterial;\r\n private _sliderThumb: AbstractMesh;\r\n private _sliderBar: AbstractMesh;\r\n private _sliderBackplateVisible: boolean;\r\n\r\n private _minimum: number;\r\n private _maximum: number;\r\n private _value: number;\r\n private _step: number;\r\n\r\n private _draggedPosition: number;\r\n\r\n /** Observable raised when the sldier value changes */\r\n public onValueChangedObservable = new Observable<number>();\r\n\r\n /**\r\n * Creates a new slider\r\n * @param name defines the control name\r\n * @param sliderBackplateVisible defines if the control has a backplate, default is false\r\n */\r\n constructor(name?: string, sliderBackplateVisible?: boolean) {\r\n super(name);\r\n this._sliderBackplateVisible = sliderBackplateVisible || false;\r\n\r\n this._minimum = SLIDER_MIN;\r\n this._maximum = SLIDER_MAX;\r\n this._step = SLIDER_STEP;\r\n this._value = SLIDER_VAL;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public override get mesh(): Nullable<AbstractMesh> {\r\n if (this.node) {\r\n return this._sliderThumb;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets minimum value */\r\n public get minimum(): number {\r\n return this._minimum;\r\n }\r\n\r\n public set minimum(value: number) {\r\n if (this._minimum === value) {\r\n return;\r\n }\r\n\r\n this._minimum = Math.max(value, SLIDER_MIN);\r\n this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets maximum value */\r\n public get maximum(): number {\r\n return this._maximum;\r\n }\r\n\r\n public set maximum(value: number) {\r\n if (this._maximum === value) {\r\n return;\r\n }\r\n\r\n this._maximum = Math.max(value, this._minimum);\r\n this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets step value */\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n public set step(value: number) {\r\n if (this._step === value) {\r\n return;\r\n }\r\n\r\n this._step = Math.max(Math.min(value, this._maximum - this._minimum), SLIDER_STEP);\r\n }\r\n\r\n /** Gets or sets current value */\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n public set value(value: number) {\r\n if (this._value === value) {\r\n return;\r\n }\r\n\r\n this._value = Math.max(Math.min(value, this._maximum), this._minimum);\r\n if (this._sliderThumb) {\r\n this._sliderThumb.position.x = this._convertToPosition(this.value);\r\n }\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n protected get start(): number {\r\n if (!this.node) {\r\n return -SLIDER_SCALING / 2;\r\n }\r\n\r\n return this._sliderBar.position.x - this._sliderBar.scaling.x / 2;\r\n }\r\n\r\n protected get end(): number {\r\n if (!this.node) {\r\n return SLIDER_SCALING / 2;\r\n }\r\n\r\n return this._sliderBar.position.x + this._sliderBar.scaling.x / 2;\r\n }\r\n\r\n /**\r\n * Gets the slider bar material used by this control\r\n */\r\n public get sliderBarMaterial(): MRDLSliderBarMaterial {\r\n return this._sliderBarMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider thumb material used by this control\r\n */\r\n public get sliderThumbMaterial(): MRDLSliderThumbMaterial {\r\n return this._sliderThumbMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider backplate material used by this control\r\n */\r\n public get sliderBackplateMaterial(): MRDLBackplateMaterial {\r\n return this._sliderBackplateMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider bar mesh used by this control\r\n */\r\n public get sliderBar(): AbstractMesh {\r\n return this._sliderBar;\r\n }\r\n\r\n /**\r\n * Gets the slider thumb mesh used by this control\r\n */\r\n public get sliderThumb(): AbstractMesh {\r\n return this._sliderThumb;\r\n }\r\n\r\n /**\r\n * Gets the slider backplate mesh used by this control\r\n */\r\n public get sliderBackplate(): AbstractMesh {\r\n return this._sliderBackplate;\r\n }\r\n\r\n /** Sets a boolean indicating if the control is visible */\r\n public override set isVisible(value: boolean) {\r\n if (this._isVisible === value) {\r\n return;\r\n }\r\n\r\n this._isVisible = value;\r\n\r\n this.node?.setEnabled(value);\r\n }\r\n\r\n // Mesh association\r\n protected override _createNode(scene: Scene): TransformNode {\r\n const sliderBackplate = CreateBox(\r\n `${this.name}_sliderbackplate`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: 1.0,\r\n },\r\n scene\r\n );\r\n sliderBackplate.isPickable = false;\r\n sliderBackplate.visibility = 0;\r\n sliderBackplate.scaling = new Vector3(1, 0.5, 0.8);\r\n const baseUrl = Tools.GetAssetUrl(Slider3D.MODEL_BASE_URL);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n SceneLoader.ImportMeshAsync(undefined, baseUrl, Slider3D.MODEL_FILENAME, scene).then((result) => {\r\n // make all meshes not pickable. Required meshes' pickable state will be set later.\r\n for (const m of result.meshes) {\r\n m.isPickable = false;\r\n }\r\n const sliderBackplateModel = result.meshes[1];\r\n const sliderBarModel = result.meshes[1].clone(`${this.name}_sliderbar`, sliderBackplate);\r\n const sliderThumbModel = result.meshes[1].clone(`${this.name}_sliderthumb`, sliderBackplate);\r\n sliderBackplateModel.visibility = 0;\r\n\r\n if (this._sliderBackplateVisible) {\r\n sliderBackplateModel.visibility = 1;\r\n sliderBackplateModel.name = `${this.name}_sliderbackplate`;\r\n sliderBackplateModel.scaling.x = 1;\r\n sliderBackplateModel.scaling.z = 0.2;\r\n sliderBackplateModel.parent = sliderBackplate;\r\n if (this._sliderBackplateMaterial) {\r\n sliderBackplateModel.material = this._sliderBackplateMaterial;\r\n }\r\n this._sliderBackplate = sliderBackplateModel;\r\n }\r\n\r\n if (sliderBarModel) {\r\n sliderBarModel.parent = sliderBackplate;\r\n sliderBarModel.position.z = -0.1;\r\n sliderBarModel.scaling = new Vector3(SLIDER_SCALING - SLIDER_MARGIN, 0.04, 0.3);\r\n if (this._sliderBarMaterial) {\r\n sliderBarModel.material = this._sliderBarMaterial;\r\n }\r\n this._sliderBar = sliderBarModel;\r\n }\r\n\r\n if (sliderThumbModel) {\r\n sliderThumbModel.parent = sliderBackplate;\r\n sliderThumbModel.isPickable = true;\r\n sliderThumbModel.position.z = -0.115;\r\n sliderThumbModel.scaling = new Vector3(0.025, 0.3, 0.6);\r\n sliderThumbModel.position.x = this._convertToPosition(this.value);\r\n sliderThumbModel.addBehavior(this._createBehavior());\r\n if (this._sliderThumbMaterial) {\r\n sliderThumbModel.material = this._sliderThumbMaterial;\r\n }\r\n this._sliderThumb = sliderThumbModel;\r\n }\r\n\r\n this._injectGUI3DReservedDataStore(sliderBackplate).control = this;\r\n const meshes = sliderBackplate.getChildMeshes();\r\n for (const mesh of meshes) {\r\n this._injectGUI3DReservedDataStore(mesh).control = this;\r\n }\r\n });\r\n\r\n this._affectMaterial(sliderBackplate);\r\n return sliderBackplate;\r\n }\r\n\r\n protected override _affectMaterial(mesh: AbstractMesh) {\r\n this._sliderBackplateMaterial = this._sliderBackplateMaterial ?? new MRDLBackplateMaterial(`${this.name}_sliderbackplate_material`, mesh.getScene());\r\n this._sliderBarMaterial = this._sliderBarMaterial ?? new MRDLSliderBarMaterial(`${this.name}_sliderbar_material`, mesh.getScene());\r\n this._sliderThumbMaterial = this._sliderThumbMaterial ?? new MRDLSliderThumbMaterial(`${this.name}_sliderthumb_material`, mesh.getScene());\r\n }\r\n\r\n private _createBehavior(): PointerDragBehavior {\r\n const pointerDragBehavior = new PointerDragBehavior({ dragAxis: Vector3.Right() });\r\n pointerDragBehavior.moveAttached = false;\r\n\r\n pointerDragBehavior.onDragStartObservable.add(() => {\r\n this._draggedPosition = this._sliderThumb.position.x;\r\n });\r\n\r\n pointerDragBehavior.onDragObservable.add((event) => {\r\n this._draggedPosition += event.dragDistance / this.scaling.x;\r\n this.value = this._convertToValue(this._draggedPosition);\r\n });\r\n\r\n return pointerDragBehavior;\r\n }\r\n\r\n private _convertToPosition(value: number): number {\r\n const position = ((value - this.minimum) / (this.maximum - this.minimum)) * (this.end - this.start) + this.start;\r\n return Math.min(Math.max(position, this.start), this.end);\r\n }\r\n\r\n private _convertToValue(position: number): number {\r\n let value = ((position - this.start) / (this.end - this.start)) * (this.maximum - this.minimum);\r\n value = this.step ? Math.round(value / this.step) * this.step : value;\r\n\r\n return Math.max(Math.min(this.minimum + value, this._maximum), this._minimum);\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public override dispose() {\r\n super.dispose();\r\n this._sliderBar?.dispose();\r\n this._sliderThumb?.dispose();\r\n this._sliderBarMaterial?.dispose();\r\n this._sliderThumbMaterial?.dispose();\r\n this._sliderBackplate?.dispose();\r\n this._sliderBackplateMaterial?.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
|
+
import type { float } from "@babylonjs/core/types.js";
|
|
3
|
+
import { VolumeBasedPanel } from "./volumeBasedPanel.js";
|
|
4
|
+
import type { Control3D } from "./control3D.js";
|
|
5
|
+
/**
|
|
6
|
+
* Class used to create a container panel deployed on the surface of a sphere
|
|
7
|
+
*/
|
|
8
|
+
export declare class SpherePanel extends VolumeBasedPanel {
|
|
9
|
+
private _radius;
|
|
10
|
+
/**
|
|
11
|
+
* Gets or sets the radius of the sphere where to project controls (5 by default)
|
|
12
|
+
*/
|
|
13
|
+
get radius(): float;
|
|
14
|
+
set radius(value: float);
|
|
15
|
+
protected _mapGridNode(control: Control3D, nodePosition: Vector3): void;
|
|
16
|
+
private _sphericalMapping;
|
|
17
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Tools } from "@babylonjs/core/Misc/tools.js";
|
|
2
|
+
import { Matrix, TmpVectors, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
3
|
+
import { VolumeBasedPanel } from "./volumeBasedPanel.js";
|
|
4
|
+
import { Container3D } from "./container3D.js";
|
|
5
|
+
import { Axis } from "@babylonjs/core/Maths/math.axis.js";
|
|
6
|
+
/**
|
|
7
|
+
* Class used to create a container panel deployed on the surface of a sphere
|
|
8
|
+
*/
|
|
9
|
+
export class SpherePanel extends VolumeBasedPanel {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this._radius = 5.0;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Gets or sets the radius of the sphere where to project controls (5 by default)
|
|
16
|
+
*/
|
|
17
|
+
get radius() {
|
|
18
|
+
return this._radius;
|
|
19
|
+
}
|
|
20
|
+
set radius(value) {
|
|
21
|
+
if (this._radius === value) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this._radius = value;
|
|
25
|
+
Tools.SetImmediate(() => {
|
|
26
|
+
this._arrangeChildren();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
_mapGridNode(control, nodePosition) {
|
|
30
|
+
const mesh = control.mesh;
|
|
31
|
+
if (!mesh) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const newPos = this._sphericalMapping(nodePosition);
|
|
35
|
+
control.position = newPos;
|
|
36
|
+
switch (this.orientation) {
|
|
37
|
+
case Container3D.FACEORIGIN_ORIENTATION:
|
|
38
|
+
mesh.lookAt(new Vector3(2 * newPos.x, 2 * newPos.y, 2 * newPos.z));
|
|
39
|
+
break;
|
|
40
|
+
case Container3D.FACEORIGINREVERSED_ORIENTATION:
|
|
41
|
+
mesh.lookAt(new Vector3(-newPos.x, -newPos.y, -newPos.z));
|
|
42
|
+
break;
|
|
43
|
+
case Container3D.FACEFORWARD_ORIENTATION:
|
|
44
|
+
break;
|
|
45
|
+
case Container3D.FACEFORWARDREVERSED_ORIENTATION:
|
|
46
|
+
mesh.rotate(Axis.Y, Math.PI, 0 /* Space.LOCAL */);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
_sphericalMapping(source) {
|
|
51
|
+
const newPos = new Vector3(0, 0, this._radius);
|
|
52
|
+
const xAngle = source.y / this._radius;
|
|
53
|
+
const yAngle = -(source.x / this._radius);
|
|
54
|
+
Matrix.RotationYawPitchRollToRef(yAngle, xAngle, 0, TmpVectors.Matrix[0]);
|
|
55
|
+
return Vector3.TransformNormal(newPos, TmpVectors.Matrix[0]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=spherePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spherePanel.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/spherePanel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,sCAAwB;AACxC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,6CAA+B;AAGrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAS,2CAA6B;AAEnD;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAAjD;;QACY,YAAO,GAAG,GAAG,CAAC;IAwD1B,CAAC;IAtDG;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAY;QAC1B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAES,YAAY,CAAC,OAAkB,EAAE,YAAqB;QAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAE1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACpD,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;QAE1B,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,WAAW,CAAC,sBAAsB;gBACnC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM;YACV,KAAK,WAAW,CAAC,8BAA8B;gBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,MAAM;YACV,KAAK,WAAW,CAAC,uBAAuB;gBACpC,MAAM;YACV,KAAK,WAAW,CAAC,+BAA+B;gBAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,sBAAc,CAAC;gBAC1C,MAAM;QACd,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAe;QACrC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1E,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;CACJ","sourcesContent":["import { Tools } from \"core/Misc/tools\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"core/Maths/math.vector\";\r\nimport type { float } from \"core/types\";\r\n\r\nimport { VolumeBasedPanel } from \"./volumeBasedPanel\";\r\nimport type { Control3D } from \"./control3D\";\r\nimport { Container3D } from \"./container3D\";\r\nimport { Axis, Space } from \"core/Maths/math.axis\";\r\n\r\n/**\r\n * Class used to create a container panel deployed on the surface of a sphere\r\n */\r\nexport class SpherePanel extends VolumeBasedPanel {\r\n private _radius = 5.0;\r\n\r\n /**\r\n * Gets or sets the radius of the sphere where to project controls (5 by default)\r\n */\r\n public get radius(): float {\r\n return this._radius;\r\n }\r\n\r\n public set radius(value: float) {\r\n if (this._radius === value) {\r\n return;\r\n }\r\n\r\n this._radius = value;\r\n\r\n Tools.SetImmediate(() => {\r\n this._arrangeChildren();\r\n });\r\n }\r\n\r\n protected _mapGridNode(control: Control3D, nodePosition: Vector3) {\r\n const mesh = control.mesh;\r\n\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const newPos = this._sphericalMapping(nodePosition);\r\n control.position = newPos;\r\n\r\n switch (this.orientation) {\r\n case Container3D.FACEORIGIN_ORIENTATION:\r\n mesh.lookAt(new Vector3(2 * newPos.x, 2 * newPos.y, 2 * newPos.z));\r\n break;\r\n case Container3D.FACEORIGINREVERSED_ORIENTATION:\r\n mesh.lookAt(new Vector3(-newPos.x, -newPos.y, -newPos.z));\r\n break;\r\n case Container3D.FACEFORWARD_ORIENTATION:\r\n break;\r\n case Container3D.FACEFORWARDREVERSED_ORIENTATION:\r\n mesh.rotate(Axis.Y, Math.PI, Space.LOCAL);\r\n break;\r\n }\r\n }\r\n\r\n private _sphericalMapping(source: Vector3) {\r\n const newPos = new Vector3(0, 0, this._radius);\r\n\r\n const xAngle = source.y / this._radius;\r\n const yAngle = -(source.x / this._radius);\r\n\r\n Matrix.RotationYawPitchRollToRef(yAngle, xAngle, 0, TmpVectors.Matrix[0]);\r\n\r\n return Vector3.TransformNormal(newPos, TmpVectors.Matrix[0]);\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Container3D } from "./container3D.js";
|
|
2
|
+
/**
|
|
3
|
+
* Class used to create a stack panel in 3D on XY plane
|
|
4
|
+
*/
|
|
5
|
+
export declare class StackPanel3D extends Container3D {
|
|
6
|
+
private _isVertical;
|
|
7
|
+
/**
|
|
8
|
+
* Gets or sets a boolean indicating if the stack panel is vertical or horizontal (horizontal by default)
|
|
9
|
+
*/
|
|
10
|
+
get isVertical(): boolean;
|
|
11
|
+
set isVertical(value: boolean);
|
|
12
|
+
/**
|
|
13
|
+
* Gets or sets the distance between elements
|
|
14
|
+
*/
|
|
15
|
+
margin: number;
|
|
16
|
+
/**
|
|
17
|
+
* Creates new StackPanel
|
|
18
|
+
* @param isVertical
|
|
19
|
+
*/
|
|
20
|
+
constructor(isVertical?: boolean);
|
|
21
|
+
protected _arrangeChildren(): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Tools } from "@babylonjs/core/Misc/tools.js";
|
|
2
|
+
import { Matrix, TmpVectors, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
3
|
+
import { Container3D } from "./container3D.js";
|
|
4
|
+
/**
|
|
5
|
+
* Class used to create a stack panel in 3D on XY plane
|
|
6
|
+
*/
|
|
7
|
+
export class StackPanel3D extends Container3D {
|
|
8
|
+
/**
|
|
9
|
+
* Gets or sets a boolean indicating if the stack panel is vertical or horizontal (horizontal by default)
|
|
10
|
+
*/
|
|
11
|
+
get isVertical() {
|
|
12
|
+
return this._isVertical;
|
|
13
|
+
}
|
|
14
|
+
set isVertical(value) {
|
|
15
|
+
if (this._isVertical === value) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this._isVertical = value;
|
|
19
|
+
Tools.SetImmediate(() => {
|
|
20
|
+
this._arrangeChildren();
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates new StackPanel
|
|
25
|
+
* @param isVertical
|
|
26
|
+
*/
|
|
27
|
+
constructor(isVertical = false) {
|
|
28
|
+
super();
|
|
29
|
+
this._isVertical = false;
|
|
30
|
+
/**
|
|
31
|
+
* Gets or sets the distance between elements
|
|
32
|
+
*/
|
|
33
|
+
this.margin = 0.1;
|
|
34
|
+
this._isVertical = isVertical;
|
|
35
|
+
}
|
|
36
|
+
_arrangeChildren() {
|
|
37
|
+
let width = 0;
|
|
38
|
+
let height = 0;
|
|
39
|
+
let controlCount = 0;
|
|
40
|
+
const extendSizes = [];
|
|
41
|
+
const currentInverseWorld = Matrix.Invert(this.node.computeWorldMatrix(true));
|
|
42
|
+
// Measure
|
|
43
|
+
for (const child of this._children) {
|
|
44
|
+
if (!child.mesh) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
controlCount++;
|
|
48
|
+
child.mesh.computeWorldMatrix(true);
|
|
49
|
+
child.mesh.getWorldMatrix().multiplyToRef(currentInverseWorld, TmpVectors.Matrix[0]);
|
|
50
|
+
const boundingBox = child.mesh.getBoundingInfo().boundingBox;
|
|
51
|
+
const extendSize = Vector3.TransformNormal(boundingBox.extendSize, TmpVectors.Matrix[0]);
|
|
52
|
+
extendSizes.push(extendSize);
|
|
53
|
+
if (this._isVertical) {
|
|
54
|
+
height += extendSize.y;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
width += extendSize.x;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (this._isVertical) {
|
|
61
|
+
height += ((controlCount - 1) * this.margin) / 2;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
width += ((controlCount - 1) * this.margin) / 2;
|
|
65
|
+
}
|
|
66
|
+
// Arrange
|
|
67
|
+
let offset;
|
|
68
|
+
if (this._isVertical) {
|
|
69
|
+
offset = -height;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
offset = -width;
|
|
73
|
+
}
|
|
74
|
+
let index = 0;
|
|
75
|
+
for (const child of this._children) {
|
|
76
|
+
if (!child.mesh) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
controlCount--;
|
|
80
|
+
const extendSize = extendSizes[index++];
|
|
81
|
+
if (this._isVertical) {
|
|
82
|
+
child.position.y = offset + extendSize.y;
|
|
83
|
+
child.position.x = 0;
|
|
84
|
+
offset += extendSize.y * 2;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
child.position.x = offset + extendSize.x;
|
|
88
|
+
child.position.y = 0;
|
|
89
|
+
offset += extendSize.x * 2;
|
|
90
|
+
}
|
|
91
|
+
offset += controlCount > 0 ? this.margin : 0;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=stackPanel3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackPanel3D.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/stackPanel3D.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"core/Misc/tools\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"core/Maths/math.vector\";\r\n\r\nimport { Container3D } from \"./container3D\";\r\n\r\n/**\r\n * Class used to create a stack panel in 3D on XY plane\r\n */\r\nexport class StackPanel3D extends Container3D {\r\n private _isVertical = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the stack panel is vertical or horizontal (horizontal by default)\r\n */\r\n public get isVertical(): boolean {\r\n return this._isVertical;\r\n }\r\n\r\n public set isVertical(value: boolean) {\r\n if (this._isVertical === value) {\r\n return;\r\n }\r\n\r\n this._isVertical = value;\r\n\r\n Tools.SetImmediate(() => {\r\n this._arrangeChildren();\r\n });\r\n }\r\n\r\n /**\r\n * Gets or sets the distance between elements\r\n */\r\n public margin = 0.1;\r\n\r\n /**\r\n * Creates new StackPanel\r\n * @param isVertical\r\n */\r\n public constructor(isVertical = false) {\r\n super();\r\n\r\n this._isVertical = isVertical;\r\n }\r\n\r\n protected override _arrangeChildren() {\r\n let width = 0;\r\n let height = 0;\r\n let controlCount = 0;\r\n const extendSizes = [];\r\n\r\n const currentInverseWorld = Matrix.Invert(this.node!.computeWorldMatrix(true));\r\n\r\n // Measure\r\n for (const child of this._children) {\r\n if (!child.mesh) {\r\n continue;\r\n }\r\n\r\n controlCount++;\r\n child.mesh.computeWorldMatrix(true);\r\n child.mesh.getWorldMatrix().multiplyToRef(currentInverseWorld, TmpVectors.Matrix[0]);\r\n\r\n const boundingBox = child.mesh.getBoundingInfo().boundingBox;\r\n const extendSize = Vector3.TransformNormal(boundingBox.extendSize, TmpVectors.Matrix[0]);\r\n extendSizes.push(extendSize);\r\n\r\n if (this._isVertical) {\r\n height += extendSize.y;\r\n } else {\r\n width += extendSize.x;\r\n }\r\n }\r\n\r\n if (this._isVertical) {\r\n height += ((controlCount - 1) * this.margin) / 2;\r\n } else {\r\n width += ((controlCount - 1) * this.margin) / 2;\r\n }\r\n\r\n // Arrange\r\n let offset: number;\r\n if (this._isVertical) {\r\n offset = -height;\r\n } else {\r\n offset = -width;\r\n }\r\n\r\n let index = 0;\r\n for (const child of this._children) {\r\n if (!child.mesh) {\r\n continue;\r\n }\r\n controlCount--;\r\n const extendSize = extendSizes[index++];\r\n\r\n if (this._isVertical) {\r\n child.position.y = offset + extendSize.y;\r\n child.position.x = 0;\r\n offset += extendSize.y * 2;\r\n } else {\r\n child.position.x = offset + extendSize.x;\r\n child.position.y = 0;\r\n offset += extendSize.x * 2;\r\n }\r\n\r\n offset += controlCount > 0 ? this.margin : 0;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
|
+
import type { Mesh } from "@babylonjs/core/Meshes/mesh.js";
|
|
3
|
+
import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
4
|
+
import type { Scene } from "@babylonjs/core/scene.js";
|
|
5
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
6
|
+
import { Button3D } from "./button3D.js";
|
|
7
|
+
/**
|
|
8
|
+
* Class used to create a touchable button in 3D
|
|
9
|
+
*/
|
|
10
|
+
export declare class TouchButton3D extends Button3D {
|
|
11
|
+
private _collisionMesh;
|
|
12
|
+
private _collidableFrontDirection;
|
|
13
|
+
private _isNearPressed;
|
|
14
|
+
private _interactionSurfaceHeight;
|
|
15
|
+
private _isToggleButton;
|
|
16
|
+
private _toggleState;
|
|
17
|
+
private _toggleButtonCallback;
|
|
18
|
+
/**
|
|
19
|
+
* An event triggered when the button is toggled. Only fired if 'isToggleButton' is true
|
|
20
|
+
*/
|
|
21
|
+
onToggleObservable: Observable<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new touchable button
|
|
24
|
+
* @param name defines the control name
|
|
25
|
+
* @param collisionMesh mesh to track collisions with
|
|
26
|
+
*/
|
|
27
|
+
constructor(name?: string, collisionMesh?: Mesh);
|
|
28
|
+
/**
|
|
29
|
+
* Whether the current interaction is caused by near interaction or not
|
|
30
|
+
*/
|
|
31
|
+
get isActiveNearInteraction(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction
|
|
34
|
+
* @param frontWorldDir the forward direction of the button
|
|
35
|
+
*/
|
|
36
|
+
set collidableFrontDirection(frontWorldDir: Vector3);
|
|
37
|
+
/**
|
|
38
|
+
* Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'
|
|
39
|
+
*/
|
|
40
|
+
get collidableFrontDirection(): Vector3;
|
|
41
|
+
/**
|
|
42
|
+
* Sets the mesh used for testing input collision
|
|
43
|
+
* @param collisionMesh the new collision mesh for the button
|
|
44
|
+
*/
|
|
45
|
+
set collisionMesh(collisionMesh: Mesh);
|
|
46
|
+
/**
|
|
47
|
+
* Setter for if this TouchButton3D should be treated as a toggle button
|
|
48
|
+
* @param value If this TouchHolographicButton should act like a toggle button
|
|
49
|
+
*/
|
|
50
|
+
set isToggleButton(value: boolean);
|
|
51
|
+
get isToggleButton(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* A public entrypoint to set the toggle state of the TouchHolographicButton. Only works if 'isToggleButton' is true
|
|
54
|
+
* @param newState The new state to set the TouchHolographicButton's toggle state to
|
|
55
|
+
*/
|
|
56
|
+
set isToggled(newState: boolean);
|
|
57
|
+
get isToggled(): boolean;
|
|
58
|
+
protected _onToggle(newState: boolean): void;
|
|
59
|
+
private _isInteractionInFrontOfButton;
|
|
60
|
+
/**
|
|
61
|
+
* Get the height of the touchPoint from the collidable part of the button
|
|
62
|
+
* @param touchPoint the point to compare to the button, in absolute position
|
|
63
|
+
* @returns the depth of the touch point into the front of the button
|
|
64
|
+
*/
|
|
65
|
+
getPressDepth(touchPoint: Vector3): number;
|
|
66
|
+
protected _getInteractionHeight(interactionPos: Vector3, basePos: Vector3): number;
|
|
67
|
+
/**
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
70
|
+
_generatePointerEventType(providedType: number, nearMeshPosition: Vector3, activeInteractionCount: number): number;
|
|
71
|
+
protected _getTypeName(): string;
|
|
72
|
+
protected _createNode(scene: Scene): TransformNode;
|
|
73
|
+
/**
|
|
74
|
+
* Releases all associated resources
|
|
75
|
+
*/
|
|
76
|
+
dispose(): void;
|
|
77
|
+
}
|