@woosh/meep-engine 2.110.8 → 2.110.9
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/build/bundle-worker-terrain.js +1 -1
- package/build/meep.cjs +93 -106
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +93 -106
- package/editor/tools/v2/TransformControls.js +11 -6
- package/package.json +2 -1
- package/src/core/UUID.d.ts +3 -0
- package/src/core/UUID.d.ts.map +1 -1
- package/src/core/UUID.js +9 -7
- package/src/core/collection/array/arraySetDiff.d.ts.map +1 -1
- package/src/core/collection/array/arraySetDiff.js +0 -1
- package/src/core/collection/array/binarySearchHighIndex.d.ts.map +1 -1
- package/src/core/collection/array/binarySearchHighIndex.js +7 -1
- package/src/core/collection/array/computeHashArray.d.ts.map +1 -1
- package/src/core/collection/array/computeHashArray.js +3 -2
- package/src/core/collection/array/fastArrayEquals.d.ts +1 -0
- package/src/core/collection/array/fastArrayEquals.d.ts.map +1 -1
- package/src/core/collection/array/fastArrayEquals.js +1 -0
- package/src/core/collection/array/isArrayEqual.d.ts.map +1 -1
- package/src/core/collection/array/isArrayEqual.js +9 -12
- package/src/core/collection/array/isArrayEqual.spec.d.ts +2 -0
- package/src/core/collection/array/isArrayEqual.spec.d.ts.map +1 -0
- package/src/core/collection/array/isArrayEqual.spec.js +25 -0
- package/src/core/collection/array/typed/is_typed_array_equals.d.ts.map +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.js +1 -0
- package/src/core/function/makeSequenceLoop.d.ts.map +1 -0
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +14 -0
- package/src/core/geom/3d/shape/PointShape3D.d.ts +9 -0
- package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/PointShape3D.js +14 -0
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +26 -8
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +33 -4
- package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +13 -6
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +10 -0
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +15 -8
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +33 -9
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +7 -7
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.d.ts +2 -0
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.js +38 -0
- package/src/core/geom/3d/v3_compute_triangle_normal.js +1 -1
- package/src/core/geom/3d/v3_negate_array.d.ts +9 -0
- package/src/core/geom/3d/v3_negate_array.d.ts.map +1 -0
- package/src/core/geom/3d/v3_negate_array.js +16 -0
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +30 -77
- package/src/core/geom/Vector3.d.ts +4 -0
- package/src/core/geom/Vector3.js +4 -4
- package/src/core/geom/vec3/v3_cross_array.d.ts +11 -0
- package/src/core/geom/vec3/v3_cross_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_cross_array.js +31 -0
- package/src/core/geom/vec3/v3_displace_in_direction.js +3 -2
- package/src/core/geom/vec3/v3_displace_in_direction_array.d.ts +12 -0
- package/src/core/geom/vec3/v3_displace_in_direction_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_displace_in_direction_array.js +22 -0
- package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +4 -1
- package/src/core/geom/vec3/v3_normalize_array.d.ts +3 -3
- package/src/core/geom/vec3/v3_normalize_array.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_normalize_array.js +3 -3
- package/src/core/math/copysign.d.ts +1 -1
- package/src/core/math/copysign.js +1 -1
- package/src/core/math/epsilonEquals.d.ts.map +1 -1
- package/src/core/math/epsilonEquals.js +3 -2
- package/src/core/math/linalg/README.md +1 -1
- package/src/core/math/random/randomGaussian.spec.js +1 -1
- package/src/core/math/spline/spline_hermite3.d.ts +1 -1
- package/src/core/math/spline/spline_hermite3.js +1 -1
- package/src/core/process/delay.d.ts +6 -1
- package/src/core/process/delay.d.ts.map +1 -1
- package/src/core/process/delay.js +6 -1
- package/src/core/process/undo/Mark.d.ts +5 -5
- package/src/core/process/undo/Mark.d.ts.map +1 -1
- package/src/core/process/undo/Mark.js +6 -5
- package/src/core/process/worker/WorkerBuilder.d.ts +13 -2
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.js +8 -0
- package/src/core/process/worker/WorkerProxy.d.ts +16 -6
- package/src/core/process/worker/WorkerProxy.d.ts.map +1 -1
- package/src/core/process/worker/WorkerProxy.js +24 -5
- package/src/engine/EngineHarness.d.ts +7 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +12 -1
- package/src/engine/animation/clip/AnimationTrack.d.ts.map +1 -1
- package/src/engine/animation/clip/AnimationTrack.js +3 -0
- package/src/engine/animation/clip/bind_property_writer.d.ts +2 -2
- package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
- package/src/engine/animation/clip/bind_property_writer.js +22 -13
- package/src/engine/animation/clip/curve_from_track_data.d.ts.map +1 -1
- package/src/engine/animation/clip/curve_from_track_data.js +9 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.js +6 -5
- package/src/engine/animation/curve/AnimationCurve.d.ts +21 -0
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +43 -15
- package/src/engine/animation/curve/AnimationCurve.spec.js +67 -0
- package/src/engine/animation/curve/Keyframe.d.ts +24 -3
- package/src/engine/animation/curve/Keyframe.d.ts.map +1 -1
- package/src/engine/animation/curve/Keyframe.js +49 -3
- package/src/engine/animation/curve/Keyframe.spec.js +11 -0
- package/src/engine/animation/curve/animation_curve_compute_aabb.d.ts +7 -0
- package/src/engine/animation/curve/animation_curve_compute_aabb.d.ts.map +1 -0
- package/src/engine/animation/curve/{compute_curve_aabb.js → animation_curve_compute_aabb.js} +1 -1
- package/src/engine/animation/curve/animation_curve_optimize.d.ts +8 -0
- package/src/engine/animation/curve/animation_curve_optimize.d.ts.map +1 -0
- package/src/engine/animation/curve/animation_curve_optimize.js +89 -0
- package/src/engine/animation/curve/animation_curve_optimize.spec.d.ts +2 -0
- package/src/engine/animation/curve/animation_curve_optimize.spec.d.ts.map +1 -0
- package/src/engine/animation/curve/animation_curve_optimize.spec.js +50 -0
- package/src/engine/animation/curve/draw/build_curve_editor.js +2 -2
- package/src/engine/animation/curve/evaluate_two_key_curve.d.ts +9 -0
- package/src/engine/animation/curve/evaluate_two_key_curve.d.ts.map +1 -0
- package/src/engine/animation/curve/evaluate_two_key_curve.js +23 -0
- package/src/engine/animation/curve/prototypeGLTF.js +14 -14
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts +6 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +11 -6
- package/src/engine/ecs/guid/GUIDSerializationAdapter.spec.js +5 -5
- package/src/engine/ecs/guid/{GUID.d.ts → UUID.d.ts} +17 -12
- package/src/engine/ecs/guid/UUID.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUID.js → UUID.js} +35 -12
- package/src/engine/ecs/guid/UUID.spec.d.ts +2 -0
- package/src/engine/ecs/guid/UUID.spec.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUID.spec.js → UUID.spec.js} +18 -12
- package/src/engine/ecs/guid/UUIDSerializationAdapter.d.ts +18 -0
- package/src/engine/ecs/guid/UUIDSerializationAdapter.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUIDSerializationAdapter.js → UUIDSerializationAdapter.js} +5 -5
- package/src/engine/ecs/ik/InverseKinematics.js +3 -3
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +1 -140
- package/src/engine/input/ecs/systems/InputControllerSystem.js +1 -1
- package/src/engine/intelligence/blackboard/BlackboardDynamicStorageAdapter.d.ts +1 -1
- package/src/engine/intelligence/blackboard/BlackboardDynamicStorageAdapter.js +4 -4
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +13 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.js +395 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.d.ts +2 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.d.ts.map +1 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.js +46 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.d.ts +18 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.js +277 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.d.ts +2 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.js +43 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts +12 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +100 -0
- package/src/engine/physics/inverse_kinematics/fabrik/prototype.d.ts +2 -0
- package/src/engine/physics/inverse_kinematics/fabrik/prototype.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/prototype.js +112 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +16 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.js +127 -0
- package/src/view/elements/DropDownSelectionView.js +2 -2
- package/src/view/elements/tiles2d/Tile.d.ts.map +1 -1
- package/src/view/elements/tiles2d/Tile.js +2 -3
- package/src/core/math/makeSequenceLoop.d.ts.map +0 -1
- package/src/engine/animation/curve/compute_curve_aabb.d.ts +0 -7
- package/src/engine/animation/curve/compute_curve_aabb.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUID.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUID.spec.d.ts +0 -2
- package/src/engine/ecs/guid/GUID.spec.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUIDSerializationAdapter.d.ts +0 -18
- package/src/engine/ecs/guid/GUIDSerializationAdapter.d.ts.map +0 -1
- /package/src/core/{math → function}/makeSequenceLoop.d.ts +0 -0
- /package/src/core/{math → function}/makeSequenceLoop.js +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* @param {Worker} worker
|
|
@@ -35,7 +37,13 @@ function needsSerialization(value) {
|
|
|
35
37
|
|
|
36
38
|
class WorkerProxy {
|
|
37
39
|
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @type {{}}
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
38
45
|
__pending = {};
|
|
46
|
+
|
|
39
47
|
__isRunning = false;
|
|
40
48
|
|
|
41
49
|
/**
|
|
@@ -63,11 +71,13 @@ class WorkerProxy {
|
|
|
63
71
|
/**
|
|
64
72
|
* Invoke a given method on the worker, as defined by the `WorkerBuilder`
|
|
65
73
|
* @template T
|
|
66
|
-
* @param {
|
|
74
|
+
* @param {string} name Method's name
|
|
67
75
|
* @param {Array} args
|
|
68
76
|
* @return {Promise<T>} eventual result of the invoked method
|
|
69
77
|
*/
|
|
70
78
|
$submitRequest(name, args) {
|
|
79
|
+
assert.isString(name, "name");
|
|
80
|
+
|
|
71
81
|
const pending = this.__pending[name];
|
|
72
82
|
|
|
73
83
|
const argumentCount = args.length;
|
|
@@ -114,7 +124,14 @@ class WorkerProxy {
|
|
|
114
124
|
});
|
|
115
125
|
}
|
|
116
126
|
|
|
127
|
+
/**
|
|
128
|
+
*
|
|
129
|
+
* @param {string} name
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
117
132
|
__makeMethod(name) {
|
|
133
|
+
assert.isString(name, 'name');
|
|
134
|
+
|
|
118
135
|
if (this.__pending.hasOwnProperty(name)) {
|
|
119
136
|
throw new Error(`Method '${name}' already defined`);
|
|
120
137
|
}
|
|
@@ -199,15 +216,17 @@ class WorkerProxy {
|
|
|
199
216
|
/**
|
|
200
217
|
*
|
|
201
218
|
* @param {number} id
|
|
202
|
-
* @param {string}
|
|
219
|
+
* @param {string} method_name
|
|
203
220
|
* @returns {boolean}
|
|
204
221
|
*/
|
|
205
|
-
cancelRequest(id,
|
|
222
|
+
cancelRequest(id, method_name) {
|
|
223
|
+
assert.isString(method_name, 'method_name');
|
|
224
|
+
|
|
206
225
|
//find request
|
|
207
|
-
const requestQueue = this.__pending[
|
|
226
|
+
const requestQueue = this.__pending[method_name];
|
|
208
227
|
|
|
209
228
|
if (requestQueue === undefined) {
|
|
210
|
-
throw new Error(`No request queue for method name '${
|
|
229
|
+
throw new Error(`No request queue for method name '${method_name}'`);
|
|
211
230
|
}
|
|
212
231
|
|
|
213
232
|
const n = requestQueue.length;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export class EngineHarness {
|
|
2
|
+
/**
|
|
3
|
+
* Quick initialization of the engine in a sensible default configuration
|
|
4
|
+
* @param {(config:EngineConfiguration,engine:Engine)=>*} [configuration]
|
|
5
|
+
* @return {Promise<Engine>}
|
|
6
|
+
*/
|
|
7
|
+
static bootstrap({ configuration }?: (config: EngineConfiguration, engine: Engine) => any): Promise<Engine>;
|
|
2
8
|
/**
|
|
3
9
|
*
|
|
4
10
|
* @param {Engine} engine
|
|
@@ -111,7 +117,7 @@ export class EngineHarness {
|
|
|
111
117
|
*/
|
|
112
118
|
readonly p: Promise<any> | null;
|
|
113
119
|
/**
|
|
114
|
-
* @param {(config:EngineConfiguration,engine:Engine)=>*} configuration
|
|
120
|
+
* @param {(config:EngineConfiguration,engine:Engine)=>*} [configuration]
|
|
115
121
|
* @param {boolean} [enable_localization] Whether or not to load localization data
|
|
116
122
|
* @returns {Promise<Engine>}
|
|
117
123
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AA6DA;IAmBI;;;OAGG;IACH,6BAFW,MAAM,QAYhB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG;QAClB,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,oQAnBW,MAAM,iBAmFhB;IAGD;;;;;;;;;;OAUG;IACH;QATyB,MAAM,EAApB,MAAM;QACyB,GAAG;QACnB,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACQ,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;sBAqDhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG;QAChC,MAAM,CA2ClB;IAGD;;;;;;;;;;;OAWG;IACH,mGAVW,MAAM,GAQJ,OAAO,CAuDnB;
|
|
1
|
+
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AA6DA;IAmBI;;;;OAIG;IACH,8CAHmB,mBAAmB,UAAQ,MAAM,WACxC,QAAQ,MAAM,CAAC,CAM1B;IAED;;;OAGG;IACH,6BAFW,MAAM,QAYhB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG;QAClB,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,oQAnBW,MAAM,iBAmFhB;IAGD;;;;;;;;;;OAUG;IACH;QATyB,MAAM,EAApB,MAAM;QACyB,GAAG;QACnB,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACQ,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;sBAqDhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG;QAChC,MAAM,CA2ClB;IAGD;;;;;;;;;;;OAWG;IACH,mGAVW,MAAM,GAQJ,OAAO,CAuDnB;IAtcG;;;OAGG;IACH,QAFU,MAAM,CAEiC;IAMjD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAET;IA8BjB;;;;OAIG;IACH,8DAJmB,mBAAmB,UAAQ,MAAM,WAEvC,QAAQ,MAAM,CAAC,CA2D3B;CA6VJ;;IAID;;;OAGG;IACH,uCAMC;;mBArgBkB,aAAa;oCACI,0BAA0B;oBAX1C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAW1B,8BAA8B"}
|
|
@@ -78,6 +78,17 @@ export class EngineHarness {
|
|
|
78
78
|
this.p = null;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Quick initialization of the engine in a sensible default configuration
|
|
83
|
+
* @param {(config:EngineConfiguration,engine:Engine)=>*} [configuration]
|
|
84
|
+
* @return {Promise<Engine>}
|
|
85
|
+
*/
|
|
86
|
+
static async bootstrap({ configuration } = {}) {
|
|
87
|
+
const harness = new EngineHarness();
|
|
88
|
+
|
|
89
|
+
return harness.initialize({ configuration });
|
|
90
|
+
}
|
|
91
|
+
|
|
81
92
|
/**
|
|
82
93
|
*
|
|
83
94
|
* @param {Engine} engine
|
|
@@ -95,7 +106,7 @@ export class EngineHarness {
|
|
|
95
106
|
}
|
|
96
107
|
|
|
97
108
|
/**
|
|
98
|
-
* @param {(config:EngineConfiguration,engine:Engine)=>*} configuration
|
|
109
|
+
* @param {(config:EngineConfiguration,engine:Engine)=>*} [configuration]
|
|
99
110
|
* @param {boolean} [enable_localization] Whether or not to load localization data
|
|
100
111
|
* @returns {Promise<Engine>}
|
|
101
112
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationTrack.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/AnimationTrack.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;
|
|
1
|
+
{"version":3,"file":"AnimationTrack.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/AnimationTrack.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IA2EI;;;;;OAKG;IACH,qBAJW,gBAAgB,SAChB,MAAM,GACL,cAAc,CAYzB;IA1FD;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,MAFU,MAAM,EAAE,CAET;IAET;;;OAGG;IACH,QAFU,gBAAgB,CAEf;IAEX;;;;;OAKG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,uBAYC;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;OAKG;IACH,eAJW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,QACN,MAAM,QAgBhB;IAqBL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;CANxC"}
|
|
@@ -64,6 +64,9 @@ export class AnimationTrack {
|
|
|
64
64
|
* @param {number} time
|
|
65
65
|
*/
|
|
66
66
|
sample(output, output_offset, time) {
|
|
67
|
+
assert.isArrayLike(output, 'output');
|
|
68
|
+
assert.isNonNegativeInteger(output_offset, 'output_offset');
|
|
69
|
+
|
|
67
70
|
const curves = this.curves;
|
|
68
71
|
const curve_count = curves.length;
|
|
69
72
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
*
|
|
3
3
|
* @param {EntityNode} node
|
|
4
|
-
* @param {string}
|
|
4
|
+
* @param {string[]} path_parts
|
|
5
5
|
* @returns {BoundValueWriter}
|
|
6
6
|
*/
|
|
7
|
-
export function bind_property_writer(node: EntityNode,
|
|
7
|
+
export function bind_property_writer(node: EntityNode, path_parts: string[]): BoundValueWriter;
|
|
8
8
|
import { BoundValueWriter } from "../curve/binding/BoundValueWriter.js";
|
|
9
9
|
//# sourceMappingURL=bind_property_writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind_property_writer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/bind_property_writer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bind_property_writer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/bind_property_writer.js"],"names":[],"mappings":"AA2FA;;;;;GAKG;AACH,mEAHW,MAAM,EAAE,GACN,gBAAgB,CA+B5B;iCA3HgC,sCAAsC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
1
2
|
import Name from "../../ecs/name/Name.js";
|
|
2
3
|
import { BoundQuaternionWriter } from "../curve/binding/BoundQuaternionWriter.js";
|
|
3
4
|
import { BoundValueWriter } from "../curve/binding/BoundValueWriter.js";
|
|
@@ -24,14 +25,15 @@ function get_node_name(node) {
|
|
|
24
25
|
/**
|
|
25
26
|
* Following THREE.js PropertyBinding.findNode implementation
|
|
26
27
|
* @param {EntityNode} root
|
|
27
|
-
* @param {string}
|
|
28
|
+
* @param {string} node_name
|
|
28
29
|
* @returns {EntityNode|undefined}
|
|
29
30
|
*/
|
|
30
|
-
function find_node(root,
|
|
31
|
+
function find_node(root, node_name) {
|
|
32
|
+
assert.isString(node_name, 'node_name');
|
|
31
33
|
|
|
32
34
|
const root_name = get_node_name(root);
|
|
33
35
|
|
|
34
|
-
if (root_name ===
|
|
36
|
+
if (root_name === node_name) {
|
|
35
37
|
return root;
|
|
36
38
|
}
|
|
37
39
|
|
|
@@ -40,14 +42,13 @@ function find_node(root, nodeName) {
|
|
|
40
42
|
|
|
41
43
|
const child_count = children.length;
|
|
42
44
|
|
|
43
|
-
|
|
44
45
|
for (let j = 0; j < child_count; j++) {
|
|
45
46
|
/**
|
|
46
47
|
* @type {EntityNode}
|
|
47
48
|
*/
|
|
48
49
|
const child = children[j];
|
|
49
50
|
|
|
50
|
-
const subtree_result = find_node(child,
|
|
51
|
+
const subtree_result = find_node(child, node_name);
|
|
51
52
|
|
|
52
53
|
if (subtree_result !== undefined) {
|
|
53
54
|
return subtree_result;
|
|
@@ -59,13 +60,18 @@ function find_node(root, nodeName) {
|
|
|
59
60
|
*
|
|
60
61
|
* @param {EntityNode} root
|
|
61
62
|
* @param {string[]} path_parts
|
|
63
|
+
* @param {number} part_first
|
|
64
|
+
* @param {number} part_last
|
|
62
65
|
*/
|
|
63
|
-
function entity_node_resolve_path(root, path_parts) {
|
|
66
|
+
function entity_node_resolve_path(root, path_parts, part_first, part_last) {
|
|
67
|
+
assert.isNonNegativeInteger(part_first, 'part_first');
|
|
68
|
+
assert.isNonNegativeInteger(part_last, 'part_last');
|
|
69
|
+
|
|
70
|
+
assert.lessThan(part_last, path_parts.length, 'overflow');
|
|
64
71
|
|
|
65
72
|
let node = root;
|
|
66
73
|
|
|
67
|
-
|
|
68
|
-
for (let i = 0; i < part_count; i++) {
|
|
74
|
+
for (let i = part_first; i <= part_last; i++) {
|
|
69
75
|
|
|
70
76
|
const part = path_parts[i];
|
|
71
77
|
|
|
@@ -86,15 +92,18 @@ function entity_node_resolve_path(root, path_parts) {
|
|
|
86
92
|
/**
|
|
87
93
|
*
|
|
88
94
|
* @param {EntityNode} node
|
|
89
|
-
* @param {string}
|
|
95
|
+
* @param {string[]} path_parts
|
|
90
96
|
* @returns {BoundValueWriter}
|
|
91
97
|
*/
|
|
92
|
-
export function bind_property_writer(node,
|
|
93
|
-
|
|
98
|
+
export function bind_property_writer(node, path_parts) {
|
|
99
|
+
assert.defined(path_parts, 'path_parts');
|
|
100
|
+
assert.isArray(path_parts, 'path_parts');
|
|
101
|
+
|
|
102
|
+
const part_count = path_parts.length;
|
|
94
103
|
|
|
95
|
-
const property_name = path_parts[
|
|
104
|
+
const property_name = path_parts[part_count - 1];
|
|
96
105
|
|
|
97
|
-
const parent = entity_node_resolve_path(node, path_parts
|
|
106
|
+
const parent = entity_node_resolve_path(node, path_parts, 0, part_count - 2);
|
|
98
107
|
|
|
99
108
|
let writer;
|
|
100
109
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curve_from_track_data.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/curve_from_track_data.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,mEANW,0BAA0B,UAC1B,MAAM,EAAE,GAAC,YAAY,SACrB,MAAM,EAAE,GAAC,YAAY,mBACrB,MAAM,mBACN,MAAM,
|
|
1
|
+
{"version":3,"file":"curve_from_track_data.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/curve_from_track_data.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,mEANW,0BAA0B,UAC1B,MAAM,EAAE,GAAC,YAAY,SACrB,MAAM,EAAE,GAAC,YAAY,mBACrB,MAAM,mBACN,MAAM,QAsBhB;2CAlC0C,iCAAiC"}
|
|
@@ -12,7 +12,15 @@ import { curve_from_track_data_linear } from "./curve_from_track_data_linear.js"
|
|
|
12
12
|
* @param {number} component_count
|
|
13
13
|
* @param {number} component_index
|
|
14
14
|
*/
|
|
15
|
-
export function curve_from_track_data(
|
|
15
|
+
export function curve_from_track_data(
|
|
16
|
+
curve,
|
|
17
|
+
type,
|
|
18
|
+
values,
|
|
19
|
+
times,
|
|
20
|
+
component_count,
|
|
21
|
+
component_index
|
|
22
|
+
) {
|
|
23
|
+
|
|
16
24
|
switch (type) {
|
|
17
25
|
case AnimationInterpolationKind.Discrete:
|
|
18
26
|
return curve_from_track_data_discrete(curve, values, times, component_count, component_index);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecd_bind_animation_curve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/ecd_bind_animation_curve.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ecd_bind_animation_curve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/clip/ecd_bind_animation_curve.js"],"names":[],"mappings":"AAoGA;;;;GAIG;AACH,2DAFW,mBAAmB,wBAgC7B;8BArI6B,oBAAoB;qCACb,2BAA2B"}
|
|
@@ -85,11 +85,9 @@ function convert_three_track_to_curves(track) {
|
|
|
85
85
|
/**
|
|
86
86
|
*
|
|
87
87
|
* @param {THREE.KeyframeTrack} track
|
|
88
|
-
* @param {EntityNode} node
|
|
89
88
|
* @returns {AnimationTrack}
|
|
90
89
|
*/
|
|
91
|
-
function convert_three_track(track
|
|
92
|
-
|
|
90
|
+
function convert_three_track(track) {
|
|
93
91
|
|
|
94
92
|
const track_name = track.name;
|
|
95
93
|
|
|
@@ -120,9 +118,12 @@ export function convert_three_clip(node, clip) {
|
|
|
120
118
|
for (let i = 0; i < track_count; i++) {
|
|
121
119
|
try {
|
|
122
120
|
const three_track = three_tracks[i];
|
|
123
|
-
const meep_track = convert_three_track(three_track, node);
|
|
124
121
|
|
|
125
|
-
const
|
|
122
|
+
const meep_track = convert_three_track(three_track);
|
|
123
|
+
|
|
124
|
+
const property_path = three_track.name.split('.');
|
|
125
|
+
|
|
126
|
+
const writer = bind_property_writer(node, property_path);
|
|
126
127
|
|
|
127
128
|
meep_clip.tracks.push(meep_track);
|
|
128
129
|
clip_binding.tracks.push(AnimationTrackBinding.from(writer, meep_track));
|
|
@@ -89,6 +89,27 @@ export class AnimationCurve {
|
|
|
89
89
|
*/
|
|
90
90
|
smoothTangents(index: number, weight: number): void;
|
|
91
91
|
smoothAllTangents(): void;
|
|
92
|
+
/**
|
|
93
|
+
*
|
|
94
|
+
* @param {AnimationCurve} other
|
|
95
|
+
* @return {boolean}
|
|
96
|
+
*/
|
|
97
|
+
equals(other: AnimationCurve): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* The copy is deep
|
|
100
|
+
* @param {AnimationCurve} other
|
|
101
|
+
*/
|
|
102
|
+
copy(other: AnimationCurve): void;
|
|
103
|
+
/**
|
|
104
|
+
*
|
|
105
|
+
* @return {AnimationCurve}
|
|
106
|
+
*/
|
|
107
|
+
clone(): AnimationCurve;
|
|
108
|
+
/**
|
|
109
|
+
*
|
|
110
|
+
* @return {number}
|
|
111
|
+
*/
|
|
112
|
+
hash(): number;
|
|
92
113
|
toJSON(): {
|
|
93
114
|
keys: any[];
|
|
94
115
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationCurve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/AnimationCurve.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AnimationCurve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/AnimationCurve.js"],"names":[],"mappings":"AAqBA;;;GAGG;AACH;IAkFI;;;;OAIG;IACH,kBAHW,QAAQ,EAAE,GACR,cAAc,CAQ1B;IA2KD;;;;;;;OAOG;IACH,6BANW,MAAM,eACN,MAAM,YACN,MAAM,aACN,MAAM,GACL,cAAc,CAUzB;IAED;;;;;;OAMG;IACH,4BALW,MAAM,YACN,MAAM,UACN,MAAM,GACL,cAAc,CAOzB;IAED;;;;;;;OAOG;IACH,0BANW,MAAM,eACN,MAAM,YACN,MAAM,aACN,MAAM,GACL,cAAc,CAYzB;IAzTD;;;OAGG;IACH,eAFU,QAAQ,EAAE,CAEV;IAEV;;;;OAIG;IACH,SAHW,QAAQ,GACN,MAAM,CAgClB;IAED;;;OAGG;IACH,cAFW,QAAQ,EAAE,QAUpB;IAED;;;;OAIG;IACH,YAHW,QAAQ,GACN,OAAO,CAYnB;IAED;;OAEG;IACH,cAEC;IAeD;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,uBAUC;IAED;;;;OAIG;IACH,eAHW,MAAM,GACL,MAAM,CAiCjB;IAED;;;OAGG;IACH,qBAFW,MAAM,QAoBhB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAWhB;IAED,0BAKC;IAED;;;;OAIG;IACH,cAHW,cAAc,GACb,OAAO,CAIlB;IAED;;;OAGG;IACH,YAFW,cAAc,QAIxB;IAED;;;OAGG;IACH,SAFY,cAAc,CAQzB;IAED;;;OAGG;IACH,QAFY,MAAM,CAIjB;IAED;;MAIC;IAED;;aAeC;CAqDJ;yBA3UwB,eAAe"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
2
|
import { binarySearchHighIndex } from "../../../core/collection/array/binarySearchHighIndex.js";
|
|
3
|
-
import {
|
|
3
|
+
import { computeHashArray } from "../../../core/collection/array/computeHashArray.js";
|
|
4
|
+
import { isArrayEqual } from "../../../core/collection/array/isArrayEqual.js";
|
|
4
5
|
import { lerp } from "../../../core/math/lerp.js";
|
|
5
|
-
import {
|
|
6
|
+
import { invokeObjectClone } from "../../../core/model/object/invokeObjectClone.js";
|
|
7
|
+
import { invokeObjectHash } from "../../../core/model/object/invokeObjectHash.js";
|
|
6
8
|
import { invokeObjectToJSON } from "../../../core/model/object/invokeObjectToJSON.js";
|
|
9
|
+
import { evaluate_two_key_curve } from "./evaluate_two_key_curve.js";
|
|
7
10
|
import { Keyframe } from "./Keyframe.js";
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -112,8 +115,6 @@ export class AnimationCurve {
|
|
|
112
115
|
|
|
113
116
|
curve.addMany(keys);
|
|
114
117
|
|
|
115
|
-
curve.smoothAllTangents();
|
|
116
|
-
|
|
117
118
|
return curve;
|
|
118
119
|
}
|
|
119
120
|
|
|
@@ -171,17 +172,7 @@ export class AnimationCurve {
|
|
|
171
172
|
if (time < keyframe1.time) {
|
|
172
173
|
const keyframe0 = keys[i - 1];
|
|
173
174
|
|
|
174
|
-
|
|
175
|
-
const normalized_time = inverseLerp(keyframe0.time, keyframe1.time, time);
|
|
176
|
-
|
|
177
|
-
const time_distance = keyframe1.time - keyframe0.time;
|
|
178
|
-
|
|
179
|
-
return spline_hermite3(
|
|
180
|
-
normalized_time,
|
|
181
|
-
keyframe0.value, keyframe1.value,
|
|
182
|
-
keyframe0.outTangent * time_distance,
|
|
183
|
-
keyframe1.inTangent * time_distance
|
|
184
|
-
);
|
|
175
|
+
return evaluate_two_key_curve(time, keyframe0, keyframe1);
|
|
185
176
|
}
|
|
186
177
|
}
|
|
187
178
|
|
|
@@ -236,6 +227,43 @@ export class AnimationCurve {
|
|
|
236
227
|
}
|
|
237
228
|
}
|
|
238
229
|
|
|
230
|
+
/**
|
|
231
|
+
*
|
|
232
|
+
* @param {AnimationCurve} other
|
|
233
|
+
* @return {boolean}
|
|
234
|
+
*/
|
|
235
|
+
equals(other) {
|
|
236
|
+
return isArrayEqual(this.keys, other.keys);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* The copy is deep
|
|
241
|
+
* @param {AnimationCurve} other
|
|
242
|
+
*/
|
|
243
|
+
copy(other) {
|
|
244
|
+
this.keys = other.keys.map(invokeObjectClone);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
*
|
|
249
|
+
* @return {AnimationCurve}
|
|
250
|
+
*/
|
|
251
|
+
clone() {
|
|
252
|
+
const curve = new AnimationCurve();
|
|
253
|
+
|
|
254
|
+
curve.copy(this);
|
|
255
|
+
|
|
256
|
+
return curve;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
*
|
|
261
|
+
* @return {number}
|
|
262
|
+
*/
|
|
263
|
+
hash() {
|
|
264
|
+
return computeHashArray(this.keys, invokeObjectHash);
|
|
265
|
+
}
|
|
266
|
+
|
|
239
267
|
toJSON() {
|
|
240
268
|
return {
|
|
241
269
|
keys: this.keys.map(invokeObjectToJSON)
|
|
@@ -178,4 +178,71 @@ test("static constant constructor", () => {
|
|
|
178
178
|
expect(curve.evaluate(4.9)).toBe(7);
|
|
179
179
|
|
|
180
180
|
expect(curve.evaluate(3)).toBe(7);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test("equals method", () => {
|
|
184
|
+
|
|
185
|
+
expect(new AnimationCurve().equals(new AnimationCurve())).toBe(true);
|
|
186
|
+
|
|
187
|
+
// one frame
|
|
188
|
+
expect(
|
|
189
|
+
AnimationCurve.from([Keyframe.from(0, 0)])
|
|
190
|
+
.equals(AnimationCurve.from([Keyframe.from(0, 0)]))
|
|
191
|
+
).toBe(true);
|
|
192
|
+
|
|
193
|
+
expect(
|
|
194
|
+
AnimationCurve.from([Keyframe.from(0, 1)])
|
|
195
|
+
.equals(AnimationCurve.from([Keyframe.from(0, 0)]))
|
|
196
|
+
).toBe(false);
|
|
197
|
+
|
|
198
|
+
expect(
|
|
199
|
+
AnimationCurve.from([Keyframe.from(1, 0)])
|
|
200
|
+
.equals(AnimationCurve.from([Keyframe.from(0, 0)]))
|
|
201
|
+
).toBe(false);
|
|
202
|
+
|
|
203
|
+
expect(
|
|
204
|
+
AnimationCurve.from([Keyframe.from(0, 0)])
|
|
205
|
+
.equals(AnimationCurve.from([Keyframe.from(0, 1)]))
|
|
206
|
+
).toBe(false);
|
|
207
|
+
|
|
208
|
+
expect(
|
|
209
|
+
AnimationCurve.from([Keyframe.from(0, 0)])
|
|
210
|
+
.equals(AnimationCurve.from([Keyframe.from(0, 1)]))
|
|
211
|
+
).toBe(false);
|
|
212
|
+
|
|
213
|
+
// different frame count
|
|
214
|
+
|
|
215
|
+
expect(
|
|
216
|
+
AnimationCurve.from([])
|
|
217
|
+
.equals(AnimationCurve.from([Keyframe.from(0, 0)]))
|
|
218
|
+
).toBe(false);
|
|
219
|
+
|
|
220
|
+
expect(
|
|
221
|
+
AnimationCurve.from([Keyframe.from(0, 0)])
|
|
222
|
+
.equals(AnimationCurve.from([]))
|
|
223
|
+
).toBe(false);
|
|
224
|
+
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
test("hash", () => {
|
|
228
|
+
|
|
229
|
+
expect(typeof AnimationCurve.from([Keyframe.from(0, 0)]).hash()).toBe("number")
|
|
230
|
+
|
|
231
|
+
expect(AnimationCurve.from([]).hash())
|
|
232
|
+
.toEqual(AnimationCurve.from([]).hash())
|
|
233
|
+
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
test("copy", () => {
|
|
237
|
+
|
|
238
|
+
const r = new AnimationCurve();
|
|
239
|
+
|
|
240
|
+
r.copy(AnimationCurve.from([Keyframe.from(1, -3, 5, -7)]))
|
|
241
|
+
|
|
242
|
+
expect(r.keys.length).toBe(1);
|
|
243
|
+
expect(r.keys[0].value).toBe(-3);
|
|
244
|
+
expect(r.keys[0].time).toBe(1);
|
|
245
|
+
expect(r.keys[0].inTangent).toBe(5);
|
|
246
|
+
expect(r.keys[0].outTangent).toBe(-7);
|
|
247
|
+
|
|
181
248
|
});
|
|
@@ -14,17 +14,17 @@ export class Keyframe {
|
|
|
14
14
|
*/
|
|
15
15
|
value: number;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Timestamp
|
|
18
18
|
* @type {number}
|
|
19
19
|
*/
|
|
20
20
|
time: number;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Incoming tangent
|
|
23
23
|
* @type {number}
|
|
24
24
|
*/
|
|
25
25
|
inTangent: number;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Outgoing tangent
|
|
28
28
|
* @type {number}
|
|
29
29
|
*/
|
|
30
30
|
outTangent: number;
|
|
@@ -36,6 +36,27 @@ export class Keyframe {
|
|
|
36
36
|
* @param {number} outTangent
|
|
37
37
|
*/
|
|
38
38
|
set(time: number, value: number, inTangent: number, outTangent: number): void;
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @param {Keyframe} other
|
|
42
|
+
* @returns {boolean}
|
|
43
|
+
*/
|
|
44
|
+
equals(other: Keyframe): boolean;
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* @param {Keyframe} other
|
|
48
|
+
*/
|
|
49
|
+
copy(other: Keyframe): void;
|
|
50
|
+
/**
|
|
51
|
+
*
|
|
52
|
+
* @return {Keyframe}
|
|
53
|
+
*/
|
|
54
|
+
clone(): Keyframe;
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @return {number}
|
|
58
|
+
*/
|
|
59
|
+
hash(): number;
|
|
39
60
|
toJSON(): {
|
|
40
61
|
value: number;
|
|
41
62
|
time: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Keyframe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/Keyframe.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Keyframe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/Keyframe.js"],"names":[],"mappings":"AAGA;IAyBI;;;;;;;OAOG;IACH,kBANW,MAAM,SACN,MAAM,cACN,MAAM,eACN,MAAM,GACL,QAAQ,CAQnB;IAtCD;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,YAFU,MAAM,CAED;IAkBf;;;;;;OAMG;IACH,UALW,MAAM,SACN,MAAM,aACN,MAAM,cACN,MAAM,QAmBhB;IAED;;;;OAIG;IACH,cAHW,QAAQ,GACN,OAAO,CAQnB;IAED;;;OAGG;IACH,YAFW,QAAQ,QAOlB;IAED;;;OAGG;IACH,SAFY,QAAQ,CAQnB;IAED;;;OAGG;IACH,QAFY,MAAM,CAKjB;IAED;;;;;MAOC;IAED;;;;;aAQC;IAIL;;;OAGG;IACH,qBAFU,OAAO,CAEY;CAN5B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFloat.js";
|
|
2
3
|
|
|
3
4
|
export class Keyframe {
|
|
4
5
|
/**
|
|
@@ -8,19 +9,19 @@ export class Keyframe {
|
|
|
8
9
|
value = 0;
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* Timestamp
|
|
12
13
|
* @type {number}
|
|
13
14
|
*/
|
|
14
15
|
time = 0;
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
|
-
*
|
|
18
|
+
* Incoming tangent
|
|
18
19
|
* @type {number}
|
|
19
20
|
*/
|
|
20
21
|
inTangent = 0;
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
+
* Outgoing tangent
|
|
24
25
|
* @type {number}
|
|
25
26
|
*/
|
|
26
27
|
outTangent = 0;
|
|
@@ -67,6 +68,51 @@ export class Keyframe {
|
|
|
67
68
|
this.outTangent = outTangent;
|
|
68
69
|
}
|
|
69
70
|
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* @param {Keyframe} other
|
|
74
|
+
* @returns {boolean}
|
|
75
|
+
*/
|
|
76
|
+
equals(other) {
|
|
77
|
+
return this.time === other.time
|
|
78
|
+
&& this.value === other.value
|
|
79
|
+
&& this.inTangent === other.inTangent
|
|
80
|
+
&& this.outTangent === other.outTangent;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
*
|
|
86
|
+
* @param {Keyframe} other
|
|
87
|
+
*/
|
|
88
|
+
copy(other) {
|
|
89
|
+
this.time = other.time;
|
|
90
|
+
this.value = other.value;
|
|
91
|
+
this.inTangent = other.inTangent;
|
|
92
|
+
this.outTangent = other.outTangent;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
*
|
|
97
|
+
* @return {Keyframe}
|
|
98
|
+
*/
|
|
99
|
+
clone() {
|
|
100
|
+
const r = new Keyframe();
|
|
101
|
+
|
|
102
|
+
r.copy(this);
|
|
103
|
+
|
|
104
|
+
return r;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
*
|
|
109
|
+
* @return {number}
|
|
110
|
+
*/
|
|
111
|
+
hash() {
|
|
112
|
+
return computeHashFloat(this.time)
|
|
113
|
+
^ computeHashFloat(this.value);
|
|
114
|
+
}
|
|
115
|
+
|
|
70
116
|
toJSON() {
|
|
71
117
|
return {
|
|
72
118
|
value: this.value,
|
|
@@ -28,4 +28,15 @@ test("fromJSON", () => {
|
|
|
28
28
|
expect(keyframe.inTangent).toEqual(5);
|
|
29
29
|
expect(keyframe.outTangent).toEqual(7);
|
|
30
30
|
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("copy",()=>{
|
|
34
|
+
const keyframe = new Keyframe();
|
|
35
|
+
|
|
36
|
+
keyframe.copy(Keyframe.from(1, -3, 5, -7));
|
|
37
|
+
|
|
38
|
+
expect(keyframe.value).toBe(-3);
|
|
39
|
+
expect(keyframe.time).toBe(1);
|
|
40
|
+
expect(keyframe.inTangent).toBe(5);
|
|
41
|
+
expect(keyframe.outTangent).toBe(-7);
|
|
31
42
|
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute bounding box for a given curve. X-axis is time, Y-axis is value.
|
|
3
|
+
* @param {AABB2} out
|
|
4
|
+
* @param {AnimationCurve} curve
|
|
5
|
+
*/
|
|
6
|
+
export function animation_curve_compute_aabb(out: AABB2, curve: AnimationCurve): void;
|
|
7
|
+
//# sourceMappingURL=animation_curve_compute_aabb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation_curve_compute_aabb.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/animation_curve_compute_aabb.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,sFAsCC"}
|
package/src/engine/animation/curve/{compute_curve_aabb.js → animation_curve_compute_aabb.js}
RENAMED
|
@@ -9,7 +9,7 @@ const temp_bounds = new Float32Array(4);
|
|
|
9
9
|
* @param {AABB2} out
|
|
10
10
|
* @param {AnimationCurve} curve
|
|
11
11
|
*/
|
|
12
|
-
export function
|
|
12
|
+
export function animation_curve_compute_aabb(out, curve) {
|
|
13
13
|
let x0 = Number.POSITIVE_INFINITY;
|
|
14
14
|
let x1 = Number.NEGATIVE_INFINITY;
|
|
15
15
|
let y0 = Number.POSITIVE_INFINITY;
|