@babylonjs/gui 5.0.0-alpha.6 → 5.0.0-alpha.63

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 (275) hide show
  1. package/2D/adtInstrumentation.js +1 -1
  2. package/2D/advancedDynamicTexture.d.ts +165 -125
  3. package/2D/advancedDynamicTexture.js +342 -181
  4. package/2D/advancedDynamicTexture.js.map +1 -1
  5. package/2D/controls/button.js +10 -10
  6. package/2D/controls/button.js.map +1 -1
  7. package/2D/controls/checkbox.d.ts +2 -1
  8. package/2D/controls/checkbox.js +10 -8
  9. package/2D/controls/checkbox.js.map +1 -1
  10. package/2D/controls/colorpicker.d.ts +4 -3
  11. package/2D/controls/colorpicker.js +40 -23
  12. package/2D/controls/colorpicker.js.map +1 -1
  13. package/2D/controls/container.d.ts +16 -5
  14. package/2D/controls/container.js +93 -15
  15. package/2D/controls/container.js.map +1 -1
  16. package/2D/controls/control.d.ts +99 -44
  17. package/2D/controls/control.js +267 -129
  18. package/2D/controls/control.js.map +1 -1
  19. package/2D/controls/displayGrid.d.ts +2 -1
  20. package/2D/controls/displayGrid.js +6 -6
  21. package/2D/controls/displayGrid.js.map +1 -1
  22. package/2D/controls/ellipse.d.ts +5 -3
  23. package/2D/controls/ellipse.js +9 -5
  24. package/2D/controls/ellipse.js.map +1 -1
  25. package/2D/controls/focusableButton.d.ts +4 -2
  26. package/2D/controls/focusableButton.js +9 -6
  27. package/2D/controls/focusableButton.js.map +1 -1
  28. package/2D/controls/focusableControl.d.ts +2 -1
  29. package/2D/controls/focusableControl.js.map +1 -1
  30. package/2D/controls/grid.d.ts +13 -2
  31. package/2D/controls/grid.js +108 -24
  32. package/2D/controls/grid.js.map +1 -1
  33. package/2D/controls/image.d.ts +20 -12
  34. package/2D/controls/image.js +154 -111
  35. package/2D/controls/image.js.map +1 -1
  36. package/2D/controls/index.js +29 -29
  37. package/2D/controls/inputPassword.js +4 -4
  38. package/2D/controls/inputPassword.js.map +1 -1
  39. package/2D/controls/inputText.d.ts +6 -4
  40. package/2D/controls/inputText.js +40 -14
  41. package/2D/controls/inputText.js.map +1 -1
  42. package/2D/controls/line.d.ts +3 -2
  43. package/2D/controls/line.js +8 -8
  44. package/2D/controls/line.js.map +1 -1
  45. package/2D/controls/multiLine.d.ts +4 -3
  46. package/2D/controls/multiLine.js +6 -6
  47. package/2D/controls/multiLine.js.map +1 -1
  48. package/2D/controls/radioButton.d.ts +2 -1
  49. package/2D/controls/radioButton.js +10 -7
  50. package/2D/controls/radioButton.js.map +1 -1
  51. package/2D/controls/rectangle.d.ts +8 -3
  52. package/2D/controls/rectangle.js +21 -5
  53. package/2D/controls/rectangle.js.map +1 -1
  54. package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -2
  55. package/2D/controls/scrollViewers/scrollViewer.js +9 -9
  56. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  57. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +4 -3
  58. package/2D/controls/scrollViewers/scrollViewerWindow.js +4 -4
  59. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  60. package/2D/controls/selector.js +8 -8
  61. package/2D/controls/selector.js.map +1 -1
  62. package/2D/controls/sliders/baseSlider.d.ts +1 -1
  63. package/2D/controls/sliders/baseSlider.js +12 -10
  64. package/2D/controls/sliders/baseSlider.js.map +1 -1
  65. package/2D/controls/sliders/imageBasedSlider.d.ts +10 -1
  66. package/2D/controls/sliders/imageBasedSlider.js +29 -5
  67. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  68. package/2D/controls/sliders/imageScrollBar.d.ts +2 -1
  69. package/2D/controls/sliders/imageScrollBar.js +3 -3
  70. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  71. package/2D/controls/sliders/scrollBar.d.ts +2 -1
  72. package/2D/controls/sliders/scrollBar.js +3 -3
  73. package/2D/controls/sliders/scrollBar.js.map +1 -1
  74. package/2D/controls/sliders/slider.d.ts +2 -1
  75. package/2D/controls/sliders/slider.js +4 -4
  76. package/2D/controls/sliders/slider.js.map +1 -1
  77. package/2D/controls/stackPanel.d.ts +10 -3
  78. package/2D/controls/stackPanel.js +35 -13
  79. package/2D/controls/stackPanel.js.map +1 -1
  80. package/2D/controls/statics.js +3 -3
  81. package/2D/controls/statics.js.map +1 -1
  82. package/2D/controls/textBlock.d.ts +9 -8
  83. package/2D/controls/textBlock.js +30 -20
  84. package/2D/controls/textBlock.js.map +1 -1
  85. package/2D/controls/textWrapper.js +2 -2
  86. package/2D/controls/textWrapper.js.map +1 -1
  87. package/2D/controls/toggleButton.d.ts +1 -13
  88. package/2D/controls/toggleButton.js +29 -38
  89. package/2D/controls/toggleButton.js.map +1 -1
  90. package/2D/controls/virtualKeyboard.js +5 -5
  91. package/2D/controls/virtualKeyboard.js.map +1 -1
  92. package/2D/index.d.ts +1 -1
  93. package/2D/index.js +9 -9
  94. package/2D/index.js.map +1 -1
  95. package/2D/math2D.js +2 -2
  96. package/2D/measure.js +1 -1
  97. package/2D/measure.js.map +1 -1
  98. package/2D/multiLinePoint.js +3 -3
  99. package/2D/style.js +2 -2
  100. package/2D/valueAndUnit.d.ts +21 -6
  101. package/2D/valueAndUnit.js +57 -13
  102. package/2D/valueAndUnit.js.map +1 -1
  103. package/2D/xmlLoader.d.ts +17 -3
  104. package/2D/xmlLoader.js +54 -15
  105. package/2D/xmlLoader.js.map +1 -1
  106. package/3D/behaviors/defaultBehavior.d.ts +73 -0
  107. package/3D/behaviors/defaultBehavior.js +122 -0
  108. package/3D/behaviors/defaultBehavior.js.map +1 -0
  109. package/3D/controls/abstractButton3D.d.ts +2 -2
  110. package/3D/controls/abstractButton3D.js +3 -3
  111. package/3D/controls/abstractButton3D.js.map +1 -1
  112. package/3D/controls/button3D.d.ts +0 -24
  113. package/3D/controls/button3D.js +7 -83
  114. package/3D/controls/button3D.js.map +1 -1
  115. package/3D/controls/container3D.js +2 -2
  116. package/3D/controls/contentDisplay3D.d.ts +30 -0
  117. package/3D/controls/contentDisplay3D.js +79 -0
  118. package/3D/controls/contentDisplay3D.js.map +1 -0
  119. package/3D/controls/control3D.d.ts +10 -7
  120. package/3D/controls/control3D.js +42 -28
  121. package/3D/controls/control3D.js.map +1 -1
  122. package/3D/controls/cylinderPanel.js +5 -5
  123. package/3D/controls/handMenu.d.ts +28 -0
  124. package/3D/controls/handMenu.js +48 -0
  125. package/3D/controls/handMenu.js.map +1 -0
  126. package/3D/controls/holographicBackplate.d.ts +48 -0
  127. package/3D/controls/holographicBackplate.js +121 -0
  128. package/3D/controls/holographicBackplate.js.map +1 -0
  129. package/3D/controls/holographicButton.d.ts +1 -1
  130. package/3D/controls/holographicButton.js +27 -24
  131. package/3D/controls/holographicButton.js.map +1 -1
  132. package/3D/controls/holographicSlate.d.ts +118 -0
  133. package/3D/controls/holographicSlate.js +360 -0
  134. package/3D/controls/holographicSlate.js.map +1 -0
  135. package/3D/controls/index.d.ts +10 -0
  136. package/3D/controls/index.js +22 -12
  137. package/3D/controls/index.js.map +1 -1
  138. package/3D/controls/meshButton3D.js +2 -2
  139. package/3D/controls/meshButton3D.js.map +1 -1
  140. package/3D/controls/nearMenu.d.ts +45 -0
  141. package/3D/controls/nearMenu.js +111 -0
  142. package/3D/controls/nearMenu.js.map +1 -0
  143. package/3D/controls/planePanel.js +3 -3
  144. package/3D/controls/scatterPanel.js +4 -4
  145. package/3D/controls/slider3D.d.ts +80 -0
  146. package/3D/controls/slider3D.js +268 -0
  147. package/3D/controls/slider3D.js.map +1 -0
  148. package/3D/controls/spherePanel.js +5 -5
  149. package/3D/controls/stackPanel3D.js +3 -3
  150. package/3D/controls/touchButton3D.d.ts +43 -0
  151. package/3D/controls/touchButton3D.js +133 -0
  152. package/3D/controls/touchButton3D.js.map +1 -0
  153. package/3D/controls/touchHolographicButton.d.ts +100 -0
  154. package/3D/controls/touchHolographicButton.js +408 -0
  155. package/3D/controls/touchHolographicButton.js.map +1 -0
  156. package/3D/controls/touchHolographicMenu.d.ts +61 -0
  157. package/3D/controls/touchHolographicMenu.js +149 -0
  158. package/3D/controls/touchHolographicMenu.js.map +1 -0
  159. package/3D/controls/touchMeshButton3D.d.ts +22 -0
  160. package/3D/controls/touchMeshButton3D.js +63 -0
  161. package/3D/controls/touchMeshButton3D.js.map +1 -0
  162. package/3D/controls/touchToggleButton3D.d.ts +35 -0
  163. package/3D/controls/touchToggleButton3D.js +60 -0
  164. package/3D/controls/touchToggleButton3D.js.map +1 -0
  165. package/3D/controls/volumeBasedPanel.d.ts +1 -1
  166. package/3D/controls/volumeBasedPanel.js +5 -5
  167. package/3D/controls/volumeBasedPanel.js.map +1 -1
  168. package/3D/gizmos/gizmoHandle.d.ts +108 -0
  169. package/3D/gizmos/gizmoHandle.js +210 -0
  170. package/3D/gizmos/gizmoHandle.js.map +1 -0
  171. package/3D/gizmos/index.d.ts +2 -0
  172. package/3D/gizmos/index.js +3 -0
  173. package/3D/gizmos/index.js.map +1 -0
  174. package/3D/gizmos/slateGizmo.d.ts +59 -0
  175. package/3D/gizmos/slateGizmo.js +364 -0
  176. package/3D/gizmos/slateGizmo.js.map +1 -0
  177. package/3D/gui3DManager.d.ts +19 -0
  178. package/3D/gui3DManager.js +73 -13
  179. package/3D/gui3DManager.js.map +1 -1
  180. package/3D/index.d.ts +3 -2
  181. package/3D/index.js +5 -4
  182. package/3D/index.js.map +1 -1
  183. package/3D/materials/fluent/fluentMaterial.d.ts +90 -0
  184. package/3D/materials/fluent/fluentMaterial.js +282 -0
  185. package/3D/materials/fluent/fluentMaterial.js.map +1 -0
  186. package/3D/materials/fluent/index.d.ts +1 -0
  187. package/3D/materials/fluent/index.js +2 -0
  188. package/3D/materials/fluent/index.js.map +1 -0
  189. package/3D/materials/{shaders → fluent/shaders}/fluent.fragment.d.ts +0 -0
  190. package/3D/materials/fluent/shaders/fluent.fragment.js +7 -0
  191. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
  192. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.d.ts +0 -0
  193. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.js +2 -2
  194. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
  195. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -0
  196. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +435 -0
  197. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
  198. package/3D/materials/fluentBackplate/index.d.ts +1 -0
  199. package/3D/materials/fluentBackplate/index.js +2 -0
  200. package/3D/materials/fluentBackplate/index.js.map +1 -0
  201. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
  202. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +7 -0
  203. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
  204. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
  205. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +7 -0
  206. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
  207. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -0
  208. package/3D/materials/fluentButton/fluentButtonMaterial.js +538 -0
  209. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
  210. package/3D/materials/fluentButton/index.d.ts +1 -0
  211. package/3D/materials/fluentButton/index.js +2 -0
  212. package/3D/materials/fluentButton/index.js.map +1 -0
  213. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
  214. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +7 -0
  215. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
  216. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
  217. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +7 -0
  218. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
  219. package/3D/materials/fluentMaterial.d.ts +2 -88
  220. package/3D/materials/fluentMaterial.js +2 -277
  221. package/3D/materials/fluentMaterial.js.map +1 -1
  222. package/3D/materials/handle/handleMaterial.d.ts +68 -0
  223. package/3D/materials/handle/handleMaterial.js +127 -0
  224. package/3D/materials/handle/handleMaterial.js.map +1 -0
  225. package/3D/materials/handle/index.d.ts +1 -0
  226. package/3D/materials/handle/index.js +2 -0
  227. package/3D/materials/handle/index.js.map +1 -0
  228. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
  229. package/3D/materials/handle/shaders/handle.fragment.js +7 -0
  230. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
  231. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
  232. package/3D/materials/handle/shaders/handle.vertex.js +7 -0
  233. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
  234. package/3D/materials/index.d.ts +5 -1
  235. package/3D/materials/index.js +5 -1
  236. package/3D/materials/index.js.map +1 -1
  237. package/3D/materials/mrdl/index.d.ts +3 -0
  238. package/3D/materials/mrdl/index.js +4 -0
  239. package/3D/materials/mrdl/index.js.map +1 -0
  240. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -0
  241. package/3D/materials/mrdl/mrdlBackplateMaterial.js +410 -0
  242. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
  243. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -0
  244. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +787 -0
  245. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
  246. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -0
  247. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +787 -0
  248. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
  249. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
  250. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +7 -0
  251. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
  252. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
  253. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +7 -0
  254. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
  255. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
  256. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +7 -0
  257. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
  258. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
  259. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +7 -0
  260. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
  261. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
  262. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +7 -0
  263. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
  265. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +7 -0
  266. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
  267. package/3D/vector3WithInfo.js +1 -1
  268. package/index.d.ts +2 -2
  269. package/index.js +2 -2
  270. package/index.js.map +1 -1
  271. package/legacy/legacy.js +2 -2
  272. package/package.json +126 -9
  273. package/3D/materials/shaders/fluent.fragment.js +0 -7
  274. package/3D/materials/shaders/fluent.fragment.js.map +0 -1
  275. package/3D/materials/shaders/fluent.vertex.js.map +0 -1
@@ -0,0 +1,133 @@
1
+ // Assumptions: absolute position of button mesh is inside the mesh
2
+ import { __extends } from "tslib";
3
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
4
+ import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents.js";
5
+ import { TmpVectors } from "@babylonjs/core/Maths/math.vector.js";
6
+ import { Button3D } from "./button3D.js";
7
+ /**
8
+ * Class used to create a touchable button in 3D
9
+ */
10
+ var TouchButton3D = /** @class */ (function (_super) {
11
+ __extends(TouchButton3D, _super);
12
+ /**
13
+ * Creates a new touchable button
14
+ * @param name defines the control name
15
+ * @param collisionMesh mesh to track collisions with
16
+ */
17
+ function TouchButton3D(name, collisionMesh) {
18
+ var _this = _super.call(this, name) || this;
19
+ _this._isNearPressed = false;
20
+ _this.collidableFrontDirection = Vector3.Zero();
21
+ if (collisionMesh) {
22
+ _this.collisionMesh = collisionMesh;
23
+ }
24
+ return _this;
25
+ }
26
+ Object.defineProperty(TouchButton3D.prototype, "collidableFrontDirection", {
27
+ /**
28
+ * Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'
29
+ */
30
+ get: function () {
31
+ if (this._collisionMesh) {
32
+ // Update the front direction to reflect any rotations of the collision mesh
33
+ var transformedDirection = TmpVectors.Vector3[0];
34
+ Vector3.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), transformedDirection);
35
+ return transformedDirection.normalize();
36
+ }
37
+ return this._collidableFrontDirection;
38
+ },
39
+ /**
40
+ * Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction
41
+ * @param frontDir the forward direction of the button
42
+ */
43
+ set: function (frontWorldDir) {
44
+ this._collidableFrontDirection = frontWorldDir.normalize();
45
+ if (this._collisionMesh) {
46
+ var invert = TmpVectors.Matrix[0];
47
+ invert.copyFrom(this._collisionMesh.getWorldMatrix());
48
+ invert.invert();
49
+ Vector3.TransformNormalToRef(this._collidableFrontDirection, invert, this._collidableFrontDirection);
50
+ this._collidableFrontDirection.normalize();
51
+ }
52
+ },
53
+ enumerable: false,
54
+ configurable: true
55
+ });
56
+ Object.defineProperty(TouchButton3D.prototype, "collisionMesh", {
57
+ /**
58
+ * Sets the mesh used for testing input collision
59
+ * @param collisionMesh the new collision mesh for the button
60
+ */
61
+ set: function (collisionMesh) {
62
+ if (this._collisionMesh) {
63
+ this._collisionMesh.dispose();
64
+ }
65
+ // parent the mesh to sync transforms
66
+ if (!collisionMesh.parent && this.mesh) {
67
+ collisionMesh.setParent(this.mesh);
68
+ }
69
+ this._collisionMesh = collisionMesh;
70
+ this._injectGUI3DReservedDataStore(this._collisionMesh).control = this;
71
+ this._collisionMesh.isNearPickable = true;
72
+ this.collidableFrontDirection = collisionMesh.forward;
73
+ },
74
+ enumerable: false,
75
+ configurable: true
76
+ });
77
+ // Returns true if the collidable is in front of the button, or if the button has no front direction
78
+ TouchButton3D.prototype._isInteractionInFrontOfButton = function (collidablePos) {
79
+ return this._getInteractionHeight(collidablePos, this._collisionMesh.getAbsolutePosition()) > 0;
80
+ };
81
+ // Returns true if the collidable is in front of the button, or if the button has no front direction
82
+ TouchButton3D.prototype._getInteractionHeight = function (interactionPos, basePos) {
83
+ var frontDir = this.collidableFrontDirection;
84
+ if (frontDir.length() === 0) {
85
+ // The button has no front, just return the distance to the base
86
+ return Vector3.Distance(interactionPos, basePos);
87
+ }
88
+ var d = Vector3.Dot(basePos, frontDir);
89
+ var abc = Vector3.Dot(interactionPos, frontDir);
90
+ return abc - d;
91
+ };
92
+ /** @hidden */
93
+ TouchButton3D.prototype._generatePointerEventType = function (providedType, nearMeshPosition, activeInteractionCount) {
94
+ if (providedType === PointerEventTypes.POINTERDOWN) {
95
+ if (!this._isInteractionInFrontOfButton(nearMeshPosition)) {
96
+ // Near interaction mesh is behind the button, don't send a pointer down
97
+ return PointerEventTypes.POINTERMOVE;
98
+ }
99
+ else {
100
+ this._isNearPressed = true;
101
+ }
102
+ }
103
+ if (providedType === PointerEventTypes.POINTERUP) {
104
+ if (activeInteractionCount == 0) {
105
+ // We get the release for the down we swallowed earlier, swallow as well
106
+ return PointerEventTypes.POINTERMOVE;
107
+ }
108
+ else {
109
+ this._isNearPressed = false;
110
+ }
111
+ }
112
+ return providedType;
113
+ };
114
+ TouchButton3D.prototype._getTypeName = function () {
115
+ return "TouchButton3D";
116
+ };
117
+ // Mesh association
118
+ TouchButton3D.prototype._createNode = function (scene) {
119
+ return _super.prototype._createNode.call(this, scene);
120
+ };
121
+ /**
122
+ * Releases all associated resources
123
+ */
124
+ TouchButton3D.prototype.dispose = function () {
125
+ _super.prototype.dispose.call(this);
126
+ if (this._collisionMesh) {
127
+ this._collisionMesh.dispose();
128
+ }
129
+ };
130
+ return TouchButton3D;
131
+ }(Button3D));
132
+ export { TouchButton3D };
133
+ //# sourceMappingURL=touchButton3D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchButton3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/touchButton3D.ts"],"names":[],"mappings":"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","sourcesContent":["// Assumptions: absolute position of button mesh is inside the mesh\r\n\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { PointerEventTypes } from \"@babylonjs/core/Events/pointerEvents\";\r\nimport { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { TmpVectors } from \"@babylonjs/core/Maths/math.vector\";\r\n\r\nimport { Button3D } from \"./button3D\";\r\n\r\n/**\r\n * Class used to create a touchable button in 3D\r\n */\r\nexport class TouchButton3D extends Button3D {\r\n private _collisionMesh: Mesh;\r\n\r\n // 'front' direction. If Vector3.Zero, there is no front and all directions of interaction are accepted\r\n private _collidableFrontDirection: Vector3;\r\n protected _isNearPressed = false;\r\n\r\n /**\r\n * Creates a new touchable button\r\n * @param name defines the control name\r\n * @param collisionMesh mesh to track collisions with\r\n */\r\n constructor(name?: string, collisionMesh?: Mesh) {\r\n super(name);\r\n\r\n this.collidableFrontDirection = Vector3.Zero();\r\n\r\n if (collisionMesh) {\r\n this.collisionMesh = collisionMesh;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction\r\n * @param frontDir the forward direction of the button\r\n */\r\n public set collidableFrontDirection(frontWorldDir: Vector3) {\r\n this._collidableFrontDirection = frontWorldDir.normalize();\r\n\r\n if (this._collisionMesh) {\r\n const invert = TmpVectors.Matrix[0];\r\n\r\n invert.copyFrom(this._collisionMesh.getWorldMatrix());\r\n invert.invert();\r\n Vector3.TransformNormalToRef(this._collidableFrontDirection, invert, this._collidableFrontDirection);\r\n this._collidableFrontDirection.normalize();\r\n }\r\n }\r\n\r\n /**\r\n * Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'\r\n */\r\n public get collidableFrontDirection() {\r\n if (this._collisionMesh) {\r\n // Update the front direction to reflect any rotations of the collision mesh\r\n const transformedDirection = TmpVectors.Vector3[0];\r\n Vector3.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), transformedDirection);\r\n\r\n return transformedDirection.normalize();\r\n }\r\n\r\n return this._collidableFrontDirection;\r\n }\r\n\r\n /**\r\n * Sets the mesh used for testing input collision\r\n * @param collisionMesh the new collision mesh for the button\r\n */\r\n public set collisionMesh(collisionMesh: Mesh) {\r\n if (this._collisionMesh) {\r\n this._collisionMesh.dispose();\r\n }\r\n\r\n // parent the mesh to sync transforms\r\n if (!collisionMesh.parent && this.mesh) {\r\n collisionMesh.setParent(this.mesh);\r\n }\r\n\r\n this._collisionMesh = collisionMesh;\r\n this._injectGUI3DReservedDataStore(this._collisionMesh).control = this;\r\n this._collisionMesh.isNearPickable = true;\r\n\r\n this.collidableFrontDirection = collisionMesh.forward;\r\n }\r\n\r\n // Returns true if the collidable is in front of the button, or if the button has no front direction\r\n private _isInteractionInFrontOfButton(collidablePos: Vector3) {\r\n return this._getInteractionHeight(collidablePos, this._collisionMesh.getAbsolutePosition()) > 0;\r\n }\r\n\r\n // Returns true if the collidable is in front of the button, or if the button has no front direction\r\n protected _getInteractionHeight(interactionPos: Vector3, basePos: Vector3) {\r\n const frontDir = this.collidableFrontDirection;\r\n if (frontDir.length() === 0) {\r\n // The button has no front, just return the distance to the base\r\n return Vector3.Distance(interactionPos, basePos);\r\n }\r\n const d = Vector3.Dot(basePos, frontDir);\r\n const abc = Vector3.Dot(interactionPos, frontDir);\r\n\r\n return abc - d;\r\n }\r\n\r\n /** @hidden */\r\n public _generatePointerEventType(providedType: number, nearMeshPosition: Vector3, activeInteractionCount: number): number {\r\n if (providedType === PointerEventTypes.POINTERDOWN) {\r\n if (!this._isInteractionInFrontOfButton(nearMeshPosition)) {\r\n // Near interaction mesh is behind the button, don't send a pointer down\r\n return PointerEventTypes.POINTERMOVE;\r\n }\r\n else {\r\n this._isNearPressed = true;\r\n }\r\n }\r\n if (providedType === PointerEventTypes.POINTERUP) {\r\n if (activeInteractionCount == 0) {\r\n // We get the release for the down we swallowed earlier, swallow as well\r\n return PointerEventTypes.POINTERMOVE;\r\n }\r\n else {\r\n this._isNearPressed = false;\r\n }\r\n }\r\n\r\n return providedType;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TouchButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n return super._createNode(scene);\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose();\r\n\r\n if (this._collisionMesh) {\r\n this._collisionMesh.dispose();\r\n }\r\n }\r\n}"]}
@@ -0,0 +1,100 @@
1
+ import { Nullable } from "@babylonjs/core/types";
2
+ import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial";
3
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
4
+ import { Mesh } from "@babylonjs/core/Meshes/mesh";
5
+ import { Scene } from "@babylonjs/core/scene";
6
+ import { FluentButtonMaterial } from "../materials/fluentButton/fluentButtonMaterial";
7
+ import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture";
8
+ import { TouchButton3D } from "./touchButton3D";
9
+ /**
10
+ * Class used to create a holographic button in 3D
11
+ * @since 5.0.0
12
+ */
13
+ export declare class TouchHolographicButton extends TouchButton3D {
14
+ /**
15
+ * Base Url for the button model.
16
+ */
17
+ static MODEL_BASE_URL: string;
18
+ /**
19
+ * File name for the button model.
20
+ */
21
+ static MODEL_FILENAME: string;
22
+ private _backPlate;
23
+ private _textPlate;
24
+ private _frontPlate;
25
+ private _text;
26
+ private _imageUrl;
27
+ private _shareMaterials;
28
+ private _isBackplateVisible;
29
+ private _frontMaterial;
30
+ private _backMaterial;
31
+ private _plateMaterial;
32
+ private _pickedPointObserver;
33
+ private _pointerHoverObserver;
34
+ private _frontPlateDepth;
35
+ private _backPlateDepth;
36
+ private _tooltipFade;
37
+ private _tooltipTextBlock;
38
+ private _tooltipTexture;
39
+ private _tooltipMesh;
40
+ private _tooltipHoverObserver;
41
+ private _tooltipOutObserver;
42
+ private _disposeTooltip;
43
+ /**
44
+ * Rendering ground id of all the mesh in the button
45
+ */
46
+ set renderingGroupId(id: number);
47
+ get renderingGroupId(): number;
48
+ /**
49
+ * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)
50
+ */
51
+ set tooltipText(text: Nullable<string>);
52
+ get tooltipText(): Nullable<string>;
53
+ /**
54
+ * Gets or sets text for the button
55
+ */
56
+ get text(): string;
57
+ set text(value: string);
58
+ /**
59
+ * Gets or sets the image url for the button
60
+ */
61
+ get imageUrl(): string;
62
+ set imageUrl(value: string);
63
+ /**
64
+ * Gets the back material used by this button
65
+ */
66
+ get backMaterial(): StandardMaterial;
67
+ /**
68
+ * Gets the front material used by this button
69
+ */
70
+ get frontMaterial(): FluentButtonMaterial;
71
+ /**
72
+ * Gets the plate material used by this button
73
+ */
74
+ get plateMaterial(): StandardMaterial;
75
+ /**
76
+ * Gets a boolean indicating if this button shares its material with other HolographicButtons
77
+ */
78
+ get shareMaterials(): boolean;
79
+ /**
80
+ * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement
81
+ */
82
+ set isBackplateVisible(isVisible: boolean);
83
+ /**
84
+ * Creates a new button
85
+ * @param name defines the control name
86
+ */
87
+ constructor(name?: string, shareMaterials?: boolean);
88
+ protected _getTypeName(): string;
89
+ private _rebuildContent;
90
+ protected _createNode(scene: Scene): TransformNode;
91
+ protected _applyFacade(facadeTexture: AdvancedDynamicTexture): void;
92
+ private _createBackMaterial;
93
+ private _createFrontMaterial;
94
+ private _createPlateMaterial;
95
+ protected _affectMaterial(mesh: Mesh): void;
96
+ /**
97
+ * Releases all associated resources
98
+ */
99
+ dispose(): void;
100
+ }
@@ -0,0 +1,408 @@
1
+ import { __extends } from "tslib";
2
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
3
+ import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js";
4
+ import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
5
+ import { CreatePlane } from "@babylonjs/core/Meshes/Builders/planeBuilder.js";
6
+ import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
7
+ import { FadeInOutBehavior } from "@babylonjs/core/Behaviors/Meshes/fadeInOutBehavior.js";
8
+ import { FluentButtonMaterial } from "../materials/fluentButton/fluentButtonMaterial.js";
9
+ import { StackPanel } from "../../2D/controls/stackPanel.js";
10
+ import { Image } from "../../2D/controls/image.js";
11
+ import { TextBlock } from "../../2D/controls/textBlock.js";
12
+ import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture.js";
13
+ import { Color3 } from "@babylonjs/core/Maths/math.color.js";
14
+ import { TouchButton3D } from "./touchButton3D.js";
15
+ import { SceneLoader } from "@babylonjs/core/Loading/sceneLoader.js";
16
+ import { DomManagement } from "@babylonjs/core/Misc/domManagement.js";
17
+ import { Scalar } from "@babylonjs/core/Maths/math.scalar.js";
18
+ /**
19
+ * Class used to create a holographic button in 3D
20
+ * @since 5.0.0
21
+ */
22
+ var TouchHolographicButton = /** @class */ (function (_super) {
23
+ __extends(TouchHolographicButton, _super);
24
+ /**
25
+ * Creates a new button
26
+ * @param name defines the control name
27
+ */
28
+ function TouchHolographicButton(name, shareMaterials) {
29
+ if (shareMaterials === void 0) { shareMaterials = true; }
30
+ var _this = _super.call(this, name) || this;
31
+ _this._shareMaterials = true;
32
+ _this._isBackplateVisible = true;
33
+ _this._frontPlateDepth = 0.5;
34
+ _this._backPlateDepth = 0.04;
35
+ _this._shareMaterials = shareMaterials;
36
+ _this.pointerEnterAnimation = function () {
37
+ _this._frontMaterial.leftBlobEnable = true;
38
+ _this._frontMaterial.rightBlobEnable = true;
39
+ };
40
+ _this.pointerOutAnimation = function () {
41
+ _this._frontMaterial.leftBlobEnable = false;
42
+ _this._frontMaterial.rightBlobEnable = false;
43
+ };
44
+ _this.pointerDownAnimation = function () {
45
+ if (_this._frontPlate && !_this._isNearPressed) {
46
+ _this._frontPlate.scaling.z = _this._frontPlateDepth * 0.2;
47
+ _this._frontPlate.position.z = (_this._frontPlateDepth - (0.2 * _this._frontPlateDepth)) / 2;
48
+ _this._textPlate.position.z = -(_this._backPlateDepth + (0.2 * _this._frontPlateDepth)) / 2;
49
+ }
50
+ };
51
+ _this.pointerUpAnimation = function () {
52
+ if (_this._frontPlate) {
53
+ _this._frontPlate.scaling.z = _this._frontPlateDepth;
54
+ _this._frontPlate.position.z = (_this._frontPlateDepth - _this._frontPlateDepth) / 2;
55
+ _this._textPlate.position.z = -(_this._backPlateDepth + _this._frontPlateDepth) / 2;
56
+ }
57
+ };
58
+ _this.onPointerMoveObservable.add(function (position) {
59
+ if (_this._frontPlate && _this._isNearPressed) {
60
+ var scale = Vector3.Zero();
61
+ if (_this._backPlate.getWorldMatrix().decompose(scale, undefined, undefined)) {
62
+ var interactionHeight = _this._getInteractionHeight(position, _this._backPlate.position) / scale.z;
63
+ interactionHeight = Scalar.Clamp(interactionHeight - (_this._backPlateDepth / 2), 0.2 * _this._frontPlateDepth, _this._frontPlateDepth);
64
+ _this._frontPlate.scaling.z = interactionHeight;
65
+ _this._frontPlate.position.z = (_this._frontPlateDepth - interactionHeight) / 2;
66
+ _this._textPlate.position.z = -(_this._backPlateDepth + interactionHeight) / 2;
67
+ }
68
+ }
69
+ });
70
+ _this._pointerHoverObserver = _this.onPointerMoveObservable.add(function (hoverPosition) {
71
+ _this._frontMaterial.globalLeftIndexTipPosition = hoverPosition;
72
+ });
73
+ return _this;
74
+ }
75
+ TouchHolographicButton.prototype._disposeTooltip = function () {
76
+ this._tooltipFade = null;
77
+ if (this._tooltipTextBlock) {
78
+ this._tooltipTextBlock.dispose();
79
+ }
80
+ if (this._tooltipTexture) {
81
+ this._tooltipTexture.dispose();
82
+ }
83
+ if (this._tooltipMesh) {
84
+ this._tooltipMesh.dispose();
85
+ }
86
+ this.onPointerEnterObservable.remove(this._tooltipHoverObserver);
87
+ this.onPointerOutObservable.remove(this._tooltipOutObserver);
88
+ };
89
+ Object.defineProperty(TouchHolographicButton.prototype, "renderingGroupId", {
90
+ get: function () {
91
+ return this._backPlate.renderingGroupId;
92
+ },
93
+ /**
94
+ * Rendering ground id of all the mesh in the button
95
+ */
96
+ set: function (id) {
97
+ this._backPlate.renderingGroupId = id;
98
+ this._textPlate.renderingGroupId = id;
99
+ this._frontPlate.renderingGroupId = id;
100
+ if (this._tooltipMesh) {
101
+ this._tooltipMesh.renderingGroupId = id;
102
+ }
103
+ },
104
+ enumerable: false,
105
+ configurable: true
106
+ });
107
+ Object.defineProperty(TouchHolographicButton.prototype, "tooltipText", {
108
+ get: function () {
109
+ if (this._tooltipTextBlock) {
110
+ return this._tooltipTextBlock.text;
111
+ }
112
+ return null;
113
+ },
114
+ /**
115
+ * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)
116
+ */
117
+ set: function (text) {
118
+ var _this = this;
119
+ if (!text) {
120
+ this._disposeTooltip();
121
+ return;
122
+ }
123
+ if (!this._tooltipFade) {
124
+ // Create tooltip with mesh and text
125
+ this._tooltipMesh = CreatePlane("", { size: 1 }, this._backPlate._scene);
126
+ var tooltipBackground = CreatePlane("", { size: 1, sideOrientation: Mesh.DOUBLESIDE }, this._backPlate._scene);
127
+ var mat = new StandardMaterial("", this._backPlate._scene);
128
+ mat.diffuseColor = Color3.FromHexString("#212121");
129
+ tooltipBackground.material = mat;
130
+ tooltipBackground.isPickable = false;
131
+ this._tooltipMesh.addChild(tooltipBackground);
132
+ tooltipBackground.position.z = 0.05;
133
+ this._tooltipMesh.scaling.y = 1 / 3;
134
+ this._tooltipMesh.position.y = 0.7;
135
+ this._tooltipMesh.position.z = -0.15;
136
+ this._tooltipMesh.isPickable = false;
137
+ this._tooltipMesh.parent = this._backPlate;
138
+ // Create text texture for the tooltip
139
+ this._tooltipTexture = AdvancedDynamicTexture.CreateForMesh(this._tooltipMesh);
140
+ this._tooltipTextBlock = new TextBlock();
141
+ this._tooltipTextBlock.scaleY = 3;
142
+ this._tooltipTextBlock.color = "white";
143
+ this._tooltipTextBlock.fontSize = 130;
144
+ this._tooltipTexture.addControl(this._tooltipTextBlock);
145
+ // Add hover action to tooltip
146
+ this._tooltipFade = new FadeInOutBehavior();
147
+ this._tooltipFade.delay = 500;
148
+ this._tooltipMesh.addBehavior(this._tooltipFade);
149
+ this._tooltipHoverObserver = this.onPointerEnterObservable.add(function () {
150
+ if (_this._tooltipFade) {
151
+ _this._tooltipFade.fadeIn(true);
152
+ }
153
+ });
154
+ this._tooltipOutObserver = this.onPointerOutObservable.add(function () {
155
+ if (_this._tooltipFade) {
156
+ _this._tooltipFade.fadeIn(false);
157
+ }
158
+ });
159
+ }
160
+ if (this._tooltipTextBlock) {
161
+ this._tooltipTextBlock.text = text;
162
+ }
163
+ },
164
+ enumerable: false,
165
+ configurable: true
166
+ });
167
+ Object.defineProperty(TouchHolographicButton.prototype, "text", {
168
+ /**
169
+ * Gets or sets text for the button
170
+ */
171
+ get: function () {
172
+ return this._text;
173
+ },
174
+ set: function (value) {
175
+ if (this._text === value) {
176
+ return;
177
+ }
178
+ this._text = value;
179
+ this._rebuildContent();
180
+ },
181
+ enumerable: false,
182
+ configurable: true
183
+ });
184
+ Object.defineProperty(TouchHolographicButton.prototype, "imageUrl", {
185
+ /**
186
+ * Gets or sets the image url for the button
187
+ */
188
+ get: function () {
189
+ return this._imageUrl;
190
+ },
191
+ set: function (value) {
192
+ if (this._imageUrl === value) {
193
+ return;
194
+ }
195
+ this._imageUrl = value;
196
+ this._rebuildContent();
197
+ },
198
+ enumerable: false,
199
+ configurable: true
200
+ });
201
+ Object.defineProperty(TouchHolographicButton.prototype, "backMaterial", {
202
+ /**
203
+ * Gets the back material used by this button
204
+ */
205
+ get: function () {
206
+ return this._backMaterial;
207
+ },
208
+ enumerable: false,
209
+ configurable: true
210
+ });
211
+ Object.defineProperty(TouchHolographicButton.prototype, "frontMaterial", {
212
+ /**
213
+ * Gets the front material used by this button
214
+ */
215
+ get: function () {
216
+ return this._frontMaterial;
217
+ },
218
+ enumerable: false,
219
+ configurable: true
220
+ });
221
+ Object.defineProperty(TouchHolographicButton.prototype, "plateMaterial", {
222
+ /**
223
+ * Gets the plate material used by this button
224
+ */
225
+ get: function () {
226
+ return this._plateMaterial;
227
+ },
228
+ enumerable: false,
229
+ configurable: true
230
+ });
231
+ Object.defineProperty(TouchHolographicButton.prototype, "shareMaterials", {
232
+ /**
233
+ * Gets a boolean indicating if this button shares its material with other HolographicButtons
234
+ */
235
+ get: function () {
236
+ return this._shareMaterials;
237
+ },
238
+ enumerable: false,
239
+ configurable: true
240
+ });
241
+ Object.defineProperty(TouchHolographicButton.prototype, "isBackplateVisible", {
242
+ /**
243
+ * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement
244
+ */
245
+ set: function (isVisible) {
246
+ if (this.mesh && !!this._backMaterial) {
247
+ if (isVisible && !this._isBackplateVisible) {
248
+ this._backPlate.visibility = 1;
249
+ }
250
+ else if (!isVisible && this._isBackplateVisible) {
251
+ this._backPlate.visibility = 0;
252
+ }
253
+ }
254
+ this._isBackplateVisible = isVisible;
255
+ },
256
+ enumerable: false,
257
+ configurable: true
258
+ });
259
+ TouchHolographicButton.prototype._getTypeName = function () {
260
+ return "TouchHolographicButton";
261
+ };
262
+ TouchHolographicButton.prototype._rebuildContent = function () {
263
+ this._disposeFacadeTexture();
264
+ var panel = new StackPanel();
265
+ panel.isVertical = true;
266
+ if (DomManagement.IsDocumentAvailable() && !!document.createElement) {
267
+ if (this._imageUrl) {
268
+ var image = new Image();
269
+ image.source = this._imageUrl;
270
+ image.paddingTop = "40px";
271
+ image.height = "180px";
272
+ image.width = "100px";
273
+ image.paddingBottom = "40px";
274
+ panel.addControl(image);
275
+ }
276
+ }
277
+ if (this._text) {
278
+ var text = new TextBlock();
279
+ text.text = this._text;
280
+ text.color = "white";
281
+ text.height = "30px";
282
+ text.fontSize = 24;
283
+ panel.addControl(text);
284
+ }
285
+ this.content = panel;
286
+ };
287
+ // Mesh association
288
+ TouchHolographicButton.prototype._createNode = function (scene) {
289
+ var _this = this;
290
+ var _a;
291
+ this.name = (_a = this.name) !== null && _a !== void 0 ? _a : "TouchHolographicButton";
292
+ var collisionMesh = CreateBox(this.name + "_collisionMesh", {
293
+ width: 1.0,
294
+ height: 1.0,
295
+ depth: this._frontPlateDepth,
296
+ }, scene);
297
+ collisionMesh.isPickable = true;
298
+ collisionMesh.isNearPickable = true;
299
+ collisionMesh.visibility = 0;
300
+ collisionMesh.position.z = -this._frontPlateDepth / 2;
301
+ SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MODEL_BASE_URL, TouchHolographicButton.MODEL_FILENAME, scene)
302
+ .then(function (result) {
303
+ var importedFrontPlate = result.meshes[1];
304
+ importedFrontPlate.name = _this.name + "_frontPlate";
305
+ importedFrontPlate.isPickable = false;
306
+ importedFrontPlate.scaling.z = _this._frontPlateDepth;
307
+ importedFrontPlate.parent = collisionMesh;
308
+ if (!!_this._frontMaterial) {
309
+ importedFrontPlate.material = _this._frontMaterial;
310
+ }
311
+ _this._frontPlate = importedFrontPlate;
312
+ });
313
+ this._backPlate = CreateBox(this.name + "_backPlate", {
314
+ width: 1.0,
315
+ height: 1.0,
316
+ depth: this._backPlateDepth,
317
+ }, scene);
318
+ this._backPlate.position.z = this._backPlateDepth / 2;
319
+ this._backPlate.isPickable = false;
320
+ this._textPlate = _super.prototype._createNode.call(this, scene);
321
+ this._textPlate.name = this.name + "_textPlate";
322
+ this._textPlate.isPickable = false;
323
+ this._textPlate.position.z = -this._frontPlateDepth / 2;
324
+ this._backPlate.addChild(collisionMesh);
325
+ this._backPlate.addChild(this._textPlate);
326
+ this.collisionMesh = collisionMesh;
327
+ this.collidableFrontDirection = this._backPlate.forward.negate(); // Mesh is facing the wrong way
328
+ return this._backPlate;
329
+ };
330
+ TouchHolographicButton.prototype._applyFacade = function (facadeTexture) {
331
+ this._plateMaterial.emissiveTexture = facadeTexture;
332
+ this._plateMaterial.opacityTexture = facadeTexture;
333
+ this._plateMaterial.diffuseColor = new Color3(0.4, 0.4, 0.4);
334
+ };
335
+ TouchHolographicButton.prototype._createBackMaterial = function (mesh) {
336
+ this._backMaterial = new StandardMaterial(this.name + "Back Material", mesh.getScene());
337
+ this._backMaterial.diffuseColor = new Color3(0.5, 0.5, 0.5);
338
+ };
339
+ TouchHolographicButton.prototype._createFrontMaterial = function (mesh) {
340
+ this._frontMaterial = new FluentButtonMaterial(this.name + "Front Material", mesh.getScene());
341
+ };
342
+ TouchHolographicButton.prototype._createPlateMaterial = function (mesh) {
343
+ this._plateMaterial = new StandardMaterial(this.name + "Plate Material", mesh.getScene());
344
+ this._plateMaterial.specularColor = Color3.Black();
345
+ };
346
+ TouchHolographicButton.prototype._affectMaterial = function (mesh) {
347
+ if (this._shareMaterials) {
348
+ // Back
349
+ if (!this._host._touchSharedMaterials["backFluentMaterial"]) {
350
+ this._createBackMaterial(mesh);
351
+ this._host._touchSharedMaterials["backFluentMaterial"] = this._backMaterial;
352
+ }
353
+ else {
354
+ this._backMaterial = this._host._touchSharedMaterials["backFluentMaterial"];
355
+ }
356
+ // Front
357
+ if (!this._host._touchSharedMaterials["frontFluentMaterial"]) {
358
+ this._createFrontMaterial(mesh);
359
+ this._host._touchSharedMaterials["frontFluentMaterial"] = this._frontMaterial;
360
+ }
361
+ else {
362
+ this._frontMaterial = this._host._touchSharedMaterials["frontFluentMaterial"];
363
+ }
364
+ }
365
+ else {
366
+ this._createBackMaterial(mesh);
367
+ this._createFrontMaterial(mesh);
368
+ }
369
+ this._createPlateMaterial(mesh);
370
+ this._backPlate.material = this._backMaterial;
371
+ this._textPlate.material = this._plateMaterial;
372
+ if (!this._isBackplateVisible) {
373
+ this._backPlate.visibility = 0;
374
+ }
375
+ if (!!this._frontPlate) {
376
+ this._frontPlate.material = this._frontMaterial;
377
+ }
378
+ this._rebuildContent();
379
+ };
380
+ /**
381
+ * Releases all associated resources
382
+ */
383
+ TouchHolographicButton.prototype.dispose = function () {
384
+ _super.prototype.dispose.call(this); // will dispose main mesh ie. back plate
385
+ this._disposeTooltip();
386
+ this.onPointerMoveObservable.remove(this._pointerHoverObserver);
387
+ if (!this.shareMaterials) {
388
+ this._backMaterial.dispose();
389
+ this._frontMaterial.dispose();
390
+ this._plateMaterial.dispose();
391
+ if (this._pickedPointObserver) {
392
+ this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
393
+ this._pickedPointObserver = null;
394
+ }
395
+ }
396
+ };
397
+ /**
398
+ * Base Url for the button model.
399
+ */
400
+ TouchHolographicButton.MODEL_BASE_URL = "https://assets.babylonjs.com/meshes/MRTK/";
401
+ /**
402
+ * File name for the button model.
403
+ */
404
+ TouchHolographicButton.MODEL_FILENAME = "mrtk-fluent-button.glb";
405
+ return TouchHolographicButton;
406
+ }(TouchButton3D));
407
+ export { TouchHolographicButton };
408
+ //# sourceMappingURL=touchHolographicButton.js.map