@vived/app 2.45.0 → 2.46.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 (50) 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/Quaternion.d.ts +9 -13
  47. package/lib/ValueObjects/Quaternion.js +2 -1
  48. package/lib/ValueObjects/Vector3.d.ts +7 -10
  49. package/lib/ValueObjects/Vector3.js +1 -0
  50. 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,6 +1,12 @@
1
1
  import { Angle } from "./Angle";
2
2
  import { Matrix } from "./Matrix";
3
3
  import { Vector3 } from "./Vector3";
4
+ export interface QuaterionDTO {
5
+ x: number;
6
+ y: number;
7
+ z: number;
8
+ w: number;
9
+ }
4
10
  export declare class Quaternion {
5
11
  /**
6
12
  * Checks to see if two Quaternions are equal
@@ -35,12 +41,7 @@ export declare class Quaternion {
35
41
  * @param dto The Data Transfer Object
36
42
  * @returns The Quaternion
37
43
  */
38
- static FromDTO(dto: {
39
- x: number;
40
- y: number;
41
- z: number;
42
- w: number;
43
- }): Quaternion;
44
+ static FromDTO(dto: QuaterionDTO): Quaternion;
44
45
  /**
45
46
  * Creates an Identity Quaternion
46
47
  * @returns An Identity Quaternion
@@ -98,14 +99,9 @@ export declare class Quaternion {
98
99
  get angle(): Angle;
99
100
  get axis(): Vector3;
100
101
  /**
101
- * Get the vector as a Data Transfer Object
102
+ * Get the quaternion as a Data Transfer Object
102
103
  */
103
- get dto(): {
104
- x: number;
105
- y: number;
106
- z: number;
107
- w: number;
108
- };
104
+ get dto(): QuaterionDTO;
109
105
  readonly x: number;
110
106
  readonly y: number;
111
107
  readonly z: number;
@@ -4,6 +4,7 @@ exports.Quaternion = void 0;
4
4
  const Angle_1 = require("./Angle");
5
5
  const Matrix_1 = require("./Matrix");
6
6
  const Vector3_1 = require("./Vector3");
7
+ ;
7
8
  class Quaternion {
8
9
  constructor(x, y, z, w) {
9
10
  this.x = x;
@@ -248,7 +249,7 @@ class Quaternion {
248
249
  return new Vector3_1.Vector3(x, y, z);
249
250
  }
250
251
  /**
251
- * Get the vector as a Data Transfer Object
252
+ * Get the quaternion as a Data Transfer Object
252
253
  */
253
254
  get dto() {
254
255
  return { x: this.x, y: this.y, z: this.z, w: this.w };
@@ -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.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",