@woosh/meep-engine 3.41.0 → 3.42.0

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 (344) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/selection/editor_pick.d.ts.map +1 -1
  4. package/editor/selection/editor_pick.js +2 -1
  5. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  6. package/editor/tools/TransformToolV2.js +7 -1
  7. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  8. package/editor/tools/engine/ToolEngine.js +10 -0
  9. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  10. package/editor/tools/v2/TransformControls.js +7 -20
  11. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
  12. package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
  13. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  14. package/editor/view/ecs/EntityEditor.js +3 -1
  15. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  16. package/editor/view/node-graph/NodeGraphView.js +28 -12
  17. package/package.json +1 -1
  18. package/samples/engine/first-scene/index.html +4 -1
  19. package/samples/engine/first-scene/main.js +14 -9
  20. package/src/core/binary/utf8/utf8_decode.js +3 -3
  21. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
  22. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
  23. package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
  24. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
  25. package/src/core/collection/RingBuffer.d.ts.map +1 -1
  26. package/src/core/collection/RingBuffer.js +4 -0
  27. package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
  28. package/src/core/collection/array/array_contains_duplicates.js +2 -1
  29. package/src/core/collection/array/array_copy.d.ts.map +1 -1
  30. package/src/core/collection/array/array_copy.js +23 -0
  31. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
  32. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
  33. package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
  34. package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
  35. package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
  36. package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
  37. package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
  38. package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
  39. package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
  40. package/src/core/collection/array/weightedRandomFromArray.js +9 -1
  41. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  42. package/src/core/collection/heap/BinaryHeap.js +4 -0
  43. package/src/core/collection/list/List.d.ts.map +1 -1
  44. package/src/core/collection/list/List.js +4 -2
  45. package/src/core/collection/set/ArraySet.js +1 -1
  46. package/src/core/collection/set/HashSet.d.ts +1 -1
  47. package/src/core/collection/set/HashSet.d.ts.map +1 -1
  48. package/src/core/collection/set/HashSet.js +4 -2
  49. package/src/core/debug/matchers/IsEqual.js +1 -1
  50. package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
  51. package/src/core/debug/matchers/IsIterableContaining.js +61 -74
  52. package/src/core/events/signal/SignalBinding.js +101 -101
  53. package/src/core/function/extractFunctionBody.js +13 -13
  54. package/src/core/function/objectsEqual.d.ts.map +1 -1
  55. package/src/core/function/objectsEqual.js +15 -14
  56. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
  57. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
  58. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
  59. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
  60. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
  61. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
  62. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
  63. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  64. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
  65. package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
  66. package/src/core/math/noise/curl_noise_3dt.js +20 -10
  67. package/src/core/math/noise/sdnoise.d.ts +16 -5
  68. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  69. package/src/core/math/noise/sdnoise.js +43 -9
  70. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
  71. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
  72. package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
  73. package/src/engine/Engine.d.ts.map +1 -1
  74. package/src/engine/Engine.js +6 -2
  75. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
  76. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  77. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
  78. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  79. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
  80. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
  81. package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
  82. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  83. package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
  84. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
  85. package/src/engine/control/first-person/abilities/Slide.js +1 -0
  86. package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
  87. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
  88. package/src/engine/control/first-person/abilities/WallRun.js +13 -1
  89. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
  90. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
  91. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
  92. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
  93. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
  94. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
  95. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  96. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
  97. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  98. package/src/engine/ecs/EntityManager.js +18 -15
  99. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
  100. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
  101. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
  102. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
  103. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  104. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
  105. package/src/engine/ecs/parent/EntityNode.js +3 -3
  106. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  107. package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
  108. package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
  109. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
  110. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
  111. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
  112. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
  113. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
  114. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  115. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +8 -0
  116. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  117. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
  118. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  119. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
  120. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
  121. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
  122. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
  123. package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
  124. package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
  125. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  126. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
  127. package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
  128. package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
  129. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
  130. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
  131. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
  132. package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
  133. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  134. package/src/engine/graphics/ecs/water/Water.js +17 -0
  135. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  136. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
  137. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
  138. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
  139. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
  140. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
  141. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
  142. package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
  143. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
  144. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
  145. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
  146. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
  147. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
  148. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
  149. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
  150. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
  151. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
  152. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
  153. package/src/engine/graphics3/WaterSystem.d.ts +12 -3
  154. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  155. package/src/engine/graphics3/WaterSystem.js +78 -46
  156. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  157. package/src/engine/input/devices/PointerDevice.js +29 -4
  158. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
  159. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
  160. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
  161. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  162. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
  163. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
  164. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
  165. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
  166. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
  167. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
  168. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
  169. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
  170. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
  171. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
  172. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
  173. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
  174. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
  175. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
  176. package/src/engine/ui/DraggableAspect.d.ts +5 -1
  177. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  178. package/src/engine/ui/DraggableAspect.js +61 -4
  179. package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
  180. package/src/format/image/avif/heif/ItemProperty.js +1 -1
  181. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  182. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
  183. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
  184. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  185. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
  186. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  187. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
  188. package/src/shade/playground/water_refraction/README.md +10 -11
  189. package/src/shade/playground/water_refraction/main.js +9 -8
  190. package/src/shade/playground/water_refraction/world.js +1 -1
  191. package/src/shade/playground/water_surface/README.md +43 -0
  192. package/src/shade/playground/water_surface/index.html +30 -0
  193. package/src/shade/playground/water_surface/main.d.ts +2 -0
  194. package/src/shade/playground/water_surface/main.d.ts.map +1 -0
  195. package/src/shade/playground/water_surface/main.js +154 -0
  196. package/src/shade/playground/water_surface/world.d.ts +44 -0
  197. package/src/shade/playground/water_surface/world.d.ts.map +1 -0
  198. package/src/shade/playground/water_surface/world.js +160 -0
  199. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
  201. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  202. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  203. package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
  204. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
  205. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  206. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
  207. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
  208. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
  209. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
  210. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
  211. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  212. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
  213. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
  214. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  215. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
  216. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
  217. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
  218. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  219. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
  220. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  221. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
  222. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  223. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
  224. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  225. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
  226. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  227. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
  228. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
  229. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
  230. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
  231. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
  232. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
  233. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
  234. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  235. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
  236. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
  237. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  238. package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
  239. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
  240. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  241. package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
  242. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
  243. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
  244. package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
  245. package/src/shade/renderer/water/shader_water.d.ts +0 -1
  246. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  247. package/src/shade/renderer/water/shader_water.js +201 -72
  248. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
  249. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
  250. package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
  251. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
  252. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
  253. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
  254. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
  255. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
  256. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
  257. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
  258. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
  259. package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
  260. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
  261. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
  262. package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
  263. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
  264. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
  265. package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
  266. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
  267. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
  268. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
  269. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
  270. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
  271. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
  272. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
  273. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
  274. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
  275. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
  276. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
  277. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
  278. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
  279. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
  280. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
  281. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
  282. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
  283. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
  284. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
  285. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
  286. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
  287. package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
  288. package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
  289. package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
  290. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
  291. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
  292. package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
  293. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
  294. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
  295. package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
  296. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
  297. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
  298. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
  299. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
  300. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
  301. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
  302. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
  303. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
  304. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
  305. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
  306. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
  307. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
  308. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
  309. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
  310. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
  311. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
  312. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
  313. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
  314. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  315. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
  316. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  317. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
  318. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
  319. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
  320. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
  321. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
  322. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
  323. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
  324. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
  325. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
  326. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
  327. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
  328. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
  329. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
  330. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
  331. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
  332. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
  333. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
  334. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
  335. package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
  336. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
  337. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
  338. package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
  339. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
  340. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
  341. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
  342. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
  343. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
  344. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
@@ -1 +1 @@
1
- {"version":3,"file":"editor_pick.d.ts","sourceRoot":"","sources":["../../../editor/selection/editor_pick.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;GASG;AACH,qFANoB,UAAU,MAAM,CAAC,QAAE,MAAM,KAAG,OAAO,qDAG5C,MAAM,GACJ,MAAM,CA8ClB;AAED;;;;;;;;;;;;GAYG;AACH,4CAPW,MAAM,EAAE,uDAEC,UAAU,MAAM,CAAC,QAAE,MAAM,KAAG,OAAO,UAC5C,UAAU,MAAM,CAAC,GAAC,YAAY,eAC9B,MAAM,GACJ,MAAM,CA6BlB"}
1
+ {"version":3,"file":"editor_pick.d.ts","sourceRoot":"","sources":["../../../editor/selection/editor_pick.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;GASG;AACH,qFANoB,UAAU,MAAM,CAAC,QAAE,MAAM,KAAG,OAAO,qDAG5C,MAAM,GACJ,MAAM,CA+ClB;AAED;;;;;;;;;;;;GAYG;AACH,4CAPW,MAAM,EAAE,uDAEC,UAAU,MAAM,CAAC,QAAE,MAAM,KAAG,OAAO,UAC5C,UAAU,MAAM,CAAC,GAAC,YAAY,eAC9B,MAAM,GACJ,MAAM,CA6BlB"}
@@ -76,7 +76,8 @@ export function editor_pick_ray(dataset, read_bounds, origin, direction, max_dis
76
76
  0, max_distance
77
77
  );
78
78
 
79
- if (distance >= best_distance) {
79
+ // Include the finite segment endpoint while keeping the first equally near candidate.
80
+ if (distance === Infinity || distance > best_distance || (distance === best_distance && best_entity !== -1)) {
80
81
  return;
81
82
  }
82
83
 
@@ -1 +1 @@
1
- {"version":3,"file":"TransformToolV2.d.ts","sourceRoot":"","sources":["../../../editor/tools/TransformToolV2.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;GAWG;AACH;IACI,aAA2B;IAE3B;;OAEG;IACH,MAFU,cAAc,MAAM,CAAC,CAEmB;IAElD;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEd;IAElB;;;OAGG;IACH,gBAFU,OAAO,CAEM;IAuBnB;;;OAGG;IACH,kBAFU,IAAI,MAAM,EAAE,WAAW,CAAC,CAED;IAGrC;;;OAGG;IACH,kCAEC;IAED;;OAEG;IACH,wCAEC;IAED;;;OAGG;IACH,mBAFa,MAAM,CAclB;IAED,iCAUC;IAED,0BAiCC;IAED;;OAEG;IACH,6BAgFC;IAED;;OAEG;IACH,wBA+BC;IA2DD,6BAgCC;IAED,4BAEC;IAED,6BAEC;IAED,4BAQC;IAED;;;OAGG;IACH,2BAFW,aAAa,QAkBvB;CACJ;iBAnZgB,kBAAkB;0BAJT,uCAAuC;kCAK/B,2BAA2B;4BAJjC,+CAA+C"}
1
+ {"version":3,"file":"TransformToolV2.d.ts","sourceRoot":"","sources":["../../../editor/tools/TransformToolV2.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;GAWG;AACH;IACI,aAA2B;IAE3B;;OAEG;IACH,MAFU,cAAc,MAAM,CAAC,CAEmB;IAElD;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEd;IAElB;;;OAGG;IACH,gBAFU,OAAO,CAEM;IAuBnB;;;OAGG;IACH,kBAFU,IAAI,MAAM,EAAE,WAAW,CAAC,CAED;IAGrC;;;OAGG;IACH,kCAEC;IAED;;OAEG;IACH,wCAEC;IAED;;;OAGG;IACH,mBAFa,MAAM,CAclB;IAED,iCAUC;IAED,0BAkCC;IAED;;OAEG;IACH,6BAgFC;IAED;;OAEG;IACH,wBA+BC;IA2DD,6BAgCC;IAED,4BAEC;IAED,6BAEC;IAED,4BAQC;IAED;;;OAGG;IACH,2BAFW,aAAa,QAuBvB;CACJ;iBAzZgB,kBAAkB;0BAJT,uCAAuC;kCAK/B,2BAA2B;4BAJjC,+CAA+C"}
@@ -147,6 +147,7 @@ export class TransformToolV2 extends Tool {
147
147
  start.setTranslation(controls.worldPositionStart.x, controls.worldPositionStart.y, controls.worldPositionStart.z);
148
148
  start.setRotation(controls.worldQuaternionStart.x, controls.worldQuaternionStart.y, controls.worldQuaternionStart.z, controls.worldQuaternionStart.w);
149
149
  start.setScale(controls._worldScaleStart.x, controls._worldScaleStart.y, controls._worldScaleStart.z);
150
+ start.updateMatrix();
150
151
 
151
152
  snapshots.set(entity, start);
152
153
  } else {
@@ -405,7 +406,12 @@ export class TransformToolV2 extends Tool {
405
406
 
406
407
  space.set(space.getValue() === 'world' ? 'local' : 'world');
407
408
  } else if (keyCode === KeyCodes.escape) {
408
- this.__controls.reset();
409
+ if (this.__controls.dragging) {
410
+ this.__controls.reset();
411
+ this.__handleObjectChange();
412
+ this.__controls.pointerUp({ button: 0 });
413
+ this.editor.toolEngine?.end_gesture();
414
+ }
409
415
  }
410
416
  }
411
417
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ToolEngine.d.ts","sourceRoot":"","sources":["../../../../editor/tools/engine/ToolEngine.js"],"names":[],"mappings":";AAYA;IACI,iBAAmB;IACnB,2BAAiC;IACjC,YAAc;IACd,mBAAkB;IAClB,yBAAuB;IACvB,aAAe;IA2Bf;;;OAGG;IACH,gBAFU,MAAM,CAEc;IAE9B;;;OAGG;IACH,cAFU,MAAM,CAEY;IAE5B;;OAEG;IACH,8BAEC;IAED,8BAOC;IAED,mBA8BC;IAED;;;;OAIG;IACH,8CA2EC;IAzEG,eAAoB;IA2ExB;;;;;OAKG;IACH;;;;;OAKG;IACH,gCAUC;IAED,oBAeC;IAED,iBAwBC;;CACJ;iBA7PgB,2CAA2C;0BAElC,0CAA0C;mBADjD,2CAA2C"}
1
+ {"version":3,"file":"ToolEngine.d.ts","sourceRoot":"","sources":["../../../../editor/tools/engine/ToolEngine.js"],"names":[],"mappings":";AAYA;IACI,iBAAmB;IACnB,2BAAiC;IACjC,YAAc;IACd,mBAAkB;IAClB,yBAAuB;IACvB,aAAe;IA2Bf;;;OAGG;IACH,gBAFU,MAAM,CAEc;IAE9B;;;OAGG;IACH,cAFU,MAAM,CAEY;IAE5B;;OAEG;IACH,8BAEC;IAED,8BAOC;IAED,mBA8BC;IAED;;;;OAIG;IACH,8CAqFC;IAnFG,eAAoB;IAqFxB;;;;;OAKG;IACH;;;;;OAKG;IACH,gCAUC;IAED,oBAeC;IAED,iBAwBC;;CACJ;iBAvQgB,2CAA2C;0BAElC,0CAA0C;mBADjD,2CAA2C"}
@@ -173,12 +173,22 @@ class ToolEngine {
173
173
  // would otherwise stay running until the next release that happened to land inside
174
174
  pointer.on.globalUp.add(pointerUp);
175
175
 
176
+ // Cancellation and focus loss end a press without a pointerup.
177
+ const viewport = graphics.domElement;
178
+ function endInterruptedGesture() {
179
+ self.end_gesture();
180
+ }
181
+ viewport.addEventListener('pointercancel', endInterruptedGesture);
182
+ window.addEventListener('blur', endInterruptedGesture);
183
+
176
184
  pointer.start();
177
185
 
178
186
 
179
187
  function cleanup() {
180
188
  pointer.on.down.remove(pointerDown);
181
189
  pointer.on.globalUp.remove(pointerUp);
190
+ viewport.removeEventListener('pointercancel', endInterruptedGesture);
191
+ window.removeEventListener('blur', endInterruptedGesture);
182
192
  pointer.stop();
183
193
  }
184
194
 
@@ -1 +1 @@
1
- {"version":3,"file":"TransformControls.d.ts","sourceRoot":"","sources":["../../../../editor/tools/v2/TransformControls.js"],"names":[],"mappings":"AA4EA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAsNI;;;;;OAKG;IACH,sBALW,+BAA6B,cAE7B,WAAW,eACX,OAAO,EAgCjB;IAzPD;;;OAGG;IACH,QAFU,MAAM,CAEJ;IAEZ,6BAA2B;IAE3B;;OAEG;IACH,SAFU,OAAO,CAEF;IAEf;;;;;OAKG;IACH,MAFU,MAAM,GAAC,IAAI,CAET;IAEZ;;OAEG;IACH,MAFU,MAAM,CAEe;IAE/B;;OAEG;IACH,OAFU,MAAM,CAEA;IAEhB;;;;OAIG;IACH,MAFU,MAAM,CAEP;IAET;;OAEG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;OAIG;IACH,iBAFU,MAAM,GAAC,IAAI,CAEE;IAEvB;;;;OAIG;IACH,cAFU,MAAM,GAAC,IAAI,CAED;IAEpB;;OAEG;IACH,WAFU,MAAM,GAAC,IAAI,CAEJ;IAEjB;;OAEG;IACH,eAFU,OAAO,CAEa;IAE9B;;OAEG;IACH,iBAFU,UAAU,CAEe;IAEnC;;;;;OAKG;IACH,oBAFU,OAAO,CAEkB;IAEnC;;OAEG;IACH,sBAFU,UAAU,CAEoB;IAExC;;OAEG;IACH,kBAFU,OAAO,CAEuB;IAExC;;OAEG;IACH,aAFU,OAAO,CAEkB;IAEnC;;OAEG;IACH,qBAFU,UAAU,CAEmB;IAEvC;;OAEG;IACH,gBAFU,OAAO,CAEc;IAE/B;;OAEG;IACH,kBAFU,UAAU,CAEgB;IAEpC;;OAEG;IACH,aAFU,OAAO,CAEkB;IAEnC;;;;OAIG;IACH,YAFU,OAAO,CAEU;IAE3B;;OAEG;IACH,UAFU,OAAO,CAEQ;IAEzB;;OAEG;IACH,SAFU,OAAO,CAEO;IAExB;;OAEG;IACH,YAFU,OAAO,CAEU;IAE3B;;OAEG;IACH,UAFU,OAAO,CAEQ;IAEzB;;OAEG;IACH,cAFU,OAAO,CAEY;IAE7B;;OAEG;IACH,eAFU,MAAM,CAEE;IAElB;;;;OAIG;IACH,gBAFU,OAAO,CAEc;IAE/B;;OAEG;IACH,KAFU,OAAO,CAEU;IA+DvB,cAAwB;IACxB,wBAA4B;IAM5B,iBAAwC;IACxC,oBAA8C;IAC9C,qBAAgD;IAChD,oBAA8C;IAC9C,kBAA0C;IAe9C;;OAEG;IACH,yCAIC;IAmGD,iCAYC;IAED,gCAuCC;IAED;;;OAGG;IACH,qBAFW;QAAC,IAAI,EAAC,MAAM,CAAA;KAAC,QAIvB;IAED,gCAmQC;IAED,8BAcC;IAED,gBASC;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,iBAAiB,CAW7B;IAED;;;OAGG;IACH,oCAIC;IAGD,eAYC;IAED,cAuBC;IAID,kBAIC;IAED,yBAIC;IAED,+CAIC;IAED,yCAIC;IAED,mCAIC;IAED,yBAIC;IAED,2BAIC;;CAEJ;0BAr5ByB,gBAAgB;oBAHtB,mCAAmC;uBADhC,sCAAsC;4BAEjC,kDAAkD"}
1
+ {"version":3,"file":"TransformControls.d.ts","sourceRoot":"","sources":["../../../../editor/tools/v2/TransformControls.js"],"names":[],"mappings":"AA4EA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAsNI;;;;;OAKG;IACH,sBALW,+BAA6B,cAE7B,WAAW,eACX,OAAO,EAgCjB;IAzPD;;;OAGG;IACH,QAFU,MAAM,CAEJ;IAEZ,6BAA2B;IAE3B;;OAEG;IACH,SAFU,OAAO,CAEF;IAEf;;;;;OAKG;IACH,MAFU,MAAM,GAAC,IAAI,CAET;IAEZ;;OAEG;IACH,MAFU,MAAM,CAEe;IAE/B;;OAEG;IACH,OAFU,MAAM,CAEA;IAEhB;;;;OAIG;IACH,MAFU,MAAM,CAEP;IAET;;OAEG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;OAIG;IACH,iBAFU,MAAM,GAAC,IAAI,CAEE;IAEvB;;;;OAIG;IACH,cAFU,MAAM,GAAC,IAAI,CAED;IAEpB;;OAEG;IACH,WAFU,MAAM,GAAC,IAAI,CAEJ;IAEjB;;OAEG;IACH,eAFU,OAAO,CAEa;IAE9B;;OAEG;IACH,iBAFU,UAAU,CAEe;IAEnC;;;;;OAKG;IACH,oBAFU,OAAO,CAEkB;IAEnC;;OAEG;IACH,sBAFU,UAAU,CAEoB;IAExC;;OAEG;IACH,kBAFU,OAAO,CAEuB;IAExC;;OAEG;IACH,aAFU,OAAO,CAEkB;IAEnC;;OAEG;IACH,qBAFU,UAAU,CAEmB;IAEvC;;OAEG;IACH,gBAFU,OAAO,CAEc;IAE/B;;OAEG;IACH,kBAFU,UAAU,CAEgB;IAEpC;;OAEG;IACH,aAFU,OAAO,CAEkB;IAEnC;;;;OAIG;IACH,YAFU,OAAO,CAEU;IAE3B;;OAEG;IACH,UAFU,OAAO,CAEQ;IAEzB;;OAEG;IACH,SAFU,OAAO,CAEO;IAExB;;OAEG;IACH,YAFU,OAAO,CAEU;IAE3B;;OAEG;IACH,UAFU,OAAO,CAEQ;IAEzB;;OAEG;IACH,cAFU,OAAO,CAEY;IAE7B;;OAEG;IACH,eAFU,MAAM,CAEE;IAElB;;;;OAIG;IACH,gBAFU,OAAO,CAEc;IAE/B;;OAEG;IACH,KAFU,OAAO,CAEU;IA+DvB,cAAwB;IACxB,wBAA4B;IAM5B,iBAAwC;IACxC,oBAA8C;IAC9C,qBAAgD;IAChD,oBAA8C;IAC9C,kBAA0C;IAe9C;;OAEG;IACH,yCAIC;IAmGD,iCAYC;IAED,gCAuCC;IAED;;;OAGG;IACH,qBAFW;QAAC,IAAI,EAAC,MAAM,CAAA;KAAC,QAIvB;IAED,gCAsPC;IAED,8BAcC;IAED,gBASC;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,iBAAiB,CAW7B;IAED;;;OAGG;IACH,oCAIC;IAGD,eAYC;IAED,cAuBC;IAID,kBAIC;IAED,yBAIC;IAED,+CAIC;IAED,yCAIC;IAED,mCAIC;IAED,yBAIC;IAED,2BAIC;;CAEJ;0BAx4ByB,gBAAgB;oBAHtB,mCAAmC;uBADhC,sCAAsC;4BAEjC,kDAAkD"}
@@ -486,7 +486,7 @@ class TransformControls extends GizmoNode {
486
486
  gizmo_drag_plane_normal(
487
487
  this.#plane_normal,
488
488
  this.mode, this.axis, this.space,
489
- ot.rotation,
489
+ scratch_quaternion.set(ot.rotation_x, ot.rotation_y, ot.rotation_z, ot.rotation_w),
490
490
  this.eye, this.#camera_forward
491
491
  );
492
492
 
@@ -654,25 +654,12 @@ class TransformControls extends GizmoNode {
654
654
  scratch_vector.applyQuaternion(this._worldQuaternionInv);
655
655
  scratch_vector_2.applyQuaternion(this._worldQuaternionInv);
656
656
 
657
- scratch_vector_2.divide(scratch_vector);
658
-
659
- if (axis.search('X') === -1) {
660
-
661
- scratch_vector_2.x = 1;
662
-
663
- }
664
-
665
- if (axis.search('Y') === -1) {
666
-
667
- scratch_vector_2.y = 1;
668
-
669
- }
670
-
671
- if (axis.search('Z') === -1) {
672
-
673
- scratch_vector_2.z = 1;
674
-
675
- }
657
+ // Untouched axes keep ratio one; their drag-plane coordinates may both be zero.
658
+ scratch_vector_2.set(
659
+ axis.includes('X') ? scratch_vector_2.x / scratch_vector.x : 1,
660
+ axis.includes('Y') ? scratch_vector_2.y / scratch_vector.y : 1,
661
+ axis.includes('Z') ? scratch_vector_2.z / scratch_vector.z : 1
662
+ );
676
663
 
677
664
  }
678
665
 
@@ -1 +1 @@
1
- {"version":3,"file":"gizmo_drag_plane.d.ts","sourceRoot":"","sources":["../../../../../editor/tools/v2/handle/gizmo_drag_plane.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,gDARW,OAAO,QACP,MAAM,QACN,MAAM,SACN,MAAM,oCAEN,OAAO,kBACP,OAAO,QAqEjB;AAED;;;;;;;;;;GAUG;AACH,8CARW,OAAO,UACP,OAAO,aACP,OAAO,eACP,OAAO,gBACP,OAAO,GACL,OAAO,CAsBnB;oBAhJmB,sCAAsC"}
1
+ {"version":3,"file":"gizmo_drag_plane.d.ts","sourceRoot":"","sources":["../../../../../editor/tools/v2/handle/gizmo_drag_plane.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,gDARW,OAAO,QACP,MAAM,QACN,MAAM,SACN,MAAM,oCAEN,OAAO,kBACP,OAAO,QAqEjB;AAED;;;;;;;;;;GAUG;AACH,8CARW,OAAO,UACP,OAAO,aACP,OAAO,eACP,OAAO,gBACP,OAAO,GACL,OAAO,CA0BnB;oBApJmB,sCAAsC"}
@@ -140,6 +140,10 @@ export function gizmo_ray_plane_point(result, origin, direction, plane_point, pl
140
140
 
141
141
  const t = along.dot(plane_normal) / denominator;
142
142
 
143
+ if (t < 0) {
144
+ return false;
145
+ }
146
+
143
147
  result.copy(direction).multiplyScalar(t).add(origin);
144
148
 
145
149
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityEditor.d.ts","sourceRoot":"","sources":["../../../../editor/view/ecs/EntityEditor.js"],"names":[],"mappings":";AAkBA;IAYI,yBAyOC;IAhOG,YAAkB;IAGlB,0BAAoC;IACpC;;OAEG;IACH,eAFU,cAAc,aAAa,CAAC,CAEM;IAC5C,sBAA4B;IAU5B;;;OAGG;IACH,sBAFU,mCAAiC,CAEN;IAsGrC,wBAEE;IAiGF,aAAkB;;CAazB;iBAzQgB,2BAA2B;0BATlB,0CAA0C;8BAEtC,0CAA0C;iBAHvD,2CAA2C;qCAcvB,2BAA2B;sBAT1C,uCAAuC"}
1
+ {"version":3,"file":"EntityEditor.d.ts","sourceRoot":"","sources":["../../../../editor/view/ecs/EntityEditor.js"],"names":[],"mappings":";AAkBA;IAYI,yBA2OC;IAlOG,YAAkB;IAGlB,0BAAoC;IACpC;;OAEG;IACH,eAFU,cAAc,aAAa,CAAC,CAEM;IAC5C,sBAA4B;IAU5B;;;OAGG;IACH,sBAFU,mCAAiC,CAEN;IAwGrC,wBAEE;IAiGF,aAAkB;;CAazB;iBA3QgB,2BAA2B;0BATlB,0CAA0C;8BAEtC,0CAA0C;iBAHvD,2CAA2C;qCAcvB,2BAA2B;sBAT1C,uCAAuC"}
@@ -156,7 +156,9 @@ class EntityEditor extends View {
156
156
  if (oldEntity !== undefined && oldEntity !== null) {
157
157
  unwatchEntity(oldEntity);
158
158
  }
159
- watchEntity(entity);
159
+ if (entity !== undefined && entity !== null) {
160
+ watchEntity(entity);
161
+ }
160
162
 
161
163
  rebuildComponents();
162
164
  });
@@ -1 +1 @@
1
- {"version":3,"file":"NodeGraphView.d.ts","sourceRoot":"","sources":["../../../../editor/view/node-graph/NodeGraphView.js"],"names":[],"mappings":";AA0GA;IA4GI;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gJAyhBC;IAxpBD,mBAAmC;IAEnC;;;;;;;;;OASG;IACH,oBAFU,IAAI,MAAM,EAAE,QAAQ,CAAC,CAET;IAmBtB;;;OAGG;IACH,qBAFmB,yBAAyB,cAE/B;IAEb;;OAEG;IACH,iBA0DE;IAEF;;;;OAIG;IACH,mBAFU,OAAO,CAEA;IAmCb;;;OAGG;IACH,2CAAsC;IAMtC;;;OAGG;IACH,QAFU,eAAe,CAEL;IAEpB;;;OAGG;IACH,iBAAkB;IAElB;;;OAGG;IACH,4BAAoB;IAEpB;;;OAGG;IACH,WAFU,kBAAkB,CAEF;IA8e9B;;;;;;;;;OASG;IACH,oBAFa,IAAI,CAgBhB;IAED;;;;;;;;OAQG;IACH,gBAFa,IAAI,CAMhB;IAED;;;;;;;;OAQG;IACH,cAFa,OAAO,CAInB;IAgBD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,gCAFa,IAAI,CA+NhB;IAED;;;;;;;;OAQG;IACH,0BAHW,KAAK,GACH,MAAM,EAAE,CAwBpB;IAED;;;;;;;;;;;OAWG;IACH,gCAHW,KAAK,GACH,MAAM,EAAE,CAsBpB;IAED;;;;;;;;;;OAUG;IACH,6BAJW,KAAK,SACL,UAAU,GAAC,YAAY,GACrB,IAAI,CAgDhB;IAED;;;;OAIG;IACH,wBAHW,OAAO,GACL,aAAW,IAAI,CAiC3B;IAED;;;;;;;OAOG;IACH,4BAJW,MAAM,GAAC,IAAI,gBACX,MAAM,GAAC,IAAI,SACX,UAAU,GAAC,YAAY,QA8CjC;IAGD;;;;;;;OAOG;IACH,wDAFa,OAAO,CAcnB;IAED;;;;;;;;;OASG;IACH,+CAFa,oBAAoB,CAYhC;IAED;;;;;;OAMG;IACH,oBALW,wBAAwB,QACxB,oBAAoB,iCAEpB,OAAO,QA+DjB;IAED;;;;OAIG;IACH,mCAHW,yBAAyB,UACzB,OAAO,QAiBjB;IAeD;;;;OAIG;IACH,kCAHW,OAAO,UACP,OAAO,QAIjB;IAED;;;;OAIG;IACH,kCAHW,OAAO,UACP,OAAO,QAIjB;;CACJ;iBA/7CgB,2BAA2B;yBAInB,eAAe;0CAIE,sEAAsE;gCAChF,mDAAmD;gCACnD,sBAAsB;mCACnB,yBAAyB;kBAS1C,yCAAyC;oBAlBvC,mCAAmC;qCAiBlB,mEAAmE"}
1
+ {"version":3,"file":"NodeGraphView.d.ts","sourceRoot":"","sources":["../../../../editor/view/node-graph/NodeGraphView.js"],"names":[],"mappings":";AA0GA;IA4GI;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gJAwiBC;IAvqBD,mBAAmC;IAEnC;;;;;;;;;OASG;IACH,oBAFU,IAAI,MAAM,EAAE,QAAQ,CAAC,CAET;IAmBtB;;;OAGG;IACH,qBAFmB,yBAAyB,cAE/B;IAEb;;OAEG;IACH,iBA0DE;IAEF;;;;OAIG;IACH,mBAFU,OAAO,CAEA;IAmCb;;;OAGG;IACH,2CAAsC;IAMtC;;;OAGG;IACH,QAFU,eAAe,CAEL;IAEpB;;;OAGG;IACH,iBAAkB;IAElB;;;OAGG;IACH,4BAAoB;IAEpB;;;OAGG;IACH,WAFU,kBAAkB,CAEF;IA6f9B;;;;;;;;;OASG;IACH,oBAFa,IAAI,CAgBhB;IAED;;;;;;;;OAQG;IACH,gBAFa,IAAI,CAMhB;IAED;;;;;;;;OAQG;IACH,cAFa,OAAO,CAInB;IAgBD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,gCAFa,IAAI,CAgOhB;IAED;;;;;;;;OAQG;IACH,0BAHW,KAAK,GACH,MAAM,EAAE,CAwBpB;IAED;;;;;;;;;;;OAWG;IACH,gCAHW,KAAK,GACH,MAAM,EAAE,CAsBpB;IAED;;;;;;;;;;OAUG;IACH,6BAJW,KAAK,SACL,UAAU,GAAC,YAAY,GACrB,IAAI,CAgDhB;IAED;;;;OAIG;IACH,wBAHW,OAAO,GACL,aAAW,IAAI,CAiC3B;IAED;;;;;;;OAOG;IACH,4BAJW,MAAM,GAAC,IAAI,gBACX,MAAM,GAAC,IAAI,SACX,UAAU,GAAC,YAAY,QA8CjC;IAGD;;;;;;;OAOG;IACH,wDAFa,OAAO,CAcnB;IAED;;;;;;;;;OASG;IACH,+CAFa,oBAAoB,CAYhC;IAED;;;;;;OAMG;IACH,oBALW,wBAAwB,QACxB,oBAAoB,iCAEpB,OAAO,QA+DjB;IAED;;;;OAIG;IACH,mCAHW,yBAAyB,UACzB,OAAO,QAiBjB;IAeD;;;;OAIG;IACH,kCAHW,OAAO,UACP,OAAO,QAIjB;IAED;;;;OAIG;IACH,kCAHW,OAAO,UACP,OAAO,QAIjB;;CACJ;iBA/8CgB,2BAA2B;yBAInB,eAAe;0CAIE,sEAAsE;gCAChF,mDAAmD;gCACnD,sBAAsB;mCACnB,yBAAyB;kBAS1C,yCAAyC;oBAlBvC,mCAAmC;qCAiBlB,mEAAmE"}
@@ -289,6 +289,7 @@ export class NodeGraphView extends View {
289
289
  enabled: false,
290
290
  anchor: new Vector2(),
291
291
  endpoint: null,
292
+ pointerId: null,
292
293
 
293
294
  /**
294
295
  * Whether some port has already dealt with the drop that is ending this drag.
@@ -347,12 +348,14 @@ export class NodeGraphView extends View {
347
348
  // what this port carries on this node, where that is not what it declares
348
349
  portView.setDataType(self.portDataType(node.getEndpoint(port.id)));
349
350
 
351
+ let ownsWireGesture = false;
350
352
  const draggableAspect = new DraggableAspect({
351
353
  el: portView.el,
352
354
  dragStart(p, event) {
353
- if (self.readOnly) {
355
+ if (self.readOnly || tempConnection.enabled) {
354
356
  return;
355
357
  }
358
+ ownsWireGesture = true;
356
359
 
357
360
  // An input holds one wire, so a drag out of a bound one is that
358
361
  // wire being taken hold of: what is on the end of the gesture is
@@ -371,6 +374,7 @@ export class NodeGraphView extends View {
371
374
  }
372
375
 
373
376
  tempConnection.enabled = true;
377
+ tempConnection.pointerId = event.pointerId;
374
378
  tempConnection.consumed = false;
375
379
  tempConnection.detached = held;
376
380
  tempConnection.endpoint = endpoint;
@@ -383,15 +387,17 @@ export class NodeGraphView extends View {
383
387
  self.transformPointCanvas2Graph(v2_pointer, tempConnection.anchor);
384
388
  },
385
389
  dragEnd() {
386
- if (!tempConnection.enabled) {
390
+ if (!ownsWireGesture) {
387
391
  return;
388
392
  }
393
+ ownsWireGesture = false;
389
394
 
390
395
  const endpoint = tempConnection.endpoint;
391
396
  const consumed = tempConnection.consumed;
392
397
  const detached = tempConnection.detached;
393
398
 
394
399
  tempConnection.enabled = false;
400
+ tempConnection.pointerId = null;
395
401
  tempConnection.detached = null;
396
402
 
397
403
  requestRedraw();
@@ -423,7 +429,16 @@ export class NodeGraphView extends View {
423
429
  graph_y: anchor.y,
424
430
  });
425
431
  },
432
+ dragCancel() {
433
+ if (!ownsWireGesture) return;
434
+ ownsWireGesture = false;
435
+ tempConnection.enabled = false;
436
+ tempConnection.pointerId = null;
437
+ tempConnection.detached = null;
438
+ requestRedraw();
439
+ },
426
440
  drag(p, o, delta, event) {
441
+ if (!ownsWireGesture) return;
427
442
  // the anchor lives in graph space, derive it from the cursor position over this view
428
443
  readPositionFromMouseEvent(v2_pointer, event, self.el);
429
444
 
@@ -433,10 +448,10 @@ export class NodeGraphView extends View {
433
448
  }
434
449
  });
435
450
 
436
- draggableAspect.getPointer().on.up.add(() => {
451
+ draggableAspect.getPointer().on.up.add((p, event) => {
437
452
  //pointer released above the port
438
453
 
439
- if (tempConnection.enabled) {
454
+ if (tempConnection.enabled && event.pointerId === tempConnection.pointerId) {
440
455
  // whatever happens below, the wire has met a port and its fate is
441
456
  // decided here rather than on open canvas
442
457
  tempConnection.consumed = true;
@@ -944,8 +959,16 @@ export class NodeGraphView extends View {
944
959
  vMarquee.setClass('toggle', event.ctrlKey);
945
960
  };
946
961
 
962
+ const abandonGesture = () => {
963
+ gesture.button = -1;
964
+ gesture.drag = CanvasDrag.None;
965
+ gesture.travelled = false;
966
+ vMarquee.visible = false;
967
+ };
968
+
947
969
  const draggableAspect = new DraggableAspect({
948
970
  el: this.el,
971
+ dragCancel: abandonGesture,
949
972
  dragStart: (position) => {
950
973
  if (gesture.button === MOUSE_BUTTON.LEFT) {
951
974
  gesture.drag = CanvasDrag.Marquee;
@@ -971,6 +994,7 @@ export class NodeGraphView extends View {
971
994
  }
972
995
 
973
996
  if (gesture.drag === CanvasDrag.Pan) {
997
+ if (!gesture.travelled) return;
974
998
  const d = origin.clone();
975
999
 
976
1000
  d.sub(position);
@@ -1074,14 +1098,6 @@ export class NodeGraphView extends View {
1074
1098
 
1075
1099
  // A canvas taken off screen mid-gesture never sees the release that would have ended it, and
1076
1100
  // one that came back still believing a button was down would ignore the next press.
1077
- const abandonGesture = () => {
1078
- gesture.button = -1;
1079
- gesture.drag = CanvasDrag.None;
1080
- gesture.travelled = false;
1081
-
1082
- vMarquee.visible = false;
1083
- };
1084
-
1085
1101
  this.on.linked.add(draggableAspect.start, draggableAspect);
1086
1102
  this.on.unlinked.add(draggableAspect.stop, draggableAspect);
1087
1103
  this.on.unlinked.add(abandonGesture);
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.41.0",
9
+ "version": "3.42.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -27,6 +27,9 @@
27
27
  </head>
28
28
  <body>
29
29
  <div id="hint">W / S move the lamp &middot; drag with the left button to slide it</div>
30
- <script type="module" src="./main.js"></script>
30
+ <script type="module">
31
+ import { main } from "./main.js";
32
+ main();
33
+ </script>
31
34
  </body>
32
35
  </html>
@@ -16,6 +16,7 @@
16
16
 
17
17
  import Vector2 from "../../../src/core/geom/Vector2.js";
18
18
  import { Transform64 } from "../../../src/engine/ecs/transform/Transform64.js";
19
+ import { t64_announce_change } from "../../../src/engine/ecs/transform/t64_announce_change.js";
19
20
  import Entity from "../../../src/engine/ecs/Entity.js";
20
21
  import { EngineHarness } from "../../../src/engine/EngineHarness.js";
21
22
  import { Light } from "../../../src/engine/graphics/ecs/light/Light.js";
@@ -99,7 +100,7 @@ export async function main() {
99
100
  const lampTransform = new Transform64();
100
101
  lampTransform.setTranslation(0, ROOM_SIZE_METRES * 0.5, 0);
101
102
 
102
- new Entity().add(lamp).add(lampTransform).build(engine.entityManager.dataset);
103
+ const lampId = new Entity().add(lamp).add(lampTransform).build(engine.entityManager.dataset);
103
104
 
104
105
  /**
105
106
  * NOTE 3 — **input arrives on the view stack's element, and the engine does not focus it for
@@ -122,17 +123,24 @@ export async function main() {
122
123
  const forward = keyboard.keys.w.is_down ? 1 : 0;
123
124
  const back = keyboard.keys.s.is_down ? 1 : 0;
124
125
 
125
- lampTransform.position.setY(
126
- ROOM_SIZE_METRES * 0.5 + (forward - back) * 2
127
- );
126
+ const height = ROOM_SIZE_METRES * 0.5 + (forward - back) * 2;
127
+ if (height === lampTransform.translation_y) return;
128
+ lampTransform.setTranslation(lampTransform.translation_x, height, lampTransform.translation_z);
129
+ t64_announce_change(engine.entityManager.dataset, lampId);
128
130
  });
129
131
 
130
- pointer.on.move.add((position, previous, delta) => {
132
+ pointer.on.move.add((position, event, delta) => {
131
133
  if (!pointer.mouseButtonLeft.is_down) {
132
134
  return;
133
135
  }
134
136
 
135
- lampTransform.position._add(delta.x * 0.01, 0, delta.y * 0.01);
137
+ if (delta.x === 0 && delta.y === 0) return;
138
+ lampTransform.setTranslation(
139
+ lampTransform.translation_x + delta.x * 0.01,
140
+ lampTransform.translation_y,
141
+ lampTransform.translation_z + delta.y * 0.01
142
+ );
143
+ t64_announce_change(engine.entityManager.dataset, lampId);
136
144
  });
137
145
 
138
146
  return engine;
@@ -147,6 +155,3 @@ export async function main() {
147
155
  * `importScripts` of a same-origin script is blocked and reproduces exactly the same `NetworkError`
148
156
  * as the file not being there at all.
149
157
  */
150
- if (typeof document !== "undefined" && document.currentScript !== null) {
151
- main();
152
- }
@@ -28,11 +28,11 @@ export function utf8_decode(bytes, start = 0, end = bytes.length) {
28
28
  if (b0 < 0x80) {
29
29
  result += String.fromCharCode(b0);
30
30
  } else if (b0 < 0xe0) {
31
- result += String.fromCharCode(((b0 & 0x1f) << 6) | (bytes[i++] & 0x3f));
31
+ result += String.fromCharCode(((b0 & 0x1f) << 6) | (i < end ? bytes[i++] & 0x3f : 0));
32
32
  } else if (b0 < 0xf0) {
33
- result += String.fromCharCode(((b0 & 0x0f) << 12) | ((bytes[i++] & 0x3f) << 6) | (bytes[i++] & 0x3f));
33
+ result += String.fromCharCode(((b0 & 0x0f) << 12) | ((i < end ? bytes[i++] & 0x3f : 0) << 6) | (i < end ? bytes[i++] & 0x3f : 0));
34
34
  } else {
35
- const code_point = ((b0 & 0x07) << 18) | ((bytes[i++] & 0x3f) << 12) | ((bytes[i++] & 0x3f) << 6) | (bytes[i++] & 0x3f);
35
+ const code_point = ((b0 & 0x07) << 18) | ((i < end ? bytes[i++] & 0x3f : 0) << 12) | ((i < end ? bytes[i++] & 0x3f : 0) << 6) | (i < end ? bytes[i++] & 0x3f : 0);
36
36
  const offset = code_point - 0x10000;
37
37
 
38
38
  result += String.fromCharCode(0xd800 + (offset >> 10), 0xdc00 + (offset & 0x3ff));
@@ -1 +1 @@
1
- {"version":3,"file":"bvh32_query_user_data_ray.d.ts","sourceRoot":"","sources":["../../../../../../src/core/bvh2/binary/2/bvh32_query_user_data_ray.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AACH,kDAZW,MAAM,EAAE,iBACR,MAAM,kCAEN,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,gBACN,MAAM,GACJ,MAAM,CA8FlB"}
1
+ {"version":3,"file":"bvh32_query_user_data_ray.d.ts","sourceRoot":"","sources":["../../../../../../src/core/bvh2/binary/2/bvh32_query_user_data_ray.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AACH,kDAZW,MAAM,EAAE,iBACR,MAAM,kCAEN,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,gBACN,MAAM,GACJ,MAAM,CA6FlB"}
@@ -1,113 +1,112 @@
1
- import { assert } from "../../../assert.js";
2
- import { SCRATCH_UINT32_TRAVERSAL_STACK } from "../../../collection/SCRATCH_UINT32_TRAVERSAL_STACK.js";
3
- import { aabb3_ray_segment_entry_distance } from "../../../geom/3d/aabb/aabb3_ray_segment_entry_distance.js";
4
-
5
- const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
6
-
7
- /**
8
- *
9
- * @param {number[]} result
10
- * @param {number} result_offset
11
- * @param {BinaryUint32BVH} bvh
12
- * @param {number} origin_x
13
- * @param {number} origin_y
14
- * @param {number} origin_z
15
- * @param {number} direction_x
16
- * @param {number} direction_y
17
- * @param {number} direction_z
18
- * @param {number} max_distance tMax for the ray, can set to Infinity if you don't care.
19
- * @returns {number}
20
- */
21
- export function bvh32_query_user_data_ray(
22
- result, result_offset,
23
- bvh,
24
- origin_x, origin_y, origin_z,
25
- direction_x, direction_y, direction_z,
26
- max_distance,
27
- ) {
28
-
29
- assert.isNumber(max_distance, "max_distance");
30
-
31
- let hit_count = 0;
32
-
33
- const binary_node_count = bvh.binary_node_count;
34
-
35
- if (binary_node_count <= 0) {
36
- // this should not happen
37
- return 0;
38
- }
39
-
40
- /**
41
- *
42
- * @type {number}
43
- */
44
- const stack_top = stack.pointer++;
45
-
46
- /**
47
- * After performing empirical tests, stack-based depth-first traversal turns out faster than using a queue
48
- * @type {number}
49
- */
50
- stack[stack_top] = 0;
51
-
52
- const last_valid_index = binary_node_count + bvh.leaf_node_count;
53
-
54
- const float32 = bvh.float32;
55
- const uint32 = bvh.uint32;
56
-
57
-
58
- const inv_direction_x = 1 / direction_x;
59
- const inv_direction_y = 1 / direction_y;
60
- const inv_direction_z = 1 / direction_z;
61
-
62
- do {
63
- stack.pointer--;
64
-
65
- // query_bvh_frustum_from_objects.iteration_count++;
66
- const node_index = stack[stack.pointer];
67
-
68
- const node_address = bvh.getNodeAddress(node_index);
69
-
70
- const t = aabb3_ray_segment_entry_distance(
71
- float32[node_address], float32[node_address + 1], float32[node_address + 2],
72
- float32[node_address + 3], float32[node_address + 4], float32[node_address + 5],
73
- origin_x, origin_y, origin_z,
74
- inv_direction_x, inv_direction_y, inv_direction_z,
75
- 0,
76
- max_distance
77
- );
78
-
79
- if (t >= max_distance) {
80
- continue;
81
- }
82
-
83
- const is_intermediate_node = node_index < binary_node_count;
84
-
85
- if (is_intermediate_node) {
86
- // is intermediate node
87
-
88
- const left_index = (node_index << 1) + 1;
89
- const right_index = left_index + 1;
90
-
91
- // left node ends up on top of the stack, which aligns with the desired access sequence
92
- if (right_index < last_valid_index) {
93
- stack[stack.pointer++] = right_index;
94
- // micro-optimization, since we know that right node is valid and left appears before that, left is valid too
95
- stack[stack.pointer++] = left_index;
96
- } else if (left_index < last_valid_index) {
97
- stack[stack.pointer++] = left_index;
98
- }
99
-
100
-
101
- } else {
102
- // leaf node
103
-
104
- // write to output
105
- result[result_offset + hit_count] = uint32[node_address + 6];
106
-
107
- hit_count++;
108
- }
109
-
110
- } while (stack.pointer > stack_top)
111
-
112
- return hit_count;
113
- }
1
+ import { assert } from "../../../assert.js";
2
+ import { SCRATCH_UINT32_TRAVERSAL_STACK } from "../../../collection/SCRATCH_UINT32_TRAVERSAL_STACK.js";
3
+ import { aabb3_ray_segment_entry_distance } from "../../../geom/3d/aabb/aabb3_ray_segment_entry_distance.js";
4
+
5
+ const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
6
+
7
+ /**
8
+ *
9
+ * @param {number[]} result
10
+ * @param {number} result_offset
11
+ * @param {BinaryUint32BVH} bvh
12
+ * @param {number} origin_x
13
+ * @param {number} origin_y
14
+ * @param {number} origin_z
15
+ * @param {number} direction_x
16
+ * @param {number} direction_y
17
+ * @param {number} direction_z
18
+ * @param {number} max_distance tMax for the ray, can set to Infinity if you don't care.
19
+ * @returns {number}
20
+ */
21
+ export function bvh32_query_user_data_ray(
22
+ result, result_offset,
23
+ bvh,
24
+ origin_x, origin_y, origin_z,
25
+ direction_x, direction_y, direction_z,
26
+ max_distance,
27
+ ) {
28
+
29
+ assert.isNumber(max_distance, "max_distance");
30
+
31
+ let hit_count = 0;
32
+
33
+ const binary_node_count = bvh.binary_node_count;
34
+
35
+ if (binary_node_count <= 0) {
36
+ // this should not happen
37
+ return 0;
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @type {number}
43
+ */
44
+ const stack_top = stack.pointer++;
45
+
46
+ /**
47
+ * After performing empirical tests, stack-based depth-first traversal turns out faster than using a queue
48
+ * @type {number}
49
+ */
50
+ stack[stack_top] = 0;
51
+
52
+ const last_valid_index = binary_node_count + bvh.leaf_node_count;
53
+
54
+ const float32 = bvh.float32;
55
+ const uint32 = bvh.uint32;
56
+
57
+ const inv_direction_x = 1 / direction_x;
58
+ const inv_direction_y = 1 / direction_y;
59
+ const inv_direction_z = 1 / direction_z;
60
+
61
+ do {
62
+ stack.pointer--;
63
+
64
+ // query_bvh_frustum_from_objects.iteration_count++;
65
+ const node_index = stack[stack.pointer];
66
+
67
+ const node_address = bvh.getNodeAddress(node_index);
68
+
69
+ const t = aabb3_ray_segment_entry_distance(
70
+ float32[node_address], float32[node_address + 1], float32[node_address + 2],
71
+ float32[node_address + 3], float32[node_address + 4], float32[node_address + 5],
72
+ origin_x, origin_y, origin_z,
73
+ inv_direction_x, inv_direction_y, inv_direction_z,
74
+ 0,
75
+ max_distance
76
+ );
77
+
78
+ // Infinity means a miss; finite segment endpoints are included.
79
+ if (t === Infinity || t > max_distance) {
80
+ continue;
81
+ }
82
+
83
+ const is_intermediate_node = node_index < binary_node_count;
84
+
85
+ if (is_intermediate_node) {
86
+ // is intermediate node
87
+
88
+ const left_index = (node_index << 1) + 1;
89
+ const right_index = left_index + 1;
90
+
91
+ // left node ends up on top of the stack, which aligns with the desired access sequence
92
+ if (right_index < last_valid_index) {
93
+ stack[stack.pointer++] = right_index;
94
+ // micro-optimization, since we know that right node is valid and left appears before that, left is valid too
95
+ stack[stack.pointer++] = left_index;
96
+ } else if (left_index < last_valid_index) {
97
+ stack[stack.pointer++] = left_index;
98
+ }
99
+
100
+ } else {
101
+ // leaf node
102
+
103
+ // write to output
104
+ result[result_offset + hit_count] = uint32[node_address + 6];
105
+
106
+ hit_count++;
107
+ }
108
+
109
+ } while (stack.pointer > stack_top)
110
+
111
+ return hit_count;
112
+ }
@@ -19,7 +19,7 @@ export function ebvh_nodes_sort_sah_local4(
19
19
  assert.isNonNegativeInteger(offset, 'offset');
20
20
  assert.isNonNegativeInteger(count, 'count');
21
21
 
22
- const swap_pair_limit = Math.floor((count - (distance + 2)) / 2);
22
+ const swap_pair_limit = Math.floor((count - distance) / 2);
23
23
  const end = offset + swap_pair_limit * 2;
24
24
 
25
25
  let swap_count = 0;
@@ -91,4 +91,4 @@ export function ebvh_nodes_sort_sah_local4(
91
91
  }
92
92
 
93
93
  return swap_count;
94
- }
94
+ }