@woosh/meep-engine 2.47.3 → 2.47.10

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 (130) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -0
  2. package/build/bundle-worker-terrain.js +1 -0
  3. package/build/meep.cjs +1044 -933
  4. package/build/meep.min.js +1 -1
  5. package/build/meep.module.js +1044 -933
  6. package/package.json +2 -2
  7. package/src/core/binary/BitSet.spec.js +3 -3
  8. package/src/core/bvh2/BinaryNode.js +12 -10
  9. package/src/core/bvh2/aabb3/AABB3.js +30 -31
  10. package/src/core/bvh2/binary/2/BinaryUint32BVH.js +1 -1
  11. package/src/core/bvh2/binary/BinaryBVH.js +1 -1
  12. package/src/core/bvh2/binary/RayLeafIntersectionVisitor.js +1 -1
  13. package/src/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +1 -1
  14. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +2 -2
  15. package/src/core/bvh2/bvh3/query/BVHQueryIntersectsFrustum.js +1 -1
  16. package/src/core/bvh2/bvh3/query/BVHQueryIntersectsRay.js +1 -1
  17. package/src/core/bvh2/bvh3/query/bvh_collect_user_data.js +10 -8
  18. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.js +14 -22
  19. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.js +13 -15
  20. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.js +14 -21
  21. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point.js +16 -24
  22. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_frustum.js +23 -26
  23. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +10 -11
  24. package/src/core/bvh2/transform/BottomUpOptimizingRebuilder.js +2 -2
  25. package/src/core/bvh2/transform/tryRotateSingleNode.js +2 -2
  26. package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.js +1 -1
  27. package/src/core/bvh2/traversal/queryBinaryNode_FrustumIntersections.js +1 -1
  28. package/src/core/collection/SCRATCH_UINT32_TRAVERSAL_STACK.js +13 -0
  29. package/src/core/color/Color.d.ts +2 -1
  30. package/src/core/color/Color.js +30 -5
  31. package/src/core/color/ColorUtils.js +7 -5
  32. package/src/core/color/parseHex.js +11 -3
  33. package/src/core/color/rgb2hex.js +1 -1
  34. package/src/core/geom/3d/SurfacePoint3.d.ts +7 -0
  35. package/src/core/geom/3d/SurfacePoint3.js +56 -1
  36. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_array_combine.js +2 -2
  37. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_array_contains_point.js +1 -1
  38. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_array_intersects_frustum_degree.js +2 -2
  39. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_combined_surface_area.js +2 -2
  40. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_max.js +1 -1
  41. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_max.spec.js +8 -0
  42. package/src/core/geom/3d/aabb/{computeAABB3PlaneSide.js → aabb3_compute_plane_side.js} +1 -1
  43. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_detailed_volume_intersection.js +7 -7
  44. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_from_v3_array.js +4 -4
  45. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_from_v3_array_transformed.js +2 -2
  46. package/src/core/{bvh2/aabb3/aabb3_intersect_aabb3.js → geom/3d/aabb/aabb3_intersects_aabb3.js} +2 -2
  47. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_intersects_frustum_array.js +2 -2
  48. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_intersects_frustum_degree.js +4 -4
  49. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_intersects_line_segment.js +1 -1
  50. package/src/core/geom/3d/aabb/aabb3_intersects_ray.js +87 -0
  51. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_intersects_ray.spec.js +1 -1
  52. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_intersects_ray_branchless.js +2 -2
  53. package/src/core/{bvh2/aabb3/aabb3_intersect_ray_slab.js → geom/3d/aabb/aabb3_intersects_ray_slab.js} +35 -17
  54. package/src/core/geom/3d/aabb/aabb3_matrix4_project_by_corners.js +5 -1
  55. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_nearest_point_on_surface.js +2 -2
  56. package/src/core/geom/3d/aabb/aabb3_raycast.js +103 -0
  57. package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_signed_distance_sqr_to_point.js +1 -1
  58. package/src/core/geom/3d/aabb/computeBoundingBoxFromVertexData.js +4 -12
  59. package/src/core/geom/3d/aabb/compute_aabb_from_points.js +8 -1
  60. package/src/core/geom/3d/shape/UnitCubeShape3D.js +1 -1
  61. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +4 -7
  62. package/src/core/model/node-graph/DataType.d.ts +4 -0
  63. package/src/core/model/node-graph/node/NodeDescription.d.ts +11 -1
  64. package/src/core/model/node-graph/node/NodeRegistry.spec.js +47 -1
  65. package/src/core/model/node-graph/node/Port.d.ts +3 -0
  66. package/src/core/model/node-graph/node/Port.js +7 -3
  67. package/src/core/model/node-graph/node/Port.spec.js +44 -0
  68. package/src/core/model/node-graph/node/PortDirection.d.ts +5 -0
  69. package/src/engine/asset/Asset.js +1 -1
  70. package/src/engine/asset/AssetLoadState.js +10 -0
  71. package/src/engine/asset/AssetManager.js +164 -228
  72. package/src/engine/asset/PendingAsset.js +61 -0
  73. package/src/engine/asset/loaders/GLTFAssetLoader.js +1 -1
  74. package/src/engine/ecs/foliage/InstancedFoliage.js +1 -1
  75. package/src/engine/ecs/storage/BinaryBufferSerializer.js +13 -1
  76. package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerializer.js +11 -4
  77. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +54 -0
  78. package/src/engine/ecs/systems/RenderSystem.js +1 -33
  79. package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.js +2 -4
  80. package/src/engine/ecs/terrain/tiles/TileBuildWorker.js +6 -1
  81. package/src/engine/graphics/GraphicsEngine.js +5 -1
  82. package/src/engine/graphics/ecs/decal/v2/Decal.js +44 -2
  83. package/src/engine/graphics/ecs/decal/v2/DecalSerializationAdapter.js +31 -0
  84. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +16 -5
  85. package/src/engine/graphics/ecs/decal/v2/prototypeDecalSystem.js +88 -56
  86. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +5 -1
  87. package/src/engine/graphics/geometry/buffered/query/ClippingPlaneContainmentComputingVisitor.js +2 -2
  88. package/src/engine/graphics/geometry/buffered/query/RaycastNearestHitComputingVisitor.js +1 -1
  89. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.js +3 -2
  90. package/src/engine/graphics/geometry/skining/computeSkinnedMeshBoundingVolumes.js +3 -2
  91. package/src/engine/graphics/micron/format/MicronGeometry.js +1 -1
  92. package/src/engine/graphics/micron/format/validate_patch_bounds.js +1 -1
  93. package/src/engine/graphics/micron/render/refinement/ActivePatchList.js +1 -1
  94. package/src/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +16 -16
  95. package/src/engine/graphics/render/forward_plus/LightManager.js +3 -0
  96. package/src/engine/graphics/render/forward_plus/LightManager.spec.js +5 -5
  97. package/src/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_APPLY_DECALS.js +4 -0
  98. package/src/engine/graphics/render/forward_plus/model/Decal.js +10 -2
  99. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +2 -2
  100. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +18 -16
  101. package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.js +2 -0
  102. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +26 -13
  103. package/src/engine/graphics/sh3/path_tracer/GeometryBVHBatched.js +8 -2
  104. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +3 -3
  105. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +18 -15
  106. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.js +1 -1
  107. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min.js +1 -1
  108. package/src/engine/graphics/three/three_computeObjectBoundingBox.js +56 -0
  109. package/src/engine/input/devices/{InputDeviceButton.d.ts → InputDeviceSwitch.d.ts} +1 -1
  110. package/src/engine/input/devices/{InputDeviceButton.js → InputDeviceSwitch.js} +1 -1
  111. package/src/engine/input/devices/KeyboardDevice.d.ts +2 -2
  112. package/src/engine/input/devices/KeyboardDevice.js +58 -40
  113. package/src/engine/input/devices/PointerDevice.js +224 -179
  114. package/src/core/bvh2/aabb3/aabb3_intersects_ray.js +0 -97
  115. package/src/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane_max.spec.js +0 -8
  116. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_array_intersects_frustum_array.js +0 -0
  117. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_array_intersects_ray.js +0 -0
  118. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_array_intersects_ray_array.js +0 -0
  119. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_box_surface_area_2.js +0 -0
  120. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_compute_half_surface_area.js +0 -0
  121. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_compute_surface_area.js +0 -0
  122. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_corner_edge_mapping.js +0 -0
  123. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_corner_edge_mapping.spec.js +0 -0
  124. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_edge_corner_mapping.js +0 -0
  125. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_edge_corner_mapping.spec.js +0 -0
  126. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_edge_plane_mapping.js +0 -0
  127. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_expand_array.js +0 -0
  128. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_intersects_ray_fast.js +0 -0
  129. /package/src/core/{bvh2/aabb3 → geom/3d/aabb}/aabb3_score_boxes_SAH.js +0 -0
  130. /package/src/core/{bvh2/aabb3/aabb_score_boxes_SAH_delta.js → geom/3d/aabb/aabb3_score_boxes_SAH_delta.js} +0 -0
@@ -321,117 +321,166 @@ export function readPositionFromMouseEvent(result, event, source = event.target)
321
321
  result.set(x, y);
322
322
  }
323
323
 
324
- /**
325
- *
326
- * @param {EventTarget} domElement html element
327
- * @constructor
328
- */
329
- function PointerDevice(domElement) {
330
- assert.notEqual(domElement, undefined, "domElement is undefined");
324
+ export class PointerDevice {
331
325
 
332
326
  /**
333
- * @private
334
- * @type {boolean}
327
+ * @readonly
328
+ * @type {Vector2}
335
329
  */
336
- this.isRunning = false;
330
+ position = new Vector2();
337
331
 
338
332
  /**
339
- *
340
- * @type {Element}
341
- * @private
333
+ * @readonly
334
+ * @type {Vector2}
335
+ */
336
+ #anchor_touch_last = new Vector2();
337
+
338
+ #globalUp = new Signal();
339
+
340
+ #touchStart = new Signal();
341
+ #touchEnd = new Signal();
342
+ #touchMove = new Signal();
343
+
344
+ /**
345
+ * @readonly
342
346
  */
343
- this.__target = null;
347
+ on = {
348
+ down: new Signal(),
349
+ up: new Signal(),
350
+ move: new Signal(),
351
+ tap: new Signal(),
352
+ drag: new Signal(),
353
+ dragStart: new Signal(),
354
+ dragEnd: new Signal(),
355
+ wheel: new Signal(),
356
+ pinch: new Signal(),
357
+ pinchStart: new Signal(),
358
+ pinchEnd: new Signal(),
359
+ };
344
360
 
345
361
  /**
346
362
  *
347
- * @type {EventTarget}
363
+ * @type {Element|null}
364
+ * @private
348
365
  */
349
- this.domElement = domElement;
366
+ #target = null;
350
367
 
351
- const position = this.position = new Vector2();
368
+ /**
369
+ * @private
370
+ * @type {boolean}
371
+ */
372
+ isRunning = false;
352
373
 
353
374
  /**
354
375
  *
355
- * @param {MouseEvent} event
376
+ * @param {EventTarget} domElement html element
377
+ * @constructor
356
378
  */
357
- this.eventHandlerMouseMove = (event) => {
358
- event.preventDefault();
379
+ constructor(domElement) {
380
+ assert.defined(domElement, "domElement");
359
381
 
360
- this.__target = event.target;
361
382
 
362
- this.readPointerPositionFromEvent(position, event);
383
+ /**
384
+ *
385
+ * @type {EventTarget}
386
+ */
387
+ this.domElement = domElement;
363
388
 
364
- this.on.move.send3(position, event, new Vector2(event.movementX, event.movementY));
365
- };
366
- this.eventHandlerMouseUp = (event) => {
367
- this.readPointerPositionFromEvent(position, event);
368
- this.on.up.send2(position, event);
369
- };
370
- this.eventHandlerMouseDown = (event) => {
371
- this.readPointerPositionFromEvent(position, event);
372
- this.on.down.send2(position, event);
373
- };
374
389
 
375
- const touchStart = new Signal();
376
- const touchEnd = new Signal();
377
- const touchMove = new Signal();
390
+ this.#touchStart.add((param0, param1, param2) => {
391
+ this.on.down.send3(param0, param1, param2);
392
+ });
378
393
 
379
- touchStart.add((param0, param1, param2) => {
380
- this.on.down.send3(param0, param1, param2);
381
- });
394
+ this.#touchEnd.add((param0, param1, param2) => {
395
+ this.on.up.send3(param0, param1, param2);
396
+ });
397
+ this.#touchMove.add((param0, param1, param2) => {
398
+ this.on.move.send3(param0, param1, param2);
399
+ });
382
400
 
383
- touchEnd.add((param0, param1, param2) => {
384
- this.on.up.send3(param0, param1, param2);
385
- });
386
- touchMove.add((param0, param1, param2) => {
387
- this.on.move.send3(param0, param1, param2);
388
- });
389
401
 
390
- const anchor_touch_last = new Vector2();
402
+ //constructed events
403
+ observeTap(this.on.up, this.on.down, this.on.move, 10, this.on.tap);
404
+ observeDrag(this.#globalUp, this.on.down, this.on.move, this.on.dragStart, this.on.dragEnd, this.on.drag);
405
+ observePinch({
406
+ touchStart: this.#touchStart,
407
+ touchEnd: this.#touchEnd,
408
+ touchMove: this.#touchMove,
409
+ pinch: this.on.pinch,
410
+ pinchStart: this.on.pinchStart,
411
+ pinchEnd: this.on.pinchEnd,
412
+ device: this
413
+ });
414
+ }
391
415
 
392
- this.eventHandlerTouchStart = function (event) {
393
- getTouchCenter(event.touches, position);
394
- touchStart.send2(position, event);
416
+ /**
417
+ *
418
+ * @param {MouseEvent} event
419
+ */
420
+ #eventHandlerMouseDown = (event) => {
421
+ this.readPointerPositionFromEvent(this.position, event);
422
+ this.on.down.send2(this.position, event);
423
+ }
395
424
 
396
- anchor_touch_last.copy(position);
397
- };
425
+ /**
426
+ *
427
+ * @param {TouchEvent} event
428
+ */
429
+ #eventHandlerGlobalTouchEnd = (event) => {
430
+ getTouchCenter(event.touches, this.position);
431
+ this.#globalUp.send2(this.position, event);
432
+ }
398
433
 
399
- this.eventHandlerTouchEnd = function (event) {
400
- getTouchCenter(event.touches, position);
401
- touchEnd.send2(position, event);
402
- };
434
+ /**
435
+ *
436
+ * @param {MouseEvent} event
437
+ */
438
+ #eventHandlerMouseUp = (event) => {
439
+ this.readPointerPositionFromEvent(this.position, event);
440
+ this.on.up.send2(this.position, event);
441
+ }
403
442
 
404
- this.eventHandlerTouchMove = function (event) {
443
+ /**
444
+ *
445
+ * @param {MouseEvent} event
446
+ */
447
+ #eventHandlerGlobalMouseUp = (event) => {
448
+ this.readPointerPositionFromEvent(this.position, event);
449
+ this.#globalUp.send2(this.position, event);
450
+ }
451
+
452
+ /**
453
+ *
454
+ * @param {TouchEvent} event
455
+ */
456
+ #eventHandlerTouchEnd = (event) => {
457
+ getTouchCenter(event.touches, this.position);
458
+ this.#touchEnd.send2(this.position, event);
459
+ }
460
+
461
+ /**
462
+ *
463
+ * @param {TouchEvent} event
464
+ */
465
+ #eventHandlerTouchMove = (event) => {
405
466
  event.preventDefault();
406
467
 
407
468
  getTouchCenter(event.touches, position);
408
469
 
409
470
  const delta = new Vector2();
410
471
 
411
- delta.subVectors(position, anchor_touch_last);
472
+ delta.subVectors(this.position, this.#anchor_touch_last);
412
473
 
413
- touchMove.send3(position, event, delta);
414
-
415
- anchor_touch_last.copy(position);
416
- };
417
-
418
- const globalUp = new Signal();
419
-
420
- this.eventHandlerGlobalTouchEnd = (event) => {
421
- getTouchCenter(event.touches, position);
422
- globalUp.send2(position, event);
423
- };
474
+ this.#touchMove.send3(this.position, event, delta);
424
475
 
425
- this.eventHandlerGlobalMouseUp = (event) => {
426
- this.readPointerPositionFromEvent(position, event);
427
- globalUp.send2(position, event);
428
- };
476
+ this.#anchor_touch_last.copy(this.position);
477
+ }
429
478
 
430
479
  /**
431
480
  *
432
481
  * @param {WheelEvent} event
433
482
  */
434
- this.eventHandlerWheel = (event) => {
483
+ #eventHandlerWheel = (event) => {
435
484
  event.preventDefault();
436
485
 
437
486
  //deltas have inconsistent values across browsers, so we will normalize them
@@ -442,147 +491,143 @@ function PointerDevice(domElement) {
442
491
 
443
492
  const delta = new Vector3(x, y, z);
444
493
 
445
- this.readPointerPositionFromEvent(position, event);
494
+ this.readPointerPositionFromEvent(this.position, event);
446
495
 
447
- this.on.wheel.send3(delta, position, event);
448
- };
496
+ this.on.wheel.send3(delta, this.position, event);
497
+ }
449
498
 
499
+ /**
500
+ *
501
+ * @param {TouchEvent} event
502
+ */
503
+ #eventHandlerTouchStart = (event) => {
504
+ getTouchCenter(event.touches, this.position);
505
+ this.#touchStart.send2(this.position, event);
450
506
 
451
- this.on = {
452
- down: new Signal(),
453
- up: new Signal(),
454
- move: new Signal(),
455
- tap: new Signal(),
456
- drag: new Signal(),
457
- dragStart: new Signal(),
458
- dragEnd: new Signal(),
459
- wheel: new Signal(),
460
- pinch: new Signal(),
461
- pinchStart: new Signal(),
462
- pinchEnd: new Signal(),
463
- };
507
+ this.#anchor_touch_last.copy(this.position);
508
+ }
464
509
 
465
- //constructed events
466
- observeTap(this.on.up, this.on.down, this.on.move, 10, this.on.tap);
467
- observeDrag(globalUp, this.on.down, this.on.move, this.on.dragStart, this.on.dragEnd, this.on.drag);
468
- observePinch({
469
- touchStart: touchStart,
470
- touchEnd: touchEnd,
471
- touchMove: touchMove,
472
- pinch: this.on.pinch,
473
- pinchStart: this.on.pinchStart,
474
- pinchEnd: this.on.pinchEnd
475
- });
476
- }
510
+ /**
511
+ *
512
+ * @param {MouseEvent} event
513
+ */
514
+ #eventHandlerMouseMove = (event) => {
515
+ event.preventDefault();
477
516
 
478
- /**
479
- *
480
- * @return {Element}
481
- */
482
- PointerDevice.prototype.getTargetElement = function () {
483
- return this.__target;
484
- };
517
+ this.#target = event.target;
485
518
 
486
- /**
487
- *
488
- * @param {Element} el
489
- */
490
- PointerDevice.prototype.setTargetElement = function (el) {
491
- assert.defined(el, 'el');
492
- assert.notNull(el, 'el');
519
+ this.readPointerPositionFromEvent(this.position, event);
493
520
 
494
- if (this.__target === el) {
495
- // no change
496
- return;
521
+ this.on.move.send3(this.position, event, new Vector2(event.movementX, event.movementY));
497
522
  }
498
523
 
499
- let was_running = this.isRunning;
500
-
501
- if (was_running) {
502
- // disconnect from previous target
503
- this.stop();
524
+ /**
525
+ *
526
+ * @return {Element}
527
+ */
528
+ getTargetElement() {
529
+ return this.#target;
504
530
  }
505
531
 
506
- this.__target = el;
532
+ /**
533
+ *
534
+ * @param {Element} el
535
+ */
536
+ setTargetElement(el) {
537
+ assert.defined(el, 'el');
538
+ assert.notNull(el, 'el');
507
539
 
508
- if (was_running) {
509
- // restart to maintain original state
510
- this.start();
511
- }
512
- }
540
+ if (this.#target === el) {
541
+ // no change
542
+ return;
543
+ }
513
544
 
514
- /**
515
- *
516
- * @param {Vector2} result
517
- * @param {MouseEvent|TouchEvent} event
518
- */
519
- PointerDevice.prototype.readPointerPositionFromEvent = function (result, event) {
520
- readPositionFromMouseEvent(result, event, this.domElement);
521
- };
545
+ let was_running = this.isRunning;
546
+
547
+ if (was_running) {
548
+ // disconnect from previous target
549
+ this.stop();
550
+ }
551
+
552
+ this.#target = el;
522
553
 
523
- PointerDevice.prototype.start = function () {
524
- if (this.isRunning) {
525
- //already running
526
- return;
554
+ if (was_running) {
555
+ // restart to maintain original state
556
+ this.start();
557
+ }
527
558
  }
528
559
 
529
- this.isRunning = true;
560
+ /**
561
+ *
562
+ * @param {Vector2} result
563
+ * @param {MouseEvent|TouchEvent} event
564
+ */
565
+ readPointerPositionFromEvent(result, event) {
566
+ readPositionFromMouseEvent(result, event, this.domElement);
567
+ }
530
568
 
531
- // console.warn("PointerDevice.start");
569
+ start() {
570
+ if (this.isRunning) {
571
+ //already running
572
+ return;
573
+ }
532
574
 
533
- const domElement = this.domElement;
575
+ this.isRunning = true;
534
576
 
535
- assert.notEqual(domElement, null, "domElement is null");
536
- assert.notEqual(domElement, undefined, "domElement is undefined");
577
+ // console.warn("PointerDevice.start");
537
578
 
538
- domElement.addEventListener(MouseEvents.Move, this.eventHandlerMouseMove);
539
- domElement.addEventListener(MouseEvents.Up, this.eventHandlerMouseUp);
540
- domElement.addEventListener(MouseEvents.Down, this.eventHandlerMouseDown);
579
+ const domElement = this.domElement;
541
580
 
542
- domElement.addEventListener(TouchEvents.Start, this.eventHandlerTouchStart);
543
- domElement.addEventListener(TouchEvents.End, this.eventHandlerTouchEnd);
544
- domElement.addEventListener(TouchEvents.Move, this.eventHandlerTouchMove);
581
+ assert.notEqual(domElement, null, "domElement is null");
582
+ assert.notEqual(domElement, undefined, "domElement is undefined");
545
583
 
546
- window.addEventListener(MouseEvents.Up, this.eventHandlerGlobalMouseUp);
547
- window.addEventListener(TouchEvents.End, this.eventHandlerGlobalTouchEnd);
584
+ domElement.addEventListener(MouseEvents.Move, this.#eventHandlerMouseMove);
585
+ domElement.addEventListener(MouseEvents.Up, this.#eventHandlerMouseUp);
586
+ domElement.addEventListener(MouseEvents.Down, this.#eventHandlerMouseDown);
548
587
 
549
- /*
550
- In some cases wheel event gets registered as "passive" by default. This interferes with "preventDefault()"
551
- see https://www.chromestatus.com/features/6662647093133312
552
- */
553
- domElement.addEventListener(MouseEvents.Wheel, this.eventHandlerWheel, { passive: false });
588
+ domElement.addEventListener(TouchEvents.Start, this.#eventHandlerTouchStart);
589
+ domElement.addEventListener(TouchEvents.End, this.#eventHandlerTouchEnd);
590
+ domElement.addEventListener(TouchEvents.Move, this.#eventHandlerTouchMove);
554
591
 
592
+ window.addEventListener(MouseEvents.Up, this.#eventHandlerGlobalMouseUp);
593
+ window.addEventListener(TouchEvents.End, this.#eventHandlerGlobalTouchEnd);
555
594
 
556
- domElement.addEventListener("contextmenu", supressContextMenu);
557
- };
595
+ /*
596
+ In some cases wheel event gets registered as "passive" by default. This interferes with "preventDefault()"
597
+ see https://www.chromestatus.com/features/6662647093133312
598
+ */
599
+ domElement.addEventListener(MouseEvents.Wheel, this.#eventHandlerWheel, { passive: false });
558
600
 
559
- PointerDevice.prototype.stop = function () {
560
- if (!this.isRunning) {
561
- //not running
562
- return;
601
+
602
+ domElement.addEventListener("contextmenu", supressContextMenu);
563
603
  }
564
604
 
565
- this.isRunning = false;
605
+ stop() {
606
+ if (!this.isRunning) {
607
+ //not running
608
+ return;
609
+ }
566
610
 
567
- // console.warn("PointerDevice.stop");
611
+ this.isRunning = false;
568
612
 
569
- const domElement = this.domElement;
613
+ // console.warn("PointerDevice.stop");
570
614
 
571
- domElement.removeEventListener(MouseEvents.Move, this.eventHandlerMouseMove);
572
- domElement.removeEventListener(MouseEvents.Up, this.eventHandlerMouseUp);
573
- domElement.removeEventListener(MouseEvents.Down, this.eventHandlerMouseDown);
615
+ const domElement = this.domElement;
574
616
 
575
- domElement.removeEventListener(TouchEvents.Start, this.eventHandlerTouchStart);
576
- domElement.removeEventListener(TouchEvents.End, this.eventHandlerTouchEnd);
577
- domElement.removeEventListener(TouchEvents.Move, this.eventHandlerTouchMove);
617
+ domElement.removeEventListener(MouseEvents.Move, this.#eventHandlerMouseMove);
618
+ domElement.removeEventListener(MouseEvents.Up, this.#eventHandlerMouseUp);
619
+ domElement.removeEventListener(MouseEvents.Down, this.#eventHandlerMouseDown);
578
620
 
579
- window.removeEventListener(MouseEvents.Up, this.eventHandlerGlobalMouseUp);
580
- window.removeEventListener(TouchEvents.End, this.eventHandlerGlobalTouchEnd);
621
+ domElement.removeEventListener(TouchEvents.Start, this.#eventHandlerTouchStart);
622
+ domElement.removeEventListener(TouchEvents.End, this.#eventHandlerTouchEnd);
623
+ domElement.removeEventListener(TouchEvents.Move, this.#eventHandlerTouchMove);
581
624
 
582
- domElement.removeEventListener(MouseEvents.Wheel, this.eventHandlerWheel);
625
+ window.removeEventListener(MouseEvents.Up, this.#eventHandlerGlobalMouseUp);
626
+ window.removeEventListener(TouchEvents.End, this.#eventHandlerGlobalTouchEnd);
583
627
 
628
+ domElement.removeEventListener(MouseEvents.Wheel, this.#eventHandlerWheel);
584
629
 
585
- domElement.removeEventListener("contextmenu", supressContextMenu);
586
- };
587
630
 
588
- export { PointerDevice };
631
+ domElement.removeEventListener("contextmenu", supressContextMenu);
632
+ }
633
+ }
@@ -1,97 +0,0 @@
1
- import { fabsf } from "../../math/fabsf.js";
2
-
3
-
4
- /**
5
- * NOTES:
6
- * https://web.archive.org/web/20090803054252/http://tog.acm.org/resources/GraphicsGems/gems/RayBox.c
7
- * https://tavianator.com/fast-branchless-raybounding-box-intersections/
8
- * https://gamedev.stackexchange.com/questions/18436/most-efficient-aabb-vs-ray-collision-algorithms
9
- *
10
- * @param {number} x0
11
- * @param {number} y0
12
- * @param {number} z0
13
- * @param {number} x1
14
- * @param {number} y1
15
- * @param {number} z1
16
- * @param {number} oX
17
- * @param {number} oY
18
- * @param {number} oZ
19
- * @param {number} dirX
20
- * @param {number} dirY
21
- * @param {number} dirZ
22
- * @returns {boolean}
23
- */
24
- export function aabb3_intersects_ray(
25
- x0, y0, z0,
26
- x1, y1, z1,
27
- oX, oY, oZ,
28
- dirX, dirY, dirZ
29
- ) {
30
-
31
- // Z Projection
32
- const boxExtentsX = (x1 - x0) * 0.5;
33
-
34
- const centerX = x0 + boxExtentsX;
35
-
36
- const diffX = oX - centerX;
37
-
38
-
39
- if (diffX * dirX >= 0.0 && fabsf(diffX) > boxExtentsX) {
40
- return false;
41
- }
42
-
43
- // Y projection
44
- const boxExtentsY = (y1 - y0) * 0.5;
45
-
46
- const centerY = y0 + boxExtentsY;
47
-
48
- const diffY = oY - centerY;
49
-
50
-
51
- if (diffY * dirY >= 0.0 && fabsf(diffY) > boxExtentsY) {
52
- return false;
53
- }
54
-
55
- // Z projection
56
- const boxExtentsZ = (z1 - z0) * 0.5;
57
-
58
- const centerZ = z0 + boxExtentsZ;
59
-
60
- const diffZ = oZ - centerZ;
61
-
62
-
63
- if (diffZ * dirZ >= 0.0 && fabsf(diffZ) > boxExtentsZ) {
64
- return false;
65
- }
66
-
67
- //Dir.y = 0.5f * (segment.mP1.y - segment.mP0.y);
68
- //BoxExtents.y = aabb.GetExtents(1);
69
- //Diff.y = (0.5f * (segment.mP1.y + segment.mP0.y)) - aabb.GetCenter(1);
70
- //b = fabsf(Dir.y);
71
- //if(fabsf(Diff.y)>BoxExtents.y + b) return false;
72
-
73
- const b = fabsf(dirY);
74
- const c = fabsf(dirZ);
75
- const a = fabsf(dirX);
76
-
77
- const f0 = dirY * diffZ - dirZ * diffY;
78
-
79
- if (fabsf(f0) > boxExtentsY * c + boxExtentsZ * b) {
80
- return false;
81
- }
82
-
83
- const f1 = dirZ * diffX - dirX * diffZ;
84
-
85
- if (fabsf(f1) > boxExtentsX * c + boxExtentsZ * a) {
86
- return false;
87
- }
88
-
89
- const f2 = dirX * diffY - dirY * diffX;
90
-
91
- if (fabsf(f2) > boxExtentsX * b + boxExtentsY * a) {
92
- return false;
93
- }
94
-
95
- return true;
96
- }
97
-
@@ -1,8 +0,0 @@
1
- import { aabb3_computeDistanceAbovePlane_max } from "./aabb3_compute_distance_above_plane_max.js";
2
-
3
- test('cube above orthographic plane',()=>{
4
- expect(aabb3_computeDistanceAbovePlane_max(
5
- 0,1,0,-1,
6
- -1,3,-1,1,5,1
7
- )).toBe(4);
8
- });