@babylonjs/gui 5.0.0-rc.5 → 5.0.0-rc.9
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.d.ts +52 -52
- package/2D/adtInstrumentation.js +126 -126
- package/2D/advancedDynamicTexture.d.ts +448 -448
- package/2D/advancedDynamicTexture.js +1318 -1318
- package/2D/controls/button.d.ts +135 -135
- package/2D/controls/button.js +276 -276
- package/2D/controls/checkbox.d.ts +59 -59
- package/2D/controls/checkbox.js +188 -188
- package/2D/controls/colorpicker.d.ts +103 -103
- package/2D/controls/colorpicker.js +1417 -1417
- package/2D/controls/container.d.ts +175 -175
- package/2D/controls/container.js +570 -570
- package/2D/controls/control.d.ts +866 -866
- package/2D/controls/control.js +2433 -2433
- package/2D/controls/displayGrid.d.ts +53 -53
- package/2D/controls/displayGrid.js +245 -245
- package/2D/controls/ellipse.d.ts +21 -21
- package/2D/controls/ellipse.js +85 -85
- package/2D/controls/focusableButton.d.ts +59 -59
- package/2D/controls/focusableButton.js +99 -99
- package/2D/controls/focusableControl.d.ts +34 -34
- package/2D/controls/focusableControl.js +1 -1
- package/2D/controls/grid.d.ts +139 -139
- package/2D/controls/grid.js +529 -529
- package/2D/controls/image.d.ts +204 -204
- package/2D/controls/image.js +887 -887
- package/2D/controls/index.d.ts +29 -29
- package/2D/controls/index.js +29 -29
- package/2D/controls/inputPassword.d.ts +8 -8
- package/2D/controls/inputPassword.js +25 -25
- package/2D/controls/inputText.d.ts +201 -201
- package/2D/controls/inputText.js +1119 -1119
- package/2D/controls/line.d.ts +66 -66
- package/2D/controls/line.js +271 -271
- package/2D/controls/multiLine.d.ts +75 -75
- package/2D/controls/multiLine.js +262 -262
- package/2D/controls/radioButton.d.ts +49 -49
- package/2D/controls/radioButton.js +205 -205
- package/2D/controls/rectangle.d.ts +29 -29
- package/2D/controls/rectangle.js +150 -150
- package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -182
- package/2D/controls/scrollViewers/scrollViewer.js +677 -677
- package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -57
- package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -278
- package/2D/controls/selector.d.ts +263 -263
- package/2D/controls/selector.js +692 -692
- package/2D/controls/sliders/baseSlider.d.ts +82 -82
- package/2D/controls/sliders/baseSlider.js +347 -347
- package/2D/controls/sliders/imageBasedSlider.d.ts +49 -49
- package/2D/controls/sliders/imageBasedSlider.js +192 -192
- package/2D/controls/sliders/imageScrollBar.d.ts +65 -65
- package/2D/controls/sliders/imageScrollBar.js +263 -263
- package/2D/controls/sliders/scrollBar.d.ts +38 -38
- package/2D/controls/sliders/scrollBar.js +143 -143
- package/2D/controls/sliders/slider.d.ts +35 -35
- package/2D/controls/sliders/slider.js +271 -271
- package/2D/controls/stackPanel.d.ts +64 -64
- package/2D/controls/stackPanel.js +246 -246
- package/2D/controls/statics.d.ts +6 -6
- package/2D/controls/statics.js +49 -49
- package/2D/controls/textBlock.d.ts +175 -175
- package/2D/controls/textBlock.js +603 -603
- package/2D/controls/textWrapper.d.ts +13 -13
- package/2D/controls/textWrapper.js +101 -101
- package/2D/controls/toggleButton.d.ts +117 -117
- package/2D/controls/toggleButton.js +268 -268
- package/2D/controls/virtualKeyboard.d.ts +96 -96
- package/2D/controls/virtualKeyboard.js +256 -256
- package/2D/index.d.ts +9 -9
- package/2D/index.js +9 -9
- package/2D/math2D.d.ts +117 -117
- package/2D/math2D.js +221 -221
- package/2D/measure.d.ts +77 -77
- package/2D/measure.js +139 -139
- package/2D/multiLinePoint.d.ts +47 -47
- package/2D/multiLinePoint.js +127 -127
- package/2D/style.d.ts +46 -46
- package/2D/style.js +97 -97
- package/2D/valueAndUnit.d.ts +89 -89
- package/2D/valueAndUnit.js +226 -226
- package/2D/xmlLoader.d.ts +60 -60
- package/2D/xmlLoader.js +348 -348
- package/3D/behaviors/defaultBehavior.d.ts +73 -73
- package/3D/behaviors/defaultBehavior.js +121 -121
- package/3D/controls/abstractButton3D.d.ts +15 -15
- package/3D/controls/abstractButton3D.js +25 -25
- package/3D/controls/button3D.d.ts +30 -30
- package/3D/controls/button3D.js +93 -93
- package/3D/controls/container3D.d.ts +72 -72
- package/3D/controls/container3D.js +139 -139
- package/3D/controls/contentDisplay3D.d.ts +30 -30
- package/3D/controls/contentDisplay3D.js +79 -79
- package/3D/controls/control3D.d.ts +201 -201
- package/3D/controls/control3D.js +445 -445
- package/3D/controls/cylinderPanel.d.ts +17 -17
- package/3D/controls/cylinderPanel.js +66 -66
- package/3D/controls/handMenu.d.ts +28 -28
- package/3D/controls/handMenu.js +47 -47
- package/3D/controls/holographicBackplate.d.ts +49 -49
- package/3D/controls/holographicBackplate.js +120 -120
- package/3D/controls/holographicButton.d.ts +84 -84
- package/3D/controls/holographicButton.js +339 -339
- package/3D/controls/holographicSlate.d.ts +131 -131
- package/3D/controls/holographicSlate.js +431 -431
- package/3D/controls/index.d.ts +21 -21
- package/3D/controls/index.js +21 -21
- package/3D/controls/meshButton3D.d.ts +21 -21
- package/3D/controls/meshButton3D.js +62 -62
- package/3D/controls/nearMenu.d.ts +44 -44
- package/3D/controls/nearMenu.js +114 -114
- package/3D/controls/planePanel.d.ts +9 -9
- package/3D/controls/planePanel.js +36 -36
- package/3D/controls/scatterPanel.d.ts +18 -18
- package/3D/controls/scatterPanel.js +108 -108
- package/3D/controls/slider3D.d.ts +81 -81
- package/3D/controls/slider3D.js +268 -268
- package/3D/controls/spherePanel.d.ts +17 -17
- package/3D/controls/spherePanel.js +67 -67
- package/3D/controls/stackPanel3D.d.ts +22 -22
- package/3D/controls/stackPanel3D.js +107 -107
- package/3D/controls/touchButton3D.d.ts +80 -80
- package/3D/controls/touchButton3D.js +233 -233
- package/3D/controls/touchHolographicButton.d.ts +110 -110
- package/3D/controls/touchHolographicButton.js +445 -445
- package/3D/controls/touchHolographicMenu.d.ts +61 -61
- package/3D/controls/touchHolographicMenu.js +149 -149
- package/3D/controls/touchMeshButton3D.d.ts +21 -21
- package/3D/controls/touchMeshButton3D.js +62 -62
- package/3D/controls/volumeBasedPanel.d.ts +53 -53
- package/3D/controls/volumeBasedPanel.js +174 -174
- package/3D/gizmos/gizmoHandle.d.ts +108 -108
- package/3D/gizmos/gizmoHandle.js +209 -209
- package/3D/gizmos/index.d.ts +2 -2
- package/3D/gizmos/index.js +2 -2
- package/3D/gizmos/slateGizmo.d.ts +57 -57
- package/3D/gizmos/slateGizmo.js +369 -369
- package/3D/gui3DManager.d.ts +94 -94
- package/3D/gui3DManager.js +257 -257
- package/3D/index.d.ts +5 -5
- package/3D/index.js +5 -5
- package/3D/materials/fluent/fluentMaterial.d.ts +90 -90
- package/3D/materials/fluent/fluentMaterial.js +292 -292
- package/3D/materials/fluent/index.d.ts +1 -1
- package/3D/materials/fluent/index.js +1 -1
- package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
- package/3D/materials/fluent/shaders/fluent.fragment.js +8 -8
- package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
- package/3D/materials/fluent/shaders/fluent.vertex.js +8 -8
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -154
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -469
- package/3D/materials/fluentBackplate/index.d.ts +1 -1
- package/3D/materials/fluentBackplate/index.js +1 -1
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -8
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -8
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -189
- package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -539
- package/3D/materials/fluentButton/index.d.ts +1 -1
- package/3D/materials/fluentButton/index.js +1 -1
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -8
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -8
- package/3D/materials/fluentMaterial.d.ts +4 -4
- package/3D/materials/fluentMaterial.js +4 -4
- package/3D/materials/handle/handleMaterial.d.ts +68 -68
- package/3D/materials/handle/handleMaterial.js +126 -126
- package/3D/materials/handle/index.d.ts +1 -1
- package/3D/materials/handle/index.js +1 -1
- package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
- package/3D/materials/handle/shaders/handle.fragment.js +8 -8
- package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
- package/3D/materials/handle/shaders/handle.vertex.js +8 -8
- package/3D/materials/index.d.ts +5 -5
- package/3D/materials/index.js +5 -5
- package/3D/materials/mrdl/index.d.ts +3 -3
- package/3D/materials/mrdl/index.js +3 -3
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -147
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -436
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -333
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -851
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -333
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -851
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -8
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -8
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -8
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -8
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -8
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -8
- package/3D/vector3WithInfo.d.ts +16 -16
- package/3D/vector3WithInfo.js +23 -23
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/legacy/legacy.d.ts +1 -1
- package/legacy/legacy.js +13 -13
- package/package.json +2 -2
|
@@ -1,234 +1,234 @@
|
|
|
1
|
-
// Assumptions: absolute position of button mesh is inside the mesh
|
|
2
|
-
import { __extends } from "tslib";
|
|
3
|
-
import { Vector3, TmpVectors } from "@babylonjs/core/Maths/math.vector.js";
|
|
4
|
-
import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents.js";
|
|
5
|
-
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
6
|
-
import { Button3D } from "./button3D
|
|
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._interactionSurfaceHeight = 0;
|
|
21
|
-
_this._isToggleButton = false;
|
|
22
|
-
_this._toggleState = false;
|
|
23
|
-
_this._toggleButtonCallback = function () {
|
|
24
|
-
_this._onToggle(!_this._toggleState);
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* An event triggered when the button is toggled. Only fired if 'isToggleButton' is true
|
|
28
|
-
*/
|
|
29
|
-
_this.onToggleObservable = new Observable();
|
|
30
|
-
_this.collidableFrontDirection = Vector3.Zero();
|
|
31
|
-
if (collisionMesh) {
|
|
32
|
-
_this.collisionMesh = collisionMesh;
|
|
33
|
-
}
|
|
34
|
-
return _this;
|
|
35
|
-
}
|
|
36
|
-
Object.defineProperty(TouchButton3D.prototype, "isActiveNearInteraction", {
|
|
37
|
-
/**
|
|
38
|
-
* Whether the current interaction is caused by near interaction or not
|
|
39
|
-
*/
|
|
40
|
-
get: function () {
|
|
41
|
-
return this._isNearPressed;
|
|
42
|
-
},
|
|
43
|
-
enumerable: false,
|
|
44
|
-
configurable: true
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(TouchButton3D.prototype, "collidableFrontDirection", {
|
|
47
|
-
/**
|
|
48
|
-
* Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'
|
|
49
|
-
*/
|
|
50
|
-
get: function () {
|
|
51
|
-
if (this._collisionMesh) {
|
|
52
|
-
// Update the front direction to reflect any rotations of the collision mesh
|
|
53
|
-
var transformedDirection = TmpVectors.Vector3[0];
|
|
54
|
-
Vector3.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), transformedDirection);
|
|
55
|
-
return transformedDirection.normalize();
|
|
56
|
-
}
|
|
57
|
-
return this._collidableFrontDirection;
|
|
58
|
-
},
|
|
59
|
-
/**
|
|
60
|
-
* Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction
|
|
61
|
-
* @param frontWorldDir the forward direction of the button
|
|
62
|
-
*/
|
|
63
|
-
set: function (frontWorldDir) {
|
|
64
|
-
this._collidableFrontDirection = frontWorldDir.normalize();
|
|
65
|
-
if (this._collisionMesh) {
|
|
66
|
-
var invert = TmpVectors.Matrix[0];
|
|
67
|
-
invert.copyFrom(this._collisionMesh.getWorldMatrix());
|
|
68
|
-
invert.invert();
|
|
69
|
-
Vector3.TransformNormalToRef(this._collidableFrontDirection, invert, this._collidableFrontDirection);
|
|
70
|
-
this._collidableFrontDirection.normalize();
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
enumerable: false,
|
|
74
|
-
configurable: true
|
|
75
|
-
});
|
|
76
|
-
Object.defineProperty(TouchButton3D.prototype, "collisionMesh", {
|
|
77
|
-
/**
|
|
78
|
-
* Sets the mesh used for testing input collision
|
|
79
|
-
* @param collisionMesh the new collision mesh for the button
|
|
80
|
-
*/
|
|
81
|
-
set: function (collisionMesh) {
|
|
82
|
-
var _this = this;
|
|
83
|
-
var _a;
|
|
84
|
-
// Remove the GUI3DManager's data from the previous collision mesh's reserved data store, and reset interactability
|
|
85
|
-
if (this._collisionMesh) {
|
|
86
|
-
this._collisionMesh.isNearPickable = false;
|
|
87
|
-
if ((_a = this._collisionMesh.reservedDataStore) === null || _a === void 0 ? void 0 : _a.GUI3D) {
|
|
88
|
-
this._collisionMesh.reservedDataStore.GUI3D = {};
|
|
89
|
-
}
|
|
90
|
-
this._collisionMesh.getChildMeshes().forEach(function (mesh) {
|
|
91
|
-
var _a;
|
|
92
|
-
mesh.isNearPickable = false;
|
|
93
|
-
if ((_a = mesh.reservedDataStore) === null || _a === void 0 ? void 0 : _a.GUI3D) {
|
|
94
|
-
mesh.reservedDataStore.GUI3D = {};
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
this._collisionMesh = collisionMesh;
|
|
99
|
-
this._injectGUI3DReservedDataStore(this._collisionMesh).control = this;
|
|
100
|
-
this._collisionMesh.isNearPickable = true;
|
|
101
|
-
this._collisionMesh.getChildMeshes().forEach(function (mesh) {
|
|
102
|
-
_this._injectGUI3DReservedDataStore(mesh).control = _this;
|
|
103
|
-
mesh.isNearPickable = true;
|
|
104
|
-
});
|
|
105
|
-
this.collidableFrontDirection = collisionMesh.forward;
|
|
106
|
-
},
|
|
107
|
-
enumerable: false,
|
|
108
|
-
configurable: true
|
|
109
|
-
});
|
|
110
|
-
Object.defineProperty(TouchButton3D.prototype, "isToggleButton", {
|
|
111
|
-
get: function () {
|
|
112
|
-
return this._isToggleButton;
|
|
113
|
-
},
|
|
114
|
-
/**
|
|
115
|
-
* Setter for if this TouchButton3D should be treated as a toggle button
|
|
116
|
-
* @param value If this TouchHolographicButton should act like a toggle button
|
|
117
|
-
*/
|
|
118
|
-
set: function (value) {
|
|
119
|
-
if (value === this._isToggleButton) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
this._isToggleButton = value;
|
|
123
|
-
if (value) {
|
|
124
|
-
this.onPointerUpObservable.add(this._toggleButtonCallback);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);
|
|
128
|
-
// Safety check, reset the button if it's toggled on but no longer a toggle button
|
|
129
|
-
if (this._toggleState) {
|
|
130
|
-
this._onToggle(false);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
enumerable: false,
|
|
135
|
-
configurable: true
|
|
136
|
-
});
|
|
137
|
-
Object.defineProperty(TouchButton3D.prototype, "isToggled", {
|
|
138
|
-
get: function () {
|
|
139
|
-
return this._toggleState;
|
|
140
|
-
},
|
|
141
|
-
/**
|
|
142
|
-
* A public entrypoint to set the toggle state of the TouchHolographicButton. Only works if 'isToggleButton' is true
|
|
143
|
-
* @param newState The new state to set the TouchHolographicButton's toggle state to
|
|
144
|
-
*/
|
|
145
|
-
set: function (newState) {
|
|
146
|
-
if (this._isToggleButton && this._toggleState !== newState) {
|
|
147
|
-
this._onToggle(newState);
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
enumerable: false,
|
|
151
|
-
configurable: true
|
|
152
|
-
});
|
|
153
|
-
TouchButton3D.prototype._onToggle = function (newState) {
|
|
154
|
-
this._toggleState = newState;
|
|
155
|
-
this.onToggleObservable.notifyObservers(newState);
|
|
156
|
-
};
|
|
157
|
-
// Returns true if the collidable is in front of the button, or if the button has no front direction
|
|
158
|
-
TouchButton3D.prototype._isInteractionInFrontOfButton = function (collidablePos) {
|
|
159
|
-
return this._getInteractionHeight(collidablePos, this._collisionMesh.getAbsolutePosition()) > 0;
|
|
160
|
-
};
|
|
161
|
-
/**
|
|
162
|
-
* Get the height of the touchPoint from the collidable part of the button
|
|
163
|
-
* @param touchPoint the point to compare to the button, in absolute position
|
|
164
|
-
* @returns the depth of the touch point into the front of the button
|
|
165
|
-
*/
|
|
166
|
-
TouchButton3D.prototype.getPressDepth = function (touchPoint) {
|
|
167
|
-
if (!this._isNearPressed) {
|
|
168
|
-
return 0;
|
|
169
|
-
}
|
|
170
|
-
var interactionHeight = this._getInteractionHeight(touchPoint, this._collisionMesh.getAbsolutePosition());
|
|
171
|
-
return this._interactionSurfaceHeight - interactionHeight;
|
|
172
|
-
};
|
|
173
|
-
// Returns true if the collidable is in front of the button, or if the button has no front direction
|
|
174
|
-
TouchButton3D.prototype._getInteractionHeight = function (interactionPos, basePos) {
|
|
175
|
-
var frontDir = this.collidableFrontDirection;
|
|
176
|
-
if (frontDir.length() === 0) {
|
|
177
|
-
// The button has no front, just return the distance to the base
|
|
178
|
-
return Vector3.Distance(interactionPos, basePos);
|
|
179
|
-
}
|
|
180
|
-
var d = Vector3.Dot(basePos, frontDir);
|
|
181
|
-
var abc = Vector3.Dot(interactionPos, frontDir);
|
|
182
|
-
return abc - d;
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* @param providedType
|
|
186
|
-
* @param nearMeshPosition
|
|
187
|
-
* @param activeInteractionCount
|
|
188
|
-
* @hidden
|
|
189
|
-
*/
|
|
190
|
-
TouchButton3D.prototype._generatePointerEventType = function (providedType, nearMeshPosition, activeInteractionCount) {
|
|
191
|
-
if (providedType === PointerEventTypes.POINTERDOWN) {
|
|
192
|
-
if (!this._isInteractionInFrontOfButton(nearMeshPosition)) {
|
|
193
|
-
// Near interaction mesh is behind the button, don't send a pointer down
|
|
194
|
-
return PointerEventTypes.POINTERMOVE;
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
this._isNearPressed = true;
|
|
198
|
-
this._interactionSurfaceHeight = this._getInteractionHeight(nearMeshPosition, this._collisionMesh.getAbsolutePosition());
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (providedType === PointerEventTypes.POINTERUP) {
|
|
202
|
-
if (activeInteractionCount == 0) {
|
|
203
|
-
// We get the release for the down we swallowed earlier, swallow as well
|
|
204
|
-
return PointerEventTypes.POINTERMOVE;
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
this._isNearPressed = false;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
return providedType;
|
|
211
|
-
};
|
|
212
|
-
TouchButton3D.prototype._getTypeName = function () {
|
|
213
|
-
return "TouchButton3D";
|
|
214
|
-
};
|
|
215
|
-
// Mesh association
|
|
216
|
-
TouchButton3D.prototype._createNode = function (scene) {
|
|
217
|
-
return _super.prototype._createNode.call(this, scene);
|
|
218
|
-
};
|
|
219
|
-
/**
|
|
220
|
-
* Releases all associated resources
|
|
221
|
-
*/
|
|
222
|
-
TouchButton3D.prototype.dispose = function () {
|
|
223
|
-
_super.prototype.dispose.call(this);
|
|
224
|
-
// Clean up toggle observables
|
|
225
|
-
this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);
|
|
226
|
-
this.onToggleObservable.clear();
|
|
227
|
-
if (this._collisionMesh) {
|
|
228
|
-
this._collisionMesh.dispose();
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
return TouchButton3D;
|
|
232
|
-
}(Button3D));
|
|
233
|
-
export { TouchButton3D };
|
|
1
|
+
// Assumptions: absolute position of button mesh is inside the mesh
|
|
2
|
+
import { __extends } from "tslib";
|
|
3
|
+
import { Vector3, TmpVectors } from "@babylonjs/core/Maths/math.vector.js";
|
|
4
|
+
import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents.js";
|
|
5
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
6
|
+
import { Button3D } from "./button3D";
|
|
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._interactionSurfaceHeight = 0;
|
|
21
|
+
_this._isToggleButton = false;
|
|
22
|
+
_this._toggleState = false;
|
|
23
|
+
_this._toggleButtonCallback = function () {
|
|
24
|
+
_this._onToggle(!_this._toggleState);
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* An event triggered when the button is toggled. Only fired if 'isToggleButton' is true
|
|
28
|
+
*/
|
|
29
|
+
_this.onToggleObservable = new Observable();
|
|
30
|
+
_this.collidableFrontDirection = Vector3.Zero();
|
|
31
|
+
if (collisionMesh) {
|
|
32
|
+
_this.collisionMesh = collisionMesh;
|
|
33
|
+
}
|
|
34
|
+
return _this;
|
|
35
|
+
}
|
|
36
|
+
Object.defineProperty(TouchButton3D.prototype, "isActiveNearInteraction", {
|
|
37
|
+
/**
|
|
38
|
+
* Whether the current interaction is caused by near interaction or not
|
|
39
|
+
*/
|
|
40
|
+
get: function () {
|
|
41
|
+
return this._isNearPressed;
|
|
42
|
+
},
|
|
43
|
+
enumerable: false,
|
|
44
|
+
configurable: true
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(TouchButton3D.prototype, "collidableFrontDirection", {
|
|
47
|
+
/**
|
|
48
|
+
* Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'
|
|
49
|
+
*/
|
|
50
|
+
get: function () {
|
|
51
|
+
if (this._collisionMesh) {
|
|
52
|
+
// Update the front direction to reflect any rotations of the collision mesh
|
|
53
|
+
var transformedDirection = TmpVectors.Vector3[0];
|
|
54
|
+
Vector3.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), transformedDirection);
|
|
55
|
+
return transformedDirection.normalize();
|
|
56
|
+
}
|
|
57
|
+
return this._collidableFrontDirection;
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction
|
|
61
|
+
* @param frontWorldDir the forward direction of the button
|
|
62
|
+
*/
|
|
63
|
+
set: function (frontWorldDir) {
|
|
64
|
+
this._collidableFrontDirection = frontWorldDir.normalize();
|
|
65
|
+
if (this._collisionMesh) {
|
|
66
|
+
var invert = TmpVectors.Matrix[0];
|
|
67
|
+
invert.copyFrom(this._collisionMesh.getWorldMatrix());
|
|
68
|
+
invert.invert();
|
|
69
|
+
Vector3.TransformNormalToRef(this._collidableFrontDirection, invert, this._collidableFrontDirection);
|
|
70
|
+
this._collidableFrontDirection.normalize();
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
enumerable: false,
|
|
74
|
+
configurable: true
|
|
75
|
+
});
|
|
76
|
+
Object.defineProperty(TouchButton3D.prototype, "collisionMesh", {
|
|
77
|
+
/**
|
|
78
|
+
* Sets the mesh used for testing input collision
|
|
79
|
+
* @param collisionMesh the new collision mesh for the button
|
|
80
|
+
*/
|
|
81
|
+
set: function (collisionMesh) {
|
|
82
|
+
var _this = this;
|
|
83
|
+
var _a;
|
|
84
|
+
// Remove the GUI3DManager's data from the previous collision mesh's reserved data store, and reset interactability
|
|
85
|
+
if (this._collisionMesh) {
|
|
86
|
+
this._collisionMesh.isNearPickable = false;
|
|
87
|
+
if ((_a = this._collisionMesh.reservedDataStore) === null || _a === void 0 ? void 0 : _a.GUI3D) {
|
|
88
|
+
this._collisionMesh.reservedDataStore.GUI3D = {};
|
|
89
|
+
}
|
|
90
|
+
this._collisionMesh.getChildMeshes().forEach(function (mesh) {
|
|
91
|
+
var _a;
|
|
92
|
+
mesh.isNearPickable = false;
|
|
93
|
+
if ((_a = mesh.reservedDataStore) === null || _a === void 0 ? void 0 : _a.GUI3D) {
|
|
94
|
+
mesh.reservedDataStore.GUI3D = {};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
this._collisionMesh = collisionMesh;
|
|
99
|
+
this._injectGUI3DReservedDataStore(this._collisionMesh).control = this;
|
|
100
|
+
this._collisionMesh.isNearPickable = true;
|
|
101
|
+
this._collisionMesh.getChildMeshes().forEach(function (mesh) {
|
|
102
|
+
_this._injectGUI3DReservedDataStore(mesh).control = _this;
|
|
103
|
+
mesh.isNearPickable = true;
|
|
104
|
+
});
|
|
105
|
+
this.collidableFrontDirection = collisionMesh.forward;
|
|
106
|
+
},
|
|
107
|
+
enumerable: false,
|
|
108
|
+
configurable: true
|
|
109
|
+
});
|
|
110
|
+
Object.defineProperty(TouchButton3D.prototype, "isToggleButton", {
|
|
111
|
+
get: function () {
|
|
112
|
+
return this._isToggleButton;
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* Setter for if this TouchButton3D should be treated as a toggle button
|
|
116
|
+
* @param value If this TouchHolographicButton should act like a toggle button
|
|
117
|
+
*/
|
|
118
|
+
set: function (value) {
|
|
119
|
+
if (value === this._isToggleButton) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this._isToggleButton = value;
|
|
123
|
+
if (value) {
|
|
124
|
+
this.onPointerUpObservable.add(this._toggleButtonCallback);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);
|
|
128
|
+
// Safety check, reset the button if it's toggled on but no longer a toggle button
|
|
129
|
+
if (this._toggleState) {
|
|
130
|
+
this._onToggle(false);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
enumerable: false,
|
|
135
|
+
configurable: true
|
|
136
|
+
});
|
|
137
|
+
Object.defineProperty(TouchButton3D.prototype, "isToggled", {
|
|
138
|
+
get: function () {
|
|
139
|
+
return this._toggleState;
|
|
140
|
+
},
|
|
141
|
+
/**
|
|
142
|
+
* A public entrypoint to set the toggle state of the TouchHolographicButton. Only works if 'isToggleButton' is true
|
|
143
|
+
* @param newState The new state to set the TouchHolographicButton's toggle state to
|
|
144
|
+
*/
|
|
145
|
+
set: function (newState) {
|
|
146
|
+
if (this._isToggleButton && this._toggleState !== newState) {
|
|
147
|
+
this._onToggle(newState);
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
enumerable: false,
|
|
151
|
+
configurable: true
|
|
152
|
+
});
|
|
153
|
+
TouchButton3D.prototype._onToggle = function (newState) {
|
|
154
|
+
this._toggleState = newState;
|
|
155
|
+
this.onToggleObservable.notifyObservers(newState);
|
|
156
|
+
};
|
|
157
|
+
// Returns true if the collidable is in front of the button, or if the button has no front direction
|
|
158
|
+
TouchButton3D.prototype._isInteractionInFrontOfButton = function (collidablePos) {
|
|
159
|
+
return this._getInteractionHeight(collidablePos, this._collisionMesh.getAbsolutePosition()) > 0;
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Get the height of the touchPoint from the collidable part of the button
|
|
163
|
+
* @param touchPoint the point to compare to the button, in absolute position
|
|
164
|
+
* @returns the depth of the touch point into the front of the button
|
|
165
|
+
*/
|
|
166
|
+
TouchButton3D.prototype.getPressDepth = function (touchPoint) {
|
|
167
|
+
if (!this._isNearPressed) {
|
|
168
|
+
return 0;
|
|
169
|
+
}
|
|
170
|
+
var interactionHeight = this._getInteractionHeight(touchPoint, this._collisionMesh.getAbsolutePosition());
|
|
171
|
+
return this._interactionSurfaceHeight - interactionHeight;
|
|
172
|
+
};
|
|
173
|
+
// Returns true if the collidable is in front of the button, or if the button has no front direction
|
|
174
|
+
TouchButton3D.prototype._getInteractionHeight = function (interactionPos, basePos) {
|
|
175
|
+
var frontDir = this.collidableFrontDirection;
|
|
176
|
+
if (frontDir.length() === 0) {
|
|
177
|
+
// The button has no front, just return the distance to the base
|
|
178
|
+
return Vector3.Distance(interactionPos, basePos);
|
|
179
|
+
}
|
|
180
|
+
var d = Vector3.Dot(basePos, frontDir);
|
|
181
|
+
var abc = Vector3.Dot(interactionPos, frontDir);
|
|
182
|
+
return abc - d;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* @param providedType
|
|
186
|
+
* @param nearMeshPosition
|
|
187
|
+
* @param activeInteractionCount
|
|
188
|
+
* @hidden
|
|
189
|
+
*/
|
|
190
|
+
TouchButton3D.prototype._generatePointerEventType = function (providedType, nearMeshPosition, activeInteractionCount) {
|
|
191
|
+
if (providedType === PointerEventTypes.POINTERDOWN) {
|
|
192
|
+
if (!this._isInteractionInFrontOfButton(nearMeshPosition)) {
|
|
193
|
+
// Near interaction mesh is behind the button, don't send a pointer down
|
|
194
|
+
return PointerEventTypes.POINTERMOVE;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this._isNearPressed = true;
|
|
198
|
+
this._interactionSurfaceHeight = this._getInteractionHeight(nearMeshPosition, this._collisionMesh.getAbsolutePosition());
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (providedType === PointerEventTypes.POINTERUP) {
|
|
202
|
+
if (activeInteractionCount == 0) {
|
|
203
|
+
// We get the release for the down we swallowed earlier, swallow as well
|
|
204
|
+
return PointerEventTypes.POINTERMOVE;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this._isNearPressed = false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return providedType;
|
|
211
|
+
};
|
|
212
|
+
TouchButton3D.prototype._getTypeName = function () {
|
|
213
|
+
return "TouchButton3D";
|
|
214
|
+
};
|
|
215
|
+
// Mesh association
|
|
216
|
+
TouchButton3D.prototype._createNode = function (scene) {
|
|
217
|
+
return _super.prototype._createNode.call(this, scene);
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Releases all associated resources
|
|
221
|
+
*/
|
|
222
|
+
TouchButton3D.prototype.dispose = function () {
|
|
223
|
+
_super.prototype.dispose.call(this);
|
|
224
|
+
// Clean up toggle observables
|
|
225
|
+
this.onPointerUpObservable.removeCallback(this._toggleButtonCallback);
|
|
226
|
+
this.onToggleObservable.clear();
|
|
227
|
+
if (this._collisionMesh) {
|
|
228
|
+
this._collisionMesh.dispose();
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
return TouchButton3D;
|
|
232
|
+
}(Button3D));
|
|
233
|
+
export { TouchButton3D };
|
|
234
234
|
//# sourceMappingURL=touchButton3D.js.map
|