@woosh/meep-engine 2.37.19 → 2.37.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/core/binary/float2uint8.js +8 -0
  2. package/core/binary/uint82float.js +8 -0
  3. package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
  4. package/core/collection/list/List.d.ts +1 -1
  5. package/core/color/Color.js +69 -1
  6. package/core/color/YCbCr_to_rgb_uint24.js +3 -4
  7. package/core/color/hsv2rgb.js +4 -3
  8. package/core/color/linear_to_sRGB.js +4 -5
  9. package/core/color/rgb2uint24.js +6 -4
  10. package/core/color/rgb_to_YCbCr_uint24.js +11 -13
  11. package/core/events/signal/Signal.d.ts +11 -9
  12. package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
  13. package/core/geom/Quaternion.d.ts +16 -1
  14. package/core/geom/Quaternion.js +129 -65
  15. package/core/geom/Quaternion.spec.js +24 -0
  16. package/core/geom/Vector2.js +3 -3
  17. package/core/geom/Vector3.d.ts +2 -0
  18. package/core/geom/Vector3.js +31 -7
  19. package/core/geom/Vector4.js +16 -0
  20. package/core/math/bell_membership_function.js +19 -0
  21. package/core/math/exp2.js +8 -0
  22. package/core/math/interval/NumericInterval.js +17 -0
  23. package/core/math/physics/brdf/brdf_burley.js +25 -0
  24. package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
  25. package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
  26. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
  27. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
  28. package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
  29. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
  30. package/editor/actions/concrete/PatchTerrainHeightAction.js +12 -104
  31. package/editor/ecs/component/createObjectEditor.js +53 -29
  32. package/editor/ecs/component/editors/Sampler2DEditor.js +71 -24
  33. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +47 -0
  34. package/editor/ecs/component/editors/primitive/FunctionEditor.js +6 -2
  35. package/editor/tools/SelectionTool.js +1 -1
  36. package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
  37. package/editor/tools/paint/TerrainPaintTool.js +2 -1
  38. package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
  39. package/engine/asset/AssetManager.d.ts +1 -1
  40. package/engine/asset/AssetManager.js +390 -388
  41. package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
  42. package/engine/ecs/fow/FogOfWarEditor.js +13 -0
  43. package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
  44. package/engine/ecs/terrain/ecs/Terrain.js +21 -1
  45. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
  46. package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
  47. package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
  48. package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
  49. package/engine/ecs/transform/Transform.d.ts +2 -0
  50. package/engine/ecs/transform/Transform.js +3 -0
  51. package/engine/graphics/ecs/light/Light.js +0 -47
  52. package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
  53. package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
  54. package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
  55. package/engine/graphics/ecs/sprite/Sprite.js +11 -0
  56. package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
  57. package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1566 -0
  58. package/engine/graphics/micron/prototypeVirtualGeometry.js +2 -2
  59. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
  60. package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
  61. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
  62. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
  63. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
  64. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
  65. package/engine/graphics/shaders/TerrainShader.js +8 -8
  66. package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
  67. package/engine/graphics/texture/sampler/Sampler2D.js +190 -201
  68. package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
  69. package/engine/graphics/texture/sampler/bicubic.js +59 -0
  70. package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
  71. package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
  72. package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
  73. package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
  74. package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
  75. package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
  76. package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
  77. package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
  78. package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
  79. package/engine/platform/GetURLHash.js +27 -0
  80. package/engine/platform/WebEnginePlatform.js +1 -22
  81. package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
  82. package/generation/GridGenerator.js +7 -6
  83. package/generation/example/SampleGenerator0.js +6 -6
  84. package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
  85. package/generation/example/themes/SampleTheme0.js +11 -7
  86. package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
  87. package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
  88. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
  89. package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
  90. package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
  91. package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
  92. package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
  93. package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
  94. package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
  95. package/generation/grid/GridData.d.ts +5 -1
  96. package/generation/grid/GridData.js +35 -36
  97. package/generation/grid/MarkerMatchCounter.js +5 -3
  98. package/generation/markers/GridActionRuleSet.js +15 -32
  99. package/generation/markers/GridCellActionPlaceMarker.js +8 -10
  100. package/generation/markers/debug/visualizeMarkers.js +56 -36
  101. package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
  102. package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
  103. package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
  104. package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
  105. package/generation/placement/GridCellPlacementRule.js +10 -3
  106. package/package.json +1 -1
  107. package/samples/terrain/from_image.js +7 -3
  108. package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
  109. package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
  110. package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
@@ -0,0 +1,8 @@
1
+ /**
2
+ *
3
+ * @param {number} v
4
+ * @returns {number}
5
+ */
6
+ export function float2uint8(v) {
7
+ return Math.round(v * 255);
8
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ *
3
+ * @param {number} v
4
+ * @returns {number}
5
+ */
6
+ export function uint82float(v) {
7
+ return v / 255;
8
+ }
@@ -619,20 +619,22 @@ export class ExplicitBinaryBoundingVolumeHierarchy {
619
619
  while (index !== NULL_NODE) {
620
620
  index = this.balance(index);
621
621
 
622
- const child1 = uint32[index * ELEMENT_WORD_COUNT + COLUMN_CHILD_1];
623
- const child2 = uint32[index * ELEMENT_WORD_COUNT + COLUMN_CHILD_2];
622
+ const node_address = index * ELEMENT_WORD_COUNT;
623
+
624
+ const child1 = uint32[node_address + COLUMN_CHILD_1];
625
+ const child2 = uint32[node_address + COLUMN_CHILD_2];
624
626
 
625
627
  assert.notEqual(child1, NULL_NODE, 'child1 is null');
626
628
  assert.notEqual(child2, NULL_NODE, 'child2 is null');
627
629
 
628
- uint32[index * ELEMENT_WORD_COUNT + COLUMN_HEIGHT] = 1 + max2(
630
+ uint32[node_address + COLUMN_HEIGHT] = 1 + max2(
629
631
  uint32[child1 * ELEMENT_WORD_COUNT + COLUMN_HEIGHT],
630
632
  uint32[child2 * ELEMENT_WORD_COUNT + COLUMN_HEIGHT],
631
633
  );
632
634
 
633
635
  this.node_set_combined_aabb(index, child1, child2);
634
636
 
635
- index = uint32[index * ELEMENT_WORD_COUNT + COLUMN_PARENT];
637
+ index = uint32[node_address + COLUMN_PARENT];
636
638
  }
637
639
  }
638
640
 
@@ -5,7 +5,7 @@ export default class List<T> {
5
5
 
6
6
  on: {
7
7
  added: Signal<T>,
8
- removed: Signal<T>
8
+ removed: Signal<T, number>
9
9
  }
10
10
 
11
11
  constructor(elements?: T[])
@@ -10,6 +10,8 @@ import { rgb2hsv } from "./rgb2hsv.js";
10
10
  import { rgb2uint24 } from "./rgb2uint24.js";
11
11
  import { clamp01 } from "../math/clamp01.js";
12
12
  import { rgb2hex } from "./rgb2hex.js";
13
+ import { linear_to_sRGB } from "./linear_to_sRGB.js";
14
+ import { sRGB_to_linear } from "./sRGB_to_linear.js";
13
15
 
14
16
  /**
15
17
  * @class
@@ -487,5 +489,71 @@ export class Color {
487
489
  r.parse(str);
488
490
 
489
491
  return r;
490
- };
492
+ }
493
+
494
+ /**
495
+ *
496
+ * @param {Color} input
497
+ * @param {Color} output
498
+ */
499
+ static from_linear_to_sRGB(input, output) {
500
+ linear_to_sRGB(output, 0, input, 0);
501
+ }
502
+
503
+ /**
504
+ *
505
+ * @param {Color} input
506
+ * @param {Color} output
507
+ */
508
+ static from_sRGB_to_linear(input, output) {
509
+ sRGB_to_linear(output, 0, input, 0);
510
+ }
491
511
  }
512
+
513
+ /**
514
+ * @readonly
515
+ * @type {Readonly<Color>}
516
+ */
517
+ Color.red = Object.freeze(new Color(1, 0, 0));
518
+
519
+ /**
520
+ * @readonly
521
+ * @type {Readonly<Color>}
522
+ */
523
+ Color.green = Object.freeze(new Color(0, 1, 0));
524
+
525
+ /**
526
+ * @readonly
527
+ * @type {Readonly<Color>}
528
+ */
529
+ Color.blue = Object.freeze(new Color(0, 0, 1));
530
+
531
+ /**
532
+ * @readonly
533
+ * @type {Readonly<Color>}
534
+ */
535
+ Color.yellow = Object.freeze(new Color(1, 1, 0));
536
+
537
+ /**
538
+ * @readonly
539
+ * @type {Readonly<Color>}
540
+ */
541
+ Color.cyan = Object.freeze(new Color(0, 1, 1));
542
+
543
+ /**
544
+ * @readonly
545
+ * @type {Readonly<Color>}
546
+ */
547
+ Color.magenta = Object.freeze(new Color(1, 0, 1));
548
+
549
+ /**
550
+ * @readonly
551
+ * @type {Readonly<Color>}
552
+ */
553
+ Color.white = Object.freeze(new Color(1, 1, 1));
554
+
555
+ /**
556
+ * @readonly
557
+ * @type {Readonly<Color>}
558
+ */
559
+ Color.black = Object.freeze(new Color(0, 0, 0));
@@ -1,3 +1,5 @@
1
+ import { rgb2uint24 } from "./rgb2uint24.js";
2
+
1
3
  /**
2
4
  * @see https://en.wikipedia.org/wiki/YUV
3
5
  * @param {number} Y
@@ -13,8 +15,5 @@ export function YCbCr_to_rgb_uint24(Y, Cb, Cr) {
13
15
  const g = Y - ((_Cb >> 2) + (_Cb >> 4) + (_Cb >> 5)) - ((_Cr >> 1) + (_Cr >> 3) + (_Cr >> 4) + (_Cr >> 5));
14
16
  const b = Y + _Cb + (_Cb >> 1) + (_Cb >> 2) + (_Cb >> 6);
15
17
 
16
- return (b & 0xFF)
17
- | (g & 0xFF) << 8
18
- | (r & 0xFF) << 16
19
- ;
18
+ return rgb2uint24(r, g, b);
20
19
  }
@@ -1,4 +1,5 @@
1
1
  import { clamp01 } from "../math/clamp01.js";
2
+ import { float2uint8 } from "../binary/float2uint8.js";
2
3
 
3
4
  /**
4
5
  *
@@ -46,9 +47,9 @@ export function hsv2rgb(h, s, v) {
46
47
  break;
47
48
  }
48
49
  return {
49
- r: Math.round(r * 255),
50
- g: Math.round(g * 255),
51
- b: Math.round(b * 255)
50
+ r: float2uint8(r),
51
+ g: float2uint8(g),
52
+ b: float2uint8(b)
52
53
  };
53
54
  }
54
55
 
@@ -1,13 +1,12 @@
1
-
2
- function convert(c){
3
- return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;
1
+ function convert(c) {
2
+ return (c < 0.0031308) ? c * 12.92 : 1.055 * (Math.pow(c, 0.41666)) - 0.055;
4
3
  }
5
4
 
6
5
  /**
7
6
  *
8
- * @param {number[]} output
7
+ * @param {number[]|ArrayLike<number>} output
9
8
  * @param {number} output_offset
10
- * @param {number[]} input
9
+ * @param {number[]|ArrayLike<number>} input
11
10
  * @param {number} input_offset
12
11
  */
13
12
  export function linear_to_sRGB(output, output_offset, input, input_offset) {
@@ -1,3 +1,5 @@
1
+ import { float2uint8 } from "../binary/float2uint8.js";
2
+
1
3
  /**
2
4
  *
3
5
  * @param {number} r
@@ -5,10 +7,10 @@
5
7
  * @param {number} b
6
8
  * @returns {number}
7
9
  */
8
- export function rgb2uint24(r,g,b){
9
- const _r = Math.round(r * 255);
10
- const _g = Math.round(g * 255);
11
- const _b = Math.round(b * 255);
10
+ export function rgb2uint24(r, g, b) {
11
+ const _r = float2uint8(r);
12
+ const _g = float2uint8(g);
13
+ const _b = float2uint8(b);
12
14
 
13
15
  return (_b & 0xFF)
14
16
  | (_g & 0xFF) << 8
@@ -1,18 +1,16 @@
1
- /**
2
- *
3
- * @see https://en.wikipedia.org/wiki/YUV
4
- * @param {number} r
5
- * @param {number} g
6
- * @param {number} b
7
- * @returns {number}
8
- */
1
+ import { rgb2uint24 } from "./rgb2uint24.js";
2
+
9
3
  export function rgb_to_YCbCr_uint24(r, g, b) {
10
4
  const Y = 0.299 * r + 0.587 * g + 0.114 * b;
11
5
  const Cb = -0.169 * r - 0.331 * g + 0.499 * b + 128;
12
6
  const Cr = 0.499 * g - 0.418 * g - 0.0813 * b + 128;
13
-
14
- return (Cr & 0xFF)
15
- | (Cb & 0xFF) << 8
16
- | (Y & 0xFF) << 16
17
- ;
7
+ /**
8
+ *
9
+ * @see https://en.wikipedia.org/wiki/YUV
10
+ * @param {number} r
11
+ * @param {number} g
12
+ * @param {number} b
13
+ * @returns {number}
14
+ */
15
+ return rgb2uint24(Y,Cb,Cr);
18
16
  }
@@ -5,9 +5,9 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
5
5
  add(listener: (a: A, b: B, c: C) => any, thisArg?: any): void
6
6
  add(listener: (a: A, b: B, c: C, d: D) => any, thisArg?: any): void
7
7
  add(listener: (a: A, b: B, c: C, d: D, e: E) => any, thisArg?: any): void
8
- add(listener: (a: A, b: B, c: C, d: D, e: E,f: F) => any, thisArg?: any): void
9
- add(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G) => any, thisArg?: any): void
10
- add(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G, h: H) => any, thisArg?: any): void
8
+ add(listener: (a: A, b: B, c: C, d: D, e: E, f: F) => any, thisArg?: any): void
9
+ add(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => any, thisArg?: any): void
10
+ add(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => any, thisArg?: any): void
11
11
 
12
12
  addOne(listener: () => any, thisArg?: any): void
13
13
  addOne(listener: (a: A) => any, thisArg?: any): void
@@ -15,9 +15,9 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
15
15
  addOne(listener: (a: A, b: B, c: C) => any, thisArg?: any): void
16
16
  addOne(listener: (a: A, b: B, c: C, d: D) => any, thisArg?: any): void
17
17
  addOne(listener: (a: A, b: B, c: C, d: D, e: E) => any, thisArg?: any): void
18
- addOne(listener: (a: A, b: B, c: C, d: D, e: E,f: F) => any, thisArg?: any): void
19
- addOne(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G) => any, thisArg?: any): void
20
- addOne(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G, h: H) => any, thisArg?: any): void
18
+ addOne(listener: (a: A, b: B, c: C, d: D, e: E, f: F) => any, thisArg?: any): void
19
+ addOne(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => any, thisArg?: any): void
20
+ addOne(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => any, thisArg?: any): void
21
21
 
22
22
  remove(listener: () => any, thisArg?: any): void
23
23
  remove(listener: (a: A) => any, thisArg?: any): void
@@ -25,9 +25,9 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
25
25
  remove(listener: (a: A, b: B, c: C) => any, thisArg?: any): void
26
26
  remove(listener: (a: A, b: B, c: C, d: D) => any, thisArg?: any): void
27
27
  remove(listener: (a: A, b: B, c: C, d: D, e: E) => any, thisArg?: any): void
28
- remove(listener: (a: A, b: B, c: C, d: D, e: E,f: F) => any, thisArg?: any): void
29
- remove(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G) => any, thisArg?: any): void
30
- remove(listener: (a: A, b: B, c: C, d: D, e: E,f: F, g: G, h: H) => any, thisArg?: any): void
28
+ remove(listener: (a: A, b: B, c: C, d: D, e: E, f: F) => any, thisArg?: any): void
29
+ remove(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => any, thisArg?: any): void
30
+ remove(listener: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) => any, thisArg?: any): void
31
31
 
32
32
  send0(): void
33
33
 
@@ -47,4 +47,6 @@ export default class Signal<A = any, B = any, C = any, D = any, E = any, F = any
47
47
  * @deprecated use strongly typed dispatch methods instead (send0, send1 etc)
48
48
  */
49
49
  dispatch(...params: any[]): void
50
+
51
+ removeAll(): void
50
52
  }
@@ -0,0 +1,67 @@
1
+ import { aabb2_sqrDistanceToPoint } from "../AABB2Math.js";
2
+
3
+ /**
4
+ *
5
+ * @type {QuadTreeNode[]}
6
+ */
7
+ const node_stack = [];
8
+
9
+ /**
10
+ * @template T
11
+ * @param {QuadTreeDatum<T>[]} result
12
+ * @param {number} result_offset
13
+ * @param {QuadTreeNode<T>} tree
14
+ * @param {number} x
15
+ * @param {number} y
16
+ * @param {number} radius
17
+ * @returns {number}
18
+ */
19
+ export function qt_collect_by_circle(
20
+ result, result_offset,
21
+ tree,
22
+ x, y, radius
23
+ ) {
24
+ let result_cursor = result_offset;
25
+
26
+ let stack_pointer = 0;
27
+
28
+ const r2 = radius * radius;
29
+
30
+ node_stack[stack_pointer] = tree;
31
+ stack_pointer++;
32
+
33
+ while (stack_pointer > 0) {
34
+
35
+ --stack_pointer;
36
+ const node = node_stack[stack_pointer];
37
+
38
+ const d2 = aabb2_sqrDistanceToPoint(node.x0, node.y0, node.x1, node.y1, x, y);
39
+
40
+ if (d2 > r2) {
41
+ // not a match
42
+ continue;
43
+ }
44
+
45
+ const data = node.data;
46
+ const data_count = data.length;
47
+
48
+ for (let i = 0; i < data_count; i++) {
49
+ const datum = data[i];
50
+
51
+ const d2_to_datum = aabb2_sqrDistanceToPoint(datum.x0, datum.y0, datum.x1, datum.y1, x, y);
52
+
53
+ if (d2_to_datum <= r2) {
54
+ result[result_cursor++] = datum;
55
+ }
56
+ }
57
+
58
+ if (node.isSplit()) {
59
+ node_stack[stack_pointer++] = node.topLeft;
60
+ node_stack[stack_pointer++] = node.bottomLeft;
61
+ node_stack[stack_pointer++] = node.topRight;
62
+ node_stack[stack_pointer++] = node.bottomRight;
63
+ }
64
+ }
65
+
66
+ return result_cursor - result_offset;
67
+ }
@@ -1,5 +1,6 @@
1
1
  import Signal from "../events/signal/Signal";
2
2
  import {Matrix4, Quaternion as ThreeQuaternion} from "three";
3
+ import Vector3 from "./Vector3";
3
4
 
4
5
  export default class Quaternion {
5
6
  public x: number
@@ -7,7 +8,7 @@ export default class Quaternion {
7
8
  public z: number
8
9
  public w: number
9
10
 
10
- public get onChanged(): Signal;
11
+ readonly onChanged: Signal<number, number, number, number, number, number, number, number>;
11
12
 
12
13
  set(x: number, y: number, z: number, w: number): void
13
14
 
@@ -15,6 +16,10 @@ export default class Quaternion {
15
16
  copy(other: ThreeQuaternion): void
16
17
  copy(other: { x: number, y: number, z: number, w: number }): void
17
18
 
19
+ equals(other: { x: number, y: number, z: number, w: number }): boolean
20
+
21
+ normalize(): void
22
+
18
23
  __setThreeEuler(threeEuler: any): void
19
24
 
20
25
  __setFromEuler(x: number, y: number, z: number, order?: string): void
@@ -29,4 +34,14 @@ export default class Quaternion {
29
34
  toEulerAnglesXYZ(v3: { set(x: number, y: number, z: number): any }): void
30
35
 
31
36
  fromEulerAnglesXYZ(x: number, y: number, z: number): void
37
+
38
+ fromAxisAngle(axis: Vector3 | { x: number, y: number, z: number }, angle: number): void
39
+
40
+ computeTwistAngle(axis: Vector3): number
41
+
42
+ multiplyQuaternions(a: Quaternion, b: Quaternion): void
43
+
44
+ toJSON(): any
45
+
46
+ fromJSON(j: any): void
32
47
  }