@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.
- package/2D/adtInstrumentation.js +1 -1
- package/2D/advancedDynamicTexture.d.ts +165 -125
- package/2D/advancedDynamicTexture.js +342 -181
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/button.js +10 -10
- package/2D/controls/button.js.map +1 -1
- package/2D/controls/checkbox.d.ts +2 -1
- package/2D/controls/checkbox.js +10 -8
- package/2D/controls/checkbox.js.map +1 -1
- package/2D/controls/colorpicker.d.ts +4 -3
- package/2D/controls/colorpicker.js +40 -23
- package/2D/controls/colorpicker.js.map +1 -1
- package/2D/controls/container.d.ts +16 -5
- package/2D/controls/container.js +93 -15
- package/2D/controls/container.js.map +1 -1
- package/2D/controls/control.d.ts +99 -44
- package/2D/controls/control.js +267 -129
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/displayGrid.d.ts +2 -1
- package/2D/controls/displayGrid.js +6 -6
- package/2D/controls/displayGrid.js.map +1 -1
- package/2D/controls/ellipse.d.ts +5 -3
- package/2D/controls/ellipse.js +9 -5
- package/2D/controls/ellipse.js.map +1 -1
- package/2D/controls/focusableButton.d.ts +4 -2
- package/2D/controls/focusableButton.js +9 -6
- package/2D/controls/focusableButton.js.map +1 -1
- package/2D/controls/focusableControl.d.ts +2 -1
- package/2D/controls/focusableControl.js.map +1 -1
- package/2D/controls/grid.d.ts +13 -2
- package/2D/controls/grid.js +108 -24
- package/2D/controls/grid.js.map +1 -1
- package/2D/controls/image.d.ts +20 -12
- package/2D/controls/image.js +154 -111
- package/2D/controls/image.js.map +1 -1
- package/2D/controls/index.js +29 -29
- package/2D/controls/inputPassword.js +4 -4
- package/2D/controls/inputPassword.js.map +1 -1
- package/2D/controls/inputText.d.ts +6 -4
- package/2D/controls/inputText.js +40 -14
- package/2D/controls/inputText.js.map +1 -1
- package/2D/controls/line.d.ts +3 -2
- package/2D/controls/line.js +8 -8
- package/2D/controls/line.js.map +1 -1
- package/2D/controls/multiLine.d.ts +4 -3
- package/2D/controls/multiLine.js +6 -6
- package/2D/controls/multiLine.js.map +1 -1
- package/2D/controls/radioButton.d.ts +2 -1
- package/2D/controls/radioButton.js +10 -7
- package/2D/controls/radioButton.js.map +1 -1
- package/2D/controls/rectangle.d.ts +8 -3
- package/2D/controls/rectangle.js +21 -5
- package/2D/controls/rectangle.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -2
- package/2D/controls/scrollViewers/scrollViewer.js +9 -9
- package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +4 -3
- package/2D/controls/scrollViewers/scrollViewerWindow.js +4 -4
- package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
- package/2D/controls/selector.js +8 -8
- package/2D/controls/selector.js.map +1 -1
- package/2D/controls/sliders/baseSlider.d.ts +1 -1
- package/2D/controls/sliders/baseSlider.js +12 -10
- package/2D/controls/sliders/baseSlider.js.map +1 -1
- package/2D/controls/sliders/imageBasedSlider.d.ts +10 -1
- package/2D/controls/sliders/imageBasedSlider.js +29 -5
- package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
- package/2D/controls/sliders/imageScrollBar.d.ts +2 -1
- package/2D/controls/sliders/imageScrollBar.js +3 -3
- package/2D/controls/sliders/imageScrollBar.js.map +1 -1
- package/2D/controls/sliders/scrollBar.d.ts +2 -1
- package/2D/controls/sliders/scrollBar.js +3 -3
- package/2D/controls/sliders/scrollBar.js.map +1 -1
- package/2D/controls/sliders/slider.d.ts +2 -1
- package/2D/controls/sliders/slider.js +4 -4
- package/2D/controls/sliders/slider.js.map +1 -1
- package/2D/controls/stackPanel.d.ts +10 -3
- package/2D/controls/stackPanel.js +35 -13
- package/2D/controls/stackPanel.js.map +1 -1
- package/2D/controls/statics.js +3 -3
- package/2D/controls/statics.js.map +1 -1
- package/2D/controls/textBlock.d.ts +9 -8
- package/2D/controls/textBlock.js +30 -20
- package/2D/controls/textBlock.js.map +1 -1
- package/2D/controls/textWrapper.js +2 -2
- package/2D/controls/textWrapper.js.map +1 -1
- package/2D/controls/toggleButton.d.ts +1 -13
- package/2D/controls/toggleButton.js +29 -38
- package/2D/controls/toggleButton.js.map +1 -1
- package/2D/controls/virtualKeyboard.js +5 -5
- package/2D/controls/virtualKeyboard.js.map +1 -1
- package/2D/index.d.ts +1 -1
- package/2D/index.js +9 -9
- package/2D/index.js.map +1 -1
- package/2D/math2D.js +2 -2
- package/2D/measure.js +1 -1
- package/2D/measure.js.map +1 -1
- package/2D/multiLinePoint.js +3 -3
- package/2D/style.js +2 -2
- package/2D/valueAndUnit.d.ts +21 -6
- package/2D/valueAndUnit.js +57 -13
- package/2D/valueAndUnit.js.map +1 -1
- package/2D/xmlLoader.d.ts +17 -3
- package/2D/xmlLoader.js +54 -15
- package/2D/xmlLoader.js.map +1 -1
- package/3D/behaviors/defaultBehavior.d.ts +73 -0
- package/3D/behaviors/defaultBehavior.js +122 -0
- package/3D/behaviors/defaultBehavior.js.map +1 -0
- package/3D/controls/abstractButton3D.d.ts +2 -2
- package/3D/controls/abstractButton3D.js +3 -3
- package/3D/controls/abstractButton3D.js.map +1 -1
- package/3D/controls/button3D.d.ts +0 -24
- package/3D/controls/button3D.js +7 -83
- package/3D/controls/button3D.js.map +1 -1
- package/3D/controls/container3D.js +2 -2
- package/3D/controls/contentDisplay3D.d.ts +30 -0
- package/3D/controls/contentDisplay3D.js +79 -0
- package/3D/controls/contentDisplay3D.js.map +1 -0
- package/3D/controls/control3D.d.ts +10 -7
- package/3D/controls/control3D.js +42 -28
- package/3D/controls/control3D.js.map +1 -1
- package/3D/controls/cylinderPanel.js +5 -5
- package/3D/controls/handMenu.d.ts +28 -0
- package/3D/controls/handMenu.js +48 -0
- package/3D/controls/handMenu.js.map +1 -0
- package/3D/controls/holographicBackplate.d.ts +48 -0
- package/3D/controls/holographicBackplate.js +121 -0
- package/3D/controls/holographicBackplate.js.map +1 -0
- package/3D/controls/holographicButton.d.ts +1 -1
- package/3D/controls/holographicButton.js +27 -24
- package/3D/controls/holographicButton.js.map +1 -1
- package/3D/controls/holographicSlate.d.ts +118 -0
- package/3D/controls/holographicSlate.js +360 -0
- package/3D/controls/holographicSlate.js.map +1 -0
- package/3D/controls/index.d.ts +10 -0
- package/3D/controls/index.js +22 -12
- package/3D/controls/index.js.map +1 -1
- package/3D/controls/meshButton3D.js +2 -2
- package/3D/controls/meshButton3D.js.map +1 -1
- package/3D/controls/nearMenu.d.ts +45 -0
- package/3D/controls/nearMenu.js +111 -0
- package/3D/controls/nearMenu.js.map +1 -0
- package/3D/controls/planePanel.js +3 -3
- package/3D/controls/scatterPanel.js +4 -4
- package/3D/controls/slider3D.d.ts +80 -0
- package/3D/controls/slider3D.js +268 -0
- package/3D/controls/slider3D.js.map +1 -0
- package/3D/controls/spherePanel.js +5 -5
- package/3D/controls/stackPanel3D.js +3 -3
- package/3D/controls/touchButton3D.d.ts +43 -0
- package/3D/controls/touchButton3D.js +133 -0
- package/3D/controls/touchButton3D.js.map +1 -0
- package/3D/controls/touchHolographicButton.d.ts +100 -0
- package/3D/controls/touchHolographicButton.js +408 -0
- package/3D/controls/touchHolographicButton.js.map +1 -0
- package/3D/controls/touchHolographicMenu.d.ts +61 -0
- package/3D/controls/touchHolographicMenu.js +149 -0
- package/3D/controls/touchHolographicMenu.js.map +1 -0
- package/3D/controls/touchMeshButton3D.d.ts +22 -0
- package/3D/controls/touchMeshButton3D.js +63 -0
- package/3D/controls/touchMeshButton3D.js.map +1 -0
- package/3D/controls/touchToggleButton3D.d.ts +35 -0
- package/3D/controls/touchToggleButton3D.js +60 -0
- package/3D/controls/touchToggleButton3D.js.map +1 -0
- package/3D/controls/volumeBasedPanel.d.ts +1 -1
- package/3D/controls/volumeBasedPanel.js +5 -5
- package/3D/controls/volumeBasedPanel.js.map +1 -1
- package/3D/gizmos/gizmoHandle.d.ts +108 -0
- package/3D/gizmos/gizmoHandle.js +210 -0
- package/3D/gizmos/gizmoHandle.js.map +1 -0
- package/3D/gizmos/index.d.ts +2 -0
- package/3D/gizmos/index.js +3 -0
- package/3D/gizmos/index.js.map +1 -0
- package/3D/gizmos/slateGizmo.d.ts +59 -0
- package/3D/gizmos/slateGizmo.js +364 -0
- package/3D/gizmos/slateGizmo.js.map +1 -0
- package/3D/gui3DManager.d.ts +19 -0
- package/3D/gui3DManager.js +73 -13
- package/3D/gui3DManager.js.map +1 -1
- package/3D/index.d.ts +3 -2
- package/3D/index.js +5 -4
- package/3D/index.js.map +1 -1
- package/3D/materials/fluent/fluentMaterial.d.ts +90 -0
- package/3D/materials/fluent/fluentMaterial.js +282 -0
- package/3D/materials/fluent/fluentMaterial.js.map +1 -0
- package/3D/materials/fluent/index.d.ts +1 -0
- package/3D/materials/fluent/index.js +2 -0
- package/3D/materials/fluent/index.js.map +1 -0
- package/3D/materials/{shaders → fluent/shaders}/fluent.fragment.d.ts +0 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js +7 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
- package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.d.ts +0 -0
- package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.js +2 -2
- package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +435 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
- package/3D/materials/fluentBackplate/index.d.ts +1 -0
- package/3D/materials/fluentBackplate/index.js +2 -0
- package/3D/materials/fluentBackplate/index.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +7 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +7 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js +538 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
- package/3D/materials/fluentButton/index.d.ts +1 -0
- package/3D/materials/fluentButton/index.js +2 -0
- package/3D/materials/fluentButton/index.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +7 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +7 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
- package/3D/materials/fluentMaterial.d.ts +2 -88
- package/3D/materials/fluentMaterial.js +2 -277
- package/3D/materials/fluentMaterial.js.map +1 -1
- package/3D/materials/handle/handleMaterial.d.ts +68 -0
- package/3D/materials/handle/handleMaterial.js +127 -0
- package/3D/materials/handle/handleMaterial.js.map +1 -0
- package/3D/materials/handle/index.d.ts +1 -0
- package/3D/materials/handle/index.js +2 -0
- package/3D/materials/handle/index.js.map +1 -0
- package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.fragment.js +7 -0
- package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
- package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.vertex.js +7 -0
- package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
- package/3D/materials/index.d.ts +5 -1
- package/3D/materials/index.js +5 -1
- package/3D/materials/index.js.map +1 -1
- package/3D/materials/mrdl/index.d.ts +3 -0
- package/3D/materials/mrdl/index.js +4 -0
- package/3D/materials/mrdl/index.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +410 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +787 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +787 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
- package/3D/vector3WithInfo.js +1 -1
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/legacy/legacy.js +2 -2
- package/package.json +126 -9
- package/3D/materials/shaders/fluent.fragment.js +0 -7
- package/3D/materials/shaders/fluent.fragment.js.map +0 -1
- 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
|