@babylonjs/core 8.36.0 → 8.37.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 (251) hide show
  1. package/Actions/action.d.ts +5 -0
  2. package/Actions/action.js.map +1 -1
  3. package/Actions/actionManager.js +6 -2
  4. package/Actions/actionManager.js.map +1 -1
  5. package/Animations/runtimeAnimation.d.ts +0 -2
  6. package/Animations/runtimeAnimation.js +3 -5
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/AudioV2/abstractAudio/abstractSound.js +1 -0
  9. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  10. package/AudioV2/abstractAudio/audioEngineV2.d.ts +0 -4
  11. package/AudioV2/abstractAudio/audioEngineV2.js +0 -4
  12. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  13. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js +1 -1
  14. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js.map +1 -1
  15. package/AudioV2/audioParameter.d.ts +5 -1
  16. package/AudioV2/audioParameter.js +4 -0
  17. package/AudioV2/audioParameter.js.map +1 -1
  18. package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +0 -18
  19. package/AudioV2/webAudio/components/webAudioParameterComponent.js +7 -67
  20. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  21. package/AudioV2/webAudio/webAudioStaticSound.js +8 -3
  22. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  23. package/Cameras/camera.js +1 -0
  24. package/Cameras/camera.js.map +1 -1
  25. package/Cameras/targetCamera.js +0 -4
  26. package/Cameras/targetCamera.js.map +1 -1
  27. package/Collisions/gpuPicker.js +0 -1
  28. package/Collisions/gpuPicker.js.map +1 -1
  29. package/Culling/ray.core.js +1 -1
  30. package/Culling/ray.core.js.map +1 -1
  31. package/Debug/debugLayer.d.ts +1 -1
  32. package/Debug/debugLayer.js.map +1 -1
  33. package/Decorators/nodeDecorator.d.ts +3 -1
  34. package/Decorators/nodeDecorator.js +2 -0
  35. package/Decorators/nodeDecorator.js.map +1 -1
  36. package/Engines/Native/nativeInterfaces.d.ts +1 -1
  37. package/Engines/Native/nativeInterfaces.js.map +1 -1
  38. package/Engines/WebGPU/webgpuCacheSampler.js +4 -0
  39. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  40. package/Engines/abstractEngine.js +2 -2
  41. package/Engines/abstractEngine.js.map +1 -1
  42. package/Engines/nativeEngine.js +12 -13
  43. package/Engines/nativeEngine.js.map +1 -1
  44. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.d.ts +2 -2
  45. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js +2 -2
  46. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js.map +1 -1
  47. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +1 -1
  48. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +2 -2
  49. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  50. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.d.ts +44 -0
  51. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +152 -0
  52. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -0
  53. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +2 -2
  54. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +2 -2
  55. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  56. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +2 -2
  57. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +2 -2
  58. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  59. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.d.ts +2 -2
  60. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js +2 -2
  61. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -1
  62. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +2 -2
  63. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +2 -2
  64. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  65. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.d.ts +2 -2
  66. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +2 -2
  67. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js.map +1 -1
  68. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +2 -2
  69. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js +2 -2
  70. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
  71. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +2 -2
  72. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +2 -2
  73. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  74. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.d.ts +2 -2
  75. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +2 -2
  76. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js.map +1 -1
  77. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.d.ts +2 -2
  78. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js +2 -2
  79. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js.map +1 -1
  80. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.d.ts +2 -2
  81. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js +2 -2
  82. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js.map +1 -1
  83. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.d.ts +2 -2
  84. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +3 -3
  85. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js.map +1 -1
  86. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.d.ts +2 -2
  87. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js +2 -2
  88. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js.map +1 -1
  89. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +3 -3
  90. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js +3 -3
  91. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -1
  92. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.d.ts +2 -2
  93. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js +2 -2
  94. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js.map +1 -1
  95. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.d.ts +2 -2
  96. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js +4 -4
  97. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js.map +1 -1
  98. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.d.ts +2 -2
  99. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js +2 -2
  100. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js.map +1 -1
  101. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +2 -2
  102. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js +2 -2
  103. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
  104. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +1 -1
  105. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
  106. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +1 -1
  107. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
  108. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.d.ts +20 -1
  109. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +83 -0
  110. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  111. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  112. package/FrameGraph/Node/Blocks/index.js +1 -0
  113. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  114. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +7 -1
  115. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +8 -2
  116. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  117. package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +1 -1
  118. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  119. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +4 -4
  120. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +3 -4
  121. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  122. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -4
  123. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -3
  124. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  125. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +2 -3
  126. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +1 -2
  127. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  128. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +3 -1
  129. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +11 -1
  130. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  131. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +11 -1
  132. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +10 -1
  133. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  134. package/FrameGraph/frameGraphContext.d.ts +8 -1
  135. package/FrameGraph/frameGraphContext.js +9 -0
  136. package/FrameGraph/frameGraphContext.js.map +1 -1
  137. package/FrameGraph/frameGraphRenderContext.d.ts +5 -2
  138. package/FrameGraph/frameGraphRenderContext.js +32 -7
  139. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  140. package/FrameGraph/frameGraphTask.d.ts +8 -0
  141. package/FrameGraph/frameGraphTask.js +12 -0
  142. package/FrameGraph/frameGraphTask.js.map +1 -1
  143. package/Materials/PBR/openpbrMaterial.js +2 -1
  144. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  145. package/Materials/Textures/mirrorTexture.js +4 -1
  146. package/Materials/Textures/mirrorTexture.js.map +1 -1
  147. package/Materials/floatingOriginMatrixOverrides.js +19 -0
  148. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  149. package/Maths/math.like.d.ts +2 -7
  150. package/Maths/math.like.js.map +1 -1
  151. package/Maths/math.vector.functions.d.ts +7 -10
  152. package/Maths/math.vector.functions.js +3 -14
  153. package/Maths/math.vector.functions.js.map +1 -1
  154. package/Meshes/Node/Blocks/randomBlock.js +11 -11
  155. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  156. package/Misc/copyTextureToTexture.d.ts +18 -1
  157. package/Misc/copyTextureToTexture.js +31 -2
  158. package/Misc/copyTextureToTexture.js.map +1 -1
  159. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +3 -3
  160. package/Particles/EmitterTypes/coneParticleEmitter.js +11 -11
  161. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  162. package/Particles/EmitterTypes/customParticleEmitter.d.ts +5 -3
  163. package/Particles/EmitterTypes/customParticleEmitter.js +8 -6
  164. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  165. package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +3 -1
  166. package/Particles/EmitterTypes/sphereParticleEmitter.js +7 -1
  167. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  168. package/Particles/Node/Blocks/Emitters/boxShapeBlock.d.ts +1 -1
  169. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +2 -1
  170. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  171. package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +6 -4
  172. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +34 -35
  173. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  174. package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +0 -4
  175. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +2 -9
  176. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  177. package/Particles/Node/Blocks/Emitters/customShapeBlock.d.ts +13 -9
  178. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +36 -23
  179. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  180. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.d.ts +10 -1
  181. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +50 -17
  182. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  183. package/Particles/Node/Blocks/Emitters/emitters.functions.d.ts +6 -0
  184. package/Particles/Node/Blocks/Emitters/emitters.functions.js +13 -0
  185. package/Particles/Node/Blocks/Emitters/emitters.functions.js.map +1 -0
  186. package/Particles/Node/Blocks/Emitters/meshShapeBlock.d.ts +2 -2
  187. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +5 -1
  188. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  189. package/Particles/Node/Blocks/Emitters/pointShapeBlock.d.ts +1 -1
  190. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +3 -1
  191. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  192. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.d.ts +16 -1
  193. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +67 -14
  194. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  195. package/Particles/Node/Blocks/particleInputBlock.js +1 -0
  196. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  197. package/Particles/Node/Blocks/particleRandomBlock.js +10 -10
  198. package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
  199. package/Particles/Node/Blocks/systemBlock.d.ts +3 -3
  200. package/Particles/Node/Blocks/systemBlock.js +10 -6
  201. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  202. package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +3 -1
  203. package/Particles/Node/Enums/nodeParticleContextualSources.js +2 -0
  204. package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
  205. package/Particles/Node/nodeParticleBuildState.js +5 -0
  206. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  207. package/Particles/Node/nodeParticleSystemSet.helper.js +132 -36
  208. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  209. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  210. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  211. package/Particles/thinParticleSystem.function.d.ts +2 -2
  212. package/Particles/thinParticleSystem.function.js +2 -2
  213. package/Particles/thinParticleSystem.function.js.map +1 -1
  214. package/Physics/v2/IPhysicsEnginePlugin.d.ts +1 -1
  215. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  216. package/Physics/v2/Plugins/havokPlugin.d.ts +27 -4
  217. package/Physics/v2/Plugins/havokPlugin.js +72 -8
  218. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  219. package/Physics/v2/physicsEngine.d.ts +12 -2
  220. package/Physics/v2/physicsEngine.js +15 -1
  221. package/Physics/v2/physicsEngine.js.map +1 -1
  222. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -1
  223. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  224. package/Rendering/prePassRenderer.js +4 -1
  225. package/Rendering/prePassRenderer.js.map +1 -1
  226. package/Shaders/copyTextureToTexture.fragment.js +2 -2
  227. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  228. package/Shaders/picking.fragment.js +1 -1
  229. package/Shaders/picking.fragment.js.map +1 -1
  230. package/Shaders/picking.vertex.js +1 -1
  231. package/Shaders/picking.vertex.js.map +1 -1
  232. package/ShadersWGSL/copyTextureToTexture.fragment.js +3 -3
  233. package/ShadersWGSL/copyTextureToTexture.fragment.js.map +1 -1
  234. package/ShadersWGSL/picking.fragment.js +1 -1
  235. package/ShadersWGSL/picking.fragment.js.map +1 -1
  236. package/ShadersWGSL/picking.vertex.js +1 -1
  237. package/ShadersWGSL/picking.vertex.js.map +1 -1
  238. package/Sprites/spriteRenderer.js +10 -8
  239. package/Sprites/spriteRenderer.js.map +1 -1
  240. package/XR/features/WebXRLightEstimation.d.ts +8 -0
  241. package/XR/features/WebXRLightEstimation.js +6 -1
  242. package/XR/features/WebXRLightEstimation.js.map +1 -1
  243. package/XR/webXRSessionManager.js +4 -0
  244. package/XR/webXRSessionManager.js.map +1 -1
  245. package/assetContainer.d.ts +1 -1
  246. package/assetContainer.js +1 -1
  247. package/assetContainer.js.map +1 -1
  248. package/package.json +1 -1
  249. package/scene.d.ts +2 -4
  250. package/scene.js +9 -12
  251. package/scene.js.map +1 -1
@@ -2,6 +2,7 @@
2
2
  /* eslint-disable @typescript-eslint/naming-convention */
3
3
  import { Matrix, Quaternion, TmpVectors, Vector3 } from "../../../Maths/math.vector.js";
4
4
  import { PhysicsPrestepType, } from "../IPhysicsEnginePlugin.js";
5
+ import { PhysicsRaycastResult } from "../../physicsRaycastResult.js";
5
6
  import { Logger } from "../../../Misc/logger.js";
6
7
  import { PhysicsShape } from "../physicsShape.js";
7
8
  import { BoundingBox } from "../../../Culling/boundingBox.js";
@@ -209,7 +210,7 @@ class TriggerEvent {
209
210
  * The Havok Physics plugin
210
211
  */
211
212
  export class HavokPlugin {
212
- constructor(_useDeltaForWorldStep = true, hpInjection = HK) {
213
+ constructor(_useDeltaForWorldStep = true, hpInjection = HK, parameters = {}) {
213
214
  this._useDeltaForWorldStep = _useDeltaForWorldStep;
214
215
  /**
215
216
  * Reference to the WASM library
@@ -219,7 +220,9 @@ export class HavokPlugin {
219
220
  * Name of the plugin
220
221
  */
221
222
  this.name = "HavokPlugin";
223
+ this._multiQueryCollector = undefined;
222
224
  this._fixedTimeStep = 1 / 60;
225
+ this._maxQueryCollectorHits = 1;
223
226
  this._tmpVec3 = BuildArray(3, Vector3.Zero);
224
227
  this._bodies = new Map();
225
228
  this._shapes = new Map();
@@ -252,6 +255,7 @@ export class HavokPlugin {
252
255
  }
253
256
  this.world = this._hknp.HP_World_Create()[1];
254
257
  this._queryCollector = this._hknp.HP_QueryCollector_Create(1)[1];
258
+ this.setMaxQueryCollectorHits(parameters.maxQueryCollectorHits ?? 1);
255
259
  }
256
260
  /**
257
261
  * If this plugin is supported
@@ -287,6 +291,31 @@ export class HavokPlugin {
287
291
  getTimeStep() {
288
292
  return this._fixedTimeStep;
289
293
  }
294
+ /**
295
+ * Sets the maximum number of raycast hits to process.
296
+ *
297
+ * @param maxQueryCollectorHits - The maximum number of raycast hits to process.
298
+ */
299
+ setMaxQueryCollectorHits(maxQueryCollectorHits) {
300
+ if (maxQueryCollectorHits === this._maxQueryCollectorHits) {
301
+ return;
302
+ }
303
+ if (this._multiQueryCollector) {
304
+ this._hknp.HP_QueryCollector_Release(this._multiQueryCollector);
305
+ this._multiQueryCollector = undefined;
306
+ }
307
+ if (maxQueryCollectorHits > 1) {
308
+ this._multiQueryCollector = this._hknp.HP_QueryCollector_Create(maxQueryCollectorHits)[1];
309
+ }
310
+ }
311
+ /**
312
+ * Gets the maximum number of raycast hits to process.
313
+ *
314
+ * @returns The maximum number of raycast hits to process.
315
+ */
316
+ getMaxQueryCollectorHits() {
317
+ return this._maxQueryCollectorHits;
318
+ }
290
319
  /**
291
320
  * Executes a single step of the physics engine.
292
321
  *
@@ -1870,24 +1899,55 @@ export class HavokPlugin {
1870
1899
  *
1871
1900
  * @param from - The start point of the raycast.
1872
1901
  * @param to - The end point of the raycast.
1873
- * @param result - The PhysicsRaycastResult object to store the result of the raycast.
1902
+ * @param result - The PhysicsRaycastResult object (or array of PhysicsRaycastResults) to store the result of the raycast.
1874
1903
  * @param query - The raycast query options. See [[IRaycastQuery]] for more information.
1875
1904
  *
1876
1905
  * Performs a raycast. It takes in two points, from and to, and a PhysicsRaycastResult object to store the result of the raycast.
1877
1906
  * It then performs the raycast and stores the hit data in the PhysicsRaycastResult object.
1907
+ * If result is an empty array, it will be populated with every detected raycast hit.
1908
+ * If result is a populated array, it will only fill the PhysicsRaycastResults present in the array.
1878
1909
  */
1879
1910
  raycast(from, to, result, query) {
1880
1911
  const queryMembership = query?.membership ?? ~0;
1881
1912
  const queryCollideWith = query?.collideWith ?? ~0;
1882
1913
  const shouldHitTriggers = query?.shouldHitTriggers ?? false;
1883
- result.reset(from, to);
1884
1914
  const bodyToIgnore = query?.ignoreBody ? [BigInt(query.ignoreBody._pluginData.hpBodyId[0])] : [BigInt(0)];
1915
+ const results = Array.isArray(result) ? result : [result];
1916
+ for (const raycastResult of results) {
1917
+ raycastResult.reset(from, to);
1918
+ }
1885
1919
  const hkQuery = [this._bVecToV3(from), this._bVecToV3(to), [queryMembership, queryCollideWith], shouldHitTriggers, bodyToIgnore];
1886
- this._hknp.HP_World_CastRayWithCollector(this.world, this._queryCollector, hkQuery);
1887
- if (this._hknp.HP_QueryCollector_GetNumHits(this._queryCollector)[1] > 0) {
1888
- const [, hitData] = this._hknp.HP_QueryCollector_GetCastRayResult(this._queryCollector, 0)[1];
1889
- this._populateHitData(hitData, result);
1890
- result.calculateHitDistance();
1920
+ const queryCollector = results.length === 1 || !this._multiQueryCollector ? this._queryCollector : this._multiQueryCollector;
1921
+ this._hknp.HP_World_CastRayWithCollector(this.world, queryCollector, hkQuery);
1922
+ const numHits = this._hknp.HP_QueryCollector_GetNumHits(queryCollector)[1];
1923
+ if (numHits <= 0) {
1924
+ return;
1925
+ }
1926
+ if (!results.length) {
1927
+ for (let i = 0; i < numHits; i++) {
1928
+ const raycastResult = new PhysicsRaycastResult();
1929
+ raycastResult.reset(from, to);
1930
+ results.push(raycastResult);
1931
+ }
1932
+ }
1933
+ // QueryCollector results are not sorted by distance, so we need to sort them manually
1934
+ const hitDatas = new Array(numHits);
1935
+ for (let i = 0; i < numHits; i++) {
1936
+ const [, hitData] = this._hknp.HP_QueryCollector_GetCastRayResult(queryCollector, i)[1];
1937
+ const hitPos = hitData[3];
1938
+ from.subtractFromFloatsToRef(hitPos[0], hitPos[1], hitPos[2], this._tmpVec3[0]);
1939
+ const distance = this._tmpVec3[0].lengthSquared();
1940
+ hitDatas[i] = {
1941
+ hitData,
1942
+ distance: distance,
1943
+ };
1944
+ }
1945
+ hitDatas.sort((a, b) => a.distance - b.distance);
1946
+ for (let i = 0; i < Math.min(numHits, results.length); i++) {
1947
+ const raycastResult = results[i];
1948
+ const hitData = hitDatas[i];
1949
+ this._populateHitData(hitData.hitData, raycastResult);
1950
+ raycastResult.setHitDistance(Math.sqrt(hitData.distance));
1891
1951
  }
1892
1952
  }
1893
1953
  /**
@@ -2137,6 +2197,10 @@ export class HavokPlugin {
2137
2197
  this._hknp.HP_QueryCollector_Release(this._queryCollector);
2138
2198
  this._queryCollector = undefined;
2139
2199
  }
2200
+ if (this._multiQueryCollector) {
2201
+ this._hknp.HP_QueryCollector_Release(this._multiQueryCollector);
2202
+ this._multiQueryCollector;
2203
+ }
2140
2204
  if (this.world) {
2141
2205
  this._hknp.HP_World_Release(this.world);
2142
2206
  this.world = undefined;