@babylonjs/gui 5.45.1 → 5.46.0

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.
Files changed (87) hide show
  1. package/2D/adtInstrumentation.js +21 -21
  2. package/2D/adtInstrumentation.js.map +1 -1
  3. package/2D/advancedDynamicTexture.d.ts +1 -1
  4. package/2D/advancedDynamicTexture.js +159 -159
  5. package/2D/advancedDynamicTexture.js.map +1 -1
  6. package/2D/controls/button.js +12 -12
  7. package/2D/controls/button.js.map +1 -1
  8. package/2D/controls/checkbox.js +17 -17
  9. package/2D/controls/checkbox.js.map +1 -1
  10. package/2D/controls/colorpicker.js +28 -28
  11. package/2D/controls/colorpicker.js.map +1 -1
  12. package/2D/controls/container.js +40 -40
  13. package/2D/controls/container.js.map +1 -1
  14. package/2D/controls/control.js +191 -191
  15. package/2D/controls/control.js.map +1 -1
  16. package/2D/controls/displayGrid.js +18 -18
  17. package/2D/controls/displayGrid.js.map +1 -1
  18. package/2D/controls/ellipse.js +9 -9
  19. package/2D/controls/ellipse.js.map +1 -1
  20. package/2D/controls/gradient/BaseGradient.d.ts +1 -1
  21. package/2D/controls/grid.js +14 -14
  22. package/2D/controls/grid.js.map +1 -1
  23. package/2D/controls/image.js +33 -33
  24. package/2D/controls/image.js.map +1 -1
  25. package/2D/controls/inputText.js +57 -57
  26. package/2D/controls/inputText.js.map +1 -1
  27. package/2D/controls/inputTextArea.js +34 -34
  28. package/2D/controls/inputTextArea.js.map +1 -1
  29. package/2D/controls/line.js +22 -22
  30. package/2D/controls/line.js.map +1 -1
  31. package/2D/controls/radioButton.js +17 -17
  32. package/2D/controls/radioButton.js.map +1 -1
  33. package/2D/controls/rectangle.js +10 -10
  34. package/2D/controls/rectangle.js.map +1 -1
  35. package/2D/controls/scrollViewers/scrollViewer.js +70 -70
  36. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  37. package/2D/controls/scrollViewers/scrollViewerWindow.js +11 -11
  38. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  39. package/2D/controls/sliders/baseSlider.js +25 -25
  40. package/2D/controls/sliders/baseSlider.js.map +1 -1
  41. package/2D/controls/sliders/imageBasedSlider.js +9 -9
  42. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  43. package/2D/controls/sliders/imageScrollBar.js +15 -15
  44. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  45. package/2D/controls/sliders/scrollBar.js +13 -13
  46. package/2D/controls/sliders/scrollBar.js.map +1 -1
  47. package/2D/controls/sliders/slider.js +14 -14
  48. package/2D/controls/sliders/slider.js.map +1 -1
  49. package/2D/controls/stackPanel.js +17 -17
  50. package/2D/controls/stackPanel.js.map +1 -1
  51. package/2D/controls/textBlock.js +35 -35
  52. package/2D/controls/textBlock.js.map +1 -1
  53. package/2D/controls/toggleButton.js +49 -49
  54. package/2D/controls/toggleButton.js.map +1 -1
  55. package/3D/controls/MRTK3/touchHolographicButton.js +127 -127
  56. package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -1
  57. package/3D/controls/container3D.js +12 -12
  58. package/3D/controls/container3D.js.map +1 -1
  59. package/3D/controls/control3D.js +41 -41
  60. package/3D/controls/control3D.js.map +1 -1
  61. package/3D/controls/handMenu.js +11 -11
  62. package/3D/controls/handMenu.js.map +1 -1
  63. package/3D/controls/holographicBackplate.js +9 -9
  64. package/3D/controls/holographicBackplate.js.map +1 -1
  65. package/3D/controls/holographicButton.js +23 -23
  66. package/3D/controls/holographicButton.js.map +1 -1
  67. package/3D/controls/holographicSlate.js +34 -34
  68. package/3D/controls/holographicSlate.js.map +1 -1
  69. package/3D/controls/nearMenu.js +13 -13
  70. package/3D/controls/nearMenu.js.map +1 -1
  71. package/3D/controls/stackPanel3D.js +13 -13
  72. package/3D/controls/stackPanel3D.js.map +1 -1
  73. package/3D/controls/touchHolographicButton.js +52 -52
  74. package/3D/controls/touchHolographicButton.js.map +1 -1
  75. package/3D/controls/touchHolographicMenu.js +8 -8
  76. package/3D/controls/touchHolographicMenu.js.map +1 -1
  77. package/3D/controls/volumeBasedPanel.js +15 -15
  78. package/3D/controls/volumeBasedPanel.js.map +1 -1
  79. package/3D/gizmos/gizmoHandle.js +15 -15
  80. package/3D/gizmos/gizmoHandle.js.map +1 -1
  81. package/3D/gizmos/slateGizmo.js +29 -29
  82. package/3D/gizmos/slateGizmo.js.map +1 -1
  83. package/3D/gui3DManager.js +33 -33
  84. package/3D/gui3DManager.js.map +1 -1
  85. package/3D/materials/handle/handleMaterial.js +20 -20
  86. package/3D/materials/handle/handleMaterial.js.map +1 -1
  87. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"touchHolographicButton.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/3D/controls/MRTK3/touchHolographicButton.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { Control3D } from \"../control3D\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Vector3WithInfo } from \"../../vector3WithInfo\";\r\n\r\nimport { AdvancedDynamicTexture } from \"../../../2D/advancedDynamicTexture\";\r\nimport { Animation } from \"core/Animations/animation\";\r\nimport { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Control } from \"../../../2D/controls/control\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { DomManagement } from \"core/Misc/domManagement\";\r\nimport { FadeInOutBehavior } from \"core/Behaviors/Meshes/fadeInOutBehavior\";\r\nimport { Grid } from \"../../../2D/controls/grid\";\r\nimport { Image } from \"../../../2D/controls/image\";\r\nimport { MRDLBackglowMaterial } from \"../../materials/mrdl/mrdlBackglowMaterial\";\r\nimport { MRDLBackplateMaterial } from \"../../materials/mrdl/mrdlBackplateMaterial\";\r\nimport { MRDLFrontplateMaterial } from \"../../materials/mrdl/mrdlFrontplateMaterial\";\r\nimport { MRDLInnerquadMaterial } from \"../../materials/mrdl/mrdlInnerquadMaterial\";\r\nimport { Rectangle } from \"../../../2D/controls/rectangle\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { StackPanel } from \"../../../2D/controls/stackPanel\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { TextBlock } from \"../../../2D/controls/textBlock\";\r\nimport { TouchButton3D } from \"../touchButton3D\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Class used to create the mrtkv3 button\r\n */\r\nexport class TouchHolographicButton extends TouchButton3D {\r\n /**\r\n * Base Url for the frontplate model.\r\n */\r\n public static MRTK_ASSET_BASE_URL = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n\r\n /**\r\n * File name for the frontplate model.\r\n */\r\n public static FRONTPLATE_MODEL_FILENAME = \"mrtk-fluent-frontplate.glb\";\r\n\r\n /**\r\n * File name for the backplate model.\r\n */\r\n public static BACKPLATE_MODEL_FILENAME = \"mrtk-fluent-backplate.glb\";\r\n\r\n /**\r\n * File name for the backglow model.\r\n */\r\n public static BACKGLOW_MODEL_FILENAME = \"mrtk-fluent-button.glb\";\r\n\r\n /**\r\n * File name for the innerquad model.\r\n */\r\n public static INNERQUAD_MODEL_FILENAME = \"SlateProximity.glb\";\r\n\r\n /**\r\n * Gets or sets the horizontal scaling for the button.\r\n */\r\n public width = 1;\r\n\r\n /**\r\n * Gets or sets the vertical scaling for the button.\r\n */\r\n public height = 1;\r\n\r\n /**\r\n * Gets or sets the bevel radius for the button.\r\n */\r\n public radius = 0.14;\r\n\r\n /**\r\n * Gets or sets the font size of the button text in pixels.\r\n * This is only adjustable for a button with width to height ratio greater than 1.\r\n */\r\n public textSizeInPixels = 18;\r\n\r\n /**\r\n * Gets or sets the size of the button image in pixels.\r\n * This is only adjustable for a button with width to height ratio greater than 1.\r\n */\r\n public imageSizeInPixels = 40;\r\n\r\n /**\r\n * Gets or sets the color of the button plate.\r\n */\r\n public plateMaterialColor = new Color3(0.4, 0.4, 0.4);\r\n\r\n // Shared variables for meshes\r\n /**\r\n * Gets or sets the depth of the button's front plate.\r\n * This variable determines the z scaling and z position for some of the button's meshes.\r\n */\r\n public frontPlateDepth = 0.2;\r\n\r\n /**\r\n * Gets or sets the depth of the button's back plate.\r\n * This variable determines the z scaling and z position for some of the button's meshes.\r\n */\r\n public backPlateDepth = 0.04;\r\n\r\n /**\r\n * Gets or sets the offset value for button's back glow.\r\n * This variable determines the x, y scaling of the button's meshes.\r\n */\r\n public backGlowOffset = 0.1;\r\n\r\n /**\r\n * Gets or sets the value that determines the z scaling and z position for the innerQuad and BackGlow meshes.\r\n */\r\n public flatPlaneDepth = 0.001;\r\n\r\n /**\r\n * Gets or sets the radius for FrontMaterial and innerQuadMaterial.\r\n */\r\n public innerQuadRadius = this.radius - 0.04;\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial.\r\n */\r\n public innerQuadColor = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial for when it is toggled.\r\n */\r\n public innerQuadToggledColor = new Color4(0.5197843, 0.6485234, 0.9607843, 0.6);\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial for when it is hovered.\r\n */\r\n public innerQuadHoverColor = new Color4(1, 1, 1, 0.05);\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial for when it is toggled and hovered.\r\n */\r\n public innerQuadToggledHoverColor = new Color4(0.5197843, 0.6485234, 0.9607843, 1);\r\n\r\n // Meshes\r\n private _backPlate: AbstractMesh;\r\n private _textPlate: Mesh;\r\n private _frontPlate: AbstractMesh;\r\n private _backGlow: AbstractMesh;\r\n private _innerQuad: AbstractMesh;\r\n private _collisionPlate: AbstractMesh;\r\n private _frontPlateCollisionMesh: AbstractMesh;\r\n private _isBackplateVisible = true;\r\n\r\n // Content\r\n private _text: string;\r\n private _subtext: string;\r\n private _imageUrl: string;\r\n\r\n // Materials\r\n private _shareMaterials = true;\r\n private _frontMaterial: MRDLFrontplateMaterial;\r\n private _backMaterial: MRDLBackplateMaterial;\r\n private _backGlowMaterial: MRDLBackglowMaterial;\r\n private _innerQuadMaterial: MRDLInnerquadMaterial;\r\n private _plateMaterial: StandardMaterial;\r\n\r\n // Events\r\n private _pickedPointObserver: Nullable<Observer<Nullable<Vector3>>>;\r\n private _pointerClickObserver: Nullable<Observer<Vector3WithInfo>>;\r\n private _pointerEnterObserver: Nullable<Observer<Control3D>>;\r\n private _pointerOutObserver: Nullable<Observer<Control3D>>;\r\n private _toggleObserver: Nullable<Observer<boolean>>;\r\n\r\n // Tooltip\r\n private _tooltipFade: Nullable<FadeInOutBehavior>;\r\n private _tooltipTextBlock: Nullable<TextBlock>;\r\n private _tooltipTexture: Nullable<AdvancedDynamicTexture>;\r\n private _tooltipMesh: Nullable<Mesh>;\r\n private _tooltipHoverObserver: Nullable<Observer<Control3D>>;\r\n private _tooltipOutObserver: Nullable<Observer<Control3D>>;\r\n\r\n private _disposeTooltip() {\r\n this._tooltipFade = null;\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.dispose();\r\n }\r\n if (this._tooltipTexture) {\r\n this._tooltipTexture.dispose();\r\n }\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.dispose();\r\n }\r\n this.onPointerEnterObservable.remove(this._tooltipHoverObserver);\r\n this.onPointerOutObservable.remove(this._tooltipOutObserver);\r\n }\r\n\r\n /**\r\n * Rendering ground id of all the mesh in the button\r\n */\r\n public set renderingGroupId(id: number) {\r\n this._backPlate.renderingGroupId = id;\r\n this._textPlate.renderingGroupId = id;\r\n this._frontPlate.renderingGroupId = id;\r\n this._backGlow.renderingGroupId = id;\r\n this._innerQuad.renderingGroupId = id;\r\n\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.renderingGroupId = id;\r\n }\r\n }\r\n public get renderingGroupId(): number {\r\n return this._backPlate.renderingGroupId;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n return this._backPlate as AbstractMesh;\r\n }\r\n\r\n /**\r\n * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)\r\n * Set this property after adding the button to the GUI3DManager\r\n */\r\n public set tooltipText(text: Nullable<string>) {\r\n if (!text) {\r\n this._disposeTooltip();\r\n return;\r\n }\r\n if (!this._tooltipFade) {\r\n const rightHandedScene = this._backPlate._scene.useRightHandedSystem;\r\n // Create tooltip with mesh and text\r\n this._tooltipMesh = CreatePlane(\"\", { size: 1 }, this._backPlate._scene);\r\n this._tooltipMesh.position = Vector3.Down().scale(0.7).add(Vector3.Forward(rightHandedScene).scale(-0.15));\r\n this._tooltipMesh.isPickable = false;\r\n this._tooltipMesh.parent = this._frontPlateCollisionMesh;\r\n\r\n // Create text texture for the tooltip\r\n this._tooltipTexture = AdvancedDynamicTexture.CreateForMesh(this._tooltipMesh);\r\n const tooltipBackground = new Rectangle();\r\n tooltipBackground.height = 0.25;\r\n tooltipBackground.width = 0.8;\r\n tooltipBackground.cornerRadius = 25;\r\n tooltipBackground.color = \"#ffffff\";\r\n tooltipBackground.thickness = 20;\r\n tooltipBackground.background = \"#060668\";\r\n this._tooltipTexture.addControl(tooltipBackground);\r\n\r\n this._tooltipTextBlock = new TextBlock();\r\n this._tooltipTextBlock.color = \"white\";\r\n this._tooltipTextBlock.fontSize = 100;\r\n this._tooltipTexture.addControl(this._tooltipTextBlock);\r\n\r\n // Add hover action to tooltip\r\n this._tooltipFade = new FadeInOutBehavior();\r\n this._tooltipFade.delay = 500;\r\n this._tooltipMesh.addBehavior(this._tooltipFade);\r\n this._tooltipHoverObserver = this.onPointerEnterObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(true);\r\n }\r\n });\r\n this._tooltipOutObserver = this.onPointerOutObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(false);\r\n }\r\n });\r\n }\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.text = text;\r\n }\r\n }\r\n\r\n public get tooltipText() {\r\n return this._tooltipTextBlock?.text || null;\r\n }\r\n\r\n /**\r\n * Gets or sets text for the button\r\n */\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n public set text(value: string) {\r\n if (this._text === value) {\r\n return;\r\n }\r\n\r\n this._text = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets or sets subtext for a button with larger width\r\n */\r\n public get subtext(): string {\r\n return this._subtext;\r\n }\r\n\r\n public set subtext(value: string) {\r\n if (this._subtext === value) {\r\n return;\r\n }\r\n\r\n this._subtext = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets or sets the image url for the button\r\n */\r\n public get imageUrl(): string {\r\n return this._imageUrl;\r\n }\r\n\r\n public set imageUrl(value: string) {\r\n if (this._imageUrl === value) {\r\n return;\r\n }\r\n\r\n this._imageUrl = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets the back material used by this button\r\n */\r\n public get backMaterial(): MRDLBackplateMaterial {\r\n return this._backMaterial;\r\n }\r\n\r\n /**\r\n * Gets the front material used by this button\r\n */\r\n public get frontMaterial(): MRDLFrontplateMaterial {\r\n return this._frontMaterial;\r\n }\r\n\r\n /**\r\n * Gets the back glow material used by this button\r\n */\r\n public get backGlowMaterial(): MRDLBackglowMaterial {\r\n return this._backGlowMaterial;\r\n }\r\n\r\n /**\r\n * Gets the inner quad material used by this button\r\n */\r\n public get innerQuadMaterial(): MRDLInnerquadMaterial {\r\n return this._innerQuadMaterial;\r\n }\r\n\r\n /**\r\n * Gets the plate material used by this button\r\n */\r\n public get plateMaterial(): StandardMaterial {\r\n return this._plateMaterial;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this button shares its material with other V3 Buttons\r\n */\r\n public get shareMaterials(): boolean {\r\n return this._shareMaterials;\r\n }\r\n\r\n /**\r\n * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement\r\n */\r\n public set isBackplateVisible(isVisible: boolean) {\r\n if (this.mesh && this._backMaterial) {\r\n if (isVisible && !this._isBackplateVisible) {\r\n this._backPlate.visibility = 1;\r\n } else if (!isVisible && this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n }\r\n\r\n this._isBackplateVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Creates a new button\r\n * @param name defines the control name\r\n * @param shareMaterials\r\n */\r\n constructor(name?: string, shareMaterials = true) {\r\n super(name);\r\n\r\n this._shareMaterials = shareMaterials;\r\n\r\n this.pointerEnterAnimation = () => {\r\n if (this._frontPlate && this._textPlate && !this.isToggleButton) {\r\n this._performEnterExitAnimation(1);\r\n }\r\n\r\n if (this.isToggleButton && this._innerQuadMaterial) {\r\n if (this.isToggled) {\r\n this._innerQuadMaterial.color = this.innerQuadToggledHoverColor;\r\n } else {\r\n this._innerQuadMaterial.color = this.innerQuadHoverColor;\r\n }\r\n }\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n if (this._frontPlate && this._textPlate && !this.isToggleButton) {\r\n this._performEnterExitAnimation(-0.8);\r\n }\r\n\r\n if (this.isToggleButton && this._innerQuadMaterial) {\r\n this._onToggle(this.isToggled);\r\n }\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n // Do nothing\r\n };\r\n\r\n this.pointerUpAnimation = () => {\r\n // Do nothing\r\n };\r\n\r\n this._pointerClickObserver = this.onPointerClickObservable.add(() => {\r\n if (this._frontPlate && this._backGlow && !this.isActiveNearInteraction) {\r\n this._performClickAnimation();\r\n }\r\n\r\n if (this.isToggleButton && this._innerQuadMaterial) {\r\n this._onToggle(this.isToggled);\r\n }\r\n });\r\n\r\n this._pointerEnterObserver = this.onPointerEnterObservable.add(() => {\r\n this.pointerEnterAnimation();\r\n });\r\n\r\n this._pointerOutObserver = this.onPointerOutObservable.add(() => {\r\n this.pointerOutAnimation();\r\n });\r\n\r\n this._toggleObserver = this.onToggleObservable.add((isToggled) => {\r\n if (isToggled) {\r\n this._innerQuadMaterial.color = this.innerQuadToggledColor;\r\n } else {\r\n this._innerQuadMaterial.color = this.innerQuadColor;\r\n }\r\n });\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TouchHolographicButton\";\r\n }\r\n\r\n private _rebuildContent(): void {\r\n let content: Control;\r\n\r\n if (this._getAspectRatio() <= 1) {\r\n // align text and image vertically\r\n content = this._alignContentVertically();\r\n } else {\r\n // align text and image horizontally\r\n content = this._alignContentHorizontally();\r\n }\r\n\r\n this.content = content;\r\n }\r\n\r\n private _getAspectRatio() {\r\n return this.width / this.height;\r\n }\r\n\r\n private _alignContentVertically() {\r\n const panel = new StackPanel();\r\n panel.isVertical = true;\r\n\r\n if (DomManagement.IsDocumentAvailable() && !!document.createElement) {\r\n if (this._imageUrl) {\r\n const image = new Image();\r\n image.source = this._imageUrl;\r\n image.heightInPixels = 180;\r\n image.widthInPixels = 100;\r\n image.paddingTopInPixels = 40;\r\n image.paddingBottomInPixels = 40;\r\n panel.addControl(image);\r\n }\r\n }\r\n\r\n if (this._text) {\r\n const text = new TextBlock();\r\n text.text = this._text;\r\n text.color = \"white\";\r\n text.heightInPixels = 30;\r\n text.fontSize = 24;\r\n panel.addControl(text);\r\n }\r\n\r\n return panel;\r\n }\r\n\r\n private _alignContentHorizontally() {\r\n let totalPanelWidthInPixels = 240;\r\n const padding = 15;\r\n\r\n const contentContainer = new Rectangle();\r\n contentContainer.widthInPixels = totalPanelWidthInPixels;\r\n contentContainer.heightInPixels = totalPanelWidthInPixels;\r\n contentContainer.color = \"transparent\";\r\n contentContainer.setPaddingInPixels(padding, padding, padding, padding);\r\n totalPanelWidthInPixels -= padding * 2;\r\n\r\n const panel = new StackPanel();\r\n panel.isVertical = false;\r\n panel.scaleY = this._getAspectRatio();\r\n\r\n if (DomManagement.IsDocumentAvailable() && !!document.createElement) {\r\n if (this._imageUrl) {\r\n const imageContainer = new Rectangle(`${this.name}_image`);\r\n imageContainer.widthInPixels = this.imageSizeInPixels;\r\n imageContainer.heightInPixels = this.imageSizeInPixels;\r\n imageContainer.color = \"transparent\";\r\n totalPanelWidthInPixels -= this.imageSizeInPixels;\r\n\r\n const image = new Image();\r\n image.source = this._imageUrl;\r\n\r\n imageContainer.addControl(image);\r\n panel.addControl(imageContainer);\r\n }\r\n }\r\n\r\n if (this._text) {\r\n const text = new TextBlock(`${this.name}_text`);\r\n text.text = this._text;\r\n text.color = \"white\";\r\n text.fontSize = this.textSizeInPixels;\r\n text.widthInPixels = totalPanelWidthInPixels;\r\n\r\n if (this._imageUrl) {\r\n text.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n text.paddingLeftInPixels = padding;\r\n }\r\n\r\n if (this._subtext) {\r\n const textContainer = new Grid();\r\n textContainer.addColumnDefinition(1);\r\n textContainer.addRowDefinition(0.5);\r\n textContainer.addRowDefinition(0.5);\r\n textContainer.widthInPixels = totalPanelWidthInPixels;\r\n textContainer.heightInPixels = 45;\r\n\r\n const subtext = new TextBlock(`${this.name}_subtext`);\r\n subtext.text = this._subtext;\r\n subtext.color = \"#EEEEEEAB\";\r\n subtext.fontSize = this.textSizeInPixels * 0.75;\r\n subtext.fontWeight = \"600\";\r\n\r\n if (this._imageUrl) {\r\n subtext.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n subtext.paddingLeftInPixels = padding;\r\n }\r\n\r\n textContainer.addControl(text, 0);\r\n textContainer.addControl(subtext, 1);\r\n panel.addControl(textContainer);\r\n } else {\r\n panel.addControl(text);\r\n }\r\n }\r\n\r\n contentContainer.addControl(panel);\r\n return contentContainer;\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n this.name = this.name ?? \"TouchHolographicButton\";\r\n\r\n const backPlateMesh = this._createBackPlate(scene);\r\n const collisionMesh = this._createFrontPlate(scene);\r\n const innerQuadMesh = this._createInnerQuad(scene);\r\n const backGlowMesh = this._createBackGlow(scene);\r\n\r\n this._frontPlateCollisionMesh = collisionMesh;\r\n this._textPlate = <Mesh>super._createNode(scene);\r\n this._textPlate.name = `${this.name}_textPlate`;\r\n this._textPlate.isPickable = false;\r\n this._textPlate.scaling.x = this.width;\r\n this._textPlate.parent = collisionMesh;\r\n\r\n this._backPlate = backPlateMesh;\r\n this._backPlate.position = Vector3.Forward(scene.useRightHandedSystem).scale(this.backPlateDepth / 2);\r\n this._backPlate.isPickable = false;\r\n\r\n this._backPlate.addChild(collisionMesh);\r\n this._backPlate.addChild(innerQuadMesh);\r\n\r\n if (backGlowMesh) {\r\n this._backPlate.addChild(backGlowMesh);\r\n }\r\n\r\n const tn = new TransformNode(`${this.name}_root`, scene);\r\n this._backPlate.setParent(tn);\r\n\r\n this.collisionMesh = collisionMesh;\r\n this.collidableFrontDirection = this._backPlate.forward.negate(); // Mesh is facing the wrong way\r\n\r\n return tn;\r\n }\r\n\r\n private _createBackPlate(scene: Scene) {\r\n const backPlateMesh = CreateBox(`${this.name}_backPlate`, {}, scene);\r\n backPlateMesh.isPickable = false;\r\n backPlateMesh.visibility = 0;\r\n backPlateMesh.scaling.z = 0.2;\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.BACKPLATE_MODEL_FILENAME, scene).then((result) => {\r\n const backPlateModel = result.meshes[1];\r\n backPlateModel.visibility = 0;\r\n\r\n if (this._isBackplateVisible) {\r\n backPlateModel.visibility = 1;\r\n backPlateModel.name = `${this.name}_backPlate`;\r\n backPlateModel.isPickable = false;\r\n backPlateModel.scaling.x = this.width;\r\n backPlateModel.scaling.y = this.height;\r\n backPlateModel.parent = backPlateMesh;\r\n }\r\n\r\n if (this._backMaterial) {\r\n backPlateModel.material = this._backMaterial;\r\n }\r\n\r\n this._backPlate = backPlateModel;\r\n });\r\n\r\n return backPlateMesh;\r\n }\r\n\r\n private _createFrontPlate(scene: Scene) {\r\n const collisionMesh = CreateBox(\r\n `${this.name}_frontPlate`,\r\n {\r\n width: this.width,\r\n height: this.height,\r\n depth: this.frontPlateDepth,\r\n },\r\n scene\r\n );\r\n collisionMesh.isPickable = true;\r\n collisionMesh.isNearPickable = true;\r\n collisionMesh.visibility = 0;\r\n collisionMesh.position = Vector3.Forward(scene.useRightHandedSystem).scale((this.backPlateDepth - this.frontPlateDepth) / 2);\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.FRONTPLATE_MODEL_FILENAME, scene).then((result) => {\r\n const collisionPlate = CreateBox(\r\n `${this.name}_collisionPlate`,\r\n {\r\n width: this.width,\r\n height: this.height,\r\n },\r\n scene\r\n );\r\n collisionPlate.isPickable = false;\r\n collisionPlate.scaling.z = this.frontPlateDepth;\r\n collisionPlate.visibility = 0;\r\n collisionPlate.parent = collisionMesh;\r\n this._collisionPlate = collisionPlate;\r\n\r\n const frontPlateModel = result.meshes[1];\r\n frontPlateModel.name = `${this.name}_frontPlate`;\r\n frontPlateModel.isPickable = false;\r\n frontPlateModel.scaling.x = this.width - this.backGlowOffset;\r\n frontPlateModel.scaling.y = this.height - this.backGlowOffset;\r\n frontPlateModel.position = Vector3.Forward(scene.useRightHandedSystem).scale(-0.5);\r\n frontPlateModel.parent = collisionPlate;\r\n\r\n if (this.isToggleButton) {\r\n frontPlateModel.visibility = 0;\r\n }\r\n\r\n if (this._frontMaterial) {\r\n frontPlateModel.material = this._frontMaterial;\r\n }\r\n\r\n this._textPlate.scaling.x = 1;\r\n this._textPlate.parent = frontPlateModel;\r\n this._frontPlate = frontPlateModel;\r\n });\r\n\r\n return collisionMesh;\r\n }\r\n\r\n private _createInnerQuad(scene: Scene) {\r\n const innerQuadMesh = CreateBox(`${this.name}_innerQuad`, {}, scene);\r\n innerQuadMesh.isPickable = false;\r\n innerQuadMesh.visibility = 0;\r\n innerQuadMesh.scaling.z = this.flatPlaneDepth;\r\n innerQuadMesh.position.z += this.backPlateDepth / 2 - this.flatPlaneDepth;\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.INNERQUAD_MODEL_FILENAME, scene).then((result) => {\r\n const innerQuadModel = result.meshes[1];\r\n innerQuadModel.name = `${this.name}_innerQuad`;\r\n innerQuadModel.isPickable = false;\r\n innerQuadModel.scaling.x = this.width - this.backGlowOffset;\r\n innerQuadModel.scaling.y = this.height - this.backGlowOffset;\r\n innerQuadModel.parent = innerQuadMesh;\r\n\r\n if (this._innerQuadMaterial) {\r\n innerQuadModel.material = this._innerQuadMaterial;\r\n }\r\n\r\n this._innerQuad = innerQuadModel;\r\n });\r\n\r\n return innerQuadMesh;\r\n }\r\n\r\n private _createBackGlow(scene: Scene) {\r\n if (this.isToggleButton) {\r\n return;\r\n }\r\n\r\n const backGlowMesh = CreateBox(`${this.name}_backGlow`, {}, scene);\r\n backGlowMesh.isPickable = false;\r\n backGlowMesh.visibility = 0;\r\n backGlowMesh.scaling.z = this.flatPlaneDepth;\r\n backGlowMesh.position.z += this.backPlateDepth / 2 - this.flatPlaneDepth * 2;\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.BACKGLOW_MODEL_FILENAME, scene).then((result) => {\r\n const backGlowModel = result.meshes[1];\r\n backGlowModel.name = `${this.name}_backGlow`;\r\n backGlowModel.isPickable = false;\r\n backGlowModel.scaling.x = this.width - this.backGlowOffset;\r\n backGlowModel.scaling.y = this.height - this.backGlowOffset;\r\n backGlowModel.parent = backGlowMesh;\r\n\r\n if (this._backGlowMaterial) {\r\n backGlowModel.material = this._backGlowMaterial;\r\n }\r\n\r\n this._backGlow = backGlowModel;\r\n });\r\n\r\n return backGlowMesh;\r\n }\r\n\r\n protected _applyFacade(facadeTexture: AdvancedDynamicTexture) {\r\n this._plateMaterial.emissiveTexture = facadeTexture;\r\n this._plateMaterial.opacityTexture = facadeTexture;\r\n this._plateMaterial.diffuseColor = this.plateMaterialColor;\r\n }\r\n\r\n private _performClickAnimation() {\r\n const frameRate = 60;\r\n const animationGroup = new AnimationGroup(\"Click Animation Group\");\r\n\r\n const animations = [\r\n {\r\n name: \"backGlowMotion\",\r\n mesh: this._backGlow,\r\n property: \"material.motion\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0, 0, 0],\r\n },\r\n {\r\n frame: 20,\r\n values: [1, 0.0144, 0.0144],\r\n },\r\n {\r\n frame: 40,\r\n values: [0.0027713229489760476, 0, 0],\r\n },\r\n {\r\n frame: 45,\r\n values: [0.0027713229489760476],\r\n },\r\n ],\r\n },\r\n {\r\n name: \"_collisionPlateZSlide\",\r\n mesh: this._collisionPlate,\r\n property: \"position.z\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0.0, 0.0, 0.0],\r\n },\r\n {\r\n frame: 20,\r\n values: [Vector3.Forward(this._collisionPlate._scene.useRightHandedSystem).scale(this.frontPlateDepth / 2).z, 0.0, 0.0],\r\n },\r\n {\r\n frame: 40,\r\n values: [0.0, 0.005403332496794331],\r\n },\r\n {\r\n frame: 45,\r\n values: [0.0],\r\n },\r\n ],\r\n },\r\n {\r\n name: \"_collisionPlateZScale\",\r\n mesh: this._collisionPlate,\r\n property: \"scaling.z\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [this.frontPlateDepth, 0.0, 0.0],\r\n },\r\n {\r\n frame: 20,\r\n values: [this.backPlateDepth, 0.0, 0.0],\r\n },\r\n {\r\n frame: 40,\r\n values: [this.frontPlateDepth, 0.0054],\r\n },\r\n {\r\n frame: 45,\r\n values: [this.frontPlateDepth],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n for (const animation of animations) {\r\n const anim = new Animation(animation.name, animation.property, frameRate, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n const animkeyFrames = [];\r\n\r\n for (const key of animation.keys) {\r\n animkeyFrames.push({\r\n frame: key.frame,\r\n value: key.values[0],\r\n inTangent: key.values[1],\r\n outTangent: key.values[2],\r\n interpolation: key.values[3],\r\n });\r\n }\r\n\r\n anim.setKeys(animkeyFrames);\r\n\r\n if (!animation.mesh) {\r\n continue;\r\n }\r\n\r\n animationGroup.addTargetedAnimation(anim, animation.mesh);\r\n }\r\n\r\n animationGroup.normalize(0, 45);\r\n animationGroup.speedRatio = 1;\r\n\r\n animationGroup.play();\r\n }\r\n\r\n private _performEnterExitAnimation(speedRatio: number) {\r\n const frameRate = 60;\r\n const animationGroup = new AnimationGroup(\"Enter Exit Animation Group\");\r\n\r\n const animations = [\r\n {\r\n name: \"frontPlateFadeOut\",\r\n mesh: this._frontPlate,\r\n property: \"material.fadeOut\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0, 0, 0.025045314830017686, 0],\r\n },\r\n {\r\n frame: 40,\r\n values: [1.00205599570012, 0.025045314830017686, 0, 0],\r\n },\r\n ],\r\n },\r\n {\r\n name: \"textPlateZSlide\",\r\n mesh: this._textPlate,\r\n property: \"position.z\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0, 0.0, 0.0],\r\n },\r\n {\r\n frame: 40,\r\n values: [Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-0.15).z, 0.0, 0.0],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n for (const animation of animations) {\r\n const anim = new Animation(animation.name, animation.property, frameRate, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n const animkeyFrames = [];\r\n\r\n for (const key of animation.keys) {\r\n animkeyFrames.push({\r\n frame: key.frame,\r\n value: key.values[0],\r\n inTangent: key.values[1],\r\n outTangent: key.values[2],\r\n interpolation: key.values[3],\r\n });\r\n }\r\n\r\n anim.setKeys(animkeyFrames);\r\n\r\n if (!animation.mesh) {\r\n continue;\r\n }\r\n\r\n animationGroup.addTargetedAnimation(anim, animation.mesh);\r\n }\r\n\r\n animationGroup.normalize(0, 45);\r\n animationGroup.speedRatio = speedRatio;\r\n\r\n animationGroup.play();\r\n }\r\n\r\n private _createBackMaterial(mesh: Mesh) {\r\n this._backMaterial = this._backMaterial ?? new MRDLBackplateMaterial(this.name + \"backPlateMaterial\", mesh.getScene());\r\n this._backMaterial.absoluteSizes = true;\r\n this._backMaterial.radius = this.radius;\r\n this._backMaterial.lineWidth = 0.02;\r\n }\r\n\r\n private _createFrontMaterial(mesh: Mesh) {\r\n this._frontMaterial = this._frontMaterial ?? new MRDLFrontplateMaterial(this.name + \"Front Material\", mesh.getScene());\r\n this.frontMaterial.radius = this.innerQuadRadius;\r\n this.frontMaterial.fadeOut = 0.0;\r\n }\r\n\r\n private _createBackGlowMaterial(mesh: Mesh) {\r\n const glowRadius = this.radius + 0.04;\r\n this._backGlowMaterial = this._backGlowMaterial ?? new MRDLBackglowMaterial(this.name + \"Back Glow Material\", mesh.getScene());\r\n this._backGlowMaterial.bevelRadius = glowRadius;\r\n this._backGlowMaterial.lineWidth = glowRadius;\r\n this._backGlowMaterial.motion = 0.0;\r\n }\r\n\r\n private _createInnerQuadMaterial(mesh: Mesh) {\r\n this._innerQuadMaterial = this._innerQuadMaterial ?? new MRDLInnerquadMaterial(\"inner_quad\", mesh.getScene());\r\n this._innerQuadMaterial.radius = this.innerQuadRadius;\r\n\r\n if (this.isToggleButton) {\r\n this._innerQuadMaterial.color = this.innerQuadColor;\r\n }\r\n }\r\n\r\n private _createPlateMaterial(mesh: Mesh) {\r\n this._plateMaterial = this._plateMaterial ?? new StandardMaterial(this.name + \"Plate Material\", mesh.getScene());\r\n this._plateMaterial.specularColor = Color3.Black();\r\n }\r\n\r\n protected _onToggle(newState: boolean) {\r\n super._onToggle(newState);\r\n }\r\n\r\n protected _affectMaterial(mesh: Mesh) {\r\n if (this._shareMaterials) {\r\n // Back\r\n if (!this._host._touchSharedMaterials[\"mrdlBackplateMaterial\"]) {\r\n this._createBackMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlBackplateMaterial\"] = this._backMaterial;\r\n } else {\r\n this._backMaterial = this._host._touchSharedMaterials[\"mrdlBackplateMaterial\"] as MRDLBackplateMaterial;\r\n }\r\n\r\n // Front\r\n if (!this._host._touchSharedMaterials[\"mrdlFrontplateMaterial\"]) {\r\n this._createFrontMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlFrontplateMaterial\"] = this._frontMaterial;\r\n } else {\r\n this._frontMaterial = this._host._touchSharedMaterials[\"mrdlFrontplateMaterial\"] as MRDLFrontplateMaterial;\r\n }\r\n\r\n // Back glow\r\n if (!this._host._touchSharedMaterials[\"mrdlBackglowMaterial\"]) {\r\n this._createBackGlowMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlBackglowMaterial\"] = this._backGlowMaterial;\r\n } else {\r\n this._backGlowMaterial = this._host._touchSharedMaterials[\"mrdlBackglowMaterial\"] as MRDLBackglowMaterial;\r\n }\r\n\r\n // Inner quad\r\n if (!this._host._touchSharedMaterials[\"mrdlInnerQuadMaterial\"]) {\r\n this._createInnerQuadMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlInnerQuadMaterial\"] = this._innerQuadMaterial;\r\n } else {\r\n this._innerQuadMaterial = this._host._touchSharedMaterials[\"mrdlInnerQuadMaterial\"] as MRDLInnerquadMaterial;\r\n }\r\n } else {\r\n this._createBackMaterial(mesh);\r\n this._createFrontMaterial(mesh);\r\n this._createBackGlowMaterial(mesh);\r\n this._createInnerQuadMaterial(mesh);\r\n }\r\n\r\n this._createPlateMaterial(mesh);\r\n this._backPlate.material = this._backMaterial;\r\n this._textPlate.material = this._plateMaterial;\r\n\r\n if (!this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n\r\n if (this._frontPlate) {\r\n this._frontPlate.material = this._frontMaterial;\r\n }\r\n\r\n if (this._backGlow) {\r\n this._backGlow.material = this._backGlowMaterial;\r\n }\r\n\r\n if (this._innerQuad) {\r\n this._innerQuad.material = this._innerQuadMaterial;\r\n }\r\n\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose(); // will dispose main mesh ie. back plate\r\n\r\n this._disposeTooltip();\r\n this.onPointerClickObservable.remove(this._pointerClickObserver);\r\n this.onPointerEnterObservable.remove(this._pointerEnterObserver);\r\n this.onPointerOutObservable.remove(this._pointerOutObserver);\r\n this.onToggleObservable.remove(this._toggleObserver);\r\n\r\n if (!this.shareMaterials) {\r\n this._backMaterial.dispose();\r\n this._frontMaterial.dispose();\r\n this._plateMaterial.dispose();\r\n this._backGlowMaterial.dispose();\r\n this._innerQuadMaterial.dispose();\r\n\r\n if (this._pickedPointObserver) {\r\n this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);\r\n this._pickedPointObserver = null;\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"touchHolographicButton.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/3D/controls/MRTK3/touchHolographicButton.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { Control3D } from \"../control3D\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Vector3WithInfo } from \"../../vector3WithInfo\";\r\n\r\nimport { AdvancedDynamicTexture } from \"../../../2D/advancedDynamicTexture\";\r\nimport { Animation } from \"core/Animations/animation\";\r\nimport { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Control } from \"../../../2D/controls/control\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { DomManagement } from \"core/Misc/domManagement\";\r\nimport { FadeInOutBehavior } from \"core/Behaviors/Meshes/fadeInOutBehavior\";\r\nimport { Grid } from \"../../../2D/controls/grid\";\r\nimport { Image } from \"../../../2D/controls/image\";\r\nimport { MRDLBackglowMaterial } from \"../../materials/mrdl/mrdlBackglowMaterial\";\r\nimport { MRDLBackplateMaterial } from \"../../materials/mrdl/mrdlBackplateMaterial\";\r\nimport { MRDLFrontplateMaterial } from \"../../materials/mrdl/mrdlFrontplateMaterial\";\r\nimport { MRDLInnerquadMaterial } from \"../../materials/mrdl/mrdlInnerquadMaterial\";\r\nimport { Rectangle } from \"../../../2D/controls/rectangle\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { StackPanel } from \"../../../2D/controls/stackPanel\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { TextBlock } from \"../../../2D/controls/textBlock\";\r\nimport { TouchButton3D } from \"../touchButton3D\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Class used to create the mrtkv3 button\r\n */\r\nexport class TouchHolographicButton extends TouchButton3D {\r\n /**\r\n * Base Url for the frontplate model.\r\n */\r\n public static MRTK_ASSET_BASE_URL = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n\r\n /**\r\n * File name for the frontplate model.\r\n */\r\n public static FRONTPLATE_MODEL_FILENAME = \"mrtk-fluent-frontplate.glb\";\r\n\r\n /**\r\n * File name for the backplate model.\r\n */\r\n public static BACKPLATE_MODEL_FILENAME = \"mrtk-fluent-backplate.glb\";\r\n\r\n /**\r\n * File name for the backglow model.\r\n */\r\n public static BACKGLOW_MODEL_FILENAME = \"mrtk-fluent-button.glb\";\r\n\r\n /**\r\n * File name for the innerquad model.\r\n */\r\n public static INNERQUAD_MODEL_FILENAME = \"SlateProximity.glb\";\r\n\r\n /**\r\n * Gets or sets the horizontal scaling for the button.\r\n */\r\n public width = 1;\r\n\r\n /**\r\n * Gets or sets the vertical scaling for the button.\r\n */\r\n public height = 1;\r\n\r\n /**\r\n * Gets or sets the bevel radius for the button.\r\n */\r\n public radius = 0.14;\r\n\r\n /**\r\n * Gets or sets the font size of the button text in pixels.\r\n * This is only adjustable for a button with width to height ratio greater than 1.\r\n */\r\n public textSizeInPixels = 18;\r\n\r\n /**\r\n * Gets or sets the size of the button image in pixels.\r\n * This is only adjustable for a button with width to height ratio greater than 1.\r\n */\r\n public imageSizeInPixels = 40;\r\n\r\n /**\r\n * Gets or sets the color of the button plate.\r\n */\r\n public plateMaterialColor = new Color3(0.4, 0.4, 0.4);\r\n\r\n // Shared variables for meshes\r\n /**\r\n * Gets or sets the depth of the button's front plate.\r\n * This variable determines the z scaling and z position for some of the button's meshes.\r\n */\r\n public frontPlateDepth = 0.2;\r\n\r\n /**\r\n * Gets or sets the depth of the button's back plate.\r\n * This variable determines the z scaling and z position for some of the button's meshes.\r\n */\r\n public backPlateDepth = 0.04;\r\n\r\n /**\r\n * Gets or sets the offset value for button's back glow.\r\n * This variable determines the x, y scaling of the button's meshes.\r\n */\r\n public backGlowOffset = 0.1;\r\n\r\n /**\r\n * Gets or sets the value that determines the z scaling and z position for the innerQuad and BackGlow meshes.\r\n */\r\n public flatPlaneDepth = 0.001;\r\n\r\n /**\r\n * Gets or sets the radius for FrontMaterial and innerQuadMaterial.\r\n */\r\n public innerQuadRadius = this.radius - 0.04;\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial.\r\n */\r\n public innerQuadColor = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial for when it is toggled.\r\n */\r\n public innerQuadToggledColor = new Color4(0.5197843, 0.6485234, 0.9607843, 0.6);\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial for when it is hovered.\r\n */\r\n public innerQuadHoverColor = new Color4(1, 1, 1, 0.05);\r\n\r\n /**\r\n * Gets or sets the color for innerQuadMaterial for when it is toggled and hovered.\r\n */\r\n public innerQuadToggledHoverColor = new Color4(0.5197843, 0.6485234, 0.9607843, 1);\r\n\r\n // Meshes\r\n private _backPlate: AbstractMesh;\r\n private _textPlate: Mesh;\r\n private _frontPlate: AbstractMesh;\r\n private _backGlow: AbstractMesh;\r\n private _innerQuad: AbstractMesh;\r\n private _collisionPlate: AbstractMesh;\r\n private _frontPlateCollisionMesh: AbstractMesh;\r\n private _isBackplateVisible = true;\r\n\r\n // Content\r\n private _text: string;\r\n private _subtext: string;\r\n private _imageUrl: string;\r\n\r\n // Materials\r\n private _shareMaterials = true;\r\n private _frontMaterial: MRDLFrontplateMaterial;\r\n private _backMaterial: MRDLBackplateMaterial;\r\n private _backGlowMaterial: MRDLBackglowMaterial;\r\n private _innerQuadMaterial: MRDLInnerquadMaterial;\r\n private _plateMaterial: StandardMaterial;\r\n\r\n // Events\r\n private _pickedPointObserver: Nullable<Observer<Nullable<Vector3>>>;\r\n private _pointerClickObserver: Nullable<Observer<Vector3WithInfo>>;\r\n private _pointerEnterObserver: Nullable<Observer<Control3D>>;\r\n private _pointerOutObserver: Nullable<Observer<Control3D>>;\r\n private _toggleObserver: Nullable<Observer<boolean>>;\r\n\r\n // Tooltip\r\n private _tooltipFade: Nullable<FadeInOutBehavior>;\r\n private _tooltipTextBlock: Nullable<TextBlock>;\r\n private _tooltipTexture: Nullable<AdvancedDynamicTexture>;\r\n private _tooltipMesh: Nullable<Mesh>;\r\n private _tooltipHoverObserver: Nullable<Observer<Control3D>>;\r\n private _tooltipOutObserver: Nullable<Observer<Control3D>>;\r\n\r\n private _disposeTooltip() {\r\n this._tooltipFade = null;\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.dispose();\r\n }\r\n if (this._tooltipTexture) {\r\n this._tooltipTexture.dispose();\r\n }\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.dispose();\r\n }\r\n this.onPointerEnterObservable.remove(this._tooltipHoverObserver);\r\n this.onPointerOutObservable.remove(this._tooltipOutObserver);\r\n }\r\n\r\n /**\r\n * Rendering ground id of all the mesh in the button\r\n */\r\n public set renderingGroupId(id: number) {\r\n this._backPlate.renderingGroupId = id;\r\n this._textPlate.renderingGroupId = id;\r\n this._frontPlate.renderingGroupId = id;\r\n this._backGlow.renderingGroupId = id;\r\n this._innerQuad.renderingGroupId = id;\r\n\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.renderingGroupId = id;\r\n }\r\n }\r\n public get renderingGroupId(): number {\r\n return this._backPlate.renderingGroupId;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n return this._backPlate as AbstractMesh;\r\n }\r\n\r\n /**\r\n * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)\r\n * Set this property after adding the button to the GUI3DManager\r\n */\r\n public set tooltipText(text: Nullable<string>) {\r\n if (!text) {\r\n this._disposeTooltip();\r\n return;\r\n }\r\n if (!this._tooltipFade) {\r\n const rightHandedScene = this._backPlate._scene.useRightHandedSystem;\r\n // Create tooltip with mesh and text\r\n this._tooltipMesh = CreatePlane(\"\", { size: 1 }, this._backPlate._scene);\r\n this._tooltipMesh.position = Vector3.Down().scale(0.7).add(Vector3.Forward(rightHandedScene).scale(-0.15));\r\n this._tooltipMesh.isPickable = false;\r\n this._tooltipMesh.parent = this._frontPlateCollisionMesh;\r\n\r\n // Create text texture for the tooltip\r\n this._tooltipTexture = AdvancedDynamicTexture.CreateForMesh(this._tooltipMesh);\r\n const tooltipBackground = new Rectangle();\r\n tooltipBackground.height = 0.25;\r\n tooltipBackground.width = 0.8;\r\n tooltipBackground.cornerRadius = 25;\r\n tooltipBackground.color = \"#ffffff\";\r\n tooltipBackground.thickness = 20;\r\n tooltipBackground.background = \"#060668\";\r\n this._tooltipTexture.addControl(tooltipBackground);\r\n\r\n this._tooltipTextBlock = new TextBlock();\r\n this._tooltipTextBlock.color = \"white\";\r\n this._tooltipTextBlock.fontSize = 100;\r\n this._tooltipTexture.addControl(this._tooltipTextBlock);\r\n\r\n // Add hover action to tooltip\r\n this._tooltipFade = new FadeInOutBehavior();\r\n this._tooltipFade.delay = 500;\r\n this._tooltipMesh.addBehavior(this._tooltipFade);\r\n this._tooltipHoverObserver = this.onPointerEnterObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(true);\r\n }\r\n });\r\n this._tooltipOutObserver = this.onPointerOutObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(false);\r\n }\r\n });\r\n }\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.text = text;\r\n }\r\n }\r\n\r\n public get tooltipText() {\r\n return this._tooltipTextBlock?.text || null;\r\n }\r\n\r\n /**\r\n * Gets or sets text for the button\r\n */\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n public set text(value: string) {\r\n if (this._text === value) {\r\n return;\r\n }\r\n\r\n this._text = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets or sets subtext for a button with larger width\r\n */\r\n public get subtext(): string {\r\n return this._subtext;\r\n }\r\n\r\n public set subtext(value: string) {\r\n if (this._subtext === value) {\r\n return;\r\n }\r\n\r\n this._subtext = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets or sets the image url for the button\r\n */\r\n public get imageUrl(): string {\r\n return this._imageUrl;\r\n }\r\n\r\n public set imageUrl(value: string) {\r\n if (this._imageUrl === value) {\r\n return;\r\n }\r\n\r\n this._imageUrl = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets the back material used by this button\r\n */\r\n public get backMaterial(): MRDLBackplateMaterial {\r\n return this._backMaterial;\r\n }\r\n\r\n /**\r\n * Gets the front material used by this button\r\n */\r\n public get frontMaterial(): MRDLFrontplateMaterial {\r\n return this._frontMaterial;\r\n }\r\n\r\n /**\r\n * Gets the back glow material used by this button\r\n */\r\n public get backGlowMaterial(): MRDLBackglowMaterial {\r\n return this._backGlowMaterial;\r\n }\r\n\r\n /**\r\n * Gets the inner quad material used by this button\r\n */\r\n public get innerQuadMaterial(): MRDLInnerquadMaterial {\r\n return this._innerQuadMaterial;\r\n }\r\n\r\n /**\r\n * Gets the plate material used by this button\r\n */\r\n public get plateMaterial(): StandardMaterial {\r\n return this._plateMaterial;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this button shares its material with other V3 Buttons\r\n */\r\n public get shareMaterials(): boolean {\r\n return this._shareMaterials;\r\n }\r\n\r\n /**\r\n * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement\r\n */\r\n public set isBackplateVisible(isVisible: boolean) {\r\n if (this.mesh && this._backMaterial) {\r\n if (isVisible && !this._isBackplateVisible) {\r\n this._backPlate.visibility = 1;\r\n } else if (!isVisible && this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n }\r\n\r\n this._isBackplateVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Creates a new button\r\n * @param name defines the control name\r\n * @param shareMaterials\r\n */\r\n constructor(name?: string, shareMaterials = true) {\r\n super(name);\r\n\r\n this._shareMaterials = shareMaterials;\r\n\r\n this.pointerEnterAnimation = () => {\r\n if (this._frontPlate && this._textPlate && !this.isToggleButton) {\r\n this._performEnterExitAnimation(1);\r\n }\r\n\r\n if (this.isToggleButton && this._innerQuadMaterial) {\r\n if (this.isToggled) {\r\n this._innerQuadMaterial.color = this.innerQuadToggledHoverColor;\r\n } else {\r\n this._innerQuadMaterial.color = this.innerQuadHoverColor;\r\n }\r\n }\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n if (this._frontPlate && this._textPlate && !this.isToggleButton) {\r\n this._performEnterExitAnimation(-0.8);\r\n }\r\n\r\n if (this.isToggleButton && this._innerQuadMaterial) {\r\n this._onToggle(this.isToggled);\r\n }\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n // Do nothing\r\n };\r\n\r\n this.pointerUpAnimation = () => {\r\n // Do nothing\r\n };\r\n\r\n this._pointerClickObserver = this.onPointerClickObservable.add(() => {\r\n if (this._frontPlate && this._backGlow && !this.isActiveNearInteraction) {\r\n this._performClickAnimation();\r\n }\r\n\r\n if (this.isToggleButton && this._innerQuadMaterial) {\r\n this._onToggle(this.isToggled);\r\n }\r\n });\r\n\r\n this._pointerEnterObserver = this.onPointerEnterObservable.add(() => {\r\n this.pointerEnterAnimation();\r\n });\r\n\r\n this._pointerOutObserver = this.onPointerOutObservable.add(() => {\r\n this.pointerOutAnimation();\r\n });\r\n\r\n this._toggleObserver = this.onToggleObservable.add((isToggled) => {\r\n if (isToggled) {\r\n this._innerQuadMaterial.color = this.innerQuadToggledColor;\r\n } else {\r\n this._innerQuadMaterial.color = this.innerQuadColor;\r\n }\r\n });\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TouchHolographicButton\";\r\n }\r\n\r\n private _rebuildContent(): void {\r\n let content: Control;\r\n\r\n if (this._getAspectRatio() <= 1) {\r\n // align text and image vertically\r\n content = this._alignContentVertically();\r\n } else {\r\n // align text and image horizontally\r\n content = this._alignContentHorizontally();\r\n }\r\n\r\n this.content = content;\r\n }\r\n\r\n private _getAspectRatio() {\r\n return this.width / this.height;\r\n }\r\n\r\n private _alignContentVertically() {\r\n const panel = new StackPanel();\r\n panel.isVertical = true;\r\n\r\n if (DomManagement.IsDocumentAvailable() && !!document.createElement) {\r\n if (this._imageUrl) {\r\n const image = new Image();\r\n image.source = this._imageUrl;\r\n image.heightInPixels = 180;\r\n image.widthInPixels = 100;\r\n image.paddingTopInPixels = 40;\r\n image.paddingBottomInPixels = 40;\r\n panel.addControl(image);\r\n }\r\n }\r\n\r\n if (this._text) {\r\n const text = new TextBlock();\r\n text.text = this._text;\r\n text.color = \"white\";\r\n text.heightInPixels = 30;\r\n text.fontSize = 24;\r\n panel.addControl(text);\r\n }\r\n\r\n return panel;\r\n }\r\n\r\n private _alignContentHorizontally() {\r\n let totalPanelWidthInPixels = 240;\r\n const padding = 15;\r\n\r\n const contentContainer = new Rectangle();\r\n contentContainer.widthInPixels = totalPanelWidthInPixels;\r\n contentContainer.heightInPixels = totalPanelWidthInPixels;\r\n contentContainer.color = \"transparent\";\r\n contentContainer.setPaddingInPixels(padding, padding, padding, padding);\r\n totalPanelWidthInPixels -= padding * 2;\r\n\r\n const panel = new StackPanel();\r\n panel.isVertical = false;\r\n panel.scaleY = this._getAspectRatio();\r\n\r\n if (DomManagement.IsDocumentAvailable() && !!document.createElement) {\r\n if (this._imageUrl) {\r\n const imageContainer = new Rectangle(`${this.name}_image`);\r\n imageContainer.widthInPixels = this.imageSizeInPixels;\r\n imageContainer.heightInPixels = this.imageSizeInPixels;\r\n imageContainer.color = \"transparent\";\r\n totalPanelWidthInPixels -= this.imageSizeInPixels;\r\n\r\n const image = new Image();\r\n image.source = this._imageUrl;\r\n\r\n imageContainer.addControl(image);\r\n panel.addControl(imageContainer);\r\n }\r\n }\r\n\r\n if (this._text) {\r\n const text = new TextBlock(`${this.name}_text`);\r\n text.text = this._text;\r\n text.color = \"white\";\r\n text.fontSize = this.textSizeInPixels;\r\n text.widthInPixels = totalPanelWidthInPixels;\r\n\r\n if (this._imageUrl) {\r\n text.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n text.paddingLeftInPixels = padding;\r\n }\r\n\r\n if (this._subtext) {\r\n const textContainer = new Grid();\r\n textContainer.addColumnDefinition(1);\r\n textContainer.addRowDefinition(0.5);\r\n textContainer.addRowDefinition(0.5);\r\n textContainer.widthInPixels = totalPanelWidthInPixels;\r\n textContainer.heightInPixels = 45;\r\n\r\n const subtext = new TextBlock(`${this.name}_subtext`);\r\n subtext.text = this._subtext;\r\n subtext.color = \"#EEEEEEAB\";\r\n subtext.fontSize = this.textSizeInPixels * 0.75;\r\n subtext.fontWeight = \"600\";\r\n\r\n if (this._imageUrl) {\r\n subtext.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n subtext.paddingLeftInPixels = padding;\r\n }\r\n\r\n textContainer.addControl(text, 0);\r\n textContainer.addControl(subtext, 1);\r\n panel.addControl(textContainer);\r\n } else {\r\n panel.addControl(text);\r\n }\r\n }\r\n\r\n contentContainer.addControl(panel);\r\n return contentContainer;\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n this.name = this.name ?? \"TouchHolographicButton\";\r\n\r\n const backPlateMesh = this._createBackPlate(scene);\r\n const collisionMesh = this._createFrontPlate(scene);\r\n const innerQuadMesh = this._createInnerQuad(scene);\r\n const backGlowMesh = this._createBackGlow(scene);\r\n\r\n this._frontPlateCollisionMesh = collisionMesh;\r\n this._textPlate = <Mesh>super._createNode(scene);\r\n this._textPlate.name = `${this.name}_textPlate`;\r\n this._textPlate.isPickable = false;\r\n this._textPlate.scaling.x = this.width;\r\n this._textPlate.parent = collisionMesh;\r\n\r\n this._backPlate = backPlateMesh;\r\n this._backPlate.position = Vector3.Forward(scene.useRightHandedSystem).scale(this.backPlateDepth / 2);\r\n this._backPlate.isPickable = false;\r\n\r\n this._backPlate.addChild(collisionMesh);\r\n this._backPlate.addChild(innerQuadMesh);\r\n\r\n if (backGlowMesh) {\r\n this._backPlate.addChild(backGlowMesh);\r\n }\r\n\r\n const tn = new TransformNode(`${this.name}_root`, scene);\r\n this._backPlate.setParent(tn);\r\n\r\n this.collisionMesh = collisionMesh;\r\n this.collidableFrontDirection = this._backPlate.forward.negate(); // Mesh is facing the wrong way\r\n\r\n return tn;\r\n }\r\n\r\n private _createBackPlate(scene: Scene) {\r\n const backPlateMesh = CreateBox(`${this.name}_backPlate`, {}, scene);\r\n backPlateMesh.isPickable = false;\r\n backPlateMesh.visibility = 0;\r\n backPlateMesh.scaling.z = 0.2;\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.BACKPLATE_MODEL_FILENAME, scene).then((result) => {\r\n const backPlateModel = result.meshes[1];\r\n backPlateModel.visibility = 0;\r\n\r\n if (this._isBackplateVisible) {\r\n backPlateModel.visibility = 1;\r\n backPlateModel.name = `${this.name}_backPlate`;\r\n backPlateModel.isPickable = false;\r\n backPlateModel.scaling.x = this.width;\r\n backPlateModel.scaling.y = this.height;\r\n backPlateModel.parent = backPlateMesh;\r\n }\r\n\r\n if (this._backMaterial) {\r\n backPlateModel.material = this._backMaterial;\r\n }\r\n\r\n this._backPlate = backPlateModel;\r\n });\r\n\r\n return backPlateMesh;\r\n }\r\n\r\n private _createFrontPlate(scene: Scene) {\r\n const collisionMesh = CreateBox(\r\n `${this.name}_frontPlate`,\r\n {\r\n width: this.width,\r\n height: this.height,\r\n depth: this.frontPlateDepth,\r\n },\r\n scene\r\n );\r\n collisionMesh.isPickable = true;\r\n collisionMesh.isNearPickable = true;\r\n collisionMesh.visibility = 0;\r\n collisionMesh.position = Vector3.Forward(scene.useRightHandedSystem).scale((this.backPlateDepth - this.frontPlateDepth) / 2);\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.FRONTPLATE_MODEL_FILENAME, scene).then((result) => {\r\n const collisionPlate = CreateBox(\r\n `${this.name}_collisionPlate`,\r\n {\r\n width: this.width,\r\n height: this.height,\r\n },\r\n scene\r\n );\r\n collisionPlate.isPickable = false;\r\n collisionPlate.scaling.z = this.frontPlateDepth;\r\n collisionPlate.visibility = 0;\r\n collisionPlate.parent = collisionMesh;\r\n this._collisionPlate = collisionPlate;\r\n\r\n const frontPlateModel = result.meshes[1];\r\n frontPlateModel.name = `${this.name}_frontPlate`;\r\n frontPlateModel.isPickable = false;\r\n frontPlateModel.scaling.x = this.width - this.backGlowOffset;\r\n frontPlateModel.scaling.y = this.height - this.backGlowOffset;\r\n frontPlateModel.position = Vector3.Forward(scene.useRightHandedSystem).scale(-0.5);\r\n frontPlateModel.parent = collisionPlate;\r\n\r\n if (this.isToggleButton) {\r\n frontPlateModel.visibility = 0;\r\n }\r\n\r\n if (this._frontMaterial) {\r\n frontPlateModel.material = this._frontMaterial;\r\n }\r\n\r\n this._textPlate.scaling.x = 1;\r\n this._textPlate.parent = frontPlateModel;\r\n this._frontPlate = frontPlateModel;\r\n });\r\n\r\n return collisionMesh;\r\n }\r\n\r\n private _createInnerQuad(scene: Scene) {\r\n const innerQuadMesh = CreateBox(`${this.name}_innerQuad`, {}, scene);\r\n innerQuadMesh.isPickable = false;\r\n innerQuadMesh.visibility = 0;\r\n innerQuadMesh.scaling.z = this.flatPlaneDepth;\r\n innerQuadMesh.position.z += this.backPlateDepth / 2 - this.flatPlaneDepth;\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.INNERQUAD_MODEL_FILENAME, scene).then((result) => {\r\n const innerQuadModel = result.meshes[1];\r\n innerQuadModel.name = `${this.name}_innerQuad`;\r\n innerQuadModel.isPickable = false;\r\n innerQuadModel.scaling.x = this.width - this.backGlowOffset;\r\n innerQuadModel.scaling.y = this.height - this.backGlowOffset;\r\n innerQuadModel.parent = innerQuadMesh;\r\n\r\n if (this._innerQuadMaterial) {\r\n innerQuadModel.material = this._innerQuadMaterial;\r\n }\r\n\r\n this._innerQuad = innerQuadModel;\r\n });\r\n\r\n return innerQuadMesh;\r\n }\r\n\r\n private _createBackGlow(scene: Scene) {\r\n if (this.isToggleButton) {\r\n return;\r\n }\r\n\r\n const backGlowMesh = CreateBox(`${this.name}_backGlow`, {}, scene);\r\n backGlowMesh.isPickable = false;\r\n backGlowMesh.visibility = 0;\r\n backGlowMesh.scaling.z = this.flatPlaneDepth;\r\n backGlowMesh.position.z += this.backPlateDepth / 2 - this.flatPlaneDepth * 2;\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MRTK_ASSET_BASE_URL, TouchHolographicButton.BACKGLOW_MODEL_FILENAME, scene).then((result) => {\r\n const backGlowModel = result.meshes[1];\r\n backGlowModel.name = `${this.name}_backGlow`;\r\n backGlowModel.isPickable = false;\r\n backGlowModel.scaling.x = this.width - this.backGlowOffset;\r\n backGlowModel.scaling.y = this.height - this.backGlowOffset;\r\n backGlowModel.parent = backGlowMesh;\r\n\r\n if (this._backGlowMaterial) {\r\n backGlowModel.material = this._backGlowMaterial;\r\n }\r\n\r\n this._backGlow = backGlowModel;\r\n });\r\n\r\n return backGlowMesh;\r\n }\r\n\r\n protected _applyFacade(facadeTexture: AdvancedDynamicTexture) {\r\n this._plateMaterial.emissiveTexture = facadeTexture;\r\n this._plateMaterial.opacityTexture = facadeTexture;\r\n this._plateMaterial.diffuseColor = this.plateMaterialColor;\r\n }\r\n\r\n private _performClickAnimation() {\r\n const frameRate = 60;\r\n const animationGroup = new AnimationGroup(\"Click Animation Group\");\r\n\r\n const animations = [\r\n {\r\n name: \"backGlowMotion\",\r\n mesh: this._backGlow,\r\n property: \"material.motion\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0, 0, 0],\r\n },\r\n {\r\n frame: 20,\r\n values: [1, 0.0144, 0.0144],\r\n },\r\n {\r\n frame: 40,\r\n values: [0.0027713229489760476, 0, 0],\r\n },\r\n {\r\n frame: 45,\r\n values: [0.0027713229489760476],\r\n },\r\n ],\r\n },\r\n {\r\n name: \"_collisionPlateZSlide\",\r\n mesh: this._collisionPlate,\r\n property: \"position.z\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0.0, 0.0, 0.0],\r\n },\r\n {\r\n frame: 20,\r\n values: [Vector3.Forward(this._collisionPlate._scene.useRightHandedSystem).scale(this.frontPlateDepth / 2).z, 0.0, 0.0],\r\n },\r\n {\r\n frame: 40,\r\n values: [0.0, 0.005403332496794331],\r\n },\r\n {\r\n frame: 45,\r\n values: [0.0],\r\n },\r\n ],\r\n },\r\n {\r\n name: \"_collisionPlateZScale\",\r\n mesh: this._collisionPlate,\r\n property: \"scaling.z\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [this.frontPlateDepth, 0.0, 0.0],\r\n },\r\n {\r\n frame: 20,\r\n values: [this.backPlateDepth, 0.0, 0.0],\r\n },\r\n {\r\n frame: 40,\r\n values: [this.frontPlateDepth, 0.0054],\r\n },\r\n {\r\n frame: 45,\r\n values: [this.frontPlateDepth],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n for (const animation of animations) {\r\n const anim = new Animation(animation.name, animation.property, frameRate, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n const animkeyFrames = [];\r\n\r\n for (const key of animation.keys) {\r\n animkeyFrames.push({\r\n frame: key.frame,\r\n value: key.values[0],\r\n inTangent: key.values[1],\r\n outTangent: key.values[2],\r\n interpolation: key.values[3],\r\n });\r\n }\r\n\r\n anim.setKeys(animkeyFrames);\r\n\r\n if (!animation.mesh) {\r\n continue;\r\n }\r\n\r\n animationGroup.addTargetedAnimation(anim, animation.mesh);\r\n }\r\n\r\n animationGroup.normalize(0, 45);\r\n animationGroup.speedRatio = 1;\r\n\r\n animationGroup.play();\r\n }\r\n\r\n private _performEnterExitAnimation(speedRatio: number) {\r\n const frameRate = 60;\r\n const animationGroup = new AnimationGroup(\"Enter Exit Animation Group\");\r\n\r\n const animations = [\r\n {\r\n name: \"frontPlateFadeOut\",\r\n mesh: this._frontPlate,\r\n property: \"material.fadeOut\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0, 0, 0.025045314830017686, 0],\r\n },\r\n {\r\n frame: 40,\r\n values: [1.00205599570012, 0.025045314830017686, 0, 0],\r\n },\r\n ],\r\n },\r\n {\r\n name: \"textPlateZSlide\",\r\n mesh: this._textPlate,\r\n property: \"position.z\",\r\n keys: [\r\n {\r\n frame: 0,\r\n values: [0, 0.0, 0.0],\r\n },\r\n {\r\n frame: 40,\r\n values: [Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-0.15).z, 0.0, 0.0],\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n for (const animation of animations) {\r\n const anim = new Animation(animation.name, animation.property, frameRate, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n const animkeyFrames = [];\r\n\r\n for (const key of animation.keys) {\r\n animkeyFrames.push({\r\n frame: key.frame,\r\n value: key.values[0],\r\n inTangent: key.values[1],\r\n outTangent: key.values[2],\r\n interpolation: key.values[3],\r\n });\r\n }\r\n\r\n anim.setKeys(animkeyFrames);\r\n\r\n if (!animation.mesh) {\r\n continue;\r\n }\r\n\r\n animationGroup.addTargetedAnimation(anim, animation.mesh);\r\n }\r\n\r\n animationGroup.normalize(0, 45);\r\n animationGroup.speedRatio = speedRatio;\r\n\r\n animationGroup.play();\r\n }\r\n\r\n private _createBackMaterial(mesh: Mesh) {\r\n this._backMaterial = this._backMaterial ?? new MRDLBackplateMaterial(this.name + \"backPlateMaterial\", mesh.getScene());\r\n this._backMaterial.absoluteSizes = true;\r\n this._backMaterial.radius = this.radius;\r\n this._backMaterial.lineWidth = 0.02;\r\n }\r\n\r\n private _createFrontMaterial(mesh: Mesh) {\r\n this._frontMaterial = this._frontMaterial ?? new MRDLFrontplateMaterial(this.name + \"Front Material\", mesh.getScene());\r\n this.frontMaterial.radius = this.innerQuadRadius;\r\n this.frontMaterial.fadeOut = 0.0;\r\n }\r\n\r\n private _createBackGlowMaterial(mesh: Mesh) {\r\n const glowRadius = this.radius + 0.04;\r\n this._backGlowMaterial = this._backGlowMaterial ?? new MRDLBackglowMaterial(this.name + \"Back Glow Material\", mesh.getScene());\r\n this._backGlowMaterial.bevelRadius = glowRadius;\r\n this._backGlowMaterial.lineWidth = glowRadius;\r\n this._backGlowMaterial.motion = 0.0;\r\n }\r\n\r\n private _createInnerQuadMaterial(mesh: Mesh) {\r\n this._innerQuadMaterial = this._innerQuadMaterial ?? new MRDLInnerquadMaterial(\"inner_quad\", mesh.getScene());\r\n this._innerQuadMaterial.radius = this.innerQuadRadius;\r\n\r\n if (this.isToggleButton) {\r\n this._innerQuadMaterial.color = this.innerQuadColor;\r\n }\r\n }\r\n\r\n private _createPlateMaterial(mesh: Mesh) {\r\n this._plateMaterial = this._plateMaterial ?? new StandardMaterial(this.name + \"Plate Material\", mesh.getScene());\r\n this._plateMaterial.specularColor = Color3.Black();\r\n }\r\n\r\n protected _onToggle(newState: boolean) {\r\n super._onToggle(newState);\r\n }\r\n\r\n protected _affectMaterial(mesh: Mesh) {\r\n if (this._shareMaterials) {\r\n // Back\r\n if (!this._host._touchSharedMaterials[\"mrdlBackplateMaterial\"]) {\r\n this._createBackMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlBackplateMaterial\"] = this._backMaterial;\r\n } else {\r\n this._backMaterial = this._host._touchSharedMaterials[\"mrdlBackplateMaterial\"] as MRDLBackplateMaterial;\r\n }\r\n\r\n // Front\r\n if (!this._host._touchSharedMaterials[\"mrdlFrontplateMaterial\"]) {\r\n this._createFrontMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlFrontplateMaterial\"] = this._frontMaterial;\r\n } else {\r\n this._frontMaterial = this._host._touchSharedMaterials[\"mrdlFrontplateMaterial\"] as MRDLFrontplateMaterial;\r\n }\r\n\r\n // Back glow\r\n if (!this._host._touchSharedMaterials[\"mrdlBackglowMaterial\"]) {\r\n this._createBackGlowMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlBackglowMaterial\"] = this._backGlowMaterial;\r\n } else {\r\n this._backGlowMaterial = this._host._touchSharedMaterials[\"mrdlBackglowMaterial\"] as MRDLBackglowMaterial;\r\n }\r\n\r\n // Inner quad\r\n if (!this._host._touchSharedMaterials[\"mrdlInnerQuadMaterial\"]) {\r\n this._createInnerQuadMaterial(mesh);\r\n this._host._touchSharedMaterials[\"mrdlInnerQuadMaterial\"] = this._innerQuadMaterial;\r\n } else {\r\n this._innerQuadMaterial = this._host._touchSharedMaterials[\"mrdlInnerQuadMaterial\"] as MRDLInnerquadMaterial;\r\n }\r\n } else {\r\n this._createBackMaterial(mesh);\r\n this._createFrontMaterial(mesh);\r\n this._createBackGlowMaterial(mesh);\r\n this._createInnerQuadMaterial(mesh);\r\n }\r\n\r\n this._createPlateMaterial(mesh);\r\n this._backPlate.material = this._backMaterial;\r\n this._textPlate.material = this._plateMaterial;\r\n\r\n if (!this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n\r\n if (this._frontPlate) {\r\n this._frontPlate.material = this._frontMaterial;\r\n }\r\n\r\n if (this._backGlow) {\r\n this._backGlow.material = this._backGlowMaterial;\r\n }\r\n\r\n if (this._innerQuad) {\r\n this._innerQuad.material = this._innerQuadMaterial;\r\n }\r\n\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose(); // will dispose main mesh ie. back plate\r\n\r\n this._disposeTooltip();\r\n this.onPointerClickObservable.remove(this._pointerClickObserver);\r\n this.onPointerEnterObservable.remove(this._pointerEnterObserver);\r\n this.onPointerOutObservable.remove(this._pointerOutObserver);\r\n this.onToggleObservable.remove(this._toggleObserver);\r\n\r\n if (!this.shareMaterials) {\r\n this._backMaterial.dispose();\r\n this._frontMaterial.dispose();\r\n this._plateMaterial.dispose();\r\n this._backGlowMaterial.dispose();\r\n this._innerQuadMaterial.dispose();\r\n\r\n if (this._pickedPointObserver) {\r\n this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);\r\n this._pickedPointObserver = null;\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -4,18 +4,6 @@ import { Control3D } from "./control3D.js";
4
4
  * Class used to create containers for controls
5
5
  */
6
6
  export class Container3D extends Control3D {
7
- /**
8
- * Creates a new container
9
- * @param name defines the container name
10
- */
11
- constructor(name) {
12
- super(name);
13
- this._blockLayout = false;
14
- /**
15
- * Gets the list of child controls
16
- */
17
- this._children = new Array();
18
- }
19
7
  /**
20
8
  * Gets the list of child controls
21
9
  */
@@ -38,6 +26,18 @@ export class Container3D extends Control3D {
38
26
  this._arrangeChildren();
39
27
  }
40
28
  }
29
+ /**
30
+ * Creates a new container
31
+ * @param name defines the container name
32
+ */
33
+ constructor(name) {
34
+ super(name);
35
+ this._blockLayout = false;
36
+ /**
37
+ * Gets the list of child controls
38
+ */
39
+ this._children = new Array();
40
+ }
41
41
  /**
42
42
  * Force the container to update the layout. Please note that it will not take blockLayout property in account
43
43
  * @returns the current container
@@ -1 +1 @@
1
- {"version":3,"file":"container3D.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/3D/controls/container3D.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nimport { Control3D } from \"./control3D\";\r\n\r\n/**\r\n * Class used to create containers for controls\r\n */\r\nexport class Container3D extends Control3D {\r\n private _blockLayout = false;\r\n\r\n /**\r\n * Gets the list of child controls\r\n */\r\n protected _children = new Array<Control3D>();\r\n\r\n /**\r\n * Gets the list of child controls\r\n */\r\n public get children(): Array<Control3D> {\r\n return this._children;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the layout must be blocked (default is false).\r\n * This is helpful to optimize layout operation when adding multiple children in a row\r\n */\r\n public get blockLayout(): boolean {\r\n return this._blockLayout;\r\n }\r\n\r\n public set blockLayout(value: boolean) {\r\n if (this._blockLayout === value) {\r\n return;\r\n }\r\n\r\n this._blockLayout = value;\r\n\r\n if (!this._blockLayout) {\r\n this._arrangeChildren();\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new container\r\n * @param name defines the container name\r\n */\r\n constructor(name?: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Force the container to update the layout. Please note that it will not take blockLayout property in account\r\n * @returns the current container\r\n */\r\n public updateLayout(): Container3D {\r\n this._arrangeChildren();\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if the given control is in the children of this control\r\n * @param control defines the control to check\r\n * @returns true if the control is in the child list\r\n */\r\n public containsControl(control: Control3D): boolean {\r\n return this._children.indexOf(control) !== -1;\r\n }\r\n\r\n /**\r\n * Adds a control to the children of this control\r\n * @param control defines the control to add\r\n * @returns the current container\r\n */\r\n public addControl(control: Control3D): Container3D {\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n control.parent = this;\r\n control._host = this._host;\r\n\r\n this._children.push(control);\r\n\r\n if (this._host.utilityLayer) {\r\n control._prepareNode(this._host.utilityLayer.utilityLayerScene);\r\n\r\n if (control.node) {\r\n control.node.parent = this.node;\r\n }\r\n\r\n if (!this.blockLayout) {\r\n this._arrangeChildren();\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * This function will be called everytime a new control is added\r\n */\r\n protected _arrangeChildren() {}\r\n\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n return new TransformNode(\"ContainerNode\", scene);\r\n }\r\n\r\n /**\r\n * Removes a control from the children of this control\r\n * @param control defines the control to remove\r\n * @returns the current container\r\n */\r\n public removeControl(control: Control3D): Container3D {\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n this._children.splice(index, 1);\r\n\r\n control.parent = null;\r\n control._disposeNode();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"Container3D\";\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n for (const control of this._children) {\r\n control.dispose();\r\n }\r\n\r\n this._children.length = 0;\r\n\r\n super.dispose();\r\n }\r\n\r\n /** Control rotation will remain unchanged */\r\n public static readonly UNSET_ORIENTATION = 0;\r\n\r\n /** Control will rotate to make it look at sphere central axis */\r\n public static readonly FACEORIGIN_ORIENTATION = 1;\r\n\r\n /** Control will rotate to make it look back at sphere central axis */\r\n public static readonly FACEORIGINREVERSED_ORIENTATION = 2;\r\n\r\n /** Control will rotate to look at z axis (0, 0, 1) */\r\n public static readonly FACEFORWARD_ORIENTATION = 3;\r\n\r\n /** Control will rotate to look at negative z axis (0, 0, -1) */\r\n public static readonly FACEFORWARDREVERSED_ORIENTATION = 4;\r\n}\r\n"]}
1
+ {"version":3,"file":"container3D.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/3D/controls/container3D.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nimport { Control3D } from \"./control3D\";\r\n\r\n/**\r\n * Class used to create containers for controls\r\n */\r\nexport class Container3D extends Control3D {\r\n private _blockLayout = false;\r\n\r\n /**\r\n * Gets the list of child controls\r\n */\r\n protected _children = new Array<Control3D>();\r\n\r\n /**\r\n * Gets the list of child controls\r\n */\r\n public get children(): Array<Control3D> {\r\n return this._children;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the layout must be blocked (default is false).\r\n * This is helpful to optimize layout operation when adding multiple children in a row\r\n */\r\n public get blockLayout(): boolean {\r\n return this._blockLayout;\r\n }\r\n\r\n public set blockLayout(value: boolean) {\r\n if (this._blockLayout === value) {\r\n return;\r\n }\r\n\r\n this._blockLayout = value;\r\n\r\n if (!this._blockLayout) {\r\n this._arrangeChildren();\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new container\r\n * @param name defines the container name\r\n */\r\n constructor(name?: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Force the container to update the layout. Please note that it will not take blockLayout property in account\r\n * @returns the current container\r\n */\r\n public updateLayout(): Container3D {\r\n this._arrangeChildren();\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if the given control is in the children of this control\r\n * @param control defines the control to check\r\n * @returns true if the control is in the child list\r\n */\r\n public containsControl(control: Control3D): boolean {\r\n return this._children.indexOf(control) !== -1;\r\n }\r\n\r\n /**\r\n * Adds a control to the children of this control\r\n * @param control defines the control to add\r\n * @returns the current container\r\n */\r\n public addControl(control: Control3D): Container3D {\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n control.parent = this;\r\n control._host = this._host;\r\n\r\n this._children.push(control);\r\n\r\n if (this._host.utilityLayer) {\r\n control._prepareNode(this._host.utilityLayer.utilityLayerScene);\r\n\r\n if (control.node) {\r\n control.node.parent = this.node;\r\n }\r\n\r\n if (!this.blockLayout) {\r\n this._arrangeChildren();\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * This function will be called everytime a new control is added\r\n */\r\n protected _arrangeChildren() {}\r\n\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n return new TransformNode(\"ContainerNode\", scene);\r\n }\r\n\r\n /**\r\n * Removes a control from the children of this control\r\n * @param control defines the control to remove\r\n * @returns the current container\r\n */\r\n public removeControl(control: Control3D): Container3D {\r\n const index = this._children.indexOf(control);\r\n\r\n if (index !== -1) {\r\n this._children.splice(index, 1);\r\n\r\n control.parent = null;\r\n control._disposeNode();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"Container3D\";\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n for (const control of this._children) {\r\n control.dispose();\r\n }\r\n\r\n this._children.length = 0;\r\n\r\n super.dispose();\r\n }\r\n\r\n /** Control rotation will remain unchanged */\r\n public static readonly UNSET_ORIENTATION = 0;\r\n\r\n /** Control will rotate to make it look at sphere central axis */\r\n public static readonly FACEORIGIN_ORIENTATION = 1;\r\n\r\n /** Control will rotate to make it look back at sphere central axis */\r\n public static readonly FACEORIGINREVERSED_ORIENTATION = 2;\r\n\r\n /** Control will rotate to look at z axis (0, 0, 1) */\r\n public static readonly FACEFORWARD_ORIENTATION = 3;\r\n\r\n /** Control will rotate to look at negative z axis (0, 0, -1) */\r\n public static readonly FACEFORWARDREVERSED_ORIENTATION = 4;\r\n}\r\n"]}
@@ -7,47 +7,6 @@ import { Vector3WithInfo } from "../vector3WithInfo.js";
7
7
  * Class used as base class for controls
8
8
  */
9
9
  export class Control3D {
10
- /**
11
- * Creates a new control
12
- * @param name defines the control name
13
- */
14
- constructor(
15
- /** Defines the control name */
16
- name) {
17
- this.name = name;
18
- this._downCount = 0;
19
- this._enterCount = -1;
20
- this._downPointerIds = {}; // Store number of pointer downs per ID, from near and far interactions
21
- this._isVisible = true;
22
- /** @internal */
23
- this._isScaledByManager = false;
24
- /**
25
- * An event triggered when the pointer moves over the control
26
- */
27
- this.onPointerMoveObservable = new Observable();
28
- /**
29
- * An event triggered when the pointer moves out of the control
30
- */
31
- this.onPointerOutObservable = new Observable();
32
- /**
33
- * An event triggered when the pointer taps the control
34
- */
35
- this.onPointerDownObservable = new Observable();
36
- /**
37
- * An event triggered when pointer is up
38
- */
39
- this.onPointerUpObservable = new Observable();
40
- /**
41
- * An event triggered when a control is clicked on (with a mouse)
42
- */
43
- this.onPointerClickObservable = new Observable();
44
- /**
45
- * An event triggered when pointer enters the control
46
- */
47
- this.onPointerEnterObservable = new Observable();
48
- // Behaviors
49
- this._behaviors = new Array();
50
- }
51
10
  /** Gets or sets the control position in world space */
52
11
  get position() {
53
12
  if (!this._node) {
@@ -150,6 +109,47 @@ export class Control3D {
150
109
  mesh.setEnabled(value);
151
110
  }
152
111
  }
112
+ /**
113
+ * Creates a new control
114
+ * @param name defines the control name
115
+ */
116
+ constructor(
117
+ /** Defines the control name */
118
+ name) {
119
+ this.name = name;
120
+ this._downCount = 0;
121
+ this._enterCount = -1;
122
+ this._downPointerIds = {}; // Store number of pointer downs per ID, from near and far interactions
123
+ this._isVisible = true;
124
+ /** @internal */
125
+ this._isScaledByManager = false;
126
+ /**
127
+ * An event triggered when the pointer moves over the control
128
+ */
129
+ this.onPointerMoveObservable = new Observable();
130
+ /**
131
+ * An event triggered when the pointer moves out of the control
132
+ */
133
+ this.onPointerOutObservable = new Observable();
134
+ /**
135
+ * An event triggered when the pointer taps the control
136
+ */
137
+ this.onPointerDownObservable = new Observable();
138
+ /**
139
+ * An event triggered when pointer is up
140
+ */
141
+ this.onPointerUpObservable = new Observable();
142
+ /**
143
+ * An event triggered when a control is clicked on (with a mouse)
144
+ */
145
+ this.onPointerClickObservable = new Observable();
146
+ /**
147
+ * An event triggered when pointer enters the control
148
+ */
149
+ this.onPointerEnterObservable = new Observable();
150
+ // Behaviors
151
+ this._behaviors = new Array();
152
+ }
153
153
  /**
154
154
  * Gets a string representing the class name
155
155
  */
@@ -1 +1 @@
1
- {"version":3,"file":"control3D.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/3D/controls/control3D.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { PointerEventTypes } from \"core/Events/pointerEvents\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { IBehaviorAware, Behavior } from \"core/Behaviors/behavior\";\r\nimport type { IDisposable, Scene } from \"core/scene\";\r\n\r\nimport type { GUI3DManager } from \"../gui3DManager\";\r\nimport { Vector3WithInfo } from \"../vector3WithInfo\";\r\nimport type { Container3D } from \"./container3D\";\r\n\r\ndeclare type TouchButton3D = import(\"./touchButton3D\").TouchButton3D;\r\n\r\n/**\r\n * Class used as base class for controls\r\n */\r\nexport class Control3D implements IDisposable, IBehaviorAware<Control3D> {\r\n private _node: Nullable<TransformNode>;\r\n private _downCount = 0;\r\n private _enterCount = -1;\r\n private _downPointerIds: { [id: number]: number } = {}; // Store number of pointer downs per ID, from near and far interactions\r\n\r\n protected _isVisible = true;\r\n\r\n /** @internal */\r\n public _host: GUI3DManager;\r\n /** @internal */\r\n public _isScaledByManager = false;\r\n\r\n /** Gets or sets the control position in world space */\r\n public get position(): Vector3 {\r\n if (!this._node) {\r\n return Vector3.Zero();\r\n }\r\n\r\n return this._node.position;\r\n }\r\n\r\n public set position(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._node.position = value;\r\n }\r\n\r\n /** Gets or sets the control scaling in world space */\r\n public get scaling(): Vector3 {\r\n if (!this._node) {\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n return this._node.scaling;\r\n }\r\n\r\n public set scaling(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._isScaledByManager = false;\r\n this._node.scaling = value;\r\n }\r\n\r\n /** Callback used to start pointer enter animation */\r\n public pointerEnterAnimation: () => void;\r\n /** Callback used to start pointer out animation */\r\n public pointerOutAnimation: () => void;\r\n /** Callback used to start pointer down animation */\r\n public pointerDownAnimation: () => void;\r\n /** Callback used to start pointer up animation */\r\n public pointerUpAnimation: () => void;\r\n\r\n /**\r\n * An event triggered when the pointer moves over the control\r\n */\r\n public onPointerMoveObservable = new Observable<Vector3>();\r\n\r\n /**\r\n * An event triggered when the pointer moves out of the control\r\n */\r\n public onPointerOutObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * An event triggered when the pointer taps the control\r\n */\r\n public onPointerDownObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer is up\r\n */\r\n public onPointerUpObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when a control is clicked on (with a mouse)\r\n */\r\n public onPointerClickObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer enters the control\r\n */\r\n public onPointerEnterObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * Gets or sets the parent container\r\n */\r\n public parent: Nullable<Container3D>;\r\n\r\n // Behaviors\r\n private _behaviors = new Array<Behavior<Control3D>>();\r\n\r\n /**\r\n * Gets the list of attached behaviors\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n */\r\n public get behaviors(): Behavior<Control3D>[] {\r\n return this._behaviors;\r\n }\r\n\r\n /**\r\n * Attach a behavior to the control\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public addBehavior(behavior: Behavior<Control3D>): Control3D {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n\r\n behavior.init();\r\n const scene = this._host.scene;\r\n if (scene.isLoading) {\r\n // We defer the attach when the scene will be loaded\r\n scene.onDataLoadedObservable.addOnce(() => {\r\n behavior.attach(this);\r\n });\r\n } else {\r\n behavior.attach(this);\r\n }\r\n this._behaviors.push(behavior);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an attached behavior\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public removeBehavior(behavior: Behavior<Control3D>): Control3D {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._behaviors[index].detach();\r\n this._behaviors.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets an attached behavior by name\r\n * @param name defines the name of the behavior to look for\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n * @returns null if behavior was not found else the requested behavior\r\n */\r\n public getBehaviorByName(name: string): Nullable<Behavior<Control3D>> {\r\n for (const behavior of this._behaviors) {\r\n if (behavior.name === name) {\r\n return behavior;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control is visible */\r\n public get isVisible(): boolean {\r\n return this._isVisible;\r\n }\r\n\r\n public 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 const mesh = this.mesh;\r\n if (mesh) {\r\n mesh.setEnabled(value);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new control\r\n * @param name defines the control name\r\n */\r\n constructor(\r\n /** Defines the control name */\r\n public name?: string\r\n ) {}\r\n\r\n /**\r\n * Gets a string representing the class name\r\n */\r\n public get typeName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n /**\r\n * Get the current class name of the control.\r\n * @returns current class name\r\n */\r\n public getClassName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"Control3D\";\r\n }\r\n\r\n /**\r\n * Gets the transform node used by this control\r\n */\r\n public get node(): Nullable<TransformNode> {\r\n return this._node;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n if (this._node instanceof AbstractMesh) {\r\n return this._node as AbstractMesh;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Link the control as child of the given node\r\n * @param node defines the node to link to. Use null to unlink the control\r\n * @returns the current control\r\n */\r\n public linkToTransformNode(node: Nullable<TransformNode>): Control3D {\r\n if (this._node) {\r\n this._node.parent = node;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * @internal*\r\n */\r\n public _prepareNode(scene: Scene): void {\r\n if (!this._node) {\r\n this._node = this._createNode(scene);\r\n\r\n if (!this.node) {\r\n return;\r\n }\r\n this._injectGUI3DReservedDataStore(this.node).control = this; // Store the control on the reservedDataStore field in order to get it when picking\r\n\r\n const mesh = this.mesh;\r\n if (mesh) {\r\n mesh.isPickable = true;\r\n\r\n this._affectMaterial(mesh);\r\n }\r\n }\r\n }\r\n\r\n protected _injectGUI3DReservedDataStore(node: TransformNode): any {\r\n node.reservedDataStore = node.reservedDataStore ?? {};\r\n node.reservedDataStore.GUI3D = node.reservedDataStore.GUI3D ?? {};\r\n return node.reservedDataStore.GUI3D;\r\n }\r\n\r\n /**\r\n * Node creation.\r\n * Can be overriden by children\r\n * @param scene defines the scene where the node must be attached\r\n * @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an attached visible object\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n // Do nothing by default\r\n return null;\r\n }\r\n\r\n /**\r\n * Affect a material to the given mesh\r\n * @param mesh defines the mesh which will represent the control\r\n */\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n mesh.material = null;\r\n }\r\n\r\n private _isTouchButton3D(control: Control3D): control is TouchButton3D {\r\n return (control as TouchButton3D)._generatePointerEventType !== undefined;\r\n }\r\n\r\n // Pointers\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerMove(target: Control3D, coordinates: Vector3): void {\r\n this.onPointerMoveObservable.notifyObservers(coordinates, -1, target, this);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerEnter(target: Control3D): boolean {\r\n if (this._enterCount === -1) {\r\n // -1 is for touch input, we are now sure we are with a mouse or pencil\r\n this._enterCount = 0;\r\n }\r\n\r\n this._enterCount++;\r\n\r\n if (this._enterCount > 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerEnterObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerEnterAnimation) {\r\n this.pointerEnterAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerOut(target: Control3D): void {\r\n this._enterCount--;\r\n\r\n if (this._enterCount > 0) {\r\n return;\r\n }\r\n\r\n this._enterCount = 0;\r\n\r\n this.onPointerOutObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerOutAnimation) {\r\n this.pointerOutAnimation();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerDown(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number): boolean {\r\n this._downCount++;\r\n this._downPointerIds[pointerId] = this._downPointerIds[pointerId] + 1 || 1;\r\n\r\n if (this._downCount !== 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerDownObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerDownAnimation) {\r\n this.pointerDownAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerUp(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._downCount--;\r\n this._downPointerIds[pointerId]--;\r\n\r\n if (this._downPointerIds[pointerId] <= 0) {\r\n delete this._downPointerIds[pointerId];\r\n }\r\n\r\n if (this._downCount < 0) {\r\n // Handle if forcePointerUp was called prior to this\r\n this._downCount = 0;\r\n return;\r\n }\r\n\r\n if (this._downCount == 0) {\r\n if (notifyClick && (this._enterCount > 0 || this._enterCount === -1)) {\r\n this.onPointerClickObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n }\r\n this.onPointerUpObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerUpAnimation) {\r\n this.pointerUpAnimation();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public forcePointerUp(pointerId: Nullable<number> = null) {\r\n if (pointerId !== null) {\r\n this._onPointerUp(this, Vector3.Zero(), pointerId, 0, true);\r\n } else {\r\n for (const key in this._downPointerIds) {\r\n this._onPointerUp(this, Vector3.Zero(), +key as number, 0, true);\r\n }\r\n if (this._downCount > 0) {\r\n this._downCount = 1;\r\n this._onPointerUp(this, Vector3.Zero(), 0, 0, true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _processObservables(type: number, pickedPoint: Vector3, originMeshPosition: Nullable<Vector3>, pointerId: number, buttonIndex: number): boolean {\r\n if (this._isTouchButton3D(this) && originMeshPosition) {\r\n type = this._generatePointerEventType(type, originMeshPosition, this._downCount);\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERMOVE) {\r\n this._onPointerMove(this, pickedPoint);\r\n\r\n const previousControlOver = this._host._lastControlOver[pointerId];\r\n if (previousControlOver && previousControlOver !== this) {\r\n previousControlOver._onPointerOut(this);\r\n }\r\n\r\n if (previousControlOver !== this) {\r\n this._onPointerEnter(this);\r\n }\r\n\r\n this._host._lastControlOver[pointerId] = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERDOWN) {\r\n this._onPointerDown(this, pickedPoint, pointerId, buttonIndex);\r\n this._host._lastControlDown[pointerId] = this;\r\n this._host._lastPickedControl = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERUP || type === PointerEventTypes.POINTERDOUBLETAP) {\r\n if (this._host._lastControlDown[pointerId]) {\r\n this._host._lastControlDown[pointerId]._onPointerUp(this, pickedPoint, pointerId, buttonIndex, true);\r\n }\r\n delete this._host._lastControlDown[pointerId];\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _disposeNode(): void {\r\n if (this._node) {\r\n this._node.dispose();\r\n this._node = null;\r\n }\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n this.onPointerDownObservable.clear();\r\n this.onPointerEnterObservable.clear();\r\n this.onPointerMoveObservable.clear();\r\n this.onPointerOutObservable.clear();\r\n this.onPointerUpObservable.clear();\r\n this.onPointerClickObservable.clear();\r\n\r\n this._disposeNode();\r\n\r\n // Behaviors\r\n for (const behavior of this._behaviors) {\r\n behavior.detach();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"control3D.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/3D/controls/control3D.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { PointerEventTypes } from \"core/Events/pointerEvents\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { IBehaviorAware, Behavior } from \"core/Behaviors/behavior\";\r\nimport type { IDisposable, Scene } from \"core/scene\";\r\n\r\nimport type { GUI3DManager } from \"../gui3DManager\";\r\nimport { Vector3WithInfo } from \"../vector3WithInfo\";\r\nimport type { Container3D } from \"./container3D\";\r\n\r\ndeclare type TouchButton3D = import(\"./touchButton3D\").TouchButton3D;\r\n\r\n/**\r\n * Class used as base class for controls\r\n */\r\nexport class Control3D implements IDisposable, IBehaviorAware<Control3D> {\r\n private _node: Nullable<TransformNode>;\r\n private _downCount = 0;\r\n private _enterCount = -1;\r\n private _downPointerIds: { [id: number]: number } = {}; // Store number of pointer downs per ID, from near and far interactions\r\n\r\n protected _isVisible = true;\r\n\r\n /** @internal */\r\n public _host: GUI3DManager;\r\n /** @internal */\r\n public _isScaledByManager = false;\r\n\r\n /** Gets or sets the control position in world space */\r\n public get position(): Vector3 {\r\n if (!this._node) {\r\n return Vector3.Zero();\r\n }\r\n\r\n return this._node.position;\r\n }\r\n\r\n public set position(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._node.position = value;\r\n }\r\n\r\n /** Gets or sets the control scaling in world space */\r\n public get scaling(): Vector3 {\r\n if (!this._node) {\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n return this._node.scaling;\r\n }\r\n\r\n public set scaling(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._isScaledByManager = false;\r\n this._node.scaling = value;\r\n }\r\n\r\n /** Callback used to start pointer enter animation */\r\n public pointerEnterAnimation: () => void;\r\n /** Callback used to start pointer out animation */\r\n public pointerOutAnimation: () => void;\r\n /** Callback used to start pointer down animation */\r\n public pointerDownAnimation: () => void;\r\n /** Callback used to start pointer up animation */\r\n public pointerUpAnimation: () => void;\r\n\r\n /**\r\n * An event triggered when the pointer moves over the control\r\n */\r\n public onPointerMoveObservable = new Observable<Vector3>();\r\n\r\n /**\r\n * An event triggered when the pointer moves out of the control\r\n */\r\n public onPointerOutObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * An event triggered when the pointer taps the control\r\n */\r\n public onPointerDownObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer is up\r\n */\r\n public onPointerUpObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when a control is clicked on (with a mouse)\r\n */\r\n public onPointerClickObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer enters the control\r\n */\r\n public onPointerEnterObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * Gets or sets the parent container\r\n */\r\n public parent: Nullable<Container3D>;\r\n\r\n // Behaviors\r\n private _behaviors = new Array<Behavior<Control3D>>();\r\n\r\n /**\r\n * Gets the list of attached behaviors\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n */\r\n public get behaviors(): Behavior<Control3D>[] {\r\n return this._behaviors;\r\n }\r\n\r\n /**\r\n * Attach a behavior to the control\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public addBehavior(behavior: Behavior<Control3D>): Control3D {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n\r\n behavior.init();\r\n const scene = this._host.scene;\r\n if (scene.isLoading) {\r\n // We defer the attach when the scene will be loaded\r\n scene.onDataLoadedObservable.addOnce(() => {\r\n behavior.attach(this);\r\n });\r\n } else {\r\n behavior.attach(this);\r\n }\r\n this._behaviors.push(behavior);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an attached behavior\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public removeBehavior(behavior: Behavior<Control3D>): Control3D {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._behaviors[index].detach();\r\n this._behaviors.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets an attached behavior by name\r\n * @param name defines the name of the behavior to look for\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors\r\n * @returns null if behavior was not found else the requested behavior\r\n */\r\n public getBehaviorByName(name: string): Nullable<Behavior<Control3D>> {\r\n for (const behavior of this._behaviors) {\r\n if (behavior.name === name) {\r\n return behavior;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control is visible */\r\n public get isVisible(): boolean {\r\n return this._isVisible;\r\n }\r\n\r\n public 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 const mesh = this.mesh;\r\n if (mesh) {\r\n mesh.setEnabled(value);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new control\r\n * @param name defines the control name\r\n */\r\n constructor(\r\n /** Defines the control name */\r\n public name?: string\r\n ) {}\r\n\r\n /**\r\n * Gets a string representing the class name\r\n */\r\n public get typeName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n /**\r\n * Get the current class name of the control.\r\n * @returns current class name\r\n */\r\n public getClassName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"Control3D\";\r\n }\r\n\r\n /**\r\n * Gets the transform node used by this control\r\n */\r\n public get node(): Nullable<TransformNode> {\r\n return this._node;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n if (this._node instanceof AbstractMesh) {\r\n return this._node as AbstractMesh;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Link the control as child of the given node\r\n * @param node defines the node to link to. Use null to unlink the control\r\n * @returns the current control\r\n */\r\n public linkToTransformNode(node: Nullable<TransformNode>): Control3D {\r\n if (this._node) {\r\n this._node.parent = node;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * @internal*\r\n */\r\n public _prepareNode(scene: Scene): void {\r\n if (!this._node) {\r\n this._node = this._createNode(scene);\r\n\r\n if (!this.node) {\r\n return;\r\n }\r\n this._injectGUI3DReservedDataStore(this.node).control = this; // Store the control on the reservedDataStore field in order to get it when picking\r\n\r\n const mesh = this.mesh;\r\n if (mesh) {\r\n mesh.isPickable = true;\r\n\r\n this._affectMaterial(mesh);\r\n }\r\n }\r\n }\r\n\r\n protected _injectGUI3DReservedDataStore(node: TransformNode): any {\r\n node.reservedDataStore = node.reservedDataStore ?? {};\r\n node.reservedDataStore.GUI3D = node.reservedDataStore.GUI3D ?? {};\r\n return node.reservedDataStore.GUI3D;\r\n }\r\n\r\n /**\r\n * Node creation.\r\n * Can be overriden by children\r\n * @param scene defines the scene where the node must be attached\r\n * @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an attached visible object\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n // Do nothing by default\r\n return null;\r\n }\r\n\r\n /**\r\n * Affect a material to the given mesh\r\n * @param mesh defines the mesh which will represent the control\r\n */\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n mesh.material = null;\r\n }\r\n\r\n private _isTouchButton3D(control: Control3D): control is TouchButton3D {\r\n return (control as TouchButton3D)._generatePointerEventType !== undefined;\r\n }\r\n\r\n // Pointers\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerMove(target: Control3D, coordinates: Vector3): void {\r\n this.onPointerMoveObservable.notifyObservers(coordinates, -1, target, this);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerEnter(target: Control3D): boolean {\r\n if (this._enterCount === -1) {\r\n // -1 is for touch input, we are now sure we are with a mouse or pencil\r\n this._enterCount = 0;\r\n }\r\n\r\n this._enterCount++;\r\n\r\n if (this._enterCount > 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerEnterObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerEnterAnimation) {\r\n this.pointerEnterAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerOut(target: Control3D): void {\r\n this._enterCount--;\r\n\r\n if (this._enterCount > 0) {\r\n return;\r\n }\r\n\r\n this._enterCount = 0;\r\n\r\n this.onPointerOutObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerOutAnimation) {\r\n this.pointerOutAnimation();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerDown(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number): boolean {\r\n this._downCount++;\r\n this._downPointerIds[pointerId] = this._downPointerIds[pointerId] + 1 || 1;\r\n\r\n if (this._downCount !== 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerDownObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerDownAnimation) {\r\n this.pointerDownAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _onPointerUp(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._downCount--;\r\n this._downPointerIds[pointerId]--;\r\n\r\n if (this._downPointerIds[pointerId] <= 0) {\r\n delete this._downPointerIds[pointerId];\r\n }\r\n\r\n if (this._downCount < 0) {\r\n // Handle if forcePointerUp was called prior to this\r\n this._downCount = 0;\r\n return;\r\n }\r\n\r\n if (this._downCount == 0) {\r\n if (notifyClick && (this._enterCount > 0 || this._enterCount === -1)) {\r\n this.onPointerClickObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n }\r\n this.onPointerUpObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerUpAnimation) {\r\n this.pointerUpAnimation();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public forcePointerUp(pointerId: Nullable<number> = null) {\r\n if (pointerId !== null) {\r\n this._onPointerUp(this, Vector3.Zero(), pointerId, 0, true);\r\n } else {\r\n for (const key in this._downPointerIds) {\r\n this._onPointerUp(this, Vector3.Zero(), +key as number, 0, true);\r\n }\r\n if (this._downCount > 0) {\r\n this._downCount = 1;\r\n this._onPointerUp(this, Vector3.Zero(), 0, 0, true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _processObservables(type: number, pickedPoint: Vector3, originMeshPosition: Nullable<Vector3>, pointerId: number, buttonIndex: number): boolean {\r\n if (this._isTouchButton3D(this) && originMeshPosition) {\r\n type = this._generatePointerEventType(type, originMeshPosition, this._downCount);\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERMOVE) {\r\n this._onPointerMove(this, pickedPoint);\r\n\r\n const previousControlOver = this._host._lastControlOver[pointerId];\r\n if (previousControlOver && previousControlOver !== this) {\r\n previousControlOver._onPointerOut(this);\r\n }\r\n\r\n if (previousControlOver !== this) {\r\n this._onPointerEnter(this);\r\n }\r\n\r\n this._host._lastControlOver[pointerId] = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERDOWN) {\r\n this._onPointerDown(this, pickedPoint, pointerId, buttonIndex);\r\n this._host._lastControlDown[pointerId] = this;\r\n this._host._lastPickedControl = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERUP || type === PointerEventTypes.POINTERDOUBLETAP) {\r\n if (this._host._lastControlDown[pointerId]) {\r\n this._host._lastControlDown[pointerId]._onPointerUp(this, pickedPoint, pointerId, buttonIndex, true);\r\n }\r\n delete this._host._lastControlDown[pointerId];\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _disposeNode(): void {\r\n if (this._node) {\r\n this._node.dispose();\r\n this._node = null;\r\n }\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n this.onPointerDownObservable.clear();\r\n this.onPointerEnterObservable.clear();\r\n this.onPointerMoveObservable.clear();\r\n this.onPointerOutObservable.clear();\r\n this.onPointerUpObservable.clear();\r\n this.onPointerClickObservable.clear();\r\n\r\n this._disposeNode();\r\n\r\n // Behaviors\r\n for (const behavior of this._behaviors) {\r\n behavior.detach();\r\n }\r\n }\r\n}\r\n"]}