@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,81 @@
|
|
|
1
|
+
import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture.js";
|
|
2
|
+
import { Control3D } from "./control3D.js";
|
|
3
|
+
import { Texture } from "@babylonjs/core/Materials/Textures/texture.js";
|
|
4
|
+
/**
|
|
5
|
+
* The base class for controls that display content
|
|
6
|
+
*/
|
|
7
|
+
export class ContentDisplay3D extends Control3D {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this._contentResolution = 512;
|
|
11
|
+
this._contentScaleRatio = 2;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Gets or sets the GUI 2D content used to display the button's facade
|
|
15
|
+
*/
|
|
16
|
+
get content() {
|
|
17
|
+
return this._content;
|
|
18
|
+
}
|
|
19
|
+
set content(value) {
|
|
20
|
+
this._content = value;
|
|
21
|
+
if (!value || !this._host || !this._host.utilityLayer) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (!this._facadeTexture) {
|
|
25
|
+
const width = typeof this._contentResolution === "number" ? this._contentResolution : this._contentResolution.width;
|
|
26
|
+
const height = typeof this._contentResolution === "number" ? this._contentResolution : this._contentResolution.height;
|
|
27
|
+
this._facadeTexture = new AdvancedDynamicTexture("Facade", width, height, this._host.utilityLayer.utilityLayerScene, true, Texture.TRILINEAR_SAMPLINGMODE);
|
|
28
|
+
this._setFacadeTextureScaling();
|
|
29
|
+
this._facadeTexture.premulAlpha = true;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this._facadeTexture.rootContainer.clearControls();
|
|
33
|
+
}
|
|
34
|
+
this._facadeTexture.addControl(value);
|
|
35
|
+
this._applyFacade(this._facadeTexture);
|
|
36
|
+
}
|
|
37
|
+
_setFacadeTextureScaling() {
|
|
38
|
+
if (this._facadeTexture) {
|
|
39
|
+
if (typeof this._contentResolution !== "number") {
|
|
40
|
+
this._contentScaleRatioY = (this._contentResolution.height / this._contentResolution.width) * this._contentScaleRatio;
|
|
41
|
+
}
|
|
42
|
+
this._facadeTexture.rootContainer.scaleX = this._contentScaleRatio;
|
|
43
|
+
this._facadeTexture.rootContainer.scaleY = this._contentScaleRatioY ?? this._contentScaleRatio;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Gets or sets the texture resolution used to render content (512 by default)
|
|
48
|
+
*/
|
|
49
|
+
get contentResolution() {
|
|
50
|
+
return this._contentResolution;
|
|
51
|
+
}
|
|
52
|
+
set contentResolution(value) {
|
|
53
|
+
const incomingWidth = typeof value === "number" ? value : value.width;
|
|
54
|
+
const incomingHeight = typeof value === "number" ? value : value.height;
|
|
55
|
+
const currentWidth = typeof this._contentResolution === "number" ? this._contentResolution : this._contentResolution.width;
|
|
56
|
+
const currentHeight = typeof this._contentResolution === "number" ? this._contentResolution : this._contentResolution.height;
|
|
57
|
+
if (incomingWidth === currentWidth && incomingHeight === currentHeight) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this._contentResolution = value;
|
|
61
|
+
this._resetContent();
|
|
62
|
+
}
|
|
63
|
+
_disposeFacadeTexture() {
|
|
64
|
+
if (this._facadeTexture) {
|
|
65
|
+
this._facadeTexture.dispose();
|
|
66
|
+
this._facadeTexture = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
_resetContent() {
|
|
70
|
+
this._disposeFacadeTexture();
|
|
71
|
+
this.content = this._content;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Apply the facade texture (created from the content property).
|
|
75
|
+
* This function can be overloaded by child classes
|
|
76
|
+
* @param facadeTexture defines the AdvancedDynamicTexture to use
|
|
77
|
+
*/
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
79
|
+
_applyFacade(facadeTexture) { }
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=contentDisplay3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentDisplay3D.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/contentDisplay3D.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Control } from \"../../2D/controls/control\";\r\nimport { AdvancedDynamicTexture } from \"../../2D/advancedDynamicTexture\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\n\r\n/**\r\n * The base class for controls that display content\r\n */\r\nexport class ContentDisplay3D extends Control3D {\r\n private _content: Control;\r\n protected _facadeTexture: Nullable<AdvancedDynamicTexture>;\r\n protected _contentResolution: number | { width: number; height: number } = 512;\r\n protected _contentScaleRatio = 2;\r\n protected _contentScaleRatioY?: number;\r\n\r\n /**\r\n * Gets or sets the GUI 2D content used to display the button's facade\r\n */\r\n public get content(): Control {\r\n return this._content;\r\n }\r\n\r\n public set content(value: Control) {\r\n this._content = value;\r\n\r\n if (!value || !this._host || !this._host.utilityLayer) {\r\n return;\r\n }\r\n\r\n if (!this._facadeTexture) {\r\n const width = typeof this._contentResolution === \"number\" ? this._contentResolution : this._contentResolution.width;\r\n const height = typeof this._contentResolution === \"number\" ? this._contentResolution : this._contentResolution.height;\r\n this._facadeTexture = new AdvancedDynamicTexture(\"Facade\", width, height, this._host.utilityLayer.utilityLayerScene, true, Texture.TRILINEAR_SAMPLINGMODE);\r\n this._setFacadeTextureScaling();\r\n this._facadeTexture.premulAlpha = true;\r\n } else {\r\n this._facadeTexture.rootContainer.clearControls();\r\n }\r\n\r\n this._facadeTexture.addControl(value);\r\n\r\n this._applyFacade(this._facadeTexture);\r\n }\r\n\r\n protected _setFacadeTextureScaling() {\r\n if (this._facadeTexture) {\r\n if (typeof this._contentResolution !== \"number\") {\r\n this._contentScaleRatioY = (this._contentResolution.height / this._contentResolution.width) * this._contentScaleRatio;\r\n }\r\n this._facadeTexture.rootContainer.scaleX = this._contentScaleRatio;\r\n this._facadeTexture.rootContainer.scaleY = this._contentScaleRatioY ?? this._contentScaleRatio;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the texture resolution used to render content (512 by default)\r\n */\r\n public get contentResolution(): number | { width: number; height: number } {\r\n return this._contentResolution;\r\n }\r\n\r\n public set contentResolution(value: number | { width: number; height: number }) {\r\n const incomingWidth = typeof value === \"number\" ? value : value.width;\r\n const incomingHeight = typeof value === \"number\" ? value : value.height;\r\n const currentWidth = typeof this._contentResolution === \"number\" ? this._contentResolution : this._contentResolution.width;\r\n const currentHeight = typeof this._contentResolution === \"number\" ? this._contentResolution : this._contentResolution.height;\r\n if (incomingWidth === currentWidth && incomingHeight === currentHeight) {\r\n return;\r\n }\r\n\r\n this._contentResolution = value;\r\n this._resetContent();\r\n }\r\n\r\n protected _disposeFacadeTexture() {\r\n if (this._facadeTexture) {\r\n this._facadeTexture.dispose();\r\n this._facadeTexture = null;\r\n }\r\n }\r\n\r\n protected _resetContent() {\r\n this._disposeFacadeTexture();\r\n this.content = this._content;\r\n }\r\n\r\n /**\r\n * Apply the facade texture (created from the content property).\r\n * This function can be overloaded by child classes\r\n * @param facadeTexture defines the AdvancedDynamicTexture to use\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _applyFacade(facadeTexture: AdvancedDynamicTexture) {}\r\n}\r\n"]}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import type { Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
3
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
4
|
+
import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
5
|
+
import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
|
|
6
|
+
import type { IBehaviorAware, Behavior } from "@babylonjs/core/Behaviors/behavior.js";
|
|
7
|
+
import type { IDisposable, Scene } from "@babylonjs/core/scene.js";
|
|
8
|
+
import type { GUI3DManager } from "../gui3DManager.js";
|
|
9
|
+
import { Vector3WithInfo } from "../vector3WithInfo.js";
|
|
10
|
+
import type { Container3D } from "./container3D.js";
|
|
11
|
+
/**
|
|
12
|
+
* Class used as base class for controls
|
|
13
|
+
*/
|
|
14
|
+
export declare class Control3D implements IDisposable, IBehaviorAware<Control3D> {
|
|
15
|
+
/** Defines the control name */
|
|
16
|
+
name?: string | undefined;
|
|
17
|
+
private _node;
|
|
18
|
+
private _downCount;
|
|
19
|
+
private _enterCount;
|
|
20
|
+
private _downPointerIds;
|
|
21
|
+
protected _isVisible: boolean;
|
|
22
|
+
/** @internal */
|
|
23
|
+
_host: GUI3DManager;
|
|
24
|
+
/** @internal */
|
|
25
|
+
_isScaledByManager: boolean;
|
|
26
|
+
private _position?;
|
|
27
|
+
private _scaling?;
|
|
28
|
+
/** Gets or sets the control position in world space */
|
|
29
|
+
get position(): Vector3;
|
|
30
|
+
set position(value: Vector3);
|
|
31
|
+
/** Gets or sets the control scaling in world space */
|
|
32
|
+
get scaling(): Vector3;
|
|
33
|
+
set scaling(value: Vector3);
|
|
34
|
+
/** Callback used to start pointer enter animation */
|
|
35
|
+
pointerEnterAnimation: () => void;
|
|
36
|
+
/** Callback used to start pointer out animation */
|
|
37
|
+
pointerOutAnimation: () => void;
|
|
38
|
+
/** Callback used to start pointer down animation */
|
|
39
|
+
pointerDownAnimation: () => void;
|
|
40
|
+
/** Callback used to start pointer up animation */
|
|
41
|
+
pointerUpAnimation: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* An event triggered when the pointer moves over the control
|
|
44
|
+
*/
|
|
45
|
+
onPointerMoveObservable: Observable<Vector3>;
|
|
46
|
+
/**
|
|
47
|
+
* An event triggered when the pointer moves out of the control
|
|
48
|
+
*/
|
|
49
|
+
onPointerOutObservable: Observable<Control3D>;
|
|
50
|
+
/**
|
|
51
|
+
* An event triggered when the pointer taps the control
|
|
52
|
+
*/
|
|
53
|
+
onPointerDownObservable: Observable<Vector3WithInfo>;
|
|
54
|
+
/**
|
|
55
|
+
* An event triggered when pointer is up
|
|
56
|
+
*/
|
|
57
|
+
onPointerUpObservable: Observable<Vector3WithInfo>;
|
|
58
|
+
/**
|
|
59
|
+
* An event triggered when a control is clicked on (with a mouse)
|
|
60
|
+
*/
|
|
61
|
+
onPointerClickObservable: Observable<Vector3WithInfo>;
|
|
62
|
+
/**
|
|
63
|
+
* An event triggered when pointer enters the control
|
|
64
|
+
*/
|
|
65
|
+
onPointerEnterObservable: Observable<Control3D>;
|
|
66
|
+
/**
|
|
67
|
+
* Gets or sets the parent container
|
|
68
|
+
*/
|
|
69
|
+
parent: Nullable<Container3D>;
|
|
70
|
+
private _behaviors;
|
|
71
|
+
/**
|
|
72
|
+
* Gets the list of attached behaviors
|
|
73
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
74
|
+
*/
|
|
75
|
+
get behaviors(): Behavior<Control3D>[];
|
|
76
|
+
/**
|
|
77
|
+
* Attach a behavior to the control
|
|
78
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
79
|
+
* @param behavior defines the behavior to attach
|
|
80
|
+
* @returns the current control
|
|
81
|
+
*/
|
|
82
|
+
addBehavior(behavior: Behavior<Control3D>): Control3D;
|
|
83
|
+
/**
|
|
84
|
+
* Remove an attached behavior
|
|
85
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
86
|
+
* @param behavior defines the behavior to attach
|
|
87
|
+
* @returns the current control
|
|
88
|
+
*/
|
|
89
|
+
removeBehavior(behavior: Behavior<Control3D>): Control3D;
|
|
90
|
+
/**
|
|
91
|
+
* Gets an attached behavior by name
|
|
92
|
+
* @param name defines the name of the behavior to look for
|
|
93
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
94
|
+
* @returns null if behavior was not found else the requested behavior
|
|
95
|
+
*/
|
|
96
|
+
getBehaviorByName(name: string): Nullable<Behavior<Control3D>>;
|
|
97
|
+
/** Gets or sets a boolean indicating if the control is visible */
|
|
98
|
+
get isVisible(): boolean;
|
|
99
|
+
set isVisible(value: boolean);
|
|
100
|
+
/**
|
|
101
|
+
* Creates a new control
|
|
102
|
+
* @param name defines the control name
|
|
103
|
+
*/
|
|
104
|
+
constructor(
|
|
105
|
+
/** Defines the control name */
|
|
106
|
+
name?: string | undefined);
|
|
107
|
+
/**
|
|
108
|
+
* Gets a string representing the class name
|
|
109
|
+
*/
|
|
110
|
+
get typeName(): string;
|
|
111
|
+
/**
|
|
112
|
+
* Get the current class name of the control.
|
|
113
|
+
* @returns current class name
|
|
114
|
+
*/
|
|
115
|
+
getClassName(): string;
|
|
116
|
+
protected _getTypeName(): string;
|
|
117
|
+
/**
|
|
118
|
+
* Gets the transform node used by this control
|
|
119
|
+
*/
|
|
120
|
+
get node(): Nullable<TransformNode>;
|
|
121
|
+
/**
|
|
122
|
+
* Gets the mesh used to render this control
|
|
123
|
+
*/
|
|
124
|
+
get mesh(): Nullable<AbstractMesh>;
|
|
125
|
+
/**
|
|
126
|
+
* Link the control as child of the given node
|
|
127
|
+
* @param node defines the node to link to. Use null to unlink the control
|
|
128
|
+
* @returns the current control
|
|
129
|
+
*/
|
|
130
|
+
linkToTransformNode(node: Nullable<TransformNode>): Control3D;
|
|
131
|
+
/**
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
_prepareNode(scene: Scene): void;
|
|
135
|
+
protected _injectGUI3DReservedDataStore(node: TransformNode): any;
|
|
136
|
+
/**
|
|
137
|
+
* Node creation.
|
|
138
|
+
* Can be overriden by children
|
|
139
|
+
* @param scene defines the scene where the node must be attached
|
|
140
|
+
* @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an attached visible object
|
|
141
|
+
*/
|
|
142
|
+
protected _createNode(scene: Scene): Nullable<TransformNode>;
|
|
143
|
+
/**
|
|
144
|
+
* Affect a material to the given mesh
|
|
145
|
+
* @param mesh defines the mesh which will represent the control
|
|
146
|
+
*/
|
|
147
|
+
protected _affectMaterial(mesh: AbstractMesh): void;
|
|
148
|
+
private _isTouchButton3D;
|
|
149
|
+
/**
|
|
150
|
+
* @internal
|
|
151
|
+
*/
|
|
152
|
+
_onPointerMove(target: Control3D, coordinates: Vector3): void;
|
|
153
|
+
/**
|
|
154
|
+
* @internal
|
|
155
|
+
*/
|
|
156
|
+
_onPointerEnter(target: Control3D): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* @internal
|
|
159
|
+
*/
|
|
160
|
+
_onPointerOut(target: Control3D): void;
|
|
161
|
+
/**
|
|
162
|
+
* @internal
|
|
163
|
+
*/
|
|
164
|
+
_onPointerDown(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number): boolean;
|
|
165
|
+
/**
|
|
166
|
+
* @internal
|
|
167
|
+
*/
|
|
168
|
+
_onPointerUp(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number, notifyClick: boolean): void;
|
|
169
|
+
/**
|
|
170
|
+
* @internal
|
|
171
|
+
*/
|
|
172
|
+
forcePointerUp(pointerId?: Nullable<number>): void;
|
|
173
|
+
/**
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
176
|
+
_processObservables(type: number, pickedPoint: Vector3, originMeshPosition: Nullable<Vector3>, pointerId: number, buttonIndex: number): boolean;
|
|
177
|
+
/** @internal */
|
|
178
|
+
_disposeNode(): void;
|
|
179
|
+
/**
|
|
180
|
+
* Releases all associated resources
|
|
181
|
+
*/
|
|
182
|
+
dispose(): void;
|
|
183
|
+
}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
2
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
3
|
+
import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents.js";
|
|
4
|
+
import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
|
|
5
|
+
import { Vector3WithInfo } from "../vector3WithInfo.js";
|
|
6
|
+
/**
|
|
7
|
+
* Class used as base class for controls
|
|
8
|
+
*/
|
|
9
|
+
export class Control3D {
|
|
10
|
+
/** Gets or sets the control position in world space */
|
|
11
|
+
get position() {
|
|
12
|
+
if (!this._node) {
|
|
13
|
+
this._position = this._position || Vector3.Zero();
|
|
14
|
+
return this._position;
|
|
15
|
+
}
|
|
16
|
+
return this._node.position;
|
|
17
|
+
}
|
|
18
|
+
set position(value) {
|
|
19
|
+
this._position = value;
|
|
20
|
+
if (!this._node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this._node.position = this._position;
|
|
24
|
+
}
|
|
25
|
+
/** Gets or sets the control scaling in world space */
|
|
26
|
+
get scaling() {
|
|
27
|
+
if (!this._node) {
|
|
28
|
+
this._scaling = this.scaling || new Vector3(1, 1, 1);
|
|
29
|
+
return this._scaling;
|
|
30
|
+
}
|
|
31
|
+
return this._node.scaling;
|
|
32
|
+
}
|
|
33
|
+
set scaling(value) {
|
|
34
|
+
this._scaling = value;
|
|
35
|
+
if (!this._node) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this._isScaledByManager = false;
|
|
39
|
+
this._node.scaling = this._scaling;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the list of attached behaviors
|
|
43
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
44
|
+
*/
|
|
45
|
+
get behaviors() {
|
|
46
|
+
return this._behaviors;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Attach a behavior to the control
|
|
50
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
51
|
+
* @param behavior defines the behavior to attach
|
|
52
|
+
* @returns the current control
|
|
53
|
+
*/
|
|
54
|
+
addBehavior(behavior) {
|
|
55
|
+
const index = this._behaviors.indexOf(behavior);
|
|
56
|
+
if (index !== -1) {
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
behavior.init();
|
|
60
|
+
const scene = this._host.scene;
|
|
61
|
+
if (scene.isLoading) {
|
|
62
|
+
// We defer the attach when the scene will be loaded
|
|
63
|
+
scene.onDataLoadedObservable.addOnce(() => {
|
|
64
|
+
behavior.attach(this);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
behavior.attach(this);
|
|
69
|
+
}
|
|
70
|
+
this._behaviors.push(behavior);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Remove an attached behavior
|
|
75
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
76
|
+
* @param behavior defines the behavior to attach
|
|
77
|
+
* @returns the current control
|
|
78
|
+
*/
|
|
79
|
+
removeBehavior(behavior) {
|
|
80
|
+
const index = this._behaviors.indexOf(behavior);
|
|
81
|
+
if (index === -1) {
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
this._behaviors[index].detach();
|
|
85
|
+
this._behaviors.splice(index, 1);
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Gets an attached behavior by name
|
|
90
|
+
* @param name defines the name of the behavior to look for
|
|
91
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors
|
|
92
|
+
* @returns null if behavior was not found else the requested behavior
|
|
93
|
+
*/
|
|
94
|
+
getBehaviorByName(name) {
|
|
95
|
+
for (const behavior of this._behaviors) {
|
|
96
|
+
if (behavior.name === name) {
|
|
97
|
+
return behavior;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
/** Gets or sets a boolean indicating if the control is visible */
|
|
103
|
+
get isVisible() {
|
|
104
|
+
return this._isVisible;
|
|
105
|
+
}
|
|
106
|
+
set isVisible(value) {
|
|
107
|
+
if (this._isVisible === value) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this._isVisible = value;
|
|
111
|
+
const mesh = this.mesh;
|
|
112
|
+
if (mesh) {
|
|
113
|
+
mesh.setEnabled(value);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Creates a new control
|
|
118
|
+
* @param name defines the control name
|
|
119
|
+
*/
|
|
120
|
+
constructor(
|
|
121
|
+
/** Defines the control name */
|
|
122
|
+
name) {
|
|
123
|
+
this.name = name;
|
|
124
|
+
this._downCount = 0;
|
|
125
|
+
this._enterCount = -1;
|
|
126
|
+
this._downPointerIds = {}; // Store number of pointer downs per ID, from near and far interactions
|
|
127
|
+
this._isVisible = true;
|
|
128
|
+
/** @internal */
|
|
129
|
+
this._isScaledByManager = false;
|
|
130
|
+
/**
|
|
131
|
+
* An event triggered when the pointer moves over the control
|
|
132
|
+
*/
|
|
133
|
+
this.onPointerMoveObservable = new Observable();
|
|
134
|
+
/**
|
|
135
|
+
* An event triggered when the pointer moves out of the control
|
|
136
|
+
*/
|
|
137
|
+
this.onPointerOutObservable = new Observable();
|
|
138
|
+
/**
|
|
139
|
+
* An event triggered when the pointer taps the control
|
|
140
|
+
*/
|
|
141
|
+
this.onPointerDownObservable = new Observable();
|
|
142
|
+
/**
|
|
143
|
+
* An event triggered when pointer is up
|
|
144
|
+
*/
|
|
145
|
+
this.onPointerUpObservable = new Observable();
|
|
146
|
+
/**
|
|
147
|
+
* An event triggered when a control is clicked on (with a mouse)
|
|
148
|
+
*/
|
|
149
|
+
this.onPointerClickObservable = new Observable();
|
|
150
|
+
/**
|
|
151
|
+
* An event triggered when pointer enters the control
|
|
152
|
+
*/
|
|
153
|
+
this.onPointerEnterObservable = new Observable();
|
|
154
|
+
// Behaviors
|
|
155
|
+
this._behaviors = new Array();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Gets a string representing the class name
|
|
159
|
+
*/
|
|
160
|
+
get typeName() {
|
|
161
|
+
return this._getTypeName();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get the current class name of the control.
|
|
165
|
+
* @returns current class name
|
|
166
|
+
*/
|
|
167
|
+
getClassName() {
|
|
168
|
+
return this._getTypeName();
|
|
169
|
+
}
|
|
170
|
+
_getTypeName() {
|
|
171
|
+
return "Control3D";
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Gets the transform node used by this control
|
|
175
|
+
*/
|
|
176
|
+
get node() {
|
|
177
|
+
return this._node;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Gets the mesh used to render this control
|
|
181
|
+
*/
|
|
182
|
+
get mesh() {
|
|
183
|
+
if (this._node instanceof AbstractMesh) {
|
|
184
|
+
return this._node;
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Link the control as child of the given node
|
|
190
|
+
* @param node defines the node to link to. Use null to unlink the control
|
|
191
|
+
* @returns the current control
|
|
192
|
+
*/
|
|
193
|
+
linkToTransformNode(node) {
|
|
194
|
+
if (this._node) {
|
|
195
|
+
this._node.parent = node;
|
|
196
|
+
}
|
|
197
|
+
return this;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* @internal
|
|
201
|
+
*/
|
|
202
|
+
_prepareNode(scene) {
|
|
203
|
+
if (!this._node) {
|
|
204
|
+
this._node = this._createNode(scene);
|
|
205
|
+
if (!this.node) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (this._position) {
|
|
209
|
+
this.node.position = this._position;
|
|
210
|
+
}
|
|
211
|
+
if (this._scaling) {
|
|
212
|
+
this.node.scaling = this._scaling;
|
|
213
|
+
}
|
|
214
|
+
this._injectGUI3DReservedDataStore(this.node).control = this; // Store the control on the reservedDataStore field in order to get it when picking
|
|
215
|
+
const mesh = this.mesh;
|
|
216
|
+
if (mesh) {
|
|
217
|
+
mesh.isPickable = true;
|
|
218
|
+
this._affectMaterial(mesh);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
_injectGUI3DReservedDataStore(node) {
|
|
223
|
+
node.reservedDataStore = node.reservedDataStore ?? {};
|
|
224
|
+
node.reservedDataStore.GUI3D = node.reservedDataStore.GUI3D ?? {};
|
|
225
|
+
return node.reservedDataStore.GUI3D;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Node creation.
|
|
229
|
+
* Can be overriden by children
|
|
230
|
+
* @param scene defines the scene where the node must be attached
|
|
231
|
+
* @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an attached visible object
|
|
232
|
+
*/
|
|
233
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
234
|
+
_createNode(scene) {
|
|
235
|
+
// Do nothing by default
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Affect a material to the given mesh
|
|
240
|
+
* @param mesh defines the mesh which will represent the control
|
|
241
|
+
*/
|
|
242
|
+
_affectMaterial(mesh) {
|
|
243
|
+
mesh.material = null;
|
|
244
|
+
}
|
|
245
|
+
_isTouchButton3D(control) {
|
|
246
|
+
return control._generatePointerEventType !== undefined;
|
|
247
|
+
}
|
|
248
|
+
// Pointers
|
|
249
|
+
/**
|
|
250
|
+
* @internal
|
|
251
|
+
*/
|
|
252
|
+
_onPointerMove(target, coordinates) {
|
|
253
|
+
this.onPointerMoveObservable.notifyObservers(coordinates, -1, target, this);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* @internal
|
|
257
|
+
*/
|
|
258
|
+
_onPointerEnter(target) {
|
|
259
|
+
if (this._enterCount === -1) {
|
|
260
|
+
// -1 is for touch input, we are now sure we are with a mouse or pencil
|
|
261
|
+
this._enterCount = 0;
|
|
262
|
+
}
|
|
263
|
+
this._enterCount++;
|
|
264
|
+
if (this._enterCount > 1) {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
this.onPointerEnterObservable.notifyObservers(this, -1, target, this);
|
|
268
|
+
if (this.pointerEnterAnimation) {
|
|
269
|
+
this.pointerEnterAnimation();
|
|
270
|
+
}
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* @internal
|
|
275
|
+
*/
|
|
276
|
+
_onPointerOut(target) {
|
|
277
|
+
this._enterCount--;
|
|
278
|
+
if (this._enterCount > 0) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
this._enterCount = 0;
|
|
282
|
+
this.onPointerOutObservable.notifyObservers(this, -1, target, this);
|
|
283
|
+
if (this.pointerOutAnimation) {
|
|
284
|
+
this.pointerOutAnimation();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* @internal
|
|
289
|
+
*/
|
|
290
|
+
_onPointerDown(target, coordinates, pointerId, buttonIndex) {
|
|
291
|
+
this._downCount++;
|
|
292
|
+
this._downPointerIds[pointerId] = this._downPointerIds[pointerId] + 1 || 1;
|
|
293
|
+
if (this._downCount !== 1) {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
this.onPointerDownObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);
|
|
297
|
+
if (this.pointerDownAnimation) {
|
|
298
|
+
this.pointerDownAnimation();
|
|
299
|
+
}
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* @internal
|
|
304
|
+
*/
|
|
305
|
+
_onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick) {
|
|
306
|
+
this._downCount--;
|
|
307
|
+
this._downPointerIds[pointerId]--;
|
|
308
|
+
if (this._downPointerIds[pointerId] <= 0) {
|
|
309
|
+
delete this._downPointerIds[pointerId];
|
|
310
|
+
}
|
|
311
|
+
if (this._downCount < 0) {
|
|
312
|
+
// Handle if forcePointerUp was called prior to this
|
|
313
|
+
this._downCount = 0;
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (this._downCount == 0) {
|
|
317
|
+
if (notifyClick && (this._enterCount > 0 || this._enterCount === -1)) {
|
|
318
|
+
this.onPointerClickObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);
|
|
319
|
+
}
|
|
320
|
+
this.onPointerUpObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);
|
|
321
|
+
if (this.pointerUpAnimation) {
|
|
322
|
+
this.pointerUpAnimation();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* @internal
|
|
328
|
+
*/
|
|
329
|
+
forcePointerUp(pointerId = null) {
|
|
330
|
+
if (pointerId !== null) {
|
|
331
|
+
this._onPointerUp(this, Vector3.Zero(), pointerId, 0, true);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
for (const key in this._downPointerIds) {
|
|
335
|
+
this._onPointerUp(this, Vector3.Zero(), +key, 0, true);
|
|
336
|
+
}
|
|
337
|
+
if (this._downCount > 0) {
|
|
338
|
+
this._downCount = 1;
|
|
339
|
+
this._onPointerUp(this, Vector3.Zero(), 0, 0, true);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* @internal
|
|
345
|
+
*/
|
|
346
|
+
_processObservables(type, pickedPoint, originMeshPosition, pointerId, buttonIndex) {
|
|
347
|
+
if (this._isTouchButton3D(this) && originMeshPosition) {
|
|
348
|
+
type = this._generatePointerEventType(type, originMeshPosition, this._downCount);
|
|
349
|
+
}
|
|
350
|
+
if (type === PointerEventTypes.POINTERMOVE) {
|
|
351
|
+
this._onPointerMove(this, pickedPoint);
|
|
352
|
+
const previousControlOver = this._host._lastControlOver[pointerId];
|
|
353
|
+
if (previousControlOver && previousControlOver !== this) {
|
|
354
|
+
previousControlOver._onPointerOut(this);
|
|
355
|
+
}
|
|
356
|
+
if (previousControlOver !== this) {
|
|
357
|
+
this._onPointerEnter(this);
|
|
358
|
+
}
|
|
359
|
+
this._host._lastControlOver[pointerId] = this;
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
if (type === PointerEventTypes.POINTERDOWN) {
|
|
363
|
+
this._onPointerDown(this, pickedPoint, pointerId, buttonIndex);
|
|
364
|
+
this._host._lastControlDown[pointerId] = this;
|
|
365
|
+
this._host._lastPickedControl = this;
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
if (type === PointerEventTypes.POINTERUP || type === PointerEventTypes.POINTERDOUBLETAP) {
|
|
369
|
+
if (this._host._lastControlDown[pointerId]) {
|
|
370
|
+
this._host._lastControlDown[pointerId]._onPointerUp(this, pickedPoint, pointerId, buttonIndex, true);
|
|
371
|
+
}
|
|
372
|
+
delete this._host._lastControlDown[pointerId];
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
/** @internal */
|
|
378
|
+
_disposeNode() {
|
|
379
|
+
if (this._node) {
|
|
380
|
+
this._node.dispose();
|
|
381
|
+
this._node = null;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Releases all associated resources
|
|
386
|
+
*/
|
|
387
|
+
dispose() {
|
|
388
|
+
this.onPointerDownObservable.clear();
|
|
389
|
+
this.onPointerEnterObservable.clear();
|
|
390
|
+
this.onPointerMoveObservable.clear();
|
|
391
|
+
this.onPointerOutObservable.clear();
|
|
392
|
+
this.onPointerUpObservable.clear();
|
|
393
|
+
this.onPointerClickObservable.clear();
|
|
394
|
+
this._disposeNode();
|
|
395
|
+
// Behaviors
|
|
396
|
+
for (const behavior of this._behaviors) {
|
|
397
|
+
behavior.detach();
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=control3D.js.map
|