@woosh/meep-engine 2.119.84 → 2.119.85

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/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.119.84",
8
+ "version": "2.119.85",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Convert floating point RGB input to RGBE9995 Uint32 value
3
+ * TODO unverified
4
+ * @param {number} r
5
+ * @param {number} g
6
+ * @param {number} b
7
+ * @returns {number} Uint32
8
+ */
9
+ export function rgb_to_rgbe9995(r: number, g: number, b: number): number;
10
+ //# sourceMappingURL=rgb_to_rgbe9995.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rgb_to_rgbe9995.d.ts","sourceRoot":"","sources":["../../../../src/core/color/rgb_to_rgbe9995.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,mCALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAyClB"}
@@ -0,0 +1,51 @@
1
+ import { clamp } from "../math/clamp.js";
2
+ import { max3 } from "../math/max3.js";
3
+
4
+ /**
5
+ * Convert floating point RGB input to RGBE9995 Uint32 value
6
+ * TODO unverified
7
+ * @param {number} r
8
+ * @param {number} g
9
+ * @param {number} b
10
+ * @returns {number} Uint32
11
+ */
12
+ export function rgb_to_rgbe9995(r, g, b) {
13
+
14
+ //see https://github.com/Stary2001/godot/blob/00c6ce9716ed542997bc2b59136bceb3729db970/core/color.h#L125
15
+
16
+ const pow2to9 = 512.0;
17
+ const B = 15.0;
18
+ //const float Emax = 31.0f;
19
+ const N = 9.0;
20
+
21
+ const sharedexp = 65408.000; //(( pow2to9 - 1.0f)/ pow2to9)*powf( 2.0f, 31.0f - 15.0f);
22
+
23
+ const cRed = clamp(r, 0, sharedexp);
24
+ const cGreen = clamp(g, 0, sharedexp);
25
+ const cBlue = clamp(b, 0, sharedexp);
26
+
27
+ const cMax = max3(cRed, cGreen, cBlue);
28
+
29
+ // expp = MAX(-B - 1, log2(maxc)) + 1 + B
30
+
31
+ const expp = Math.max(-B - 1.0, Math.floor(Math.log(cMax) / Math.LN2)) + 1.0 + B;
32
+
33
+ const sMax = Math.floor((cMax / Math.pow(2.0, expp - B - N)) + 0.5);
34
+
35
+ let exps = expp + 1.0;
36
+
37
+ if (0.0 <= sMax && sMax < pow2to9) {
38
+ exps = expp;
39
+ }
40
+
41
+ const sRed = Math.floor((cRed / Math.pow(2.0, exps - B - N)) + 0.5) >>> 0;
42
+ const sGreen = Math.floor((cGreen / Math.pow(2.0, exps - B - N)) + 0.5) >>> 0;
43
+ const sBlue = Math.floor((cBlue / Math.pow(2.0, exps - B - N)) + 0.5) >>> 0;
44
+
45
+ return (sRed & 0x1FF)
46
+ | ((sGreen & 0x1FF) << 9)
47
+ | ((sBlue & 0x1FF) << 18)
48
+ | ((exps & 0x1F) << 27)
49
+ ;
50
+
51
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TODO unverified
3
+ * Decode RGBE (RGB + exponent) UINT32 value
4
+ * @param {number[]|Float32Array} out
5
+ * @param {number} out_offset
6
+ * @param {number} rgbe
7
+ */
8
+ export function rgbe9995_to_rgb(out: number[] | Float32Array, out_offset: number, rgbe: number): void;
9
+ //# sourceMappingURL=rgbe9995_to_rgb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rgbe9995_to_rgb.d.ts","sourceRoot":"","sources":["../../../../src/core/color/rgbe9995_to_rgb.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qCAJW,MAAM,EAAE,GAAC,YAAY,cACrB,MAAM,QACN,MAAM,QAmBhB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * TODO unverified
3
+ * Decode RGBE (RGB + exponent) UINT32 value
4
+ * @param {number[]|Float32Array} out
5
+ * @param {number} out_offset
6
+ * @param {number} rgbe
7
+ */
8
+ export function rgbe9995_to_rgb(out, out_offset, rgbe) {
9
+ // see https://github.com/godotengine/godot/blob/4c4e67334412f73c9deba5e5d29afa8651418af2/core/math/color.cpp#L471
10
+
11
+ const r = rgbe & 0x1ff;
12
+ const g = (rgbe >> 9) & 0x1ff;
13
+ const b = (rgbe >> 18) & 0x1ff;
14
+ const e = (rgbe >> 27);
15
+
16
+ const scale = Math.pow(2.0, e - 15.0 - 9.0);
17
+
18
+ const _r = r * scale;
19
+ const _g = g * scale;
20
+ const _b = b * scale;
21
+
22
+ out[out_offset] = _r;
23
+ out[out_offset + 1] = _g;
24
+ out[out_offset + 2] = _b;
25
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Compute interior angle between three points
3
+ * Computed angle is around point B
4
+ * @param {{x:number, y:number, z:number}} a
5
+ * @param {{x:number, y:number, z:number}} b
6
+ * @param {{x:number, y:number, z:number}} c
7
+ * @returns {number} angle in radians
8
+ */
9
+ export function v3_compute_interior_angle(a: {
10
+ x: number;
11
+ y: number;
12
+ z: number;
13
+ }, b: {
14
+ x: number;
15
+ y: number;
16
+ z: number;
17
+ }, c: {
18
+ x: number;
19
+ y: number;
20
+ z: number;
21
+ }): number;
22
+ //# sourceMappingURL=v3_compute_interior_angle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_compute_interior_angle.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/3d/v3_compute_interior_angle.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,6CALW;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAA;CAAC,KAC9B;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAA;CAAC,KAC9B;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAA;CAAC,GAC5B,MAAM,CAiBlB"}
@@ -0,0 +1,26 @@
1
+ import { v3_angle_between } from "../vec3/v3_angle_between.js";
2
+
3
+ /**
4
+ * Compute interior angle between three points
5
+ * Computed angle is around point B
6
+ * @param {{x:number, y:number, z:number}} a
7
+ * @param {{x:number, y:number, z:number}} b
8
+ * @param {{x:number, y:number, z:number}} c
9
+ * @returns {number} angle in radians
10
+ */
11
+ export function v3_compute_interior_angle(a, b, c) {
12
+ //compute AB delta
13
+ const d_ab_x = a.x - b.x;
14
+ const d_ab_y = a.y - b.y;
15
+ const d_ab_z = a.z - b.z;
16
+
17
+ //compute CB delta
18
+ const d_cb_x = c.x - b.x;
19
+ const d_cb_y = c.y - b.y;
20
+ const d_cb_z = c.z - b.z;
21
+
22
+ return v3_angle_between(
23
+ d_ab_x, d_ab_y, d_ab_z,
24
+ d_cb_x, d_cb_y, d_cb_z,
25
+ )
26
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
@@ -1023,14 +1023,16 @@ class Quaternion {
1023
1023
  }
1024
1024
 
1025
1025
  /**
1026
- *
1026
+ * Spherical linear interpolation
1027
1027
  * @param {Quaternion} from
1028
1028
  * @param {Quaternion} to
1029
- * @param {number} t
1029
+ * @param {number} t coefficient, how much between the input quats?
1030
1030
  */
1031
1031
  slerpQuaternions(from, to, t) {
1032
1032
  assert.isNumber(t, 't');
1033
1033
 
1034
+ // see https://github.com/glampert/vectormath/blob/7105ef341303fe83b3dacd6883d9333989126069/scalar/quaternion.hpp#L90
1035
+
1034
1036
  const ax = from.x,
1035
1037
  ay = from.y,
1036
1038
  az = from.z,
@@ -1041,26 +1043,30 @@ class Quaternion {
1041
1043
  bz = to.z,
1042
1044
  bw = to.w;
1043
1045
 
1044
- let omega, cosom, sinom, scale0, scale1;
1046
+ let cos_angle, scale0, scale1;
1045
1047
 
1046
1048
  // calc cosine
1047
- cosom = ax * bx + ay * by + az * bz + aw * bw;
1049
+ cos_angle = ax * bx + ay * by + az * bz + aw * bw;
1048
1050
 
1049
1051
  // adjust signs (if necessary)
1050
- if (cosom < 0.0) {
1051
- cosom = -cosom;
1052
+ if (cos_angle < 0.0) {
1053
+ cos_angle = -cos_angle;
1052
1054
  bx = -bx;
1053
1055
  by = -by;
1054
1056
  bz = -bz;
1055
1057
  bw = -bw;
1056
1058
  }
1059
+
1057
1060
  // calculate coefficients
1058
- if ((1.0 - cosom) > EPSILON) {
1061
+ if ((1.0 - cos_angle) > EPSILON) {
1059
1062
  // standard case (slerp)
1060
- omega = Math.acos(cosom);
1061
- sinom = sin(omega);
1062
- scale0 = sin((1.0 - t) * omega) / sinom;
1063
- scale1 = sin(t * omega) / sinom;
1063
+ const angle = Math.acos(cos_angle);
1064
+
1065
+ const recip_sin_angle = 1 / sin(angle);
1066
+
1067
+ scale0 = sin((1.0 - t) * angle) * recip_sin_angle;
1068
+ scale1 = sin(t * angle) * recip_sin_angle;
1069
+
1064
1070
  } else {
1065
1071
  // "from" and "to" quaternions are very close
1066
1072
  // ... so we can do a linear interpolation
@@ -23,6 +23,11 @@ declare class AnimationTrackPlayback {
23
23
  on: {
24
24
  ended: Signal<any, any, any, any, any, any, any, any>;
25
25
  };
26
+ /**
27
+ *
28
+ * @returns {boolean}
29
+ */
30
+ get loop(): boolean;
26
31
  /**
27
32
  *
28
33
  * @returns {Promise<void>}
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationTrackPlayback.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/keyed2/AnimationTrackPlayback.js"],"names":[],"mappings":";AAGA;IACI;;;;;;;;OAQG;IACH,4EAuBC;IAtBG,sBAAkB;IAClB,cAA+B;IAE/B,oBAAoC;IACpC,kBAAgC;IAEhC,uBAAuB;IACvB,8BAA8B;IAE9B,uBAAuB;IACvB,sBAAsB;IAEtB,gBAAmB;IAEnB,4BAA0D;IAG1D;;MAEC;IAKL;;;OAGG;IACH,gBAFa,QAAQ,IAAI,CAAC,CAUzB;IAED;;;OAGG;IACH,WAFW,OAAO,QAIjB;IAED,cAEC;IAED;;;OAGG;IACH,kBAFW,MAAM,QA2BhB;IAED;;;OAGG;IACH,cAFa,OAAO,CA2CnB;IAED;;;OAGG;IACH,mBAFW,MAAM,QA6BhB;IAED,eAOC;IAED;;;OAGG;IACH,0BAFW,MAAM,EAAE,QA2ClB;CACJ;mBAtOkB,uCAAuC"}
1
+ {"version":3,"file":"AnimationTrackPlayback.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/keyed2/AnimationTrackPlayback.js"],"names":[],"mappings":";AAGA;IACI;;;;;;;;OAQG;IACH,4EAuBC;IAtBG,sBAAkB;IAClB,cAA+B;IAE/B,oBAAoC;IACpC,kBAAgC;IAEhC,uBAAuB;IACvB,8BAA8B;IAE9B,uBAAuB;IACvB,sBAAsB;IAEtB,gBAAmB;IAEnB,4BAA0D;IAG1D;;MAEC;IAKL;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,gBAFa,QAAQ,IAAI,CAAC,CAUzB;IAED;;;OAGG;IACH,WAFW,OAAO,QAIjB;IAED,cAEC;IAED;;;OAGG;IACH,kBAFW,MAAM,QA2BhB;IAED;;;OAGG;IACH,cAFa,OAAO,CA2CnB;IAED;;;OAGG;IACH,mBAFW,MAAM,QA6BhB;IAED,eAOC;IAED;;;OAGG;IACH,0BAFW,MAAM,EAAE,QA2ClB;CACJ;mBA9OkB,uCAAuC"}
@@ -36,6 +36,14 @@ class AnimationTrackPlayback {
36
36
  this.setPosition(0);
37
37
  }
38
38
 
39
+ /**
40
+ *
41
+ * @returns {boolean}
42
+ */
43
+ get loop() {
44
+ return this.__loop;
45
+ }
46
+
39
47
  /**
40
48
  *
41
49
  * @returns {Promise<void>}
@@ -4,8 +4,12 @@ export class AnimationBehavior extends Behavior<any> {
4
4
  * @param {AnimationTrackPlayback} animation
5
5
  */
6
6
  constructor(animation: AnimationTrackPlayback);
7
+ /**
8
+ *
9
+ * @type {AnimationTrackPlayback}
10
+ */
7
11
  animation: AnimationTrackPlayback;
8
- initialize(): void;
12
+ initialize(_ignore_: any): void;
9
13
  }
10
14
  import { Behavior } from "../../../intelligence/behavior/Behavior.js";
11
15
  //# sourceMappingURL=AnimationBehavior.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/animation/keyed2/behavior/AnimationBehavior.js"],"names":[],"mappings":"AAGA;IACI;;;OAGG;IACH,+CAGC;IADG,kCAA0B;IAmB9B,mBAEC;CACJ;yBAhCwB,4CAA4C"}
1
+ {"version":3,"file":"AnimationBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/animation/keyed2/behavior/AnimationBehavior.js"],"names":[],"mappings":"AAGA;IACI;;;OAGG;IACH,+CAOC;IALG;;;OAGG;IACH,kCAA0B;IAqB9B,gCAEC;CACJ;yBAtCwB,4CAA4C"}
@@ -8,6 +8,10 @@ export class AnimationBehavior extends Behavior {
8
8
  */
9
9
  constructor(animation) {
10
10
  super();
11
+ /**
12
+ *
13
+ * @type {AnimationTrackPlayback}
14
+ */
11
15
  this.animation = animation;
12
16
  }
13
17
 
@@ -18,16 +22,18 @@ export class AnimationBehavior extends Behavior {
18
22
  * @returns {BehaviorStatus}
19
23
  */
20
24
  tick(timeDelta) {
21
- this.animation.advance(timeDelta);
25
+ const animation = this.animation;
22
26
 
23
- if (this.animation.position >= this.animation.track.timeEnd && !this.animation.loop) {
27
+ animation.advance(timeDelta);
28
+
29
+ if (animation.position >= animation.track.timeEnd && !animation.loop) {
24
30
  return BehaviorStatus.Succeeded;
25
31
  }
26
32
 
27
33
  return BehaviorStatus.Running;
28
34
  }
29
35
 
30
- initialize() {
36
+ initialize(_ignore_) {
31
37
  this.animation.setPosition(this.animation.track.timeStart);
32
38
  }
33
39
  }
@@ -45,7 +45,7 @@ export class Transform {
45
45
  readonly matrix: Float32Array;
46
46
  /**
47
47
  * Various bit flags, see {@link TransformFlags}
48
- * This should generally be accessed through getFlag/setFlag instead of modifying the value directly
48
+ * This should generally be accessed through {@link getFlag}/{@link setFlag} instead of modifying the value directly
49
49
  * @type {number}
50
50
  */
51
51
  flags: number;
@@ -53,7 +53,7 @@ export class Transform {
53
53
 
54
54
  /**
55
55
  * Various bit flags, see {@link TransformFlags}
56
- * This should generally be accessed through getFlag/setFlag instead of modifying the value directly
56
+ * This should generally be accessed through {@link getFlag}/{@link setFlag} instead of modifying the value directly
57
57
  * @type {number}
58
58
  */
59
59
  flags = FLAGS_DEFAULT;
@@ -1 +1 @@
1
- {"version":3,"file":"two_joint_ik.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_joint_ik.js"],"names":[],"mappings":"AAgDA;;;;;;;;;;;GAWG;AACH,gCAVW,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,OACP,MAAM,QACN,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QAoEpB;oBA5HmB,+BAA+B;uBAF5B,kCAAkC"}
1
+ {"version":3,"file":"two_joint_ik.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inverse_kinematics/two_joint_ik.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;GAWG;AACH,gCAVW,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,OACP,MAAM,QACN,UAAU,QACV,UAAU,QACV,UAAU,QACV,UAAU,QAoEpB;oBAtGmB,+BAA+B;uBAD5B,kCAAkC"}
@@ -1,32 +1,8 @@
1
+ import { v3_compute_interior_angle } from "../../../core/geom/3d/v3_compute_interior_angle.js";
1
2
  import Quaternion from "../../../core/geom/Quaternion.js";
2
- import { v3_angle_between } from "../../../core/geom/vec3/v3_angle_between.js";
3
3
  import Vector3 from "../../../core/geom/Vector3.js";
4
4
  import { clamp } from "../../../core/math/clamp.js";
5
5
 
6
- /**
7
- * Compute interior angle between three points
8
- * @param {Vector3} a
9
- * @param {Vector3} b
10
- * @param {Vector3} c
11
- * @returns {number} angle in radians
12
- */
13
- function computeInteriorAngle(a, b, c) {
14
- //compute AB delta
15
- const d_ab_x = a.x - b.x;
16
- const d_ab_y = a.y - b.y;
17
- const d_ab_z = a.z - b.z;
18
-
19
- //compute CB delta
20
- const d_cb_x = c.x - b.x;
21
- const d_cb_y = c.y - b.y;
22
- const d_cb_z = c.z - b.z;
23
-
24
- return v3_angle_between(
25
- d_ab_x, d_ab_y, d_ab_z,
26
- d_cb_x, d_cb_y, d_cb_z,
27
- )
28
- }
29
-
30
6
  const d = new Vector3();
31
7
 
32
8
  const delta_ca = new Vector3();
@@ -46,6 +22,8 @@ const axis0_la = new Vector3();
46
22
  const axis0_lb = new Vector3();
47
23
  const axis1_la = new Vector3();
48
24
 
25
+ // TODO: investigate https://github.com/guillaumeblanc/ozz-animation/blob/master/src/animation/runtime/ik_two_bone_job.cc
26
+
49
27
  /**
50
28
  * Based on http://theorangeduck.com/page/simple-two-joint
51
29
  * @param {Vector3} a Root bone position
@@ -74,9 +52,9 @@ export function two_joint_ik(
74
52
  const lat = clamp(t.distanceTo(a), eps, maximum_extension);
75
53
 
76
54
  //compute current interior angles
77
- const ac_ab_0 = computeInteriorAngle(c, a, b);
78
- const ba_bc_0 = computeInteriorAngle(a, b, c);
79
- const ac_at_0 = computeInteriorAngle(c, a, t);
55
+ const ac_ab_0 = v3_compute_interior_angle(c, a, b);
56
+ const ba_bc_0 = v3_compute_interior_angle(a, b, c);
57
+ const ac_at_0 = v3_compute_interior_angle(c, a, t);
80
58
 
81
59
  // Using the cosine rule to compute desired interior angles
82
60
  const length_at_sqr = lat * lat;