@vived/app 3.4.0 → 3.5.1

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 (79) hide show
  1. package/lib/AppObjectComponents/Dispatcher/Factories/makeBasicDispatcher.js +8 -0
  2. package/lib/AppObjectComponents/Dispatcher/UC/GoToNextStateUC.d.ts +10 -0
  3. package/lib/AppObjectComponents/Dispatcher/UC/GoToNextStateUC.js +44 -0
  4. package/lib/AppObjectComponents/Dispatcher/UC/GoToPreviousStateUC.d.ts +10 -0
  5. package/lib/AppObjectComponents/Dispatcher/UC/GoToPreviousStateUC.js +44 -0
  6. package/lib/AppObjectComponents/Dispatcher/UC/HasNextStateUC.d.ts +10 -0
  7. package/lib/AppObjectComponents/Dispatcher/UC/HasNextStateUC.js +54 -0
  8. package/lib/AppObjectComponents/Dispatcher/UC/HasPreviousStateUC.d.ts +10 -0
  9. package/lib/AppObjectComponents/Dispatcher/UC/HasPreviousStateUC.js +54 -0
  10. package/lib/AppObjectComponents/Dispatcher/index.d.ts +4 -0
  11. package/lib/AppObjectComponents/Dispatcher/index.js +4 -0
  12. package/lib/AppObjectComponents/StoredView/Entities/StoredView.d.ts +13 -0
  13. package/lib/AppObjectComponents/StoredView/Entities/StoredView.js +64 -0
  14. package/lib/AppObjectComponents/StoredView/UC/SerializeStoredView.d.ts +27 -0
  15. package/lib/AppObjectComponents/StoredView/UC/SerializeStoredView.js +82 -0
  16. package/lib/AppObjectComponents/StoredView/index.d.ts +2 -0
  17. package/lib/AppObjectComponents/StoredView/index.js +14 -0
  18. package/lib/AppObjectComponents/Transform3D/UseCases/StickTransform3D.js +10 -2
  19. package/lib/Entities/AppDispatcher.d.ts +0 -4
  20. package/lib/Entities/AppDispatcher.js +0 -38
  21. package/lib/Entities/FocusCamera.d.ts +70 -0
  22. package/lib/Entities/FocusCamera.js +272 -0
  23. package/lib/Entities/MemoizedBoolean.d.ts +8 -0
  24. package/lib/Entities/MemoizedBoolean.js +22 -0
  25. package/lib/Entities/MemoizedNumber.d.ts +8 -0
  26. package/lib/Entities/MemoizedNumber.js +22 -0
  27. package/lib/Entities/MemoizedQuaternion.d.ts +9 -0
  28. package/lib/Entities/MemoizedQuaternion.js +23 -0
  29. package/lib/Entities/MemoizedString.d.ts +8 -0
  30. package/lib/Entities/MemoizedString.js +22 -0
  31. package/lib/Entities/MemoizedVector2.d.ts +9 -0
  32. package/lib/Entities/MemoizedVector2.js +23 -0
  33. package/lib/Entities/MemoizedVector3.d.ts +9 -0
  34. package/lib/Entities/MemoizedVector3.js +23 -0
  35. package/lib/Entities/MeshModel.d.ts +68 -0
  36. package/lib/Entities/MeshModel.js +174 -0
  37. package/lib/Entities/ModelObject.d.ts +10 -0
  38. package/lib/Entities/ModelObject.js +42 -0
  39. package/lib/PresentationManagers/FocusCameraPM.d.ts +15 -0
  40. package/lib/PresentationManagers/FocusCameraPM.js +31 -0
  41. package/lib/PresentationManagers/FocusCameraPosRotPM.d.ts +13 -0
  42. package/lib/PresentationManagers/FocusCameraPosRotPM.js +28 -0
  43. package/lib/PresentationManagers/SceneModel/SceneMeshOverlayPM.d.ts +15 -0
  44. package/lib/PresentationManagers/SceneModel/SceneMeshOverlayPM.js +34 -0
  45. package/lib/UseCases/FocusCamera/BumpDollyFocusCamera.d.ts +17 -0
  46. package/lib/UseCases/FocusCamera/BumpDollyFocusCamera.js +64 -0
  47. package/lib/UseCases/FocusCamera/LerpFocusCamera.d.ts +36 -0
  48. package/lib/UseCases/FocusCamera/LerpFocusCamera.js +71 -0
  49. package/lib/UseCases/FocusCamera/PinchDollyFocusCamera.d.ts +11 -0
  50. package/lib/UseCases/FocusCamera/PinchDollyFocusCamera.js +36 -0
  51. package/lib/UseCases/FocusCamera/PixelDollyFocusCamera.d.ts +11 -0
  52. package/lib/UseCases/FocusCamera/PixelDollyFocusCamera.js +36 -0
  53. package/lib/UseCases/FocusCamera/PixelOrbitFocusCamera.d.ts +11 -0
  54. package/lib/UseCases/FocusCamera/PixelOrbitFocusCamera.js +26 -0
  55. package/lib/UseCases/FocusCamera/PixelPlanePanFocusCamera.d.ts +11 -0
  56. package/lib/UseCases/FocusCamera/PixelPlanePanFocusCamera.js +33 -0
  57. package/lib/UseCases/FocusCamera/SerializeFocusCamera.d.ts +22 -0
  58. package/lib/UseCases/FocusCamera/SerializeFocusCamera.js +81 -0
  59. package/lib/UseCases/FocusCamera/index.d.ts +7 -0
  60. package/lib/UseCases/FocusCamera/index.js +19 -0
  61. package/lib/UseCases/SceneModel/SerializeActiveModel.d.ts +18 -0
  62. package/lib/UseCases/SceneModel/SerializeActiveModel.js +74 -0
  63. package/lib/UseCases/SceneModel/SetMeshesEnabledHook.d.ts +7 -0
  64. package/lib/UseCases/SceneModel/SetMeshesEnabledHook.js +22 -0
  65. package/lib/UseCases/SceneModel/SetSceneModelMeshOverlayColor.d.ts +2 -0
  66. package/lib/UseCases/SceneModel/SetSceneModelMeshOverlayColor.js +13 -0
  67. package/lib/UseCases/SceneModel/index.d.ts +3 -0
  68. package/lib/UseCases/SceneModel/index.js +3 -0
  69. package/lib/UseCases/SceneModel/loadNewModel.d.ts +2 -2
  70. package/lib/UseCases/SceneModel/loadNewModel.js +17 -15
  71. package/lib/UseCases/SceneObjects/PeelSceneObject.d.ts +18 -0
  72. package/lib/UseCases/SceneObjects/PeelSceneObject.js +61 -0
  73. package/lib/UseCases/SceneObjects/index.d.ts +1 -0
  74. package/lib/UseCases/SceneObjects/index.js +13 -0
  75. package/package.json +1 -1
  76. package/lib/AppObject/IsEnabledPM.d.ts +0 -11
  77. package/lib/AppObject/IsEnabledPM.js +0 -29
  78. package/lib/AppObjectComponents/Transform3D/UseCases/getStickUC.d.ts +0 -3
  79. package/lib/AppObjectComponents/Transform3D/UseCases/getStickUC.js +0 -8
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMeshModel = exports.MeshModel = void 0;
4
+ const ValueObjects_1 = require("../ValueObjects");
5
+ const MemoizedNumber_1 = require("./MemoizedNumber");
6
+ const MemoizedString_1 = require("./MemoizedString");
7
+ const MemoizedVector3_1 = require("./MemoizedVector3");
8
+ const ModelObject_1 = require("./ModelObject");
9
+ const ObservableEntity_1 = require("./ObservableEntity");
10
+ class MeshModel extends ObservableEntity_1.ObservableEntity {
11
+ }
12
+ exports.MeshModel = MeshModel;
13
+ function makeMeshModel() {
14
+ return new MeshModelImp();
15
+ }
16
+ exports.makeMeshModel = makeMeshModel;
17
+ class MeshModelImp extends MeshModel {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.objects = [];
21
+ this._modelFile = undefined;
22
+ this._memoizedVersion = new MemoizedNumber_1.MemoizedNumber(0, this.notify);
23
+ this._memoizedName = new MemoizedString_1.MemoizedString("", this.notify);
24
+ this._memoizedDescription = new MemoizedString_1.MemoizedString("", this.notify);
25
+ this._image = undefined;
26
+ this._memoizedBoundsMin = new MemoizedVector3_1.MemoizedVector3(ValueObjects_1.Vector3.Zero(), this.notify);
27
+ this._memoizedBoundsMax = new MemoizedVector3_1.MemoizedVector3(ValueObjects_1.Vector3.Zero(), this.notify);
28
+ this._memoizedDefaultPosition = new MemoizedVector3_1.MemoizedVector3(ValueObjects_1.Vector3.Zero(), this.notify);
29
+ this._defaultRotation = ValueObjects_1.Quaternion.Identity();
30
+ this._memoizedDefaultScale = new MemoizedNumber_1.MemoizedNumber(1, this.notify);
31
+ this._imageURL = undefined;
32
+ }
33
+ hasObject(id) {
34
+ return !!this.objects.find((obj) => obj.id === id);
35
+ }
36
+ getObjectById(id) {
37
+ return this.objects.find((obj) => obj.id === id);
38
+ }
39
+ getObjectByPath(path) {
40
+ let rVal;
41
+ this.objects.forEach((obj) => {
42
+ if (obj.meshPaths.includes(path)) {
43
+ rVal = obj;
44
+ }
45
+ });
46
+ return rVal;
47
+ }
48
+ addObject(object) {
49
+ object.addObserver(this.notify);
50
+ this.objects.push(object);
51
+ this.notify();
52
+ }
53
+ deleteObject(id) {
54
+ this.objects = this.objects.filter((obj) => {
55
+ if (obj.id === id) {
56
+ obj.removeObserver(this.notify);
57
+ return false;
58
+ }
59
+ return true;
60
+ });
61
+ this.notify();
62
+ }
63
+ get modelFile() {
64
+ return this._modelFile;
65
+ }
66
+ set modelFile(file) {
67
+ this._modelFile = file;
68
+ this.notify();
69
+ }
70
+ get version() {
71
+ return this._memoizedVersion.val;
72
+ }
73
+ set version(version) {
74
+ this._memoizedVersion.val = version;
75
+ }
76
+ get name() {
77
+ return this._memoizedName.val;
78
+ }
79
+ set name(name) {
80
+ this._memoizedName.val = name;
81
+ }
82
+ get description() {
83
+ return this._memoizedDescription.val;
84
+ }
85
+ set description(description) {
86
+ this._memoizedDescription.val = description;
87
+ }
88
+ get image() {
89
+ return this._image;
90
+ }
91
+ set image(image) {
92
+ if (!this._image && !image)
93
+ return;
94
+ if (this._image && image && this._image.size === image.size)
95
+ return;
96
+ this._image = image;
97
+ if (image === undefined) {
98
+ this._imageURL = undefined;
99
+ }
100
+ else {
101
+ this._imageURL = URL.createObjectURL(image);
102
+ }
103
+ this.notify();
104
+ }
105
+ get imageURL() {
106
+ return this._imageURL;
107
+ }
108
+ get bounds_min() {
109
+ return this._memoizedBoundsMin.val;
110
+ }
111
+ set bounds_min(bounds_min) {
112
+ this._memoizedBoundsMin.val = bounds_min;
113
+ }
114
+ get bounds_max() {
115
+ return this._memoizedBoundsMax.val;
116
+ }
117
+ set bounds_max(bounds_max) {
118
+ this._memoizedBoundsMax.val = bounds_max;
119
+ }
120
+ get defaultPosition() {
121
+ return this._memoizedDefaultPosition.val;
122
+ }
123
+ set defaultPosition(position) {
124
+ this._memoizedDefaultPosition.val = position;
125
+ }
126
+ get defaultRotation() {
127
+ return this._defaultRotation;
128
+ }
129
+ set defaultRotation(rotation) {
130
+ if (ValueObjects_1.Quaternion.Equal(this._defaultRotation, rotation))
131
+ return;
132
+ this._defaultRotation = rotation;
133
+ this.notify();
134
+ }
135
+ get defaultScale() {
136
+ return this._memoizedDefaultScale.val;
137
+ }
138
+ set defaultScale(scale) {
139
+ this._memoizedDefaultScale.val = scale;
140
+ }
141
+ getData() {
142
+ return {
143
+ version: this.version,
144
+ objects: this.objects.map((obj) => ({
145
+ id: obj.id,
146
+ label: obj.label,
147
+ meshPaths: [...obj.meshPaths],
148
+ })),
149
+ name: this.name,
150
+ description: this.description,
151
+ bounds_min: this.bounds_min,
152
+ bounds_max: this.bounds_max,
153
+ defaultPosition: this.defaultPosition,
154
+ defaultRotation: this.defaultRotation,
155
+ defaultScale: this.defaultScale,
156
+ };
157
+ }
158
+ setData(data) {
159
+ this.version = data.version;
160
+ data.objects.forEach((obj) => {
161
+ const modelObject = ModelObject_1.makeModelObject(obj.id);
162
+ modelObject.label = obj.label;
163
+ obj.meshPaths.forEach((path) => modelObject.addMeshPath(path));
164
+ this.addObject(modelObject);
165
+ });
166
+ this.name = data.name;
167
+ this.description = data.description;
168
+ this.bounds_min = data.bounds_min;
169
+ this.bounds_max = data.bounds_max;
170
+ this.defaultPosition = data.defaultPosition;
171
+ this.defaultRotation = data.defaultRotation;
172
+ this.defaultScale = data.defaultScale;
173
+ }
174
+ }
@@ -0,0 +1,10 @@
1
+ import { ObservableEntity } from "./ObservableEntity";
2
+ export declare abstract class ModelObject extends ObservableEntity {
3
+ abstract readonly id: string;
4
+ abstract get label(): string;
5
+ abstract set label(label: string);
6
+ abstract get meshPaths(): string[];
7
+ abstract addMeshPath(path: string): void;
8
+ abstract removeMeshPath(path: string): void;
9
+ }
10
+ export declare function makeModelObject(id: string): ModelObject;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeModelObject = exports.ModelObject = void 0;
4
+ const MemoizedString_1 = require("./MemoizedString");
5
+ const ObservableEntity_1 = require("./ObservableEntity");
6
+ class ModelObject extends ObservableEntity_1.ObservableEntity {
7
+ }
8
+ exports.ModelObject = ModelObject;
9
+ function makeModelObject(id) {
10
+ return new ModelObjectImp(id);
11
+ }
12
+ exports.makeModelObject = makeModelObject;
13
+ class ModelObjectImp extends ModelObject {
14
+ constructor(id) {
15
+ super();
16
+ this.memoizedLabel = new MemoizedString_1.MemoizedString("", this.notify);
17
+ this._meshPaths = new Set([]);
18
+ this.id = id;
19
+ }
20
+ get label() {
21
+ return this.memoizedLabel.val;
22
+ }
23
+ set label(label) {
24
+ this.memoizedLabel.val = label;
25
+ }
26
+ get meshPaths() {
27
+ return Array.from(this._meshPaths);
28
+ }
29
+ addMeshPath(path) {
30
+ if (this._meshPaths.has(path)) {
31
+ return;
32
+ }
33
+ this._meshPaths.add(path);
34
+ this.notify();
35
+ }
36
+ removeMeshPath(path) {
37
+ if (this._meshPaths.has(path)) {
38
+ this._meshPaths.delete(path);
39
+ this.notify();
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,15 @@
1
+ import { FocusCamera } from "../Entities";
2
+ import { Vector3 } from "../ValueObjects";
3
+ export interface FocusCameraVM {
4
+ alphaEuler: Vector3;
5
+ betaEuler: Vector3;
6
+ cameraLocalPosition: Vector3;
7
+ target: Vector3;
8
+ }
9
+ export declare class FocusCameraPM {
10
+ private orbitCam;
11
+ private view;
12
+ dispose(): void;
13
+ private doUpdateView;
14
+ constructor(orbitCamera: FocusCamera, view: (vm: FocusCameraVM) => void);
15
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FocusCameraPM = void 0;
4
+ const Utilities_1 = require("../Utilities");
5
+ const ValueObjects_1 = require("../ValueObjects");
6
+ class FocusCameraPM {
7
+ constructor(orbitCamera, view) {
8
+ this.doUpdateView = () => {
9
+ const { alpha, beta, radius, target } = this.orbitCam;
10
+ const alphaRadians = Utilities_1.degreesToRadians(alpha);
11
+ const alphaEuler = new ValueObjects_1.Vector3(0, alphaRadians, 0);
12
+ const betaRadians = Utilities_1.degreesToRadians(beta);
13
+ const betaEuler = new ValueObjects_1.Vector3(betaRadians, 0, 0);
14
+ const cameraLocalPosition = new ValueObjects_1.Vector3(0, 0, -radius);
15
+ this.view({
16
+ alphaEuler,
17
+ betaEuler,
18
+ cameraLocalPosition,
19
+ target,
20
+ });
21
+ };
22
+ this.orbitCam = orbitCamera;
23
+ this.view = view;
24
+ this.doUpdateView();
25
+ this.orbitCam.addObserver(this.doUpdateView);
26
+ }
27
+ dispose() {
28
+ this.orbitCam.removeObserver(this.doUpdateView);
29
+ }
30
+ }
31
+ exports.FocusCameraPM = FocusCameraPM;
@@ -0,0 +1,13 @@
1
+ import { FocusCamera } from "../Entities";
2
+ import { Vector3 } from "../ValueObjects";
3
+ export interface FocusCameraPosRotVM {
4
+ position: Vector3;
5
+ rotation: Vector3;
6
+ }
7
+ export declare class FocusCameraPosRotPM {
8
+ private focusCam;
9
+ private view;
10
+ dispose(): void;
11
+ private doUpdateView;
12
+ constructor(orbitCamera: FocusCamera, view: (vm: FocusCameraPosRotVM) => void);
13
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FocusCameraPosRotPM = void 0;
4
+ const Utilities_1 = require("../Utilities");
5
+ const ValueObjects_1 = require("../ValueObjects");
6
+ class FocusCameraPosRotPM {
7
+ constructor(orbitCamera, view) {
8
+ this.doUpdateView = () => {
9
+ const { alpha, beta } = this.focusCam;
10
+ const alphaRadians = Utilities_1.degreesToRadians(alpha);
11
+ const betaRadians = Utilities_1.degreesToRadians(beta);
12
+ const position = this.focusCam.cameraPosition;
13
+ const rotation = new ValueObjects_1.Vector3(betaRadians, alphaRadians, 0);
14
+ this.view({
15
+ position,
16
+ rotation,
17
+ });
18
+ };
19
+ this.focusCam = orbitCamera;
20
+ this.view = view;
21
+ this.doUpdateView();
22
+ this.focusCam.addObserver(this.doUpdateView);
23
+ }
24
+ dispose() {
25
+ this.focusCam.removeObserver(this.doUpdateView);
26
+ }
27
+ }
28
+ exports.FocusCameraPosRotPM = FocusCameraPosRotPM;
@@ -0,0 +1,15 @@
1
+ import { Color, SceneModel } from "../../Entities";
2
+ import { PresentionManager } from "../PresentationManager";
3
+ export interface SceneMeshOverlayColorVM {
4
+ overlayColor: Color | undefined;
5
+ }
6
+ export declare class SceneMeshOverlayPM extends PresentionManager {
7
+ private sceneModel;
8
+ private id;
9
+ private updateView;
10
+ private previousVM?;
11
+ doUpdateView: () => void;
12
+ private vmHasChanged;
13
+ constructor(sceneModel: SceneModel, id: string, updateView: (vm: SceneMeshOverlayColorVM) => void);
14
+ }
15
+ export declare const defaultSceneModelVM: SceneMeshOverlayColorVM;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultSceneModelVM = exports.SceneMeshOverlayPM = void 0;
4
+ const PresentationManager_1 = require("../PresentationManager");
5
+ class SceneMeshOverlayPM extends PresentationManager_1.PresentionManager {
6
+ constructor(sceneModel, id, updateView) {
7
+ super(sceneModel);
8
+ this.sceneModel = sceneModel;
9
+ this.id = id;
10
+ this.updateView = updateView;
11
+ this.doUpdateView = () => {
12
+ const sceneModelMesh = this.sceneModel.getMeshById(this.id);
13
+ const vm = {
14
+ overlayColor: sceneModelMesh === null || sceneModelMesh === void 0 ? void 0 : sceneModelMesh.overlayColor,
15
+ };
16
+ if (!this.vmHasChanged(vm))
17
+ return;
18
+ this.updateView(vm);
19
+ this.previousVM = vm;
20
+ };
21
+ this.doUpdateView();
22
+ }
23
+ vmHasChanged(vm) {
24
+ if (this.previousVM === undefined)
25
+ return true;
26
+ if (this.previousVM.overlayColor !== vm.overlayColor)
27
+ return true;
28
+ return false;
29
+ }
30
+ }
31
+ exports.SceneMeshOverlayPM = SceneMeshOverlayPM;
32
+ exports.defaultSceneModelVM = {
33
+ overlayColor: undefined,
34
+ };
@@ -0,0 +1,17 @@
1
+ import { FocusCamera } from "../../Entities";
2
+ import { Vector3 } from "../../ValueObjects";
3
+ export declare class BumpDollyFocusCamera {
4
+ private focusCamera;
5
+ bumpDurationMS: number;
6
+ bumpLerp: (percent: number) => number;
7
+ bumpAmount: number;
8
+ private interval?;
9
+ private chrono;
10
+ private delta;
11
+ private initialRadius;
12
+ private finalRadius;
13
+ private pickPoint?;
14
+ private onTick;
15
+ bump(direction: "IN" | "OUT", target?: Vector3): void;
16
+ constructor(focusCamera: FocusCamera);
17
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BumpDollyFocusCamera = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class BumpDollyFocusCamera {
6
+ constructor(focusCamera) {
7
+ this.focusCamera = focusCamera;
8
+ this.bumpDurationMS = 500;
9
+ this.bumpLerp = (p) => {
10
+ return p;
11
+ }; // Linear
12
+ this.bumpAmount = 0.1;
13
+ this.chrono = 0;
14
+ this.delta = 10;
15
+ this.initialRadius = 0;
16
+ this.finalRadius = 0;
17
+ this.onTick = () => {
18
+ this.chrono = this.chrono + this.delta;
19
+ let nomralizedTime = this.chrono / this.bumpDurationMS;
20
+ if (nomralizedTime > 1) {
21
+ nomralizedTime = 1;
22
+ }
23
+ const percent = this.bumpLerp(nomralizedTime);
24
+ const range = this.finalRadius - this.initialRadius;
25
+ const currentRadius = this.focusCamera.radius;
26
+ this.focusCamera.radius = this.initialRadius + range * percent;
27
+ if (this.pickPoint !== undefined) {
28
+ const percentChange = this.focusCamera.radius / currentRadius;
29
+ let pickToTarget = ValueObjects_1.Vector3.Subtract(this.focusCamera.target, this.pickPoint);
30
+ const newLength = pickToTarget.magnitued * percentChange;
31
+ pickToTarget = ValueObjects_1.Vector3.NewVectorOfLength(pickToTarget, newLength);
32
+ const newTargetPos = ValueObjects_1.Vector3.Add(this.pickPoint, pickToTarget);
33
+ this.focusCamera.target = newTargetPos;
34
+ }
35
+ if (nomralizedTime >= 1 && this.interval) {
36
+ this.focusCamera.radius = this.finalRadius;
37
+ clearInterval(this.interval);
38
+ this.interval = undefined;
39
+ this.pickPoint = undefined;
40
+ }
41
+ };
42
+ }
43
+ bump(direction, target) {
44
+ let delta = this.bumpAmount;
45
+ if (direction === "IN") {
46
+ delta *= -1;
47
+ }
48
+ this.initialRadius = this.focusCamera.radius;
49
+ if (this.interval) {
50
+ clearInterval(this.interval);
51
+ this.interval = undefined;
52
+ this.finalRadius = this.finalRadius + delta;
53
+ }
54
+ else {
55
+ this.finalRadius = this.initialRadius + delta;
56
+ }
57
+ this.chrono = 0;
58
+ this.pickPoint = target;
59
+ this.interval = setInterval(() => {
60
+ this.onTick();
61
+ }, 10);
62
+ }
63
+ }
64
+ exports.BumpDollyFocusCamera = BumpDollyFocusCamera;
@@ -0,0 +1,36 @@
1
+ import { FocusCamera } from "../../Entities";
2
+ export interface LerpFocusCameraParameters {
3
+ duration: number;
4
+ finalRadius?: number;
5
+ finalBeta?: number;
6
+ finalAlpha?: number;
7
+ finalTarget?: {
8
+ x: number;
9
+ y: number;
10
+ z: number;
11
+ };
12
+ onComplete?: () => void;
13
+ onAbort?: () => void;
14
+ }
15
+ export declare class LerpFocusCamera {
16
+ get isLerping(): boolean;
17
+ private _isLerping;
18
+ private focusCamera;
19
+ private easeFn;
20
+ private lerpDuration;
21
+ private lerpRadius;
22
+ private lerpBeta;
23
+ private lerpAlpha;
24
+ private lerpX;
25
+ private lerpY;
26
+ private lerpZ;
27
+ private onComplete?;
28
+ private onAbort?;
29
+ private interval;
30
+ private chrono;
31
+ private delta;
32
+ cancelLerp: () => void;
33
+ private onTick;
34
+ constructor(focusCamera: FocusCamera, easeFn: (normalizedTime: number) => number, parameters: LerpFocusCameraParameters);
35
+ private makeLerpNumber;
36
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LerpFocusCamera = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class LerpFocusCamera {
6
+ constructor(focusCamera, easeFn, parameters) {
7
+ var _a, _b, _c;
8
+ this._isLerping = false;
9
+ this.chrono = 0;
10
+ this.delta = 10;
11
+ this.cancelLerp = () => {
12
+ if (!this._isLerping)
13
+ return;
14
+ clearInterval(this.interval);
15
+ if (this.onAbort) {
16
+ this.onAbort();
17
+ }
18
+ this._isLerping = false;
19
+ };
20
+ this.onTick = () => {
21
+ this.chrono = this.chrono + this.delta / 1000;
22
+ let nomralizedTime = this.chrono / this.lerpDuration;
23
+ if (nomralizedTime > 1) {
24
+ nomralizedTime = 1;
25
+ }
26
+ const percent = this.easeFn(nomralizedTime);
27
+ this.focusCamera.radius = this.lerpRadius(percent);
28
+ this.focusCamera.beta = this.lerpBeta(percent);
29
+ this.focusCamera.alpha = this.lerpAlpha(percent);
30
+ const x = this.lerpX(percent);
31
+ const y = this.lerpY(percent);
32
+ const z = this.lerpZ(percent);
33
+ this.focusCamera.target = new ValueObjects_1.Vector3(x, y, z);
34
+ if (nomralizedTime >= 1) {
35
+ clearInterval(this.interval);
36
+ if (this.onComplete) {
37
+ this.onComplete();
38
+ }
39
+ this._isLerping = false;
40
+ this.focusCamera.lerpCompleted();
41
+ }
42
+ };
43
+ this.focusCamera = focusCamera;
44
+ this.easeFn = easeFn;
45
+ this.lerpDuration = parameters.duration;
46
+ this.onComplete = parameters.onComplete;
47
+ this.onAbort = parameters.onAbort;
48
+ this.lerpRadius = this.makeLerpNumber(this.focusCamera.radius, parameters.finalRadius);
49
+ this.lerpBeta = this.makeLerpNumber(this.focusCamera.beta, parameters.finalBeta);
50
+ this.lerpAlpha = this.makeLerpNumber(this.focusCamera.alpha, parameters.finalAlpha);
51
+ this.lerpX = this.makeLerpNumber(this.focusCamera.target.x, (_a = parameters.finalTarget) === null || _a === void 0 ? void 0 : _a.x);
52
+ this.lerpY = this.makeLerpNumber(this.focusCamera.target.y, (_b = parameters.finalTarget) === null || _b === void 0 ? void 0 : _b.y);
53
+ this.lerpZ = this.makeLerpNumber(this.focusCamera.target.z, (_c = parameters.finalTarget) === null || _c === void 0 ? void 0 : _c.z);
54
+ this.interval = setInterval(() => {
55
+ this.onTick();
56
+ }, this.delta);
57
+ this.focusCamera.registerLerp(this);
58
+ this._isLerping = true;
59
+ }
60
+ get isLerping() {
61
+ return this._isLerping;
62
+ }
63
+ makeLerpNumber(initial, final) {
64
+ const actualFinal = final !== null && final !== void 0 ? final : initial;
65
+ return function Lerp(percent) {
66
+ const range = actualFinal - initial;
67
+ return initial + range * percent;
68
+ };
69
+ }
70
+ }
71
+ exports.LerpFocusCamera = LerpFocusCamera;
@@ -0,0 +1,11 @@
1
+ import { FocusCamera } from "../../Entities";
2
+ import { Vector3 } from "../../ValueObjects";
3
+ export declare class PinchDollyFocusCamera {
4
+ private focusCamera;
5
+ sensitivity: number;
6
+ private previousDistanceBetweenTouches;
7
+ private pickPoint?;
8
+ doDolly: (distanceBetweenTouches: number) => void;
9
+ initializeDolly: (distanceBetweenTouches: number, pickPoint?: Vector3 | undefined) => void;
10
+ constructor(focusCamera: FocusCamera);
11
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PinchDollyFocusCamera = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class PinchDollyFocusCamera {
6
+ constructor(focusCamera) {
7
+ this.focusCamera = focusCamera;
8
+ this.sensitivity = 0.05;
9
+ this.previousDistanceBetweenTouches = 0;
10
+ this.doDolly = (distanceBetweenTouches) => {
11
+ const pinchDelta = distanceBetweenTouches - this.previousDistanceBetweenTouches;
12
+ const deltaRadius = pinchDelta * this.sensitivity;
13
+ const currentRadius = this.focusCamera.radius;
14
+ this.focusCamera.radius = currentRadius - deltaRadius;
15
+ if (this.pickPoint !== undefined) {
16
+ const percentChange = this.focusCamera.radius / currentRadius;
17
+ let pickToTarget = ValueObjects_1.Vector3.Subtract(this.focusCamera.target, this.pickPoint);
18
+ const newLength = pickToTarget.magnitued * percentChange;
19
+ pickToTarget = ValueObjects_1.Vector3.NewVectorOfLength(pickToTarget, newLength);
20
+ const newTargetPos = ValueObjects_1.Vector3.Add(this.pickPoint, pickToTarget);
21
+ this.focusCamera.target = newTargetPos;
22
+ }
23
+ this.previousDistanceBetweenTouches = distanceBetweenTouches;
24
+ };
25
+ this.initializeDolly = (distanceBetweenTouches, pickPoint) => {
26
+ this.previousDistanceBetweenTouches = distanceBetweenTouches;
27
+ if (pickPoint) {
28
+ this.pickPoint = pickPoint;
29
+ }
30
+ else {
31
+ this.pickPoint = undefined;
32
+ }
33
+ };
34
+ }
35
+ }
36
+ exports.PinchDollyFocusCamera = PinchDollyFocusCamera;
@@ -0,0 +1,11 @@
1
+ import { FocusCamera } from "../../Entities";
2
+ import { Vector2, Vector3 } from "../../ValueObjects";
3
+ export declare class PixelDollyFocusCamera {
4
+ private focusCamera;
5
+ sensitivity: number;
6
+ private previousPixelPosition;
7
+ private pickPoint?;
8
+ doDolly: (pixelPosition: Vector2) => void;
9
+ initializeDolly: (pixelPosition: Vector2, pickPoint?: Vector3 | undefined) => void;
10
+ constructor(focusCamera: FocusCamera);
11
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixelDollyFocusCamera = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class PixelDollyFocusCamera {
6
+ constructor(focusCamera) {
7
+ this.focusCamera = focusCamera;
8
+ this.sensitivity = 0.05;
9
+ this.previousPixelPosition = ValueObjects_1.Vector2.Zero();
10
+ this.doDolly = (pixelPosition) => {
11
+ const pixelDeltaY = pixelPosition.y - this.previousPixelPosition.y;
12
+ const deltaRadius = pixelDeltaY * this.sensitivity;
13
+ const currentRadius = this.focusCamera.radius;
14
+ this.focusCamera.radius = currentRadius - deltaRadius;
15
+ if (this.pickPoint !== undefined) {
16
+ const percentChange = this.focusCamera.radius / currentRadius;
17
+ let pickToTarget = ValueObjects_1.Vector3.Subtract(this.focusCamera.target, this.pickPoint);
18
+ const newLength = pickToTarget.magnitued * percentChange;
19
+ pickToTarget = ValueObjects_1.Vector3.NewVectorOfLength(pickToTarget, newLength);
20
+ const newTargetPos = ValueObjects_1.Vector3.Add(this.pickPoint, pickToTarget);
21
+ this.focusCamera.target = newTargetPos;
22
+ }
23
+ this.previousPixelPosition = pixelPosition;
24
+ };
25
+ this.initializeDolly = (pixelPosition, pickPoint) => {
26
+ this.previousPixelPosition = pixelPosition;
27
+ if (pickPoint) {
28
+ this.pickPoint = pickPoint;
29
+ }
30
+ else {
31
+ this.pickPoint = undefined;
32
+ }
33
+ };
34
+ }
35
+ }
36
+ exports.PixelDollyFocusCamera = PixelDollyFocusCamera;
@@ -0,0 +1,11 @@
1
+ import { FocusCamera } from "../../Entities";
2
+ import { Vector2, Vector3 } from "../../ValueObjects";
3
+ export declare class PixelOrbitFocusCamera {
4
+ private focusCamera;
5
+ sensitivity: number;
6
+ private previousPixelPos?;
7
+ private pickPoint?;
8
+ doOrbit: (pixelPosition: Vector2) => void;
9
+ initializeOrbit: (initialPixelPos: Vector2, pickPoint?: Vector3 | undefined) => void;
10
+ constructor(focusCamera: FocusCamera);
11
+ }