@vived/app 2.15.7 → 2.18.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.
- package/lib/Entities/Babylon.d.ts +13 -1
- package/lib/Entities/Babylon.js +45 -1
- package/lib/UseCases/LerpVector3.d.ts +26 -0
- package/lib/UseCases/LerpVector3.js +66 -0
- package/lib/UseCases/index.d.ts +1 -0
- package/lib/UseCases/index.js +1 -0
- package/lib/Utilities/lerpNumber.d.ts +1 -0
- package/lib/Utilities/lerpNumber.js +18 -0
- package/lib/ValueObjects/Vector3.d.ts +1 -0
- package/lib/ValueObjects/Vector3.js +7 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ParametricLine, Vector2, Vector3 } from "../ValueObjects";
|
|
1
|
+
import { ParametricLine, Result, Vector2, Vector3 } from "../ValueObjects";
|
|
2
2
|
export declare type OnBabylonChange = () => void;
|
|
3
3
|
export interface ScenePick {
|
|
4
4
|
mouseRay: ParametricLine;
|
|
@@ -16,6 +16,8 @@ export interface Babylon {
|
|
|
16
16
|
renderCanvas?: HTMLCanvasElement;
|
|
17
17
|
scenePick: (pixelPos: Vector2) => ScenePick;
|
|
18
18
|
sceneRay: (pixelPos: Vector2) => ParametricLine;
|
|
19
|
+
sceneObjectPick: (pixelPos: Vector2) => Result<string, SceneObjectPickErrors>;
|
|
20
|
+
makeSceneObjectMeta: (id: string) => object;
|
|
19
21
|
updateCanvasSize: () => void;
|
|
20
22
|
submitRenderCanvas: (canvas: HTMLCanvasElement) => void;
|
|
21
23
|
clearRenderCanvas: () => void;
|
|
@@ -28,3 +30,13 @@ export interface Babylon {
|
|
|
28
30
|
removeObserver: (observer: OnBabylonChange) => void;
|
|
29
31
|
}
|
|
30
32
|
export declare function makeBabylon(): Babylon;
|
|
33
|
+
export declare class SceneObjectPickErrorNoPicker extends Error {
|
|
34
|
+
constructor();
|
|
35
|
+
}
|
|
36
|
+
export declare class SceneObjectPickErrorNoPick extends Error {
|
|
37
|
+
constructor();
|
|
38
|
+
}
|
|
39
|
+
export declare class SceneObjectPickErrorNoID extends Error {
|
|
40
|
+
constructor();
|
|
41
|
+
}
|
|
42
|
+
export declare type SceneObjectPickErrors = SceneObjectPickErrorNoPicker | SceneObjectPickErrorNoPick | SceneObjectPickErrorNoID;
|
package/lib/Entities/Babylon.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeBabylon = void 0;
|
|
3
|
+
exports.SceneObjectPickErrorNoID = exports.SceneObjectPickErrorNoPick = exports.SceneObjectPickErrorNoPicker = exports.makeBabylon = void 0;
|
|
4
4
|
const ValueObjects_1 = require("../ValueObjects");
|
|
5
5
|
const MemoizedBoolean_1 = require("./MemoizedBoolean");
|
|
6
6
|
const MemoizedVector2_1 = require("./MemoizedVector2");
|
|
@@ -11,6 +11,7 @@ function makeBabylon() {
|
|
|
11
11
|
exports.makeBabylon = makeBabylon;
|
|
12
12
|
class BabylonImp {
|
|
13
13
|
constructor() {
|
|
14
|
+
this._scenePickerHasBeenSet = false;
|
|
14
15
|
this.scenePick = () => {
|
|
15
16
|
console.warn("orignal scene picker");
|
|
16
17
|
return {
|
|
@@ -73,10 +74,32 @@ class BabylonImp {
|
|
|
73
74
|
};
|
|
74
75
|
this.registerScenePicker = (picker) => {
|
|
75
76
|
this.scenePick = picker;
|
|
77
|
+
this._scenePickerHasBeenSet = true;
|
|
76
78
|
};
|
|
77
79
|
this.registerSceneRayer = (rayer) => {
|
|
78
80
|
this.sceneRay = rayer;
|
|
79
81
|
};
|
|
82
|
+
this.sceneObjectPick = (pixelPos) => {
|
|
83
|
+
var _a;
|
|
84
|
+
if (!this._scenePickerHasBeenSet) {
|
|
85
|
+
return ValueObjects_1.reject(new SceneObjectPickErrorNoPicker());
|
|
86
|
+
}
|
|
87
|
+
const scenePick = this.scenePick(pixelPos);
|
|
88
|
+
if (!scenePick.hit) {
|
|
89
|
+
return ValueObjects_1.reject(new SceneObjectPickErrorNoPick());
|
|
90
|
+
}
|
|
91
|
+
if (!((_a = scenePick.objectPickMeta) === null || _a === void 0 ? void 0 : _a.hasOwnProperty("sceneObjectID"))) {
|
|
92
|
+
return ValueObjects_1.reject(new SceneObjectPickErrorNoID());
|
|
93
|
+
}
|
|
94
|
+
const sceneObjectId = scenePick.objectPickMeta.sceneObjectID;
|
|
95
|
+
if (!sceneObjectId) {
|
|
96
|
+
return ValueObjects_1.reject(new SceneObjectPickErrorNoID());
|
|
97
|
+
}
|
|
98
|
+
return ValueObjects_1.resolve(sceneObjectId);
|
|
99
|
+
};
|
|
100
|
+
this.makeSceneObjectMeta = (id) => {
|
|
101
|
+
return { sceneObjectID: id };
|
|
102
|
+
};
|
|
80
103
|
this.memoizedShowInspector = new MemoizedBoolean_1.MemoizedBoolean(false, this.observers.notify);
|
|
81
104
|
this.memoizedCanvasSize = new MemoizedVector2_1.MemoizedVector2(ValueObjects_1.Vector2.One(), this.observers.notify);
|
|
82
105
|
}
|
|
@@ -96,3 +119,24 @@ class BabylonImp {
|
|
|
96
119
|
this.memoizedCanvasSize.val = val;
|
|
97
120
|
}
|
|
98
121
|
}
|
|
122
|
+
class SceneObjectPickErrorNoPicker extends Error {
|
|
123
|
+
constructor() {
|
|
124
|
+
super();
|
|
125
|
+
this.message = "No picker has been registered";
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.SceneObjectPickErrorNoPicker = SceneObjectPickErrorNoPicker;
|
|
129
|
+
class SceneObjectPickErrorNoPick extends Error {
|
|
130
|
+
constructor() {
|
|
131
|
+
super();
|
|
132
|
+
this.message = "Nothing was picked on";
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.SceneObjectPickErrorNoPick = SceneObjectPickErrorNoPick;
|
|
136
|
+
class SceneObjectPickErrorNoID extends Error {
|
|
137
|
+
constructor() {
|
|
138
|
+
super();
|
|
139
|
+
this.message = "Picked object does not have a scene ID";
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.SceneObjectPickErrorNoID = SceneObjectPickErrorNoID;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Vector3 } from "../ValueObjects";
|
|
2
|
+
export interface LerpVector3DTO {
|
|
3
|
+
initial: Vector3;
|
|
4
|
+
final: Vector3;
|
|
5
|
+
durationMS: number;
|
|
6
|
+
tickInterval?: number;
|
|
7
|
+
ease?: (percent: number) => number;
|
|
8
|
+
onTick?: (v: Vector3) => void;
|
|
9
|
+
onComplete?: () => void;
|
|
10
|
+
onCanceled?: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare class LerpVector3 {
|
|
13
|
+
private initial;
|
|
14
|
+
private final;
|
|
15
|
+
private durationMS;
|
|
16
|
+
private tickInterval;
|
|
17
|
+
private ease;
|
|
18
|
+
private onTick;
|
|
19
|
+
private onComplete;
|
|
20
|
+
private onCanceled;
|
|
21
|
+
private interval?;
|
|
22
|
+
private chrono;
|
|
23
|
+
cancel: () => void;
|
|
24
|
+
private tick;
|
|
25
|
+
constructor(lerpParams: LerpVector3DTO);
|
|
26
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LerpVector3 = void 0;
|
|
4
|
+
const ValueObjects_1 = require("../ValueObjects");
|
|
5
|
+
class LerpVector3 {
|
|
6
|
+
constructor(lerpParams) {
|
|
7
|
+
this.tickInterval = 10;
|
|
8
|
+
this.ease = (p) => p;
|
|
9
|
+
this.onTick = () => {
|
|
10
|
+
// Override as needed
|
|
11
|
+
};
|
|
12
|
+
this.onComplete = () => {
|
|
13
|
+
// Override as needed
|
|
14
|
+
};
|
|
15
|
+
this.onCanceled = () => {
|
|
16
|
+
// Override as needed
|
|
17
|
+
};
|
|
18
|
+
this.chrono = 0;
|
|
19
|
+
this.cancel = () => {
|
|
20
|
+
if (this.interval) {
|
|
21
|
+
clearInterval(this.interval);
|
|
22
|
+
this.onCanceled();
|
|
23
|
+
this.interval = undefined;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
this.tick = () => {
|
|
27
|
+
this.chrono = this.chrono + this.tickInterval;
|
|
28
|
+
let nomralizedTime = this.chrono / this.durationMS;
|
|
29
|
+
if (nomralizedTime > 1) {
|
|
30
|
+
nomralizedTime = 1;
|
|
31
|
+
}
|
|
32
|
+
const percent = this.ease(nomralizedTime);
|
|
33
|
+
const lerpedVec = ValueObjects_1.Vector3.Lerp(this.initial, this.final, percent);
|
|
34
|
+
this.onTick(lerpedVec);
|
|
35
|
+
if (nomralizedTime >= 1 && this.interval) {
|
|
36
|
+
clearInterval(this.interval);
|
|
37
|
+
this.interval = undefined;
|
|
38
|
+
if (this.onComplete) {
|
|
39
|
+
this.onComplete();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
this.initial = lerpParams.initial;
|
|
44
|
+
this.final = lerpParams.final;
|
|
45
|
+
this.durationMS = lerpParams.durationMS;
|
|
46
|
+
if (lerpParams.onTick) {
|
|
47
|
+
this.onTick = lerpParams.onTick;
|
|
48
|
+
}
|
|
49
|
+
if (lerpParams.tickInterval) {
|
|
50
|
+
this.tickInterval = lerpParams.tickInterval;
|
|
51
|
+
}
|
|
52
|
+
if (lerpParams.onComplete) {
|
|
53
|
+
this.onComplete = lerpParams.onComplete;
|
|
54
|
+
}
|
|
55
|
+
if (lerpParams.ease) {
|
|
56
|
+
this.ease = lerpParams.ease;
|
|
57
|
+
}
|
|
58
|
+
if (lerpParams.onCanceled) {
|
|
59
|
+
this.onCanceled = lerpParams.onCanceled;
|
|
60
|
+
}
|
|
61
|
+
this.interval = setInterval(() => {
|
|
62
|
+
this.tick();
|
|
63
|
+
}, this.tickInterval);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.LerpVector3 = LerpVector3;
|
package/lib/UseCases/index.d.ts
CHANGED
package/lib/UseCases/index.js
CHANGED
|
@@ -13,3 +13,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
__exportStar(require("./setDevicePreview"), exports);
|
|
14
14
|
__exportStar(require("./FocusCamera"), exports);
|
|
15
15
|
__exportStar(require("./QuestionChallenge"), exports);
|
|
16
|
+
__exportStar(require("./LerpVector3"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function lerpNumber(start: number, end: number, percent: number, clamp?: boolean): number;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lerpNumber = void 0;
|
|
4
|
+
function lerpNumber(start, end, percent, clamp = false) {
|
|
5
|
+
const range = end - start;
|
|
6
|
+
if (!clamp) {
|
|
7
|
+
return percent * range + start;
|
|
8
|
+
}
|
|
9
|
+
let clampedP = percent;
|
|
10
|
+
if (clampedP < 0) {
|
|
11
|
+
clampedP = 0;
|
|
12
|
+
}
|
|
13
|
+
else if (clampedP > 1) {
|
|
14
|
+
clampedP = 1;
|
|
15
|
+
}
|
|
16
|
+
return clampedP * range + start;
|
|
17
|
+
}
|
|
18
|
+
exports.lerpNumber = lerpNumber;
|
|
@@ -15,6 +15,7 @@ export declare class Vector3 {
|
|
|
15
15
|
static Cross: (a: Vector3, b: Vector3) => Vector3;
|
|
16
16
|
static Dot: (a: Vector3, b: Vector3) => number;
|
|
17
17
|
static NewVectorOfLength: (vec: Vector3, length: number) => Vector3;
|
|
18
|
+
static Lerp: (initial: Vector3, final: Vector3, percent: number) => Vector3;
|
|
18
19
|
readonly x: number;
|
|
19
20
|
readonly y: number;
|
|
20
21
|
readonly z: number;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Vector3 = void 0;
|
|
4
|
+
const lerpNumber_1 = require("../Utilities/lerpNumber");
|
|
4
5
|
class Vector3 {
|
|
5
6
|
constructor(x, y, z) {
|
|
6
7
|
this.x = x;
|
|
@@ -89,3 +90,9 @@ Vector3.NewVectorOfLength = (vec, length) => {
|
|
|
89
90
|
const unit = vec.unit;
|
|
90
91
|
return new Vector3(length * unit.x, length * unit.y, length * unit.z);
|
|
91
92
|
};
|
|
93
|
+
Vector3.Lerp = (initial, final, percent) => {
|
|
94
|
+
const x = lerpNumber_1.lerpNumber(initial.x, final.x, percent);
|
|
95
|
+
const y = lerpNumber_1.lerpNumber(initial.y, final.y, percent);
|
|
96
|
+
const z = lerpNumber_1.lerpNumber(initial.z, final.z, percent);
|
|
97
|
+
return new Vector3(x, y, z);
|
|
98
|
+
};
|