@mml-io/3d-web-client-core 0.0.0-experimental-e5a5229-20231107 → 0.0.0-experimental-e21a271-20231108
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/build/camera/CameraManager.d.ts +8 -0
- package/build/index.js +36 -10
- package/build/index.js.map +2 -2
- package/package.json +2 -2
@@ -26,14 +26,22 @@ export declare class CameraManager {
|
|
26
26
|
private hadTarget;
|
27
27
|
private rayCaster;
|
28
28
|
private eventHandlerCollection;
|
29
|
+
private isLerping;
|
30
|
+
private finalTarget;
|
31
|
+
private lerpTarget;
|
32
|
+
private lerpFactor;
|
33
|
+
private lerpDuration;
|
29
34
|
constructor(targetElement: HTMLElement, collisionsManager: CollisionsManager, initialPhi?: number, initialTheta?: number);
|
30
35
|
private onMouseDown;
|
31
36
|
private onMouseUp;
|
32
37
|
private onMouseMove;
|
33
38
|
private onMouseWheel;
|
34
39
|
setTarget(target: Vector3): void;
|
40
|
+
setLerpedTarget(target: Vector3, targetDistance: number): void;
|
35
41
|
private reverseUpdateFromPositions;
|
36
42
|
adjustCameraPosition(): void;
|
37
43
|
dispose(): void;
|
44
|
+
private easeOutExpo;
|
45
|
+
updateAspect(aspect: number): void;
|
38
46
|
update(): void;
|
39
47
|
}
|
package/build/index.js
CHANGED
@@ -34,9 +34,6 @@ var round = (n, digits) => {
|
|
34
34
|
var ease = (target, n, factor) => {
|
35
35
|
return round((target - n) * factor, 5);
|
36
36
|
};
|
37
|
-
function clamp(value, min, max) {
|
38
|
-
return Math.min(Math.max(value, min), max);
|
39
|
-
}
|
40
37
|
var remap = (value, minValue, maxValue, minScaledValue, maxScaledValue) => {
|
41
38
|
return minScaledValue + (maxScaledValue - minScaledValue) * (value - minValue) / (maxValue - minValue);
|
42
39
|
};
|
@@ -112,6 +109,11 @@ var CameraManager = class {
|
|
112
109
|
this.dragging = false;
|
113
110
|
this.target = new Vector32(0, 1.55, 0);
|
114
111
|
this.hadTarget = false;
|
112
|
+
this.isLerping = false;
|
113
|
+
this.finalTarget = new Vector32();
|
114
|
+
this.lerpTarget = new Vector32();
|
115
|
+
this.lerpFactor = 0;
|
116
|
+
this.lerpDuration = 2.1;
|
115
117
|
this.phi = initialPhi;
|
116
118
|
this.targetPhi = initialPhi;
|
117
119
|
this.theta = initialTheta;
|
@@ -153,12 +155,24 @@ var CameraManager = class {
|
|
153
155
|
event.preventDefault();
|
154
156
|
}
|
155
157
|
setTarget(target) {
|
156
|
-
this.
|
158
|
+
if (!this.isLerping) {
|
159
|
+
this.target.copy(target);
|
160
|
+
} else {
|
161
|
+
this.finalTarget.copy(target);
|
162
|
+
this.lerpTarget.copy(this.target);
|
163
|
+
this.lerpFactor = 0;
|
164
|
+
}
|
157
165
|
if (!this.hadTarget) {
|
158
166
|
this.hadTarget = true;
|
159
167
|
this.reverseUpdateFromPositions();
|
160
168
|
}
|
161
169
|
}
|
170
|
+
setLerpedTarget(target, targetDistance) {
|
171
|
+
this.isLerping = true;
|
172
|
+
this.targetDistance = targetDistance;
|
173
|
+
this.desiredDistance = targetDistance;
|
174
|
+
this.setTarget(target);
|
175
|
+
}
|
162
176
|
reverseUpdateFromPositions() {
|
163
177
|
if (this.phi === null || this.theta == null)
|
164
178
|
return;
|
@@ -189,9 +203,20 @@ var CameraManager = class {
|
|
189
203
|
dispose() {
|
190
204
|
this.eventHandlerCollection.clear();
|
191
205
|
}
|
206
|
+
easeOutExpo(x) {
|
207
|
+
return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);
|
208
|
+
}
|
209
|
+
updateAspect(aspect) {
|
210
|
+
this.camera.aspect = aspect;
|
211
|
+
}
|
192
212
|
update() {
|
193
|
-
if (this.
|
194
|
-
|
213
|
+
if (this.isLerping && this.lerpFactor < 1) {
|
214
|
+
this.lerpFactor += 0.01 / this.lerpDuration;
|
215
|
+
this.lerpFactor = Math.min(1, this.lerpFactor);
|
216
|
+
this.target.lerpVectors(this.lerpTarget, this.finalTarget, this.easeOutExpo(this.lerpFactor));
|
217
|
+
} else {
|
218
|
+
this.adjustCameraPosition();
|
219
|
+
}
|
195
220
|
if (this.phi !== null && this.targetPhi !== null && this.theta !== null && this.targetTheta !== null) {
|
196
221
|
this.distance += (this.targetDistance - this.distance) * this.dampingFactor * 0.21;
|
197
222
|
this.phi += (this.targetPhi - this.phi) * this.dampingFactor;
|
@@ -206,13 +231,14 @@ var CameraManager = class {
|
|
206
231
|
this.minFOV,
|
207
232
|
this.maxFOV
|
208
233
|
);
|
209
|
-
this.fov +=
|
234
|
+
this.fov += (this.targetFOV - this.fov) * this.dampingFactor;
|
210
235
|
this.camera.fov = this.fov;
|
211
236
|
this.camera.updateProjectionMatrix();
|
212
|
-
this.camera.
|
213
|
-
this.camera.position.set(x, clamp(y, 0.1, Infinity), z);
|
214
|
-
this.adjustCameraPosition();
|
237
|
+
this.camera.position.set(x, y, z);
|
215
238
|
this.camera.lookAt(this.target);
|
239
|
+
if (this.isLerping && this.lerpFactor >= 1) {
|
240
|
+
this.isLerping = false;
|
241
|
+
}
|
216
242
|
}
|
217
243
|
}
|
218
244
|
};
|