@vived/app 2.8.0 → 2.10.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.
Files changed (49) hide show
  1. package/lib/Entities/Babylon.d.ts +14 -0
  2. package/lib/Entities/Babylon.js +18 -0
  3. package/lib/Entities/FocusCamera.d.ts +70 -0
  4. package/lib/Entities/FocusCamera.js +243 -0
  5. package/lib/Entities/MouseInput.d.ts +15 -0
  6. package/lib/Entities/MouseInput.js +116 -0
  7. package/lib/Entities/MouseSceneInput.d.ts +5 -14
  8. package/lib/Entities/MouseSceneInput.js +6 -24
  9. package/lib/Entities/OrbitCamera.d.ts +59 -0
  10. package/lib/Entities/OrbitCamera.js +173 -4
  11. package/lib/Entities/TouchInput.d.ts +20 -0
  12. package/lib/Entities/TouchInput.js +111 -0
  13. package/lib/Entities/index.d.ts +3 -2
  14. package/lib/Entities/index.js +3 -2
  15. package/lib/Interface/Controllers/makeAppHandler.d.ts +1 -1
  16. package/lib/Interface/Controllers/makeAppHandler.js +12 -10
  17. package/lib/PresentationManagers/FocusCameraPM.d.ts +14 -0
  18. package/lib/PresentationManagers/FocusCameraPM.js +31 -0
  19. package/lib/PresentationManagers/index.d.ts +1 -1
  20. package/lib/PresentationManagers/index.js +1 -1
  21. package/lib/UseCases/FocusCamera/BumpDollyFocusCamera.d.ts +16 -0
  22. package/lib/UseCases/FocusCamera/BumpDollyFocusCamera.js +63 -0
  23. package/lib/UseCases/FocusCamera/LerpFocusCamera.d.ts +36 -0
  24. package/lib/UseCases/FocusCamera/LerpFocusCamera.js +71 -0
  25. package/lib/UseCases/FocusCamera/PinchDollyFocusCamera.d.ts +10 -0
  26. package/lib/UseCases/FocusCamera/PinchDollyFocusCamera.js +35 -0
  27. package/lib/UseCases/FocusCamera/PixelDollyFocusCamera.d.ts +10 -0
  28. package/lib/UseCases/FocusCamera/PixelDollyFocusCamera.js +36 -0
  29. package/lib/UseCases/FocusCamera/PixelOrbitFocusCamera.d.ts +10 -0
  30. package/lib/UseCases/FocusCamera/PixelOrbitFocusCamera.js +24 -0
  31. package/lib/UseCases/FocusCamera/PixelPlanePanFocusCamera.d.ts +10 -0
  32. package/lib/UseCases/FocusCamera/PixelPlanePanFocusCamera.js +32 -0
  33. package/lib/UseCases/FocusCamera/SerializeFocusCamera.d.ts +22 -0
  34. package/lib/UseCases/FocusCamera/SerializeFocusCamera.js +81 -0
  35. package/lib/UseCases/FocusCamera/index.d.ts +7 -0
  36. package/lib/UseCases/FocusCamera/index.js +19 -0
  37. package/lib/UseCases/OrbitCamera/LerpOrbitCamera.d.ts +36 -0
  38. package/lib/UseCases/OrbitCamera/LerpOrbitCamera.js +71 -0
  39. package/lib/UseCases/OrbitCamera/PixelDolly_OrbitCamera.d.ts +9 -0
  40. package/lib/UseCases/OrbitCamera/PixelDolly_OrbitCamera.js +31 -0
  41. package/lib/UseCases/OrbitCamera/PixelPlanePan_OrbitCamera.d.ts +10 -0
  42. package/lib/UseCases/OrbitCamera/PixelPlanePan_OrbitCamera.js +31 -0
  43. package/lib/UseCases/OrbitCamera/SerializeOrbitCamera.d.ts +22 -0
  44. package/lib/UseCases/OrbitCamera/SerializeOrbitCamera.js +81 -0
  45. package/lib/UseCases/OrbitCamera/index.d.ts +4 -0
  46. package/lib/UseCases/OrbitCamera/index.js +16 -0
  47. package/lib/UseCases/index.d.ts +1 -2
  48. package/lib/UseCases/index.js +1 -2
  49. package/package.json +1 -1
@@ -1,16 +1,30 @@
1
+ import { ParametricLine, Vector3 } from ".";
2
+ import { Vector2 } from "./Vector2";
1
3
  export declare type OnBabylonChange = () => void;
4
+ export interface ScenePick {
5
+ mouseRay: ParametricLine;
6
+ hit: boolean;
7
+ worldPickPoint?: Vector3;
8
+ objectPickMeta?: object;
9
+ }
10
+ export declare type ScenePicker = (pixelPos: Vector2) => ScenePick;
11
+ export declare type SceneRayer = (pixelPos: Vector2) => ParametricLine;
2
12
  export interface Babylon {
3
13
  engine: unknown;
4
14
  scene: unknown;
5
15
  workingCanvas?: HTMLCanvasElement;
6
16
  showInspector: boolean;
7
17
  renderCanvas?: HTMLCanvasElement;
18
+ scenePick: (pixelPos: Vector2) => ScenePick;
19
+ sceneRay: (pixelPos: Vector2) => ParametricLine;
8
20
  updateCanvasSize: () => void;
9
21
  submitRenderCanvas: (canvas: HTMLCanvasElement) => void;
10
22
  clearRenderCanvas: () => void;
11
23
  registerResizeEnging: (resizeEngine: () => void) => void;
12
24
  registerStartRendering: (startRendering: (canvas: HTMLCanvasElement) => void) => void;
13
25
  registerStopRendering: (stopRendering: (canvas: HTMLCanvasElement) => void) => void;
26
+ registerScenePicker: (picker: ScenePicker) => void;
27
+ registerSceneRayer: (rayer: SceneRayer) => void;
14
28
  addObserver: (observer: OnBabylonChange) => void;
15
29
  removeObserver: (observer: OnBabylonChange) => void;
16
30
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeBabylon = void 0;
4
+ const _1 = require(".");
4
5
  const MemoizedBoolean_1 = require("./MemoizedBoolean");
5
6
  const MemoizedVector2_1 = require("./MemoizedVector2");
6
7
  const ObserverList_1 = require("./ObserverList");
@@ -11,6 +12,17 @@ function makeBabylon() {
11
12
  exports.makeBabylon = makeBabylon;
12
13
  class BabylonImp {
13
14
  constructor() {
15
+ this.scenePick = () => {
16
+ console.warn("orignal scene picker");
17
+ return {
18
+ mouseRay: _1.ParametricLine.Forward(),
19
+ hit: false,
20
+ };
21
+ };
22
+ this.sceneRay = () => {
23
+ console.warn("orignal scene ray");
24
+ return _1.ParametricLine.Forward();
25
+ };
14
26
  this.observers = new ObserverList_1.ObserverList();
15
27
  this.updateCanvasSize = () => {
16
28
  if (!this.workingCanvas)
@@ -60,6 +72,12 @@ class BabylonImp {
60
72
  this.removeObserver = (observer) => {
61
73
  this.observers.remove(observer);
62
74
  };
75
+ this.registerScenePicker = (picker) => {
76
+ this.scenePick = picker;
77
+ };
78
+ this.registerSceneRayer = (rayer) => {
79
+ this.sceneRay = rayer;
80
+ };
63
81
  this.memoizedShowInspector = new MemoizedBoolean_1.MemoizedBoolean(false, this.observers.notify);
64
82
  this.memoizedCanvasSize = new MemoizedVector2_1.MemoizedVector2(Vector2_1.Vector2.One(), this.observers.notify);
65
83
  }
@@ -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
+ }
@@ -0,0 +1,15 @@
1
+ export interface MouseController {
2
+ onClick?: (e: MouseEvent) => void;
3
+ onDown?: (e: MouseEvent) => void;
4
+ onUp?: (e: MouseEvent) => void;
5
+ onMove?: (e: MouseEvent) => void;
6
+ onWheel?: (e: WheelEvent) => void;
7
+ }
8
+ export interface MouseInput {
9
+ eventElement: HTMLElement | undefined;
10
+ setEventElement: (eventElement: HTMLElement) => void;
11
+ clearInputElement: () => void;
12
+ registerController: (controller: MouseController) => void;
13
+ removeController: (controller: MouseController) => void;
14
+ }
15
+ export declare function makeMouseInput(): MouseInput;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMouseInput = void 0;
4
+ const _1 = require(".");
5
+ function makeMouseInput() {
6
+ return new MouseInputImp();
7
+ }
8
+ exports.makeMouseInput = makeMouseInput;
9
+ class MouseInputImp {
10
+ constructor() {
11
+ this.controllers = [];
12
+ this.maxClickMovement = 5; // pixels
13
+ this.isPressed = false;
14
+ this._eventElement = undefined;
15
+ this.setEventElement = (eventElement) => {
16
+ if (this._eventElement)
17
+ this.clearInputElement();
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);
23
+ this._eventElement = eventElement;
24
+ };
25
+ this.clearInputElement = () => {
26
+ if (!this._eventElement)
27
+ return;
28
+ this._eventElement.removeEventListener("mousedown", this.onMouseDown);
29
+ this._eventElement.removeEventListener("mouseup", this.onMouseUp);
30
+ this._eventElement.removeEventListener("mousemove", this.onMouseMove);
31
+ this._eventElement.removeEventListener("mouseout", this.onMouseOut);
32
+ this._eventElement.removeEventListener("wheel", this.onWheel);
33
+ this._eventElement = undefined;
34
+ };
35
+ this.registerController = (controller) => {
36
+ this.controllers.push(controller);
37
+ };
38
+ this.removeController = (controller) => {
39
+ const index = this.controllers.indexOf(controller);
40
+ if (index >= 0) {
41
+ this.controllers.splice(index, 1);
42
+ }
43
+ };
44
+ this.onMouseDown = (e) => {
45
+ e.preventDefault();
46
+ this.controllers.forEach((c) => {
47
+ if (c.onDown) {
48
+ c.onDown(e);
49
+ }
50
+ });
51
+ this.isPressed = true;
52
+ this.pressEvent = e;
53
+ };
54
+ this.onMouseUp = (e) => {
55
+ e.preventDefault();
56
+ this.controllers.forEach((c) => {
57
+ if (c.onUp) {
58
+ c.onUp(e);
59
+ }
60
+ });
61
+ this.isPressed = false;
62
+ if (!this.pressEvent)
63
+ return;
64
+ const deltaX = this.pressEvent.screenX - e.screenX;
65
+ const deltaY = this.pressEvent.screenY - e.screenY;
66
+ const delta = new _1.Vector2(deltaX, deltaY);
67
+ if (delta.magnitued < this.maxClickMovement) {
68
+ this.controllers.forEach((c) => {
69
+ if (c.onClick) {
70
+ c.onClick(e);
71
+ }
72
+ });
73
+ }
74
+ this.pressEvent = undefined;
75
+ };
76
+ this.onMouseMove = (e) => {
77
+ e.preventDefault();
78
+ this.controllers.forEach((c) => {
79
+ if (c.onMove) {
80
+ c.onMove(e);
81
+ }
82
+ });
83
+ if (!this.pressEvent)
84
+ return;
85
+ const deltaX = this.pressEvent.screenX - e.screenX;
86
+ const deltaY = this.pressEvent.screenY - e.screenY;
87
+ const delta = new _1.Vector2(deltaX, deltaY);
88
+ if (delta.magnitued > this.maxClickMovement) {
89
+ this.pressEvent = undefined;
90
+ }
91
+ };
92
+ this.onMouseOut = (e) => {
93
+ e.preventDefault();
94
+ if (!this.isPressed)
95
+ return;
96
+ this.controllers.forEach((c) => {
97
+ if (c.onUp) {
98
+ c.onUp(e);
99
+ }
100
+ });
101
+ this.pressEvent = undefined;
102
+ this.isPressed = false;
103
+ };
104
+ this.onWheel = (e) => {
105
+ e.preventDefault();
106
+ this.controllers.forEach((c) => {
107
+ if (c.onWheel) {
108
+ c.onWheel(e);
109
+ }
110
+ });
111
+ };
112
+ }
113
+ get eventElement() {
114
+ return this._eventElement;
115
+ }
116
+ }
@@ -1,23 +1,14 @@
1
- import { ParametricLine, Vector2, Vector3 } from ".";
2
1
  export interface MouseController {
3
- onClick?: (e: MouseEvent, scenePick: ScenePick) => void;
4
- onDown?: (e: MouseEvent, scenePick: ScenePick) => void;
5
- onUp?: (e: MouseEvent, scenePick: ScenePick) => void;
6
- onMove?: (e: MouseEvent, scenePick: ScenePick) => void;
7
- onWheel?: (e: WheelEvent, scenePick: ScenePick) => void;
2
+ onClick?: (e: MouseEvent) => void;
3
+ onDown?: (e: MouseEvent) => void;
4
+ onUp?: (e: MouseEvent) => void;
5
+ onMove?: (e: MouseEvent) => void;
6
+ onWheel?: (e: WheelEvent) => void;
8
7
  }
9
- export interface ScenePick {
10
- mouseRay: ParametricLine;
11
- hit: boolean;
12
- worldPickPoint?: Vector3;
13
- objectPickMeta?: object;
14
- }
15
- export declare type ScenePicker = (mousePos: Vector2) => ScenePick;
16
8
  export interface MouseSceneInput {
17
9
  eventElement: HTMLElement | undefined;
18
10
  setEventElement: (eventElement: HTMLElement) => void;
19
11
  clearInputElement: () => void;
20
- registerScenePicker: (picker: ScenePicker) => void;
21
12
  registerController: (controller: MouseController) => void;
22
13
  removeController: (controller: MouseController) => void;
23
14
  }
@@ -9,13 +9,6 @@ exports.makeMouseSceneInput = makeMouseSceneInput;
9
9
  class MouseSceneInputImp {
10
10
  constructor() {
11
11
  this.controllers = [];
12
- this.scenePicker = (mousePos) => {
13
- console.log("orignal scene picker");
14
- return {
15
- mouseRay: _1.ParametricLine.Forward(),
16
- hit: false,
17
- };
18
- };
19
12
  this.maxClickMovement = 5; // pixels
20
13
  this._eventElement = undefined;
21
14
  this.setEventElement = (eventElement) => {
@@ -47,25 +40,19 @@ class MouseSceneInputImp {
47
40
  this.controllers.splice(index, 1);
48
41
  }
49
42
  };
50
- this.registerScenePicker = (picker) => {
51
- this.scenePicker = picker;
52
- };
53
43
  this.onMouseDown = (e) => {
54
44
  const mousePos = new _1.Vector2(e.offsetX, e.offsetY);
55
- const pick = this.scenePicker(mousePos);
56
45
  this.controllers.forEach((c) => {
57
46
  if (c.onDown) {
58
- c.onDown(e, pick);
47
+ c.onDown(e);
59
48
  }
60
49
  });
61
50
  this.pressEvent = e;
62
51
  };
63
52
  this.onMouseUp = (e) => {
64
- const mousePos = new _1.Vector2(e.offsetX, e.offsetY);
65
- const pick = this.scenePicker(mousePos);
66
53
  this.controllers.forEach((c) => {
67
54
  if (c.onUp) {
68
- c.onUp(e, pick);
55
+ c.onUp(e);
69
56
  }
70
57
  });
71
58
  if (!this.pressEvent)
@@ -76,18 +63,16 @@ class MouseSceneInputImp {
76
63
  if (delta.magnitued < this.maxClickMovement) {
77
64
  this.controllers.forEach((c) => {
78
65
  if (c.onClick) {
79
- c.onClick(e, pick);
66
+ c.onClick(e);
80
67
  }
81
68
  });
82
69
  }
83
70
  this.pressEvent = undefined;
84
71
  };
85
72
  this.onMouseMove = (e) => {
86
- const mousePos = new _1.Vector2(e.offsetX, e.offsetY);
87
- const pick = this.scenePicker(mousePos);
88
73
  this.controllers.forEach((c) => {
89
74
  if (c.onMove) {
90
- c.onMove(e, pick);
75
+ c.onMove(e);
91
76
  }
92
77
  });
93
78
  if (!this.pressEvent)
@@ -103,20 +88,17 @@ class MouseSceneInputImp {
103
88
  if (!this.pressEvent)
104
89
  return;
105
90
  const mousePos = new _1.Vector2(e.offsetX, e.offsetY);
106
- const pick = this.scenePicker(mousePos);
107
91
  this.controllers.forEach((c) => {
108
92
  if (c.onUp) {
109
- c.onUp(e, pick);
93
+ c.onUp(e);
110
94
  }
111
95
  });
112
96
  this.pressEvent = undefined;
113
97
  };
114
98
  this.onWheel = (e) => {
115
- const mousePos = new _1.Vector2(e.offsetX, e.offsetY);
116
- const pick = this.scenePicker(mousePos);
117
99
  this.controllers.forEach((c) => {
118
100
  if (c.onWheel) {
119
- c.onWheel(e, pick);
101
+ c.onWheel(e);
120
102
  }
121
103
  });
122
104
  };