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