@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,900 @@
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/Constraints/SixDOFConstraint.h>
8
+ #include <Jolt/Physics/Body/Body.h>
9
+ #include <Jolt/Geometry/Ellipse.h>
10
+ #include <Jolt/ObjectStream/TypeDeclarations.h>
11
+ #include <Jolt/Core/StreamIn.h>
12
+ #include <Jolt/Core/StreamOut.h>
13
+ #ifdef JPH_DEBUG_RENDERER
14
+ #include <Jolt/Renderer/DebugRenderer.h>
15
+ #endif // JPH_DEBUG_RENDERER
16
+
17
+ JPH_NAMESPACE_BEGIN
18
+
19
+ JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(SixDOFConstraintSettings)
20
+ {
21
+ JPH_ADD_BASE_CLASS(SixDOFConstraintSettings, TwoBodyConstraintSettings)
22
+
23
+ JPH_ADD_ENUM_ATTRIBUTE(SixDOFConstraintSettings, mSpace)
24
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mPosition1)
25
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mAxisX1)
26
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mAxisY1)
27
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mPosition2)
28
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mAxisX2)
29
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mAxisY2)
30
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mMaxFriction)
31
+ JPH_ADD_ENUM_ATTRIBUTE(SixDOFConstraintSettings, mSwingType)
32
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mLimitMin)
33
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mLimitMax)
34
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mLimitsSpringSettings)
35
+ JPH_ADD_ATTRIBUTE(SixDOFConstraintSettings, mMotorSettings)
36
+ }
37
+
38
+ void SixDOFConstraintSettings::SaveBinaryState(StreamOut &inStream) const
39
+ {
40
+ ConstraintSettings::SaveBinaryState(inStream);
41
+
42
+ inStream.Write(mSpace);
43
+ inStream.Write(mPosition1);
44
+ inStream.Write(mAxisX1);
45
+ inStream.Write(mAxisY1);
46
+ inStream.Write(mPosition2);
47
+ inStream.Write(mAxisX2);
48
+ inStream.Write(mAxisY2);
49
+ inStream.Write(mMaxFriction);
50
+ inStream.Write(mSwingType);
51
+ inStream.Write(mLimitMin);
52
+ inStream.Write(mLimitMax);
53
+ for (const SpringSettings &s : mLimitsSpringSettings)
54
+ s.SaveBinaryState(inStream);
55
+ for (const MotorSettings &m : mMotorSettings)
56
+ m.SaveBinaryState(inStream);
57
+ }
58
+
59
+ void SixDOFConstraintSettings::RestoreBinaryState(StreamIn &inStream)
60
+ {
61
+ ConstraintSettings::RestoreBinaryState(inStream);
62
+
63
+ inStream.Read(mSpace);
64
+ inStream.Read(mPosition1);
65
+ inStream.Read(mAxisX1);
66
+ inStream.Read(mAxisY1);
67
+ inStream.Read(mPosition2);
68
+ inStream.Read(mAxisX2);
69
+ inStream.Read(mAxisY2);
70
+ inStream.Read(mMaxFriction);
71
+ inStream.Read(mSwingType);
72
+ inStream.Read(mLimitMin);
73
+ inStream.Read(mLimitMax);
74
+ for (SpringSettings &s : mLimitsSpringSettings)
75
+ s.RestoreBinaryState(inStream);
76
+ for (MotorSettings &m : mMotorSettings)
77
+ m.RestoreBinaryState(inStream);
78
+ }
79
+
80
+ TwoBodyConstraint *SixDOFConstraintSettings::Create(Body &inBody1, Body &inBody2) const
81
+ {
82
+ return new SixDOFConstraint(inBody1, inBody2, *this);
83
+ }
84
+
85
+ void SixDOFConstraint::UpdateTranslationLimits()
86
+ {
87
+ // Set to zero if the limits are inversed
88
+ for (int i = EAxis::TranslationX; i <= EAxis::TranslationZ; ++i)
89
+ if (mLimitMin[i] > mLimitMax[i])
90
+ mLimitMin[i] = mLimitMax[i] = 0.0f;
91
+ }
92
+
93
+ void SixDOFConstraint::UpdateRotationLimits()
94
+ {
95
+ if (mSwingTwistConstraintPart.GetSwingType() == ESwingType::Cone)
96
+ {
97
+ // Cone swing upper limit needs to be positive
98
+ mLimitMax[EAxis::RotationY] = max(0.0f, mLimitMax[EAxis::RotationY]);
99
+ mLimitMax[EAxis::RotationZ] = max(0.0f, mLimitMax[EAxis::RotationZ]);
100
+
101
+ // Cone swing limits only support symmetric ranges
102
+ mLimitMin[EAxis::RotationY] = -mLimitMax[EAxis::RotationY];
103
+ mLimitMin[EAxis::RotationZ] = -mLimitMax[EAxis::RotationZ];
104
+ }
105
+
106
+ for (int i = EAxis::RotationX; i <= EAxis::RotationZ; ++i)
107
+ {
108
+ // Clamp to [-PI, PI] range
109
+ mLimitMin[i] = Clamp(mLimitMin[i], -JPH_PI, JPH_PI);
110
+ mLimitMax[i] = Clamp(mLimitMax[i], -JPH_PI, JPH_PI);
111
+
112
+ // Set to zero if the limits are inversed
113
+ if (mLimitMin[i] > mLimitMax[i])
114
+ mLimitMin[i] = mLimitMax[i] = 0.0f;
115
+ }
116
+
117
+ // Pass limits on to constraint part
118
+ mSwingTwistConstraintPart.SetLimits(mLimitMin[EAxis::RotationX], mLimitMax[EAxis::RotationX], mLimitMin[EAxis::RotationY], mLimitMax[EAxis::RotationY], mLimitMin[EAxis::RotationZ], mLimitMax[EAxis::RotationZ]);
119
+ }
120
+
121
+ void SixDOFConstraint::UpdateFixedFreeAxis()
122
+ {
123
+ uint8 old_free_axis = mFreeAxis;
124
+ uint8 old_fixed_axis = mFixedAxis;
125
+
126
+ // Cache which axis are fixed and which ones are free
127
+ mFreeAxis = 0;
128
+ mFixedAxis = 0;
129
+ for (int a = 0; a < EAxis::Num; ++a)
130
+ {
131
+ float limit = a >= EAxis::RotationX? JPH_PI : FLT_MAX;
132
+
133
+ if (mLimitMin[a] >= mLimitMax[a])
134
+ mFixedAxis |= 1 << a;
135
+ else if (mLimitMin[a] <= -limit && mLimitMax[a] >= limit)
136
+ mFreeAxis |= 1 << a;
137
+ }
138
+
139
+ // On change we deactivate all constraints to reset warm starting
140
+ if (old_free_axis != mFreeAxis || old_fixed_axis != mFixedAxis)
141
+ {
142
+ for (AxisConstraintPart &c : mTranslationConstraintPart)
143
+ c.Deactivate();
144
+ mPointConstraintPart.Deactivate();
145
+ mSwingTwistConstraintPart.Deactivate();
146
+ mRotationConstraintPart.Deactivate();
147
+ for (AxisConstraintPart &c : mMotorTranslationConstraintPart)
148
+ c.Deactivate();
149
+ for (AngleConstraintPart &c : mMotorRotationConstraintPart)
150
+ c.Deactivate();
151
+ }
152
+ }
153
+
154
+ SixDOFConstraint::SixDOFConstraint(Body &inBody1, Body &inBody2, const SixDOFConstraintSettings &inSettings) :
155
+ TwoBodyConstraint(inBody1, inBody2, inSettings)
156
+ {
157
+ // Override swing type
158
+ mSwingTwistConstraintPart.SetSwingType(inSettings.mSwingType);
159
+
160
+ // Calculate rotation needed to go from constraint space to body1 local space
161
+ Vec3 axis_z1 = inSettings.mAxisX1.Cross(inSettings.mAxisY1);
162
+ Mat44 c_to_b1(Vec4(inSettings.mAxisX1, 0), Vec4(inSettings.mAxisY1, 0), Vec4(axis_z1, 0), Vec4(0, 0, 0, 1));
163
+ mConstraintToBody1 = c_to_b1.GetQuaternion();
164
+
165
+ // Calculate rotation needed to go from constraint space to body2 local space
166
+ Vec3 axis_z2 = inSettings.mAxisX2.Cross(inSettings.mAxisY2);
167
+ Mat44 c_to_b2(Vec4(inSettings.mAxisX2, 0), Vec4(inSettings.mAxisY2, 0), Vec4(axis_z2, 0), Vec4(0, 0, 0, 1));
168
+ mConstraintToBody2 = c_to_b2.GetQuaternion();
169
+
170
+ if (inSettings.mSpace == EConstraintSpace::WorldSpace)
171
+ {
172
+ // If all properties were specified in world space, take them to local space now
173
+ mLocalSpacePosition1 = Vec3(inBody1.GetInverseCenterOfMassTransform() * inSettings.mPosition1);
174
+ mConstraintToBody1 = inBody1.GetRotation().Conjugated() * mConstraintToBody1;
175
+
176
+ mLocalSpacePosition2 = Vec3(inBody2.GetInverseCenterOfMassTransform() * inSettings.mPosition2);
177
+ mConstraintToBody2 = inBody2.GetRotation().Conjugated() * mConstraintToBody2;
178
+ }
179
+ else
180
+ {
181
+ mLocalSpacePosition1 = Vec3(inSettings.mPosition1);
182
+ mLocalSpacePosition2 = Vec3(inSettings.mPosition2);
183
+ }
184
+
185
+ // Copy translation and rotation limits
186
+ memcpy(mLimitMin, inSettings.mLimitMin, sizeof(mLimitMin));
187
+ memcpy(mLimitMax, inSettings.mLimitMax, sizeof(mLimitMax));
188
+ memcpy(mLimitsSpringSettings, inSettings.mLimitsSpringSettings, sizeof(mLimitsSpringSettings));
189
+ UpdateTranslationLimits();
190
+ UpdateRotationLimits();
191
+ UpdateFixedFreeAxis();
192
+ CacheHasSpringLimits();
193
+
194
+ // Store friction settings
195
+ memcpy(mMaxFriction, inSettings.mMaxFriction, sizeof(mMaxFriction));
196
+
197
+ // Store motor settings
198
+ for (int i = 0; i < EAxis::Num; ++i)
199
+ mMotorSettings[i] = inSettings.mMotorSettings[i];
200
+
201
+ // Cache if motors are active (motors are off initially, but we may have friction)
202
+ CacheTranslationMotorActive();
203
+ CacheRotationMotorActive();
204
+ }
205
+
206
+ void SixDOFConstraint::NotifyShapeChanged(const BodyID &inBodyID, Vec3Arg inDeltaCOM)
207
+ {
208
+ if (mBody1->GetID() == inBodyID)
209
+ mLocalSpacePosition1 -= inDeltaCOM;
210
+ else if (mBody2->GetID() == inBodyID)
211
+ mLocalSpacePosition2 -= inDeltaCOM;
212
+ }
213
+
214
+ void SixDOFConstraint::SetTranslationLimits(Vec3Arg inLimitMin, Vec3Arg inLimitMax)
215
+ {
216
+ mLimitMin[EAxis::TranslationX] = inLimitMin.GetX();
217
+ mLimitMin[EAxis::TranslationY] = inLimitMin.GetY();
218
+ mLimitMin[EAxis::TranslationZ] = inLimitMin.GetZ();
219
+ mLimitMax[EAxis::TranslationX] = inLimitMax.GetX();
220
+ mLimitMax[EAxis::TranslationY] = inLimitMax.GetY();
221
+ mLimitMax[EAxis::TranslationZ] = inLimitMax.GetZ();
222
+
223
+ UpdateTranslationLimits();
224
+ UpdateFixedFreeAxis();
225
+ }
226
+
227
+ void SixDOFConstraint::SetRotationLimits(Vec3Arg inLimitMin, Vec3Arg inLimitMax)
228
+ {
229
+ mLimitMin[EAxis::RotationX] = inLimitMin.GetX();
230
+ mLimitMin[EAxis::RotationY] = inLimitMin.GetY();
231
+ mLimitMin[EAxis::RotationZ] = inLimitMin.GetZ();
232
+ mLimitMax[EAxis::RotationX] = inLimitMax.GetX();
233
+ mLimitMax[EAxis::RotationY] = inLimitMax.GetY();
234
+ mLimitMax[EAxis::RotationZ] = inLimitMax.GetZ();
235
+
236
+ UpdateRotationLimits();
237
+ UpdateFixedFreeAxis();
238
+ }
239
+
240
+ void SixDOFConstraint::SetMaxFriction(EAxis inAxis, float inFriction)
241
+ {
242
+ mMaxFriction[inAxis] = inFriction;
243
+
244
+ if (inAxis >= EAxis::TranslationX && inAxis <= EAxis::TranslationZ)
245
+ CacheTranslationMotorActive();
246
+ else
247
+ CacheRotationMotorActive();
248
+ }
249
+
250
+ void SixDOFConstraint::GetPositionConstraintProperties(Vec3 &outR1PlusU, Vec3 &outR2, Vec3 &outU) const
251
+ {
252
+ RVec3 p1 = mBody1->GetCenterOfMassTransform() * mLocalSpacePosition1;
253
+ RVec3 p2 = mBody2->GetCenterOfMassTransform() * mLocalSpacePosition2;
254
+ outR1PlusU = Vec3(p2 - mBody1->GetCenterOfMassPosition()); // r1 + u = (p1 - x1) + (p2 - p1) = p2 - x1
255
+ outR2 = Vec3(p2 - mBody2->GetCenterOfMassPosition());
256
+ outU = Vec3(p2 - p1);
257
+ }
258
+
259
+ Quat SixDOFConstraint::GetRotationInConstraintSpace() const
260
+ {
261
+ // Let b1, b2 be the center of mass transform of body1 and body2 (For body1 this is mBody1->GetCenterOfMassTransform())
262
+ // Let c1, c2 be the transform that takes a vector from constraint space to local space of body1 and body2 (For body1 this is Mat44::sRotationTranslation(mConstraintToBody1, mLocalSpacePosition1))
263
+ // Let q be the rotation of the constraint in constraint space
264
+ // b2 takes a vector from the local space of body2 to world space
265
+ // To express this in terms of b1: b2 = b1 * c1 * q * c2^-1
266
+ // c2^-1 goes from local body 2 space to constraint space
267
+ // q rotates the constraint
268
+ // c1 goes from constraint space to body 1 local space
269
+ // b1 goes from body 1 local space to world space
270
+ // So when the body rotations are given, q = (b1 * c1)^-1 * b2 c2
271
+ // Or: q = (q1 * c1)^-1 * (q2 * c2) if we're only interested in rotations
272
+ return (mBody1->GetRotation() * mConstraintToBody1).Conjugated() * mBody2->GetRotation() * mConstraintToBody2;
273
+ }
274
+
275
+ void SixDOFConstraint::CacheTranslationMotorActive()
276
+ {
277
+ mTranslationMotorActive = mMotorState[EAxis::TranslationX] != EMotorState::Off
278
+ || mMotorState[EAxis::TranslationY] != EMotorState::Off
279
+ || mMotorState[EAxis::TranslationZ] != EMotorState::Off
280
+ || HasFriction(EAxis::TranslationX)
281
+ || HasFriction(EAxis::TranslationY)
282
+ || HasFriction(EAxis::TranslationZ);
283
+ }
284
+
285
+ void SixDOFConstraint::CacheRotationMotorActive()
286
+ {
287
+ mRotationMotorActive = mMotorState[EAxis::RotationX] != EMotorState::Off
288
+ || mMotorState[EAxis::RotationY] != EMotorState::Off
289
+ || mMotorState[EAxis::RotationZ] != EMotorState::Off
290
+ || HasFriction(EAxis::RotationX)
291
+ || HasFriction(EAxis::RotationY)
292
+ || HasFriction(EAxis::RotationZ);
293
+ }
294
+
295
+ void SixDOFConstraint::CacheRotationPositionMotorActive()
296
+ {
297
+ mRotationPositionMotorActive = 0;
298
+ for (int i = 0; i < 3; ++i)
299
+ if (mMotorState[EAxis::RotationX + i] == EMotorState::Position)
300
+ mRotationPositionMotorActive |= 1 << i;
301
+ }
302
+
303
+ void SixDOFConstraint::CacheHasSpringLimits()
304
+ {
305
+ mHasSpringLimits = mLimitsSpringSettings[EAxis::TranslationX].mFrequency > 0.0f
306
+ || mLimitsSpringSettings[EAxis::TranslationY].mFrequency > 0.0f
307
+ || mLimitsSpringSettings[EAxis::TranslationZ].mFrequency > 0.0f;
308
+ }
309
+
310
+ void SixDOFConstraint::SetMotorState(EAxis inAxis, EMotorState inState)
311
+ {
312
+ JPH_ASSERT(inState == EMotorState::Off || mMotorSettings[inAxis].IsValid());
313
+
314
+ if (mMotorState[inAxis] != inState)
315
+ {
316
+ mMotorState[inAxis] = inState;
317
+
318
+ // Ensure that warm starting next frame doesn't apply any impulses (motor parts are repurposed for different modes)
319
+ if (inAxis >= EAxis::TranslationX && inAxis <= EAxis::TranslationZ)
320
+ {
321
+ mMotorTranslationConstraintPart[inAxis - EAxis::TranslationX].Deactivate();
322
+
323
+ CacheTranslationMotorActive();
324
+ }
325
+ else
326
+ {
327
+ JPH_ASSERT(inAxis >= EAxis::RotationX && inAxis <= EAxis::RotationZ);
328
+
329
+ mMotorRotationConstraintPart[inAxis - EAxis::RotationX].Deactivate();
330
+
331
+ CacheRotationMotorActive();
332
+ CacheRotationPositionMotorActive();
333
+ }
334
+ }
335
+ }
336
+
337
+ void SixDOFConstraint::SetTargetOrientationCS(QuatArg inOrientation)
338
+ {
339
+ Quat q_swing, q_twist;
340
+ inOrientation.GetSwingTwist(q_swing, q_twist);
341
+
342
+ uint clamped_axis;
343
+ mSwingTwistConstraintPart.ClampSwingTwist(q_swing, q_twist, clamped_axis);
344
+
345
+ if (clamped_axis != 0)
346
+ mTargetOrientation = q_swing * q_twist;
347
+ else
348
+ mTargetOrientation = inOrientation;
349
+ }
350
+
351
+ void SixDOFConstraint::SetupVelocityConstraint(float inDeltaTime)
352
+ {
353
+ // Get body rotations
354
+ Quat rotation1 = mBody1->GetRotation();
355
+ Quat rotation2 = mBody2->GetRotation();
356
+
357
+ // Quaternion that rotates from body1's constraint space to world space
358
+ Quat constraint_body1_to_world = rotation1 * mConstraintToBody1;
359
+
360
+ // Store world space axis of constraint space
361
+ Mat44 translation_axis_mat = Mat44::sRotation(constraint_body1_to_world);
362
+ for (int i = 0; i < 3; ++i)
363
+ mTranslationAxis[i] = translation_axis_mat.GetColumn3(i);
364
+
365
+ if (IsTranslationFullyConstrained())
366
+ {
367
+ // All translation locked: Setup point constraint
368
+ mPointConstraintPart.CalculateConstraintProperties(*mBody1, Mat44::sRotation(rotation1), mLocalSpacePosition1, *mBody2, Mat44::sRotation(rotation2), mLocalSpacePosition2);
369
+ }
370
+ else if (IsTranslationConstrained() || mTranslationMotorActive)
371
+ {
372
+ // Update world space positions (the bodies may have moved)
373
+ Vec3 r1_plus_u, r2, u;
374
+ GetPositionConstraintProperties(r1_plus_u, r2, u);
375
+
376
+ // Setup axis constraint parts
377
+ for (int i = 0; i < 3; ++i)
378
+ {
379
+ EAxis axis = EAxis(EAxis::TranslationX + i);
380
+
381
+ Vec3 translation_axis = mTranslationAxis[i];
382
+
383
+ // Calculate displacement along this axis
384
+ float d = translation_axis.Dot(u);
385
+ mDisplacement[i] = d; // Store for SolveVelocityConstraint
386
+
387
+ // Setup limit constraint
388
+ bool constraint_active = false;
389
+ float constraint_value = 0.0f;
390
+ if (IsFixedAxis(axis))
391
+ {
392
+ // When constraint is fixed it is always active
393
+ constraint_value = d - mLimitMin[i];
394
+ constraint_active = true;
395
+ }
396
+ else if (!IsFreeAxis(axis))
397
+ {
398
+ // When constraint is limited, it is only active when outside of the allowed range
399
+ if (d <= mLimitMin[i])
400
+ {
401
+ constraint_value = d - mLimitMin[i];
402
+ constraint_active = true;
403
+ }
404
+ else if (d >= mLimitMax[i])
405
+ {
406
+ constraint_value = d - mLimitMax[i];
407
+ constraint_active = true;
408
+ }
409
+ }
410
+
411
+ if (constraint_active)
412
+ mTranslationConstraintPart[i].CalculateConstraintPropertiesWithSettings(inDeltaTime, *mBody1, r1_plus_u, *mBody2, r2, translation_axis, 0.0f, constraint_value, mLimitsSpringSettings[i]);
413
+ else
414
+ mTranslationConstraintPart[i].Deactivate();
415
+
416
+ // Setup motor constraint
417
+ switch (mMotorState[i])
418
+ {
419
+ case EMotorState::Off:
420
+ if (HasFriction(axis))
421
+ mMotorTranslationConstraintPart[i].CalculateConstraintProperties(*mBody1, r1_plus_u, *mBody2, r2, translation_axis);
422
+ else
423
+ mMotorTranslationConstraintPart[i].Deactivate();
424
+ break;
425
+
426
+ case EMotorState::Velocity:
427
+ mMotorTranslationConstraintPart[i].CalculateConstraintProperties(*mBody1, r1_plus_u, *mBody2, r2, translation_axis, -mTargetVelocity[i]);
428
+ break;
429
+
430
+ case EMotorState::Position:
431
+ {
432
+ const SpringSettings &spring_settings = mMotorSettings[i].mSpringSettings;
433
+ if (spring_settings.HasStiffness())
434
+ mMotorTranslationConstraintPart[i].CalculateConstraintPropertiesWithSettings(inDeltaTime, *mBody1, r1_plus_u, *mBody2, r2, translation_axis, 0.0f, translation_axis.Dot(u) - mTargetPosition[i], spring_settings);
435
+ else
436
+ mMotorTranslationConstraintPart[i].Deactivate();
437
+ break;
438
+ }
439
+ }
440
+ }
441
+ }
442
+
443
+ // Setup rotation constraints
444
+ if (IsRotationFullyConstrained())
445
+ {
446
+ // All rotation locked: Setup rotation constraint
447
+ mRotationConstraintPart.CalculateConstraintProperties(*mBody1, Mat44::sRotation(rotation1), *mBody2, Mat44::sRotation(rotation2));
448
+ }
449
+ else if (IsRotationConstrained() || mRotationMotorActive)
450
+ {
451
+ // GetRotationInConstraintSpace without redoing the calculation of constraint_body1_to_world
452
+ Quat constraint_body2_to_world = rotation2 * mConstraintToBody2;
453
+ Quat q = constraint_body1_to_world.Conjugated() * constraint_body2_to_world;
454
+
455
+ // Use swing twist constraint part
456
+ if (IsRotationConstrained())
457
+ mSwingTwistConstraintPart.CalculateConstraintProperties(*mBody1, *mBody2, q, constraint_body1_to_world);
458
+ else
459
+ mSwingTwistConstraintPart.Deactivate();
460
+
461
+ if (mRotationMotorActive)
462
+ {
463
+ // Calculate rotation motor axis
464
+ Mat44 ws_axis = Mat44::sRotation(constraint_body2_to_world);
465
+ for (int i = 0; i < 3; ++i)
466
+ mRotationAxis[i] = ws_axis.GetColumn3(i);
467
+
468
+ // Get target orientation along the shortest path from q
469
+ Quat target_orientation = q.Dot(mTargetOrientation) > 0.0f? mTargetOrientation : -mTargetOrientation;
470
+
471
+ // The definition of the constraint rotation q:
472
+ // R2 * ConstraintToBody2 = R1 * ConstraintToBody1 * q (1)
473
+ //
474
+ // R2' is the rotation of body 2 when reaching the target_orientation:
475
+ // R2' * ConstraintToBody2 = R1 * ConstraintToBody1 * target_orientation (2)
476
+ //
477
+ // The difference in body 2 space:
478
+ // R2' = R2 * diff_body2 (3)
479
+ //
480
+ // We want to specify the difference in the constraint space of body 2:
481
+ // diff_body2 = ConstraintToBody2 * diff * ConstraintToBody2^* (4)
482
+ //
483
+ // Extracting R2' from 2: R2' = R1 * ConstraintToBody1 * target_orientation * ConstraintToBody2^* (5)
484
+ // Combining 3 & 4: R2' = R2 * ConstraintToBody2 * diff * ConstraintToBody2^* (6)
485
+ // Combining 1 & 6: R2' = R1 * ConstraintToBody1 * q * diff * ConstraintToBody2^* (7)
486
+ // Combining 5 & 7: R1 * ConstraintToBody1 * target_orientation * ConstraintToBody2^* = R1 * ConstraintToBody1 * q * diff * ConstraintToBody2^*
487
+ // <=> target_orientation = q * diff
488
+ // <=> diff = q^* * target_orientation
489
+ Quat diff = q.Conjugated() * target_orientation;
490
+
491
+ // Project diff so that only rotation around axis that have a position motor are remaining
492
+ Quat projected_diff;
493
+ switch (mRotationPositionMotorActive)
494
+ {
495
+ case 0b001:
496
+ // Keep only rotation around X
497
+ projected_diff = diff.GetTwist(Vec3::sAxisX());
498
+ break;
499
+
500
+ case 0b010:
501
+ // Keep only rotation around Y
502
+ projected_diff = diff.GetTwist(Vec3::sAxisY());
503
+ break;
504
+
505
+ case 0b100:
506
+ // Keep only rotation around Z
507
+ projected_diff = diff.GetTwist(Vec3::sAxisZ());
508
+ break;
509
+
510
+ case 0b011:
511
+ // Remove rotation around Z
512
+ // q = swing_xy * twist_z <=> swing_xy = q * twist_z^*
513
+ projected_diff = diff * diff.GetTwist(Vec3::sAxisZ()).Conjugated();
514
+ break;
515
+
516
+ case 0b101:
517
+ // Remove rotation around Y
518
+ // q = swing_xz * twist_y <=> swing_xz = q * twist_y^*
519
+ projected_diff = diff * diff.GetTwist(Vec3::sAxisY()).Conjugated();
520
+ break;
521
+
522
+ case 0b110:
523
+ // Remove rotation around X
524
+ // q = swing_yz * twist_x <=> swing_yz = q * twist_x^*
525
+ projected_diff = diff * diff.GetTwist(Vec3::sAxisX()).Conjugated();
526
+ break;
527
+
528
+ case 0b111:
529
+ default: // All motors off is handled here but the results are unused
530
+ // Keep entire rotation
531
+ projected_diff = diff;
532
+ break;
533
+ }
534
+
535
+ // Approximate error angles
536
+ // The imaginary part of a quaternion is rotation_axis * sin(angle / 2)
537
+ // If angle is small, sin(x) = x so angle[i] ~ 2.0f * rotation_axis[i]
538
+ // We'll be making small time steps, so if the angle is not small at least the sign will be correct and we'll move in the right direction
539
+ Vec3 rotation_error = -2.0f * projected_diff.GetXYZ();
540
+
541
+ // Setup motors
542
+ for (int i = 0; i < 3; ++i)
543
+ {
544
+ EAxis axis = EAxis(EAxis::RotationX + i);
545
+
546
+ Vec3 rotation_axis = mRotationAxis[i];
547
+
548
+ switch (mMotorState[axis])
549
+ {
550
+ case EMotorState::Off:
551
+ if (HasFriction(axis))
552
+ mMotorRotationConstraintPart[i].CalculateConstraintProperties(*mBody1, *mBody2, rotation_axis);
553
+ else
554
+ mMotorRotationConstraintPart[i].Deactivate();
555
+ break;
556
+
557
+ case EMotorState::Velocity:
558
+ mMotorRotationConstraintPart[i].CalculateConstraintProperties(*mBody1, *mBody2, rotation_axis, -mTargetAngularVelocity[i]);
559
+ break;
560
+
561
+ case EMotorState::Position:
562
+ {
563
+ const SpringSettings &spring_settings = mMotorSettings[axis].mSpringSettings;
564
+ if (spring_settings.HasStiffness())
565
+ mMotorRotationConstraintPart[i].CalculateConstraintPropertiesWithSettings(inDeltaTime, *mBody1, *mBody2, rotation_axis, 0.0f, rotation_error[i], spring_settings);
566
+ else
567
+ mMotorRotationConstraintPart[i].Deactivate();
568
+ break;
569
+ }
570
+ }
571
+ }
572
+ }
573
+ }
574
+ }
575
+
576
+ void SixDOFConstraint::ResetWarmStart()
577
+ {
578
+ for (AxisConstraintPart &c : mMotorTranslationConstraintPart)
579
+ c.Deactivate();
580
+ for (AngleConstraintPart &c : mMotorRotationConstraintPart)
581
+ c.Deactivate();
582
+ mRotationConstraintPart.Deactivate();
583
+ mSwingTwistConstraintPart.Deactivate();
584
+ mPointConstraintPart.Deactivate();
585
+ for (AxisConstraintPart &c : mTranslationConstraintPart)
586
+ c.Deactivate();
587
+ }
588
+
589
+ void SixDOFConstraint::WarmStartVelocityConstraint(float inWarmStartImpulseRatio)
590
+ {
591
+ // Warm start translation motors
592
+ if (mTranslationMotorActive)
593
+ for (int i = 0; i < 3; ++i)
594
+ if (mMotorTranslationConstraintPart[i].IsActive())
595
+ mMotorTranslationConstraintPart[i].WarmStart(*mBody1, *mBody2, mTranslationAxis[i], inWarmStartImpulseRatio);
596
+
597
+ // Warm start rotation motors
598
+ if (mRotationMotorActive)
599
+ for (AngleConstraintPart &c : mMotorRotationConstraintPart)
600
+ if (c.IsActive())
601
+ c.WarmStart(*mBody1, *mBody2, inWarmStartImpulseRatio);
602
+
603
+ // Warm start rotation constraints
604
+ if (IsRotationFullyConstrained())
605
+ mRotationConstraintPart.WarmStart(*mBody1, *mBody2, inWarmStartImpulseRatio);
606
+ else if (IsRotationConstrained())
607
+ mSwingTwistConstraintPart.WarmStart(*mBody1, *mBody2, inWarmStartImpulseRatio);
608
+
609
+ // Warm start translation constraints
610
+ if (IsTranslationFullyConstrained())
611
+ mPointConstraintPart.WarmStart(*mBody1, *mBody2, inWarmStartImpulseRatio);
612
+ else if (IsTranslationConstrained())
613
+ for (int i = 0; i < 3; ++i)
614
+ if (mTranslationConstraintPart[i].IsActive())
615
+ mTranslationConstraintPart[i].WarmStart(*mBody1, *mBody2, mTranslationAxis[i], inWarmStartImpulseRatio);
616
+ }
617
+
618
+ bool SixDOFConstraint::SolveVelocityConstraint(float inDeltaTime)
619
+ {
620
+ bool impulse = false;
621
+
622
+ // Solve translation motor
623
+ if (mTranslationMotorActive)
624
+ for (int i = 0; i < 3; ++i)
625
+ if (mMotorTranslationConstraintPart[i].IsActive())
626
+ switch (mMotorState[i])
627
+ {
628
+ case EMotorState::Off:
629
+ {
630
+ // Apply friction only
631
+ float max_lambda = mMaxFriction[i] * inDeltaTime;
632
+ impulse |= mMotorTranslationConstraintPart[i].SolveVelocityConstraint(*mBody1, *mBody2, mTranslationAxis[i], -max_lambda, max_lambda);
633
+ break;
634
+ }
635
+
636
+ case EMotorState::Velocity:
637
+ case EMotorState::Position:
638
+ // Drive motor
639
+ impulse |= mMotorTranslationConstraintPart[i].SolveVelocityConstraint(*mBody1, *mBody2, mTranslationAxis[i], inDeltaTime * mMotorSettings[i].mMinForceLimit, inDeltaTime * mMotorSettings[i].mMaxForceLimit);
640
+ break;
641
+ }
642
+
643
+ // Solve rotation motor
644
+ if (mRotationMotorActive)
645
+ for (int i = 0; i < 3; ++i)
646
+ {
647
+ EAxis axis = EAxis(EAxis::RotationX + i);
648
+ if (mMotorRotationConstraintPart[i].IsActive())
649
+ switch (mMotorState[axis])
650
+ {
651
+ case EMotorState::Off:
652
+ {
653
+ // Apply friction only
654
+ float max_lambda = mMaxFriction[axis] * inDeltaTime;
655
+ impulse |= mMotorRotationConstraintPart[i].SolveVelocityConstraint(*mBody1, *mBody2, mRotationAxis[i], -max_lambda, max_lambda);
656
+ break;
657
+ }
658
+
659
+ case EMotorState::Velocity:
660
+ case EMotorState::Position:
661
+ // Drive motor
662
+ impulse |= mMotorRotationConstraintPart[i].SolveVelocityConstraint(*mBody1, *mBody2, mRotationAxis[i], inDeltaTime * mMotorSettings[axis].mMinTorqueLimit, inDeltaTime * mMotorSettings[axis].mMaxTorqueLimit);
663
+ break;
664
+ }
665
+ }
666
+
667
+ // Solve rotation constraint
668
+ if (IsRotationFullyConstrained())
669
+ impulse |= mRotationConstraintPart.SolveVelocityConstraint(*mBody1, *mBody2);
670
+ else if (IsRotationConstrained())
671
+ impulse |= mSwingTwistConstraintPart.SolveVelocityConstraint(*mBody1, *mBody2);
672
+
673
+ // Solve position constraint
674
+ if (IsTranslationFullyConstrained())
675
+ impulse |= mPointConstraintPart.SolveVelocityConstraint(*mBody1, *mBody2);
676
+ else if (IsTranslationConstrained())
677
+ for (int i = 0; i < 3; ++i)
678
+ if (mTranslationConstraintPart[i].IsActive())
679
+ {
680
+ // If the axis is not fixed it must be limited (or else the constraint would not be active)
681
+ // Calculate the min and max constraint force based on on which side we're limited
682
+ float limit_min = -FLT_MAX, limit_max = FLT_MAX;
683
+ if (!IsFixedAxis(EAxis(EAxis::TranslationX + i)))
684
+ {
685
+ JPH_ASSERT(!IsFreeAxis(EAxis(EAxis::TranslationX + i)));
686
+ if (mDisplacement[i] <= mLimitMin[i])
687
+ limit_min = 0;
688
+ else if (mDisplacement[i] >= mLimitMax[i])
689
+ limit_max = 0;
690
+ }
691
+
692
+ impulse |= mTranslationConstraintPart[i].SolveVelocityConstraint(*mBody1, *mBody2, mTranslationAxis[i], limit_min, limit_max);
693
+ }
694
+
695
+ return impulse;
696
+ }
697
+
698
+ bool SixDOFConstraint::SolvePositionConstraint(float inDeltaTime, float inBaumgarte)
699
+ {
700
+ bool impulse = false;
701
+
702
+ if (IsRotationFullyConstrained())
703
+ {
704
+ // Rotation locked: Solve rotation constraint
705
+
706
+ // Inverse of initial rotation from body 1 to body 2 in body 1 space
707
+ // Definition of initial orientation r0: q2 = q1 r0
708
+ // Initial rotation (see: GetRotationInConstraintSpace): q2 = q1 c1 c2^-1
709
+ // So: r0^-1 = (c1 c2^-1)^-1 = c2 * c1^-1
710
+ Quat constraint_to_body1 = mConstraintToBody1 * Quat::sEulerAngles(GetRotationLimitsMin());
711
+ Quat inv_initial_orientation = mConstraintToBody2 * constraint_to_body1.Conjugated();
712
+
713
+ // Solve rotation violations
714
+ mRotationConstraintPart.CalculateConstraintProperties(*mBody1, Mat44::sRotation(mBody1->GetRotation()), *mBody2, Mat44::sRotation(mBody2->GetRotation()));
715
+ impulse |= mRotationConstraintPart.SolvePositionConstraint(*mBody1, *mBody2, inv_initial_orientation, inBaumgarte);
716
+ }
717
+ else if (IsRotationConstrained())
718
+ {
719
+ // Rotation partially constraint
720
+
721
+ // Solve rotation violations
722
+ Quat q = GetRotationInConstraintSpace();
723
+ impulse |= mSwingTwistConstraintPart.SolvePositionConstraint(*mBody1, *mBody2, q, mConstraintToBody1, mConstraintToBody2, inBaumgarte);
724
+ }
725
+
726
+ // Solve position violations
727
+ if (IsTranslationFullyConstrained())
728
+ {
729
+ // Translation locked: Solve point constraint
730
+ Vec3 local_space_position1 = mLocalSpacePosition1 + mConstraintToBody1 * GetTranslationLimitsMin();
731
+ mPointConstraintPart.CalculateConstraintProperties(*mBody1, Mat44::sRotation(mBody1->GetRotation()), local_space_position1, *mBody2, Mat44::sRotation(mBody2->GetRotation()), mLocalSpacePosition2);
732
+ impulse |= mPointConstraintPart.SolvePositionConstraint(*mBody1, *mBody2, inBaumgarte);
733
+ }
734
+ else if (IsTranslationConstrained())
735
+ {
736
+ // Translation partially locked: Solve per axis
737
+ for (int i = 0; i < 3; ++i)
738
+ if (mLimitsSpringSettings[i].mFrequency <= 0.0f) // If not soft limit
739
+ {
740
+ // Update world space positions (the bodies may have moved)
741
+ Vec3 r1_plus_u, r2, u;
742
+ GetPositionConstraintProperties(r1_plus_u, r2, u);
743
+
744
+ // Quaternion that rotates from body1's constraint space to world space
745
+ Quat constraint_body1_to_world = mBody1->GetRotation() * mConstraintToBody1;
746
+
747
+ // Calculate axis
748
+ Vec3 translation_axis;
749
+ switch (i)
750
+ {
751
+ case 0: translation_axis = constraint_body1_to_world.RotateAxisX(); break;
752
+ case 1: translation_axis = constraint_body1_to_world.RotateAxisY(); break;
753
+ default: JPH_ASSERT(i == 2); translation_axis = constraint_body1_to_world.RotateAxisZ(); break;
754
+ }
755
+
756
+ // Determine position error
757
+ float error = 0.0f;
758
+ EAxis axis(EAxis(EAxis::TranslationX + i));
759
+ if (IsFixedAxis(axis))
760
+ error = u.Dot(translation_axis) - mLimitMin[axis];
761
+ else if (!IsFreeAxis(axis))
762
+ {
763
+ float displacement = u.Dot(translation_axis);
764
+ if (displacement <= mLimitMin[axis])
765
+ error = displacement - mLimitMin[axis];
766
+ else if (displacement >= mLimitMax[axis])
767
+ error = displacement - mLimitMax[axis];
768
+ }
769
+
770
+ if (error != 0.0f)
771
+ {
772
+ // Setup axis constraint part and solve it
773
+ mTranslationConstraintPart[i].CalculateConstraintProperties(*mBody1, r1_plus_u, *mBody2, r2, translation_axis);
774
+ impulse |= mTranslationConstraintPart[i].SolvePositionConstraint(*mBody1, *mBody2, translation_axis, error, inBaumgarte);
775
+ }
776
+ }
777
+ }
778
+
779
+ return impulse;
780
+ }
781
+
782
+ #ifdef JPH_DEBUG_RENDERER
783
+ void SixDOFConstraint::DrawConstraint(DebugRenderer *inRenderer) const
784
+ {
785
+ // Get constraint properties in world space
786
+ RVec3 position1 = mBody1->GetCenterOfMassTransform() * mLocalSpacePosition1;
787
+ Quat rotation1 = mBody1->GetRotation() * mConstraintToBody1;
788
+ Quat rotation2 = mBody2->GetRotation() * mConstraintToBody2;
789
+
790
+ // Draw constraint orientation
791
+ inRenderer->DrawCoordinateSystem(RMat44::sRotationTranslation(rotation1, position1), mDrawConstraintSize);
792
+
793
+ if ((IsRotationConstrained() || mRotationPositionMotorActive != 0) && !IsRotationFullyConstrained())
794
+ {
795
+ // Draw current swing and twist
796
+ Quat q = GetRotationInConstraintSpace();
797
+ Quat q_swing, q_twist;
798
+ q.GetSwingTwist(q_swing, q_twist);
799
+ inRenderer->DrawLine(position1, position1 + mDrawConstraintSize * (rotation1 * q_twist).RotateAxisY(), Color::sWhite);
800
+ inRenderer->DrawLine(position1, position1 + mDrawConstraintSize * (rotation1 * q_swing).RotateAxisX(), Color::sWhite);
801
+ }
802
+
803
+ // Draw target rotation
804
+ Quat m_swing, m_twist;
805
+ mTargetOrientation.GetSwingTwist(m_swing, m_twist);
806
+ if (mMotorState[EAxis::RotationX] == EMotorState::Position)
807
+ inRenderer->DrawLine(position1, position1 + mDrawConstraintSize * (rotation1 * m_twist).RotateAxisY(), Color::sYellow);
808
+ if (mMotorState[EAxis::RotationY] == EMotorState::Position || mMotorState[EAxis::RotationZ] == EMotorState::Position)
809
+ inRenderer->DrawLine(position1, position1 + mDrawConstraintSize * (rotation1 * m_swing).RotateAxisX(), Color::sYellow);
810
+
811
+ // Draw target angular velocity
812
+ Vec3 target_angular_velocity = Vec3::sZero();
813
+ for (int i = 0; i < 3; ++i)
814
+ if (mMotorState[EAxis::RotationX + i] == EMotorState::Velocity)
815
+ target_angular_velocity.SetComponent(i, mTargetAngularVelocity[i]);
816
+ if (target_angular_velocity != Vec3::sZero())
817
+ inRenderer->DrawArrow(position1, position1 + rotation2 * target_angular_velocity, Color::sRed, 0.1f);
818
+ }
819
+
820
+ void SixDOFConstraint::DrawConstraintLimits(DebugRenderer *inRenderer) const
821
+ {
822
+ // Get matrix that transforms from constraint space to world space
823
+ RMat44 constraint_body1_to_world = RMat44::sRotationTranslation(mBody1->GetRotation() * mConstraintToBody1, mBody1->GetCenterOfMassTransform() * mLocalSpacePosition1);
824
+
825
+ // Draw limits
826
+ if (mSwingTwistConstraintPart.GetSwingType() == ESwingType::Pyramid)
827
+ inRenderer->DrawSwingPyramidLimits(constraint_body1_to_world, mLimitMin[EAxis::RotationY], mLimitMax[EAxis::RotationY], mLimitMin[EAxis::RotationZ], mLimitMax[EAxis::RotationZ], mDrawConstraintSize, Color::sGreen, DebugRenderer::ECastShadow::Off);
828
+ else
829
+ inRenderer->DrawSwingConeLimits(constraint_body1_to_world, mLimitMax[EAxis::RotationY], mLimitMax[EAxis::RotationZ], mDrawConstraintSize, Color::sGreen, DebugRenderer::ECastShadow::Off);
830
+ inRenderer->DrawPie(constraint_body1_to_world.GetTranslation(), mDrawConstraintSize, constraint_body1_to_world.GetAxisX(), constraint_body1_to_world.GetAxisY(), mLimitMin[EAxis::RotationX], mLimitMax[EAxis::RotationX], Color::sPurple, DebugRenderer::ECastShadow::Off);
831
+ }
832
+ #endif // JPH_DEBUG_RENDERER
833
+
834
+ void SixDOFConstraint::SaveState(StateRecorder &inStream) const
835
+ {
836
+ TwoBodyConstraint::SaveState(inStream);
837
+
838
+ for (const AxisConstraintPart &c : mTranslationConstraintPart)
839
+ c.SaveState(inStream);
840
+ mPointConstraintPart.SaveState(inStream);
841
+ mSwingTwistConstraintPart.SaveState(inStream);
842
+ mRotationConstraintPart.SaveState(inStream);
843
+ for (const AxisConstraintPart &c : mMotorTranslationConstraintPart)
844
+ c.SaveState(inStream);
845
+ for (const AngleConstraintPart &c : mMotorRotationConstraintPart)
846
+ c.SaveState(inStream);
847
+
848
+ inStream.Write(mMotorState);
849
+ inStream.Write(mTargetVelocity);
850
+ inStream.Write(mTargetAngularVelocity);
851
+ inStream.Write(mTargetPosition);
852
+ inStream.Write(mTargetOrientation);
853
+ }
854
+
855
+ void SixDOFConstraint::RestoreState(StateRecorder &inStream)
856
+ {
857
+ TwoBodyConstraint::RestoreState(inStream);
858
+
859
+ for (AxisConstraintPart &c : mTranslationConstraintPart)
860
+ c.RestoreState(inStream);
861
+ mPointConstraintPart.RestoreState(inStream);
862
+ mSwingTwistConstraintPart.RestoreState(inStream);
863
+ mRotationConstraintPart.RestoreState(inStream);
864
+ for (AxisConstraintPart &c : mMotorTranslationConstraintPart)
865
+ c.RestoreState(inStream);
866
+ for (AngleConstraintPart &c : mMotorRotationConstraintPart)
867
+ c.RestoreState(inStream);
868
+
869
+ inStream.Read(mMotorState);
870
+ inStream.Read(mTargetVelocity);
871
+ inStream.Read(mTargetAngularVelocity);
872
+ inStream.Read(mTargetPosition);
873
+ inStream.Read(mTargetOrientation);
874
+
875
+ CacheTranslationMotorActive();
876
+ CacheRotationMotorActive();
877
+ CacheRotationPositionMotorActive();
878
+ }
879
+
880
+ Ref<ConstraintSettings> SixDOFConstraint::GetConstraintSettings() const
881
+ {
882
+ SixDOFConstraintSettings *settings = new SixDOFConstraintSettings;
883
+ ToConstraintSettings(*settings);
884
+ settings->mSpace = EConstraintSpace::LocalToBodyCOM;
885
+ settings->mPosition1 = RVec3(mLocalSpacePosition1);
886
+ settings->mAxisX1 = mConstraintToBody1.RotateAxisX();
887
+ settings->mAxisY1 = mConstraintToBody1.RotateAxisY();
888
+ settings->mPosition2 = RVec3(mLocalSpacePosition2);
889
+ settings->mAxisX2 = mConstraintToBody2.RotateAxisX();
890
+ settings->mAxisY2 = mConstraintToBody2.RotateAxisY();
891
+ settings->mSwingType = mSwingTwistConstraintPart.GetSwingType();
892
+ memcpy(settings->mLimitMin, mLimitMin, sizeof(mLimitMin));
893
+ memcpy(settings->mLimitMax, mLimitMax, sizeof(mLimitMax));
894
+ memcpy(settings->mMaxFriction, mMaxFriction, sizeof(mMaxFriction));
895
+ for (int i = 0; i < EAxis::Num; ++i)
896
+ settings->mMotorSettings[i] = mMotorSettings[i];
897
+ return settings;
898
+ }
899
+
900
+ JPH_NAMESPACE_END