@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,744 @@
1
+ // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
+ // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
+ // SPDX-License-Identifier: MIT
4
+
5
+ #include <Jolt/Jolt.h>
6
+
7
+ #include <Jolt/Physics/Ragdoll/Ragdoll.h>
8
+ #include <Jolt/Physics/Constraints/SwingTwistConstraint.h>
9
+ #include <Jolt/Physics/Constraints/HingeConstraint.h>
10
+ #include <Jolt/Physics/PhysicsSystem.h>
11
+ #include <Jolt/Physics/Body/BodyLockMulti.h>
12
+ #include <Jolt/Physics/Collision/GroupFilterTable.h>
13
+ #include <Jolt/Physics/Collision/CollisionCollectorImpl.h>
14
+ #include <Jolt/Physics/Collision/CollideShape.h>
15
+ #include <Jolt/Physics/Collision/CollisionDispatch.h>
16
+ #include <Jolt/ObjectStream/TypeDeclarations.h>
17
+ #include <Jolt/Core/StreamIn.h>
18
+ #include <Jolt/Core/StreamOut.h>
19
+
20
+ JPH_NAMESPACE_BEGIN
21
+
22
+ JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(RagdollSettings::Part)
23
+ {
24
+ JPH_ADD_BASE_CLASS(RagdollSettings::Part, BodyCreationSettings)
25
+
26
+ JPH_ADD_ATTRIBUTE(RagdollSettings::Part, mToParent)
27
+ }
28
+
29
+ JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(RagdollSettings::AdditionalConstraint)
30
+ {
31
+ JPH_ADD_ATTRIBUTE(RagdollSettings::AdditionalConstraint, mBodyIdx)
32
+ JPH_ADD_ATTRIBUTE(RagdollSettings::AdditionalConstraint, mConstraint)
33
+ }
34
+
35
+ JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(RagdollSettings)
36
+ {
37
+ JPH_ADD_ATTRIBUTE(RagdollSettings, mSkeleton)
38
+ JPH_ADD_ATTRIBUTE(RagdollSettings, mParts)
39
+ JPH_ADD_ATTRIBUTE(RagdollSettings, mAdditionalConstraints)
40
+ }
41
+
42
+ static inline BodyInterface &sRagdollGetBodyInterface(PhysicsSystem *inSystem, bool inLockBodies)
43
+ {
44
+ return inLockBodies? inSystem->GetBodyInterface() : inSystem->GetBodyInterfaceNoLock();
45
+ }
46
+
47
+ static inline const BodyLockInterface &sRagdollGetBodyLockInterface(const PhysicsSystem *inSystem, bool inLockBodies)
48
+ {
49
+ return inLockBodies? static_cast<const BodyLockInterface &>(inSystem->GetBodyLockInterface()) : static_cast<const BodyLockInterface &>(inSystem->GetBodyLockInterfaceNoLock());
50
+ }
51
+
52
+ bool RagdollSettings::Stabilize()
53
+ {
54
+ // Based on: Stop my Constraints from Blowing Up! - Oliver Strunk (Havok)
55
+ // Do 2 things:
56
+ // 1. Limit the mass ratios between parents and children (slide 16)
57
+ // 2. Increase the inertia of parents so that they're bigger or equal to the sum of their children (slide 34)
58
+
59
+ // If we don't have any joints there's nothing to stabilize
60
+ if (mSkeleton->GetJointCount() == 0)
61
+ return true;
62
+
63
+ // The skeleton can contain one or more static bodies. We can't modify the mass for those so we start a new stabilization chain for each joint under a static body until we reach the next static body.
64
+ // This array keeps track of which joints have been processed.
65
+ Array<bool> visited;
66
+ visited.resize(mSkeleton->GetJointCount());
67
+ for (size_t v = 0; v < visited.size(); ++v)
68
+ {
69
+ // Mark static bodies as visited so we won't process these
70
+ Part &p = mParts[v];
71
+ bool has_mass_properties = p.HasMassProperties();
72
+ visited[v] = !has_mass_properties;
73
+
74
+ if (has_mass_properties && p.mOverrideMassProperties != EOverrideMassProperties::MassAndInertiaProvided)
75
+ {
76
+ // Mass properties not yet calculated, do it now
77
+ p.mMassPropertiesOverride = p.GetMassProperties();
78
+ p.mOverrideMassProperties = EOverrideMassProperties::MassAndInertiaProvided;
79
+ }
80
+ }
81
+
82
+ // Find first unvisited part that either has no parent or that has a parent that was visited
83
+ for (int first_idx = 0; first_idx < mSkeleton->GetJointCount(); ++first_idx)
84
+ {
85
+ int first_idx_parent = mSkeleton->GetJoint(first_idx).mParentJointIndex;
86
+ if (!visited[first_idx] && (first_idx_parent == -1 || visited[first_idx_parent]))
87
+ {
88
+ // Find all children of first_idx and their children up to the next static part
89
+ int next_to_process = 0;
90
+ Array<int> indices;
91
+ indices.reserve(mSkeleton->GetJointCount());
92
+ visited[first_idx] = true;
93
+ indices.push_back(first_idx);
94
+ do
95
+ {
96
+ int parent_idx = indices[next_to_process++];
97
+ for (int child_idx = 0; child_idx < mSkeleton->GetJointCount(); ++child_idx)
98
+ if (!visited[child_idx] && mSkeleton->GetJoint(child_idx).mParentJointIndex == parent_idx)
99
+ {
100
+ visited[child_idx] = true;
101
+ indices.push_back(child_idx);
102
+ }
103
+ } while (next_to_process < (int)indices.size());
104
+
105
+ // If there's only 1 body, we can't redistribute mass
106
+ if (indices.size() == 1)
107
+ continue;
108
+
109
+ const float cMinMassRatio = 0.8f;
110
+ const float cMaxMassRatio = 1.2f;
111
+
112
+ // Ensure that the mass ratio from parent to child is within a range
113
+ float total_mass_ratio = 1.0f;
114
+ Array<float> mass_ratios;
115
+ mass_ratios.resize(mSkeleton->GetJointCount());
116
+ mass_ratios[indices[0]] = 1.0f;
117
+ for (int i = 1; i < (int)indices.size(); ++i)
118
+ {
119
+ int child_idx = indices[i];
120
+ int parent_idx = mSkeleton->GetJoint(child_idx).mParentJointIndex;
121
+ float ratio = mParts[child_idx].mMassPropertiesOverride.mMass / mParts[parent_idx].mMassPropertiesOverride.mMass;
122
+ mass_ratios[child_idx] = mass_ratios[parent_idx] * Clamp(ratio, cMinMassRatio, cMaxMassRatio);
123
+ total_mass_ratio += mass_ratios[child_idx];
124
+ }
125
+
126
+ // Calculate total mass of this chain
127
+ float total_mass = 0.0f;
128
+ for (int idx : indices)
129
+ total_mass += mParts[idx].mMassPropertiesOverride.mMass;
130
+
131
+ // Calculate how much mass belongs to a ratio of 1
132
+ float ratio_to_mass = total_mass / total_mass_ratio;
133
+
134
+ // Adjust all masses and inertia tensors for the new mass
135
+ for (int i : indices)
136
+ {
137
+ Part &p = mParts[i];
138
+ float old_mass = p.mMassPropertiesOverride.mMass;
139
+ float new_mass = mass_ratios[i] * ratio_to_mass;
140
+ p.mMassPropertiesOverride.mMass = new_mass;
141
+ p.mMassPropertiesOverride.mInertia *= new_mass / old_mass;
142
+ p.mMassPropertiesOverride.mInertia.SetColumn4(3, Vec4(0, 0, 0, 1));
143
+ }
144
+
145
+ const float cMaxInertiaIncrease = 2.0f;
146
+
147
+ // Get the principal moments of inertia for all parts
148
+ struct Principal
149
+ {
150
+ Mat44 mRotation;
151
+ Vec3 mDiagonal;
152
+ float mChildSum = 0.0f;
153
+ };
154
+ Array<Principal> principals;
155
+ principals.resize(mParts.size());
156
+ for (int i : indices)
157
+ if (!mParts[i].mMassPropertiesOverride.DecomposePrincipalMomentsOfInertia(principals[i].mRotation, principals[i].mDiagonal))
158
+ {
159
+ JPH_ASSERT(false, "Failed to decompose the inertia tensor!");
160
+ return false;
161
+ }
162
+
163
+ // Calculate sum of child inertias
164
+ // Walk backwards so we sum the leaves first
165
+ for (int i = (int)indices.size() - 1; i > 0; --i)
166
+ {
167
+ int child_idx = indices[i];
168
+ int parent_idx = mSkeleton->GetJoint(child_idx).mParentJointIndex;
169
+ principals[parent_idx].mChildSum += principals[child_idx].mDiagonal[0] + principals[child_idx].mChildSum;
170
+ }
171
+
172
+ // Adjust inertia tensors for all parts
173
+ for (int i : indices)
174
+ {
175
+ Part &p = mParts[i];
176
+ Principal &principal = principals[i];
177
+ if (principal.mChildSum != 0.0f)
178
+ {
179
+ // Calculate minimum inertia this object should have based on it children
180
+ float minimum = min(cMaxInertiaIncrease * principal.mDiagonal[0], principal.mChildSum);
181
+ principal.mDiagonal = Vec3::sMax(principal.mDiagonal, Vec3::sReplicate(minimum));
182
+
183
+ // Recalculate moment of inertia in body space
184
+ p.mMassPropertiesOverride.mInertia = principal.mRotation * Mat44::sScale(principal.mDiagonal) * principal.mRotation.Inversed3x3();
185
+ }
186
+ }
187
+ }
188
+ }
189
+
190
+ return true;
191
+ }
192
+
193
+ void RagdollSettings::CalculateConstraintPriorities(uint32 inBasePriority)
194
+ {
195
+ JPH_ASSERT(inBasePriority + (uint32)mParts.size() > inBasePriority, "Base priority is too high and will cause overflows");
196
+ JPH_ASSERT(mSkeleton->AreJointsCorrectlyOrdered());
197
+
198
+ // Calculate priority for each part. Start with the base priority and increment towards the root
199
+ Array<uint32> priorities;
200
+ priorities.resize(mParts.size(), inBasePriority);
201
+ for (int i = (int)mParts.size() - 1; i >= 0; --i)
202
+ {
203
+ uint32 cur_priority = inBasePriority;
204
+ int j = i;
205
+ do
206
+ {
207
+ priorities[j] = max(priorities[j], cur_priority);
208
+ cur_priority++;
209
+
210
+ j = mSkeleton->GetJoint(j).mParentJointIndex;
211
+ }
212
+ while (j != -1);
213
+ }
214
+
215
+ // Copy the priorities to the constraints
216
+ for (uint i = 0, n = (uint)mParts.size(); i < n; ++i)
217
+ if (mParts[i].mToParent != nullptr)
218
+ mParts[i].mToParent->mConstraintPriority = priorities[i];
219
+
220
+ // Use the minimum of the priorities of connected bodies for additional constraints
221
+ for (AdditionalConstraint &constraint : mAdditionalConstraints)
222
+ constraint.mConstraint->mConstraintPriority = min(priorities[constraint.mBodyIdx[0]], priorities[constraint.mBodyIdx[1]]);
223
+ }
224
+
225
+ void RagdollSettings::DisableParentChildCollisions(const Mat44 *inJointMatrices, float inMinSeparationDistance)
226
+ {
227
+ int joint_count = mSkeleton->GetJointCount();
228
+ JPH_ASSERT(joint_count == (int)mParts.size());
229
+
230
+ // Create a group filter table that disables collisions between parent and child
231
+ Ref<GroupFilterTable> group_filter = new GroupFilterTable(joint_count);
232
+ for (int joint_idx = 0; joint_idx < joint_count; ++joint_idx)
233
+ {
234
+ int parent_joint = mSkeleton->GetJoint(joint_idx).mParentJointIndex;
235
+ if (parent_joint >= 0)
236
+ group_filter->DisableCollision(joint_idx, parent_joint);
237
+ }
238
+
239
+ // If joint matrices are provided
240
+ if (inJointMatrices != nullptr)
241
+ {
242
+ // Loop over all joints
243
+ for (int j1 = 0; j1 < joint_count; ++j1)
244
+ {
245
+ // Shape and transform for joint 1
246
+ const Part &part1 = mParts[j1];
247
+ const Shape *shape1 = part1.GetShape();
248
+ Vec3 scale1;
249
+ Mat44 com1 = (inJointMatrices[j1].PreTranslated(shape1->GetCenterOfMass())).Decompose(scale1);
250
+
251
+ // Loop over all other joints
252
+ for (int j2 = j1 + 1; j2 < joint_count; ++j2)
253
+ if (group_filter->IsCollisionEnabled(j1, j2)) // Only if collision is still enabled we need to test
254
+ {
255
+ // Shape and transform for joint 2
256
+ const Part &part2 = mParts[j2];
257
+ const Shape *shape2 = part2.GetShape();
258
+ Vec3 scale2;
259
+ Mat44 com2 = (inJointMatrices[j2].PreTranslated(shape2->GetCenterOfMass())).Decompose(scale2);
260
+
261
+ // Collision settings
262
+ CollideShapeSettings settings;
263
+ settings.mActiveEdgeMode = EActiveEdgeMode::CollideWithAll;
264
+ settings.mBackFaceMode = EBackFaceMode::CollideWithBackFaces;
265
+ settings.mMaxSeparationDistance = inMinSeparationDistance;
266
+
267
+ // Only check if one of the two bodies can become dynamic
268
+ if (part1.HasMassProperties() || part2.HasMassProperties())
269
+ {
270
+ // If there is a collision, disable the collision between the joints
271
+ AnyHitCollisionCollector<CollideShapeCollector> collector;
272
+ if (part1.HasMassProperties()) // Ensure that the first shape is always a dynamic one (we can't check mesh vs convex but we can check convex vs mesh)
273
+ CollisionDispatch::sCollideShapeVsShape(shape1, shape2, scale1, scale2, com1, com2, SubShapeIDCreator(), SubShapeIDCreator(), settings, collector);
274
+ else
275
+ CollisionDispatch::sCollideShapeVsShape(shape2, shape1, scale2, scale1, com2, com1, SubShapeIDCreator(), SubShapeIDCreator(), settings, collector);
276
+ if (collector.HadHit())
277
+ group_filter->DisableCollision(j1, j2);
278
+ }
279
+ }
280
+ }
281
+ }
282
+
283
+ // Loop over the body parts and assign them a sub group ID and the group filter
284
+ for (int joint_idx = 0; joint_idx < joint_count; ++joint_idx)
285
+ {
286
+ Part &part = mParts[joint_idx];
287
+ part.mCollisionGroup.SetSubGroupID(joint_idx);
288
+ part.mCollisionGroup.SetGroupFilter(group_filter);
289
+ }
290
+ }
291
+
292
+ void RagdollSettings::SaveBinaryState(StreamOut &inStream, bool inSaveShapes, bool inSaveGroupFilter) const
293
+ {
294
+ BodyCreationSettings::ShapeToIDMap shape_to_id;
295
+ BodyCreationSettings::MaterialToIDMap material_to_id;
296
+ BodyCreationSettings::GroupFilterToIDMap group_filter_to_id;
297
+
298
+ // Save skeleton
299
+ mSkeleton->SaveBinaryState(inStream);
300
+
301
+ // Save parts
302
+ inStream.Write((uint32)mParts.size());
303
+ for (const Part &p : mParts)
304
+ {
305
+ // Write body creation settings
306
+ p.SaveWithChildren(inStream, inSaveShapes? &shape_to_id : nullptr, inSaveShapes? &material_to_id : nullptr, inSaveGroupFilter? &group_filter_to_id : nullptr);
307
+
308
+ // Save constraint
309
+ inStream.Write(p.mToParent != nullptr);
310
+ if (p.mToParent != nullptr)
311
+ p.mToParent->SaveBinaryState(inStream);
312
+ }
313
+
314
+ // Save additional constraints
315
+ inStream.Write((uint32)mAdditionalConstraints.size());
316
+ for (const AdditionalConstraint &c : mAdditionalConstraints)
317
+ {
318
+ // Save bodies indices
319
+ inStream.Write(c.mBodyIdx);
320
+
321
+ // Save constraint
322
+ c.mConstraint->SaveBinaryState(inStream);
323
+ }
324
+ }
325
+
326
+ RagdollSettings::RagdollResult RagdollSettings::sRestoreFromBinaryState(StreamIn &inStream)
327
+ {
328
+ RagdollResult result;
329
+
330
+ // Restore skeleton
331
+ Skeleton::SkeletonResult skeleton_result = Skeleton::sRestoreFromBinaryState(inStream);
332
+ if (skeleton_result.HasError())
333
+ {
334
+ result.SetError(skeleton_result.GetError());
335
+ return result;
336
+ }
337
+
338
+ // Create ragdoll
339
+ Ref<RagdollSettings> ragdoll = new RagdollSettings();
340
+ ragdoll->mSkeleton = skeleton_result.Get();
341
+
342
+ BodyCreationSettings::IDToShapeMap id_to_shape;
343
+ BodyCreationSettings::IDToMaterialMap id_to_material;
344
+ BodyCreationSettings::IDToGroupFilterMap id_to_group_filter;
345
+
346
+ // Reserve some memory to avoid frequent reallocations
347
+ id_to_shape.reserve(1024);
348
+ id_to_material.reserve(128);
349
+ id_to_group_filter.reserve(128);
350
+
351
+ // Read parts
352
+ uint32 len = 0;
353
+ inStream.Read(len);
354
+ ragdoll->mParts.resize(len);
355
+ for (Part &p : ragdoll->mParts)
356
+ {
357
+ // Read creation settings
358
+ BodyCreationSettings::BCSResult bcs_result = BodyCreationSettings::sRestoreWithChildren(inStream, id_to_shape, id_to_material, id_to_group_filter);
359
+ if (bcs_result.HasError())
360
+ {
361
+ result.SetError(bcs_result.GetError());
362
+ return result;
363
+ }
364
+ static_cast<BodyCreationSettings &>(p) = bcs_result.Get();
365
+
366
+ // Read constraint
367
+ bool has_constraint = false;
368
+ inStream.Read(has_constraint);
369
+ if (has_constraint)
370
+ {
371
+ ConstraintSettings::ConstraintResult constraint_result = ConstraintSettings::sRestoreFromBinaryState(inStream);
372
+ if (constraint_result.HasError())
373
+ {
374
+ result.SetError(constraint_result.GetError());
375
+ return result;
376
+ }
377
+ p.mToParent = DynamicCast<TwoBodyConstraintSettings>(constraint_result.Get());
378
+ }
379
+ }
380
+
381
+ // Read additional constraints
382
+ len = 0;
383
+ inStream.Read(len);
384
+ ragdoll->mAdditionalConstraints.resize(len);
385
+ for (AdditionalConstraint &c : ragdoll->mAdditionalConstraints)
386
+ {
387
+ // Read body indices
388
+ inStream.Read(c.mBodyIdx);
389
+
390
+ // Read constraint
391
+ ConstraintSettings::ConstraintResult constraint_result = ConstraintSettings::sRestoreFromBinaryState(inStream);
392
+ if (constraint_result.HasError())
393
+ {
394
+ result.SetError(constraint_result.GetError());
395
+ return result;
396
+ }
397
+ c.mConstraint = DynamicCast<TwoBodyConstraintSettings>(constraint_result.Get());
398
+ }
399
+
400
+ // Create mapping tables
401
+ ragdoll->CalculateBodyIndexToConstraintIndex();
402
+ ragdoll->CalculateConstraintIndexToBodyIdxPair();
403
+
404
+ result.Set(ragdoll);
405
+ return result;
406
+ }
407
+
408
+ Ragdoll *RagdollSettings::CreateRagdoll(CollisionGroup::GroupID inCollisionGroup, uint64 inUserData, PhysicsSystem *inSystem) const
409
+ {
410
+ Ragdoll *r = new Ragdoll(inSystem);
411
+ r->mRagdollSettings = this;
412
+ r->mBodyIDs.reserve(mParts.size());
413
+ r->mConstraints.reserve(mParts.size() + mAdditionalConstraints.size());
414
+
415
+ // Create bodies and constraints
416
+ BodyInterface &bi = inSystem->GetBodyInterface();
417
+ Body **bodies = (Body **)JPH_STACK_ALLOC(mParts.size() * sizeof(Body *));
418
+ int joint_idx = 0;
419
+ for (const Part &p : mParts)
420
+ {
421
+ Body *body2 = bi.CreateBody(p);
422
+ if (body2 == nullptr)
423
+ {
424
+ // Out of bodies, failed to create ragdoll
425
+ delete r;
426
+ return nullptr;
427
+ }
428
+ body2->GetCollisionGroup().SetGroupID(inCollisionGroup);
429
+ body2->SetUserData(inUserData);
430
+
431
+ // Temporarily store body pointer for hooking up constraints
432
+ bodies[joint_idx] = body2;
433
+
434
+ // Create constraint
435
+ if (p.mToParent != nullptr)
436
+ {
437
+ Body *body1 = bodies[mSkeleton->GetJoint(joint_idx).mParentJointIndex];
438
+ r->mConstraints.push_back(p.mToParent->Create(*body1, *body2));
439
+ }
440
+
441
+ // Store body ID and constraint in parallel arrays
442
+ r->mBodyIDs.push_back(body2->GetID());
443
+
444
+ ++joint_idx;
445
+ }
446
+
447
+ // Add additional constraints
448
+ for (const AdditionalConstraint &c : mAdditionalConstraints)
449
+ {
450
+ Body *body1 = bodies[c.mBodyIdx[0]];
451
+ Body *body2 = bodies[c.mBodyIdx[1]];
452
+ r->mConstraints.push_back(c.mConstraint->Create(*body1, *body2));
453
+ }
454
+
455
+ return r;
456
+ }
457
+
458
+ void RagdollSettings::CalculateBodyIndexToConstraintIndex()
459
+ {
460
+ mBodyIndexToConstraintIndex.clear();
461
+ mBodyIndexToConstraintIndex.reserve(mParts.size());
462
+
463
+ int constraint_index = 0;
464
+ for (const Part &p : mParts)
465
+ {
466
+ if (p.mToParent != nullptr)
467
+ mBodyIndexToConstraintIndex.push_back(constraint_index++);
468
+ else
469
+ mBodyIndexToConstraintIndex.push_back(-1);
470
+ }
471
+ }
472
+
473
+ void RagdollSettings::CalculateConstraintIndexToBodyIdxPair()
474
+ {
475
+ mConstraintIndexToBodyIdxPair.clear();
476
+ mConstraintIndexToBodyIdxPair.reserve(mParts.size() + mAdditionalConstraints.size());
477
+
478
+ // Add constraints between parts
479
+ int joint_idx = 0;
480
+ for (const Part &p : mParts)
481
+ {
482
+ if (p.mToParent != nullptr)
483
+ {
484
+ int parent_joint_idx = mSkeleton->GetJoint(joint_idx).mParentJointIndex;
485
+ mConstraintIndexToBodyIdxPair.emplace_back(parent_joint_idx, joint_idx);
486
+ }
487
+
488
+ ++joint_idx;
489
+ }
490
+
491
+ // Add additional constraints
492
+ for (const AdditionalConstraint &c : mAdditionalConstraints)
493
+ mConstraintIndexToBodyIdxPair.emplace_back(c.mBodyIdx[0], c.mBodyIdx[1]);
494
+ }
495
+
496
+ Ragdoll::~Ragdoll()
497
+ {
498
+ // Destroy all bodies
499
+ mSystem->GetBodyInterface().DestroyBodies(mBodyIDs.data(), (int)mBodyIDs.size());
500
+ }
501
+
502
+ void Ragdoll::AddToPhysicsSystem(EActivation inActivationMode, bool inLockBodies)
503
+ {
504
+ // Scope for JPH_STACK_ALLOC
505
+ {
506
+ // Create copy of body ids since they will be shuffled
507
+ int num_bodies = (int)mBodyIDs.size();
508
+ BodyID *bodies = (BodyID *)JPH_STACK_ALLOC(num_bodies * sizeof(BodyID));
509
+ memcpy(bodies, mBodyIDs.data(), num_bodies * sizeof(BodyID));
510
+
511
+ // Insert bodies as a batch
512
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
513
+ BodyInterface::AddState add_state = bi.AddBodiesPrepare(bodies, num_bodies);
514
+ bi.AddBodiesFinalize(bodies, num_bodies, add_state, inActivationMode);
515
+ }
516
+
517
+ // Add all constraints
518
+ mSystem->AddConstraints((Constraint **)mConstraints.data(), (int)mConstraints.size());
519
+ }
520
+
521
+ void Ragdoll::RemoveFromPhysicsSystem(bool inLockBodies)
522
+ {
523
+ // Remove all constraints before removing the bodies
524
+ mSystem->RemoveConstraints((Constraint **)mConstraints.data(), (int)mConstraints.size());
525
+
526
+ // Scope for JPH_STACK_ALLOC
527
+ {
528
+ // Create copy of body ids since they will be shuffled
529
+ int num_bodies = (int)mBodyIDs.size();
530
+ BodyID *bodies = (BodyID *)JPH_STACK_ALLOC(num_bodies * sizeof(BodyID));
531
+ memcpy(bodies, mBodyIDs.data(), num_bodies * sizeof(BodyID));
532
+
533
+ // Remove all bodies as a batch
534
+ sRagdollGetBodyInterface(mSystem, inLockBodies).RemoveBodies(bodies, num_bodies);
535
+ }
536
+ }
537
+
538
+ void Ragdoll::Activate(bool inLockBodies)
539
+ {
540
+ sRagdollGetBodyInterface(mSystem, inLockBodies).ActivateBodies(mBodyIDs.data(), (int)mBodyIDs.size());
541
+ }
542
+
543
+ bool Ragdoll::IsActive(bool inLockBodies) const
544
+ {
545
+ // Lock the bodies
546
+ int body_count = (int)mBodyIDs.size();
547
+ BodyLockMultiRead lock(sRagdollGetBodyLockInterface(mSystem, inLockBodies), mBodyIDs.data(), body_count);
548
+
549
+ // Test if any body is active
550
+ for (int b = 0; b < body_count; ++b)
551
+ {
552
+ const Body *body = lock.GetBody(b);
553
+ if (body->IsActive())
554
+ return true;
555
+ }
556
+
557
+ return false;
558
+ }
559
+
560
+ void Ragdoll::SetGroupID(CollisionGroup::GroupID inGroupID, bool inLockBodies)
561
+ {
562
+ // Lock the bodies
563
+ int body_count = (int)mBodyIDs.size();
564
+ BodyLockMultiWrite lock(sRagdollGetBodyLockInterface(mSystem, inLockBodies), mBodyIDs.data(), body_count);
565
+
566
+ // Update group ID
567
+ for (int b = 0; b < body_count; ++b)
568
+ {
569
+ Body *body = lock.GetBody(b);
570
+ body->GetCollisionGroup().SetGroupID(inGroupID);
571
+ }
572
+ }
573
+
574
+ void Ragdoll::SetPose(const SkeletonPose &inPose, bool inLockBodies)
575
+ {
576
+ JPH_ASSERT(inPose.GetSkeleton() == mRagdollSettings->mSkeleton);
577
+
578
+ SetPose(inPose.GetRootOffset(), inPose.GetJointMatrices().data(), inLockBodies);
579
+ }
580
+
581
+ void Ragdoll::SetPose(RVec3Arg inRootOffset, const Mat44 *inJointMatrices, bool inLockBodies)
582
+ {
583
+ // Move bodies instantly into the correct position
584
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
585
+ for (int i = 0; i < (int)mBodyIDs.size(); ++i)
586
+ {
587
+ const Mat44 &joint = inJointMatrices[i];
588
+ bi.SetPositionAndRotation(mBodyIDs[i], inRootOffset + joint.GetTranslation(), joint.GetQuaternion(), EActivation::DontActivate);
589
+ }
590
+ }
591
+
592
+ void Ragdoll::GetPose(SkeletonPose &outPose, bool inLockBodies)
593
+ {
594
+ JPH_ASSERT(outPose.GetSkeleton() == mRagdollSettings->mSkeleton);
595
+
596
+ RVec3 root_offset;
597
+ GetPose(root_offset, outPose.GetJointMatrices().data(), inLockBodies);
598
+ outPose.SetRootOffset(root_offset);
599
+ }
600
+
601
+ void Ragdoll::GetPose(RVec3 &outRootOffset, Mat44 *outJointMatrices, bool inLockBodies)
602
+ {
603
+ // Lock the bodies
604
+ int body_count = (int)mBodyIDs.size();
605
+ if (body_count == 0)
606
+ return;
607
+ BodyLockMultiRead lock(sRagdollGetBodyLockInterface(mSystem, inLockBodies), mBodyIDs.data(), body_count);
608
+
609
+ // Get root matrix
610
+ const Body *root = lock.GetBody(0);
611
+ RMat44 root_transform = root->GetWorldTransform();
612
+ outRootOffset = root_transform.GetTranslation();
613
+ outJointMatrices[0] = Mat44(root_transform.GetColumn4(0), root_transform.GetColumn4(1), root_transform.GetColumn4(2), Vec4(0, 0, 0, 1));
614
+
615
+ // Get other matrices
616
+ for (int b = 1; b < body_count; ++b)
617
+ {
618
+ const Body *body = lock.GetBody(b);
619
+ RMat44 transform = body->GetWorldTransform();
620
+ outJointMatrices[b] = Mat44(transform.GetColumn4(0), transform.GetColumn4(1), transform.GetColumn4(2), Vec4(Vec3(transform.GetTranslation() - outRootOffset), 1));
621
+ }
622
+ }
623
+
624
+ void Ragdoll::ResetWarmStart()
625
+ {
626
+ for (TwoBodyConstraint *c : mConstraints)
627
+ c->ResetWarmStart();
628
+ }
629
+
630
+ void Ragdoll::DriveToPoseUsingKinematics(const SkeletonPose &inPose, float inDeltaTime, bool inLockBodies)
631
+ {
632
+ JPH_ASSERT(inPose.GetSkeleton() == mRagdollSettings->mSkeleton);
633
+
634
+ DriveToPoseUsingKinematics(inPose.GetRootOffset(), inPose.GetJointMatrices().data(), inDeltaTime, inLockBodies);
635
+ }
636
+
637
+ void Ragdoll::DriveToPoseUsingKinematics(RVec3Arg inRootOffset, const Mat44 *inJointMatrices, float inDeltaTime, bool inLockBodies)
638
+ {
639
+ // Move bodies into the correct position using kinematics
640
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
641
+ for (int i = 0; i < (int)mBodyIDs.size(); ++i)
642
+ {
643
+ const Mat44 &joint = inJointMatrices[i];
644
+ bi.MoveKinematic(mBodyIDs[i], inRootOffset + joint.GetTranslation(), joint.GetQuaternion(), inDeltaTime);
645
+ }
646
+ }
647
+
648
+ void Ragdoll::DriveToPoseUsingMotors(const SkeletonPose &inPose)
649
+ {
650
+ JPH_ASSERT(inPose.GetSkeleton() == mRagdollSettings->mSkeleton);
651
+
652
+ // Move bodies into the correct position using constraints
653
+ for (int i = 0; i < (int)inPose.GetJointMatrices().size(); ++i)
654
+ {
655
+ int constraint_idx = mRagdollSettings->GetConstraintIndexForBodyIndex(i);
656
+ if (constraint_idx >= 0)
657
+ {
658
+ // Get desired rotation of this body relative to its parent
659
+ const SkeletalAnimation::JointState &joint_state = inPose.GetJoint(i);
660
+
661
+ // Drive constraint to target
662
+ TwoBodyConstraint *constraint = mConstraints[constraint_idx];
663
+ EConstraintSubType sub_type = constraint->GetSubType();
664
+ if (sub_type == EConstraintSubType::SwingTwist)
665
+ {
666
+ SwingTwistConstraint *st_constraint = static_cast<SwingTwistConstraint *>(constraint);
667
+ st_constraint->SetSwingMotorState(EMotorState::Position);
668
+ st_constraint->SetTwistMotorState(EMotorState::Position);
669
+ st_constraint->SetTargetOrientationBS(joint_state.mRotation);
670
+ }
671
+ else if (sub_type == EConstraintSubType::Hinge)
672
+ {
673
+ HingeConstraint *h_constraint = static_cast<HingeConstraint *>(constraint);
674
+ h_constraint->SetMotorState(EMotorState::Position);
675
+ h_constraint->SetTargetOrientationBS(joint_state.mRotation);
676
+ }
677
+ else
678
+ JPH_ASSERT(false, "Constraint type not implemented!");
679
+ }
680
+ }
681
+ }
682
+
683
+ void Ragdoll::SetLinearAndAngularVelocity(Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity, bool inLockBodies)
684
+ {
685
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
686
+ for (BodyID body_id : mBodyIDs)
687
+ bi.SetLinearAndAngularVelocity(body_id, inLinearVelocity, inAngularVelocity);
688
+ }
689
+
690
+ void Ragdoll::SetLinearVelocity(Vec3Arg inLinearVelocity, bool inLockBodies)
691
+ {
692
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
693
+ for (BodyID body_id : mBodyIDs)
694
+ bi.SetLinearVelocity(body_id, inLinearVelocity);
695
+ }
696
+
697
+ void Ragdoll::AddLinearVelocity(Vec3Arg inLinearVelocity, bool inLockBodies)
698
+ {
699
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
700
+ for (BodyID body_id : mBodyIDs)
701
+ bi.AddLinearVelocity(body_id, inLinearVelocity);
702
+ }
703
+
704
+ void Ragdoll::AddImpulse(Vec3Arg inImpulse, bool inLockBodies)
705
+ {
706
+ BodyInterface &bi = sRagdollGetBodyInterface(mSystem, inLockBodies);
707
+ for (BodyID body_id : mBodyIDs)
708
+ bi.AddImpulse(body_id, inImpulse);
709
+ }
710
+
711
+ void Ragdoll::GetRootTransform(RVec3 &outPosition, Quat &outRotation, bool inLockBodies) const
712
+ {
713
+ BodyLockRead lock(sRagdollGetBodyLockInterface(mSystem, inLockBodies), mBodyIDs[0]);
714
+ if (lock.Succeeded())
715
+ {
716
+ const Body &body = lock.GetBody();
717
+ outPosition = body.GetPosition();
718
+ outRotation = body.GetRotation();
719
+ }
720
+ else
721
+ {
722
+ outPosition = RVec3::sZero();
723
+ outRotation = Quat::sIdentity();
724
+ }
725
+ }
726
+
727
+ AABox Ragdoll::GetWorldSpaceBounds(bool inLockBodies) const
728
+ {
729
+ // Lock the bodies
730
+ int body_count = (int)mBodyIDs.size();
731
+ BodyLockMultiRead lock(sRagdollGetBodyLockInterface(mSystem, inLockBodies), mBodyIDs.data(), body_count);
732
+
733
+ // Encapsulate all bodies
734
+ AABox bounds;
735
+ for (int b = 0; b < body_count; ++b)
736
+ {
737
+ const Body *body = lock.GetBody(b);
738
+ if (body != nullptr)
739
+ bounds.Encapsulate(body->GetWorldSpaceBounds());
740
+ }
741
+ return bounds;
742
+ }
743
+
744
+ JPH_NAMESPACE_END