@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,363 @@
1
+ use crate::handles::HandleRegistry;
2
+
3
+ /// A loaded sound effect (PCM samples).
4
+ pub struct SoundData {
5
+ pub samples: Vec<f32>,
6
+ pub sample_rate: u32,
7
+ pub channels: u16,
8
+ }
9
+
10
+ /// A currently playing sound instance.
11
+ struct PlayingSound {
12
+ data_handle: f64,
13
+ position: usize,
14
+ volume: f32,
15
+ playing: bool,
16
+ // Spatial audio
17
+ spatial: bool,
18
+ source_x: f32,
19
+ source_y: f32,
20
+ source_z: f32,
21
+ }
22
+
23
+ /// Music data (fully decoded for simplicity).
24
+ pub struct MusicData {
25
+ pub samples: Vec<f32>,
26
+ pub sample_rate: u32,
27
+ pub channels: u16,
28
+ pub position: usize,
29
+ pub playing: bool,
30
+ pub volume: f32,
31
+ pub looping: bool,
32
+ }
33
+
34
+ /// Platform-agnostic audio mixer.
35
+ pub struct AudioMixer {
36
+ pub sounds: HandleRegistry<SoundData>,
37
+ playing: Vec<PlayingSound>,
38
+ pub master_volume: f32,
39
+ sound_volumes: Vec<(f64, f32)>,
40
+ pub music: HandleRegistry<MusicData>,
41
+ // Spatial audio listener
42
+ pub listener_x: f32,
43
+ pub listener_y: f32,
44
+ pub listener_z: f32,
45
+ pub listener_forward_x: f32,
46
+ pub listener_forward_y: f32,
47
+ pub listener_forward_z: f32,
48
+ }
49
+
50
+ impl AudioMixer {
51
+ pub fn new() -> Self {
52
+ Self {
53
+ sounds: HandleRegistry::new(),
54
+ playing: Vec::new(),
55
+ master_volume: 1.0,
56
+ sound_volumes: Vec::new(),
57
+ music: HandleRegistry::new(),
58
+ listener_x: 0.0,
59
+ listener_y: 0.0,
60
+ listener_z: 0.0,
61
+ listener_forward_x: 0.0,
62
+ listener_forward_y: 0.0,
63
+ listener_forward_z: -1.0,
64
+ }
65
+ }
66
+
67
+ pub fn load_sound(&mut self, data: SoundData) -> f64 {
68
+ self.sounds.alloc(data)
69
+ }
70
+
71
+ pub fn play_sound(&mut self, handle: f64) {
72
+ self.playing.push(PlayingSound {
73
+ data_handle: handle,
74
+ position: 0,
75
+ volume: self.get_sound_volume(handle),
76
+ playing: true,
77
+ spatial: false,
78
+ source_x: 0.0, source_y: 0.0, source_z: 0.0,
79
+ });
80
+ }
81
+
82
+ pub fn play_sound_3d(&mut self, handle: f64, x: f32, y: f32, z: f32) {
83
+ self.playing.push(PlayingSound {
84
+ data_handle: handle,
85
+ position: 0,
86
+ volume: self.get_sound_volume(handle),
87
+ playing: true,
88
+ spatial: true,
89
+ source_x: x, source_y: y, source_z: z,
90
+ });
91
+ }
92
+
93
+ pub fn set_listener_position(&mut self, x: f32, y: f32, z: f32, fx: f32, fy: f32, fz: f32) {
94
+ self.listener_x = x;
95
+ self.listener_y = y;
96
+ self.listener_z = z;
97
+ let len = (fx*fx + fy*fy + fz*fz).sqrt();
98
+ if len > 0.0 {
99
+ self.listener_forward_x = fx / len;
100
+ self.listener_forward_y = fy / len;
101
+ self.listener_forward_z = fz / len;
102
+ }
103
+ }
104
+
105
+ pub fn stop_sound(&mut self, handle: f64) {
106
+ self.playing.retain(|p| p.data_handle != handle);
107
+ }
108
+
109
+ pub fn set_sound_volume(&mut self, handle: f64, volume: f32) {
110
+ for entry in &mut self.sound_volumes {
111
+ if entry.0 == handle {
112
+ entry.1 = volume;
113
+ for p in &mut self.playing {
114
+ if p.data_handle == handle { p.volume = volume; }
115
+ }
116
+ return;
117
+ }
118
+ }
119
+ self.sound_volumes.push((handle, volume));
120
+ }
121
+
122
+ fn get_sound_volume(&self, handle: f64) -> f32 {
123
+ for entry in &self.sound_volumes {
124
+ if entry.0 == handle { return entry.1; }
125
+ }
126
+ 1.0
127
+ }
128
+
129
+ // Music functions
130
+
131
+ pub fn load_music(&mut self, data: SoundData) -> f64 {
132
+ self.music.alloc(MusicData {
133
+ samples: data.samples,
134
+ sample_rate: data.sample_rate,
135
+ channels: data.channels,
136
+ position: 0,
137
+ playing: false,
138
+ volume: 1.0,
139
+ looping: true,
140
+ })
141
+ }
142
+
143
+ pub fn play_music(&mut self, handle: f64) {
144
+ if let Some(m) = self.music.get_mut(handle) {
145
+ m.position = 0;
146
+ m.playing = true;
147
+ }
148
+ }
149
+
150
+ pub fn stop_music(&mut self, handle: f64) {
151
+ if let Some(m) = self.music.get_mut(handle) {
152
+ m.playing = false;
153
+ m.position = 0;
154
+ }
155
+ }
156
+
157
+ pub fn set_music_volume(&mut self, handle: f64, volume: f32) {
158
+ if let Some(m) = self.music.get_mut(handle) {
159
+ m.volume = volume;
160
+ }
161
+ }
162
+
163
+ pub fn is_music_playing(&self, handle: f64) -> bool {
164
+ self.music.get(handle).map(|m| m.playing).unwrap_or(false)
165
+ }
166
+
167
+ pub fn update_music_stream(&mut self, _handle: f64) {
168
+ // No-op: we decode everything upfront. This exists for API compatibility.
169
+ }
170
+
171
+ /// Mix all playing sounds and music into the output buffer.
172
+ pub fn mix_output(&mut self, output: &mut [f32]) {
173
+ for sample in output.iter_mut() {
174
+ *sample = 0.0;
175
+ }
176
+
177
+ // Spatial audio: compute listener-relative parameters once
178
+ let lx = self.listener_x;
179
+ let ly = self.listener_y;
180
+ let lz = self.listener_z;
181
+ let lfx = self.listener_forward_x;
182
+ let _lfy = self.listener_forward_y; // unused — listener "right" math projects out the Y component
183
+ let lfz = self.listener_forward_z;
184
+ // Listener right vector (cross product of forward and up=[0,1,0])
185
+ let lrx = lfz;
186
+ let lrz = -lfx;
187
+ let lr_len = (lrx * lrx + lrz * lrz).sqrt().max(0.001);
188
+
189
+ // Mix sound effects
190
+ self.playing.retain_mut(|p| {
191
+ if !p.playing { return false; }
192
+ let sound = match self.sounds.get(p.data_handle) {
193
+ Some(s) => s,
194
+ None => return false,
195
+ };
196
+
197
+ // Compute spatial gain and pan
198
+ let (gain_l, gain_r) = if p.spatial {
199
+ let dx = p.source_x - lx;
200
+ let dy = p.source_y - ly;
201
+ let dz = p.source_z - lz;
202
+ let dist = (dx*dx + dy*dy + dz*dz).sqrt().max(0.1);
203
+ // Distance attenuation: 1/distance, clamped
204
+ let attenuation = (1.0 / dist).min(1.0);
205
+ // Pan: dot product of source direction with listener right
206
+ let pan = ((dx * lrx + dz * lrz) / (dist * lr_len)).clamp(-1.0, 1.0);
207
+ let left = attenuation * (1.0 - pan) * 0.5;
208
+ let right = attenuation * (1.0 + pan) * 0.5;
209
+ (left, right)
210
+ } else {
211
+ (1.0, 1.0)
212
+ };
213
+
214
+ let base_vol = p.volume * self.master_volume;
215
+ let vol_l = base_vol * gain_l;
216
+ let vol_r = base_vol * gain_r;
217
+ let mut i = 0;
218
+ while i < output.len() && p.position < sound.samples.len() {
219
+ if sound.channels == 1 {
220
+ let sample = sound.samples[p.position];
221
+ output[i] += sample * vol_l;
222
+ if i + 1 < output.len() { output[i + 1] += sample * vol_r; }
223
+ p.position += 1;
224
+ i += 2;
225
+ } else {
226
+ // For stereo sources, apply gain to each channel
227
+ output[i] += sound.samples[p.position] * vol_l;
228
+ p.position += 1;
229
+ if i + 1 < output.len() && p.position < sound.samples.len() {
230
+ output[i + 1] += sound.samples[p.position] * vol_r;
231
+ p.position += 1;
232
+ }
233
+ i += 2;
234
+ }
235
+ }
236
+ p.position < sound.samples.len()
237
+ });
238
+
239
+ // Mix music (iterate all music handles)
240
+ // We need to collect handles first to avoid borrow issues
241
+ let handles: Vec<f64> = {
242
+ let mut h = Vec::new();
243
+ // HandleRegistry stores items as Vec<Option<T>>, handles are 1-based
244
+ for i in 0..100 {
245
+ let handle = (i + 1) as f64;
246
+ if self.music.get(handle).is_some() {
247
+ h.push(handle);
248
+ } else if i > 10 && h.is_empty() {
249
+ break;
250
+ }
251
+ }
252
+ h
253
+ };
254
+
255
+ for handle in handles {
256
+ if let Some(m) = self.music.get_mut(handle) {
257
+ if !m.playing { continue; }
258
+ let vol = m.volume * self.master_volume;
259
+ let mut i = 0;
260
+ while i < output.len() && m.position < m.samples.len() {
261
+ if m.channels == 1 {
262
+ let sample = m.samples[m.position] * vol;
263
+ output[i] += sample;
264
+ if i + 1 < output.len() { output[i + 1] += sample; }
265
+ m.position += 1;
266
+ i += 2;
267
+ } else {
268
+ output[i] += m.samples[m.position] * vol;
269
+ m.position += 1;
270
+ i += 1;
271
+ }
272
+ }
273
+ if m.position >= m.samples.len() {
274
+ if m.looping {
275
+ m.position = 0;
276
+ } else {
277
+ m.playing = false;
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ /// Parse a WAV file into SoundData.
286
+ pub fn parse_wav(data: &[u8]) -> Option<SoundData> {
287
+ if data.len() < 44 { return None; }
288
+ if &data[0..4] != b"RIFF" || &data[8..12] != b"WAVE" { return None; }
289
+
290
+ let channels = u16::from_le_bytes([data[22], data[23]]);
291
+ let sample_rate = u32::from_le_bytes([data[24], data[25], data[26], data[27]]);
292
+ let bits_per_sample = u16::from_le_bytes([data[34], data[35]]);
293
+
294
+ let mut offset = 36;
295
+ while offset + 8 < data.len() {
296
+ let chunk_id = &data[offset..offset + 4];
297
+ let chunk_size = u32::from_le_bytes([
298
+ data[offset + 4], data[offset + 5], data[offset + 6], data[offset + 7],
299
+ ]) as usize;
300
+
301
+ if chunk_id == b"data" {
302
+ let pcm_data = &data[offset + 8..std::cmp::min(offset + 8 + chunk_size, data.len())];
303
+ let samples = match bits_per_sample {
304
+ 16 => pcm_data.chunks_exact(2)
305
+ .map(|chunk| i16::from_le_bytes([chunk[0], chunk[1]]) as f32 / 32768.0)
306
+ .collect(),
307
+ 8 => pcm_data.iter()
308
+ .map(|&b| (b as f32 - 128.0) / 128.0)
309
+ .collect(),
310
+ _ => return None,
311
+ };
312
+ return Some(SoundData { samples, sample_rate, channels });
313
+ }
314
+ offset += 8 + chunk_size;
315
+ }
316
+ None
317
+ }
318
+
319
+ /// Parse an MP3 file into SoundData.
320
+ #[cfg(feature = "mp3")]
321
+ pub fn parse_mp3(data: &[u8]) -> Option<SoundData> {
322
+ let mut decoder = minimp3::Decoder::new(std::io::Cursor::new(data));
323
+ let mut samples = Vec::new();
324
+ let mut sample_rate = 0u32;
325
+ let mut channels = 0u16;
326
+
327
+ loop {
328
+ match decoder.next_frame() {
329
+ Ok(frame) => {
330
+ if sample_rate == 0 {
331
+ sample_rate = frame.sample_rate as u32;
332
+ channels = frame.channels as u16;
333
+ }
334
+ for &s in &frame.data {
335
+ samples.push(s as f32 / 32768.0);
336
+ }
337
+ }
338
+ Err(minimp3::Error::Eof) => break,
339
+ Err(_) => return None,
340
+ }
341
+ }
342
+
343
+ if samples.is_empty() { return None; }
344
+ Some(SoundData { samples, sample_rate, channels })
345
+ }
346
+
347
+ /// Parse an OGG Vorbis file into SoundData.
348
+ pub fn parse_ogg(data: &[u8]) -> Option<SoundData> {
349
+ let cursor = std::io::Cursor::new(data);
350
+ let mut reader = lewton::inside_ogg::OggStreamReader::new(cursor).ok()?;
351
+ let sample_rate = reader.ident_hdr.audio_sample_rate;
352
+ let channels = reader.ident_hdr.audio_channels as u16;
353
+ let mut samples = Vec::new();
354
+
355
+ while let Ok(Some(packet)) = reader.read_dec_packet_itl() {
356
+ for &sample in &packet {
357
+ samples.push(sample as f32 / 32768.0);
358
+ }
359
+ }
360
+
361
+ if samples.is_empty() { return None; }
362
+ Some(SoundData { samples, sample_rate, channels })
363
+ }
@@ -0,0 +1,104 @@
1
+ //! Custom WGSL shaders for Pascal Editor effects.
2
+ //!
3
+ //! These are hand-ported equivalents of the Three.js TSL (Texture Shading Language)
4
+ //! node materials used in the Pascal Editor:
5
+ //! - Wall cutaway dot pattern
6
+ //! - Zone gradient
7
+ //! - Item preview shimmer
8
+ //!
9
+ //! In the browser, these are defined as JavaScript function calls (TSL nodes) that
10
+ //! compile to WGSL at runtime. Since we compile natively, we write the WGSL directly.
11
+
12
+ /// Wall cutaway dot pattern — shows dots that fade with height when a wall
13
+ /// is in "cutaway" mode. Replaces the TSL `Fn(() => { ... fract ... step ... })`.
14
+ pub const WALL_CUTAWAY_SHADER: &str = "
15
+ struct CutawayParams {
16
+ dot_scale: vec4<f32>, // [scale, dot_size, fade_height, opacity]
17
+ base_color: vec4<f32>, // rgba
18
+ };
19
+
20
+ @group(0) @binding(0) var<uniform> params: CutawayParams;
21
+
22
+ struct VertexOutput {
23
+ @builtin(position) clip_position: vec4<f32>,
24
+ @location(0) local_pos: vec3<f32>,
25
+ @location(1) color: vec4<f32>,
26
+ };
27
+
28
+ @fragment
29
+ fn fs_wall_cutaway(in: VertexOutput) -> @location(0) vec4<f32> {
30
+ let scale = params.dot_scale.x;
31
+ let dot_size = params.dot_scale.y;
32
+ let fade_height = params.dot_scale.z;
33
+
34
+ // Create repeating dot grid
35
+ let uv = vec2<f32>(in.local_pos.x, in.local_pos.y) / scale;
36
+ let grid_uv = fract(uv);
37
+ let dist = length(grid_uv - vec2<f32>(0.5));
38
+ let dots = step(dist, dot_size * 0.5);
39
+
40
+ // Vertical fade (transparent near bottom, opaque at top)
41
+ let y_fade = 1.0 - smoothstep(0.0, fade_height, in.local_pos.y);
42
+
43
+ let alpha = dots * y_fade * params.dot_scale.w;
44
+ if (alpha < 0.01) { discard; }
45
+
46
+ return vec4<f32>(params.base_color.rgb * in.color.rgb, alpha);
47
+ }
48
+ ";
49
+
50
+ /// Zone gradient — vertical gradient for zone visualization walls.
51
+ /// Replaces the TSL `uv().y → mul(opacity)` with uniform.
52
+ pub const ZONE_GRADIENT_SHADER: &str = "
53
+ struct ZoneParams {
54
+ base_color: vec4<f32>, // rgba
55
+ opacity: vec4<f32>, // [max_opacity, 0, 0, 0]
56
+ };
57
+
58
+ @group(0) @binding(0) var<uniform> zone_params: ZoneParams;
59
+
60
+ struct VertexOutput {
61
+ @builtin(position) clip_position: vec4<f32>,
62
+ @location(0) uv: vec2<f32>,
63
+ @location(1) color: vec4<f32>,
64
+ };
65
+
66
+ @fragment
67
+ fn fs_zone_gradient(in: VertexOutput) -> @location(0) vec4<f32> {
68
+ // Gradient: fully opaque at bottom, transparent at top
69
+ let gradient_t = in.uv.y;
70
+ let alpha = zone_params.opacity.x * (1.0 - gradient_t) * 0.6;
71
+ return vec4<f32>(zone_params.base_color.rgb, alpha);
72
+ }
73
+ ";
74
+
75
+ /// Item preview shimmer — animated shimmer effect for item placement preview.
76
+ /// Replaces the TSL `positionLocal.y + time → fract → smoothstep`.
77
+ pub const PREVIEW_SHIMMER_SHADER: &str = "
78
+ struct ShimmerParams {
79
+ time: vec4<f32>, // [time, speed, 0, 0]
80
+ base_color: vec4<f32>, // rgba
81
+ };
82
+
83
+ @group(0) @binding(0) var<uniform> shimmer_params: ShimmerParams;
84
+
85
+ struct VertexOutput {
86
+ @builtin(position) clip_position: vec4<f32>,
87
+ @location(0) local_pos: vec3<f32>,
88
+ @location(1) color: vec4<f32>,
89
+ };
90
+
91
+ @fragment
92
+ fn fs_preview_shimmer(in: VertexOutput) -> @location(0) vec4<f32> {
93
+ let time = shimmer_params.time.x;
94
+ let speed = shimmer_params.time.y;
95
+
96
+ // Scrolling shimmer band
97
+ let shimmer_y = fract((in.local_pos.y + time * speed) * 10.0);
98
+ let shimmer = smoothstep(0.0, 0.1, shimmer_y) * smoothstep(0.3, 0.2, shimmer_y);
99
+
100
+ let base = shimmer_params.base_color;
101
+ let brightness = 1.0 + shimmer * 0.3;
102
+ return vec4<f32>(base.rgb * brightness, base.a * 0.7);
103
+ }
104
+ ";
@@ -0,0 +1,211 @@
1
+ //! Dynamic resolution scaling (DRS) — self-tunes the renderer's
2
+ //! `render_scale` to track a target framerate. Lives outside the
3
+ //! renderer so it can read frame-time from the engine without
4
+ //! threading a timing source down.
5
+ //!
6
+ //! Algorithm sketch:
7
+ //! - Smooth frame time with an EMA (~10-frame window).
8
+ //! - After a cooldown, step `render_scale` down one rung when EMA
9
+ //! exceeds target × 1.10, up one rung when EMA falls below
10
+ //! target × 0.80. Asymmetric thresholds — humans tolerate blur
11
+ //! better than stutter, so we drop quickly and recover slowly.
12
+ //! - 6-rung ladder spaced ~√2 apart: 0.50 → 0.58 → 0.67 → 0.75 →
13
+ //! 0.85 → 1.00. Keeps step size proportional to fragment cost.
14
+ //! - Cooldown of 30 frames between any two steps prevents thrashing.
15
+
16
+ use crate::renderer::Renderer;
17
+
18
+ /// Discrete render-scale rungs DRS can choose from. Spaced so each
19
+ /// step is roughly a √2 change in fragment-shader cost.
20
+ const STEPS: &[f32] = &[0.50, 0.58, 0.67, 0.75, 0.85, 1.00];
21
+
22
+ /// EMA smoothing factor — α=0.1 ≈ 10-frame effective window.
23
+ /// Responsive enough to catch a sustained spike, slow enough to
24
+ /// ignore single-frame outliers.
25
+ const EMA_ALPHA: f32 = 0.1;
26
+
27
+ /// Frames between any two scale steps. At 60 fps this is 0.5 s,
28
+ /// long enough for the EMA to reflect the post-step frame time.
29
+ const COOLDOWN_FRAMES: u32 = 30;
30
+
31
+ /// Step *down* (cheaper) when EMA exceeds target × this.
32
+ const HYSTERESIS_DOWN: f32 = 1.10;
33
+ /// Step *up* (sharper) only when EMA falls below target × this.
34
+ /// Tighter than HYSTERESIS_DOWN — blur is preferable to stutter.
35
+ const HYSTERESIS_UP: f32 = 0.80;
36
+
37
+ pub struct DrsController {
38
+ pub enabled: bool,
39
+ /// Per-frame target in milliseconds (1000 / target_hz).
40
+ pub target_frame_ms: f32,
41
+ ema_ms: f32,
42
+ frames_since_step: u32,
43
+ /// Index into `STEPS`. Starts at the top so DRS only ever cuts
44
+ /// from the user's chosen baseline downward — once enabled it
45
+ /// will climb back as headroom appears.
46
+ idx: usize,
47
+ }
48
+
49
+ impl DrsController {
50
+ pub fn new() -> Self {
51
+ Self {
52
+ enabled: false,
53
+ target_frame_ms: 1000.0 / 60.0,
54
+ ema_ms: 0.0,
55
+ frames_since_step: 0,
56
+ idx: STEPS.len() - 1, // 1.0 — start at native, step down as needed
57
+ }
58
+ }
59
+
60
+ /// Enable DRS targeting the given refresh rate in Hz. Snaps the
61
+ /// internal index to whichever rung is closest to the renderer's
62
+ /// current `render_scale` so the first step doesn't overshoot.
63
+ pub fn enable(&mut self, target_hz: f32, current_scale: f32) {
64
+ self.enabled = true;
65
+ self.target_frame_ms = 1000.0 / target_hz.max(1.0);
66
+ self.ema_ms = 0.0;
67
+ self.frames_since_step = 0;
68
+ self.idx = closest_step_idx(current_scale);
69
+ }
70
+
71
+ pub fn disable(&mut self) {
72
+ self.enabled = false;
73
+ }
74
+
75
+ /// Called once per frame from `EngineState::begin_frame` after
76
+ /// `delta_time` is updated. `dt_seconds` is wall-clock frame time.
77
+ pub fn tick(&mut self, dt_seconds: f64, renderer: &mut Renderer) {
78
+ if !self.enabled {
79
+ return;
80
+ }
81
+
82
+ let frame_ms = (dt_seconds * 1000.0) as f32;
83
+ // EMA bootstrap — first frame after enable, seed the buffer
84
+ // with the observed value so we don't spend 10 frames climbing
85
+ // from 0 toward the steady state.
86
+ if self.ema_ms == 0.0 {
87
+ self.ema_ms = frame_ms;
88
+ } else {
89
+ self.ema_ms += EMA_ALPHA * (frame_ms - self.ema_ms);
90
+ }
91
+
92
+ self.frames_since_step = self.frames_since_step.saturating_add(1);
93
+ if self.frames_since_step < COOLDOWN_FRAMES {
94
+ return;
95
+ }
96
+
97
+ let target = self.target_frame_ms;
98
+ if self.ema_ms > target * HYSTERESIS_DOWN && self.idx > 0 {
99
+ self.idx -= 1;
100
+ renderer.set_render_scale(STEPS[self.idx]);
101
+ self.frames_since_step = 0;
102
+ } else if self.ema_ms < target * HYSTERESIS_UP && self.idx + 1 < STEPS.len() {
103
+ self.idx += 1;
104
+ renderer.set_render_scale(STEPS[self.idx]);
105
+ self.frames_since_step = 0;
106
+ }
107
+ }
108
+
109
+ pub fn current_scale(&self) -> f32 { STEPS[self.idx] }
110
+ }
111
+
112
+ impl Default for DrsController {
113
+ fn default() -> Self { Self::new() }
114
+ }
115
+
116
+ fn closest_step_idx(scale: f32) -> usize {
117
+ let mut best = 0usize;
118
+ let mut best_d = (STEPS[0] - scale).abs();
119
+ for (i, s) in STEPS.iter().enumerate().skip(1) {
120
+ let d = (s - scale).abs();
121
+ if d < best_d {
122
+ best_d = d;
123
+ best = i;
124
+ }
125
+ }
126
+ best
127
+ }
128
+
129
+ #[cfg(test)]
130
+ mod tests {
131
+ use super::*;
132
+
133
+ #[test]
134
+ fn closest_step_idx_picks_nearest_rung() {
135
+ // STEPS = [0.50, 0.58, 0.67, 0.75, 0.85, 1.00]
136
+ assert_eq!(closest_step_idx(0.50), 0);
137
+ assert_eq!(closest_step_idx(0.53), 0); // closer to 0.50 (Δ0.03) than 0.58 (Δ0.05)
138
+ assert_eq!(closest_step_idx(0.55), 1); // closer to 0.58 (Δ0.03) than 0.50 (Δ0.05)
139
+ assert_eq!(closest_step_idx(0.70), 2); // closer to 0.67 (Δ0.03) than 0.75 (Δ0.05)
140
+ assert_eq!(closest_step_idx(1.00), 5);
141
+ assert_eq!(closest_step_idx(2.00), 5); // clamped at top
142
+ assert_eq!(closest_step_idx(0.0), 0); // clamped at bottom
143
+ }
144
+
145
+ #[test]
146
+ fn disabled_controller_never_steps() {
147
+ let mut drs = DrsController::new();
148
+ // Don't enable. Even with a huge frame time the controller
149
+ // should be a no-op (no renderer reference passed: skip via
150
+ // early return — exercised by reading enabled state).
151
+ for _ in 0..100 {
152
+ // Mimic: tick() early-returns when !enabled. We test by
153
+ // confirming idx hasn't moved off its initial top rung.
154
+ assert!(!drs.enabled);
155
+ }
156
+ assert_eq!(drs.idx, STEPS.len() - 1);
157
+ }
158
+
159
+ #[test]
160
+ fn enable_seeds_index_to_nearest_rung() {
161
+ let mut drs = DrsController::new();
162
+ drs.enable(60.0, 0.75);
163
+ assert_eq!(drs.idx, 3); // 0.75 is rung 3
164
+ assert_eq!(drs.current_scale(), 0.75);
165
+ assert!(drs.enabled);
166
+ assert!((drs.target_frame_ms - 1000.0 / 60.0).abs() < 0.001);
167
+ }
168
+
169
+ /// Synthetic frame-time trace: induce a 33 ms spike on a 60 fps
170
+ /// (16.67 ms) target and confirm the controller steps down,
171
+ /// then steps back up when frame time recovers.
172
+ #[test]
173
+ fn step_down_on_spike_recover_on_idle() {
174
+ let mut drs = DrsController::new();
175
+ drs.enable(60.0, 1.0);
176
+ let start_idx = drs.idx;
177
+
178
+ // Simulate the EMA + cooldown logic *without* a renderer by
179
+ // inlining the same updates against a local idx tracker.
180
+ let target = drs.target_frame_ms;
181
+ let mut idx = drs.idx;
182
+ let mut ema = 0.0f32;
183
+ let mut cooldown = 0u32;
184
+
185
+ let advance = |ms: f32, ema: &mut f32, idx: &mut usize, cooldown: &mut u32| {
186
+ if *ema == 0.0 { *ema = ms; } else { *ema += EMA_ALPHA * (ms - *ema); }
187
+ *cooldown = cooldown.saturating_add(1);
188
+ if *cooldown < COOLDOWN_FRAMES { return; }
189
+ if *ema > target * HYSTERESIS_DOWN && *idx > 0 {
190
+ *idx -= 1; *cooldown = 0;
191
+ } else if *ema < target * HYSTERESIS_UP && *idx + 1 < STEPS.len() {
192
+ *idx += 1; *cooldown = 0;
193
+ }
194
+ };
195
+
196
+ // 200 frames at 33ms (double target) should drop the rung
197
+ // at least once.
198
+ for _ in 0..200 {
199
+ advance(33.0, &mut ema, &mut idx, &mut cooldown);
200
+ }
201
+ assert!(idx < start_idx, "expected step-down, idx={idx}");
202
+
203
+ // 400 frames at 8ms (well under HYSTERESIS_UP * target = 13.3ms)
204
+ // should recover at least one rung.
205
+ let after_spike = idx;
206
+ for _ in 0..400 {
207
+ advance(8.0, &mut ema, &mut idx, &mut cooldown);
208
+ }
209
+ assert!(idx > after_spike, "expected step-up, idx={idx}");
210
+ }
211
+ }