@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,191 @@
1
+ // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
+ // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
+ // SPDX-License-Identifier: MIT
4
+
5
+ #pragma once
6
+
7
+ #include <Jolt/Physics/Constraints/TwoBodyConstraint.h>
8
+ #include <Jolt/Physics/Constraints/PathConstraintPath.h>
9
+ #include <Jolt/Physics/Constraints/MotorSettings.h>
10
+ #include <Jolt/Physics/Constraints/ConstraintPart/AxisConstraintPart.h>
11
+ #include <Jolt/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h>
12
+ #include <Jolt/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h>
13
+ #include <Jolt/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h>
14
+
15
+ JPH_NAMESPACE_BEGIN
16
+
17
+ JPH_SUPPRESS_WARNING_PUSH
18
+ JPH_GCC_SUPPRESS_WARNING("-Wshadow") // GCC complains about the 'Free' value conflicting with the 'Free' method
19
+
20
+ /// How to constrain the rotation of the body to a PathConstraint
21
+ enum class EPathRotationConstraintType
22
+ {
23
+ Free, ///< Do not constrain the rotation of the body at all
24
+ ConstrainAroundTangent, ///< Only allow rotation around the tangent vector (following the path)
25
+ ConstrainAroundNormal, ///< Only allow rotation around the normal vector (perpendicular to the path)
26
+ ConstrainAroundBinormal, ///< Only allow rotation around the binormal vector (perpendicular to the path)
27
+ ConstrainToPath, ///< Fully constrain the rotation of body 2 to the path (following the tangent and normal of the path)
28
+ FullyConstrained, ///< Fully constrain the rotation of the body 2 to the rotation of body 1
29
+ };
30
+
31
+ JPH_SUPPRESS_WARNING_POP
32
+
33
+ /// Path constraint settings, used to constrain the degrees of freedom between two bodies to a path
34
+ ///
35
+ /// The requirements of the path are that:
36
+ /// * Tangent, normal and bi-normal form an orthonormal basis with: tangent cross bi-normal = normal
37
+ /// * The path points along the tangent vector
38
+ /// * The path is continuous so doesn't contain any sharp corners
39
+ ///
40
+ /// The reason for all this is that the constraint acts like a slider constraint with the sliding axis being the tangent vector (the assumption here is that delta time will be small enough so that the path is linear for that delta time).
41
+ class JPH_EXPORT PathConstraintSettings final : public TwoBodyConstraintSettings
42
+ {
43
+ JPH_DECLARE_SERIALIZABLE_VIRTUAL(JPH_EXPORT, PathConstraintSettings)
44
+
45
+ public:
46
+ // See: ConstraintSettings::SaveBinaryState
47
+ virtual void SaveBinaryState(StreamOut &inStream) const override;
48
+
49
+ /// Create an instance of this constraint
50
+ virtual TwoBodyConstraint * Create(Body &inBody1, Body &inBody2) const override;
51
+
52
+ /// The path that constrains the two bodies
53
+ RefConst<PathConstraintPath> mPath;
54
+
55
+ /// The position of the path start relative to world transform of body 1
56
+ Vec3 mPathPosition = Vec3::sZero();
57
+
58
+ /// The rotation of the path start relative to world transform of body 1
59
+ Quat mPathRotation = Quat::sIdentity();
60
+
61
+ /// The fraction along the path that corresponds to the initial position of body 2. Usually this is 0, the beginning of the path. But if you want to start an object halfway the path you can calculate this with mPath->GetClosestPoint(point on path to attach body to).
62
+ float mPathFraction = 0.0f;
63
+
64
+ /// Maximum amount of friction force to apply (N) when not driven by a motor.
65
+ float mMaxFrictionForce = 0.0f;
66
+
67
+ /// In case the constraint is powered, this determines the motor settings along the path
68
+ MotorSettings mPositionMotorSettings;
69
+
70
+ /// How to constrain the rotation of the body to the path
71
+ EPathRotationConstraintType mRotationConstraintType = EPathRotationConstraintType::Free;
72
+
73
+ protected:
74
+ // See: ConstraintSettings::RestoreBinaryState
75
+ virtual void RestoreBinaryState(StreamIn &inStream) override;
76
+ };
77
+
78
+ /// Path constraint, used to constrain the degrees of freedom between two bodies to a path
79
+ class JPH_EXPORT PathConstraint final : public TwoBodyConstraint
80
+ {
81
+ public:
82
+ JPH_OVERRIDE_NEW_DELETE
83
+
84
+ /// Construct point constraint
85
+ PathConstraint(Body &inBody1, Body &inBody2, const PathConstraintSettings &inSettings);
86
+
87
+ // Generic interface of a constraint
88
+ virtual EConstraintSubType GetSubType() const override { return EConstraintSubType::Path; }
89
+ virtual void NotifyShapeChanged(const BodyID &inBodyID, Vec3Arg inDeltaCOM) override;
90
+ virtual void SetupVelocityConstraint(float inDeltaTime) override;
91
+ virtual void ResetWarmStart() override;
92
+ virtual void WarmStartVelocityConstraint(float inWarmStartImpulseRatio) override;
93
+ virtual bool SolveVelocityConstraint(float inDeltaTime) override;
94
+ virtual bool SolvePositionConstraint(float inDeltaTime, float inBaumgarte) override;
95
+ #ifdef JPH_DEBUG_RENDERER
96
+ virtual void DrawConstraint(DebugRenderer *inRenderer) const override;
97
+ #endif // JPH_DEBUG_RENDERER
98
+ virtual void SaveState(StateRecorder &inStream) const override;
99
+ virtual void RestoreState(StateRecorder &inStream) override;
100
+ virtual bool IsActive() const override { return TwoBodyConstraint::IsActive() && mPath != nullptr; }
101
+ virtual Ref<ConstraintSettings> GetConstraintSettings() const override;
102
+
103
+ // See: TwoBodyConstraint
104
+ virtual Mat44 GetConstraintToBody1Matrix() const override { return mPathToBody1; }
105
+ virtual Mat44 GetConstraintToBody2Matrix() const override { return mPathToBody2; }
106
+
107
+ /// Update the path for this constraint
108
+ void SetPath(const PathConstraintPath *inPath, float inPathFraction);
109
+
110
+ /// Access to the current path
111
+ const PathConstraintPath * GetPath() const { return mPath; }
112
+
113
+ /// Access to the current fraction along the path e [0, GetPath()->GetMaxPathFraction()]
114
+ float GetPathFraction() const { return mPathFraction; }
115
+
116
+ /// Friction control
117
+ void SetMaxFrictionForce(float inFrictionForce) { mMaxFrictionForce = inFrictionForce; }
118
+ float GetMaxFrictionForce() const { return mMaxFrictionForce; }
119
+
120
+ /// Position motor settings
121
+ MotorSettings & GetPositionMotorSettings() { return mPositionMotorSettings; }
122
+ const MotorSettings & GetPositionMotorSettings() const { return mPositionMotorSettings; }
123
+
124
+ // Position motor controls (drives body 2 along the path)
125
+ void SetPositionMotorState(EMotorState inState) { JPH_ASSERT(inState == EMotorState::Off || mPositionMotorSettings.IsValid()); mPositionMotorState = inState; }
126
+ EMotorState GetPositionMotorState() const { return mPositionMotorState; }
127
+ void SetTargetVelocity(float inVelocity) { mTargetVelocity = inVelocity; }
128
+ float GetTargetVelocity() const { return mTargetVelocity; }
129
+ void SetTargetPathFraction(float inFraction) { JPH_ASSERT(mPath->IsLooping() || (inFraction >= 0.0f && inFraction <= mPath->GetPathMaxFraction())); mTargetPathFraction = inFraction; }
130
+ float GetTargetPathFraction() const { return mTargetPathFraction; }
131
+
132
+ ///@name Get Lagrange multiplier from last physics update (the linear/angular impulse applied to satisfy the constraint)
133
+ inline Vector<2> GetTotalLambdaPosition() const { return mPositionConstraintPart.GetTotalLambda(); }
134
+ inline float GetTotalLambdaPositionLimits() const { return mPositionLimitsConstraintPart.GetTotalLambda(); }
135
+ inline float GetTotalLambdaMotor() const { return mPositionMotorConstraintPart.GetTotalLambda(); }
136
+ inline Vector<2> GetTotalLambdaRotationHinge() const { return mHingeConstraintPart.GetTotalLambda(); }
137
+ inline Vec3 GetTotalLambdaRotation() const { return mRotationConstraintPart.GetTotalLambda(); }
138
+
139
+ private:
140
+ // Internal helper function to calculate the values below
141
+ void CalculateConstraintProperties(float inDeltaTime);
142
+
143
+ // CONFIGURATION PROPERTIES FOLLOW
144
+
145
+ RefConst<PathConstraintPath> mPath; ///< The path that attaches the two bodies
146
+ Mat44 mPathToBody1; ///< Transform that takes a quantity from path space to body 1 center of mass space
147
+ Mat44 mPathToBody2; ///< Transform that takes a quantity from path space to body 2 center of mass space
148
+ EPathRotationConstraintType mRotationConstraintType; ///< How to constrain the rotation of the path
149
+
150
+ // Friction
151
+ float mMaxFrictionForce;
152
+
153
+ // Motor controls
154
+ MotorSettings mPositionMotorSettings;
155
+ EMotorState mPositionMotorState = EMotorState::Off;
156
+ float mTargetVelocity = 0.0f;
157
+ float mTargetPathFraction = 0.0f;
158
+
159
+ // RUN TIME PROPERTIES FOLLOW
160
+
161
+ // Positions where the point constraint acts on in world space
162
+ Vec3 mR1;
163
+ Vec3 mR2;
164
+
165
+ // X2 + R2 - X1 - R1
166
+ Vec3 mU;
167
+
168
+ // World space path tangent
169
+ Vec3 mPathTangent;
170
+
171
+ // Normals to the path tangent
172
+ Vec3 mPathNormal;
173
+ Vec3 mPathBinormal;
174
+
175
+ // Inverse of initial rotation from body 1 to body 2 in body 1 space (only used when rotation constraint type is FullyConstrained)
176
+ Quat mInvInitialOrientation;
177
+
178
+ // Current fraction along the path where body 2 is attached
179
+ float mPathFraction = 0.0f;
180
+
181
+ // Translation constraint parts
182
+ DualAxisConstraintPart mPositionConstraintPart; ///< Constraint part that keeps the movement along the tangent of the path
183
+ AxisConstraintPart mPositionLimitsConstraintPart; ///< Constraint part that prevents movement beyond the beginning and end of the path
184
+ AxisConstraintPart mPositionMotorConstraintPart; ///< Constraint to drive the object along the path or to apply friction
185
+
186
+ // Rotation constraint parts
187
+ HingeRotationConstraintPart mHingeConstraintPart; ///< Constraint part that removes 2 degrees of rotation freedom
188
+ RotationEulerConstraintPart mRotationConstraintPart; ///< Constraint part that removes all rotational freedom
189
+ };
190
+
191
+ JPH_NAMESPACE_END
@@ -0,0 +1,85 @@
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/PathConstraintPath.h>
8
+ #include <Jolt/Core/StreamUtils.h>
9
+ #ifdef JPH_DEBUG_RENDERER
10
+ #include <Jolt/Renderer/DebugRenderer.h>
11
+ #endif // JPH_DEBUG_RENDERER
12
+
13
+ JPH_NAMESPACE_BEGIN
14
+
15
+ JPH_IMPLEMENT_SERIALIZABLE_ABSTRACT(PathConstraintPath)
16
+ {
17
+ JPH_ADD_BASE_CLASS(PathConstraintPath, SerializableObject)
18
+ }
19
+
20
+ #ifdef JPH_DEBUG_RENDERER
21
+ // Helper function to transform the results of GetPointOnPath to world space
22
+ static inline void sTransformPathPoint(RMat44Arg inTransform, Vec3Arg inPosition, RVec3 &outPosition, Vec3 &ioNormal, Vec3 &ioBinormal)
23
+ {
24
+ outPosition = inTransform * inPosition;
25
+ ioNormal = inTransform.Multiply3x3(ioNormal);
26
+ ioBinormal = inTransform.Multiply3x3(ioBinormal);
27
+ }
28
+
29
+ // Helper function to draw a path segment
30
+ static inline void sDrawPathSegment(DebugRenderer *inRenderer, RVec3Arg inPrevPosition, RVec3Arg inPosition, Vec3Arg inNormal, Vec3Arg inBinormal)
31
+ {
32
+ inRenderer->DrawLine(inPrevPosition, inPosition, Color::sWhite);
33
+ inRenderer->DrawArrow(inPosition, inPosition + 0.1f * inNormal, Color::sRed, 0.02f);
34
+ inRenderer->DrawArrow(inPosition, inPosition + 0.1f * inBinormal, Color::sGreen, 0.02f);
35
+ }
36
+
37
+ void PathConstraintPath::DrawPath(DebugRenderer *inRenderer, RMat44Arg inBaseTransform) const
38
+ {
39
+ // Calculate first point
40
+ Vec3 lfirst_pos, first_tangent, first_normal, first_binormal;
41
+ GetPointOnPath(0.0f, lfirst_pos, first_tangent, first_normal, first_binormal);
42
+ RVec3 first_pos;
43
+ sTransformPathPoint(inBaseTransform, lfirst_pos, first_pos, first_normal, first_binormal);
44
+
45
+ float t_max = GetPathMaxFraction();
46
+
47
+ // Draw the segments
48
+ RVec3 prev_pos = first_pos;
49
+ for (float t = 0.1f; t < t_max; t += 0.1f)
50
+ {
51
+ Vec3 lpos, tangent, normal, binormal;
52
+ GetPointOnPath(t, lpos, tangent, normal, binormal);
53
+ RVec3 pos;
54
+ sTransformPathPoint(inBaseTransform, lpos, pos, normal, binormal);
55
+ sDrawPathSegment(inRenderer, prev_pos, pos, normal, binormal);
56
+ prev_pos = pos;
57
+ }
58
+
59
+ // Draw last point
60
+ Vec3 lpos, tangent, normal, binormal;
61
+ GetPointOnPath(t_max, lpos, tangent, normal, binormal);
62
+ RVec3 pos;
63
+ sTransformPathPoint(inBaseTransform, lpos, pos, normal, binormal);
64
+ sDrawPathSegment(inRenderer, prev_pos, pos, normal, binormal);
65
+ }
66
+ #endif // JPH_DEBUG_RENDERER
67
+
68
+ void PathConstraintPath::SaveBinaryState(StreamOut &inStream) const
69
+ {
70
+ inStream.Write(GetRTTI()->GetHash());
71
+ inStream.Write(mIsLooping);
72
+ }
73
+
74
+ void PathConstraintPath::RestoreBinaryState(StreamIn &inStream)
75
+ {
76
+ // Type hash read by sRestoreFromBinaryState
77
+ inStream.Read(mIsLooping);
78
+ }
79
+
80
+ PathConstraintPath::PathResult PathConstraintPath::sRestoreFromBinaryState(StreamIn &inStream)
81
+ {
82
+ return StreamUtils::RestoreObject<PathConstraintPath>(inStream, &PathConstraintPath::RestoreBinaryState);
83
+ }
84
+
85
+ JPH_NAMESPACE_END
@@ -0,0 +1,76 @@
1
+ // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
+ // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
+ // SPDX-License-Identifier: MIT
4
+
5
+ #pragma once
6
+
7
+ #include <Jolt/Core/Reference.h>
8
+ #include <Jolt/Core/Result.h>
9
+ #include <Jolt/ObjectStream/SerializableObject.h>
10
+
11
+ JPH_NAMESPACE_BEGIN
12
+
13
+ class StreamIn;
14
+ class StreamOut;
15
+ #ifdef JPH_DEBUG_RENDERER
16
+ class DebugRenderer;
17
+ #endif // JPH_DEBUG_RENDERER
18
+
19
+ /// The path for a path constraint. It allows attaching two bodies to each other while giving the second body the freedom to move along a path relative to the first.
20
+ class JPH_EXPORT PathConstraintPath : public SerializableObject, public RefTarget<PathConstraintPath>
21
+ {
22
+ JPH_DECLARE_SERIALIZABLE_ABSTRACT(JPH_EXPORT, PathConstraintPath)
23
+
24
+ public:
25
+ using PathResult = Result<Ref<PathConstraintPath>>;
26
+
27
+ /// Virtual destructor to ensure that derived types get their destructors called
28
+ virtual ~PathConstraintPath() override = default;
29
+
30
+ /// Gets the max fraction along the path. I.e. sort of the length of the path.
31
+ virtual float GetPathMaxFraction() const = 0;
32
+
33
+ /// Get the globally closest point on the curve (Could be slow!)
34
+ /// @param inPosition Position to find closest point for
35
+ /// @param inFractionHint Last known fraction along the path (can be used to speed up the search)
36
+ /// @return Fraction of closest point along the path
37
+ virtual float GetClosestPoint(Vec3Arg inPosition, float inFractionHint) const = 0;
38
+
39
+ /// Given the fraction along the path, get the point, tangent and normal.
40
+ /// @param inFraction Fraction along the path [0, GetPathMaxFraction()].
41
+ /// @param outPathPosition Returns the closest position to inSearchPosition on the path.
42
+ /// @param outPathTangent Returns the tangent to the path at outPathPosition (the vector that follows the direction of the path)
43
+ /// @param outPathNormal Return the normal to the path at outPathPosition (a vector that's perpendicular to outPathTangent)
44
+ /// @param outPathBinormal Returns the binormal to the path at outPathPosition (a vector so that normal cross tangent = binormal)
45
+ virtual void GetPointOnPath(float inFraction, Vec3 &outPathPosition, Vec3 &outPathTangent, Vec3 &outPathNormal, Vec3 &outPathBinormal) const = 0;
46
+
47
+ /// If the path is looping or not. If a path is looping, the first and last point are automatically connected to each other. They should not be the same points.
48
+ void SetIsLooping(bool inIsLooping) { mIsLooping = inIsLooping; }
49
+ bool IsLooping() const { return mIsLooping; }
50
+
51
+ #ifdef JPH_DEBUG_RENDERER
52
+ /// Draw the path relative to inBaseTransform. Used for debug purposes.
53
+ void DrawPath(DebugRenderer *inRenderer, RMat44Arg inBaseTransform) const;
54
+ #endif // JPH_DEBUG_RENDERER
55
+
56
+ /// Saves the contents of the path in binary form to inStream.
57
+ virtual void SaveBinaryState(StreamOut &inStream) const;
58
+
59
+ /// Creates a Shape of the correct type and restores its contents from the binary stream inStream.
60
+ static PathResult sRestoreFromBinaryState(StreamIn &inStream);
61
+
62
+ protected:
63
+ /// Don't allow (copy) constructing this base class, but allow derived classes to (copy) construct themselves
64
+ PathConstraintPath() = default;
65
+ PathConstraintPath(const PathConstraintPath &) = default;
66
+ PathConstraintPath &operator = (const PathConstraintPath &) = default;
67
+
68
+ /// This function should not be called directly, it is used by sRestoreFromBinaryState.
69
+ virtual void RestoreBinaryState(StreamIn &inStream);
70
+
71
+ private:
72
+ /// If the path is looping or not. If a path is looping, the first and last point are automatically connected to each other. They should not be the same points.
73
+ bool mIsLooping = false;
74
+ };
75
+
76
+ JPH_NAMESPACE_END
@@ -0,0 +1,308 @@
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/PathConstraintPathHermite.h>
8
+ #include <Jolt/Core/Profiler.h>
9
+ #include <Jolt/ObjectStream/TypeDeclarations.h>
10
+ #include <Jolt/Core/StreamIn.h>
11
+ #include <Jolt/Core/StreamOut.h>
12
+
13
+ JPH_NAMESPACE_BEGIN
14
+
15
+ JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(PathConstraintPathHermite::Point)
16
+ {
17
+ JPH_ADD_ATTRIBUTE(PathConstraintPathHermite::Point, mPosition)
18
+ JPH_ADD_ATTRIBUTE(PathConstraintPathHermite::Point, mTangent)
19
+ JPH_ADD_ATTRIBUTE(PathConstraintPathHermite::Point, mNormal)
20
+ }
21
+
22
+ JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(PathConstraintPathHermite)
23
+ {
24
+ JPH_ADD_BASE_CLASS(PathConstraintPathHermite, PathConstraintPath)
25
+
26
+ JPH_ADD_ATTRIBUTE(PathConstraintPathHermite, mPoints)
27
+ }
28
+
29
+ // Calculate position and tangent for a Cubic Hermite Spline segment
30
+ static inline void sCalculatePositionAndTangent(Vec3Arg inP1, Vec3Arg inM1, Vec3Arg inP2, Vec3Arg inM2, float inT, Vec3 &outPosition, Vec3 &outTangent)
31
+ {
32
+ // Calculate factors for Cubic Hermite Spline
33
+ // See: https://en.wikipedia.org/wiki/Cubic_Hermite_spline
34
+ float t2 = inT * inT;
35
+ float t3 = inT * t2;
36
+ float h00 = 2.0f * t3 - 3.0f * t2 + 1.0f;
37
+ float h10 = t3 - 2.0f * t2 + inT;
38
+ float h01 = -2.0f * t3 + 3.0f * t2;
39
+ float h11 = t3 - t2;
40
+
41
+ // Calculate d/dt for factors to calculate the tangent
42
+ float ddt_h00 = 6.0f * (t2 - inT);
43
+ float ddt_h10 = 3.0f * t2 - 4.0f * inT + 1.0f;
44
+ float ddt_h01 = -ddt_h00;
45
+ float ddt_h11 = 3.0f * t2 - 2.0f * inT;
46
+
47
+ outPosition = h00 * inP1 + h10 * inM1 + h01 * inP2 + h11 * inM2;
48
+ outTangent = ddt_h00 * inP1 + ddt_h10 * inM1 + ddt_h01 * inP2 + ddt_h11 * inM2;
49
+ }
50
+
51
+ // Calculate the closest point to the origin for a Cubic Hermite Spline segment
52
+ // This is used to get an estimate for the interval in which the closest point can be found,
53
+ // the interval [0, 1] is too big for Newton Raphson to work on because it is solving a 5th degree polynomial which may
54
+ // have multiple local minima that are not the root. This happens especially when the path is straight (tangents aligned with inP2 - inP1).
55
+ // Based on the bisection method: https://en.wikipedia.org/wiki/Bisection_method
56
+ static inline void sCalculateClosestPointThroughBisection(Vec3Arg inP1, Vec3Arg inM1, Vec3Arg inP2, Vec3Arg inM2, float &outTMin, float &outTMax)
57
+ {
58
+ outTMin = 0.0f;
59
+ outTMax = 1.0f;
60
+
61
+ // To get the closest point of the curve to the origin we need to solve:
62
+ // d/dt P(t) . P(t) = 0 for t, where P(t) is the point on the curve segment
63
+ // Using d/dt (a(t) . b(t)) = d/dt a(t) . b(t) + a(t) . d/dt b(t)
64
+ // See: https://proofwiki.org/wiki/Derivative_of_Dot_Product_of_Vector-Valued_Functions
65
+ // d/dt P(t) . P(t) = 2 P(t) d/dt P(t) = 2 P(t) . Tangent(t)
66
+
67
+ // Calculate the derivative at t = 0, we know P(0) = inP1 and Tangent(0) = inM1
68
+ float ddt_min = inP1.Dot(inM1); // Leaving out factor 2, we're only interested in the root
69
+ if (abs(ddt_min) < 1.0e-6f)
70
+ {
71
+ // Derivative is near zero, we found our root
72
+ outTMax = 0.0f;
73
+ return;
74
+ }
75
+ bool ddt_min_negative = ddt_min < 0.0f;
76
+
77
+ // Calculate derivative at t = 1, we know P(1) = inP2 and Tangent(1) = inM2
78
+ float ddt_max = inP2.Dot(inM2);
79
+ if (abs(ddt_max) < 1.0e-6f)
80
+ {
81
+ // Derivative is near zero, we found our root
82
+ outTMin = 1.0f;
83
+ return;
84
+ }
85
+ bool ddt_max_negative = ddt_max < 0.0f;
86
+
87
+ // If the signs of the derivative are not different, this algorithm can't find the root
88
+ if (ddt_min_negative == ddt_max_negative)
89
+ return;
90
+
91
+ // With 4 iterations we'll get a result accurate to 1 / 2^4 = 0.0625
92
+ for (int iteration = 0; iteration < 4; ++iteration)
93
+ {
94
+ float t_mid = 0.5f * (outTMin + outTMax);
95
+ Vec3 position, tangent;
96
+ sCalculatePositionAndTangent(inP1, inM1, inP2, inM2, t_mid, position, tangent);
97
+ float ddt_mid = position.Dot(tangent);
98
+ if (abs(ddt_mid) < 1.0e-6f)
99
+ {
100
+ // Derivative is near zero, we found our root
101
+ outTMin = outTMax = t_mid;
102
+ return;
103
+ }
104
+ bool ddt_mid_negative = ddt_mid < 0.0f;
105
+
106
+ // Update the search interval so that the signs of the derivative at both ends of the interval are still different
107
+ if (ddt_mid_negative == ddt_min_negative)
108
+ outTMin = t_mid;
109
+ else
110
+ outTMax = t_mid;
111
+ }
112
+ }
113
+
114
+ // Calculate the closest point to the origin for a Cubic Hermite Spline segment
115
+ // Only considers the range t e [inTMin, inTMax] and will stop as soon as the closest point falls outside of that range
116
+ static inline float sCalculateClosestPointThroughNewtonRaphson(Vec3Arg inP1, Vec3Arg inM1, Vec3Arg inP2, Vec3Arg inM2, float inTMin, float inTMax, float &outDistanceSq)
117
+ {
118
+ // This is the closest position on the curve to the origin that we found
119
+ Vec3 position;
120
+
121
+ // Calculate the size of the interval
122
+ float interval = inTMax - inTMin;
123
+
124
+ // Start in the middle of the interval
125
+ float t = 0.5f * (inTMin + inTMax);
126
+
127
+ // Do max 10 iterations to prevent taking too much CPU time
128
+ for (int iteration = 0; iteration < 10; ++iteration)
129
+ {
130
+ // Calculate derivative at t, see comment at sCalculateClosestPointThroughBisection for derivation of the equations
131
+ Vec3 tangent;
132
+ sCalculatePositionAndTangent(inP1, inM1, inP2, inM2, t, position, tangent);
133
+ float ddt = position.Dot(tangent); // Leaving out factor 2, we're only interested in the root
134
+
135
+ // Calculate derivative of ddt: d^2/dt P(t) . P(t) = d/dt (2 P(t) . Tangent(t))
136
+ // = 2 (d/dt P(t)) . Tangent(t) + P(t) . d/dt Tangent(t)) = 2 (Tangent(t) . Tangent(t) + P(t) . d/dt Tangent(t))
137
+ float d2dt_h00 = 12.0f * t - 6.0f;
138
+ float d2dt_h10 = 6.0f * t - 4.0f;
139
+ float d2dt_h01 = -d2dt_h00;
140
+ float d2dt_h11 = 6.0f * t - 2.0f;
141
+ Vec3 ddt_tangent = d2dt_h00 * inP1 + d2dt_h10 * inM1 + d2dt_h01 * inP2 + d2dt_h11 * inM2;
142
+ float d2dt = tangent.Dot(tangent) + position.Dot(ddt_tangent); // Leaving out factor 2, because we left it out above too
143
+
144
+ // If d2dt is zero, the curve is flat and there are multiple t's for which we are closest to the origin, stop now
145
+ if (d2dt == 0.0f)
146
+ break;
147
+
148
+ // Do a Newton Raphson step
149
+ // See: https://en.wikipedia.org/wiki/Newton%27s_method
150
+ // Clamp against [-interval, interval] to avoid overshooting too much, we're not interested outside the interval
151
+ float delta = Clamp(-ddt / d2dt, -interval, interval);
152
+
153
+ // If we're stepping away further from t e [inTMin, inTMax] stop now
154
+ if ((t > inTMax && delta > 0.0f) || (t < inTMin && delta < 0.0f))
155
+ break;
156
+
157
+ // If we've converged, stop now
158
+ t += delta;
159
+ if (abs(delta) < 1.0e-4f)
160
+ break;
161
+ }
162
+
163
+ // Calculate the distance squared for the origin to the curve
164
+ outDistanceSq = position.LengthSq();
165
+ return t;
166
+ }
167
+
168
+ void PathConstraintPathHermite::GetIndexAndT(float inFraction, int &outIndex, float &outT) const
169
+ {
170
+ int num_points = int(mPoints.size());
171
+
172
+ // Start by truncating the fraction to get the index and storing the remainder in t
173
+ int index = int(trunc(inFraction));
174
+ float t = inFraction - float(index);
175
+
176
+ if (IsLooping())
177
+ {
178
+ JPH_ASSERT(!mPoints.front().mPosition.IsClose(mPoints.back().mPosition), "A looping path should have a different first and last point!");
179
+
180
+ // Make sure index is positive by adding a multiple of num_points
181
+ if (index < 0)
182
+ index += (-index / num_points + 1) * num_points;
183
+
184
+ // Index needs to be modulo num_points
185
+ index = index % num_points;
186
+ }
187
+ else
188
+ {
189
+ // Clamp against range of points
190
+ if (index < 0)
191
+ {
192
+ index = 0;
193
+ t = 0.0f;
194
+ }
195
+ else if (index >= num_points - 1)
196
+ {
197
+ index = num_points - 2;
198
+ t = 1.0f;
199
+ }
200
+ }
201
+
202
+ outIndex = index;
203
+ outT = t;
204
+ }
205
+
206
+ float PathConstraintPathHermite::GetClosestPoint(Vec3Arg inPosition, float inFractionHint) const
207
+ {
208
+ JPH_PROFILE_FUNCTION();
209
+
210
+ int num_points = int(mPoints.size());
211
+
212
+ // Start with last point on the path, in the non-looping case we won't be visiting this point
213
+ float best_dist_sq = (mPoints[num_points - 1].mPosition - inPosition).LengthSq();
214
+ float best_t = float(num_points - 1);
215
+
216
+ // Loop over all points
217
+ for (int i = 0, max_i = IsLooping()? num_points : num_points - 1; i < max_i; ++i)
218
+ {
219
+ const Point &p1 = mPoints[i];
220
+ const Point &p2 = mPoints[(i + 1) % num_points];
221
+
222
+ // Make the curve relative to inPosition
223
+ Vec3 p1_pos = p1.mPosition - inPosition;
224
+ Vec3 p2_pos = p2.mPosition - inPosition;
225
+
226
+ // Get distance to p1
227
+ float dist_sq = p1_pos.LengthSq();
228
+ if (dist_sq < best_dist_sq)
229
+ {
230
+ best_t = float(i);
231
+ best_dist_sq = dist_sq;
232
+ }
233
+
234
+ // First find an interval for the closest point so that we can start doing Newton Raphson steps
235
+ float t_min, t_max;
236
+ sCalculateClosestPointThroughBisection(p1_pos, p1.mTangent, p2_pos, p2.mTangent, t_min, t_max);
237
+
238
+ if (t_min == t_max)
239
+ {
240
+ // If the function above returned no interval then it found the root already and we can just calculate the distance
241
+ Vec3 position, tangent;
242
+ sCalculatePositionAndTangent(p1_pos, p1.mTangent, p2_pos, p2.mTangent, t_min, position, tangent);
243
+ dist_sq = position.LengthSq();
244
+ if (dist_sq < best_dist_sq)
245
+ {
246
+ best_t = float(i) + t_min;
247
+ best_dist_sq = dist_sq;
248
+ }
249
+ }
250
+ else
251
+ {
252
+ // Get closest distance along curve segment
253
+ float t = sCalculateClosestPointThroughNewtonRaphson(p1_pos, p1.mTangent, p2_pos, p2.mTangent, t_min, t_max, dist_sq);
254
+ if (t >= 0.0f && t <= 1.0f && dist_sq < best_dist_sq)
255
+ {
256
+ best_t = float(i) + t;
257
+ best_dist_sq = dist_sq;
258
+ }
259
+ }
260
+ }
261
+
262
+ return best_t;
263
+ }
264
+
265
+ void PathConstraintPathHermite::GetPointOnPath(float inFraction, Vec3 &outPathPosition, Vec3 &outPathTangent, Vec3 &outPathNormal, Vec3 &outPathBinormal) const
266
+ {
267
+ JPH_PROFILE_FUNCTION();
268
+
269
+ // Determine which hermite spline segment we need
270
+ int index;
271
+ float t;
272
+ GetIndexAndT(inFraction, index, t);
273
+
274
+ // Get the points on the segment
275
+ const Point &p1 = mPoints[index];
276
+ const Point &p2 = mPoints[(index + 1) % int(mPoints.size())];
277
+
278
+ // Calculate the position and tangent on the path
279
+ Vec3 tangent;
280
+ sCalculatePositionAndTangent(p1.mPosition, p1.mTangent, p2.mPosition, p2.mTangent, t, outPathPosition, tangent);
281
+ outPathTangent = tangent.Normalized();
282
+
283
+ // Just linearly interpolate the normal
284
+ Vec3 normal = (1.0f - t) * p1.mNormal + t * p2.mNormal;
285
+
286
+ // Calculate binormal
287
+ outPathBinormal = normal.Cross(outPathTangent).Normalized();
288
+
289
+ // Recalculate normal so it is perpendicular to both (linear interpolation will cause it not to be)
290
+ outPathNormal = outPathTangent.Cross(outPathBinormal);
291
+ JPH_ASSERT(outPathNormal.IsNormalized());
292
+ }
293
+
294
+ void PathConstraintPathHermite::SaveBinaryState(StreamOut &inStream) const
295
+ {
296
+ PathConstraintPath::SaveBinaryState(inStream);
297
+
298
+ inStream.Write(mPoints);
299
+ }
300
+
301
+ void PathConstraintPathHermite::RestoreBinaryState(StreamIn &inStream)
302
+ {
303
+ PathConstraintPath::RestoreBinaryState(inStream);
304
+
305
+ inStream.Read(mPoints);
306
+ }
307
+
308
+ JPH_NAMESPACE_END