@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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixelOrbitFocusCamera = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class PixelOrbitFocusCamera {
6
+ constructor(focusCamera) {
7
+ this.focusCamera = focusCamera;
8
+ this.sensitivity = 0.5;
9
+ this.doOrbit = (pixelPosition) => {
10
+ if (!this.previousPixelPos) {
11
+ console.error("[PixelOrbitFocusCamera] You must initialize first!");
12
+ return;
13
+ }
14
+ const pixelChange = ValueObjects_1.Vector2.Subtract(pixelPosition, this.previousPixelPos);
15
+ this.focusCamera.alpha += pixelChange.x * this.sensitivity;
16
+ this.focusCamera.beta += pixelChange.y * this.sensitivity;
17
+ this.previousPixelPos = pixelPosition;
18
+ };
19
+ this.initializeOrbit = (initialPixelPos, pickPoint) => {
20
+ this.previousPixelPos = initialPixelPos;
21
+ this.pickPoint = pickPoint;
22
+ this.focusCamera.cancelLerp();
23
+ };
24
+ }
25
+ }
26
+ exports.PixelOrbitFocusCamera = PixelOrbitFocusCamera;
@@ -0,0 +1,11 @@
1
+ import { Babylon, FocusCamera } from "../../Entities";
2
+ import { ParametricPlane, Vector2 } from "../../ValueObjects";
3
+ export declare class PixelPlanePanFocusCamera {
4
+ private focusCamera;
5
+ private babylon;
6
+ private plane?;
7
+ private previousPixelPos?;
8
+ doPan: (pixelPosition: Vector2) => void;
9
+ initializePan: (initialPixelPos: Vector2, panPlane: ParametricPlane) => void;
10
+ constructor(focusCamera: FocusCamera, babylon: Babylon);
11
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixelPlanePanFocusCamera = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class PixelPlanePanFocusCamera {
6
+ constructor(focusCamera, babylon) {
7
+ this.focusCamera = focusCamera;
8
+ this.babylon = babylon;
9
+ this.doPan = (pixelPosition) => {
10
+ if (!this.plane || !this.previousPixelPos) {
11
+ console.error("[PixelPlanePan_OrbitCamera] You must initialize first!");
12
+ return;
13
+ }
14
+ const initialRay = this.babylon.sceneRay(this.previousPixelPos);
15
+ const finalRay = this.babylon.sceneRay(pixelPosition);
16
+ const p1 = this.plane.intersectLine(initialRay);
17
+ const p2 = this.plane.intersectLine(finalRay);
18
+ if (!p1 || !p2)
19
+ return;
20
+ const delta = ValueObjects_1.Vector3.Subtract(p2, p1);
21
+ const currentTarget = this.focusCamera.target;
22
+ const newTarget = new ValueObjects_1.Vector3(currentTarget.x - delta.x, currentTarget.y - delta.y, currentTarget.z - delta.z);
23
+ this.focusCamera.target = new ValueObjects_1.Vector3(newTarget.x, newTarget.y, newTarget.z);
24
+ this.previousPixelPos = pixelPosition;
25
+ };
26
+ this.initializePan = (initialPixelPos, panPlane) => {
27
+ this.plane = panPlane;
28
+ this.previousPixelPos = initialPixelPos;
29
+ this.focusCamera.cancelLerp();
30
+ };
31
+ }
32
+ }
33
+ exports.PixelPlanePanFocusCamera = PixelPlanePanFocusCamera;
@@ -0,0 +1,22 @@
1
+ import { FocusCamera, SerializedSystem, StateMachine } from "../../Entities";
2
+ export declare class SerializeFocusCamera implements SerializedSystem {
3
+ name: string;
4
+ seriliziationVersion: number;
5
+ private focusCamera;
6
+ private stateMachine;
7
+ getSystemState(): object;
8
+ applySystemState(serializedState: object, version: number, transitionTime: number): void;
9
+ applyDefaultState(transitionDuration: number): void;
10
+ private applyV1Data;
11
+ private applyImmediate;
12
+ private applyLerp;
13
+ constructor(focusCamera: FocusCamera, stateMachine: StateMachine);
14
+ }
15
+ export interface FocusCameraDataV1 {
16
+ alpha: number;
17
+ beta: number;
18
+ radius: number;
19
+ target_x: number;
20
+ target_y: number;
21
+ target_z: number;
22
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializeFocusCamera = void 0;
4
+ const _1 = require(".");
5
+ const ValueObjects_1 = require("../../ValueObjects");
6
+ class SerializeFocusCamera {
7
+ constructor(focusCamera, stateMachine) {
8
+ this.name = "focusCamera";
9
+ this.seriliziationVersion = 1;
10
+ this.focusCamera = focusCamera;
11
+ this.stateMachine = stateMachine;
12
+ stateMachine.registerSerializedSystem(this);
13
+ }
14
+ getSystemState() {
15
+ const data = {
16
+ alpha: this.focusCamera.alpha,
17
+ beta: this.focusCamera.beta,
18
+ radius: this.focusCamera.radius,
19
+ target_x: this.focusCamera.target.x,
20
+ target_y: this.focusCamera.target.y,
21
+ target_z: this.focusCamera.target.z,
22
+ };
23
+ return data;
24
+ }
25
+ applySystemState(serializedState, version, transitionTime) {
26
+ try {
27
+ if (version === 1) {
28
+ const castState = serializedState;
29
+ this.applyV1Data(castState, transitionTime);
30
+ }
31
+ else {
32
+ console.warn(`[SerializeFocusCamera] Unsupported version number ${version}. Defaulting`);
33
+ this.applyDefaultState(transitionTime);
34
+ }
35
+ }
36
+ catch (e) {
37
+ console.warn(`[SerializeFocusCamera] Caught when deserializing ${e}. Defaulting`);
38
+ this.applyDefaultState(transitionTime);
39
+ }
40
+ }
41
+ applyDefaultState(transitionDuration) {
42
+ const alpha = this.focusCamera.defaultAlpha;
43
+ const beta = this.focusCamera.defaultBeta;
44
+ const radius = this.focusCamera.defaultRadius;
45
+ const target = this.focusCamera.defaultTarget;
46
+ if (transitionDuration === 0) {
47
+ this.applyImmediate(alpha, beta, radius, target);
48
+ }
49
+ else {
50
+ this.applyLerp(alpha, beta, radius, target, transitionDuration);
51
+ }
52
+ }
53
+ applyV1Data(data, transitionTime) {
54
+ const { alpha, beta, radius, target_x, target_y, target_z } = data;
55
+ const target = new ValueObjects_1.Vector3(target_x, target_y, target_z);
56
+ if (transitionTime === 0) {
57
+ this.applyImmediate(alpha, beta, radius, target);
58
+ }
59
+ else {
60
+ this.applyLerp(alpha, beta, radius, target, transitionTime);
61
+ }
62
+ }
63
+ applyImmediate(alpha, beta, radius, target) {
64
+ this.focusCamera.cancelLerp();
65
+ this.focusCamera.alpha = alpha;
66
+ this.focusCamera.beta = beta;
67
+ this.focusCamera.radius = radius;
68
+ this.focusCamera.target = target;
69
+ }
70
+ applyLerp(alpha, beta, radius, target, transitionTime) {
71
+ const lerpParams = {
72
+ duration: transitionTime,
73
+ finalRadius: radius,
74
+ finalBeta: beta,
75
+ finalAlpha: alpha,
76
+ finalTarget: target,
77
+ };
78
+ new _1.LerpFocusCamera(this.focusCamera, this.stateMachine.transitionEaseFunction, lerpParams);
79
+ }
80
+ }
81
+ exports.SerializeFocusCamera = SerializeFocusCamera;
@@ -0,0 +1,7 @@
1
+ export * from "./PixelPlanePanFocusCamera";
2
+ export * from "./LerpFocusCamera";
3
+ export * from "./SerializeFocusCamera";
4
+ export * from "./PixelDollyFocusCamera";
5
+ export * from "./BumpDollyFocusCamera";
6
+ export * from "./PinchDollyFocusCamera";
7
+ export * from "./PixelOrbitFocusCamera";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./PixelPlanePanFocusCamera"), exports);
14
+ __exportStar(require("./LerpFocusCamera"), exports);
15
+ __exportStar(require("./SerializeFocusCamera"), exports);
16
+ __exportStar(require("./PixelDollyFocusCamera"), exports);
17
+ __exportStar(require("./BumpDollyFocusCamera"), exports);
18
+ __exportStar(require("./PinchDollyFocusCamera"), exports);
19
+ __exportStar(require("./PixelOrbitFocusCamera"), exports);
@@ -0,0 +1,18 @@
1
+ import { StateMachine, SceneModelMeshStateDTO, SerializedSystem, SceneModelRepo } from "../../Entities";
2
+ export declare class SerializeActiveModel implements SerializedSystem {
3
+ private sceneModelRepo;
4
+ private easeFn;
5
+ name: string;
6
+ seriliziationVersion: number;
7
+ loadNewModel: (modelID: string, initialStateLookup: Map<string, SceneModelMeshStateDTO>) => void;
8
+ selectActiveModel: () => void;
9
+ getSystemState(): object;
10
+ applySystemState(state: object, version: number, transitionDurationSec: number): void;
11
+ private applyStateV1;
12
+ applyDefaultState: () => void;
13
+ constructor(sceneModelRepo: SceneModelRepo, easeFn: (normalizedTime: number) => number, stateMachine: StateMachine);
14
+ }
15
+ export interface SerializedActiveModelV1 {
16
+ modelID: string;
17
+ meshModelStates: SceneModelMeshStateDTO[];
18
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializeActiveModel = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class SerializeActiveModel {
6
+ constructor(sceneModelRepo, easeFn, stateMachine) {
7
+ this.sceneModelRepo = sceneModelRepo;
8
+ this.easeFn = easeFn;
9
+ this.name = "active-model";
10
+ this.seriliziationVersion = 1;
11
+ this.loadNewModel = () => {
12
+ throw new Error("setActiveModel has not been injected into SerializeActiveModel serializer");
13
+ };
14
+ this.selectActiveModel = () => {
15
+ throw new Error("selectActiveModel has not been injected into SerializeActiveModel serializer");
16
+ };
17
+ this.applyDefaultState = () => {
18
+ this.selectActiveModel();
19
+ };
20
+ stateMachine.registerSerializedSystem(this);
21
+ }
22
+ getSystemState() {
23
+ const modelStates = [];
24
+ if (this.sceneModelRepo.activeModel) {
25
+ this.sceneModelRepo.activeModel.getAllMeshes().forEach((mesh) => {
26
+ const meshState = mesh.getState();
27
+ if (meshState !== null) {
28
+ modelStates.push(meshState);
29
+ }
30
+ });
31
+ }
32
+ const state = {
33
+ modelID: this.sceneModelRepo.activeModelID,
34
+ meshModelStates: modelStates,
35
+ };
36
+ return state;
37
+ }
38
+ applySystemState(state, version, transitionDurationSec) {
39
+ if (version === 1) {
40
+ this.applyStateV1(state, transitionDurationSec);
41
+ }
42
+ else {
43
+ this.applyDefaultState();
44
+ }
45
+ }
46
+ applyStateV1(state, transitionDurationSec) {
47
+ const { meshModelStates, modelID } = state;
48
+ if (meshModelStates === undefined || modelID === undefined) {
49
+ console.warn("[SerializeActiveModel] Unable to parse state: ", JSON.stringify(state));
50
+ this.applyDefaultState();
51
+ return;
52
+ }
53
+ const stateLookup = new Map();
54
+ meshModelStates.forEach((mmState) => {
55
+ stateLookup.set(mmState.id, mmState);
56
+ });
57
+ const existingModel = this.sceneModelRepo.get(modelID);
58
+ if (existingModel) {
59
+ this.sceneModelRepo.activeModelID = modelID;
60
+ existingModel.getAllMeshes().forEach((meshModel) => {
61
+ const mmState = stateLookup.get(meshModel.id);
62
+ const pos = mmState
63
+ ? ValueObjects_1.Vector3.FromDTO(mmState.position)
64
+ : ValueObjects_1.Vector3.Zero();
65
+ meshModel.moveTo(pos, transitionDurationSec * 1000, this.easeFn);
66
+ meshModel.shown = mmState ? mmState.shown : true;
67
+ });
68
+ }
69
+ else {
70
+ this.loadNewModel(modelID, stateLookup);
71
+ }
72
+ }
73
+ }
74
+ exports.SerializeActiveModel = SerializeActiveModel;
@@ -0,0 +1,7 @@
1
+ import { SceneModelRepo } from "../../Entities";
2
+ export declare class SetMeshesEnabledHook {
3
+ private sceneModelRepo;
4
+ private lastActiveModelID;
5
+ onSceneModelRepoChange: () => void;
6
+ constructor(sceneModelRepo: SceneModelRepo);
7
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetMeshesEnabledHook = void 0;
4
+ class SetMeshesEnabledHook {
5
+ constructor(sceneModelRepo) {
6
+ this.sceneModelRepo = sceneModelRepo;
7
+ this.onSceneModelRepoChange = () => {
8
+ if (this.lastActiveModelID === this.sceneModelRepo.activeModelID)
9
+ return;
10
+ this.lastActiveModelID = this.sceneModelRepo.activeModelID;
11
+ this.sceneModelRepo.getAll().forEach((sceneModel) => {
12
+ const enabled = sceneModel.id === this.sceneModelRepo.activeModelID;
13
+ sceneModel.getAllMeshes().forEach((mesh) => {
14
+ if (mesh.sceneObject)
15
+ mesh.sceneObject.enabled = enabled;
16
+ });
17
+ });
18
+ };
19
+ sceneModelRepo.addObserver(this.onSceneModelRepoChange);
20
+ }
21
+ }
22
+ exports.SetMeshesEnabledHook = SetMeshesEnabledHook;
@@ -0,0 +1,2 @@
1
+ import { Color, SceneModel } from "../../Entities";
2
+ export declare function makeSetSceneModelMeshOverlayColor(sceneModel: SceneModel): (id: string, color: Color | undefined) => void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeSetSceneModelMeshOverlayColor = void 0;
4
+ function makeSetSceneModelMeshOverlayColor(sceneModel) {
5
+ return (id, color) => {
6
+ const sceneModelMesh = sceneModel.getMeshById(id);
7
+ if (!sceneModelMesh) {
8
+ return;
9
+ }
10
+ sceneModelMesh.overlayColor = color;
11
+ };
12
+ }
13
+ exports.makeSetSceneModelMeshOverlayColor = makeSetSceneModelMeshOverlayColor;
@@ -1,2 +1,5 @@
1
1
  export * from "./modelDataLoader";
2
2
  export * from "./loadNewModel";
3
+ export * from "./SerializeActiveModel";
4
+ export * from "./SetMeshesEnabledHook";
5
+ export * from "./SetSceneModelMeshOverlayColor";
@@ -12,3 +12,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./modelDataLoader"), exports);
14
14
  __exportStar(require("./loadNewModel"), exports);
15
+ __exportStar(require("./SerializeActiveModel"), exports);
16
+ __exportStar(require("./SetMeshesEnabledHook"), exports);
17
+ __exportStar(require("./SetSceneModelMeshOverlayColor"), exports);
@@ -1,2 +1,2 @@
1
- import { AppDispatcher, SceneModel, SceneModelRepo, SceneObjectsRepo, SceneRoot } from "../../Entities";
2
- export declare function makeLoadNewModel(sceneModelRepo: SceneModelRepo, sceneObjectRepo: SceneObjectsRepo, sceneRoot: SceneRoot, appDispatcher: AppDispatcher): (modelID: string) => Promise<SceneModel>;
1
+ import { AppDispatcher, SceneModel, SceneModelMeshStateDTO, SceneModelRepo, SceneObjectsRepo, SceneRoot } from "../../Entities";
2
+ export declare function makeLoadNewModel(sceneModelRepo: SceneModelRepo, sceneObjectRepo: SceneObjectsRepo, sceneRoot: SceneRoot, appDispatcher: AppDispatcher): (modelID: string, initialStateLookup: Map<string, SceneModelMeshStateDTO>) => Promise<SceneModel>;
@@ -11,8 +11,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.makeLoadNewModel = void 0;
13
13
  const Entities_1 = require("../../Entities");
14
+ const ValueObjects_1 = require("../../ValueObjects");
14
15
  function makeLoadNewModel(sceneModelRepo, sceneObjectRepo, sceneRoot, appDispatcher) {
15
- return function loadNewModel(modelID) {
16
+ return function loadNewModel(modelID, initialStateLookup) {
16
17
  return __awaiter(this, void 0, void 0, function* () {
17
18
  let sceneModel = sceneModelRepo.get(modelID);
18
19
  if (sceneModel === undefined) {
@@ -38,20 +39,21 @@ function makeLoadNewModel(sceneModelRepo, sceneObjectRepo, sceneRoot, appDispatc
38
39
  const dataDTO = yield sceneModelRepo.dataLoader(modelID);
39
40
  sceneModel.applyData(dataDTO);
40
41
  sceneModel.getAllMeshes().forEach((meshObject) => {
41
- // let so = sceneObjectRepo.get(meshObject.id);
42
- // if (!so) {
43
- // so = makeSceneObject(meshObject.id);
44
- // sceneObjectRepo.add(meshObject.id, so);
45
- // }
46
- // so.transform.parent = sceneRoot.sceneObject?.transform;
47
- // meshObject.sceneObject = so;
48
- // const initialState = initialStateLookup.get(meshObject.id);
49
- // meshObject.position = initialState
50
- // ? Vector3.FromDTO(initialState.position)
51
- // : Vector3.Zero();
52
- // meshObject.shown = initialState ? initialState.shown : true;
53
- // so.transform.localRotation = Quaternion.Identity();
54
- // so.transform.localScale = Vector3.One();
42
+ var _a;
43
+ let so = sceneObjectRepo.get(meshObject.id);
44
+ if (!so) {
45
+ so = Entities_1.makeSceneObject(meshObject.id);
46
+ sceneObjectRepo.add(meshObject.id, so);
47
+ }
48
+ so.transform.parent = (_a = sceneRoot.sceneObject) === null || _a === void 0 ? void 0 : _a.transform;
49
+ meshObject.sceneObject = so;
50
+ const initialState = initialStateLookup.get(meshObject.id);
51
+ meshObject.position = initialState
52
+ ? ValueObjects_1.Vector3.FromDTO(initialState.position)
53
+ : ValueObjects_1.Vector3.Zero();
54
+ meshObject.shown = initialState ? initialState.shown : true;
55
+ so.transform.localRotation = ValueObjects_1.Quaternion.Identity();
56
+ so.transform.localScale = ValueObjects_1.Vector3.One();
55
57
  });
56
58
  yield sceneModelRepo.modelLoader(modelID);
57
59
  sceneModel.state = Entities_1.SceneModelState.READY;
@@ -0,0 +1,18 @@
1
+ import { Babylon, SceneObject, SceneObjectsRepo } from "../../Entities";
2
+ import { ParametricLine } from "../../ValueObjects";
3
+ export declare class PeelSceneObject {
4
+ private babylon;
5
+ private sceneObjectRepo;
6
+ private _didPeel;
7
+ get didPeel(): boolean;
8
+ private _peelingSceneObject;
9
+ get peelingSceneObject(): SceneObject | undefined;
10
+ private _peelPlane;
11
+ private _rootPos;
12
+ private _allowPeel;
13
+ private _pickOffset;
14
+ tryInitializePeel: (pickRay: ParametricLine) => void;
15
+ updatePeel: (pickRay: ParametricLine) => void;
16
+ stopPeel: () => void;
17
+ constructor(babylon: Babylon, sceneObjectRepo: SceneObjectsRepo);
18
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PeelSceneObject = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class PeelSceneObject {
6
+ constructor(babylon, sceneObjectRepo) {
7
+ this.babylon = babylon;
8
+ this.sceneObjectRepo = sceneObjectRepo;
9
+ this._didPeel = false;
10
+ this._peelingSceneObject = undefined;
11
+ this._peelPlane = ValueObjects_1.ParametricPlane.XY();
12
+ this._allowPeel = false;
13
+ this._pickOffset = ValueObjects_1.Vector3.Zero();
14
+ this.tryInitializePeel = (pickRay) => {
15
+ var _a, _b;
16
+ this._allowPeel = false;
17
+ this._didPeel = false;
18
+ this._peelingSceneObject = undefined;
19
+ const sceneObjectID = this.babylon.sceneObjectRayPick(pickRay);
20
+ if (!sceneObjectID)
21
+ return;
22
+ const sceneObject = this.sceneObjectRepo.get(sceneObjectID);
23
+ if (!sceneObject)
24
+ return;
25
+ this._peelingSceneObject = sceneObject;
26
+ const scenePick = this.babylon.sceneRayPick(pickRay);
27
+ if (!scenePick)
28
+ return;
29
+ const pickPlaneDirection = ValueObjects_1.Vector3.Backward();
30
+ const planePickPos = (_a = scenePick.worldPickPoint) !== null && _a !== void 0 ? _a : ValueObjects_1.Vector3.Zero();
31
+ this._peelPlane = ValueObjects_1.ParametricPlane.FromPointNormal(planePickPos, pickPlaneDirection);
32
+ const pick = (_b = this._peelPlane.intersectLine(pickRay)) !== null && _b !== void 0 ? _b : ValueObjects_1.Vector3.Zero();
33
+ this._rootPos = this._peelingSceneObject.transform.worldPosition;
34
+ this._pickOffset = ValueObjects_1.Vector3.Subtract(this._rootPos, pick);
35
+ this._allowPeel = true;
36
+ };
37
+ this.updatePeel = (pickRay) => {
38
+ var _a;
39
+ if (!this._allowPeel)
40
+ return;
41
+ if (!this._peelingSceneObject)
42
+ return;
43
+ const pick = (_a = this._peelPlane.intersectLine(pickRay)) !== null && _a !== void 0 ? _a : ValueObjects_1.Vector3.Zero();
44
+ this._peelingSceneObject.transform.worldPosition = ValueObjects_1.Vector3.Add(pick, this._pickOffset);
45
+ this._didPeel = true;
46
+ };
47
+ this.stopPeel = () => {
48
+ this._allowPeel = false;
49
+ this._didPeel = false;
50
+ this._peelingSceneObject = undefined;
51
+ this._rootPos = undefined;
52
+ };
53
+ }
54
+ get didPeel() {
55
+ return this._didPeel;
56
+ }
57
+ get peelingSceneObject() {
58
+ return this._peelingSceneObject;
59
+ }
60
+ }
61
+ exports.PeelSceneObject = PeelSceneObject;
@@ -0,0 +1 @@
1
+ export * from "./PeelSceneObject";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./PeelSceneObject"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/app",
3
- "version": "3.4.0",
3
+ "version": "3.5.1",
4
4
  "description": "Public package for the VIVED Learning App system",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -1,11 +0,0 @@
1
- import { AppObject } from "./AppObject";
2
- import { AppObjectPM } from "./AppObjectPM";
3
- import { AppObjectRepo } from "./AppObjectRepo";
4
- export declare class IsEnabledPM extends AppObjectPM<boolean> {
5
- static readonly type = "IsEnabledPM";
6
- onEnabledChange: () => void;
7
- dispose: () => void;
8
- vmsAreEqual(a: boolean, b: boolean): boolean;
9
- constructor(appObject: AppObject);
10
- static getForID(appObjID: string, appObjects: AppObjectRepo): IsEnabledPM | undefined;
11
- }
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IsEnabledPM = void 0;
4
- const AppObjectPM_1 = require("./AppObjectPM");
5
- class IsEnabledPM extends AppObjectPM_1.AppObjectPM {
6
- constructor(appObject) {
7
- super(appObject, IsEnabledPM.type);
8
- this.onEnabledChange = () => {
9
- this.doUpdateView(this.appObject.enabled);
10
- };
11
- this.dispose = () => {
12
- this.appObject.removeObserver(this.onEnabledChange);
13
- };
14
- appObject.addObserver(this.onEnabledChange);
15
- this.onEnabledChange();
16
- }
17
- vmsAreEqual(a, b) {
18
- return a === b;
19
- }
20
- static getForID(appObjID, appObjects) {
21
- const appObj = appObjects.get(appObjID);
22
- if (appObj === undefined) {
23
- return undefined;
24
- }
25
- return appObj.getComponent(IsEnabledPM.type);
26
- }
27
- }
28
- exports.IsEnabledPM = IsEnabledPM;
29
- IsEnabledPM.type = "IsEnabledPM";
@@ -1,3 +0,0 @@
1
- import { AppObject } from "../../../AppObject";
2
- import { StickTransform3D } from "./StickTransform3D";
3
- export declare function getStickUC(appObject: AppObject): StickTransform3D | undefined;
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStickUC = void 0;
4
- const StickTransform3D_1 = require("./StickTransform3D");
5
- function getStickUC(appObject) {
6
- return appObject.getUC(StickTransform3D_1.STICK_TRANFORM3D_UC_TYPE);
7
- }
8
- exports.getStickUC = getStickUC;