@vived/app 2.8.1 → 2.11.0
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/lib/Entities/FocusCamera.d.ts +70 -0
- package/lib/Entities/FocusCamera.js +243 -0
- package/lib/Entities/KeyboardInput.d.ts +6 -8
- package/lib/Entities/KeyboardInput.js +28 -50
- package/lib/Entities/MouseInput.d.ts +1 -1
- package/lib/Entities/MouseInput.js +18 -11
- package/lib/Entities/OrbitCamera.d.ts +59 -0
- package/lib/Entities/OrbitCamera.js +173 -4
- package/lib/Entities/TouchInput.d.ts +20 -0
- package/lib/Entities/TouchInput.js +111 -0
- package/lib/Entities/index.d.ts +2 -1
- package/lib/Entities/index.js +2 -1
- package/lib/Interface/Controllers/makeAppHandler.d.ts +1 -1
- package/lib/Interface/Controllers/makeAppHandler.js +12 -10
- package/lib/PresentationManagers/FocusCameraPM.d.ts +14 -0
- package/lib/PresentationManagers/FocusCameraPM.js +31 -0
- package/lib/PresentationManagers/index.d.ts +1 -1
- package/lib/PresentationManagers/index.js +1 -1
- package/lib/UseCases/FocusCamera/BumpDollyFocusCamera.d.ts +16 -0
- package/lib/UseCases/FocusCamera/BumpDollyFocusCamera.js +63 -0
- package/lib/UseCases/FocusCamera/LerpFocusCamera.d.ts +36 -0
- package/lib/UseCases/FocusCamera/LerpFocusCamera.js +71 -0
- package/lib/UseCases/FocusCamera/PinchDollyFocusCamera.d.ts +10 -0
- package/lib/UseCases/FocusCamera/PinchDollyFocusCamera.js +35 -0
- package/lib/UseCases/FocusCamera/PixelDollyFocusCamera.d.ts +10 -0
- package/lib/UseCases/FocusCamera/PixelDollyFocusCamera.js +36 -0
- package/lib/UseCases/FocusCamera/PixelOrbitFocusCamera.d.ts +10 -0
- package/lib/UseCases/FocusCamera/PixelOrbitFocusCamera.js +24 -0
- package/lib/UseCases/FocusCamera/PixelPlanePanFocusCamera.d.ts +10 -0
- package/lib/UseCases/FocusCamera/PixelPlanePanFocusCamera.js +32 -0
- package/lib/UseCases/FocusCamera/SerializeFocusCamera.d.ts +22 -0
- package/lib/UseCases/FocusCamera/SerializeFocusCamera.js +81 -0
- package/lib/UseCases/FocusCamera/index.d.ts +7 -0
- package/lib/UseCases/FocusCamera/index.js +19 -0
- package/lib/UseCases/OrbitCamera/LerpOrbitCamera.d.ts +36 -0
- package/lib/UseCases/OrbitCamera/LerpOrbitCamera.js +71 -0
- package/lib/UseCases/OrbitCamera/PixelDolly_OrbitCamera.d.ts +9 -0
- package/lib/UseCases/OrbitCamera/PixelDolly_OrbitCamera.js +31 -0
- package/lib/UseCases/OrbitCamera/PixelPlanePan_OrbitCamera.d.ts +10 -0
- package/lib/UseCases/OrbitCamera/PixelPlanePan_OrbitCamera.js +31 -0
- package/lib/UseCases/OrbitCamera/SerializeOrbitCamera.d.ts +22 -0
- package/lib/UseCases/OrbitCamera/SerializeOrbitCamera.js +81 -0
- package/lib/UseCases/OrbitCamera/index.d.ts +4 -0
- package/lib/UseCases/OrbitCamera/index.js +16 -0
- package/lib/UseCases/index.d.ts +1 -2
- package/lib/UseCases/index.js +1 -2
- package/package.json +1 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Vector3 } from ".";
|
|
2
|
+
export declare type OnFocusCameraChange = () => void;
|
|
3
|
+
export interface FocusCameraLerper {
|
|
4
|
+
cancelLerp: () => void;
|
|
5
|
+
}
|
|
6
|
+
export interface FocusCameraData {
|
|
7
|
+
defaultAlpha?: number;
|
|
8
|
+
defaultBeta?: number;
|
|
9
|
+
defaultRadius?: number;
|
|
10
|
+
defaultTarget?: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
nearClip?: number;
|
|
16
|
+
farClip?: number;
|
|
17
|
+
alphaLimit?: {
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
};
|
|
21
|
+
betaLimit?: {
|
|
22
|
+
min: number;
|
|
23
|
+
max: number;
|
|
24
|
+
};
|
|
25
|
+
radiusLimit?: {
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
};
|
|
29
|
+
targetLimit?: {
|
|
30
|
+
min: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
z: number;
|
|
34
|
+
};
|
|
35
|
+
max: {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
z: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface FocusCamera {
|
|
43
|
+
alpha: number;
|
|
44
|
+
beta: number;
|
|
45
|
+
radius: number;
|
|
46
|
+
target: Vector3;
|
|
47
|
+
direction: Vector3;
|
|
48
|
+
cameraPosition: Vector3;
|
|
49
|
+
nearClip: number;
|
|
50
|
+
farClip: number;
|
|
51
|
+
defaultAlpha: number;
|
|
52
|
+
defaultBeta: number;
|
|
53
|
+
defaultRadius: number;
|
|
54
|
+
defaultTarget: Vector3;
|
|
55
|
+
setAlphaLimits: (min: number, max: number) => void;
|
|
56
|
+
clearAlphaLimits: () => void;
|
|
57
|
+
setBetaLimits: (min: number, max: number) => void;
|
|
58
|
+
clearBetaLimits: () => void;
|
|
59
|
+
setRadiusLimits: (min: number, max: number) => void;
|
|
60
|
+
clearRadiusLimits: () => void;
|
|
61
|
+
setTargetLimits: (min: Vector3, max: Vector3) => void;
|
|
62
|
+
clearTargetLimits: () => void;
|
|
63
|
+
registerLerp: (lerper: FocusCameraLerper) => void;
|
|
64
|
+
lerpCompleted: () => void;
|
|
65
|
+
cancelLerp: () => void;
|
|
66
|
+
applyData: (data: FocusCameraData) => void;
|
|
67
|
+
addObserver: (observer: OnFocusCameraChange) => void;
|
|
68
|
+
removeObserver: (observer: OnFocusCameraChange) => void;
|
|
69
|
+
}
|
|
70
|
+
export declare function makeFocusCamera(): FocusCamera;
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeFocusCamera = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
function makeFocusCamera() {
|
|
6
|
+
return new FocusCameraImp();
|
|
7
|
+
}
|
|
8
|
+
exports.makeFocusCamera = makeFocusCamera;
|
|
9
|
+
class FocusCameraImp {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.farClip = 100;
|
|
12
|
+
this.nearClip = 0.01;
|
|
13
|
+
this.defaultAlpha = 0;
|
|
14
|
+
this.defaultBeta = 30;
|
|
15
|
+
this.defaultRadius = 8;
|
|
16
|
+
this.defaultTarget = _1.Vector3.Zero();
|
|
17
|
+
this.limitRadius = false;
|
|
18
|
+
this.minRadius = 0;
|
|
19
|
+
this.maxRadius = 0;
|
|
20
|
+
this.limitAlpha = false;
|
|
21
|
+
this.minAlpha = 0;
|
|
22
|
+
this.maxAlpha = 0;
|
|
23
|
+
this.limitBeta = false;
|
|
24
|
+
this.minBeta = 0;
|
|
25
|
+
this.maxBeta = 0;
|
|
26
|
+
this.limitTarget = false;
|
|
27
|
+
this.maxTargetPosition = _1.Vector3.Zero();
|
|
28
|
+
this.minTargetPosition = _1.Vector3.Zero();
|
|
29
|
+
this.observers = new _1.ObserverList();
|
|
30
|
+
this.memoizedAlpha = new _1.MemoizedNumber(0, this.observers.notify);
|
|
31
|
+
this.memoizedBeta = new _1.MemoizedNumber(0, this.observers.notify);
|
|
32
|
+
this.memoizedRadius = new _1.MemoizedNumber(1, this.observers.notify);
|
|
33
|
+
this.memoizedTarget = new _1.MemoizedVector3(_1.Vector3.Zero(), this.observers.notify);
|
|
34
|
+
this.setRadiusLimits = (min, max) => {
|
|
35
|
+
if (min < 0) {
|
|
36
|
+
throw new Error("[Orbit Camera] Mininum Radius must be greater >= 0");
|
|
37
|
+
}
|
|
38
|
+
if (max < min) {
|
|
39
|
+
throw new Error("[Orbit Camera] Max radius must be >= min radius");
|
|
40
|
+
}
|
|
41
|
+
this.maxRadius = max;
|
|
42
|
+
this.minRadius = min;
|
|
43
|
+
this.limitRadius = true;
|
|
44
|
+
this.radius = this.radius;
|
|
45
|
+
};
|
|
46
|
+
this.clearRadiusLimits = () => {
|
|
47
|
+
this.maxRadius = 0;
|
|
48
|
+
this.minRadius = 0;
|
|
49
|
+
this.limitRadius = false;
|
|
50
|
+
};
|
|
51
|
+
this.setAlphaLimits = (min, max) => {
|
|
52
|
+
if (min > max) {
|
|
53
|
+
throw new Error("[Orbit Camera] Max alpha must be >= min alpha");
|
|
54
|
+
}
|
|
55
|
+
if (min < -180) {
|
|
56
|
+
throw new Error("[Orbit Camera] Min alpha must be >= -180");
|
|
57
|
+
}
|
|
58
|
+
if (max > 180) {
|
|
59
|
+
throw new Error("[Orbit Camera] Max alpha must be <= 180");
|
|
60
|
+
}
|
|
61
|
+
this.maxAlpha = max;
|
|
62
|
+
this.minAlpha = min;
|
|
63
|
+
this.limitAlpha = true;
|
|
64
|
+
this.alpha = this.alpha;
|
|
65
|
+
};
|
|
66
|
+
this.clearAlphaLimits = () => {
|
|
67
|
+
this.maxAlpha = 0;
|
|
68
|
+
this.minAlpha = 0;
|
|
69
|
+
this.limitAlpha = false;
|
|
70
|
+
};
|
|
71
|
+
this.setBetaLimits = (min, max) => {
|
|
72
|
+
if (min > max) {
|
|
73
|
+
throw new Error("[Orbit Camera] Max beta must be >= min beta");
|
|
74
|
+
}
|
|
75
|
+
if (min < -180) {
|
|
76
|
+
throw new Error("[Orbit Camera] Min beta must be >= -180");
|
|
77
|
+
}
|
|
78
|
+
if (max > 180) {
|
|
79
|
+
throw new Error("[Orbit Camera] Max beta must be <= 180");
|
|
80
|
+
}
|
|
81
|
+
this.maxBeta = max;
|
|
82
|
+
this.minBeta = min;
|
|
83
|
+
this.limitBeta = true;
|
|
84
|
+
this.beta = this.beta;
|
|
85
|
+
};
|
|
86
|
+
this.clearBetaLimits = () => {
|
|
87
|
+
this.maxBeta = 0;
|
|
88
|
+
this.minBeta = 0;
|
|
89
|
+
this.limitBeta = false;
|
|
90
|
+
};
|
|
91
|
+
this.setTargetLimits = (min, max) => {
|
|
92
|
+
const minArray = min.asArray();
|
|
93
|
+
const maxArray = max.asArray();
|
|
94
|
+
for (let i = 0; i < 3; i++) {
|
|
95
|
+
if (minArray[i] > maxArray[i]) {
|
|
96
|
+
throw new Error("[Orbit Camera] Min target must be less than the max target");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
this.maxTargetPosition = max;
|
|
100
|
+
this.minTargetPosition = min;
|
|
101
|
+
this.limitTarget = true;
|
|
102
|
+
this.target = this.target;
|
|
103
|
+
};
|
|
104
|
+
this.clearTargetLimits = () => {
|
|
105
|
+
this.maxTargetPosition = _1.Vector3.Zero();
|
|
106
|
+
this.minTargetPosition = _1.Vector3.Zero();
|
|
107
|
+
this.limitTarget = false;
|
|
108
|
+
};
|
|
109
|
+
this.registerLerp = (lerper) => {
|
|
110
|
+
if (this.currentLerp) {
|
|
111
|
+
this.currentLerp.cancelLerp();
|
|
112
|
+
}
|
|
113
|
+
this.currentLerp = lerper;
|
|
114
|
+
};
|
|
115
|
+
this.lerpCompleted = () => {
|
|
116
|
+
this.currentLerp = undefined;
|
|
117
|
+
};
|
|
118
|
+
this.cancelLerp = () => {
|
|
119
|
+
var _a;
|
|
120
|
+
(_a = this.currentLerp) === null || _a === void 0 ? void 0 : _a.cancelLerp();
|
|
121
|
+
this.currentLerp = undefined;
|
|
122
|
+
};
|
|
123
|
+
this.applyData = (data) => {
|
|
124
|
+
if (data.defaultAlpha !== undefined) {
|
|
125
|
+
this.defaultAlpha = data.defaultAlpha;
|
|
126
|
+
}
|
|
127
|
+
if (data.defaultBeta !== undefined) {
|
|
128
|
+
this.defaultBeta = data.defaultBeta;
|
|
129
|
+
}
|
|
130
|
+
if (data.defaultRadius !== undefined) {
|
|
131
|
+
this.defaultRadius = data.defaultRadius;
|
|
132
|
+
}
|
|
133
|
+
if (data.defaultTarget !== undefined) {
|
|
134
|
+
const { x, y, z } = data.defaultTarget;
|
|
135
|
+
this.defaultTarget = new _1.Vector3(x, y, z);
|
|
136
|
+
}
|
|
137
|
+
if (data.nearClip !== undefined) {
|
|
138
|
+
this.nearClip = data.nearClip;
|
|
139
|
+
}
|
|
140
|
+
if (data.farClip !== undefined) {
|
|
141
|
+
this.farClip = data.farClip;
|
|
142
|
+
}
|
|
143
|
+
if (data.alphaLimit !== undefined) {
|
|
144
|
+
this.setAlphaLimits(data.alphaLimit.min, data.alphaLimit.max);
|
|
145
|
+
}
|
|
146
|
+
if (data.betaLimit !== undefined) {
|
|
147
|
+
this.setBetaLimits(data.betaLimit.min, data.betaLimit.max);
|
|
148
|
+
}
|
|
149
|
+
if (data.radiusLimit !== undefined) {
|
|
150
|
+
this.setRadiusLimits(data.radiusLimit.min, data.radiusLimit.max);
|
|
151
|
+
}
|
|
152
|
+
if (data.targetLimit !== undefined) {
|
|
153
|
+
const { max, min } = data.targetLimit;
|
|
154
|
+
this.setTargetLimits(new _1.Vector3(min.x, min.y, min.z), new _1.Vector3(max.x, max.y, max.z));
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
this.addObserver = (observer) => {
|
|
158
|
+
this.observers.add(observer);
|
|
159
|
+
};
|
|
160
|
+
this.removeObserver = (observer) => {
|
|
161
|
+
this.observers.remove(observer);
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
get alpha() {
|
|
165
|
+
return this.memoizedAlpha.val;
|
|
166
|
+
}
|
|
167
|
+
set alpha(val) {
|
|
168
|
+
let clampedVal = this.clampAngle(val);
|
|
169
|
+
if (this.limitAlpha) {
|
|
170
|
+
clampedVal = Math.min(clampedVal, this.maxAlpha);
|
|
171
|
+
clampedVal = Math.max(clampedVal, this.minAlpha);
|
|
172
|
+
}
|
|
173
|
+
this.memoizedAlpha.val = clampedVal;
|
|
174
|
+
}
|
|
175
|
+
get beta() {
|
|
176
|
+
return this.memoizedBeta.val;
|
|
177
|
+
}
|
|
178
|
+
set beta(val) {
|
|
179
|
+
let clampedVal = this.clampAngle(val);
|
|
180
|
+
if (this.limitBeta) {
|
|
181
|
+
clampedVal = Math.min(clampedVal, this.maxBeta);
|
|
182
|
+
clampedVal = Math.max(clampedVal, this.minBeta);
|
|
183
|
+
}
|
|
184
|
+
this.memoizedBeta.val = clampedVal;
|
|
185
|
+
}
|
|
186
|
+
get radius() {
|
|
187
|
+
return this.memoizedRadius.val;
|
|
188
|
+
}
|
|
189
|
+
set radius(val) {
|
|
190
|
+
let clampedVal = Math.max(val, 0);
|
|
191
|
+
if (this.limitRadius) {
|
|
192
|
+
clampedVal = Math.min(clampedVal, this.maxRadius);
|
|
193
|
+
clampedVal = Math.max(clampedVal, this.minRadius);
|
|
194
|
+
}
|
|
195
|
+
this.memoizedRadius.val = clampedVal;
|
|
196
|
+
}
|
|
197
|
+
get target() {
|
|
198
|
+
return this.memoizedTarget.getVector();
|
|
199
|
+
}
|
|
200
|
+
set target(val) {
|
|
201
|
+
const targetVals = val.asArray();
|
|
202
|
+
if (this.limitTarget) {
|
|
203
|
+
const maxVals = this.maxTargetPosition.asArray();
|
|
204
|
+
const minVals = this.minTargetPosition.asArray();
|
|
205
|
+
for (let i = 0; i < 3; i++) {
|
|
206
|
+
let v = targetVals[i];
|
|
207
|
+
v = Math.min(v, maxVals[i]);
|
|
208
|
+
v = Math.max(v, minVals[i]);
|
|
209
|
+
targetVals[i] = v;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
this.memoizedTarget.setVector(new _1.Vector3(targetVals[0], targetVals[1], targetVals[2]));
|
|
213
|
+
}
|
|
214
|
+
get direction() {
|
|
215
|
+
const yLength = -Math.sin(this.degToRad(this.beta));
|
|
216
|
+
const horizontalLenght = Math.cos(this.degToRad(this.beta));
|
|
217
|
+
const alphaRadians = this.degToRad(this.alpha);
|
|
218
|
+
const xLength = -horizontalLenght * Math.sin(alphaRadians);
|
|
219
|
+
const zLength = horizontalLenght * Math.cos(alphaRadians);
|
|
220
|
+
return new _1.Vector3(xLength, yLength, zLength);
|
|
221
|
+
}
|
|
222
|
+
get cameraPosition() {
|
|
223
|
+
const localOffset = this.direction.copy();
|
|
224
|
+
localOffset.setLength(-this.radius);
|
|
225
|
+
return this.target.add(localOffset);
|
|
226
|
+
}
|
|
227
|
+
degToRad(degrees) {
|
|
228
|
+
return (degrees * Math.PI) / 180;
|
|
229
|
+
}
|
|
230
|
+
clampAngle(angle) {
|
|
231
|
+
const isNegative = angle < 0 ? true : false;
|
|
232
|
+
const absAngle = Math.abs(angle);
|
|
233
|
+
const revolutions = Math.floor(absAngle / 360);
|
|
234
|
+
let angleWithoutRevolutions = absAngle - revolutions * 360;
|
|
235
|
+
if (angleWithoutRevolutions > 180) {
|
|
236
|
+
angleWithoutRevolutions = angleWithoutRevolutions - 360;
|
|
237
|
+
}
|
|
238
|
+
if (isNegative) {
|
|
239
|
+
angleWithoutRevolutions *= -1;
|
|
240
|
+
}
|
|
241
|
+
return angleWithoutRevolutions;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export interface KeyboardController {
|
|
2
|
+
onKeyDown?: (e: KeyboardEvent) => void;
|
|
3
|
+
onKeyUp?: (e: KeyboardEvent) => void;
|
|
4
|
+
}
|
|
3
5
|
export interface KeyboardInput {
|
|
4
6
|
eventElement: HTMLElement | undefined;
|
|
5
7
|
setEventElement: (eventElement: HTMLElement) => void;
|
|
6
|
-
removeEventElement: (eventElement: HTMLElement) => void;
|
|
7
8
|
clearInputElement: () => void;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
removeKeyDownObserver: (observer: OnKeyDown) => void;
|
|
11
|
-
addKeyUpObserver: (observer: OnKeyUp) => void;
|
|
12
|
-
removeKeyUpObserver: (observer: OnKeyUp) => void;
|
|
9
|
+
registerController: (controller: KeyboardController) => void;
|
|
10
|
+
removeController: (controller: KeyboardController) => void;
|
|
13
11
|
}
|
|
14
12
|
export declare function makeKeyboardInput(): KeyboardInput;
|
|
@@ -1,73 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeKeyboardInput = void 0;
|
|
4
|
-
const _1 = require(".");
|
|
5
4
|
function makeKeyboardInput() {
|
|
6
5
|
return new KeyboardInputImp();
|
|
7
6
|
}
|
|
8
7
|
exports.makeKeyboardInput = makeKeyboardInput;
|
|
9
8
|
class KeyboardInputImp {
|
|
10
9
|
constructor() {
|
|
10
|
+
this.controllers = [];
|
|
11
11
|
this._eventElement = undefined;
|
|
12
12
|
this.setEventElement = (element) => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
element.onkeydown = (e) => {
|
|
18
|
-
this.submitKeyDown(e.code);
|
|
19
|
-
};
|
|
20
|
-
element.onkeyup = (e) => {
|
|
21
|
-
this.submitKeyUp(e.code);
|
|
22
|
-
};
|
|
13
|
+
this.clearInputElement();
|
|
14
|
+
element.addEventListener("keydown", this.submitKeyDown, false);
|
|
15
|
+
element.addEventListener("keyup", this.submitKeyUp, false);
|
|
23
16
|
this._eventElement = element;
|
|
24
17
|
};
|
|
25
|
-
this.removeEventElement = (eventElement) => {
|
|
26
|
-
if (this._eventElement !== eventElement)
|
|
27
|
-
return;
|
|
28
|
-
this._eventElement.onkeydown = null;
|
|
29
|
-
this._eventElement.onkeyup = null;
|
|
30
|
-
this._eventElement = undefined;
|
|
31
|
-
};
|
|
32
18
|
this.clearInputElement = () => {
|
|
33
19
|
if (!this._eventElement)
|
|
34
20
|
return;
|
|
35
|
-
this._eventElement.
|
|
36
|
-
this._eventElement.
|
|
37
|
-
this._eventElement = undefined;
|
|
21
|
+
this._eventElement.removeEventListener("keydown", this.submitKeyDown);
|
|
22
|
+
this._eventElement.removeEventListener("keyup", this.submitKeyUp);
|
|
38
23
|
};
|
|
39
|
-
this.downObservers = new _1.ObserverList();
|
|
40
|
-
this.upObservers = new _1.ObserverList();
|
|
41
24
|
this.pressedKeys = [];
|
|
42
|
-
this.submitKeyDown = (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
25
|
+
this.submitKeyDown = (e) => {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
this.controllers.forEach((c) => {
|
|
28
|
+
if (c.onKeyDown) {
|
|
29
|
+
c.onKeyDown(e);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
this.submitKeyUp = (e) => {
|
|
34
|
+
e.preventDefault();
|
|
35
|
+
this.controllers.forEach((c) => {
|
|
36
|
+
if (c.onKeyUp) {
|
|
37
|
+
c.onKeyUp(e);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
this.registerController = (controller) => {
|
|
42
|
+
this.controllers.push(controller);
|
|
43
|
+
};
|
|
44
|
+
this.removeController = (controller) => {
|
|
45
|
+
const index = this.controllers.indexOf(controller);
|
|
52
46
|
if (index >= 0) {
|
|
53
|
-
this.
|
|
47
|
+
this.controllers.splice(index, 1);
|
|
54
48
|
}
|
|
55
|
-
this.upObservers.notify(key);
|
|
56
|
-
};
|
|
57
|
-
this.isKeyPressed = (key) => {
|
|
58
|
-
return this.pressedKeys.includes(key);
|
|
59
|
-
};
|
|
60
|
-
this.addKeyDownObserver = (observer) => {
|
|
61
|
-
this.downObservers.add(observer);
|
|
62
|
-
};
|
|
63
|
-
this.removeKeyDownObserver = (observer) => {
|
|
64
|
-
this.downObservers.remove(observer);
|
|
65
|
-
};
|
|
66
|
-
this.addKeyUpObserver = (observer) => {
|
|
67
|
-
this.upObservers.add(observer);
|
|
68
|
-
};
|
|
69
|
-
this.removeKeyUpObserver = (observer) => {
|
|
70
|
-
this.upObservers.remove(observer);
|
|
71
49
|
};
|
|
72
50
|
}
|
|
73
51
|
get eventElement() {
|
|
@@ -12,4 +12,4 @@ export interface MouseInput {
|
|
|
12
12
|
registerController: (controller: MouseController) => void;
|
|
13
13
|
removeController: (controller: MouseController) => void;
|
|
14
14
|
}
|
|
15
|
-
export declare function
|
|
15
|
+
export declare function makeMouseInput(): MouseInput;
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.makeMouseInput = void 0;
|
|
4
4
|
const _1 = require(".");
|
|
5
|
-
function
|
|
5
|
+
function makeMouseInput() {
|
|
6
6
|
return new MouseInputImp();
|
|
7
7
|
}
|
|
8
|
-
exports.
|
|
8
|
+
exports.makeMouseInput = makeMouseInput;
|
|
9
9
|
class MouseInputImp {
|
|
10
10
|
constructor() {
|
|
11
11
|
this.controllers = [];
|
|
12
12
|
this.maxClickMovement = 5; // pixels
|
|
13
|
+
this.isPressed = false;
|
|
13
14
|
this._eventElement = undefined;
|
|
14
15
|
this.setEventElement = (eventElement) => {
|
|
15
16
|
if (this._eventElement)
|
|
16
17
|
this.clearInputElement();
|
|
17
|
-
eventElement.addEventListener("mousedown", this.onMouseDown);
|
|
18
|
-
eventElement.addEventListener("mouseup", this.onMouseUp);
|
|
19
|
-
eventElement.addEventListener("mousemove", this.onMouseMove);
|
|
20
|
-
eventElement.addEventListener("mouseout", this.onMouseOut);
|
|
21
|
-
eventElement.addEventListener("wheel", this.onWheel);
|
|
18
|
+
eventElement.addEventListener("mousedown", this.onMouseDown, false);
|
|
19
|
+
eventElement.addEventListener("mouseup", this.onMouseUp, false);
|
|
20
|
+
eventElement.addEventListener("mousemove", this.onMouseMove, false);
|
|
21
|
+
eventElement.addEventListener("mouseout", this.onMouseOut, false);
|
|
22
|
+
eventElement.addEventListener("wheel", this.onWheel, false);
|
|
22
23
|
this._eventElement = eventElement;
|
|
23
24
|
};
|
|
24
25
|
this.clearInputElement = () => {
|
|
@@ -41,20 +42,23 @@ class MouseInputImp {
|
|
|
41
42
|
}
|
|
42
43
|
};
|
|
43
44
|
this.onMouseDown = (e) => {
|
|
44
|
-
|
|
45
|
+
e.preventDefault();
|
|
45
46
|
this.controllers.forEach((c) => {
|
|
46
47
|
if (c.onDown) {
|
|
47
48
|
c.onDown(e);
|
|
48
49
|
}
|
|
49
50
|
});
|
|
51
|
+
this.isPressed = true;
|
|
50
52
|
this.pressEvent = e;
|
|
51
53
|
};
|
|
52
54
|
this.onMouseUp = (e) => {
|
|
55
|
+
e.preventDefault();
|
|
53
56
|
this.controllers.forEach((c) => {
|
|
54
57
|
if (c.onUp) {
|
|
55
58
|
c.onUp(e);
|
|
56
59
|
}
|
|
57
60
|
});
|
|
61
|
+
this.isPressed = false;
|
|
58
62
|
if (!this.pressEvent)
|
|
59
63
|
return;
|
|
60
64
|
const deltaX = this.pressEvent.screenX - e.screenX;
|
|
@@ -70,6 +74,7 @@ class MouseInputImp {
|
|
|
70
74
|
this.pressEvent = undefined;
|
|
71
75
|
};
|
|
72
76
|
this.onMouseMove = (e) => {
|
|
77
|
+
e.preventDefault();
|
|
73
78
|
this.controllers.forEach((c) => {
|
|
74
79
|
if (c.onMove) {
|
|
75
80
|
c.onMove(e);
|
|
@@ -85,17 +90,19 @@ class MouseInputImp {
|
|
|
85
90
|
}
|
|
86
91
|
};
|
|
87
92
|
this.onMouseOut = (e) => {
|
|
88
|
-
|
|
93
|
+
e.preventDefault();
|
|
94
|
+
if (!this.isPressed)
|
|
89
95
|
return;
|
|
90
|
-
const mousePos = new _1.Vector2(e.offsetX, e.offsetY);
|
|
91
96
|
this.controllers.forEach((c) => {
|
|
92
97
|
if (c.onUp) {
|
|
93
98
|
c.onUp(e);
|
|
94
99
|
}
|
|
95
100
|
});
|
|
96
101
|
this.pressEvent = undefined;
|
|
102
|
+
this.isPressed = false;
|
|
97
103
|
};
|
|
98
104
|
this.onWheel = (e) => {
|
|
105
|
+
e.preventDefault();
|
|
99
106
|
this.controllers.forEach((c) => {
|
|
100
107
|
if (c.onWheel) {
|
|
101
108
|
c.onWheel(e);
|
|
@@ -3,14 +3,73 @@ export declare type OnOrbitCameraChange = () => void;
|
|
|
3
3
|
export interface CameraLerper {
|
|
4
4
|
cancelLerp: () => void;
|
|
5
5
|
}
|
|
6
|
+
export interface CameraData {
|
|
7
|
+
defaultAlpha?: number;
|
|
8
|
+
defaultBeta?: number;
|
|
9
|
+
defaultRadius?: number;
|
|
10
|
+
defaultTarget?: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
nearClip?: number;
|
|
16
|
+
farClip?: number;
|
|
17
|
+
alphaLimit?: {
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
};
|
|
21
|
+
betaLimit?: {
|
|
22
|
+
min: number;
|
|
23
|
+
max: number;
|
|
24
|
+
};
|
|
25
|
+
radiusLimit?: {
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
};
|
|
29
|
+
targetLimit?: {
|
|
30
|
+
min: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
z: number;
|
|
34
|
+
};
|
|
35
|
+
max: {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
z: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
dollyRollSensitivity?: number;
|
|
42
|
+
dollyPixelSensitivity?: number;
|
|
43
|
+
orbitPixelSensitivity?: number;
|
|
44
|
+
dollyPinchSensitivity?: number;
|
|
45
|
+
}
|
|
6
46
|
export interface OrbitCamera {
|
|
7
47
|
alpha: number;
|
|
8
48
|
beta: number;
|
|
9
49
|
radius: number;
|
|
10
50
|
target: Vector3;
|
|
51
|
+
nearClip: number;
|
|
52
|
+
farClip: number;
|
|
53
|
+
defaultAlpha: number;
|
|
54
|
+
defaultBeta: number;
|
|
55
|
+
defaultRadius: number;
|
|
56
|
+
defaultTarget: Vector3;
|
|
57
|
+
dollyRollSensitivity: number;
|
|
58
|
+
dollyPixelSensitivity: number;
|
|
59
|
+
dollyPinchSensitivity: number;
|
|
60
|
+
orbitPixelSensitivity: number;
|
|
61
|
+
setAlphaLimits: (min: number, max: number) => void;
|
|
62
|
+
clearAlphaLimits: () => void;
|
|
63
|
+
setBetaLimits: (min: number, max: number) => void;
|
|
64
|
+
clearBetaLimits: () => void;
|
|
65
|
+
setRadiusLimits: (min: number, max: number) => void;
|
|
66
|
+
clearRadiusLimits: () => void;
|
|
67
|
+
setTargetLimits: (min: Vector3, max: Vector3) => void;
|
|
68
|
+
clearTargetLimits: () => void;
|
|
11
69
|
registerLerp: (lerper: CameraLerper) => void;
|
|
12
70
|
lerpCompleted: () => void;
|
|
13
71
|
cancelLerp: () => void;
|
|
72
|
+
applyData: (data: CameraData) => void;
|
|
14
73
|
addObserver: (observer: OnOrbitCameraChange) => void;
|
|
15
74
|
removeObserver: (observer: OnOrbitCameraChange) => void;
|
|
16
75
|
}
|