@vived/app 2.45.0 → 2.46.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 (48) hide show
  1. package/lib/Entities/ModelMesh.d.ts +53 -0
  2. package/lib/Entities/ModelMesh.js +106 -0
  3. package/lib/Entities/SceneModel.d.ts +7 -7
  4. package/lib/Entities/SceneModel.js +16 -14
  5. package/lib/Entities/SceneModelMesh.d.ts +65 -0
  6. package/lib/Entities/SceneModelMesh.js +159 -0
  7. package/lib/Entities/SceneObject.d.ts +1 -4
  8. package/lib/Entities/SceneObject.js +0 -17
  9. package/lib/Entities/SceneRoot.d.ts +19 -59
  10. package/lib/Entities/SceneRoot.js +94 -26
  11. package/lib/Entities/index.d.ts +1 -1
  12. package/lib/Entities/index.js +1 -1
  13. package/lib/PresentationManagers/SceneObject/SceneObjectPM.d.ts +17 -0
  14. package/lib/PresentationManagers/SceneObject/SceneObjectPM.js +40 -0
  15. package/lib/PresentationManagers/SceneObject/index.d.ts +1 -0
  16. package/lib/PresentationManagers/SceneObject/index.js +13 -0
  17. package/lib/PresentationManagers/index.d.ts +1 -0
  18. package/lib/PresentationManagers/index.js +1 -0
  19. package/lib/UseCases/SceneModel/PeelSceneMeshBase.d.ts +20 -0
  20. package/lib/UseCases/SceneModel/PeelSceneMeshBase.js +66 -0
  21. package/lib/UseCases/SceneModel/SerializeActiveModel.d.ts +18 -0
  22. package/lib/UseCases/SceneModel/SerializeActiveModel.js +74 -0
  23. package/lib/UseCases/SceneModel/SetMeshesEnabledHook.d.ts +7 -0
  24. package/lib/UseCases/SceneModel/SetMeshesEnabledHook.js +22 -0
  25. package/lib/UseCases/SceneModel/index.d.ts +4 -2
  26. package/lib/UseCases/SceneModel/index.js +3 -1
  27. package/lib/UseCases/SceneModel/loadNewModel.d.ts +2 -0
  28. package/lib/UseCases/SceneModel/loadNewModel.js +84 -0
  29. package/lib/UseCases/SceneModel/setActiveSceneModel.js +4 -3
  30. package/lib/UseCases/SceneModel/setupSceneModelFromData.d.ts +2 -0
  31. package/lib/UseCases/SceneModel/setupSceneModelFromData.js +72 -0
  32. package/lib/UseCases/SceneObjects/PeelSceneObject.d.ts +18 -0
  33. package/lib/UseCases/SceneObjects/PeelSceneObject.js +61 -0
  34. package/lib/UseCases/SceneObjects/index.d.ts +1 -0
  35. package/lib/UseCases/SceneObjects/index.js +13 -0
  36. package/lib/UseCases/SceneRoot/SerializeSceneRoot.d.ts +15 -0
  37. package/lib/UseCases/SceneRoot/SerializeSceneRoot.js +26 -7
  38. package/lib/UseCases/SceneRoot/index.d.ts +1 -0
  39. package/lib/UseCases/SceneRoot/index.js +1 -0
  40. package/lib/UseCases/SceneRoot/initializeSceneRoot.d.ts +2 -0
  41. package/lib/UseCases/SceneRoot/initializeSceneRoot.js +9 -0
  42. package/lib/UseCases/SceneRoot/setupSceneRoot.d.ts +2 -0
  43. package/lib/UseCases/SceneRoot/setupSceneRoot.js +11 -0
  44. package/lib/UseCases/index.d.ts +1 -1
  45. package/lib/UseCases/index.js +1 -1
  46. package/lib/ValueObjects/Vector3.d.ts +7 -10
  47. package/lib/ValueObjects/Vector3.js +1 -0
  48. package/package.json +1 -1
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeSetupSceneModelFromData = void 0;
4
+ const Entities_1 = require("../../Entities");
5
+ const ValueObjects_1 = require("../../ValueObjects");
6
+ function makeSetupSceneModelFromData(sceneObjectRepo) {
7
+ return function setupSceneModelFromData(sceneModel, data) {
8
+ if (data.version === 1) {
9
+ applyDataV1(sceneModel, data, sceneObjectRepo);
10
+ }
11
+ else if (data.version === 0) {
12
+ const mappedData = mapV0DataToV1(data);
13
+ applyDataV1(sceneModel, mappedData, sceneObjectRepo);
14
+ }
15
+ else {
16
+ console.warn("[setupSceneModelFromData] Unsupported version number");
17
+ }
18
+ };
19
+ }
20
+ exports.makeSetupSceneModelFromData = makeSetupSceneModelFromData;
21
+ function mapV0DataToV1(dataV0) {
22
+ const { bounds_max, bounds_min, defaultPosition, defaultRotation, defaultScale, name, objects: objectsV0, } = dataV0;
23
+ const objects = objectsV0.map((objV0) => {
24
+ return Object.assign(Object.assign({}, objV0), { version: 1 });
25
+ });
26
+ return {
27
+ bounds_max,
28
+ bounds_min,
29
+ defaultPosition,
30
+ defaultRotation,
31
+ defaultScale,
32
+ name,
33
+ version: 1,
34
+ objects,
35
+ };
36
+ }
37
+ function applyDataV1(sceneModel, data, sceneObjectRepo) {
38
+ sceneModel.name = data.name;
39
+ sceneModel.bounds_min = ValueObjects_1.Vector3.FromDTO(data.bounds_min);
40
+ sceneModel.bounds_max = ValueObjects_1.Vector3.FromDTO(data.bounds_max);
41
+ sceneModel.defaultPosition = ValueObjects_1.Vector3.FromDTO(data.defaultPosition);
42
+ sceneModel.defaultScale = data.defaultScale;
43
+ sceneModel.defaultRotation = ValueObjects_1.Quaternion.FromDTO(data.defaultRotation);
44
+ const objectsToKeep = [];
45
+ data.objects.forEach((objectDTO) => {
46
+ const existingObj = sceneModel.getObjectById(objectDTO.id);
47
+ if (existingObj) {
48
+ console.log("EXISTING");
49
+ existingObj.applyData(objectDTO);
50
+ }
51
+ else {
52
+ console.log("NEW");
53
+ let so = sceneObjectRepo.get(objectDTO.id);
54
+ if (!so) {
55
+ so = Entities_1.makeSceneObject(objectDTO.id);
56
+ sceneObjectRepo.add(objectDTO.id, so);
57
+ }
58
+ const newObj = Entities_1.makeModelMesh(objectDTO, so);
59
+ sceneModel.addObject(newObj);
60
+ }
61
+ objectsToKeep.push(objectDTO.id);
62
+ });
63
+ const allObjects = sceneModel.getAllObjects().map((modelMesh) => {
64
+ return modelMesh.id;
65
+ });
66
+ allObjects.forEach((obj) => {
67
+ if (!objectsToKeep.includes(obj)) {
68
+ sceneModel.removeObject(obj);
69
+ sceneObjectRepo.remove(obj);
70
+ }
71
+ });
72
+ }
@@ -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);
@@ -8,6 +8,7 @@ export declare class SerializeSceneRoot implements SerializedSystem {
8
8
  getSystemState(): object;
9
9
  applySystemState(serializedState: object, version: number, transitionTime: number): void;
10
10
  applyDefaultState(transitionDuration: number): void;
11
+ private applyV2Data;
11
12
  private applyV1Data;
12
13
  constructor(sceneRoot: SceneRoot, stateMachine: StateMachine);
13
14
  }
@@ -16,3 +17,17 @@ export interface SceneRootDataV1 {
16
17
  rotation: [number, number, number, number];
17
18
  scale: [number, number, number];
18
19
  }
20
+ export interface SceneRootDataV2 {
21
+ position: {
22
+ x: number;
23
+ y: number;
24
+ z: number;
25
+ };
26
+ rotation: {
27
+ x: number;
28
+ y: number;
29
+ z: number;
30
+ w: number;
31
+ };
32
+ scale: number;
33
+ }
@@ -5,17 +5,16 @@ const ValueObjects_1 = require("../../ValueObjects");
5
5
  class SerializeSceneRoot {
6
6
  constructor(sceneRoot, stateMachine) {
7
7
  this.name = "sceneRoot";
8
- this.seriliziationVersion = 1;
8
+ this.seriliziationVersion = 2;
9
9
  this.sceneRoot = sceneRoot;
10
10
  this.stateMachine = stateMachine;
11
11
  stateMachine.registerSerializedSystem(this);
12
12
  }
13
13
  getSystemState() {
14
- const rootTransform = this.sceneRoot.transform;
15
14
  const data = {
16
- position: rootTransform.localPosition.array,
17
- rotation: rootTransform.localRotation.toArray(),
18
- scale: rootTransform.localScale.array,
15
+ position: this.sceneRoot.position.dto,
16
+ rotation: this.sceneRoot.rotation.dto,
17
+ scale: this.sceneRoot.scale,
19
18
  };
20
19
  return data;
21
20
  }
@@ -25,6 +24,10 @@ class SerializeSceneRoot {
25
24
  const castState = serializedState;
26
25
  this.applyV1Data(castState, transitionTime);
27
26
  }
27
+ else if (version === 2) {
28
+ const castState = serializedState;
29
+ this.applyV2Data(castState, transitionTime);
30
+ }
28
31
  else {
29
32
  console.warn(`[SerializeSceneRoot] Unsupported version number ${version}. Defaulting`);
30
33
  this.applyDefaultState(transitionTime);
@@ -36,13 +39,29 @@ class SerializeSceneRoot {
36
39
  }
37
40
  }
38
41
  applyDefaultState(transitionDuration) {
39
- this.sceneRoot.transform.lerp(transitionDuration * 1000, this.stateMachine.transitionEaseFunction, this.sceneRoot.defaultPosition, this.sceneRoot.defaultRoation, this.sceneRoot.defaultScale);
42
+ this.sceneRoot.lerpToDefault(transitionDuration * 1000, this.stateMachine.transitionEaseFunction);
43
+ }
44
+ applyV2Data(data, transitionTime) {
45
+ if (!this.sceneRoot.sceneObject) {
46
+ console.warn("[SerializeSceneRoot] scene root does not have a scene object");
47
+ return {};
48
+ }
49
+ const pos = ValueObjects_1.Vector3.FromDTO(data.position);
50
+ const rot = ValueObjects_1.Quaternion.FromDTO(data.rotation);
51
+ const scale = new ValueObjects_1.Vector3(data.scale, data.scale, data.scale);
52
+ const rootTransform = this.sceneRoot.sceneObject.transform;
53
+ rootTransform.lerp(transitionTime * 1000, this.stateMachine.transitionEaseFunction, pos, rot, scale);
40
54
  }
41
55
  applyV1Data(data, transitionTime) {
56
+ if (!this.sceneRoot.sceneObject) {
57
+ console.warn("[SerializeSceneRoot] scene root does not have a scene object");
58
+ return {};
59
+ }
42
60
  const pos = ValueObjects_1.Vector3.FromArray(data.position);
43
61
  const rot = ValueObjects_1.Quaternion.FromArray(data.rotation);
44
62
  const scale = ValueObjects_1.Vector3.FromArray(data.scale);
45
- this.sceneRoot.transform.lerp(transitionTime * 1000, this.stateMachine.transitionEaseFunction, pos, rot, scale);
63
+ const rootTransform = this.sceneRoot.sceneObject.transform;
64
+ rootTransform.lerp(transitionTime * 1000, this.stateMachine.transitionEaseFunction, pos, rot, scale);
46
65
  }
47
66
  }
48
67
  exports.SerializeSceneRoot = SerializeSceneRoot;
@@ -1 +1,2 @@
1
1
  export * from "./SerializeSceneRoot";
2
+ export * from "./setupSceneRoot";
@@ -11,3 +11,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./SerializeSceneRoot"), exports);
14
+ __exportStar(require("./setupSceneRoot"), exports);
@@ -0,0 +1,2 @@
1
+ import { DefaultSceneRootData, SceneObjectsRepo, SceneRoot } from "../../Entities";
2
+ export declare function initializeSceneRoot(defaultData: DefaultSceneRootData, sceneRoot: SceneRoot, sceneObjectRepo: SceneObjectsRepo): void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initializeSceneRoot = void 0;
4
+ const Entities_1 = require("../../Entities");
5
+ function initializeSceneRoot(defaultData, sceneRoot, sceneObjectRepo) {
6
+ sceneRoot.applyDefaultData(defaultData);
7
+ sceneObjectRepo.add(Entities_1.SCENE_ROOT_ID, sceneRoot.sceneObject);
8
+ }
9
+ exports.initializeSceneRoot = initializeSceneRoot;
@@ -0,0 +1,2 @@
1
+ import { DefaultSceneRootData, SceneObjectsRepo, SceneRoot } from "../../Entities";
2
+ export declare function setupSceneRoot(defaultData: DefaultSceneRootData, sceneRoot: SceneRoot, sceneObjectRepo: SceneObjectsRepo): void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupSceneRoot = void 0;
4
+ const Entities_1 = require("../../Entities");
5
+ function setupSceneRoot(defaultData, sceneRoot, sceneObjectRepo) {
6
+ sceneRoot.applyDefaultData(defaultData);
7
+ const so = Entities_1.makeSceneObject(Entities_1.SCENE_ROOT_ID);
8
+ sceneRoot.sceneObject = so;
9
+ sceneObjectRepo.add(Entities_1.SCENE_ROOT_ID, so);
10
+ }
11
+ exports.setupSceneRoot = setupSceneRoot;
@@ -2,7 +2,7 @@ export * from "./setDevicePreview";
2
2
  export * from "./Handlers";
3
3
  export * from "./QuestionChallenge";
4
4
  export * from "./SceneModel";
5
- export * from "./SceneObject";
5
+ export * from "./SceneObjects";
6
6
  export * from "./LerpVector3";
7
7
  export * from "./SceneRoot";
8
8
  export * from "./HoverLabels/trySetHoverLabel";
@@ -14,7 +14,7 @@ __exportStar(require("./setDevicePreview"), exports);
14
14
  __exportStar(require("./Handlers"), exports);
15
15
  __exportStar(require("./QuestionChallenge"), exports);
16
16
  __exportStar(require("./SceneModel"), exports);
17
- __exportStar(require("./SceneObject"), exports);
17
+ __exportStar(require("./SceneObjects"), exports);
18
18
  __exportStar(require("./LerpVector3"), exports);
19
19
  __exportStar(require("./SceneRoot"), exports);
20
20
  __exportStar(require("./HoverLabels/trySetHoverLabel"), exports);
@@ -1,4 +1,9 @@
1
1
  import { Matrix } from "./Matrix";
2
+ export interface Vector3DTO {
3
+ x: number;
4
+ y: number;
5
+ z: number;
6
+ }
2
7
  export declare class Vector3 {
3
8
  /**
4
9
  * Creates a zero vector
@@ -57,11 +62,7 @@ export declare class Vector3 {
57
62
  * @param dto The Data Transfer Object
58
63
  * @returns The Vector
59
64
  */
60
- static FromDTO(dto: {
61
- x: number;
62
- y: number;
63
- z: number;
64
- }): Vector3;
65
+ static FromDTO(dto: Vector3DTO): Vector3;
65
66
  /**
66
67
  * Adds Vector B to Vector A
67
68
  * @param a Vector A
@@ -142,10 +143,6 @@ export declare class Vector3 {
142
143
  /**
143
144
  * Get the vector as a Data Transfer Object
144
145
  */
145
- get dto(): {
146
- x: number;
147
- y: number;
148
- z: number;
149
- };
146
+ get dto(): Vector3DTO;
150
147
  constructor(x: number, y: number, z: number);
151
148
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Vector3 = void 0;
4
4
  const lerpNumber_1 = require("../Utilities/lerpNumber");
5
+ ;
5
6
  class Vector3 {
6
7
  constructor(x, y, z) {
7
8
  this.x = x;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/app",
3
- "version": "2.45.0",
3
+ "version": "2.46.0",
4
4
  "description": "Public package for the VIVED Learning App system",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",