@bloomengine/engine 0.3.1

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 (562) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +169 -0
  3. package/native/android/Cargo.lock +1848 -0
  4. package/native/android/Cargo.toml +20 -0
  5. package/native/android/src/lib.rs +1747 -0
  6. package/native/ios/Cargo.lock +1688 -0
  7. package/native/ios/Cargo.toml +19 -0
  8. package/native/ios/src/lib.rs +2258 -0
  9. package/native/linux/Cargo.lock +1719 -0
  10. package/native/linux/Cargo.toml +22 -0
  11. package/native/linux/src/lib.rs +2236 -0
  12. package/native/macos/Cargo.lock +3310 -0
  13. package/native/macos/Cargo.toml +29 -0
  14. package/native/macos/src/lib.rs +3444 -0
  15. package/native/shared/Cargo.lock +1898 -0
  16. package/native/shared/Cargo.toml +42 -0
  17. package/native/shared/assets/default_font.ttf +0 -0
  18. package/native/shared/build.rs +77 -0
  19. package/native/shared/shaders/common/fog.wgsl +16 -0
  20. package/native/shared/shaders/common/imposter.wgsl +112 -0
  21. package/native/shared/shaders/common/pbr.wgsl +186 -0
  22. package/native/shared/shaders/common/shadows.wgsl +77 -0
  23. package/native/shared/shaders/common/sky.wgsl +8 -0
  24. package/native/shared/shaders/common/tonemap.wgsl +25 -0
  25. package/native/shared/shaders/impulse_field.wgsl +53 -0
  26. package/native/shared/shaders/material_abi.wgsl +360 -0
  27. package/native/shared/shaders/materials/test_minimal.wgsl +42 -0
  28. package/native/shared/src/audio.rs +363 -0
  29. package/native/shared/src/custom_shaders.rs +104 -0
  30. package/native/shared/src/drs.rs +211 -0
  31. package/native/shared/src/engine.rs +186 -0
  32. package/native/shared/src/frame_callbacks.rs +88 -0
  33. package/native/shared/src/geometry.rs +236 -0
  34. package/native/shared/src/handles.rs +76 -0
  35. package/native/shared/src/input.rs +273 -0
  36. package/native/shared/src/jolt_sys.rs +822 -0
  37. package/native/shared/src/lib.rs +43 -0
  38. package/native/shared/src/models.rs +1941 -0
  39. package/native/shared/src/physics_jolt.rs +1528 -0
  40. package/native/shared/src/picking.rs +298 -0
  41. package/native/shared/src/postfx.rs +339 -0
  42. package/native/shared/src/profiler.rs +416 -0
  43. package/native/shared/src/renderer/atmosphere_lut.rs +573 -0
  44. package/native/shared/src/renderer/brdf_lut.rs +154 -0
  45. package/native/shared/src/renderer/formats.rs +778 -0
  46. package/native/shared/src/renderer/graph.rs +465 -0
  47. package/native/shared/src/renderer/hot_reload.rs +390 -0
  48. package/native/shared/src/renderer/impulse_field.rs +455 -0
  49. package/native/shared/src/renderer/material_pipeline.rs +604 -0
  50. package/native/shared/src/renderer/material_system.rs +2106 -0
  51. package/native/shared/src/renderer/mod.rs +13923 -0
  52. package/native/shared/src/renderer/planar_reflection.rs +458 -0
  53. package/native/shared/src/renderer/post_pass.rs +249 -0
  54. package/native/shared/src/renderer/shader_include.rs +205 -0
  55. package/native/shared/src/renderer/shader_library.rs +134 -0
  56. package/native/shared/src/renderer/shaders.rs +5855 -0
  57. package/native/shared/src/renderer/transient.rs +576 -0
  58. package/native/shared/src/renderer/types.rs +259 -0
  59. package/native/shared/src/renderer/util.rs +151 -0
  60. package/native/shared/src/scene.rs +1066 -0
  61. package/native/shared/src/sdf_cache.rs +274 -0
  62. package/native/shared/src/shadows.rs +551 -0
  63. package/native/shared/src/staging.rs +90 -0
  64. package/native/shared/src/string_header.rs +35 -0
  65. package/native/shared/src/text_renderer.rs +456 -0
  66. package/native/shared/src/textures.rs +154 -0
  67. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.cpp +242 -0
  68. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.h +121 -0
  69. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeToBuffer.h +296 -0
  70. package/native/third_party/JoltPhysics/Jolt/AABBTree/NodeCodec/NodeCodecQuadTreeHalfFloat.h +323 -0
  71. package/native/third_party/JoltPhysics/Jolt/AABBTree/TriangleCodec/TriangleCodecIndexed8BitPackSOA4Flags.h +555 -0
  72. package/native/third_party/JoltPhysics/Jolt/ConfigurationString.h +112 -0
  73. package/native/third_party/JoltPhysics/Jolt/Core/ARMNeon.h +94 -0
  74. package/native/third_party/JoltPhysics/Jolt/Core/Array.h +713 -0
  75. package/native/third_party/JoltPhysics/Jolt/Core/Atomics.h +44 -0
  76. package/native/third_party/JoltPhysics/Jolt/Core/BinaryHeap.h +96 -0
  77. package/native/third_party/JoltPhysics/Jolt/Core/ByteBuffer.h +74 -0
  78. package/native/third_party/JoltPhysics/Jolt/Core/Color.cpp +38 -0
  79. package/native/third_party/JoltPhysics/Jolt/Core/Color.h +98 -0
  80. package/native/third_party/JoltPhysics/Jolt/Core/Core.h +652 -0
  81. package/native/third_party/JoltPhysics/Jolt/Core/FPControlWord.h +143 -0
  82. package/native/third_party/JoltPhysics/Jolt/Core/FPException.h +96 -0
  83. package/native/third_party/JoltPhysics/Jolt/Core/FPFlushDenormals.h +43 -0
  84. package/native/third_party/JoltPhysics/Jolt/Core/Factory.cpp +92 -0
  85. package/native/third_party/JoltPhysics/Jolt/Core/Factory.h +54 -0
  86. package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.h +122 -0
  87. package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.inl +215 -0
  88. package/native/third_party/JoltPhysics/Jolt/Core/HashCombine.h +234 -0
  89. package/native/third_party/JoltPhysics/Jolt/Core/HashTable.h +876 -0
  90. package/native/third_party/JoltPhysics/Jolt/Core/InsertionSort.h +58 -0
  91. package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.cpp +27 -0
  92. package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.h +38 -0
  93. package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.h +311 -0
  94. package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.inl +56 -0
  95. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.cpp +65 -0
  96. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.h +62 -0
  97. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.cpp +364 -0
  98. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.h +101 -0
  99. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.cpp +230 -0
  100. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.h +85 -0
  101. package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.cpp +51 -0
  102. package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.h +67 -0
  103. package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.h +182 -0
  104. package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.inl +351 -0
  105. package/native/third_party/JoltPhysics/Jolt/Core/Memory.cpp +85 -0
  106. package/native/third_party/JoltPhysics/Jolt/Core/Memory.h +85 -0
  107. package/native/third_party/JoltPhysics/Jolt/Core/Mutex.h +223 -0
  108. package/native/third_party/JoltPhysics/Jolt/Core/MutexArray.h +98 -0
  109. package/native/third_party/JoltPhysics/Jolt/Core/NonCopyable.h +18 -0
  110. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.cpp +677 -0
  111. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.h +301 -0
  112. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.inl +90 -0
  113. package/native/third_party/JoltPhysics/Jolt/Core/QuickSort.h +137 -0
  114. package/native/third_party/JoltPhysics/Jolt/Core/RTTI.cpp +149 -0
  115. package/native/third_party/JoltPhysics/Jolt/Core/RTTI.h +436 -0
  116. package/native/third_party/JoltPhysics/Jolt/Core/Reference.h +244 -0
  117. package/native/third_party/JoltPhysics/Jolt/Core/Result.h +174 -0
  118. package/native/third_party/JoltPhysics/Jolt/Core/STLAlignedAllocator.h +72 -0
  119. package/native/third_party/JoltPhysics/Jolt/Core/STLAllocator.h +127 -0
  120. package/native/third_party/JoltPhysics/Jolt/Core/STLLocalAllocator.h +170 -0
  121. package/native/third_party/JoltPhysics/Jolt/Core/STLTempAllocator.h +80 -0
  122. package/native/third_party/JoltPhysics/Jolt/Core/ScopeExit.h +49 -0
  123. package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.cpp +135 -0
  124. package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.h +68 -0
  125. package/native/third_party/JoltPhysics/Jolt/Core/StaticArray.h +329 -0
  126. package/native/third_party/JoltPhysics/Jolt/Core/StreamIn.h +120 -0
  127. package/native/third_party/JoltPhysics/Jolt/Core/StreamOut.h +97 -0
  128. package/native/third_party/JoltPhysics/Jolt/Core/StreamUtils.h +168 -0
  129. package/native/third_party/JoltPhysics/Jolt/Core/StreamWrapper.h +53 -0
  130. package/native/third_party/JoltPhysics/Jolt/Core/StridedPtr.h +63 -0
  131. package/native/third_party/JoltPhysics/Jolt/Core/StringTools.cpp +101 -0
  132. package/native/third_party/JoltPhysics/Jolt/Core/StringTools.h +38 -0
  133. package/native/third_party/JoltPhysics/Jolt/Core/TempAllocator.h +209 -0
  134. package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.cpp +37 -0
  135. package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.h +58 -0
  136. package/native/third_party/JoltPhysics/Jolt/Core/UnorderedMap.h +80 -0
  137. package/native/third_party/JoltPhysics/Jolt/Core/UnorderedSet.h +32 -0
  138. package/native/third_party/JoltPhysics/Jolt/Geometry/AABox.h +313 -0
  139. package/native/third_party/JoltPhysics/Jolt/Geometry/AABox4.h +224 -0
  140. package/native/third_party/JoltPhysics/Jolt/Geometry/ClipPoly.h +200 -0
  141. package/native/third_party/JoltPhysics/Jolt/Geometry/ClosestPoint.h +498 -0
  142. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.cpp +1467 -0
  143. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.h +276 -0
  144. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.cpp +335 -0
  145. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.h +105 -0
  146. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexSupport.h +188 -0
  147. package/native/third_party/JoltPhysics/Jolt/Geometry/EPAConvexHullBuilder.h +845 -0
  148. package/native/third_party/JoltPhysics/Jolt/Geometry/EPAPenetrationDepth.h +557 -0
  149. package/native/third_party/JoltPhysics/Jolt/Geometry/Ellipse.h +77 -0
  150. package/native/third_party/JoltPhysics/Jolt/Geometry/GJKClosestPoint.h +945 -0
  151. package/native/third_party/JoltPhysics/Jolt/Geometry/IndexedTriangle.h +130 -0
  152. package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.cpp +222 -0
  153. package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.h +19 -0
  154. package/native/third_party/JoltPhysics/Jolt/Geometry/MortonCode.h +40 -0
  155. package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.cpp +178 -0
  156. package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.h +39 -0
  157. package/native/third_party/JoltPhysics/Jolt/Geometry/Plane.h +104 -0
  158. package/native/third_party/JoltPhysics/Jolt/Geometry/RayAABox.h +241 -0
  159. package/native/third_party/JoltPhysics/Jolt/Geometry/RayCapsule.h +37 -0
  160. package/native/third_party/JoltPhysics/Jolt/Geometry/RayCylinder.h +101 -0
  161. package/native/third_party/JoltPhysics/Jolt/Geometry/RaySphere.h +96 -0
  162. package/native/third_party/JoltPhysics/Jolt/Geometry/RayTriangle.h +158 -0
  163. package/native/third_party/JoltPhysics/Jolt/Geometry/Sphere.h +72 -0
  164. package/native/third_party/JoltPhysics/Jolt/Geometry/Triangle.h +34 -0
  165. package/native/third_party/JoltPhysics/Jolt/Jolt.cmake +703 -0
  166. package/native/third_party/JoltPhysics/Jolt/Jolt.h +16 -0
  167. package/native/third_party/JoltPhysics/Jolt/Jolt.natvis +116 -0
  168. package/native/third_party/JoltPhysics/Jolt/Math/BVec16.h +99 -0
  169. package/native/third_party/JoltPhysics/Jolt/Math/BVec16.inl +177 -0
  170. package/native/third_party/JoltPhysics/Jolt/Math/DMat44.h +158 -0
  171. package/native/third_party/JoltPhysics/Jolt/Math/DMat44.inl +310 -0
  172. package/native/third_party/JoltPhysics/Jolt/Math/DVec3.h +291 -0
  173. package/native/third_party/JoltPhysics/Jolt/Math/DVec3.inl +941 -0
  174. package/native/third_party/JoltPhysics/Jolt/Math/Double3.h +48 -0
  175. package/native/third_party/JoltPhysics/Jolt/Math/DynMatrix.h +31 -0
  176. package/native/third_party/JoltPhysics/Jolt/Math/EigenValueSymmetric.h +177 -0
  177. package/native/third_party/JoltPhysics/Jolt/Math/FindRoot.h +42 -0
  178. package/native/third_party/JoltPhysics/Jolt/Math/Float2.h +36 -0
  179. package/native/third_party/JoltPhysics/Jolt/Math/Float3.h +50 -0
  180. package/native/third_party/JoltPhysics/Jolt/Math/Float4.h +44 -0
  181. package/native/third_party/JoltPhysics/Jolt/Math/GaussianElimination.h +102 -0
  182. package/native/third_party/JoltPhysics/Jolt/Math/HalfFloat.h +208 -0
  183. package/native/third_party/JoltPhysics/Jolt/Math/Mat44.h +243 -0
  184. package/native/third_party/JoltPhysics/Jolt/Math/Mat44.inl +952 -0
  185. package/native/third_party/JoltPhysics/Jolt/Math/Math.h +208 -0
  186. package/native/third_party/JoltPhysics/Jolt/Math/MathTypes.h +32 -0
  187. package/native/third_party/JoltPhysics/Jolt/Math/Matrix.h +259 -0
  188. package/native/third_party/JoltPhysics/Jolt/Math/Quat.h +268 -0
  189. package/native/third_party/JoltPhysics/Jolt/Math/Quat.inl +406 -0
  190. package/native/third_party/JoltPhysics/Jolt/Math/Real.h +44 -0
  191. package/native/third_party/JoltPhysics/Jolt/Math/Swizzle.h +19 -0
  192. package/native/third_party/JoltPhysics/Jolt/Math/Trigonometry.h +79 -0
  193. package/native/third_party/JoltPhysics/Jolt/Math/UVec4.h +232 -0
  194. package/native/third_party/JoltPhysics/Jolt/Math/UVec4.inl +636 -0
  195. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.cpp +71 -0
  196. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.h +308 -0
  197. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.inl +942 -0
  198. package/native/third_party/JoltPhysics/Jolt/Math/Vec4.h +320 -0
  199. package/native/third_party/JoltPhysics/Jolt/Math/Vec4.inl +1152 -0
  200. package/native/third_party/JoltPhysics/Jolt/Math/Vector.h +211 -0
  201. package/native/third_party/JoltPhysics/Jolt/ObjectStream/GetPrimitiveTypeOfType.h +54 -0
  202. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.cpp +38 -0
  203. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.h +337 -0
  204. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.cpp +252 -0
  205. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.h +57 -0
  206. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.cpp +165 -0
  207. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.h +57 -0
  208. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.cpp +635 -0
  209. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.h +148 -0
  210. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.cpp +166 -0
  211. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.h +101 -0
  212. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.cpp +418 -0
  213. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.h +55 -0
  214. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.cpp +255 -0
  215. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.h +62 -0
  216. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTypes.h +26 -0
  217. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttribute.h +111 -0
  218. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeEnum.h +67 -0
  219. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeTyped.h +60 -0
  220. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.cpp +15 -0
  221. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.h +170 -0
  222. package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.cpp +70 -0
  223. package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.h +45 -0
  224. package/native/third_party/JoltPhysics/Jolt/Physics/Body/AllowedDOFs.h +68 -0
  225. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.cpp +426 -0
  226. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.h +452 -0
  227. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.inl +197 -0
  228. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyAccess.h +68 -0
  229. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyActivationListener.h +28 -0
  230. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.cpp +234 -0
  231. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.h +124 -0
  232. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyFilter.h +130 -0
  233. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyID.h +101 -0
  234. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.cpp +1099 -0
  235. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.h +324 -0
  236. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLock.h +111 -0
  237. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockInterface.h +134 -0
  238. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockMulti.h +120 -0
  239. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.cpp +1220 -0
  240. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.h +403 -0
  241. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyPair.h +36 -0
  242. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyType.h +19 -0
  243. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.cpp +185 -0
  244. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.h +58 -0
  245. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.cpp +92 -0
  246. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.h +308 -0
  247. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.inl +178 -0
  248. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionQuality.h +31 -0
  249. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionType.h +17 -0
  250. package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.cpp +354 -0
  251. package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.h +159 -0
  252. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.cpp +59 -0
  253. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.h +157 -0
  254. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterID.h +98 -0
  255. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.cpp +1933 -0
  256. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.h +752 -0
  257. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/AABoxCast.h +20 -0
  258. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdgeMode.h +17 -0
  259. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdges.h +114 -0
  260. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BackFaceMode.h +16 -0
  261. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.cpp +16 -0
  262. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.h +109 -0
  263. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp +313 -0
  264. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.h +38 -0
  265. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h +148 -0
  266. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceMask.h +92 -0
  267. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceTable.h +64 -0
  268. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp +629 -0
  269. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.h +108 -0
  270. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h +56 -0
  271. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterMask.h +35 -0
  272. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterTable.h +66 -0
  273. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.cpp +1768 -0
  274. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.h +389 -0
  275. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.cpp +107 -0
  276. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.h +46 -0
  277. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastResult.h +37 -0
  278. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.cpp +223 -0
  279. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.h +49 -0
  280. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollectFacesMode.h +16 -0
  281. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.cpp +155 -0
  282. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.h +56 -0
  283. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollidePointResult.h +25 -0
  284. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShape.h +106 -0
  285. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShapeVsShapePerLeaf.h +94 -0
  286. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVertexIterator.h +110 -0
  287. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVerticesVsTriangles.h +102 -0
  288. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.cpp +121 -0
  289. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.h +50 -0
  290. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollector.h +109 -0
  291. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollectorImpl.h +219 -0
  292. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.cpp +107 -0
  293. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.h +97 -0
  294. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.cpp +35 -0
  295. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.h +97 -0
  296. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ContactListener.h +143 -0
  297. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.cpp +213 -0
  298. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.h +48 -0
  299. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.cpp +32 -0
  300. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.h +46 -0
  301. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.cpp +38 -0
  302. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.h +130 -0
  303. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/InternalEdgeRemovingCollector.h +279 -0
  304. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.cpp +271 -0
  305. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.h +44 -0
  306. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.cpp +448 -0
  307. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.h +77 -0
  308. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.cpp +62 -0
  309. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.h +110 -0
  310. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayer.h +111 -0
  311. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterMask.h +52 -0
  312. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterTable.h +78 -0
  313. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.cpp +35 -0
  314. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.h +57 -0
  315. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.cpp +38 -0
  316. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.h +37 -0
  317. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/RayCast.h +87 -0
  318. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.cpp +318 -0
  319. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.h +115 -0
  320. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.cpp +438 -0
  321. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.h +129 -0
  322. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.cpp +433 -0
  323. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.h +354 -0
  324. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShapeVisitors.h +461 -0
  325. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.cpp +1311 -0
  326. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.h +202 -0
  327. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.cpp +566 -0
  328. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.h +150 -0
  329. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.cpp +418 -0
  330. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.h +126 -0
  331. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.cpp +87 -0
  332. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.h +80 -0
  333. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.cpp +64 -0
  334. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.h +75 -0
  335. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/GetTrianglesContext.h +248 -0
  336. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.cpp +2754 -0
  337. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.h +380 -0
  338. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.cpp +1305 -0
  339. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.h +228 -0
  340. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.cpp +596 -0
  341. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.h +176 -0
  342. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp +217 -0
  343. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.h +140 -0
  344. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.cpp +541 -0
  345. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.h +147 -0
  346. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PolyhedronSubmergedVolumeCalculator.h +319 -0
  347. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.cpp +333 -0
  348. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.h +161 -0
  349. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaleHelpers.h +83 -0
  350. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.cpp +238 -0
  351. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.h +145 -0
  352. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.cpp +325 -0
  353. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.h +466 -0
  354. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.cpp +347 -0
  355. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.h +125 -0
  356. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.cpp +674 -0
  357. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.h +139 -0
  358. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeID.h +138 -0
  359. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeIDPair.h +65 -0
  360. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.cpp +453 -0
  361. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.gliffy +1 -0
  362. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.h +135 -0
  363. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.cpp +691 -0
  364. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.h +132 -0
  365. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.cpp +430 -0
  366. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.h +143 -0
  367. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeCast.h +173 -0
  368. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeFilter.h +73 -0
  369. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilter.h +40 -0
  370. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilterWrapper.h +58 -0
  371. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SortReverseAndStore.h +48 -0
  372. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.cpp +180 -0
  373. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.h +194 -0
  374. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/CalculateSolverSteps.h +70 -0
  375. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.cpp +246 -0
  376. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.h +133 -0
  377. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.cpp +73 -0
  378. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.h +243 -0
  379. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.cpp +289 -0
  380. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.h +100 -0
  381. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AngleConstraintPart.h +257 -0
  382. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AxisConstraintPart.h +682 -0
  383. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h +276 -0
  384. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/GearConstraintPart.h +195 -0
  385. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h +222 -0
  386. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/IndependentAxisConstraintPart.h +246 -0
  387. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/PointConstraintPart.h +239 -0
  388. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RackAndPinionConstraintPart.h +196 -0
  389. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h +283 -0
  390. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationQuatConstraintPart.h +246 -0
  391. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SpringPart.h +169 -0
  392. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h +597 -0
  393. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.cpp +1804 -0
  394. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.h +524 -0
  395. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.cpp +266 -0
  396. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.h +120 -0
  397. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.cpp +215 -0
  398. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.h +96 -0
  399. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.cpp +188 -0
  400. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.h +116 -0
  401. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.cpp +443 -0
  402. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.h +205 -0
  403. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.cpp +43 -0
  404. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.h +66 -0
  405. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.cpp +458 -0
  406. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.h +191 -0
  407. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.cpp +85 -0
  408. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.h +76 -0
  409. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.cpp +308 -0
  410. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.h +54 -0
  411. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.cpp +157 -0
  412. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.h +94 -0
  413. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.cpp +253 -0
  414. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.h +137 -0
  415. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.cpp +189 -0
  416. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.h +118 -0
  417. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.cpp +900 -0
  418. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.h +289 -0
  419. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.cpp +501 -0
  420. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.h +198 -0
  421. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.cpp +35 -0
  422. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.h +70 -0
  423. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.cpp +524 -0
  424. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.h +197 -0
  425. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.cpp +56 -0
  426. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.h +65 -0
  427. package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.cpp +17 -0
  428. package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.h +159 -0
  429. package/native/third_party/JoltPhysics/Jolt/Physics/EActivation.h +16 -0
  430. package/native/third_party/JoltPhysics/Jolt/Physics/EPhysicsUpdateError.h +37 -0
  431. package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.cpp +492 -0
  432. package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.h +144 -0
  433. package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.cpp +582 -0
  434. package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.h +187 -0
  435. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsLock.h +169 -0
  436. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.cpp +261 -0
  437. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.h +104 -0
  438. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSettings.h +125 -0
  439. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsStepListener.h +37 -0
  440. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.cpp +2915 -0
  441. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.h +391 -0
  442. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.cpp +25 -0
  443. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.h +176 -0
  444. package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.cpp +744 -0
  445. package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.h +245 -0
  446. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyContactListener.h +55 -0
  447. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp +128 -0
  448. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.h +75 -0
  449. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyManifold.h +74 -0
  450. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.cpp +1501 -0
  451. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.h +333 -0
  452. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.cpp +354 -0
  453. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.h +73 -0
  454. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.cpp +1487 -0
  455. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.h +390 -0
  456. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyUpdateContext.h +63 -0
  457. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyVertex.h +36 -0
  458. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorder.h +136 -0
  459. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.cpp +90 -0
  460. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.h +50 -0
  461. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.cpp +306 -0
  462. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.h +119 -0
  463. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.cpp +547 -0
  464. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.h +169 -0
  465. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.cpp +33 -0
  466. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.h +33 -0
  467. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.cpp +376 -0
  468. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.h +146 -0
  469. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.cpp +703 -0
  470. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.h +252 -0
  471. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.cpp +17 -0
  472. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.h +87 -0
  473. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.cpp +81 -0
  474. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.h +39 -0
  475. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.cpp +122 -0
  476. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.h +93 -0
  477. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.cpp +52 -0
  478. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.h +56 -0
  479. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.cpp +159 -0
  480. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.h +87 -0
  481. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.cpp +93 -0
  482. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.h +148 -0
  483. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.cpp +866 -0
  484. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.h +205 -0
  485. package/native/third_party/JoltPhysics/Jolt/RegisterTypes.cpp +204 -0
  486. package/native/third_party/JoltPhysics/Jolt/RegisterTypes.h +29 -0
  487. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.cpp +1107 -0
  488. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.h +383 -0
  489. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.cpp +168 -0
  490. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.h +48 -0
  491. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.cpp +158 -0
  492. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.h +130 -0
  493. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.cpp +80 -0
  494. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.h +88 -0
  495. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.cpp +165 -0
  496. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.h +91 -0
  497. package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.cpp +82 -0
  498. package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.h +72 -0
  499. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.cpp +237 -0
  500. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.h +145 -0
  501. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.cpp +87 -0
  502. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.h +82 -0
  503. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.cpp +73 -0
  504. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.h +84 -0
  505. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.cpp +139 -0
  506. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.h +52 -0
  507. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.cpp +43 -0
  508. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.h +28 -0
  509. package/native/third_party/JoltPhysics/LICENSE +7 -0
  510. package/native/third_party/JoltPhysics/README.md +173 -0
  511. package/native/third_party/bloom_jolt/CMakeLists.txt +78 -0
  512. package/native/third_party/bloom_jolt/include/bloom_jolt.h +519 -0
  513. package/native/third_party/bloom_jolt/src/bloom_jolt.cpp +1780 -0
  514. package/native/tvos/Cargo.lock +1692 -0
  515. package/native/tvos/Cargo.toml +22 -0
  516. package/native/tvos/src/lib.rs +3179 -0
  517. package/native/watchos/Cargo.lock +16 -0
  518. package/native/watchos/Cargo.toml +19 -0
  519. package/native/watchos/shaders/bloom_postfx.metal +99 -0
  520. package/native/watchos/src/BloomWatchApp.swift +1236 -0
  521. package/native/watchos/src/BloomWatchAudio.swift +179 -0
  522. package/native/watchos/src/audio.rs +55 -0
  523. package/native/watchos/src/draw_list.rs +223 -0
  524. package/native/watchos/src/ffi_stubs.rs +454 -0
  525. package/native/watchos/src/lib.rs +1013 -0
  526. package/native/watchos/src/models.rs +746 -0
  527. package/native/watchos/src/postfx.rs +91 -0
  528. package/native/watchos/src/scene.rs +534 -0
  529. package/native/watchos/src/textures.rs +184 -0
  530. package/native/web/Cargo.lock +1656 -0
  531. package/native/web/Cargo.toml +38 -0
  532. package/native/web/bloom_glue.js +218 -0
  533. package/native/web/build.sh +101 -0
  534. package/native/web/index.html +390 -0
  535. package/native/web/jolt_bridge.js +1311 -0
  536. package/native/web/src/lib.rs +2739 -0
  537. package/native/windows/Cargo.lock +1813 -0
  538. package/native/windows/Cargo.toml +31 -0
  539. package/native/windows/src/lib.rs +1933 -0
  540. package/package.json +558 -0
  541. package/src/audio/index.ts +151 -0
  542. package/src/core/colors.ts +56 -0
  543. package/src/core/index.ts +903 -0
  544. package/src/core/keys.ts +63 -0
  545. package/src/core/types.ts +102 -0
  546. package/src/index.ts +158 -0
  547. package/src/math/index.ts +502 -0
  548. package/src/mobile/index.ts +294 -0
  549. package/src/models/index.ts +859 -0
  550. package/src/physics/index.ts +1072 -0
  551. package/src/scene/index.ts +570 -0
  552. package/src/shapes/index.ts +120 -0
  553. package/src/text/index.ts +48 -0
  554. package/src/textures/index.ts +173 -0
  555. package/src/world/index.ts +22 -0
  556. package/src/world/loader.ts +385 -0
  557. package/src/world/prefab.ts +205 -0
  558. package/src/world/saver.ts +61 -0
  559. package/src/world/terrain.ts +254 -0
  560. package/src/world/types.ts +136 -0
  561. package/src/world/validate.ts +202 -0
  562. package/src/world/version.ts +47 -0
@@ -0,0 +1,1072 @@
1
+ // ============================================================================
2
+ // Physics v2 — Jolt-backed API
3
+ // ============================================================================
4
+ //
5
+ // Shape/body separation: shapes are reusable geometry; bodies hold motion
6
+ // state + reference a shape. Matches Jolt's model.
7
+ //
8
+ // Handles are 1-based f64 indices (see HandleRegistry on the Rust side).
9
+ // 0 = invalid.
10
+ //
11
+ // Complex shape types (convex hull, triangle mesh, heightfield) use the
12
+ // scratch-buffer FFI: push the raw floats/indices via bloom_physics_scratch_*
13
+ // then call the shape factory. Compound shapes use a begin/add/end builder.
14
+
15
+ // ============================================================
16
+ // FFI declarations
17
+ // ============================================================
18
+
19
+ // --- World ---
20
+ declare function bloom_physics_create_world(gx: number, gy: number, gz: number, maxBodies: number, numThreads: number): number;
21
+ declare function bloom_physics_destroy_world(world: number): void;
22
+ declare function bloom_physics_set_gravity(world: number, gx: number, gy: number, gz: number): void;
23
+ declare function bloom_physics_get_gravity(world: number, axis: number): number;
24
+ declare function bloom_physics_optimize_broadphase(world: number): void;
25
+ declare function bloom_physics_step(world: number, dt: number, collisionSteps: number): void;
26
+ declare function bloom_physics_set_layer_collides(world: number, a: number, b: number, collides: number): void;
27
+ declare function bloom_physics_get_layer_collides(world: number, a: number, b: number): number;
28
+ declare function bloom_physics_body_count(world: number): number;
29
+ declare function bloom_physics_active_body_count(world: number): number;
30
+
31
+ // --- Shapes ---
32
+ declare function bloom_physics_shape_box(hx: number, hy: number, hz: number, convexRadius: number): number;
33
+ declare function bloom_physics_shape_sphere(r: number): number;
34
+ declare function bloom_physics_shape_capsule(h: number, r: number): number;
35
+ declare function bloom_physics_shape_cylinder(h: number, r: number, cr: number): number;
36
+ declare function bloom_physics_shape_scaled(base: number, sx: number, sy: number, sz: number): number;
37
+ declare function bloom_physics_shape_offset_com(base: number, ox: number, oy: number, oz: number): number;
38
+ declare function bloom_physics_shape_release(shape: number): void;
39
+ declare function bloom_physics_shape_bounds(shape: number, axis: number): number;
40
+ declare function bloom_physics_shape_volume(shape: number): number;
41
+
42
+ // --- Bodies ---
43
+ declare function bloom_physics_body_create(
44
+ world: number, shape: number, motionType: number,
45
+ px: number, py: number, pz: number,
46
+ rx: number, ry: number, rz: number, rw: number,
47
+ layer: number,
48
+ ): number;
49
+ declare function bloom_physics_body_destroy(body: number): void;
50
+ declare function bloom_physics_body_activate(body: number): void;
51
+ declare function bloom_physics_body_deactivate(body: number): void;
52
+ declare function bloom_physics_body_is_active(body: number): number;
53
+ declare function bloom_physics_body_is_valid(body: number): number;
54
+
55
+ declare function bloom_physics_body_get_position(body: number, axis: number): number;
56
+ declare function bloom_physics_body_get_rotation(body: number, axis: number): number;
57
+ declare function bloom_physics_body_set_position(body: number, x: number, y: number, z: number, activate: number): void;
58
+ declare function bloom_physics_body_set_rotation(body: number, x: number, y: number, z: number, w: number, activate: number): void;
59
+ declare function bloom_physics_body_set_transform(
60
+ body: number, px: number, py: number, pz: number,
61
+ rx: number, ry: number, rz: number, rw: number, activate: number,
62
+ ): void;
63
+ declare function bloom_physics_body_move_kinematic(
64
+ body: number, px: number, py: number, pz: number,
65
+ rx: number, ry: number, rz: number, rw: number, dt: number,
66
+ ): void;
67
+
68
+ declare function bloom_physics_body_get_linear_velocity(body: number, axis: number): number;
69
+ declare function bloom_physics_body_get_angular_velocity(body: number, axis: number): number;
70
+ declare function bloom_physics_body_get_point_velocity(body: number, px: number, py: number, pz: number, axis: number): number;
71
+ declare function bloom_physics_body_set_linear_velocity(body: number, x: number, y: number, z: number): void;
72
+ declare function bloom_physics_body_set_angular_velocity(body: number, x: number, y: number, z: number): void;
73
+
74
+ declare function bloom_physics_body_add_force(body: number, x: number, y: number, z: number): void;
75
+ declare function bloom_physics_body_add_impulse(body: number, x: number, y: number, z: number): void;
76
+ declare function bloom_physics_body_add_torque(body: number, x: number, y: number, z: number): void;
77
+ declare function bloom_physics_body_add_angular_impulse(body: number, x: number, y: number, z: number): void;
78
+ declare function bloom_physics_body_add_force_at(body: number, fx: number, fy: number, fz: number, px: number, py: number, pz: number): void;
79
+ declare function bloom_physics_body_add_impulse_at(body: number, ix: number, iy: number, iz: number, px: number, py: number, pz: number): void;
80
+
81
+ declare function bloom_physics_body_set_friction(body: number, v: number): void;
82
+ declare function bloom_physics_body_set_restitution(body: number, v: number): void;
83
+ declare function bloom_physics_body_set_linear_damping(body: number, v: number): void;
84
+ declare function bloom_physics_body_set_angular_damping(body: number, v: number): void;
85
+ declare function bloom_physics_body_set_gravity_factor(body: number, v: number): void;
86
+ declare function bloom_physics_body_set_ccd(body: number, enabled: number): void;
87
+ declare function bloom_physics_body_set_motion_type(body: number, t: number, activate: number): void;
88
+ declare function bloom_physics_body_set_object_layer(body: number, layer: number): void;
89
+ declare function bloom_physics_body_set_is_sensor(body: number, enabled: number): void;
90
+ declare function bloom_physics_body_set_allow_sleeping(body: number, enabled: number): void;
91
+ declare function bloom_physics_body_set_shape(body: number, shape: number, updateMass: number, activate: number): void;
92
+ declare function bloom_physics_body_lock_rotation_axes(body: number, x: number, y: number, z: number): void;
93
+ declare function bloom_physics_body_lock_translation_axes(body: number, x: number, y: number, z: number): void;
94
+
95
+ declare function bloom_physics_body_get_mass(body: number): number;
96
+ declare function bloom_physics_body_get_friction(body: number): number;
97
+ declare function bloom_physics_body_get_restitution(body: number): number;
98
+ declare function bloom_physics_body_get_object_layer(body: number): number;
99
+ declare function bloom_physics_body_set_user_data(body: number, lo: number, hi: number): void;
100
+ declare function bloom_physics_body_get_user_data(body: number, part: number): number;
101
+
102
+ // --- Queries ---
103
+ declare function bloom_physics_raycast(
104
+ world: number, ox: number, oy: number, oz: number,
105
+ dx: number, dy: number, dz: number, maxDist: number, layerMask: number,
106
+ ): number;
107
+ declare function bloom_physics_raycast_all(
108
+ world: number, ox: number, oy: number, oz: number,
109
+ dx: number, dy: number, dz: number, maxDist: number, layerMask: number, maxHits: number,
110
+ ): number;
111
+ declare function bloom_physics_ray_hit_count(): number;
112
+ declare function bloom_physics_ray_hit_body(i: number): number;
113
+ declare function bloom_physics_ray_hit_axis(i: number, field: number): number;
114
+ declare function bloom_physics_ray_hit_fraction(i: number): number;
115
+ declare function bloom_physics_ray_hit_sub_shape(i: number): number;
116
+
117
+ declare function bloom_physics_overlap_sphere(world: number, cx: number, cy: number, cz: number, r: number, layerMask: number, maxResults: number): number;
118
+ declare function bloom_physics_overlap_point(world: number, px: number, py: number, pz: number, layerMask: number, maxResults: number): number;
119
+ declare function bloom_physics_overlap_box(
120
+ world: number, px: number, py: number, pz: number,
121
+ rx: number, ry: number, rz: number, rw: number,
122
+ hx: number, hy: number, hz: number,
123
+ layerMask: number, maxResults: number,
124
+ ): number;
125
+ declare function bloom_physics_overlap_body(i: number): number;
126
+
127
+ // --- Constraints ---
128
+ declare function bloom_physics_constraint_fixed(
129
+ bodyA: number, bodyB: number,
130
+ ax: number, ay: number, az: number, bx: number, by: number, bz: number,
131
+ worldSpace: number,
132
+ ): number;
133
+ declare function bloom_physics_constraint_point(
134
+ bodyA: number, bodyB: number,
135
+ ax: number, ay: number, az: number, bx: number, by: number, bz: number,
136
+ worldSpace: number,
137
+ ): number;
138
+ declare function bloom_physics_constraint_hinge(
139
+ bodyA: number, bodyB: number,
140
+ ax: number, ay: number, az: number, bx: number, by: number, bz: number,
141
+ axx: number, axy: number, axz: number, lmin: number, lmax: number,
142
+ worldSpace: number,
143
+ ): number;
144
+ declare function bloom_physics_constraint_slider(
145
+ bodyA: number, bodyB: number,
146
+ ax: number, ay: number, az: number, bx: number, by: number, bz: number,
147
+ axx: number, axy: number, axz: number, lmin: number, lmax: number,
148
+ worldSpace: number,
149
+ ): number;
150
+ declare function bloom_physics_constraint_distance(
151
+ bodyA: number, bodyB: number,
152
+ ax: number, ay: number, az: number, bx: number, by: number, bz: number,
153
+ minD: number, maxD: number, worldSpace: number,
154
+ ): number;
155
+ declare function bloom_physics_constraint_destroy(c: number): void;
156
+ declare function bloom_physics_constraint_set_enabled(c: number, enabled: number): void;
157
+
158
+ // --- Contact events ---
159
+ declare function bloom_physics_contact_count(): number;
160
+ declare function bloom_physics_contact_field(i: number, field: number): number;
161
+ declare function bloom_physics_clear_contacts(world: number): void;
162
+
163
+ // ============================================================
164
+ // Typed handles (nominal types on `number`)
165
+ // ============================================================
166
+
167
+ export type WorldHandle = number;
168
+ export type ShapeHandle = number;
169
+ export type BodyHandle = number;
170
+ export type ConstraintHandle = number;
171
+
172
+ export const INVALID_HANDLE = 0;
173
+
174
+ // ============================================================
175
+ // Enums
176
+ // ============================================================
177
+
178
+ export const MotionType = {
179
+ STATIC: 0,
180
+ KINEMATIC: 1,
181
+ DYNAMIC: 2,
182
+ } as const;
183
+
184
+ export const ContactEvent = {
185
+ ADDED: 0,
186
+ PERSISTED: 1,
187
+ REMOVED: 2,
188
+ } as const;
189
+
190
+ // Default object layers — applications may define 3..15 for custom purposes.
191
+ export const Layer = {
192
+ NON_MOVING: 0,
193
+ MOVING: 1,
194
+ SENSOR: 2,
195
+ } as const;
196
+
197
+ export const MAX_OBJECT_LAYERS = 16;
198
+ export const ALL_LAYERS_MASK = 0xFFFF;
199
+
200
+ // ============================================================
201
+ // POD types (TS-side wrapper objects)
202
+ // ============================================================
203
+
204
+ export interface Vec3 { x: number; y: number; z: number; }
205
+ export interface Quat { x: number; y: number; z: number; w: number; }
206
+ export interface Transform { position: Vec3; rotation: Quat; }
207
+
208
+ export interface RayHit {
209
+ body: BodyHandle;
210
+ point: Vec3;
211
+ normal: Vec3;
212
+ fraction: number;
213
+ subShapeId: number;
214
+ }
215
+
216
+ export interface Contact {
217
+ event: number; // ContactEvent
218
+ bodyA: BodyHandle;
219
+ bodyB: BodyHandle;
220
+ pointA: Vec3;
221
+ pointB: Vec3;
222
+ normal: Vec3;
223
+ penetrationDepth: number;
224
+ combinedFriction: number;
225
+ combinedRestitution: number;
226
+ }
227
+
228
+ // ============================================================
229
+ // World
230
+ // ============================================================
231
+
232
+ export interface WorldConfig {
233
+ gravity?: Vec3;
234
+ maxBodies?: number;
235
+ numThreads?: number;
236
+ }
237
+
238
+ export function createWorld(config: WorldConfig = {}): WorldHandle {
239
+ const g = config.gravity ?? { x: 0, y: -9.81, z: 0 };
240
+ return bloom_physics_create_world(
241
+ g.x, g.y, g.z,
242
+ config.maxBodies ?? 0,
243
+ config.numThreads ?? 0,
244
+ );
245
+ }
246
+
247
+ export function destroyWorld(world: WorldHandle): void { bloom_physics_destroy_world(world); }
248
+
249
+ export function setGravity(world: WorldHandle, g: Vec3): void {
250
+ bloom_physics_set_gravity(world, g.x, g.y, g.z);
251
+ }
252
+
253
+ export function getGravity(world: WorldHandle): Vec3 {
254
+ return {
255
+ x: bloom_physics_get_gravity(world, 0),
256
+ y: bloom_physics_get_gravity(world, 1),
257
+ z: bloom_physics_get_gravity(world, 2),
258
+ };
259
+ }
260
+
261
+ export function optimizeBroadphase(world: WorldHandle): void { bloom_physics_optimize_broadphase(world); }
262
+
263
+ export function step(world: WorldHandle, deltaTime: number, collisionSteps: number = 1): void {
264
+ bloom_physics_step(world, deltaTime, collisionSteps);
265
+ }
266
+
267
+ export function setLayerCollides(world: WorldHandle, a: number, b: number, collides: boolean): void {
268
+ bloom_physics_set_layer_collides(world, a, b, collides ? 1 : 0);
269
+ }
270
+ export function getLayerCollides(world: WorldHandle, a: number, b: number): boolean {
271
+ return bloom_physics_get_layer_collides(world, a, b) !== 0;
272
+ }
273
+
274
+ export function bodyCount(world: WorldHandle): number { return bloom_physics_body_count(world); }
275
+ export function activeBodyCount(world: WorldHandle): number { return bloom_physics_active_body_count(world); }
276
+
277
+ // ============================================================
278
+ // Shapes
279
+ // ============================================================
280
+
281
+ export function boxShape(halfExtents: Vec3, convexRadius: number = 0.05): ShapeHandle {
282
+ return bloom_physics_shape_box(halfExtents.x, halfExtents.y, halfExtents.z, convexRadius);
283
+ }
284
+ export function sphereShape(radius: number): ShapeHandle {
285
+ return bloom_physics_shape_sphere(radius);
286
+ }
287
+ export function capsuleShape(halfHeight: number, radius: number): ShapeHandle {
288
+ return bloom_physics_shape_capsule(halfHeight, radius);
289
+ }
290
+ export function cylinderShape(halfHeight: number, radius: number, convexRadius: number = 0.05): ShapeHandle {
291
+ return bloom_physics_shape_cylinder(halfHeight, radius, convexRadius);
292
+ }
293
+ export function scaledShape(base: ShapeHandle, scale: Vec3): ShapeHandle {
294
+ return bloom_physics_shape_scaled(base, scale.x, scale.y, scale.z);
295
+ }
296
+ export function offsetCenterOfMassShape(base: ShapeHandle, offset: Vec3): ShapeHandle {
297
+ return bloom_physics_shape_offset_com(base, offset.x, offset.y, offset.z);
298
+ }
299
+ export function releaseShape(shape: ShapeHandle): void { bloom_physics_shape_release(shape); }
300
+
301
+ export function shapeBounds(shape: ShapeHandle): { min: Vec3; max: Vec3 } {
302
+ return {
303
+ min: { x: bloom_physics_shape_bounds(shape, 0), y: bloom_physics_shape_bounds(shape, 1), z: bloom_physics_shape_bounds(shape, 2) },
304
+ max: { x: bloom_physics_shape_bounds(shape, 3), y: bloom_physics_shape_bounds(shape, 4), z: bloom_physics_shape_bounds(shape, 5) },
305
+ };
306
+ }
307
+ export function shapeVolume(shape: ShapeHandle): number { return bloom_physics_shape_volume(shape); }
308
+
309
+ // ============================================================
310
+ // Bodies
311
+ // ============================================================
312
+
313
+ export interface BodyConfig {
314
+ motionType: number; // MotionType.*
315
+ position?: Vec3;
316
+ rotation?: Quat;
317
+ objectLayer?: number; // default Layer.MOVING
318
+ linearVelocity?: Vec3;
319
+ angularVelocity?: Vec3;
320
+ friction?: number; // applied after creation
321
+ restitution?: number;
322
+ linearDamping?: number;
323
+ angularDamping?: number;
324
+ gravityFactor?: number;
325
+ useCcd?: boolean;
326
+ isSensor?: boolean;
327
+ allowSleeping?: boolean;
328
+ userData?: number; // low 32 bits
329
+ }
330
+
331
+ export function createBody(world: WorldHandle, shape: ShapeHandle, config: BodyConfig): BodyHandle {
332
+ const p = config.position ?? { x: 0, y: 0, z: 0 };
333
+ const r = config.rotation ?? { x: 0, y: 0, z: 0, w: 1 };
334
+ const layer = config.objectLayer ?? Layer.MOVING;
335
+ const body = bloom_physics_body_create(
336
+ world, shape, config.motionType,
337
+ p.x, p.y, p.z, r.x, r.y, r.z, r.w,
338
+ layer,
339
+ );
340
+ if (body === INVALID_HANDLE) { return INVALID_HANDLE; }
341
+
342
+ // Apply any additional properties via setters. Cheap — no physics step happens between.
343
+ if (config.linearVelocity) {
344
+ bloom_physics_body_set_linear_velocity(body, config.linearVelocity.x, config.linearVelocity.y, config.linearVelocity.z);
345
+ }
346
+ if (config.angularVelocity) {
347
+ bloom_physics_body_set_angular_velocity(body, config.angularVelocity.x, config.angularVelocity.y, config.angularVelocity.z);
348
+ }
349
+ if (config.friction !== undefined) { bloom_physics_body_set_friction(body, config.friction); }
350
+ if (config.restitution !== undefined) { bloom_physics_body_set_restitution(body, config.restitution); }
351
+ if (config.linearDamping !== undefined) { bloom_physics_body_set_linear_damping(body, config.linearDamping); }
352
+ if (config.angularDamping !== undefined){ bloom_physics_body_set_angular_damping(body, config.angularDamping); }
353
+ if (config.gravityFactor !== undefined) { bloom_physics_body_set_gravity_factor(body, config.gravityFactor); }
354
+ if (config.useCcd) { bloom_physics_body_set_ccd(body, 1); }
355
+ if (config.isSensor) { bloom_physics_body_set_is_sensor(body, 1); }
356
+ if (config.allowSleeping === false) { bloom_physics_body_set_allow_sleeping(body, 0); }
357
+ if (config.userData !== undefined) {
358
+ bloom_physics_body_set_user_data(body, config.userData >>> 0, 0);
359
+ }
360
+ return body;
361
+ }
362
+
363
+ export function destroyBody(body: BodyHandle): void { bloom_physics_body_destroy(body); }
364
+ export function activateBody(body: BodyHandle): void { bloom_physics_body_activate(body); }
365
+ export function deactivateBody(body: BodyHandle): void { bloom_physics_body_deactivate(body); }
366
+ export function isBodyActive(body: BodyHandle): boolean { return bloom_physics_body_is_active(body) !== 0; }
367
+ export function isBodyValid(body: BodyHandle): boolean { return bloom_physics_body_is_valid(body) !== 0; }
368
+
369
+ export function getBodyPosition(body: BodyHandle): Vec3 {
370
+ return {
371
+ x: bloom_physics_body_get_position(body, 0),
372
+ y: bloom_physics_body_get_position(body, 1),
373
+ z: bloom_physics_body_get_position(body, 2),
374
+ };
375
+ }
376
+ export function getBodyRotation(body: BodyHandle): Quat {
377
+ return {
378
+ x: bloom_physics_body_get_rotation(body, 0),
379
+ y: bloom_physics_body_get_rotation(body, 1),
380
+ z: bloom_physics_body_get_rotation(body, 2),
381
+ w: bloom_physics_body_get_rotation(body, 3),
382
+ };
383
+ }
384
+ export function getBodyTransform(body: BodyHandle): Transform {
385
+ return { position: getBodyPosition(body), rotation: getBodyRotation(body) };
386
+ }
387
+ export function setBodyPosition(body: BodyHandle, p: Vec3, activate: boolean = true): void {
388
+ bloom_physics_body_set_position(body, p.x, p.y, p.z, activate ? 1 : 0);
389
+ }
390
+ export function setBodyRotation(body: BodyHandle, r: Quat, activate: boolean = true): void {
391
+ bloom_physics_body_set_rotation(body, r.x, r.y, r.z, r.w, activate ? 1 : 0);
392
+ }
393
+ export function setBodyTransform(body: BodyHandle, x: Transform, activate: boolean = true): void {
394
+ bloom_physics_body_set_transform(body, x.position.x, x.position.y, x.position.z,
395
+ x.rotation.x, x.rotation.y, x.rotation.z, x.rotation.w, activate ? 1 : 0);
396
+ }
397
+ export function moveKinematic(body: BodyHandle, target: Transform, deltaTime: number): void {
398
+ bloom_physics_body_move_kinematic(body, target.position.x, target.position.y, target.position.z,
399
+ target.rotation.x, target.rotation.y, target.rotation.z, target.rotation.w, deltaTime);
400
+ }
401
+
402
+ export function getLinearVelocity(body: BodyHandle): Vec3 {
403
+ return {
404
+ x: bloom_physics_body_get_linear_velocity(body, 0),
405
+ y: bloom_physics_body_get_linear_velocity(body, 1),
406
+ z: bloom_physics_body_get_linear_velocity(body, 2),
407
+ };
408
+ }
409
+ export function getAngularVelocity(body: BodyHandle): Vec3 {
410
+ return {
411
+ x: bloom_physics_body_get_angular_velocity(body, 0),
412
+ y: bloom_physics_body_get_angular_velocity(body, 1),
413
+ z: bloom_physics_body_get_angular_velocity(body, 2),
414
+ };
415
+ }
416
+ export function getPointVelocity(body: BodyHandle, worldPoint: Vec3): Vec3 {
417
+ return {
418
+ x: bloom_physics_body_get_point_velocity(body, worldPoint.x, worldPoint.y, worldPoint.z, 0),
419
+ y: bloom_physics_body_get_point_velocity(body, worldPoint.x, worldPoint.y, worldPoint.z, 1),
420
+ z: bloom_physics_body_get_point_velocity(body, worldPoint.x, worldPoint.y, worldPoint.z, 2),
421
+ };
422
+ }
423
+ export function setLinearVelocity(body: BodyHandle, v: Vec3): void {
424
+ bloom_physics_body_set_linear_velocity(body, v.x, v.y, v.z);
425
+ }
426
+ export function setAngularVelocity(body: BodyHandle, v: Vec3): void {
427
+ bloom_physics_body_set_angular_velocity(body, v.x, v.y, v.z);
428
+ }
429
+
430
+ export function addForce(body: BodyHandle, f: Vec3): void { bloom_physics_body_add_force(body, f.x, f.y, f.z); }
431
+ export function addImpulse(body: BodyHandle, i: Vec3): void { bloom_physics_body_add_impulse(body, i.x, i.y, i.z); }
432
+ export function addTorque(body: BodyHandle, t: Vec3): void { bloom_physics_body_add_torque(body, t.x, t.y, t.z); }
433
+ export function addAngularImpulse(body: BodyHandle, i: Vec3): void { bloom_physics_body_add_angular_impulse(body, i.x, i.y, i.z); }
434
+ export function addForceAt(body: BodyHandle, f: Vec3, worldPoint: Vec3): void {
435
+ bloom_physics_body_add_force_at(body, f.x, f.y, f.z, worldPoint.x, worldPoint.y, worldPoint.z);
436
+ }
437
+ export function addImpulseAt(body: BodyHandle, i: Vec3, worldPoint: Vec3): void {
438
+ bloom_physics_body_add_impulse_at(body, i.x, i.y, i.z, worldPoint.x, worldPoint.y, worldPoint.z);
439
+ }
440
+
441
+ export function setFriction(body: BodyHandle, v: number): void { bloom_physics_body_set_friction(body, v); }
442
+ export function setRestitution(body: BodyHandle, v: number): void { bloom_physics_body_set_restitution(body, v); }
443
+ export function setLinearDamping(body: BodyHandle, v: number): void { bloom_physics_body_set_linear_damping(body, v); }
444
+ export function setAngularDamping(body: BodyHandle, v: number): void { bloom_physics_body_set_angular_damping(body, v); }
445
+ export function setGravityFactor(body: BodyHandle, v: number): void { bloom_physics_body_set_gravity_factor(body, v); }
446
+ export function setBodyCcd(body: BodyHandle, enabled: boolean): void { bloom_physics_body_set_ccd(body, enabled ? 1 : 0); }
447
+ export function setMotionType(body: BodyHandle, motionType: number, activate: boolean = true): void {
448
+ bloom_physics_body_set_motion_type(body, motionType, activate ? 1 : 0);
449
+ }
450
+ export function setObjectLayer(body: BodyHandle, layer: number): void { bloom_physics_body_set_object_layer(body, layer); }
451
+ export function setIsSensor(body: BodyHandle, enabled: boolean): void { bloom_physics_body_set_is_sensor(body, enabled ? 1 : 0); }
452
+ export function setAllowSleeping(body: BodyHandle, enabled: boolean): void { bloom_physics_body_set_allow_sleeping(body, enabled ? 1 : 0); }
453
+ export function setBodyShape(body: BodyHandle, shape: ShapeHandle, updateMass: boolean = true, activate: boolean = true): void {
454
+ bloom_physics_body_set_shape(body, shape, updateMass ? 1 : 0, activate ? 1 : 0);
455
+ }
456
+ export function lockRotationAxes(body: BodyHandle, x: boolean, y: boolean, z: boolean): void {
457
+ bloom_physics_body_lock_rotation_axes(body, x ? 1 : 0, y ? 1 : 0, z ? 1 : 0);
458
+ }
459
+ export function lockTranslationAxes(body: BodyHandle, x: boolean, y: boolean, z: boolean): void {
460
+ bloom_physics_body_lock_translation_axes(body, x ? 1 : 0, y ? 1 : 0, z ? 1 : 0);
461
+ }
462
+
463
+ export function getBodyMass(body: BodyHandle): number { return bloom_physics_body_get_mass(body); }
464
+ export function getBodyFriction(body: BodyHandle): number { return bloom_physics_body_get_friction(body); }
465
+ export function getBodyRestitution(body: BodyHandle): number { return bloom_physics_body_get_restitution(body); }
466
+ export function getBodyObjectLayer(body: BodyHandle): number { return bloom_physics_body_get_object_layer(body); }
467
+ export function setBodyUserData(body: BodyHandle, userData: number): void {
468
+ bloom_physics_body_set_user_data(body, userData >>> 0, 0);
469
+ }
470
+ export function getBodyUserData(body: BodyHandle): number { return bloom_physics_body_get_user_data(body, 0); }
471
+
472
+ // ============================================================
473
+ // Queries
474
+ // ============================================================
475
+
476
+ export function raycast(
477
+ world: WorldHandle, origin: Vec3, direction: Vec3, maxDistance: number, layerMask: number = ALL_LAYERS_MASK,
478
+ ): RayHit | null {
479
+ const hit = bloom_physics_raycast(world, origin.x, origin.y, origin.z, direction.x, direction.y, direction.z, maxDistance, layerMask);
480
+ if (hit === 0) { return null; }
481
+ return readRayHit(0);
482
+ }
483
+
484
+ export function raycastAll(
485
+ world: WorldHandle, origin: Vec3, direction: Vec3, maxDistance: number,
486
+ maxHits: number = 16, layerMask: number = ALL_LAYERS_MASK,
487
+ ): RayHit[] {
488
+ const n = bloom_physics_raycast_all(world, origin.x, origin.y, origin.z, direction.x, direction.y, direction.z, maxDistance, layerMask, maxHits);
489
+ const hits: RayHit[] = new Array(n);
490
+ for (let i = 0; i < n; i = i + 1) { hits[i] = readRayHit(i); }
491
+ return hits;
492
+ }
493
+
494
+ function readRayHit(i: number): RayHit {
495
+ return {
496
+ body: bloom_physics_ray_hit_body(i),
497
+ point: {
498
+ x: bloom_physics_ray_hit_axis(i, 0),
499
+ y: bloom_physics_ray_hit_axis(i, 1),
500
+ z: bloom_physics_ray_hit_axis(i, 2),
501
+ },
502
+ normal: {
503
+ x: bloom_physics_ray_hit_axis(i, 3),
504
+ y: bloom_physics_ray_hit_axis(i, 4),
505
+ z: bloom_physics_ray_hit_axis(i, 5),
506
+ },
507
+ fraction: bloom_physics_ray_hit_fraction(i),
508
+ subShapeId: bloom_physics_ray_hit_sub_shape(i),
509
+ };
510
+ }
511
+
512
+ export function overlapSphere(
513
+ world: WorldHandle, center: Vec3, radius: number,
514
+ maxResults: number = 16, layerMask: number = ALL_LAYERS_MASK,
515
+ ): BodyHandle[] {
516
+ const n = bloom_physics_overlap_sphere(world, center.x, center.y, center.z, radius, layerMask, maxResults);
517
+ return readOverlapResults(n);
518
+ }
519
+
520
+ export function overlapBox(
521
+ world: WorldHandle, xform: Transform, halfExtents: Vec3,
522
+ maxResults: number = 16, layerMask: number = ALL_LAYERS_MASK,
523
+ ): BodyHandle[] {
524
+ const n = bloom_physics_overlap_box(world,
525
+ xform.position.x, xform.position.y, xform.position.z,
526
+ xform.rotation.x, xform.rotation.y, xform.rotation.z, xform.rotation.w,
527
+ halfExtents.x, halfExtents.y, halfExtents.z, layerMask, maxResults);
528
+ return readOverlapResults(n);
529
+ }
530
+
531
+ export function overlapPoint(
532
+ world: WorldHandle, point: Vec3,
533
+ maxResults: number = 16, layerMask: number = ALL_LAYERS_MASK,
534
+ ): BodyHandle[] {
535
+ const n = bloom_physics_overlap_point(world, point.x, point.y, point.z, layerMask, maxResults);
536
+ return readOverlapResults(n);
537
+ }
538
+
539
+ function readOverlapResults(count: number): BodyHandle[] {
540
+ const bodies: BodyHandle[] = new Array(count);
541
+ for (let i = 0; i < count; i = i + 1) { bodies[i] = bloom_physics_overlap_body(i); }
542
+ return bodies;
543
+ }
544
+
545
+ // ============================================================
546
+ // Constraints
547
+ // ============================================================
548
+
549
+ export interface ConstraintAnchors {
550
+ bodyA: BodyHandle;
551
+ bodyB?: BodyHandle;
552
+ anchorA: Vec3;
553
+ anchorB: Vec3;
554
+ worldSpace?: boolean;
555
+ }
556
+
557
+ export function fixedConstraint(a: ConstraintAnchors): ConstraintHandle {
558
+ return bloom_physics_constraint_fixed(
559
+ a.bodyA, a.bodyB ?? INVALID_HANDLE,
560
+ a.anchorA.x, a.anchorA.y, a.anchorA.z,
561
+ a.anchorB.x, a.anchorB.y, a.anchorB.z,
562
+ a.worldSpace ? 1 : 0,
563
+ );
564
+ }
565
+
566
+ export function pointConstraint(a: ConstraintAnchors): ConstraintHandle {
567
+ return bloom_physics_constraint_point(
568
+ a.bodyA, a.bodyB ?? INVALID_HANDLE,
569
+ a.anchorA.x, a.anchorA.y, a.anchorA.z,
570
+ a.anchorB.x, a.anchorB.y, a.anchorB.z,
571
+ a.worldSpace ? 1 : 0,
572
+ );
573
+ }
574
+
575
+ export function hingeConstraint(a: ConstraintAnchors, axis: Vec3, limitMin: number = 0, limitMax: number = 0): ConstraintHandle {
576
+ return bloom_physics_constraint_hinge(
577
+ a.bodyA, a.bodyB ?? INVALID_HANDLE,
578
+ a.anchorA.x, a.anchorA.y, a.anchorA.z,
579
+ a.anchorB.x, a.anchorB.y, a.anchorB.z,
580
+ axis.x, axis.y, axis.z, limitMin, limitMax,
581
+ a.worldSpace ? 1 : 0,
582
+ );
583
+ }
584
+
585
+ export function sliderConstraint(a: ConstraintAnchors, axis: Vec3, limitMin: number = 0, limitMax: number = 0): ConstraintHandle {
586
+ return bloom_physics_constraint_slider(
587
+ a.bodyA, a.bodyB ?? INVALID_HANDLE,
588
+ a.anchorA.x, a.anchorA.y, a.anchorA.z,
589
+ a.anchorB.x, a.anchorB.y, a.anchorB.z,
590
+ axis.x, axis.y, axis.z, limitMin, limitMax,
591
+ a.worldSpace ? 1 : 0,
592
+ );
593
+ }
594
+
595
+ export function distanceConstraint(a: ConstraintAnchors, minDistance: number, maxDistance: number): ConstraintHandle {
596
+ return bloom_physics_constraint_distance(
597
+ a.bodyA, a.bodyB ?? INVALID_HANDLE,
598
+ a.anchorA.x, a.anchorA.y, a.anchorA.z,
599
+ a.anchorB.x, a.anchorB.y, a.anchorB.z,
600
+ minDistance, maxDistance, a.worldSpace ? 1 : 0,
601
+ );
602
+ }
603
+
604
+ export function destroyConstraint(c: ConstraintHandle): void { bloom_physics_constraint_destroy(c); }
605
+ export function setConstraintEnabled(c: ConstraintHandle, enabled: boolean): void {
606
+ bloom_physics_constraint_set_enabled(c, enabled ? 1 : 0);
607
+ }
608
+
609
+ // ============================================================
610
+ // Contact events (drained once per step)
611
+ // ============================================================
612
+
613
+ export function contactCount(): number { return bloom_physics_contact_count(); }
614
+
615
+ export function popContacts(): Contact[] {
616
+ const n = bloom_physics_contact_count();
617
+ const out: Contact[] = new Array(n);
618
+ for (let i = 0; i < n; i = i + 1) {
619
+ out[i] = {
620
+ event: bloom_physics_contact_field(i, 0),
621
+ bodyA: bloom_physics_contact_field(i, 1),
622
+ bodyB: bloom_physics_contact_field(i, 2),
623
+ pointA: {
624
+ x: bloom_physics_contact_field(i, 3),
625
+ y: bloom_physics_contact_field(i, 4),
626
+ z: bloom_physics_contact_field(i, 5),
627
+ },
628
+ pointB: {
629
+ x: bloom_physics_contact_field(i, 6),
630
+ y: bloom_physics_contact_field(i, 7),
631
+ z: bloom_physics_contact_field(i, 8),
632
+ },
633
+ normal: {
634
+ x: bloom_physics_contact_field(i, 9),
635
+ y: bloom_physics_contact_field(i, 10),
636
+ z: bloom_physics_contact_field(i, 11),
637
+ },
638
+ penetrationDepth: bloom_physics_contact_field(i, 12),
639
+ combinedFriction: bloom_physics_contact_field(i, 13),
640
+ combinedRestitution: bloom_physics_contact_field(i, 14),
641
+ };
642
+ }
643
+ return out;
644
+ }
645
+
646
+ export function clearContacts(world: WorldHandle): void { bloom_physics_clear_contacts(world); }
647
+
648
+ // ============================================================================
649
+ // Complex shapes (scratch-buffer variants)
650
+ // ============================================================================
651
+
652
+ declare function bloom_physics_scratch_reset(): void;
653
+ declare function bloom_physics_scratch_push_f32(v: number): void;
654
+ declare function bloom_physics_scratch_push_u32(v: number): void;
655
+ declare function bloom_physics_shape_convex_hull(numPoints: number, convexRadius: number): number;
656
+ declare function bloom_physics_shape_mesh(vertexCount: number, triangleCount: number): number;
657
+ declare function bloom_physics_shape_heightfield(
658
+ sampleCount: number, ox: number, oy: number, oz: number,
659
+ sx: number, sy: number, sz: number, blockSize: number,
660
+ ): number;
661
+ declare function bloom_physics_compound_begin(): void;
662
+ declare function bloom_physics_compound_add_child(
663
+ shape: number, px: number, py: number, pz: number,
664
+ rx: number, ry: number, rz: number, rw: number,
665
+ ): void;
666
+ declare function bloom_physics_compound_end(): number;
667
+
668
+ /** Convex hull from a point cloud. The physics engine computes the hull. */
669
+ export function convexHullShape(points: Vec3[], convexRadius: number = 0.05): ShapeHandle {
670
+ if (points.length < 3) { return INVALID_HANDLE; }
671
+ bloom_physics_scratch_reset();
672
+ for (let i = 0; i < points.length; i = i + 1) {
673
+ const p = points[i];
674
+ bloom_physics_scratch_push_f32(p.x);
675
+ bloom_physics_scratch_push_f32(p.y);
676
+ bloom_physics_scratch_push_f32(p.z);
677
+ }
678
+ return bloom_physics_shape_convex_hull(points.length, convexRadius);
679
+ }
680
+
681
+ /** Triangle mesh (static bodies only). Indices flattened (triangleCount * 3). */
682
+ export function meshShape(vertices: Vec3[], indices: number[]): ShapeHandle {
683
+ if (vertices.length === 0 || indices.length < 3 || indices.length % 3 !== 0) {
684
+ return INVALID_HANDLE;
685
+ }
686
+ bloom_physics_scratch_reset();
687
+ for (let i = 0; i < vertices.length; i = i + 1) {
688
+ const v = vertices[i];
689
+ bloom_physics_scratch_push_f32(v.x);
690
+ bloom_physics_scratch_push_f32(v.y);
691
+ bloom_physics_scratch_push_f32(v.z);
692
+ }
693
+ for (let i = 0; i < indices.length; i = i + 1) {
694
+ bloom_physics_scratch_push_u32(indices[i]);
695
+ }
696
+ return bloom_physics_shape_mesh(vertices.length, indices.length / 3);
697
+ }
698
+
699
+ /** Heightfield — samples is row-major (sampleCount × sampleCount). */
700
+ export function heightfieldShape(
701
+ samples: number[], sampleCount: number,
702
+ offset: Vec3, scale: Vec3, blockSize: number = 4,
703
+ ): ShapeHandle {
704
+ const need = sampleCount * sampleCount;
705
+ if (samples.length < need || sampleCount < 2) { return INVALID_HANDLE; }
706
+ bloom_physics_scratch_reset();
707
+ for (let i = 0; i < need; i = i + 1) {
708
+ bloom_physics_scratch_push_f32(samples[i]);
709
+ }
710
+ return bloom_physics_shape_heightfield(
711
+ sampleCount, offset.x, offset.y, offset.z, scale.x, scale.y, scale.z, blockSize,
712
+ );
713
+ }
714
+
715
+ /** Static compound built from children (shape + local transform). */
716
+ export function compoundShape(children: Array<{ shape: ShapeHandle; local: Transform }>): ShapeHandle {
717
+ if (children.length === 0) { return INVALID_HANDLE; }
718
+ bloom_physics_compound_begin();
719
+ for (let i = 0; i < children.length; i = i + 1) {
720
+ const c = children[i];
721
+ bloom_physics_compound_add_child(
722
+ c.shape,
723
+ c.local.position.x, c.local.position.y, c.local.position.z,
724
+ c.local.rotation.x, c.local.rotation.y, c.local.rotation.z, c.local.rotation.w,
725
+ );
726
+ }
727
+ return bloom_physics_compound_end();
728
+ }
729
+
730
+ // ============================================================================
731
+ // Character controller (CharacterVirtual — kinematic, slope-aware)
732
+ // ============================================================================
733
+
734
+ declare function bloom_physics_character_create(
735
+ world: number, shape: number,
736
+ upX: number, upY: number, upZ: number,
737
+ maxSlopeAngle: number, characterPadding: number,
738
+ penetrationRecoverySpeed: number, predictiveContactDistance: number,
739
+ maxStrength: number, mass: number, objectLayer: number,
740
+ px: number, py: number, pz: number,
741
+ rx: number, ry: number, rz: number, rw: number,
742
+ ): number;
743
+ declare function bloom_physics_character_destroy(c: number): void;
744
+ declare function bloom_physics_character_update(c: number, dt: number, gx: number, gy: number, gz: number): void;
745
+ declare function bloom_physics_character_get_position(c: number, axis: number): number;
746
+ declare function bloom_physics_character_get_rotation(c: number, axis: number): number;
747
+ declare function bloom_physics_character_set_position(c: number, x: number, y: number, z: number): void;
748
+ declare function bloom_physics_character_set_rotation(c: number, x: number, y: number, z: number, w: number): void;
749
+ declare function bloom_physics_character_get_linear_velocity(c: number, axis: number): number;
750
+ declare function bloom_physics_character_set_linear_velocity(c: number, x: number, y: number, z: number): void;
751
+ declare function bloom_physics_character_get_ground_state(c: number): number;
752
+ declare function bloom_physics_character_get_ground_normal(c: number, axis: number): number;
753
+ declare function bloom_physics_character_get_ground_position(c: number, axis: number): number;
754
+ declare function bloom_physics_character_get_ground_body(c: number): number;
755
+ declare function bloom_physics_character_set_shape(c: number, shape: number): void;
756
+
757
+ export type CharacterHandle = number;
758
+
759
+ export const GroundState = {
760
+ ON_GROUND: 0,
761
+ ON_STEEP: 1,
762
+ NOT_SUPPORTED: 2,
763
+ IN_AIR: 3,
764
+ } as const;
765
+
766
+ export interface CharacterConfig {
767
+ up?: Vec3; // default (0,1,0)
768
+ maxSlopeAngleRad?: number; // default ~50° (0.872)
769
+ characterPadding?: number; // default 0.02
770
+ penetrationRecoverySpeed?: number; // default 1.0
771
+ predictiveContactDistance?: number; // default 0.1
772
+ maxStrength?: number; // default 100
773
+ mass?: number; // default 70 kg
774
+ objectLayer?: number; // default Layer.MOVING
775
+ position?: Vec3;
776
+ rotation?: Quat;
777
+ }
778
+
779
+ export function createCharacter(
780
+ world: WorldHandle, shape: ShapeHandle, config: CharacterConfig = {},
781
+ ): CharacterHandle {
782
+ const up = config.up ?? { x: 0, y: 1, z: 0 };
783
+ const pos = config.position ?? { x: 0, y: 0, z: 0 };
784
+ const rot = config.rotation ?? { x: 0, y: 0, z: 0, w: 1 };
785
+ return bloom_physics_character_create(
786
+ world, shape,
787
+ up.x, up.y, up.z,
788
+ config.maxSlopeAngleRad ?? 0.872,
789
+ config.characterPadding ?? 0.02,
790
+ config.penetrationRecoverySpeed ?? 1.0,
791
+ config.predictiveContactDistance ?? 0.1,
792
+ config.maxStrength ?? 100.0,
793
+ config.mass ?? 70.0,
794
+ config.objectLayer ?? Layer.MOVING,
795
+ pos.x, pos.y, pos.z,
796
+ rot.x, rot.y, rot.z, rot.w,
797
+ );
798
+ }
799
+
800
+ export function destroyCharacter(c: CharacterHandle): void { bloom_physics_character_destroy(c); }
801
+
802
+ export function updateCharacter(c: CharacterHandle, deltaTime: number, gravity: Vec3): void {
803
+ bloom_physics_character_update(c, deltaTime, gravity.x, gravity.y, gravity.z);
804
+ }
805
+
806
+ export function getCharacterPosition(c: CharacterHandle): Vec3 {
807
+ return {
808
+ x: bloom_physics_character_get_position(c, 0),
809
+ y: bloom_physics_character_get_position(c, 1),
810
+ z: bloom_physics_character_get_position(c, 2),
811
+ };
812
+ }
813
+ export function getCharacterRotation(c: CharacterHandle): Quat {
814
+ return {
815
+ x: bloom_physics_character_get_rotation(c, 0),
816
+ y: bloom_physics_character_get_rotation(c, 1),
817
+ z: bloom_physics_character_get_rotation(c, 2),
818
+ w: bloom_physics_character_get_rotation(c, 3),
819
+ };
820
+ }
821
+ export function setCharacterPosition(c: CharacterHandle, p: Vec3): void {
822
+ bloom_physics_character_set_position(c, p.x, p.y, p.z);
823
+ }
824
+ export function setCharacterRotation(c: CharacterHandle, r: Quat): void {
825
+ bloom_physics_character_set_rotation(c, r.x, r.y, r.z, r.w);
826
+ }
827
+
828
+ export function getCharacterLinearVelocity(c: CharacterHandle): Vec3 {
829
+ return {
830
+ x: bloom_physics_character_get_linear_velocity(c, 0),
831
+ y: bloom_physics_character_get_linear_velocity(c, 1),
832
+ z: bloom_physics_character_get_linear_velocity(c, 2),
833
+ };
834
+ }
835
+ export function setCharacterLinearVelocity(c: CharacterHandle, v: Vec3): void {
836
+ bloom_physics_character_set_linear_velocity(c, v.x, v.y, v.z);
837
+ }
838
+
839
+ export function getCharacterGroundState(c: CharacterHandle): number {
840
+ return bloom_physics_character_get_ground_state(c);
841
+ }
842
+ export function isCharacterGrounded(c: CharacterHandle): boolean {
843
+ return bloom_physics_character_get_ground_state(c) === GroundState.ON_GROUND;
844
+ }
845
+ export function getCharacterGroundNormal(c: CharacterHandle): Vec3 {
846
+ return {
847
+ x: bloom_physics_character_get_ground_normal(c, 0),
848
+ y: bloom_physics_character_get_ground_normal(c, 1),
849
+ z: bloom_physics_character_get_ground_normal(c, 2),
850
+ };
851
+ }
852
+ export function getCharacterGroundPosition(c: CharacterHandle): Vec3 {
853
+ return {
854
+ x: bloom_physics_character_get_ground_position(c, 0),
855
+ y: bloom_physics_character_get_ground_position(c, 1),
856
+ z: bloom_physics_character_get_ground_position(c, 2),
857
+ };
858
+ }
859
+ export function getCharacterGroundBody(c: CharacterHandle): BodyHandle {
860
+ return bloom_physics_character_get_ground_body(c);
861
+ }
862
+
863
+ export function setCharacterShape(c: CharacterHandle, shape: ShapeHandle): void {
864
+ bloom_physics_character_set_shape(c, shape);
865
+ }
866
+
867
+ // ============================================================================
868
+ // Soft bodies — cloth / rope / jelly with per-vertex simulation
869
+ // ============================================================================
870
+
871
+ declare function bloom_physics_soft_body_create(
872
+ world: number, vertexCount: number, triangleCount: number,
873
+ px: number, py: number, pz: number, rx: number, ry: number, rz: number, rw: number,
874
+ objectLayer: number,
875
+ edgeCompliance: number, gravityFactor: number, linearDamping: number, pressure: number,
876
+ ): number;
877
+ declare function bloom_physics_soft_body_vertex_count(body: number): number;
878
+ declare function bloom_physics_soft_body_get_vertex(body: number, idx: number, axis: number): number;
879
+ declare function bloom_physics_soft_body_set_vertex(body: number, idx: number, x: number, y: number, z: number): void;
880
+ declare function bloom_physics_soft_body_set_vertex_inv_mass(body: number, idx: number, invMass: number): void;
881
+
882
+ export interface SoftBodyConfig {
883
+ vertices: Vec3[];
884
+ /** Per-vertex inverse mass; length must equal vertices.length. 0 = pinned. */
885
+ inverseMasses: number[];
886
+ /** Triangle indices (length = triangleCount * 3). Each triangle forms edge+bend constraints. */
887
+ indices: number[];
888
+ position?: Vec3;
889
+ rotation?: Quat;
890
+ objectLayer?: number; // default Layer.MOVING
891
+ edgeCompliance?: number; // default 0 (rigid edges); cloth: 1e-4
892
+ gravityFactor?: number; // default 1.0
893
+ linearDamping?: number; // default 0.05
894
+ pressure?: number; // 0 = cloth; >0 = inflated volume body
895
+ }
896
+
897
+ export function createSoftBody(world: WorldHandle, config: SoftBodyConfig): BodyHandle {
898
+ const n = config.vertices.length;
899
+ if (n < 3 || config.inverseMasses.length !== n || config.indices.length < 3 || config.indices.length % 3 !== 0) {
900
+ return INVALID_HANDLE;
901
+ }
902
+ bloom_physics_scratch_reset();
903
+ for (let i = 0; i < n; i = i + 1) {
904
+ const v = config.vertices[i];
905
+ bloom_physics_scratch_push_f32(v.x);
906
+ bloom_physics_scratch_push_f32(v.y);
907
+ bloom_physics_scratch_push_f32(v.z);
908
+ bloom_physics_scratch_push_f32(config.inverseMasses[i]);
909
+ }
910
+ for (let i = 0; i < config.indices.length; i = i + 1) {
911
+ bloom_physics_scratch_push_u32(config.indices[i]);
912
+ }
913
+ const pos = config.position ?? { x: 0, y: 0, z: 0 };
914
+ const rot = config.rotation ?? { x: 0, y: 0, z: 0, w: 1 };
915
+ return bloom_physics_soft_body_create(
916
+ world, n, config.indices.length / 3,
917
+ pos.x, pos.y, pos.z, rot.x, rot.y, rot.z, rot.w,
918
+ config.objectLayer ?? Layer.MOVING,
919
+ config.edgeCompliance ?? 0,
920
+ config.gravityFactor ?? 1.0,
921
+ config.linearDamping ?? 0.05,
922
+ config.pressure ?? 0,
923
+ );
924
+ }
925
+
926
+ export function softBodyVertexCount(body: BodyHandle): number {
927
+ return bloom_physics_soft_body_vertex_count(body);
928
+ }
929
+ export function getSoftBodyVertex(body: BodyHandle, idx: number): Vec3 {
930
+ return {
931
+ x: bloom_physics_soft_body_get_vertex(body, idx, 0),
932
+ y: bloom_physics_soft_body_get_vertex(body, idx, 1),
933
+ z: bloom_physics_soft_body_get_vertex(body, idx, 2),
934
+ };
935
+ }
936
+ export function setSoftBodyVertex(body: BodyHandle, idx: number, position: Vec3): void {
937
+ bloom_physics_soft_body_set_vertex(body, idx, position.x, position.y, position.z);
938
+ }
939
+ /** Set per-vertex inverse mass. 0 = pinned (won't move under simulation). */
940
+ export function setSoftBodyVertexInvMass(body: BodyHandle, idx: number, invMass: number): void {
941
+ bloom_physics_soft_body_set_vertex_inv_mass(body, idx, invMass);
942
+ }
943
+
944
+ // ============================================================================
945
+ // Wheeled vehicles — 4-wheel car (FR-drive, front-wheel steering)
946
+ // ============================================================================
947
+
948
+ declare function bloom_physics_vehicle_create(
949
+ world: number, chassisShape: number,
950
+ upX: number, upY: number, upZ: number,
951
+ fwX: number, fwY: number, fwZ: number,
952
+ w0x: number, w0y: number, w0z: number,
953
+ w1x: number, w1y: number, w1z: number,
954
+ w2x: number, w2y: number, w2z: number,
955
+ w3x: number, w3y: number, w3z: number,
956
+ wheelRadius: number, wheelWidth: number,
957
+ suspensionMin: number, suspensionMax: number,
958
+ maxSteerAngle: number, maxBrakeTorque: number, maxHandbrakeTorque: number,
959
+ engineMaxTorque: number, maxPitchRollAngle: number,
960
+ objectLayer: number,
961
+ px: number, py: number, pz: number, rx: number, ry: number, rz: number, rw: number,
962
+ ): number;
963
+ declare function bloom_physics_vehicle_destroy(v: number): void;
964
+ declare function bloom_physics_vehicle_get_chassis(v: number): number;
965
+ declare function bloom_physics_vehicle_set_input(v: number, forward: number, right: number, brake: number, handbrake: number): void;
966
+ declare function bloom_physics_vehicle_get_wheel_transform(v: number, wheelIndex: number, axis: number): number;
967
+ declare function bloom_physics_vehicle_get_engine_rpm(v: number): number;
968
+ declare function bloom_physics_vehicle_get_wheel_angular_velocity(v: number, wheelIndex: number): number;
969
+
970
+ export type VehicleHandle = number;
971
+
972
+ export interface VehicleConfig {
973
+ /** Chassis collision shape. Convention: use `offsetCenterOfMassShape(box, { x: 0, y: -0.6, z: 0 })`
974
+ * so wheels dangle below the box and the car is stable. */
975
+ chassisShape: ShapeHandle;
976
+ position?: Vec3;
977
+ rotation?: Quat;
978
+
979
+ /** World-up axis. Default (0, 1, 0). */
980
+ up?: Vec3;
981
+ /** Chassis forward axis (which way is "front"). Default (0, 0, 1). */
982
+ forward?: Vec3;
983
+
984
+ /** Four wheel mount positions in chassis-local space (relative to COM).
985
+ * Order: [front-left, front-right, rear-left, rear-right].
986
+ * Default: 1.6m wheelbase/track, wheels ~0.4m below COM. */
987
+ wheelPositions?: [Vec3, Vec3, Vec3, Vec3];
988
+
989
+ wheelRadius?: number; // default 0.35m
990
+ wheelWidth?: number; // default 0.2m
991
+ suspensionMinLength?: number; // default 0.3m
992
+ suspensionMaxLength?: number; // default 0.5m
993
+ maxSteerAngleRad?: number; // default 35° (≈0.611 rad); applied to front wheels
994
+ maxBrakeTorque?: number; // default 1500 Nm
995
+ maxHandbrakeTorque?: number; // default 4000 Nm
996
+ engineMaxTorque?: number; // default 500 Nm
997
+ maxPitchRollAngleRad?: number; // default 60° (≈1.047 rad)
998
+ objectLayer?: number; // default Layer.MOVING
999
+ }
1000
+
1001
+ /** Returns a vehicle handle. Call getVehicleChassis() for the body handle. */
1002
+ export function createVehicle(world: WorldHandle, config: VehicleConfig): VehicleHandle {
1003
+ const up = config.up ?? { x: 0, y: 1, z: 0 };
1004
+ const fw = config.forward ?? { x: 0, y: 0, z: 1 };
1005
+ const wp = config.wheelPositions ?? [
1006
+ { x: -0.8, y: -0.4, z: 1.3 },
1007
+ { x: 0.8, y: -0.4, z: 1.3 },
1008
+ { x: -0.8, y: -0.4, z: -1.3 },
1009
+ { x: 0.8, y: -0.4, z: -1.3 },
1010
+ ];
1011
+ const pos = config.position ?? { x: 0, y: 0, z: 0 };
1012
+ const rot = config.rotation ?? { x: 0, y: 0, z: 0, w: 1 };
1013
+ return bloom_physics_vehicle_create(
1014
+ world, config.chassisShape,
1015
+ up.x, up.y, up.z, fw.x, fw.y, fw.z,
1016
+ wp[0].x, wp[0].y, wp[0].z,
1017
+ wp[1].x, wp[1].y, wp[1].z,
1018
+ wp[2].x, wp[2].y, wp[2].z,
1019
+ wp[3].x, wp[3].y, wp[3].z,
1020
+ config.wheelRadius ?? 0.35,
1021
+ config.wheelWidth ?? 0.2,
1022
+ config.suspensionMinLength ?? 0.3,
1023
+ config.suspensionMaxLength ?? 0.5,
1024
+ config.maxSteerAngleRad ?? 0.611,
1025
+ config.maxBrakeTorque ?? 1500,
1026
+ config.maxHandbrakeTorque ?? 4000,
1027
+ config.engineMaxTorque ?? 500,
1028
+ config.maxPitchRollAngleRad ?? 1.047,
1029
+ config.objectLayer ?? Layer.MOVING,
1030
+ pos.x, pos.y, pos.z, rot.x, rot.y, rot.z, rot.w,
1031
+ );
1032
+ }
1033
+
1034
+ export function destroyVehicle(v: VehicleHandle): void { bloom_physics_vehicle_destroy(v); }
1035
+
1036
+ /** Returns the underlying chassis body — useful for applying external forces or reading position. */
1037
+ export function getVehicleChassis(v: VehicleHandle): BodyHandle { return bloom_physics_vehicle_get_chassis(v); }
1038
+
1039
+ /**
1040
+ * Driver input. Must be called every frame before step() for responsive control.
1041
+ * @param forward -1..1 (throttle; negative = reverse)
1042
+ * @param right -1..1 (steering)
1043
+ * @param brake 0..1
1044
+ * @param handbrake 0..1
1045
+ */
1046
+ export function setVehicleInput(
1047
+ v: VehicleHandle, forward: number, right: number, brake: number = 0, handbrake: number = 0,
1048
+ ): void {
1049
+ bloom_physics_vehicle_set_input(v, forward, right, brake, handbrake);
1050
+ }
1051
+
1052
+ /** World-space transform of a wheel (for rendering spinning wheels). */
1053
+ export function getWheelTransform(v: VehicleHandle, wheelIndex: number): Transform {
1054
+ return {
1055
+ position: {
1056
+ x: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 0),
1057
+ y: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 1),
1058
+ z: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 2),
1059
+ },
1060
+ rotation: {
1061
+ x: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 3),
1062
+ y: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 4),
1063
+ z: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 5),
1064
+ w: bloom_physics_vehicle_get_wheel_transform(v, wheelIndex, 6),
1065
+ },
1066
+ };
1067
+ }
1068
+
1069
+ export function getVehicleEngineRPM(v: VehicleHandle): number { return bloom_physics_vehicle_get_engine_rpm(v); }
1070
+ export function getWheelAngularVelocity(v: VehicleHandle, wheelIndex: number): number {
1071
+ return bloom_physics_vehicle_get_wheel_angular_velocity(v, wheelIndex);
1072
+ }