@woosh/meep-engine 2.39.15 → 2.39.18

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 (29) hide show
  1. package/core/binary/int32_to_binary_string.js +18 -0
  2. package/core/cache/Cache.js +1 -1
  3. package/core/geom/3d/decompose_matrix_4_array.js +3 -1
  4. package/core/geom/3d/ray/ray3_array_apply_matrix4.js +15 -1
  5. package/editor/tools/v2/TransformControls.d.ts +15 -0
  6. package/editor/tools/v2/TransformControls.js +1782 -0
  7. package/editor/tools/v2/prototypeTransformControls.js +80 -0
  8. package/engine/asset/AssetManager.js +82 -23
  9. package/engine/ecs/parent/EntityNode.js +41 -13
  10. package/engine/ecs/terrain/ecs/Terrain.js +20 -21
  11. package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +8 -3
  12. package/engine/ecs/transform/Transform.d.ts +2 -0
  13. package/engine/ecs/transform/Transform.js +6 -0
  14. package/engine/ecs/transform-attachment/TransformAttachment.js +13 -0
  15. package/engine/ecs/transform-attachment/TransformAttachmentSystem.js +138 -16
  16. package/engine/graphics/FrameRunner.js +8 -2
  17. package/engine/graphics/ecs/mesh-v2/DrawMode.js +4 -0
  18. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +77 -0
  19. package/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +10 -0
  20. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +2 -30
  21. package/engine/graphics/ecs/mesh-v2/render/ShadedGeometryRendererContext.js +11 -0
  22. package/engine/graphics/ecs/mesh-v2/render/adapters/InstancedRendererAdapter.js +8 -32
  23. package/engine/graphics/ecs/mesh-v2/render/optimization/RuntimeDrawMethodOptimizer.js +6 -0
  24. package/engine/graphics/geometry/buffered/makeGeometryIndexed.js +23 -0
  25. package/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +16 -4
  26. package/engine/graphics/geometry/buffered/query/GeometryVisitor.js +8 -1
  27. package/engine/graphics/geometry/buffered/query/RaycastNearestHitComputingVisitor.js +14 -5
  28. package/engine/graphics/geometry/bvh/buffered/BinaryBVHFromBufferGeometry.js +56 -0
  29. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @see https://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary-in-javascript
3
+ * @example 1024 -> "00000000 00000000 00000100 00000000"
4
+ * @example -1 -> "11111111 11111111 11111111 11111111"
5
+ * @param {number} nMask
6
+ * @returns {string}
7
+ */
8
+ export function int32_to_binary_string(nMask) {
9
+ // nMask must be between -2147483648 and 2147483647
10
+ if (nMask > 2 ** 31 - 1)
11
+ throw "number too large. number shouldn't be > 2**31-1"; //added
12
+ if (nMask < -1 * (2 ** 31))
13
+ throw "number too far negative, number shouldn't be < 2**31" //added
14
+ for (var nFlag = 0, nShifted = nMask, sMask = ''; nFlag < 32;
15
+ nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1) ;
16
+ sMask = sMask.replace(/\B(?=(.{8})+(?!.))/g, " ") // added
17
+ return sMask;
18
+ }
@@ -5,7 +5,7 @@ import { returnOne, returnZero, strictEquals } from "../function/Functions.js";
5
5
  import { CacheElement } from "./CacheElement.js";
6
6
 
7
7
  /**
8
- *
8
+ * TODO validate hashes of held elements to keep them up to date. Keys are assumed to be immutable, but this assumption may be broken by users
9
9
  * @template Key, Value
10
10
  * @extends Map<Key,Value>
11
11
  */
@@ -26,7 +26,7 @@ export function decompose_matrix_4_array(m, position, rotation, scale) {
26
26
 
27
27
  const scale_z = hypot(m31, m32, m33);
28
28
 
29
- // extract rotation
29
+ // extract rotation matrix
30
30
  const is1 = 1 / scale_x;
31
31
  const is2 = 1 / scale_y;
32
32
  const is3 = 1 / scale_z;
@@ -43,6 +43,8 @@ export function decompose_matrix_4_array(m, position, rotation, scale) {
43
43
  const sm32 = m32 * is3;
44
44
  const sm33 = m33 * is3;
45
45
 
46
+ // TODO take care of cases where scale is 0
47
+
46
48
  // write out results
47
49
 
48
50
  position.set(
@@ -3,6 +3,7 @@
3
3
  * @param {number[]|ArrayLike<number>|Float32Array} output 6 component vector, [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
4
4
  * @param {number[]|ArrayLike<number>|Float32Array} input 6 component vector, [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
5
5
  * @param {number[]|ArrayLike<number>|Float32Array} m4 4x4 matrix
6
+ * @returns {boolean} false if matrix transformation is impossible, such as when scale of the matrix is 0
6
7
  */
7
8
  export function ray3_array_apply_matrix4(output, input, m4) {
8
9
  const origin_x = input[0];
@@ -14,7 +15,13 @@ export function ray3_array_apply_matrix4(output, input, m4) {
14
15
  const direction_z = input[5];
15
16
 
16
17
  // transform ray to local space (inlined for speed)
17
- const inv_w = 1 / (m4[3] * origin_x + m4[7] * origin_y + m4[11] * origin_z + m4[15]);
18
+ const det = m4[3] * origin_x + m4[7] * origin_y + m4[11] * origin_z + m4[15];
19
+
20
+ if (det === 0) {
21
+ return false;
22
+ }
23
+
24
+ const inv_w = 1 / det;
18
25
 
19
26
  const out_origin_x = (m4[0] * origin_x + m4[4] * origin_y + m4[8] * origin_z + m4[12]) * inv_w;
20
27
  const out_origin_y = (m4[1] * origin_x + m4[5] * origin_y + m4[9] * origin_z + m4[13]) * inv_w;
@@ -26,6 +33,11 @@ export function ray3_array_apply_matrix4(output, input, m4) {
26
33
 
27
34
  // normalize direction
28
35
  const out_direction_magnitude = Math.hypot(out_direction_x, out_direction_y, out_direction_z);
36
+
37
+ if (out_direction_magnitude === 0) {
38
+ return false;
39
+ }
40
+
29
41
  const out_direction_magnitude_inverse = 1 / out_direction_magnitude;
30
42
 
31
43
  const out_direction_normalized_x = out_direction_x * out_direction_magnitude_inverse;
@@ -39,4 +51,6 @@ export function ray3_array_apply_matrix4(output, input, m4) {
39
51
  output[3] = out_direction_normalized_x;
40
52
  output[4] = out_direction_normalized_y;
41
53
  output[5] = out_direction_normalized_z;
54
+
55
+ return true;
42
56
  }
@@ -0,0 +1,15 @@
1
+ import {OrthographicCamera, PerspectiveCamera} from "three";
2
+ import {EntityComponentDataset} from "../../../engine/ecs/EntityComponentDataset";
3
+ import {EntityNode} from "../../../engine/ecs/parent/EntityNode";
4
+
5
+ export class TransformControls extends EntityNode {
6
+ constructor(camera: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement)
7
+
8
+ build(ecd: EntityComponentDataset): void
9
+
10
+ destroy(): void
11
+
12
+ attach(entity: number): void
13
+
14
+ detach(): void
15
+ }