@vived/core 1.0.1 → 1.2.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/dist/cjs/Entities/RangedNumber.js +36 -0
- package/dist/cjs/Entities/RangedNumber.js.map +1 -0
- package/dist/cjs/Entities/RangedNumber.test.js +96 -0
- package/dist/cjs/Entities/RangedNumber.test.js.map +1 -0
- package/dist/cjs/Entities/index.js +3 -2
- package/dist/cjs/Entities/index.js.map +1 -1
- package/dist/cjs/Utilities/LengthConverters.js +21 -0
- package/dist/cjs/Utilities/LengthConverters.js.map +1 -0
- package/dist/cjs/Utilities/LengthConverters.test.js +24 -0
- package/dist/cjs/Utilities/LengthConverters.test.js.map +1 -0
- package/dist/cjs/Utilities/LerpNumber.js +85 -0
- package/dist/cjs/Utilities/LerpNumber.js.map +1 -0
- package/dist/cjs/Utilities/LerpNumber.test.js +90 -0
- package/dist/cjs/Utilities/LerpNumber.test.js.map +1 -0
- package/dist/cjs/Utilities/degreesToRadians.js +7 -0
- package/dist/cjs/Utilities/degreesToRadians.js.map +1 -0
- package/dist/cjs/Utilities/degreesToRadians.test.js +9 -0
- package/dist/cjs/Utilities/degreesToRadians.test.js.map +1 -0
- package/dist/cjs/Utilities/easeFunctions.js +208 -0
- package/dist/cjs/Utilities/easeFunctions.js.map +1 -0
- package/dist/cjs/Utilities/easeFunctions.test.js +209 -0
- package/dist/cjs/Utilities/easeFunctions.test.js.map +1 -0
- package/dist/cjs/Utilities/generateUniqueID.js +8 -0
- package/dist/cjs/Utilities/generateUniqueID.js.map +1 -0
- package/dist/cjs/Utilities/index.js +22 -0
- package/dist/cjs/Utilities/index.js.map +1 -0
- package/dist/cjs/Utilities/interpolateNumber.js +18 -0
- package/dist/cjs/Utilities/interpolateNumber.js.map +1 -0
- package/dist/cjs/Utilities/interpolateNumber.test.js +26 -0
- package/dist/cjs/Utilities/interpolateNumber.test.js.map +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/Entities/RangedNumber.js +32 -0
- package/dist/esm/Entities/RangedNumber.js.map +1 -0
- package/dist/esm/Entities/RangedNumber.test.js +94 -0
- package/dist/esm/Entities/RangedNumber.test.js.map +1 -0
- package/dist/esm/Entities/index.js +3 -2
- package/dist/esm/Entities/index.js.map +1 -1
- package/dist/esm/Utilities/LengthConverters.js +15 -0
- package/dist/esm/Utilities/LengthConverters.js.map +1 -0
- package/dist/esm/Utilities/LengthConverters.test.js +22 -0
- package/dist/esm/Utilities/LengthConverters.test.js.map +1 -0
- package/dist/esm/Utilities/LerpNumber.js +81 -0
- package/dist/esm/Utilities/LerpNumber.js.map +1 -0
- package/dist/esm/Utilities/LerpNumber.test.js +88 -0
- package/dist/esm/Utilities/LerpNumber.test.js.map +1 -0
- package/dist/esm/Utilities/degreesToRadians.js +4 -0
- package/dist/esm/Utilities/degreesToRadians.js.map +1 -0
- package/dist/esm/Utilities/degreesToRadians.test.js +7 -0
- package/dist/esm/Utilities/degreesToRadians.test.js.map +1 -0
- package/dist/esm/Utilities/easeFunctions.js +183 -0
- package/dist/esm/Utilities/easeFunctions.js.map +1 -0
- package/dist/esm/Utilities/easeFunctions.test.js +207 -0
- package/dist/esm/Utilities/easeFunctions.test.js.map +1 -0
- package/dist/esm/Utilities/generateUniqueID.js +5 -0
- package/dist/esm/Utilities/generateUniqueID.js.map +1 -0
- package/dist/esm/Utilities/index.js +6 -0
- package/dist/esm/Utilities/index.js.map +1 -0
- package/dist/esm/Utilities/interpolateNumber.js +15 -0
- package/dist/esm/Utilities/interpolateNumber.js.map +1 -0
- package/dist/esm/Utilities/interpolateNumber.test.js +24 -0
- package/dist/esm/Utilities/interpolateNumber.test.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/Entities/RangedNumber.d.ts +17 -0
- package/dist/types/Entities/RangedNumber.d.ts.map +1 -0
- package/dist/types/Entities/RangedNumber.test.d.ts +2 -0
- package/dist/types/Entities/RangedNumber.test.d.ts.map +1 -0
- package/dist/types/Entities/index.d.ts +3 -2
- package/dist/types/Entities/index.d.ts.map +1 -1
- package/dist/types/Utilities/LengthConverters.d.ts +5 -0
- package/dist/types/Utilities/LengthConverters.d.ts.map +1 -0
- package/dist/types/Utilities/LengthConverters.test.d.ts +2 -0
- package/dist/types/Utilities/LengthConverters.test.d.ts.map +1 -0
- package/dist/types/Utilities/LerpNumber.d.ts +57 -0
- package/dist/types/Utilities/LerpNumber.d.ts.map +1 -0
- package/dist/types/Utilities/LerpNumber.test.d.ts +2 -0
- package/dist/types/Utilities/LerpNumber.test.d.ts.map +1 -0
- package/dist/types/Utilities/degreesToRadians.d.ts +2 -0
- package/dist/types/Utilities/degreesToRadians.d.ts.map +1 -0
- package/dist/types/Utilities/degreesToRadians.test.d.ts +2 -0
- package/dist/types/Utilities/degreesToRadians.test.d.ts.map +1 -0
- package/dist/types/Utilities/easeFunctions.d.ts +24 -0
- package/dist/types/Utilities/easeFunctions.d.ts.map +1 -0
- package/dist/types/Utilities/easeFunctions.test.d.ts +2 -0
- package/dist/types/Utilities/easeFunctions.test.d.ts.map +1 -0
- package/dist/types/Utilities/generateUniqueID.d.ts +2 -0
- package/dist/types/Utilities/generateUniqueID.d.ts.map +1 -0
- package/dist/types/Utilities/index.d.ts +6 -0
- package/dist/types/Utilities/index.d.ts.map +1 -0
- package/dist/types/Utilities/interpolateNumber.d.ts +2 -0
- package/dist/types/Utilities/interpolateNumber.d.ts.map +1 -0
- package/dist/types/Utilities/interpolateNumber.test.d.ts +2 -0
- package/dist/types/Utilities/interpolateNumber.test.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -2
- package/src/Entities/RangedNumber.test.ts +118 -0
- package/src/Entities/RangedNumber.ts +45 -0
- package/src/Entities/index.ts +3 -2
- package/src/Utilities/LengthConverters.test.ts +30 -0
- package/src/Utilities/LengthConverters.ts +18 -0
- package/src/Utilities/LerpNumber.test.ts +109 -0
- package/src/Utilities/LerpNumber.ts +109 -0
- package/src/Utilities/degreesToRadians.test.ts +8 -0
- package/src/Utilities/degreesToRadians.ts +3 -0
- package/src/Utilities/easeFunctions.test.ts +251 -0
- package/src/Utilities/easeFunctions.ts +180 -0
- package/src/Utilities/generateUniqueID.ts +5 -0
- package/src/Utilities/index.ts +6 -0
- package/src/Utilities/interpolateNumber.test.ts +28 -0
- package/src/Utilities/interpolateNumber.ts +21 -0
- package/src/index.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/index.ts","../src/appobject/appobject.test.ts","../src/appobject/appobject.ts","../src/appobject/appobjectcomponent.test.ts","../src/appobject/appobjectcomponent.ts","../src/appobject/appobjectcontroller.ts","../src/appobject/appobjectentity.test.ts","../src/appobject/appobjectentity.ts","../src/appobject/appobjectentityrepo.test.ts","../src/appobject/appobjectentityrepo.ts","../src/appobject/appobjectpm.test.ts","../src/appobject/appobjectpm.ts","../src/appobject/appobjectrepo.test.ts","../src/appobject/appobjectrepo.ts","../src/appobject/appobjectuc.ts","../src/appobject/appobjectview.ts","../src/appobject/getsingletoncomponent.test.ts","../src/appobject/getsingletoncomponent.ts","../src/appobject/index.ts","../src/appobject/printappobjectdetails.ts","../src/entities/memoizedangle.test.ts","../src/entities/memoizedangle.ts","../src/entities/memoizedboolean.test.ts","../src/entities/memoizedboolean.ts","../src/entities/memoizedcolor.test.ts","../src/entities/memoizedcolor.ts","../src/entities/memoizednumber.test.ts","../src/entities/memoizednumber.ts","../src/entities/memoizedquaternion.test.ts","../src/entities/memoizedquaternion.ts","../src/entities/memoizedstring.test.ts","../src/entities/memoizedstring.ts","../src/entities/memoizedvector2.test.ts","../src/entities/memoizedvector2.ts","../src/entities/memoizedvector3.test.ts","../src/entities/memoizedvector3.ts","../src/entities/observableentity.test.ts","../src/entities/observableentity.ts","../src/entities/observerlist.test.ts","../src/entities/observerlist.ts","../src/entities/index.ts","../src/types/appboundary.ts","../src/types/easefn.ts","../src/types/pmadapter.ts","../src/types/singletonpmadapter.ts","../src/types/index.ts","../src/valueobjects/angle.test.ts","../src/valueobjects/angle.ts","../src/valueobjects/color.test.ts","../src/valueobjects/color.ts","../src/valueobjects/linesegment2d.test.ts","../src/valueobjects/linesegment2d.ts","../src/valueobjects/matrix.test.ts","../src/valueobjects/matrix.ts","../src/valueobjects/parametricline.test.ts","../src/valueobjects/parametricline.ts","../src/valueobjects/parametricplane.test.ts","../src/valueobjects/parametricplane.ts","../src/valueobjects/quaternion.test.ts","../src/valueobjects/quaternion.ts","../src/valueobjects/rectangle.test.ts","../src/valueobjects/rectangle.ts","../src/valueobjects/vector2.test.ts","../src/valueobjects/vector2.ts","../src/valueobjects/vector3.test.ts","../src/valueobjects/vector3.ts","../src/valueobjects/index.ts"],"version":"5.8.2"}
|
|
1
|
+
{"root":["../src/index.ts","../src/appobject/appobject.test.ts","../src/appobject/appobject.ts","../src/appobject/appobjectcomponent.test.ts","../src/appobject/appobjectcomponent.ts","../src/appobject/appobjectcontroller.ts","../src/appobject/appobjectentity.test.ts","../src/appobject/appobjectentity.ts","../src/appobject/appobjectentityrepo.test.ts","../src/appobject/appobjectentityrepo.ts","../src/appobject/appobjectpm.test.ts","../src/appobject/appobjectpm.ts","../src/appobject/appobjectrepo.test.ts","../src/appobject/appobjectrepo.ts","../src/appobject/appobjectuc.ts","../src/appobject/appobjectview.ts","../src/appobject/getsingletoncomponent.test.ts","../src/appobject/getsingletoncomponent.ts","../src/appobject/index.ts","../src/appobject/printappobjectdetails.ts","../src/entities/memoizedangle.test.ts","../src/entities/memoizedangle.ts","../src/entities/memoizedboolean.test.ts","../src/entities/memoizedboolean.ts","../src/entities/memoizedcolor.test.ts","../src/entities/memoizedcolor.ts","../src/entities/memoizednumber.test.ts","../src/entities/memoizednumber.ts","../src/entities/memoizedquaternion.test.ts","../src/entities/memoizedquaternion.ts","../src/entities/memoizedstring.test.ts","../src/entities/memoizedstring.ts","../src/entities/memoizedvector2.test.ts","../src/entities/memoizedvector2.ts","../src/entities/memoizedvector3.test.ts","../src/entities/memoizedvector3.ts","../src/entities/observableentity.test.ts","../src/entities/observableentity.ts","../src/entities/observerlist.test.ts","../src/entities/observerlist.ts","../src/entities/rangednumber.test.ts","../src/entities/rangednumber.ts","../src/entities/index.ts","../src/types/appboundary.ts","../src/types/easefn.ts","../src/types/pmadapter.ts","../src/types/singletonpmadapter.ts","../src/types/index.ts","../src/utilities/lengthconverters.test.ts","../src/utilities/lengthconverters.ts","../src/utilities/lerpnumber.test.ts","../src/utilities/lerpnumber.ts","../src/utilities/degreestoradians.test.ts","../src/utilities/degreestoradians.ts","../src/utilities/easefunctions.test.ts","../src/utilities/easefunctions.ts","../src/utilities/generateuniqueid.ts","../src/utilities/index.ts","../src/utilities/interpolatenumber.test.ts","../src/utilities/interpolatenumber.ts","../src/valueobjects/angle.test.ts","../src/valueobjects/angle.ts","../src/valueobjects/color.test.ts","../src/valueobjects/color.ts","../src/valueobjects/linesegment2d.test.ts","../src/valueobjects/linesegment2d.ts","../src/valueobjects/matrix.test.ts","../src/valueobjects/matrix.ts","../src/valueobjects/parametricline.test.ts","../src/valueobjects/parametricline.ts","../src/valueobjects/parametricplane.test.ts","../src/valueobjects/parametricplane.ts","../src/valueobjects/quaternion.test.ts","../src/valueobjects/quaternion.ts","../src/valueobjects/rectangle.test.ts","../src/valueobjects/rectangle.ts","../src/valueobjects/vector2.test.ts","../src/valueobjects/vector2.ts","../src/valueobjects/vector3.test.ts","../src/valueobjects/vector3.ts","../src/valueobjects/index.ts"],"version":"5.8.2"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface RangedNumberProperties {
|
|
2
|
+
min: number;
|
|
3
|
+
max: number;
|
|
4
|
+
initialValue: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class RangedNumber {
|
|
7
|
+
readonly maxValue: number;
|
|
8
|
+
readonly minValue: number;
|
|
9
|
+
private _val;
|
|
10
|
+
get val(): number;
|
|
11
|
+
set val(x: number);
|
|
12
|
+
setValQuietly(val: number): void;
|
|
13
|
+
private clamp;
|
|
14
|
+
private onChangeCallback;
|
|
15
|
+
constructor(props: RangedNumberProperties, onChangeCallback: () => void);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=RangedNumber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangedNumber.d.ts","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAMhB;IAEM,aAAa,CAAC,GAAG,EAAE,MAAM;IAIhC,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,IAAI;CAOxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangedNumber.test.d.ts","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export * from "./ObservableEntity";
|
|
2
|
-
export * from "./ObserverList";
|
|
3
1
|
export * from "./MemoizedAngle";
|
|
4
2
|
export * from "./MemoizedBoolean";
|
|
5
3
|
export * from "./MemoizedColor";
|
|
@@ -8,4 +6,7 @@ export * from "./MemoizedQuaternion";
|
|
|
8
6
|
export * from "./MemoizedString";
|
|
9
7
|
export * from "./MemoizedVector2";
|
|
10
8
|
export * from "./MemoizedVector3";
|
|
9
|
+
export * from "./ObservableEntity";
|
|
10
|
+
export * from "./ObserverList";
|
|
11
|
+
export * from "./RangedNumber";
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function inchesToMeters(inches: number): number;
|
|
2
|
+
export declare function metersToInches(meters: number): number;
|
|
3
|
+
export declare function feetToMeters(feet: number): number;
|
|
4
|
+
export declare function metersToFeet(meters: number): number;
|
|
5
|
+
//# sourceMappingURL=LengthConverters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LengthConverters.d.ts","sourceRoot":"","sources":["../../../src/Utilities/LengthConverters.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LengthConverters.test.d.ts","sourceRoot":"","sources":["../../../src/Utilities/LengthConverters.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { EaseFn } from "../Types";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration object for performing a linear interpolation (lerp) operation.
|
|
4
|
+
* @interface LerpNumberDTO
|
|
5
|
+
*/
|
|
6
|
+
export interface LerpNumberDTO {
|
|
7
|
+
/** Starting value of the lerp */
|
|
8
|
+
start: number;
|
|
9
|
+
/** Target/ending value of the lerp */
|
|
10
|
+
end: number;
|
|
11
|
+
/** Callback function that receives the interpolated value on each update */
|
|
12
|
+
update: (value: number) => void;
|
|
13
|
+
/** Duration of the lerp in milliseconds. Defaults to LerpNumber.defaultDurationMS */
|
|
14
|
+
durationMS?: number;
|
|
15
|
+
/** Easing function to modify the interpolation curve. Defaults to LerpNumber.defaultEase */
|
|
16
|
+
ease?: EaseFn;
|
|
17
|
+
/** Optional callback function called when lerp completes naturally */
|
|
18
|
+
onComplete?: () => void;
|
|
19
|
+
/** Optional callback function called when lerp is cancelled */
|
|
20
|
+
onCancel?: () => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Utility class for smoothly interpolating between two numbers over time.
|
|
24
|
+
* Uses requestAnimationFrame for smooth animation and supports custom easing functions.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const lerper = new LerpNumber();
|
|
28
|
+
* // Animate from 0 to 100 over 2 seconds
|
|
29
|
+
* await lerper.lerp({
|
|
30
|
+
* start: 0,
|
|
31
|
+
* end: 100,
|
|
32
|
+
* durationMS: 2000,
|
|
33
|
+
* update: (value) => console.log(value)
|
|
34
|
+
* });
|
|
35
|
+
*/
|
|
36
|
+
export declare class LerpNumber {
|
|
37
|
+
defaultDurationMS: number;
|
|
38
|
+
defaultEase: EaseFn;
|
|
39
|
+
get isLerping(): boolean;
|
|
40
|
+
private _isLerping;
|
|
41
|
+
/**
|
|
42
|
+
* Cancels the current lerp operation if one is in progress.
|
|
43
|
+
* Triggers the onCancel callback if provided in the original lerp configuration.
|
|
44
|
+
*/
|
|
45
|
+
cancel(): void;
|
|
46
|
+
private _cancelLerp;
|
|
47
|
+
/**
|
|
48
|
+
* Initiates a lerp (linear interpolation) operation.
|
|
49
|
+
* If a lerp is already in progress, it will be cancelled before starting the new one.
|
|
50
|
+
*
|
|
51
|
+
* @param data - Configuration object for the lerp operation
|
|
52
|
+
* @returns Promise that resolves when the lerp completes or is cancelled
|
|
53
|
+
* @throws Never throws, but may reject if the update function throws
|
|
54
|
+
*/
|
|
55
|
+
lerp: (data: LerpNumberDTO) => Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=LerpNumber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LerpNumber.d.ts","sourceRoot":"","sources":["../../../src/Utilities/LerpNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAU;IACd,iBAAiB,SAAQ;IACzB,WAAW,EAAE,MAAM,CAAc;IAExC,IAAW,SAAS,YAEnB;IACD,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;IACI,MAAM;IAMb,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;;;OAOG;IACH,IAAI,GAAI,MAAM,aAAa,KAAG,OAAO,CAAC,IAAI,CAAC,CAwCzC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LerpNumber.test.d.ts","sourceRoot":"","sources":["../../../src/Utilities/LerpNumber.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"degreesToRadians.d.ts","sourceRoot":"","sources":["../../../src/Utilities/degreesToRadians.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAE,MAAM,CAEnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"degreesToRadians.test.d.ts","sourceRoot":"","sources":["../../../src/Utilities/degreesToRadians.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EaseFn } from "../Types";
|
|
2
|
+
export declare const easeLinear: EaseFn;
|
|
3
|
+
export declare const quadIn: EaseFn;
|
|
4
|
+
export declare const quadOut: EaseFn;
|
|
5
|
+
export declare const quadInOut: EaseFn;
|
|
6
|
+
export declare const cubicIn: EaseFn;
|
|
7
|
+
export declare const cubicOut: EaseFn;
|
|
8
|
+
export declare const cubicInOut: EaseFn;
|
|
9
|
+
export declare const expoIn: EaseFn;
|
|
10
|
+
export declare const expoOut: EaseFn;
|
|
11
|
+
export declare const expoInOut: EaseFn;
|
|
12
|
+
export declare const sinIn: EaseFn;
|
|
13
|
+
export declare const sinOut: EaseFn;
|
|
14
|
+
export declare const sinInOut: EaseFn;
|
|
15
|
+
export declare const quartIn: EaseFn;
|
|
16
|
+
export declare const quartOut: EaseFn;
|
|
17
|
+
export declare const quartInOut: EaseFn;
|
|
18
|
+
export declare const quintIn: EaseFn;
|
|
19
|
+
export declare const quintOut: EaseFn;
|
|
20
|
+
export declare const quintInOut: EaseFn;
|
|
21
|
+
export declare const circIn: EaseFn;
|
|
22
|
+
export declare const circOut: EaseFn;
|
|
23
|
+
export declare const circInOut: EaseFn;
|
|
24
|
+
//# sourceMappingURL=easeFunctions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easeFunctions.d.ts","sourceRoot":"","sources":["../../../src/Utilities/easeFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,eAAO,MAAM,UAAU,EAAE,MAKxB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAKpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MASvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAKrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,MAKtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAWxB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAKpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAKnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAKpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,MAKtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAKrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,MAKtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MASxB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAKrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,MAKtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MASxB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAKpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MASvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easeFunctions.test.d.ts","sourceRoot":"","sources":["../../../src/Utilities/easeFunctions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateUniqueID.d.ts","sourceRoot":"","sources":["../../../src/Utilities/generateUniqueID.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Utilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateNumber.d.ts","sourceRoot":"","sources":["../../../src/Utilities/interpolateNumber.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,OAAe,GACrB,MAAM,CAeR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateNumber.test.d.ts","sourceRoot":"","sources":["../../../src/Utilities/interpolateNumber.test.ts"],"names":[],"mappings":""}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vived/core",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Core Components for VIVED Apps and Hosts",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
|
-
"module": "dist/esm/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/types/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
"import": "./dist/esm/index.js",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"homepage": "https://bitbucket.org/cyberscience3d/npm_vived_core#readme",
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/jest": "^29.5.14",
|
|
36
|
+
"@types/uuid": "^10.0.0",
|
|
36
37
|
"jest": "^29.7.0",
|
|
37
38
|
"prettier": "^3.5.3",
|
|
38
39
|
"ts-jest": "^29.2.6",
|
|
@@ -42,5 +43,8 @@
|
|
|
42
43
|
},
|
|
43
44
|
"publishConfig": {
|
|
44
45
|
"access": "public"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"uuid": "^11.1.0"
|
|
45
49
|
}
|
|
46
50
|
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { RangedNumber, RangedNumberProperties } from "./RangedNumber";
|
|
2
|
+
|
|
3
|
+
it("Stores the initial value", () => {
|
|
4
|
+
const props: RangedNumberProperties = {
|
|
5
|
+
initialValue: 5,
|
|
6
|
+
max: 10,
|
|
7
|
+
min: 1,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const memoizedNumber = new RangedNumber(props, jest.fn());
|
|
11
|
+
expect(memoizedNumber.val).toEqual(5);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("Clamps the initial value", () => {
|
|
15
|
+
const props: RangedNumberProperties = {
|
|
16
|
+
initialValue: 50,
|
|
17
|
+
max: 10,
|
|
18
|
+
min: 1,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const memoizedNumber = new RangedNumber(props, jest.fn());
|
|
22
|
+
expect(memoizedNumber.val).toEqual(10);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("Clamps the value", () => {
|
|
26
|
+
const props: RangedNumberProperties = {
|
|
27
|
+
initialValue: 5,
|
|
28
|
+
max: 10,
|
|
29
|
+
min: 1,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const memoizedNumber = new RangedNumber(props, jest.fn());
|
|
33
|
+
|
|
34
|
+
expect(memoizedNumber.val).toEqual(5);
|
|
35
|
+
|
|
36
|
+
memoizedNumber.val = 11;
|
|
37
|
+
expect(memoizedNumber.val).toEqual(10);
|
|
38
|
+
|
|
39
|
+
memoizedNumber.val = 0;
|
|
40
|
+
expect(memoizedNumber.val).toEqual(1);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("Triggers the callback when something changes", () => {
|
|
44
|
+
const cb = jest.fn();
|
|
45
|
+
|
|
46
|
+
const props: RangedNumberProperties = {
|
|
47
|
+
initialValue: 5,
|
|
48
|
+
max: 10,
|
|
49
|
+
min: 1,
|
|
50
|
+
};
|
|
51
|
+
const memoizedNumber = new RangedNumber(props, cb);
|
|
52
|
+
|
|
53
|
+
expect(cb).not.toBeCalled();
|
|
54
|
+
|
|
55
|
+
memoizedNumber.val = 6;
|
|
56
|
+
|
|
57
|
+
expect(cb).toBeCalled();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("Only triggers the CB when something changes", () => {
|
|
61
|
+
const cb = jest.fn();
|
|
62
|
+
const props: RangedNumberProperties = {
|
|
63
|
+
initialValue: 5,
|
|
64
|
+
max: 10,
|
|
65
|
+
min: 1,
|
|
66
|
+
};
|
|
67
|
+
const memoizedNumber = new RangedNumber(props, cb);
|
|
68
|
+
|
|
69
|
+
memoizedNumber.val = 5;
|
|
70
|
+
memoizedNumber.val = 5;
|
|
71
|
+
memoizedNumber.val = 5;
|
|
72
|
+
|
|
73
|
+
expect(cb).not.toBeCalled();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("Checks the clamped value before triggering", () => {
|
|
77
|
+
const cb = jest.fn();
|
|
78
|
+
const props: RangedNumberProperties = {
|
|
79
|
+
initialValue: 10,
|
|
80
|
+
max: 10,
|
|
81
|
+
min: 1,
|
|
82
|
+
};
|
|
83
|
+
const memoizedNumber = new RangedNumber(props, cb);
|
|
84
|
+
|
|
85
|
+
memoizedNumber.val = 11;
|
|
86
|
+
memoizedNumber.val = 12;
|
|
87
|
+
memoizedNumber.val = 13;
|
|
88
|
+
|
|
89
|
+
expect(cb).not.toBeCalled();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("Does not notify if set quietly", () => {
|
|
93
|
+
const cb = jest.fn();
|
|
94
|
+
const props: RangedNumberProperties = {
|
|
95
|
+
initialValue: 5,
|
|
96
|
+
max: 10,
|
|
97
|
+
min: 1,
|
|
98
|
+
};
|
|
99
|
+
const memoizedNumber = new RangedNumber(props, cb);
|
|
100
|
+
|
|
101
|
+
memoizedNumber.setValQuietly(6);
|
|
102
|
+
|
|
103
|
+
expect(memoizedNumber.val).toEqual(6);
|
|
104
|
+
expect(cb).not.toBeCalled();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("Setting quietly is clamped", () => {
|
|
108
|
+
const cb = jest.fn();
|
|
109
|
+
const props: RangedNumberProperties = {
|
|
110
|
+
initialValue: 5,
|
|
111
|
+
max: 10,
|
|
112
|
+
min: 1,
|
|
113
|
+
};
|
|
114
|
+
const memoizedNumber = new RangedNumber(props, cb);
|
|
115
|
+
|
|
116
|
+
memoizedNumber.setValQuietly(-1);
|
|
117
|
+
expect(memoizedNumber.val).toEqual(1);
|
|
118
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface RangedNumberProperties {
|
|
2
|
+
min: number;
|
|
3
|
+
max: number;
|
|
4
|
+
initialValue: number;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export class RangedNumber {
|
|
8
|
+
public readonly maxValue: number;
|
|
9
|
+
public readonly minValue: number;
|
|
10
|
+
private _val: number;
|
|
11
|
+
get val(): number {
|
|
12
|
+
return this._val;
|
|
13
|
+
}
|
|
14
|
+
set val(x: number) {
|
|
15
|
+
const y = this.clamp(x);
|
|
16
|
+
if (this._val === y) return;
|
|
17
|
+
|
|
18
|
+
this._val = y;
|
|
19
|
+
this.onChangeCallback();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public setValQuietly(val: number) {
|
|
23
|
+
this._val = this.clamp(val);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private clamp(x: number): number {
|
|
27
|
+
let rVal = x;
|
|
28
|
+
if (x > this.maxValue) {
|
|
29
|
+
rVal = this.maxValue;
|
|
30
|
+
} else if (x < this.minValue) {
|
|
31
|
+
rVal = this.minValue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return rVal;
|
|
35
|
+
}
|
|
36
|
+
private onChangeCallback: () => void;
|
|
37
|
+
|
|
38
|
+
constructor(props: RangedNumberProperties, onChangeCallback: () => void) {
|
|
39
|
+
this.maxValue = props.max;
|
|
40
|
+
this.minValue = props.min;
|
|
41
|
+
|
|
42
|
+
this._val = this.clamp(props.initialValue);
|
|
43
|
+
this.onChangeCallback = onChangeCallback;
|
|
44
|
+
}
|
|
45
|
+
}
|
package/src/Entities/index.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export * from "./ObservableEntity";
|
|
2
|
-
export * from "./ObserverList";
|
|
3
1
|
export * from "./MemoizedAngle";
|
|
4
2
|
export * from "./MemoizedBoolean";
|
|
5
3
|
export * from "./MemoizedColor";
|
|
@@ -8,3 +6,6 @@ export * from "./MemoizedQuaternion";
|
|
|
8
6
|
export * from "./MemoizedString";
|
|
9
7
|
export * from "./MemoizedVector2";
|
|
10
8
|
export * from "./MemoizedVector3";
|
|
9
|
+
export * from "./ObservableEntity";
|
|
10
|
+
export * from "./ObserverList";
|
|
11
|
+
export * from "./RangedNumber";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
feetToMeters,
|
|
3
|
+
inchesToMeters,
|
|
4
|
+
metersToFeet,
|
|
5
|
+
metersToInches,
|
|
6
|
+
} from "./LengthConverters";
|
|
7
|
+
|
|
8
|
+
test("Converting inches to meters", () => {
|
|
9
|
+
expect(inchesToMeters(0)).toEqual(0);
|
|
10
|
+
expect(inchesToMeters(12)).toEqual(0.30479983540808886);
|
|
11
|
+
expect(inchesToMeters(-12)).toEqual(-0.30479983540808886);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test("Converting meters to inches", () => {
|
|
15
|
+
expect(metersToInches(0)).toEqual(0);
|
|
16
|
+
expect(metersToInches(2)).toEqual(78.7402);
|
|
17
|
+
expect(metersToInches(-2)).toEqual(-78.7402);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("Converting feet to meters", () => {
|
|
21
|
+
expect(feetToMeters(0)).toEqual(0);
|
|
22
|
+
expect(feetToMeters(5)).toEqual(1.5239999512320015);
|
|
23
|
+
expect(feetToMeters(-5)).toEqual(-1.5239999512320015);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("Converting meters to feet", () => {
|
|
27
|
+
expect(metersToFeet(0)).toEqual(0);
|
|
28
|
+
expect(metersToFeet(2)).toEqual(6.56168);
|
|
29
|
+
expect(metersToFeet(-2)).toEqual(-6.56168);
|
|
30
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const inchesPerMeter = 39.3701;
|
|
2
|
+
const feetPerMeter = 3.28084;
|
|
3
|
+
|
|
4
|
+
export function inchesToMeters(inches: number): number {
|
|
5
|
+
return inches / inchesPerMeter;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function metersToInches(meters: number): number {
|
|
9
|
+
return meters * inchesPerMeter;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function feetToMeters(feet: number): number {
|
|
13
|
+
return feet / feetPerMeter;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function metersToFeet(meters: number): number {
|
|
17
|
+
return meters * feetPerMeter;
|
|
18
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { LerpNumber } from "./LerpNumber";
|
|
2
|
+
|
|
3
|
+
describe("Lerp Number", () => {
|
|
4
|
+
let lerpNumber: LerpNumber;
|
|
5
|
+
let updateFn: jest.Mock;
|
|
6
|
+
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
lerpNumber = new LerpNumber();
|
|
9
|
+
updateFn = jest.fn();
|
|
10
|
+
jest.useFakeTimers();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
jest.useRealTimers();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("should lerp from start to end value", async () => {
|
|
18
|
+
lerpNumber.defaultDurationMS = 1000;
|
|
19
|
+
const promise = lerpNumber.lerp({
|
|
20
|
+
start: 0,
|
|
21
|
+
end: 100,
|
|
22
|
+
update: updateFn,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Test middle point (should have multiple updates by this point)
|
|
26
|
+
jest.advanceTimersByTime(500);
|
|
27
|
+
expect(updateFn).toHaveBeenCalledWith(expect.closeTo(50, 5)); // Allow some margin due to interval timing
|
|
28
|
+
|
|
29
|
+
// Complete animation
|
|
30
|
+
jest.advanceTimersByTime(500);
|
|
31
|
+
await promise;
|
|
32
|
+
|
|
33
|
+
expect(updateFn).toHaveBeenCalledWith(0); // Start value
|
|
34
|
+
expect(updateFn).toHaveBeenLastCalledWith(100); // End value
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("should cancel lerp when requested", async () => {
|
|
38
|
+
const onCancel = jest.fn();
|
|
39
|
+
const promise = lerpNumber.lerp({
|
|
40
|
+
start: 0,
|
|
41
|
+
end: 100,
|
|
42
|
+
update: updateFn,
|
|
43
|
+
onCancel,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
expect(lerpNumber.isLerping).toBe(true);
|
|
47
|
+
|
|
48
|
+
lerpNumber.cancel();
|
|
49
|
+
jest.advanceTimersByTime(10); // Allow interval to execute
|
|
50
|
+
await promise;
|
|
51
|
+
|
|
52
|
+
expect(lerpNumber.isLerping).toBe(false);
|
|
53
|
+
expect(onCancel).toHaveBeenCalled();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("should respect custom duration", async () => {
|
|
57
|
+
const promise = lerpNumber.lerp({
|
|
58
|
+
start: 0,
|
|
59
|
+
end: 100,
|
|
60
|
+
update: updateFn,
|
|
61
|
+
durationMS: 500,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
jest.advanceTimersByTime(250); // Half way
|
|
65
|
+
expect(updateFn).toHaveBeenLastCalledWith(expect.any(Number));
|
|
66
|
+
|
|
67
|
+
jest.advanceTimersByTime(250); // Complete
|
|
68
|
+
await promise;
|
|
69
|
+
|
|
70
|
+
expect(updateFn).toHaveBeenLastCalledWith(100);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("should call onComplete when finished", async () => {
|
|
74
|
+
const onComplete = jest.fn();
|
|
75
|
+
const promise = lerpNumber.lerp({
|
|
76
|
+
start: 0,
|
|
77
|
+
end: 100,
|
|
78
|
+
update: updateFn,
|
|
79
|
+
onComplete,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
jest.advanceTimersByTime(1000);
|
|
83
|
+
await promise;
|
|
84
|
+
|
|
85
|
+
expect(onComplete).toHaveBeenCalled();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("should cancel existing lerp when starting a new one", async () => {
|
|
89
|
+
const onCancel = jest.fn();
|
|
90
|
+
const firstPromise = lerpNumber.lerp({
|
|
91
|
+
start: 0,
|
|
92
|
+
end: 100,
|
|
93
|
+
update: updateFn,
|
|
94
|
+
onCancel,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const secondPromise = lerpNumber.lerp({
|
|
98
|
+
start: 200,
|
|
99
|
+
end: 300,
|
|
100
|
+
update: updateFn,
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
jest.advanceTimersByTime(1000);
|
|
104
|
+
await Promise.all([firstPromise, secondPromise]);
|
|
105
|
+
|
|
106
|
+
expect(onCancel).toHaveBeenCalled();
|
|
107
|
+
expect(updateFn).toHaveBeenLastCalledWith(300);
|
|
108
|
+
});
|
|
109
|
+
});
|