@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,205 @@
|
|
|
1
|
+
// Assumptions: absolute position of button mesh is inside the mesh
|
|
2
|
+
import { Vector3, TmpVectors } from "@babylonjs/core/Maths/math.vector.js";
|
|
3
|
+
import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents.js";
|
|
4
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
5
|
+
import { Button3D } from "./button3D.js";
|
|
6
|
+
/**
|
|
7
|
+
* Class used to create a touchable button in 3D
|
|
8
|
+
*/
|
|
9
|
+
export class TouchButton3D extends Button3D {
|
|
10
|
+
/**
|
|
11
|
+
* Creates a new touchable button
|
|
12
|
+
* @param name defines the control name
|
|
13
|
+
* @param collisionMesh mesh to track collisions with
|
|
14
|
+
*/
|
|
15
|
+
constructor(name, collisionMesh) {
|
|
16
|
+
super(name);
|
|
17
|
+
this._isNearPressed = false;
|
|
18
|
+
this._interactionSurfaceHeight = 0;
|
|
19
|
+
this._isToggleButton = false;
|
|
20
|
+
this._toggleState = false;
|
|
21
|
+
this._toggleButtonCallback = () => {
|
|
22
|
+
this._onToggle(!this._toggleState);
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* An event triggered when the button is toggled. Only fired if 'isToggleButton' is true
|
|
26
|
+
*/
|
|
27
|
+
this.onToggleObservable = new Observable();
|
|
28
|
+
this.collidableFrontDirection = Vector3.Zero();
|
|
29
|
+
if (collisionMesh) {
|
|
30
|
+
this.collisionMesh = collisionMesh;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether the current interaction is caused by near interaction or not
|
|
35
|
+
*/
|
|
36
|
+
get isActiveNearInteraction() {
|
|
37
|
+
return this._isNearPressed;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction
|
|
41
|
+
* @param frontWorldDir the forward direction of the button
|
|
42
|
+
*/
|
|
43
|
+
set collidableFrontDirection(frontWorldDir) {
|
|
44
|
+
this._collidableFrontDirection = frontWorldDir.normalize();
|
|
45
|
+
if (this._collisionMesh) {
|
|
46
|
+
const invert = TmpVectors.Matrix[0];
|
|
47
|
+
invert.copyFrom(this._collisionMesh.getWorldMatrix());
|
|
48
|
+
invert.invert();
|
|
49
|
+
Vector3.TransformNormalToRef(this._collidableFrontDirection, invert, this._collidableFrontDirection);
|
|
50
|
+
this._collidableFrontDirection.normalize();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'
|
|
55
|
+
*/
|
|
56
|
+
get collidableFrontDirection() {
|
|
57
|
+
if (this._collisionMesh) {
|
|
58
|
+
// Update the front direction to reflect any rotations of the collision mesh
|
|
59
|
+
const transformedDirection = TmpVectors.Vector3[0];
|
|
60
|
+
Vector3.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), transformedDirection);
|
|
61
|
+
return transformedDirection.normalize();
|
|
62
|
+
}
|
|
63
|
+
return this._collidableFrontDirection;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Sets the mesh used for testing input collision
|
|
67
|
+
* @param collisionMesh the new collision mesh for the button
|
|
68
|
+
*/
|
|
69
|
+
set collisionMesh(collisionMesh) {
|
|
70
|
+
// Remove the GUI3DManager's data from the previous collision mesh's reserved data store, and reset interactability
|
|
71
|
+
if (this._collisionMesh) {
|
|
72
|
+
this._collisionMesh.isNearPickable = false;
|
|
73
|
+
if (this._collisionMesh.reservedDataStore?.GUI3D) {
|
|
74
|
+
this._collisionMesh.reservedDataStore.GUI3D = {};
|
|
75
|
+
}
|
|
76
|
+
const meshes = this._collisionMesh.getChildMeshes();
|
|
77
|
+
for (const mesh of meshes) {
|
|
78
|
+
mesh.isNearPickable = false;
|
|
79
|
+
if (mesh.reservedDataStore?.GUI3D) {
|
|
80
|
+
mesh.reservedDataStore.GUI3D = {};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this._collisionMesh = collisionMesh;
|
|
85
|
+
this._injectGUI3DReservedDataStore(this._collisionMesh).control = this;
|
|
86
|
+
this._collisionMesh.isNearPickable = true;
|
|
87
|
+
const meshes = this._collisionMesh.getChildMeshes();
|
|
88
|
+
for (const mesh of meshes) {
|
|
89
|
+
this._injectGUI3DReservedDataStore(mesh).control = this;
|
|
90
|
+
mesh.isNearPickable = true;
|
|
91
|
+
}
|
|
92
|
+
this.collidableFrontDirection = collisionMesh.forward;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Setter for if this TouchButton3D should be treated as a toggle button
|
|
96
|
+
* @param value If this TouchHolographicButton should act like a toggle button
|
|
97
|
+
*/
|
|
98
|
+
set isToggleButton(value) {
|
|
99
|
+
if (value === this._isToggleButton) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this._isToggleButton = value;
|
|
103
|
+
if (value) {
|
|
104
|
+
this.onPointerUpObservable.add(this._toggleButtonCallback);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);
|
|
108
|
+
// Safety check, reset the button if it's toggled on but no longer a toggle button
|
|
109
|
+
if (this._toggleState) {
|
|
110
|
+
this._onToggle(false);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
get isToggleButton() {
|
|
115
|
+
return this._isToggleButton;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* A public entrypoint to set the toggle state of the TouchHolographicButton. Only works if 'isToggleButton' is true
|
|
119
|
+
* @param newState The new state to set the TouchHolographicButton's toggle state to
|
|
120
|
+
*/
|
|
121
|
+
set isToggled(newState) {
|
|
122
|
+
if (this._isToggleButton && this._toggleState !== newState) {
|
|
123
|
+
this._onToggle(newState);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
get isToggled() {
|
|
127
|
+
return this._toggleState;
|
|
128
|
+
}
|
|
129
|
+
_onToggle(newState) {
|
|
130
|
+
this._toggleState = newState;
|
|
131
|
+
this.onToggleObservable.notifyObservers(newState);
|
|
132
|
+
}
|
|
133
|
+
// Returns true if the collidable is in front of the button, or if the button has no front direction
|
|
134
|
+
_isInteractionInFrontOfButton(collidablePos) {
|
|
135
|
+
return this._getInteractionHeight(collidablePos, this._collisionMesh.getAbsolutePosition()) > 0;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the height of the touchPoint from the collidable part of the button
|
|
139
|
+
* @param touchPoint the point to compare to the button, in absolute position
|
|
140
|
+
* @returns the depth of the touch point into the front of the button
|
|
141
|
+
*/
|
|
142
|
+
getPressDepth(touchPoint) {
|
|
143
|
+
if (!this._isNearPressed) {
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
const interactionHeight = this._getInteractionHeight(touchPoint, this._collisionMesh.getAbsolutePosition());
|
|
147
|
+
return this._interactionSurfaceHeight - interactionHeight;
|
|
148
|
+
}
|
|
149
|
+
// Returns true if the collidable is in front of the button, or if the button has no front direction
|
|
150
|
+
_getInteractionHeight(interactionPos, basePos) {
|
|
151
|
+
const frontDir = this.collidableFrontDirection;
|
|
152
|
+
if (frontDir.length() === 0) {
|
|
153
|
+
// The button has no front, just return the distance to the base
|
|
154
|
+
return Vector3.Distance(interactionPos, basePos);
|
|
155
|
+
}
|
|
156
|
+
const d = Vector3.Dot(basePos, frontDir);
|
|
157
|
+
const abc = Vector3.Dot(interactionPos, frontDir);
|
|
158
|
+
return abc - d;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
_generatePointerEventType(providedType, nearMeshPosition, activeInteractionCount) {
|
|
164
|
+
if (providedType === PointerEventTypes.POINTERDOWN || providedType === PointerEventTypes.POINTERMOVE) {
|
|
165
|
+
if (!this._isInteractionInFrontOfButton(nearMeshPosition)) {
|
|
166
|
+
// Near interaction mesh is behind the button, don't send a pointer down
|
|
167
|
+
return PointerEventTypes.POINTERMOVE;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this._isNearPressed = true;
|
|
171
|
+
this._interactionSurfaceHeight = this._getInteractionHeight(nearMeshPosition, this._collisionMesh.getAbsolutePosition());
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (providedType === PointerEventTypes.POINTERUP) {
|
|
175
|
+
if (activeInteractionCount == 0) {
|
|
176
|
+
// We get the release for the down we swallowed earlier, swallow as well
|
|
177
|
+
return PointerEventTypes.POINTERMOVE;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this._isNearPressed = false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return providedType;
|
|
184
|
+
}
|
|
185
|
+
_getTypeName() {
|
|
186
|
+
return "TouchButton3D";
|
|
187
|
+
}
|
|
188
|
+
// Mesh association
|
|
189
|
+
_createNode(scene) {
|
|
190
|
+
return super._createNode(scene);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Releases all associated resources
|
|
194
|
+
*/
|
|
195
|
+
dispose() {
|
|
196
|
+
super.dispose();
|
|
197
|
+
// Clean up toggle observables
|
|
198
|
+
this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);
|
|
199
|
+
this.onToggleObservable.clear();
|
|
200
|
+
if (this._collisionMesh) {
|
|
201
|
+
this._collisionMesh.dispose();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=touchButton3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"touchButton3D.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/touchButton3D.ts"],"names":[],"mappings":"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","sourcesContent":["// Assumptions: absolute position of button mesh is inside the mesh\r\n\r\nimport { Vector3, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { PointerEventTypes } from \"core/Events/pointerEvents\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\nimport { Button3D } from \"./button3D\";\r\n\r\n/**\r\n * Class used to create a touchable button in 3D\r\n */\r\nexport class TouchButton3D extends Button3D {\r\n private _collisionMesh: Mesh;\r\n\r\n // 'front' direction. If Vector3.Zero, there is no front and all directions of interaction are accepted\r\n private _collidableFrontDirection: Vector3;\r\n private _isNearPressed = false;\r\n private _interactionSurfaceHeight = 0;\r\n\r\n private _isToggleButton = false;\r\n private _toggleState = false;\r\n private _toggleButtonCallback = () => {\r\n this._onToggle(!this._toggleState);\r\n };\r\n\r\n /**\r\n * An event triggered when the button is toggled. Only fired if 'isToggleButton' is true\r\n */\r\n public onToggleObservable = new Observable<boolean>();\r\n\r\n /**\r\n * Creates a new touchable button\r\n * @param name defines the control name\r\n * @param collisionMesh mesh to track collisions with\r\n */\r\n constructor(name?: string, collisionMesh?: Mesh) {\r\n super(name);\r\n\r\n this.collidableFrontDirection = Vector3.Zero();\r\n\r\n if (collisionMesh) {\r\n this.collisionMesh = collisionMesh;\r\n }\r\n }\r\n\r\n /**\r\n * Whether the current interaction is caused by near interaction or not\r\n */\r\n public get isActiveNearInteraction() {\r\n return this._isNearPressed;\r\n }\r\n\r\n /**\r\n * Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction\r\n * @param frontWorldDir the forward direction of the button\r\n */\r\n public set collidableFrontDirection(frontWorldDir: Vector3) {\r\n this._collidableFrontDirection = frontWorldDir.normalize();\r\n\r\n if (this._collisionMesh) {\r\n const invert = TmpVectors.Matrix[0];\r\n\r\n invert.copyFrom(this._collisionMesh.getWorldMatrix());\r\n invert.invert();\r\n Vector3.TransformNormalToRef(this._collidableFrontDirection, invert, this._collidableFrontDirection);\r\n this._collidableFrontDirection.normalize();\r\n }\r\n }\r\n\r\n /**\r\n * Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'\r\n */\r\n public get collidableFrontDirection() {\r\n if (this._collisionMesh) {\r\n // Update the front direction to reflect any rotations of the collision mesh\r\n const transformedDirection = TmpVectors.Vector3[0];\r\n Vector3.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), transformedDirection);\r\n\r\n return transformedDirection.normalize();\r\n }\r\n\r\n return this._collidableFrontDirection;\r\n }\r\n\r\n /**\r\n * Sets the mesh used for testing input collision\r\n * @param collisionMesh the new collision mesh for the button\r\n */\r\n public set collisionMesh(collisionMesh: Mesh) {\r\n // Remove the GUI3DManager's data from the previous collision mesh's reserved data store, and reset interactability\r\n if (this._collisionMesh) {\r\n this._collisionMesh.isNearPickable = false;\r\n if (this._collisionMesh.reservedDataStore?.GUI3D) {\r\n this._collisionMesh.reservedDataStore.GUI3D = {};\r\n }\r\n\r\n const meshes = this._collisionMesh.getChildMeshes();\r\n for (const mesh of meshes) {\r\n mesh.isNearPickable = false;\r\n if (mesh.reservedDataStore?.GUI3D) {\r\n mesh.reservedDataStore.GUI3D = {};\r\n }\r\n }\r\n }\r\n\r\n this._collisionMesh = collisionMesh;\r\n this._injectGUI3DReservedDataStore(this._collisionMesh).control = this;\r\n this._collisionMesh.isNearPickable = true;\r\n\r\n const meshes = this._collisionMesh.getChildMeshes();\r\n for (const mesh of meshes) {\r\n this._injectGUI3DReservedDataStore(mesh).control = this;\r\n mesh.isNearPickable = true;\r\n }\r\n this.collidableFrontDirection = collisionMesh.forward;\r\n }\r\n\r\n /**\r\n * Setter for if this TouchButton3D should be treated as a toggle button\r\n * @param value If this TouchHolographicButton should act like a toggle button\r\n */\r\n public set isToggleButton(value: boolean) {\r\n if (value === this._isToggleButton) {\r\n return;\r\n }\r\n\r\n this._isToggleButton = value;\r\n\r\n if (value) {\r\n this.onPointerUpObservable.add(this._toggleButtonCallback);\r\n } else {\r\n this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);\r\n\r\n // Safety check, reset the button if it's toggled on but no longer a toggle button\r\n if (this._toggleState) {\r\n this._onToggle(false);\r\n }\r\n }\r\n }\r\n public get isToggleButton() {\r\n return this._isToggleButton;\r\n }\r\n\r\n /**\r\n * A public entrypoint to set the toggle state of the TouchHolographicButton. Only works if 'isToggleButton' is true\r\n * @param newState The new state to set the TouchHolographicButton's toggle state to\r\n */\r\n public set isToggled(newState: boolean) {\r\n if (this._isToggleButton && this._toggleState !== newState) {\r\n this._onToggle(newState);\r\n }\r\n }\r\n public get isToggled() {\r\n return this._toggleState;\r\n }\r\n\r\n protected _onToggle(newState: boolean) {\r\n this._toggleState = newState;\r\n this.onToggleObservable.notifyObservers(newState);\r\n }\r\n\r\n // Returns true if the collidable is in front of the button, or if the button has no front direction\r\n private _isInteractionInFrontOfButton(collidablePos: Vector3) {\r\n return this._getInteractionHeight(collidablePos, this._collisionMesh.getAbsolutePosition()) > 0;\r\n }\r\n\r\n /**\r\n * Get the height of the touchPoint from the collidable part of the button\r\n * @param touchPoint the point to compare to the button, in absolute position\r\n * @returns the depth of the touch point into the front of the button\r\n */\r\n public getPressDepth(touchPoint: Vector3) {\r\n if (!this._isNearPressed) {\r\n return 0;\r\n }\r\n const interactionHeight = this._getInteractionHeight(touchPoint, this._collisionMesh.getAbsolutePosition());\r\n return this._interactionSurfaceHeight - interactionHeight;\r\n }\r\n\r\n // Returns true if the collidable is in front of the button, or if the button has no front direction\r\n protected _getInteractionHeight(interactionPos: Vector3, basePos: Vector3) {\r\n const frontDir = this.collidableFrontDirection;\r\n if (frontDir.length() === 0) {\r\n // The button has no front, just return the distance to the base\r\n return Vector3.Distance(interactionPos, basePos);\r\n }\r\n const d = Vector3.Dot(basePos, frontDir);\r\n const abc = Vector3.Dot(interactionPos, frontDir);\r\n\r\n return abc - d;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _generatePointerEventType(providedType: number, nearMeshPosition: Vector3, activeInteractionCount: number): number {\r\n if (providedType === PointerEventTypes.POINTERDOWN || providedType === PointerEventTypes.POINTERMOVE) {\r\n if (!this._isInteractionInFrontOfButton(nearMeshPosition)) {\r\n // Near interaction mesh is behind the button, don't send a pointer down\r\n return PointerEventTypes.POINTERMOVE;\r\n } else {\r\n this._isNearPressed = true;\r\n this._interactionSurfaceHeight = this._getInteractionHeight(nearMeshPosition, this._collisionMesh.getAbsolutePosition());\r\n }\r\n }\r\n if (providedType === PointerEventTypes.POINTERUP) {\r\n if (activeInteractionCount == 0) {\r\n // We get the release for the down we swallowed earlier, swallow as well\r\n return PointerEventTypes.POINTERMOVE;\r\n } else {\r\n this._isNearPressed = false;\r\n }\r\n }\r\n\r\n return providedType;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"TouchButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected override _createNode(scene: Scene): TransformNode {\r\n return super._createNode(scene);\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\r\n // Clean up toggle observables\r\n this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);\r\n this.onToggleObservable.clear();\r\n\r\n if (this._collisionMesh) {\r\n this._collisionMesh.dispose();\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js";
|
|
3
|
+
import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
4
|
+
import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
|
|
5
|
+
import type { Scene } from "@babylonjs/core/scene.js";
|
|
6
|
+
import { FluentMaterial } from "../materials/fluent/fluentMaterial.js";
|
|
7
|
+
import { FluentButtonMaterial } from "../materials/fluentButton/fluentButtonMaterial.js";
|
|
8
|
+
import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture.js";
|
|
9
|
+
import { TouchButton3D } from "./touchButton3D.js";
|
|
10
|
+
import type { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
|
|
11
|
+
/**
|
|
12
|
+
* Class used to create a holographic button in 3D
|
|
13
|
+
* @since 5.0.0
|
|
14
|
+
*/
|
|
15
|
+
export declare class TouchHolographicButton extends TouchButton3D {
|
|
16
|
+
/**
|
|
17
|
+
* Base Url for the button model.
|
|
18
|
+
*/
|
|
19
|
+
static MODEL_BASE_URL: string;
|
|
20
|
+
/**
|
|
21
|
+
* File name for the button model.
|
|
22
|
+
*/
|
|
23
|
+
static MODEL_FILENAME: string;
|
|
24
|
+
private _backPlate;
|
|
25
|
+
private _textPlate;
|
|
26
|
+
private _frontPlate;
|
|
27
|
+
private _text;
|
|
28
|
+
private _imageUrl;
|
|
29
|
+
private _shareMaterials;
|
|
30
|
+
private _isBackplateVisible;
|
|
31
|
+
private _frontMaterial;
|
|
32
|
+
private _backMaterial;
|
|
33
|
+
private _plateMaterial;
|
|
34
|
+
private _pickedPointObserver;
|
|
35
|
+
private _pointerHoverObserver;
|
|
36
|
+
private _frontPlateDepth;
|
|
37
|
+
private _backPlateDepth;
|
|
38
|
+
private _backplateColor;
|
|
39
|
+
private _backplateToggledColor;
|
|
40
|
+
private _tooltipFade;
|
|
41
|
+
private _tooltipTextBlock;
|
|
42
|
+
private _tooltipTexture;
|
|
43
|
+
private _tooltipMesh;
|
|
44
|
+
private _tooltipHoverObserver;
|
|
45
|
+
private _tooltipOutObserver;
|
|
46
|
+
private _disposeTooltip;
|
|
47
|
+
/**
|
|
48
|
+
* Rendering ground id of all the mesh in the button
|
|
49
|
+
*/
|
|
50
|
+
set renderingGroupId(id: number);
|
|
51
|
+
get renderingGroupId(): number;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the mesh used to render this control
|
|
54
|
+
*/
|
|
55
|
+
get mesh(): Nullable<AbstractMesh>;
|
|
56
|
+
/**
|
|
57
|
+
* Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)
|
|
58
|
+
*/
|
|
59
|
+
set tooltipText(text: Nullable<string>);
|
|
60
|
+
get tooltipText(): Nullable<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Gets or sets text for the button
|
|
63
|
+
*/
|
|
64
|
+
get text(): string;
|
|
65
|
+
set text(value: string);
|
|
66
|
+
/**
|
|
67
|
+
* Gets or sets the image url for the button
|
|
68
|
+
*/
|
|
69
|
+
get imageUrl(): string;
|
|
70
|
+
set imageUrl(value: string);
|
|
71
|
+
/**
|
|
72
|
+
* Gets the back material used by this button
|
|
73
|
+
*/
|
|
74
|
+
get backMaterial(): FluentMaterial;
|
|
75
|
+
/**
|
|
76
|
+
* Gets the front material used by this button
|
|
77
|
+
*/
|
|
78
|
+
get frontMaterial(): FluentButtonMaterial;
|
|
79
|
+
/**
|
|
80
|
+
* Gets the plate material used by this button
|
|
81
|
+
*/
|
|
82
|
+
get plateMaterial(): StandardMaterial;
|
|
83
|
+
/**
|
|
84
|
+
* Gets a boolean indicating if this button shares its material with other HolographicButtons
|
|
85
|
+
*/
|
|
86
|
+
get shareMaterials(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement
|
|
89
|
+
*/
|
|
90
|
+
set isBackplateVisible(isVisible: boolean);
|
|
91
|
+
/**
|
|
92
|
+
* Creates a new button
|
|
93
|
+
* @param name defines the control name
|
|
94
|
+
* @param shareMaterials
|
|
95
|
+
*/
|
|
96
|
+
constructor(name?: string, shareMaterials?: boolean);
|
|
97
|
+
protected _getTypeName(): string;
|
|
98
|
+
private _rebuildContent;
|
|
99
|
+
protected _createNode(scene: Scene): TransformNode;
|
|
100
|
+
protected _applyFacade(facadeTexture: AdvancedDynamicTexture): void;
|
|
101
|
+
private _createBackMaterial;
|
|
102
|
+
private _createFrontMaterial;
|
|
103
|
+
private _createPlateMaterial;
|
|
104
|
+
protected _onToggle(newState: boolean): void;
|
|
105
|
+
protected _affectMaterial(mesh: Mesh): void;
|
|
106
|
+
/**
|
|
107
|
+
* Releases all associated resources
|
|
108
|
+
*/
|
|
109
|
+
dispose(): void;
|
|
110
|
+
}
|