@aura3d/engine 1.5.1 → 2.0.0

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 (549) hide show
  1. package/README.md +142 -83
  2. package/dist/animation/FootIk.d.ts +10 -1
  3. package/dist/animation/FootIk.d.ts.map +1 -1
  4. package/dist/animation/FootIk.js.map +1 -1
  5. package/dist/animation/HumanoidRetargeting.js +1 -1
  6. package/dist/animation/RigQuality.d.ts +1 -1
  7. package/dist/animation/RigQuality.js +2 -2
  8. package/dist/animation/RigQuality.js.map +1 -1
  9. package/dist/animation/SecondaryAnimationSampling.d.ts +55 -0
  10. package/dist/animation/SecondaryAnimationSampling.d.ts.map +1 -0
  11. package/dist/animation/SecondaryAnimationSampling.js +145 -0
  12. package/dist/animation/SecondaryAnimationSampling.js.map +1 -0
  13. package/dist/animation/SpringBones.d.ts.map +1 -1
  14. package/dist/animation/SpringBones.js +1 -2
  15. package/dist/animation/SpringBones.js.map +1 -1
  16. package/dist/animation/browser-index.d.ts +0 -2
  17. package/dist/animation/browser-index.d.ts.map +1 -1
  18. package/dist/animation/browser-index.js +0 -2
  19. package/dist/animation/browser-index.js.map +1 -1
  20. package/dist/animation/index.d.ts +0 -2
  21. package/dist/animation/index.d.ts.map +1 -1
  22. package/dist/animation/index.js +0 -2
  23. package/dist/animation/index.js.map +1 -1
  24. package/dist/assets/GLTFAnimationRuntime.d.ts +4 -0
  25. package/dist/assets/GLTFAnimationRuntime.d.ts.map +1 -1
  26. package/dist/assets/GLTFAnimationRuntime.js +29 -6
  27. package/dist/assets/GLTFAnimationRuntime.js.map +1 -1
  28. package/dist/assets/GLTFLoader.d.ts.map +1 -1
  29. package/dist/assets/GLTFLoader.js +13 -4
  30. package/dist/assets/GLTFLoader.js.map +1 -1
  31. package/dist/assets/browser-index.d.ts +0 -4
  32. package/dist/assets/browser-index.d.ts.map +1 -1
  33. package/dist/assets/browser-index.js +0 -2
  34. package/dist/assets/browser-index.js.map +1 -1
  35. package/dist/assets/gltf-runtime.d.ts +6 -0
  36. package/dist/assets/gltf-runtime.d.ts.map +1 -0
  37. package/dist/assets/gltf-runtime.js +4 -0
  38. package/dist/assets/gltf-runtime.js.map +1 -0
  39. package/dist/assets/index.d.ts +0 -4
  40. package/dist/assets/index.d.ts.map +1 -1
  41. package/dist/assets/index.js +0 -2
  42. package/dist/assets/index.js.map +1 -1
  43. package/dist/audio/AudioBus.d.ts +19 -1
  44. package/dist/audio/AudioBus.d.ts.map +1 -1
  45. package/dist/audio/AudioBus.js.map +1 -1
  46. package/dist/audio/AudioFileManager.d.ts +5 -0
  47. package/dist/audio/AudioFileManager.d.ts.map +1 -1
  48. package/dist/audio/AudioFileManager.js +13 -0
  49. package/dist/audio/AudioFileManager.js.map +1 -1
  50. package/dist/audio/AudioSource.d.ts +8 -0
  51. package/dist/audio/AudioSource.d.ts.map +1 -1
  52. package/dist/audio/AudioSource.js +56 -7
  53. package/dist/audio/AudioSource.js.map +1 -1
  54. package/dist/audio/index.d.ts +1 -7
  55. package/dist/audio/index.d.ts.map +1 -1
  56. package/dist/audio/index.js +0 -3
  57. package/dist/audio/index.js.map +1 -1
  58. package/dist/aura3d-cli/asset-core-types.d.ts +1 -1
  59. package/dist/aura3d-cli/asset-core-types.d.ts.map +1 -1
  60. package/dist/aura3d-cli/asset-manifest.d.ts.map +1 -1
  61. package/dist/aura3d-cli/asset-manifest.js +36 -2
  62. package/dist/aura3d-cli/asset-manifest.js.map +1 -1
  63. package/dist/aura3d-cli/asset-role-admission.js +1 -1
  64. package/dist/aura3d-cli/asset-role-admission.js.map +1 -1
  65. package/dist/aura3d-cli/cli-help.js +3 -3
  66. package/dist/aura3d-cli/cli-help.js.map +1 -1
  67. package/dist/aura3d-cli/cli-options.d.ts +1 -1
  68. package/dist/aura3d-cli/cli-options.d.ts.map +1 -1
  69. package/dist/aura3d-cli/cli-options.js +2 -2
  70. package/dist/aura3d-cli/cli-options.js.map +1 -1
  71. package/dist/aura3d-cli/cli.js +1 -1
  72. package/dist/aura3d-cli/cli.js.map +1 -1
  73. package/dist/aura3d-cli/index.d.ts.map +1 -1
  74. package/dist/aura3d-cli/index.js +13 -5
  75. package/dist/aura3d-cli/index.js.map +1 -1
  76. package/dist/create-aura3d/index.d.ts.map +1 -1
  77. package/dist/create-aura3d/index.js +10 -4
  78. package/dist/create-aura3d/index.js.map +1 -1
  79. package/dist/create-aura3d/showcase-spec-evidence.js +5 -1
  80. package/dist/create-aura3d/showcase-spec-evidence.js.map +1 -1
  81. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts +8 -1
  82. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts.map +1 -1
  83. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js +191 -31
  84. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js.map +1 -1
  85. package/dist/create-aura3d/showcase-spec-game-template-evidence.d.ts.map +1 -1
  86. package/dist/create-aura3d/showcase-spec-game-template-evidence.js +7 -0
  87. package/dist/create-aura3d/showcase-spec-game-template-evidence.js.map +1 -1
  88. package/dist/create-aura3d/showcase-spec-parser.js +1 -1
  89. package/dist/create-aura3d/showcase-spec-parser.js.map +1 -1
  90. package/dist/create-aura3d/showcase-spec-types.d.ts +50 -0
  91. package/dist/create-aura3d/showcase-spec-types.d.ts.map +1 -1
  92. package/dist/editor-runtime/index.d.ts +0 -2
  93. package/dist/editor-runtime/index.d.ts.map +1 -1
  94. package/dist/editor-runtime/index.js +0 -1
  95. package/dist/editor-runtime/index.js.map +1 -1
  96. package/dist/engine/agent-api/GameAssetValidation.js +1 -1
  97. package/dist/engine/agent-api/GameAssetValidation.js.map +1 -1
  98. package/dist/engine/agent-api/GameEvidence.js +1 -1
  99. package/dist/engine/agent-api/GameEvidence.js.map +1 -1
  100. package/dist/engine/agent-api/GameGenreKits.d.ts +63 -0
  101. package/dist/engine/agent-api/GameGenreKits.d.ts.map +1 -1
  102. package/dist/engine/agent-api/GameGenreKits.js +274 -56
  103. package/dist/engine/agent-api/GameGenreKits.js.map +1 -1
  104. package/dist/engine/agent-api/GameRuntime.d.ts +38 -1
  105. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -1
  106. package/dist/engine/agent-api/GameRuntime.js +69 -1
  107. package/dist/engine/agent-api/GameRuntime.js.map +1 -1
  108. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts +24 -0
  109. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts.map +1 -1
  110. package/dist/engine/agent-api/GameSceneGeometryBindings.js +52 -0
  111. package/dist/engine/agent-api/GameSceneGeometryBindings.js.map +1 -1
  112. package/dist/engine/agent-api/LeanArcadeRuntime.d.ts +111 -0
  113. package/dist/engine/agent-api/LeanArcadeRuntime.d.ts.map +1 -0
  114. package/dist/engine/agent-api/LeanArcadeRuntime.js +219 -0
  115. package/dist/engine/agent-api/LeanArcadeRuntime.js.map +1 -0
  116. package/dist/engine/agent-api/PhysicsRuntime.d.ts +332 -0
  117. package/dist/engine/agent-api/PhysicsRuntime.d.ts.map +1 -0
  118. package/dist/engine/agent-api/PhysicsRuntime.js +619 -0
  119. package/dist/engine/agent-api/PhysicsRuntime.js.map +1 -0
  120. package/dist/engine/agent-api/PlatformerMotion.d.ts +124 -0
  121. package/dist/engine/agent-api/PlatformerMotion.d.ts.map +1 -1
  122. package/dist/engine/agent-api/PlatformerMotion.js +101 -16
  123. package/dist/engine/agent-api/PlatformerMotion.js.map +1 -1
  124. package/dist/engine/agent-api/RootGeometry.d.ts +36 -0
  125. package/dist/engine/agent-api/RootGeometry.d.ts.map +1 -0
  126. package/dist/engine/agent-api/RootGeometry.js +152 -0
  127. package/dist/engine/agent-api/RootGeometry.js.map +1 -0
  128. package/dist/engine/agent-api/SpatialAnchoring.d.ts +47 -0
  129. package/dist/engine/agent-api/SpatialAnchoring.d.ts.map +1 -1
  130. package/dist/engine/agent-api/SpatialAnchoring.js +46 -0
  131. package/dist/engine/agent-api/SpatialAnchoring.js.map +1 -1
  132. package/dist/engine/agent-api/VehicleChassis.d.ts +52 -0
  133. package/dist/engine/agent-api/VehicleChassis.d.ts.map +1 -1
  134. package/dist/engine/agent-api/VehicleChassis.js +182 -8
  135. package/dist/engine/agent-api/VehicleChassis.js.map +1 -1
  136. package/dist/engine/agent-api/WorldLabelRenderer.d.ts +65 -1
  137. package/dist/engine/agent-api/WorldLabelRenderer.d.ts.map +1 -1
  138. package/dist/engine/agent-api/WorldLabelRenderer.js +48 -5
  139. package/dist/engine/agent-api/WorldLabelRenderer.js.map +1 -1
  140. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +1 -1
  141. package/dist/engine/agent-api/index.d.ts +240 -14
  142. package/dist/engine/agent-api/index.d.ts.map +1 -1
  143. package/dist/engine/agent-api/index.js +1435 -344
  144. package/dist/engine/agent-api/index.js.map +1 -1
  145. package/dist/engine/agent-api/lean-base.d.ts +224 -0
  146. package/dist/engine/agent-api/lean-base.d.ts.map +1 -0
  147. package/dist/engine/agent-api/lean-base.js +322 -0
  148. package/dist/engine/agent-api/lean-base.js.map +1 -0
  149. package/dist/engine/agent-api/lean-game.d.ts +3 -0
  150. package/dist/engine/agent-api/lean-game.d.ts.map +1 -0
  151. package/dist/engine/agent-api/lean-game.js +3 -0
  152. package/dist/engine/agent-api/lean-game.js.map +1 -0
  153. package/dist/engine/agent-api/lean-product.d.ts +3 -0
  154. package/dist/engine/agent-api/lean-product.d.ts.map +1 -0
  155. package/dist/engine/agent-api/lean-product.js +3 -0
  156. package/dist/engine/agent-api/lean-product.js.map +1 -0
  157. package/dist/engine/agent-api/lean.d.ts +3 -0
  158. package/dist/engine/agent-api/lean.d.ts.map +1 -0
  159. package/dist/engine/agent-api/lean.js +3 -0
  160. package/dist/engine/agent-api/lean.js.map +1 -0
  161. package/dist/engine/agent-api/media-node.d.ts +42 -0
  162. package/dist/engine/agent-api/media-node.d.ts.map +1 -0
  163. package/dist/engine/agent-api/media-node.js +44 -0
  164. package/dist/engine/agent-api/media-node.js.map +1 -0
  165. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  166. package/dist/engine/game/GameAudio.d.ts +5 -0
  167. package/dist/engine/game/GameAudio.d.ts.map +1 -1
  168. package/dist/engine/game/GameAudio.js +65 -23
  169. package/dist/engine/game/GameAudio.js.map +1 -1
  170. package/dist/engine/production-runtime/TypedGLBActor.d.ts +9 -1
  171. package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
  172. package/dist/engine/production-runtime/TypedGLBActor.js +25 -7
  173. package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
  174. package/dist/engine/production-runtime/index.d.ts +2 -2
  175. package/dist/engine/production-runtime/index.d.ts.map +1 -1
  176. package/dist/engine/threejs-example-parity/FlagshipFoundation.d.ts +3 -3
  177. package/dist/engine/threejs-example-parity/FlagshipFoundation.d.ts.map +1 -1
  178. package/dist/environments/index.d.ts +5 -10
  179. package/dist/environments/index.d.ts.map +1 -1
  180. package/dist/environments/index.js +0 -3
  181. package/dist/environments/index.js.map +1 -1
  182. package/dist/environments/node.d.ts +7 -0
  183. package/dist/environments/node.d.ts.map +1 -0
  184. package/dist/environments/node.js +5 -0
  185. package/dist/environments/node.js.map +1 -0
  186. package/dist/index.d.ts +3 -0
  187. package/dist/index.js +3 -0
  188. package/dist/input/InputActionBinding.d.ts +44 -0
  189. package/dist/input/InputActionBinding.d.ts.map +1 -0
  190. package/dist/input/InputActionBinding.js +86 -0
  191. package/dist/input/InputActionBinding.js.map +1 -0
  192. package/dist/input/InputActionBindingFixtures.d.ts +8 -0
  193. package/dist/input/InputActionBindingFixtures.d.ts.map +1 -1
  194. package/dist/input/InputActionBindingFixtures.js +8 -0
  195. package/dist/input/InputActionBindingFixtures.js.map +1 -1
  196. package/dist/input/InputValueProcessors.d.ts +19 -0
  197. package/dist/input/InputValueProcessors.d.ts.map +1 -0
  198. package/dist/input/InputValueProcessors.js +24 -0
  199. package/dist/input/InputValueProcessors.js.map +1 -0
  200. package/dist/input/index.d.ts +2 -6
  201. package/dist/input/index.d.ts.map +1 -1
  202. package/dist/input/index.js +1 -3
  203. package/dist/input/index.js.map +1 -1
  204. package/dist/lean/ArcadeRuntime.d.ts +111 -0
  205. package/dist/lean/ArcadeRuntime.d.ts.map +1 -0
  206. package/dist/lean/ArcadeRuntime.js +219 -0
  207. package/dist/lean/ArcadeRuntime.js.map +1 -0
  208. package/dist/lean/base.d.ts +228 -0
  209. package/dist/lean/base.d.ts.map +1 -0
  210. package/dist/lean/base.js +322 -0
  211. package/dist/lean/base.js.map +1 -0
  212. package/dist/lean/game.d.ts +19 -0
  213. package/dist/lean/game.d.ts.map +1 -0
  214. package/dist/lean/game.js +37 -0
  215. package/dist/lean/game.js.map +1 -0
  216. package/dist/lean/index.d.ts +4 -0
  217. package/dist/lean/index.d.ts.map +1 -0
  218. package/dist/lean/index.js +10 -0
  219. package/dist/lean/index.js.map +1 -0
  220. package/dist/lean/product.d.ts +4 -0
  221. package/dist/lean/product.d.ts.map +1 -0
  222. package/dist/lean/product.js +55 -0
  223. package/dist/lean/product.js.map +1 -0
  224. package/dist/materials/index.d.ts +1 -10
  225. package/dist/materials/index.d.ts.map +1 -1
  226. package/dist/materials/index.js +1 -6
  227. package/dist/materials/index.js.map +1 -1
  228. package/dist/materials/node.d.ts +4 -0
  229. package/dist/materials/node.d.ts.map +1 -0
  230. package/dist/materials/node.js +3 -0
  231. package/dist/materials/node.js.map +1 -0
  232. package/dist/physics/ArcadeCharacterController.d.ts +53 -0
  233. package/dist/physics/ArcadeCharacterController.d.ts.map +1 -0
  234. package/dist/physics/ArcadeCharacterController.js +98 -0
  235. package/dist/physics/ArcadeCharacterController.js.map +1 -0
  236. package/dist/physics/ArcadeVehicleTelemetry.d.ts +162 -0
  237. package/dist/physics/ArcadeVehicleTelemetry.d.ts.map +1 -0
  238. package/dist/physics/ArcadeVehicleTelemetry.js +363 -0
  239. package/dist/physics/ArcadeVehicleTelemetry.js.map +1 -0
  240. package/dist/physics/CharacterController.d.ts +52 -0
  241. package/dist/physics/CharacterController.d.ts.map +1 -1
  242. package/dist/physics/CharacterController.js +380 -7
  243. package/dist/physics/CharacterController.js.map +1 -1
  244. package/dist/physics/Constraint.d.ts +20 -4
  245. package/dist/physics/Constraint.d.ts.map +1 -1
  246. package/dist/physics/Constraint.js +34 -60
  247. package/dist/physics/Constraint.js.map +1 -1
  248. package/dist/physics/FightingCharacterController.d.ts +32 -0
  249. package/dist/physics/FightingCharacterController.d.ts.map +1 -0
  250. package/dist/physics/FightingCharacterController.js +76 -0
  251. package/dist/physics/FightingCharacterController.js.map +1 -0
  252. package/dist/physics/MeshBVH.d.ts +72 -0
  253. package/dist/physics/MeshBVH.d.ts.map +1 -0
  254. package/dist/physics/MeshBVH.js +244 -0
  255. package/dist/physics/MeshBVH.js.map +1 -0
  256. package/dist/physics/PathFollowDriver.d.ts +162 -0
  257. package/dist/physics/PathFollowDriver.d.ts.map +1 -0
  258. package/dist/physics/PathFollowDriver.js +163 -0
  259. package/dist/physics/PathFollowDriver.js.map +1 -0
  260. package/dist/physics/PhysicsDebugDraw.d.ts +40 -1
  261. package/dist/physics/PhysicsDebugDraw.d.ts.map +1 -1
  262. package/dist/physics/PhysicsDebugDraw.js +87 -17
  263. package/dist/physics/PhysicsDebugDraw.js.map +1 -1
  264. package/dist/physics/PhysicsWorld.d.ts +37 -18
  265. package/dist/physics/PhysicsWorld.d.ts.map +1 -1
  266. package/dist/physics/PhysicsWorld.js +231 -630
  267. package/dist/physics/PhysicsWorld.js.map +1 -1
  268. package/dist/physics/RacingLineProfile.d.ts +116 -0
  269. package/dist/physics/RacingLineProfile.d.ts.map +1 -0
  270. package/dist/physics/RacingLineProfile.js +181 -0
  271. package/dist/physics/RacingLineProfile.js.map +1 -0
  272. package/dist/physics/Raycast.d.ts +11 -0
  273. package/dist/physics/Raycast.d.ts.map +1 -1
  274. package/dist/physics/Raycast.js +62 -8
  275. package/dist/physics/Raycast.js.map +1 -1
  276. package/dist/physics/RigidBody.d.ts +16 -9
  277. package/dist/physics/RigidBody.d.ts.map +1 -1
  278. package/dist/physics/RigidBody.js +23 -75
  279. package/dist/physics/RigidBody.js.map +1 -1
  280. package/dist/physics/SurfaceQuery.d.ts +72 -0
  281. package/dist/physics/SurfaceQuery.d.ts.map +1 -0
  282. package/dist/physics/SurfaceQuery.js +89 -0
  283. package/dist/physics/SurfaceQuery.js.map +1 -0
  284. package/dist/physics/VehicleDynamics.d.ts +10 -0
  285. package/dist/physics/VehicleDynamics.d.ts.map +1 -1
  286. package/dist/physics/VehicleDynamics.js +31 -3
  287. package/dist/physics/VehicleDynamics.js.map +1 -1
  288. package/dist/physics/VehicleMotion.d.ts +125 -0
  289. package/dist/physics/VehicleMotion.d.ts.map +1 -0
  290. package/dist/physics/VehicleMotion.js +373 -0
  291. package/dist/physics/VehicleMotion.js.map +1 -0
  292. package/dist/physics/index.d.ts +62 -17
  293. package/dist/physics/index.d.ts.map +1 -1
  294. package/dist/physics/index.js +70 -17
  295. package/dist/physics/index.js.map +1 -1
  296. package/dist/physics/solverless-entry.d.ts +41 -0
  297. package/dist/physics/solverless-entry.d.ts.map +1 -0
  298. package/dist/physics/solverless-entry.js +40 -0
  299. package/dist/physics/solverless-entry.js.map +1 -0
  300. package/dist/physics/solverless.d.ts +37 -0
  301. package/dist/physics/solverless.d.ts.map +1 -0
  302. package/dist/physics/solverless.js +36 -0
  303. package/dist/physics/solverless.js.map +1 -0
  304. package/dist/physics/world-entry.d.ts +31 -0
  305. package/dist/physics/world-entry.d.ts.map +1 -0
  306. package/dist/physics/world-entry.js +30 -0
  307. package/dist/physics/world-entry.js.map +1 -0
  308. package/dist/physics/world.d.ts +18 -0
  309. package/dist/physics/world.d.ts.map +1 -0
  310. package/dist/physics/world.js +17 -0
  311. package/dist/physics/world.js.map +1 -0
  312. package/dist/physics-rapier/index.d.ts +169 -0
  313. package/dist/physics-rapier/index.d.ts.map +1 -0
  314. package/dist/physics-rapier/index.js +311 -0
  315. package/dist/physics-rapier/index.js.map +1 -0
  316. package/dist/product-studio/ProductLighting.d.ts.map +1 -1
  317. package/dist/product-studio/ProductLighting.js +34 -3
  318. package/dist/product-studio/ProductLighting.js.map +1 -1
  319. package/dist/rendering/ArchitecturalLighting.d.ts +35 -0
  320. package/dist/rendering/ArchitecturalLighting.d.ts.map +1 -0
  321. package/dist/rendering/ArchitecturalLighting.js +162 -0
  322. package/dist/rendering/ArchitecturalLighting.js.map +1 -0
  323. package/dist/rendering/ArchitecturalMaterialCatalog.d.ts +1 -1
  324. package/dist/rendering/ArchitecturalMaterialCatalog.d.ts.map +1 -1
  325. package/dist/rendering/ArchitecturalMaterialCatalog.js +1 -1
  326. package/dist/rendering/ArchitecturalMaterialCatalog.js.map +1 -1
  327. package/dist/rendering/ArchitecturalMeasurement.d.ts +27 -0
  328. package/dist/rendering/ArchitecturalMeasurement.d.ts.map +1 -0
  329. package/dist/rendering/ArchitecturalMeasurement.js +112 -0
  330. package/dist/rendering/ArchitecturalMeasurement.js.map +1 -0
  331. package/dist/rendering/CameraFraming.d.ts +77 -0
  332. package/dist/rendering/CameraFraming.d.ts.map +1 -1
  333. package/dist/rendering/CameraFraming.js +176 -1
  334. package/dist/rendering/CameraFraming.js.map +1 -1
  335. package/dist/rendering/CanonicalProductScene.d.ts +13 -0
  336. package/dist/rendering/CanonicalProductScene.d.ts.map +1 -0
  337. package/dist/rendering/CanonicalProductScene.js +78 -0
  338. package/dist/rendering/CanonicalProductScene.js.map +1 -0
  339. package/dist/rendering/CascadedShadowMaps.d.ts +1 -1
  340. package/dist/rendering/CascadedShadowMaps.d.ts.map +1 -1
  341. package/dist/rendering/CascadedShadowMaps.js +1 -1
  342. package/dist/rendering/CascadedShadowMaps.js.map +1 -1
  343. package/dist/rendering/DepthPass.d.ts +1 -1
  344. package/dist/rendering/DepthPass.d.ts.map +1 -1
  345. package/dist/rendering/DepthPass.js +2 -2
  346. package/dist/rendering/DepthPass.js.map +1 -1
  347. package/dist/rendering/EnvironmentBackgroundPass.d.ts +1 -1
  348. package/dist/rendering/EnvironmentBackgroundPass.d.ts.map +1 -1
  349. package/dist/rendering/EnvironmentBackgroundPass.js +2 -2
  350. package/dist/rendering/EnvironmentBackgroundPass.js.map +1 -1
  351. package/dist/rendering/EnvironmentPlatform.js +2 -2
  352. package/dist/rendering/EnvironmentPlatform.js.map +1 -1
  353. package/dist/rendering/ForwardPass.d.ts +1 -1
  354. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  355. package/dist/rendering/ForwardPass.js +24 -10
  356. package/dist/rendering/ForwardPass.js.map +1 -1
  357. package/dist/rendering/Geometry.d.ts +2 -0
  358. package/dist/rendering/Geometry.d.ts.map +1 -1
  359. package/dist/rendering/Geometry.js +15 -0
  360. package/dist/rendering/Geometry.js.map +1 -1
  361. package/dist/rendering/InstancedPBRMaterial.js +1 -1
  362. package/dist/rendering/InstancedPBRMaterial.js.map +1 -1
  363. package/dist/rendering/InstancedUnlitMaterial.js +1 -1
  364. package/dist/rendering/InstancedUnlitMaterial.js.map +1 -1
  365. package/dist/rendering/Material.js +2 -2
  366. package/dist/rendering/Material.js.map +1 -1
  367. package/dist/rendering/MaterialBinding.js +4 -4
  368. package/dist/rendering/MaterialBinding.js.map +1 -1
  369. package/dist/rendering/MaterialInstance.js +2 -2
  370. package/dist/rendering/MaterialInstance.js.map +1 -1
  371. package/dist/rendering/MorphUnlitMaterial.js +1 -1
  372. package/dist/rendering/MorphUnlitMaterial.js.map +1 -1
  373. package/dist/rendering/NormalMappedPBRMaterial.js +1 -1
  374. package/dist/rendering/NormalMappedPBRMaterial.js.map +1 -1
  375. package/dist/rendering/OceanSurface.d.ts +62 -0
  376. package/dist/rendering/OceanSurface.d.ts.map +1 -0
  377. package/dist/rendering/OceanSurface.js +240 -0
  378. package/dist/rendering/OceanSurface.js.map +1 -0
  379. package/dist/rendering/PBRMaterial.d.ts.map +1 -1
  380. package/dist/rendering/PBRMaterial.js +3 -3
  381. package/dist/rendering/PBRMaterial.js.map +1 -1
  382. package/dist/rendering/PortableShaderMaterial.d.ts +60 -0
  383. package/dist/rendering/PortableShaderMaterial.d.ts.map +1 -0
  384. package/dist/rendering/PortableShaderMaterial.js +223 -0
  385. package/dist/rendering/PortableShaderMaterial.js.map +1 -0
  386. package/dist/rendering/PostProcessPass.d.ts.map +1 -1
  387. package/dist/rendering/PostProcessPass.js +30 -6
  388. package/dist/rendering/PostProcessPass.js.map +1 -1
  389. package/dist/rendering/ProceduralTexture.d.ts +27 -0
  390. package/dist/rendering/ProceduralTexture.d.ts.map +1 -0
  391. package/dist/rendering/ProceduralTexture.js +336 -0
  392. package/dist/rendering/ProceduralTexture.js.map +1 -0
  393. package/dist/rendering/ProductTurntable.d.ts +96 -0
  394. package/dist/rendering/ProductTurntable.d.ts.map +1 -0
  395. package/dist/rendering/ProductTurntable.js +639 -0
  396. package/dist/rendering/ProductTurntable.js.map +1 -0
  397. package/dist/rendering/RenderDevice.d.ts +30 -0
  398. package/dist/rendering/RenderDevice.d.ts.map +1 -1
  399. package/dist/rendering/RenderDevice.js.map +1 -1
  400. package/dist/rendering/Renderer.d.ts +28 -4
  401. package/dist/rendering/Renderer.d.ts.map +1 -1
  402. package/dist/rendering/Renderer.js +34 -12
  403. package/dist/rendering/Renderer.js.map +1 -1
  404. package/dist/rendering/RendererPostprocessPlan.js +4 -4
  405. package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
  406. package/dist/rendering/ScreenSpaceLineMaterial.js +1 -1
  407. package/dist/rendering/ScreenSpaceLineMaterial.js.map +1 -1
  408. package/dist/rendering/ShaderChunks.d.ts.map +1 -1
  409. package/dist/rendering/ShaderChunks.js +81 -19
  410. package/dist/rendering/ShaderChunks.js.map +1 -1
  411. package/dist/rendering/ShaderLibrary.d.ts +2 -78
  412. package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
  413. package/dist/rendering/ShaderLibrary.js +127 -793
  414. package/dist/rendering/ShaderLibrary.js.map +1 -1
  415. package/dist/rendering/ShaderLibraryCore.d.ts +100 -0
  416. package/dist/rendering/ShaderLibraryCore.d.ts.map +1 -0
  417. package/dist/rendering/ShaderLibraryCore.js +800 -0
  418. package/dist/rendering/ShaderLibraryCore.js.map +1 -0
  419. package/dist/rendering/ShaderModule.d.ts +1 -1
  420. package/dist/rendering/ShaderModule.d.ts.map +1 -1
  421. package/dist/rendering/ShaderModule.js +4 -2
  422. package/dist/rendering/ShaderModule.js.map +1 -1
  423. package/dist/rendering/ShadowPass.d.ts +1 -1
  424. package/dist/rendering/ShadowPass.d.ts.map +1 -1
  425. package/dist/rendering/ShadowPass.js +6 -4
  426. package/dist/rendering/ShadowPass.js.map +1 -1
  427. package/dist/rendering/SkinnedLitMaterial.js +1 -1
  428. package/dist/rendering/SkinnedLitMaterial.js.map +1 -1
  429. package/dist/rendering/SkinnedUnlitMaterial.js +1 -1
  430. package/dist/rendering/SkinnedUnlitMaterial.js.map +1 -1
  431. package/dist/rendering/SpaceEnvironment.d.ts +54 -0
  432. package/dist/rendering/SpaceEnvironment.d.ts.map +1 -0
  433. package/dist/rendering/SpaceEnvironment.js +116 -0
  434. package/dist/rendering/SpaceEnvironment.js.map +1 -0
  435. package/dist/rendering/TerrainHeightfield.d.ts +60 -0
  436. package/dist/rendering/TerrainHeightfield.d.ts.map +1 -0
  437. package/dist/rendering/TerrainHeightfield.js +239 -0
  438. package/dist/rendering/TerrainHeightfield.js.map +1 -0
  439. package/dist/rendering/TextureBinding.d.ts +14 -0
  440. package/dist/rendering/TextureBinding.d.ts.map +1 -1
  441. package/dist/rendering/TextureBinding.js +17 -0
  442. package/dist/rendering/TextureBinding.js.map +1 -1
  443. package/dist/rendering/TexturedPBRMaterial.js +1 -1
  444. package/dist/rendering/TexturedPBRMaterial.js.map +1 -1
  445. package/dist/rendering/TexturedUnlitMaterial.js +1 -1
  446. package/dist/rendering/TexturedUnlitMaterial.js.map +1 -1
  447. package/dist/rendering/UnlitMaterial.js +1 -1
  448. package/dist/rendering/UnlitMaterial.js.map +1 -1
  449. package/dist/rendering/VegetationFixtures.d.ts +1 -1
  450. package/dist/rendering/VegetationFixtures.d.ts.map +1 -1
  451. package/dist/rendering/VegetationFixtures.js +1 -1
  452. package/dist/rendering/VegetationFixtures.js.map +1 -1
  453. package/dist/rendering/VegetationScatter.d.ts +68 -0
  454. package/dist/rendering/VegetationScatter.d.ts.map +1 -0
  455. package/dist/rendering/VegetationScatter.js +241 -0
  456. package/dist/rendering/VegetationScatter.js.map +1 -0
  457. package/dist/rendering/VoxelWorld.d.ts +51 -0
  458. package/dist/rendering/VoxelWorld.d.ts.map +1 -0
  459. package/dist/rendering/VoxelWorld.js +183 -0
  460. package/dist/rendering/VoxelWorld.js.map +1 -0
  461. package/dist/rendering/Weather.d.ts +44 -0
  462. package/dist/rendering/Weather.d.ts.map +1 -0
  463. package/dist/rendering/Weather.js +140 -0
  464. package/dist/rendering/Weather.js.map +1 -0
  465. package/dist/rendering/WebGL2Device.d.ts +22 -0
  466. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  467. package/dist/rendering/WebGL2Device.js +134 -23
  468. package/dist/rendering/WebGL2Device.js.map +1 -1
  469. package/dist/rendering/WebGPUDevice.d.ts +19 -2
  470. package/dist/rendering/WebGPUDevice.d.ts.map +1 -1
  471. package/dist/rendering/WebGPUDevice.js +188 -9
  472. package/dist/rendering/WebGPUDevice.js.map +1 -1
  473. package/dist/rendering/index.d.ts +28 -35
  474. package/dist/rendering/index.d.ts.map +1 -1
  475. package/dist/rendering/index.js +36 -20
  476. package/dist/rendering/index.js.map +1 -1
  477. package/dist/rendering/lean/LeanProductRenderer.d.ts +29 -0
  478. package/dist/rendering/lean/LeanProductRenderer.d.ts.map +1 -0
  479. package/dist/rendering/lean/LeanProductRenderer.js +38 -0
  480. package/dist/rendering/lean/LeanProductRenderer.js.map +1 -0
  481. package/dist/rendering/lean/LeanProductionRenderer.d.ts +38 -0
  482. package/dist/rendering/lean/LeanProductionRenderer.d.ts.map +1 -0
  483. package/dist/rendering/lean/LeanProductionRenderer.js +88 -0
  484. package/dist/rendering/lean/LeanProductionRenderer.js.map +1 -0
  485. package/dist/rendering/lean-runtime.d.ts +18 -0
  486. package/dist/rendering/lean-runtime.d.ts.map +1 -0
  487. package/dist/rendering/lean-runtime.js +13 -0
  488. package/dist/rendering/lean-runtime.js.map +1 -0
  489. package/dist/rendering/postprocess/EffectComposer.d.ts.map +1 -1
  490. package/dist/rendering/postprocess/EffectComposer.js +1 -3
  491. package/dist/rendering/postprocess/EffectComposer.js.map +1 -1
  492. package/dist/rendering/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  493. package/dist/rendering/production-runtime/PBRHDRPipeline.js +5 -1
  494. package/dist/rendering/production-runtime/PBRHDRPipeline.js.map +1 -1
  495. package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts +9 -0
  496. package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
  497. package/dist/rendering/production-runtime/ProductionRendererTypes.js.map +1 -1
  498. package/dist/rendering/production-runtime/ProductionRuntimeRenderer.d.ts +5 -0
  499. package/dist/rendering/production-runtime/ProductionRuntimeRenderer.d.ts.map +1 -1
  500. package/dist/rendering/production-runtime/ProductionRuntimeRenderer.js +53 -5
  501. package/dist/rendering/production-runtime/ProductionRuntimeRenderer.js.map +1 -1
  502. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.d.ts +10 -0
  503. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.d.ts.map +1 -1
  504. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js +21 -2
  505. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js.map +1 -1
  506. package/dist/rendering/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  507. package/dist/rendering/production-runtime/ProductionWebGPURenderer.js +4 -1
  508. package/dist/rendering/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  509. package/dist/rendering/webgpu-device-entry.d.ts +25 -0
  510. package/dist/rendering/webgpu-device-entry.d.ts.map +1 -0
  511. package/dist/rendering/webgpu-device-entry.js +24 -0
  512. package/dist/rendering/webgpu-device-entry.js.map +1 -0
  513. package/dist/rendering/webgpu.d.ts +25 -0
  514. package/dist/rendering/webgpu.d.ts.map +1 -0
  515. package/dist/rendering/webgpu.js +24 -0
  516. package/dist/rendering/webgpu.js.map +1 -0
  517. package/dist/scene/MathTypes.d.ts +1 -0
  518. package/dist/scene/MathTypes.d.ts.map +1 -1
  519. package/dist/scene/MathTypes.js +3 -0
  520. package/dist/scene/MathTypes.js.map +1 -1
  521. package/dist/scene/Renderable.d.ts +6 -0
  522. package/dist/scene/Renderable.d.ts.map +1 -1
  523. package/dist/scene/Renderable.js +8 -2
  524. package/dist/scene/Renderable.js.map +1 -1
  525. package/dist/scripting/index.d.ts +0 -16
  526. package/dist/scripting/index.d.ts.map +1 -1
  527. package/dist/scripting/index.js +0 -8
  528. package/dist/scripting/index.js.map +1 -1
  529. package/dist/workflows/production-runtime/ProductionExampleRuntime.d.ts +2 -2
  530. package/dist/workflows/production-runtime/ProductionExampleRuntime.d.ts.map +1 -1
  531. package/dist/workflows/production-runtime/ProductionExampleRuntime.js +2 -2
  532. package/dist/workflows/production-runtime/ProductionExampleRuntime.js.map +1 -1
  533. package/package.json +243 -127
  534. package/templates/cinematic-scene/node_modules/.vite/deps/_metadata.json +8 -0
  535. package/templates/cinematic-scene/node_modules/.vite/deps/package.json +3 -0
  536. package/templates/cinematic-scene/package.json +1 -1
  537. package/templates/cinematic-scene/test-results/.last-run.json +6 -0
  538. package/templates/cinematic-scene/test-results/route-health-Aura3D-cinematic-scene-reaches-ready-state/error-context.md +64 -0
  539. package/templates/mini-game/README.md +3 -2
  540. package/templates/mini-game/package.json +1 -1
  541. package/templates/mini-game/src/aura-assets.ts +1 -1
  542. package/templates/mini-game/src/main.ts +69 -141
  543. package/templates/product-viewer/README.md +7 -5
  544. package/templates/product-viewer/index.html +1 -1
  545. package/templates/product-viewer/node_modules/.vite/deps/_metadata.json +8 -0
  546. package/templates/product-viewer/node_modules/.vite/deps/package.json +3 -0
  547. package/templates/product-viewer/package.json +1 -1
  548. package/templates/product-viewer/src/aura-assets.ts +1 -1
  549. package/templates/product-viewer/src/main.ts +29 -23
@@ -81,6 +81,63 @@ export interface PlatformerMotionRequest {
81
81
  readonly gapMargin?: number | undefined;
82
82
  /** Minimum apex, so a level with no rises still has a usable jump. */
83
83
  readonly minApex?: number | undefined;
84
+ /**
85
+ * Jump height in world units, declared by the developer.
86
+ *
87
+ * **Prefer this over relying on the geometry-derived apex.** When present it is
88
+ * authoritative: apex comes from intent and the level is then *validated* against it,
89
+ * rather than the jump being sized by whatever the level happens to contain.
90
+ *
91
+ * The defect this fixes: apex was `max(minApex, maxRise * apexHeadroom)`, and `maxRise`
92
+ * is the step-up between *consecutive* platforms. On a near-level course maxRise
93
+ * collapses, so apex fell to `minApex` and the character barely left the ground. The
94
+ * solver was optimising for "can technically reach the next platform" rather than "is a
95
+ * usable jump", and it had no notion of clearing anything that was not the immediate
96
+ * next platform.
97
+ */
98
+ readonly jumpHeight?: number | undefined;
99
+ /**
100
+ * Named feel, an alternative to stating a height and rise time separately.
101
+ *
102
+ * `snappy` is a fast, low, tightly controlled jump. `floaty` hangs. `responsive` is the
103
+ * middle ground most platformers use.
104
+ */
105
+ readonly feel?: PlatformerFeel | undefined;
106
+ /**
107
+ * Run speed in character heights per second.
108
+ *
109
+ * ## The coupling defect this fixes
110
+ *
111
+ * Move speed used to be derived solely from `max(gapClearance, sessionPace)`, and gap
112
+ * clearance is `maxGap * gapMargin / airtime`. Airtime grows with the apex, so **raising
113
+ * the jump made the character run slower.** Measured on Skyline: taking the apex from
114
+ * 0.684 to 1.04 to fix the barely-there jump dropped move speed from 1.15 to 0.703, and
115
+ * 60 seconds of play covered 5.27 units of a 16.6-unit course instead of 8+.
116
+ *
117
+ * Those are two independent design intentions — "how high do I jump" and "how fast do I
118
+ * run" — and one should not silently trade against the other. Gap clearance remains a
119
+ * *floor* on speed, because a run too slow to clear the widest gap is unplayable. This is
120
+ * the desired pace above that floor.
121
+ *
122
+ * Expressed per character height so it transfers across scales: a 0.5-unit hero and a
123
+ * 2-unit hero at 3 heights per second look equally quick.
124
+ */
125
+ readonly runSpeedPerHeight?: number | undefined;
126
+ /**
127
+ * Throw instead of silently shrinking the jump when intent cannot clear the level.
128
+ *
129
+ * Default true. Silent degradation is how the barely-there jump shipped: the solver
130
+ * quietly produced a number that satisfied its own constraint and no gate compared it
131
+ * to anything a player would notice.
132
+ */
133
+ readonly strict?: boolean | undefined;
134
+ /**
135
+ * Character height in world units, used to scale a `feel` preset.
136
+ *
137
+ * A jump is read relative to the character: clearing twice your own height feels the
138
+ * same whether the character is 0.5 or 5 units tall, and a fixed apex does not.
139
+ */
140
+ readonly characterHeight?: number | undefined;
84
141
  /**
85
142
  * Target session length in seconds, used to derive move speed from course length.
86
143
  *
@@ -116,6 +173,28 @@ export interface PlatformerMotionSolution {
116
173
  readonly jumpBufferMs: number;
117
174
  /** Terminal fall speed, so a long drop does not accelerate without limit. */
118
175
  readonly terminalVelocity: number;
176
+ /**
177
+ * Gravity multiplier applied while descending.
178
+ *
179
+ * Above 1 the fall is faster than the rise. A symmetric parabola is physically pure and
180
+ * feels floaty, because the player spends as long falling — with no control authority
181
+ * left — as rising. Asymmetric gravity is the single largest contributor to a jump
182
+ * feeling responsive.
183
+ */
184
+ readonly fallGravityMultiplier: number;
185
+ /** Gravity multiplier near the apex, below 1, which produces hang time. */
186
+ readonly apexGravityMultiplier: number;
187
+ /** Vertical speed below which the apex-hang reduction applies. */
188
+ readonly apexHangThreshold: number;
189
+ /**
190
+ * Minimum apex when the jump button is released immediately.
191
+ *
192
+ * Variable jump height is what separates a hop from a full jump. Without it every jump
193
+ * is the same height and the player has no fine control.
194
+ */
195
+ readonly shortHopApex: number;
196
+ /** Upward velocity retained when the button is released early. */
197
+ readonly releaseVelocityScale: number;
119
198
  /** Geometry the solution was derived from. */
120
199
  readonly geometry: PlatformerGeometryFacts;
121
200
  /** Estimated time to traverse the course at `moveSpeed`. */
@@ -131,6 +210,27 @@ export interface PlatformerMotionSolution {
131
210
  * chosen rise time, and jump velocity from gravity and rise time. Move speed is sized
132
211
  * so the jump clears the widest gap and the course takes a chosen amount of time.
133
212
  */
213
+ /** Named jump feels, as (riseSeconds, apexScale, fallMultiplier) triples. */
214
+ export type PlatformerFeel = "snappy" | "responsive" | "floaty";
215
+ interface FeelProfile {
216
+ readonly riseSeconds: number;
217
+ /** Apex as a multiple of character height, when no explicit jumpHeight is given. */
218
+ readonly apexPerHeight: number;
219
+ /**
220
+ * Gravity multiplier applied on the way down.
221
+ *
222
+ * Above 1 the fall is faster than the rise. Every platformer that feels good does this:
223
+ * a symmetric parabola reads as floating because the player spends as long descending
224
+ * (when they have no control authority left) as ascending. 1.0 is the physically pure
225
+ * but least pleasant choice.
226
+ */
227
+ readonly fallMultiplier: number;
228
+ /** Fraction of rise time near the apex where gravity is reduced, giving hang time. */
229
+ readonly apexHangFraction: number;
230
+ /** Run speed in character heights per second, independent of the jump arc. */
231
+ readonly runSpeedPerHeight: number;
232
+ }
233
+ export declare function platformerFeelProfile(feel: PlatformerFeel): FeelProfile;
134
234
  export declare function solvePlatformerMotion(platforms: readonly PlatformerPlatformLike[], request?: PlatformerMotionRequest): PlatformerMotionSolution;
135
235
  export interface PlatformerMotionCheck {
136
236
  readonly id: string;
@@ -146,6 +246,17 @@ export interface PlatformerMotionReport {
146
246
  readonly airtime: number;
147
247
  readonly jumpReach: number;
148
248
  readonly apexToRiseRatio: number;
249
+ /**
250
+ * Apex over the taller of the tallest step and the character.
251
+ *
252
+ * This is the ratio the floaty ceiling is judged on. It is published alongside
253
+ * `apexToRiseRatio` so evidence shows what the check measured rather than only the
254
+ * geometry-only number, which reads as a failure on courses whose steps are shorter
255
+ * than the character.
256
+ */
257
+ readonly apexToClearanceRatio: number;
258
+ /** The height the jump had to clear: the tallest step, or the character if taller. */
259
+ readonly clearanceReference: number;
149
260
  readonly reachToGapRatio: number;
150
261
  };
151
262
  readonly checks: readonly PlatformerMotionCheck[];
@@ -173,5 +284,18 @@ export declare function validatePlatformerMotion(platforms: readonly PlatformerP
173
284
  readonly minReachToGapRatio?: number | undefined;
174
285
  /** Maximum airtime in seconds before a jump reads as floaty regardless of ratios. */
175
286
  readonly maxAirtimeSeconds?: number | undefined;
287
+ /**
288
+ * Height of the character the jump belongs to, in world units.
289
+ *
290
+ * A jump is judged against what it actually has to clear, and that is never smaller
291
+ * than the character performing it. Mesh-extracted courses routinely contain steps
292
+ * shorter than the character's own knees: Skyline's tallest step is 0.36 against a
293
+ * 0.52-unit hero. Measuring the apex against 0.36 alone declares every
294
+ * character-scaled jump "floaty" and pushes routes toward a jump the player cannot
295
+ * see. When supplied, the floaty ceiling is measured against the larger of the
296
+ * tallest step and the character's height.
297
+ */
298
+ readonly characterHeight?: number | undefined;
176
299
  }): PlatformerMotionReport;
300
+ export {};
177
301
  //# sourceMappingURL=PlatformerMotion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformerMotion.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/PlatformerMotion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlatformerMotion.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/PlatformerMotion.ts"],"names":[],"mappings":"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"}
@@ -62,22 +62,78 @@ export function measurePlatformerGeometry(platforms) {
62
62
  platformCount: ordered.length
63
63
  };
64
64
  }
65
- /**
66
- * Derive platformer motion from a level's own geometry.
67
- *
68
- * The apex is sized to the tallest step the player must clear, not chosen freely, so a
69
- * jump cannot overshoot the level by 3.5x. Gravity then follows from the apex and the
70
- * chosen rise time, and jump velocity from gravity and rise time. Move speed is sized
71
- * so the jump clears the widest gap and the course takes a chosen amount of time.
72
- */
65
+ const FEEL_PROFILES = {
66
+ /*
67
+ * `runSpeedPerHeight` is bounded by the reach-to-gap invariant, not chosen freely.
68
+ *
69
+ * Reach is `moveSpeed * airtime`, and `jump-reach-proportionate` caps reach at 3.2x the
70
+ * widest gap so a jump does not wildly overshoot what it is clearing. A snappier feel has
71
+ * less airtime, so it can carry more speed within the same reach budget — which is also
72
+ * how these games actually play. These defaults sit inside that budget for a course whose
73
+ * widest gap is a reasonable fraction of the character's height; a route wanting more pace
74
+ * states `runSpeedPerHeight` and gets a loud invariant failure if it overshoots.
75
+ */
76
+ snappy: { riseSeconds: 0.24, apexPerHeight: 1.6, fallMultiplier: 1.9, apexHangFraction: 0.08, runSpeedPerHeight: 3.2 },
77
+ responsive: { riseSeconds: 0.32, apexPerHeight: 2.0, fallMultiplier: 1.6, apexHangFraction: 0.14, runSpeedPerHeight: 2.5 },
78
+ floaty: { riseSeconds: 0.46, apexPerHeight: 2.4, fallMultiplier: 1.15, apexHangFraction: 0.22, runSpeedPerHeight: 1.9 }
79
+ };
80
+ export function platformerFeelProfile(feel) {
81
+ const profile = FEEL_PROFILES[feel];
82
+ if (!profile)
83
+ throw new Error(`Unknown platformer feel "${feel}". Use snappy, responsive or floaty.`);
84
+ return profile;
85
+ }
73
86
  export function solvePlatformerMotion(platforms, request = {}) {
74
87
  const geometry = measurePlatformerGeometry(platforms);
75
- const riseSeconds = clampPositive(request.riseSeconds ?? 0.3, 0.08, 1);
88
+ const feel = request.feel ? platformerFeelProfile(request.feel) : undefined;
89
+ const riseSeconds = clampPositive(request.riseSeconds ?? feel?.riseSeconds ?? 0.3, 0.08, 1);
76
90
  const apexHeadroom = clampPositive(request.apexHeadroom ?? 1.6, 1, 6);
77
91
  const gapMargin = clampPositive(request.gapMargin ?? 1.45, 1, 4);
78
92
  const minApex = Math.max(0.05, request.minApex ?? 0.4);
79
- // Apex is the tallest step plus headroom, floored so a flat level still jumps.
80
- const apex = Math.max(minApex, geometry.maxRise * apexHeadroom);
93
+ const strict = request.strict ?? true;
94
+ /*
95
+ * Apex comes from intent when intent was expressed, and is validated against the level.
96
+ *
97
+ * The old rule was `max(minApex, maxRise * apexHeadroom)` — geometry-derived, with the
98
+ * level dictating the jump. `maxRise` is the step-up between consecutive platforms, so a
99
+ * near-level course collapsed it and the apex fell to `minApex`: the reported
100
+ * barely-there jump. It also could not express "I want to be able to jump over that",
101
+ * because nothing but the immediate next platform entered the calculation.
102
+ *
103
+ * Order of precedence: an explicit `jumpHeight`, then a `feel` preset scaled by
104
+ * character height, then the geometry-derived value as a backwards-compatible fallback.
105
+ * In every case the result must still clear the tallest step in the level, which is the
106
+ * validation the previous model got for free by construction and now has to assert.
107
+ */
108
+ const geometryApex = Math.max(minApex, geometry.maxRise * apexHeadroom);
109
+ const intentApex = request.jumpHeight !== undefined
110
+ ? Math.max(0.01, request.jumpHeight)
111
+ : feel
112
+ ? Math.max(minApex, feel.apexPerHeight * Math.max(0.1, request.characterHeight ?? 0.5))
113
+ : undefined;
114
+ const requestedApex = intentApex ?? geometryApex;
115
+ /*
116
+ * Validation: can the declared jump actually clear the level?
117
+ *
118
+ * A jump must out-reach the tallest step, with a little margin, or there is a platform
119
+ * the player cannot get onto. Reported by name rather than silently corrected, because a
120
+ * level the character cannot traverse is a level-design bug and the developer is the only
121
+ * one who can decide whether to lower the platform or raise the jump.
122
+ */
123
+ const unclearableRises = [];
124
+ const requiredRiseClearance = geometry.maxRise * 1.05;
125
+ if (geometry.maxRise > 0 && requestedApex < requiredRiseClearance) {
126
+ unclearableRises.push(`tallest step is ${round(geometry.maxRise)} units but the declared jump apex is ` +
127
+ `${round(requestedApex)}; needs at least ${round(requiredRiseClearance)}`);
128
+ }
129
+ if (strict && unclearableRises.length > 0) {
130
+ throw new Error("solvePlatformerMotion: the declared jump cannot clear this level.\n" +
131
+ unclearableRises.map((line) => ` - ${line}`).join("\n") +
132
+ "\nRaise jumpHeight, lower the platform, or pass { strict: false } to accept a " +
133
+ "level with unreachable geometry.");
134
+ }
135
+ // Non-strict callers get a jump that at least clears the level rather than a broken one.
136
+ const apex = strict ? requestedApex : Math.max(requestedApex, requiredRiseClearance);
81
137
  // Projectile motion: apex = v^2 / 2g and riseSeconds = v / g, so g = 2 * apex / t^2.
82
138
  const gravityMagnitude = (2 * apex) / (riseSeconds * riseSeconds);
83
139
  const jumpVelocity = gravityMagnitude * riseSeconds;
@@ -95,7 +151,17 @@ export function solvePlatformerMotion(platforms, request = {}) {
95
151
  const speedForSession = targetSessionSeconds > 1 && geometry.courseLength > 0
96
152
  ? geometry.courseLength / (targetSessionSeconds * traversalFraction)
97
153
  : 0;
98
- const moveSpeed = Math.max(0.5, speedForGap, speedForSession);
154
+ /*
155
+ * Intended run pace, independent of the jump arc.
156
+ *
157
+ * Without this term, move speed was `max(gapClearance, sessionPace)`, and gap clearance is
158
+ * inversely proportional to airtime — so a higher jump produced a slower character. Run
159
+ * speed is a separate design decision and now has its own input, with gap clearance kept
160
+ * as a floor so a level stays traversable.
161
+ */
162
+ const speedForRunIntent = (request.runSpeedPerHeight ?? feel?.runSpeedPerHeight ?? 0)
163
+ * Math.max(0, request.characterHeight ?? 0);
164
+ const moveSpeed = Math.max(0.5, speedForGap, speedForSession, speedForRunIntent);
99
165
  const traversalSeconds = moveSpeed > 0 ? geometry.courseLength / moveSpeed : 0;
100
166
  return {
101
167
  kind: "aura-platformer-motion",
@@ -113,6 +179,15 @@ export function solvePlatformerMotion(platforms, request = {}) {
113
179
  // Terminal velocity caps a long fall at roughly twice takeoff speed, which keeps a
114
180
  // drop readable instead of becoming an instant teleport downward.
115
181
  terminalVelocity: -round(jumpVelocity * 2),
182
+ fallGravityMultiplier: round(feel?.fallMultiplier ?? 1.6),
183
+ // Reduced gravity in a window either side of the apex. 0.55 is enough to read as
184
+ // hang time without making the arc feel weightless.
185
+ apexGravityMultiplier: 0.55,
186
+ apexHangThreshold: round(jumpVelocity * (feel?.apexHangFraction ?? 0.14)),
187
+ // A short hop reaches ~40% of full apex, which is a usable distinction without making
188
+ // the tap-jump useless for clearing anything.
189
+ shortHopApex: round(apex * 0.4),
190
+ releaseVelocityScale: 0.45,
116
191
  geometry,
117
192
  traversalSeconds: round(traversalSeconds),
118
193
  estimatedSessionSeconds: round(traversalSeconds / traversalFraction)
@@ -132,6 +207,14 @@ export function validatePlatformerMotion(platforms, motion, limits = {}) {
132
207
  const airtime = gravityMagnitude > 0 ? (2 * motion.jumpVelocity) / gravityMagnitude : 0;
133
208
  const jumpReach = motion.moveSpeed * airtime;
134
209
  const apexToRiseRatio = geometry.maxRise > 0 ? apex / geometry.maxRise : Number.POSITIVE_INFINITY;
210
+ /*
211
+ * What the jump has to clear, which is the tallest step or the character, whichever is
212
+ * larger. The lower bound stays tied to geometry alone -- a jump must clear the actual
213
+ * step -- while the upper bound uses this reference so a course built from small steps
214
+ * cannot force a jump that is invisible next to the character.
215
+ */
216
+ const clearanceReference = Math.max(geometry.maxRise, Math.max(0, limits.characterHeight ?? 0));
217
+ const apexToClearanceRatio = clearanceReference > 0 ? apex / clearanceReference : Number.POSITIVE_INFINITY;
135
218
  const reachToGapRatio = geometry.maxGap > 0 ? jumpReach / geometry.maxGap : Number.POSITIVE_INFINITY;
136
219
  const maxApexRatio = limits.maxApexToRiseRatio ?? 2.6;
137
220
  const minApexRatio = limits.minApexToRiseRatio ?? 1.15;
@@ -147,10 +230,10 @@ export function validatePlatformerMotion(platforms, motion, limits = {}) {
147
230
  },
148
231
  {
149
232
  id: "jump-not-floaty",
150
- description: `jump apex must not exceed the tallest step by more than ${maxApexRatio}x`,
151
- // An infinite ratio means the level has no rises at all, where any apex is fine.
152
- passes: !Number.isFinite(apexToRiseRatio) || apexToRiseRatio <= maxApexRatio,
153
- detail: `apex ${round(apex)} vs tallest step ${geometry.maxRise} (ratio ${roundRatio(apexToRiseRatio)})`
233
+ description: `jump apex must not exceed the taller of the tallest step and the character by more than ${maxApexRatio}x`,
234
+ // An infinite ratio means there is nothing to clear at all, where any apex is fine.
235
+ passes: !Number.isFinite(apexToClearanceRatio) || apexToClearanceRatio <= maxApexRatio,
236
+ detail: `apex ${round(apex)} vs clearance reference ${round(clearanceReference)} (tallest step ${geometry.maxRise}${limits.characterHeight === undefined ? "" : `, character ${round(limits.characterHeight)}`}) (ratio ${roundRatio(apexToClearanceRatio)})`
154
237
  },
155
238
  {
156
239
  id: "jump-clears-widest-gap",
@@ -187,6 +270,8 @@ export function validatePlatformerMotion(platforms, motion, limits = {}) {
187
270
  airtime: round(airtime),
188
271
  jumpReach: round(jumpReach),
189
272
  apexToRiseRatio: roundRatio(apexToRiseRatio),
273
+ apexToClearanceRatio: roundRatio(apexToClearanceRatio),
274
+ clearanceReference: round(clearanceReference),
190
275
  reachToGapRatio: roundRatio(reachToGapRatio)
191
276
  },
192
277
  checks,
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformerMotion.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/PlatformerMotion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlatformerMotion.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/PlatformerMotion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export type AuraRootVec3 = readonly [number, number, number];
2
+ export interface AuraCustomGeometrySpec {
3
+ readonly kind: "aura-custom-geometry";
4
+ readonly positions: readonly AuraRootVec3[];
5
+ readonly normals?: readonly AuraRootVec3[];
6
+ readonly indices: readonly number[];
7
+ readonly bounds?: {
8
+ readonly min: AuraRootVec3;
9
+ readonly max: AuraRootVec3;
10
+ };
11
+ }
12
+ export interface AuraText3DOptions {
13
+ readonly size?: number;
14
+ readonly depth?: number;
15
+ readonly letterSpacing?: number;
16
+ }
17
+ export interface AuraText3DGeometry {
18
+ readonly geometry: AuraCustomGeometrySpec;
19
+ readonly text: string;
20
+ readonly glyphCount: number;
21
+ readonly unsupportedCharacters: readonly string[];
22
+ readonly method: "extruded-bitmap-glyph-mesh";
23
+ }
24
+ export interface AuraRootLodThreshold {
25
+ readonly maxDistance?: number;
26
+ }
27
+ export interface AuraRootLodSelection {
28
+ readonly levelIndex: number;
29
+ readonly reason: "initial-distance" | "farther-threshold" | "nearer-threshold" | "hysteresis-hold";
30
+ }
31
+ /** Select a distance LOD while preserving the previous level inside a symmetric hysteresis band. */
32
+ export declare function selectAuraRootLodLevel(distance: number, levels: readonly AuraRootLodThreshold[], previousLevelIndex?: number, hysteresis?: number): AuraRootLodSelection;
33
+ export declare function defineAuraCustomGeometry(spec: Omit<AuraCustomGeometrySpec, "kind">): AuraCustomGeometrySpec;
34
+ /** Build depth-bearing triangle geometry; this is not a DOM label or canvas texture. */
35
+ export declare function createAuraText3DGeometry(text: string, options?: AuraText3DOptions): AuraText3DGeometry;
36
+ //# sourceMappingURL=RootGeometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootGeometry.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/RootGeometry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAA;KAAE,CAAC;CAC9E;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;CACpG;AAED,oGAAoG;AACpG,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,kBAAkB,CAAC,EAAE,MAAM,EAC3B,UAAU,SAAI,GACb,oBAAoB,CAuBtB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,GAAG,sBAAsB,CAqB3G;AAED,wFAAwF;AACxF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,kBAAkB,CA+B1G"}
@@ -0,0 +1,152 @@
1
+ /** Select a distance LOD while preserving the previous level inside a symmetric hysteresis band. */
2
+ export function selectAuraRootLodLevel(distance, levels, previousLevelIndex, hysteresis = 0) {
3
+ if (!Number.isFinite(distance) || distance < 0)
4
+ throw new Error("Aura3D LOD distance must be finite and non-negative.");
5
+ if (levels.length === 0)
6
+ throw new Error("Aura3D LOD requires at least one level.");
7
+ if (!Number.isFinite(hysteresis) || hysteresis < 0)
8
+ throw new Error("Aura3D LOD hysteresis must be finite and non-negative.");
9
+ validateLodLevels(levels);
10
+ const initial = firstLevelForDistance(distance, levels);
11
+ if (previousLevelIndex === undefined || !Number.isInteger(previousLevelIndex) || previousLevelIndex < 0 || previousLevelIndex >= levels.length) {
12
+ return { levelIndex: initial, reason: "initial-distance" };
13
+ }
14
+ let selected = previousLevelIndex;
15
+ while (selected < levels.length - 1) {
16
+ const boundary = levels[selected].maxDistance;
17
+ if (boundary === undefined || distance <= boundary + hysteresis)
18
+ break;
19
+ selected += 1;
20
+ }
21
+ if (selected > previousLevelIndex)
22
+ return { levelIndex: selected, reason: "farther-threshold" };
23
+ while (selected > 0) {
24
+ const nearerBoundary = levels[selected - 1].maxDistance;
25
+ if (nearerBoundary === undefined || distance >= Math.max(0, nearerBoundary - hysteresis))
26
+ break;
27
+ selected -= 1;
28
+ }
29
+ if (selected < previousLevelIndex)
30
+ return { levelIndex: selected, reason: "nearer-threshold" };
31
+ return { levelIndex: selected, reason: "hysteresis-hold" };
32
+ }
33
+ export function defineAuraCustomGeometry(spec) {
34
+ if (spec.positions.length < 3)
35
+ throw new Error("Aura3D custom geometry requires at least three positions.");
36
+ if (spec.indices.length < 3 || spec.indices.length % 3 !== 0)
37
+ throw new Error("Aura3D custom triangle geometry indices must contain complete triangles.");
38
+ for (const [index, position] of spec.positions.entries())
39
+ validateVec3(position, `position ${index}`);
40
+ for (const [index, value] of spec.indices.entries()) {
41
+ if (!Number.isInteger(value) || value < 0 || value >= spec.positions.length)
42
+ throw new Error(`Aura3D custom geometry index ${index} is outside the position buffer.`);
43
+ }
44
+ if (spec.normals && spec.normals.length !== spec.positions.length)
45
+ throw new Error("Aura3D custom geometry normals must match the position count.");
46
+ spec.normals?.forEach((normal, index) => validateVec3(normal, `normal ${index}`));
47
+ if (spec.bounds) {
48
+ validateVec3(spec.bounds.min, "bounds min");
49
+ validateVec3(spec.bounds.max, "bounds max");
50
+ for (let axis = 0; axis < 3; axis += 1)
51
+ if (spec.bounds.max[axis] < spec.bounds.min[axis])
52
+ throw new Error("Aura3D custom geometry bounds max must be greater than or equal to min.");
53
+ }
54
+ return {
55
+ kind: "aura-custom-geometry",
56
+ positions: spec.positions.map((value) => [...value]),
57
+ ...(spec.normals ? { normals: spec.normals.map((value) => [...value]) } : {}),
58
+ indices: [...spec.indices],
59
+ ...(spec.bounds ? { bounds: { min: [...spec.bounds.min], max: [...spec.bounds.max] } } : {})
60
+ };
61
+ }
62
+ /** Build depth-bearing triangle geometry; this is not a DOM label or canvas texture. */
63
+ export function createAuraText3DGeometry(text, options = {}) {
64
+ if (!text.length)
65
+ throw new Error("Aura3D 3D text requires at least one character.");
66
+ const size = positive(options.size, 1, "size");
67
+ const depth = positive(options.depth, size * 0.16, "depth");
68
+ const spacing = nonNegative(options.letterSpacing, size * 0.14, "letterSpacing");
69
+ const cell = size / 7;
70
+ const positions = [];
71
+ const normals = [];
72
+ const indices = [];
73
+ const unsupported = new Set();
74
+ let cursor = 0;
75
+ let glyphCount = 0;
76
+ for (const rawCharacter of text.toUpperCase()) {
77
+ if (rawCharacter === " ") {
78
+ cursor += size * 0.5 + spacing;
79
+ continue;
80
+ }
81
+ const rows = GLYPHS[rawCharacter];
82
+ if (!rows) {
83
+ unsupported.add(rawCharacter);
84
+ cursor += size * 0.5 + spacing;
85
+ continue;
86
+ }
87
+ glyphCount += 1;
88
+ for (let row = 0; row < 7; row += 1)
89
+ for (let column = 0; column < 5; column += 1) {
90
+ if (rows[row]?.[column] !== "1")
91
+ continue;
92
+ appendBox(positions, normals, indices, cursor + column * cell, (6 - row) * cell, 0, cell * 0.92, cell * 0.92, depth);
93
+ }
94
+ cursor += cell * 5 + spacing;
95
+ }
96
+ if (glyphCount === 0)
97
+ throw new Error("Aura3D 3D text contains no supported glyphs.");
98
+ return {
99
+ geometry: defineAuraCustomGeometry({ positions, normals, indices }),
100
+ text,
101
+ glyphCount,
102
+ unsupportedCharacters: [...unsupported],
103
+ method: "extruded-bitmap-glyph-mesh"
104
+ };
105
+ }
106
+ function firstLevelForDistance(distance, levels) {
107
+ const found = levels.findIndex((level) => level.maxDistance === undefined || distance <= level.maxDistance);
108
+ return found === -1 ? levels.length - 1 : found;
109
+ }
110
+ function validateLodLevels(levels) {
111
+ let previous = -Infinity;
112
+ levels.forEach((level, index) => {
113
+ if (level.maxDistance === undefined) {
114
+ if (index !== levels.length - 1)
115
+ throw new Error("Only the final Aura3D LOD level may omit maxDistance.");
116
+ return;
117
+ }
118
+ if (!Number.isFinite(level.maxDistance) || level.maxDistance < 0 || level.maxDistance <= previous)
119
+ throw new Error("Aura3D LOD maxDistance values must be finite, non-negative, and strictly increasing.");
120
+ previous = level.maxDistance;
121
+ });
122
+ }
123
+ function validateVec3(value, label) { if (value.length !== 3 || value.some((entry) => !Number.isFinite(entry)))
124
+ throw new Error(`Aura3D custom geometry ${label} must be a finite vec3.`); }
125
+ function positive(value, fallback, label) { const resolved = value ?? fallback; if (!Number.isFinite(resolved) || resolved <= 0)
126
+ throw new Error(`Aura3D 3D text ${label} must be positive.`); return resolved; }
127
+ function nonNegative(value, fallback, label) { const resolved = value ?? fallback; if (!Number.isFinite(resolved) || resolved < 0)
128
+ throw new Error(`Aura3D 3D text ${label} must be non-negative.`); return resolved; }
129
+ function appendBox(positions, normals, indices, x, y, z, width, height, depth) {
130
+ const min = [x, y, z - depth / 2];
131
+ const max = [x + width, y + height, z + depth / 2];
132
+ const faces = [
133
+ { n: [0, 0, 1], v: [[min[0], min[1], max[2]], [max[0], min[1], max[2]], [max[0], max[1], max[2]], [min[0], max[1], max[2]]] },
134
+ { n: [0, 0, -1], v: [[max[0], min[1], min[2]], [min[0], min[1], min[2]], [min[0], max[1], min[2]], [max[0], max[1], min[2]]] },
135
+ { n: [-1, 0, 0], v: [[min[0], min[1], min[2]], [min[0], min[1], max[2]], [min[0], max[1], max[2]], [min[0], max[1], min[2]]] },
136
+ { n: [1, 0, 0], v: [[max[0], min[1], max[2]], [max[0], min[1], min[2]], [max[0], max[1], min[2]], [max[0], max[1], max[2]]] },
137
+ { n: [0, 1, 0], v: [[min[0], max[1], max[2]], [max[0], max[1], max[2]], [max[0], max[1], min[2]], [min[0], max[1], min[2]]] },
138
+ { n: [0, -1, 0], v: [[min[0], min[1], min[2]], [max[0], min[1], min[2]], [max[0], min[1], max[2]], [min[0], min[1], max[2]]] }
139
+ ];
140
+ for (const face of faces) {
141
+ const base = positions.length;
142
+ for (const vertex of face.v)
143
+ positions.push([vertex[0], vertex[1], vertex[2]]);
144
+ normals.push(face.n, face.n, face.n, face.n);
145
+ indices.push(base, base + 1, base + 2, base, base + 2, base + 3);
146
+ }
147
+ }
148
+ const GLYPHS = {
149
+ A: ["01110", "10001", "10001", "11111", "10001", "10001", "10001"], B: ["11110", "10001", "10001", "11110", "10001", "10001", "11110"], C: ["01111", "10000", "10000", "10000", "10000", "10000", "01111"], D: ["11110", "10001", "10001", "10001", "10001", "10001", "11110"], E: ["11111", "10000", "10000", "11110", "10000", "10000", "11111"], F: ["11111", "10000", "10000", "11110", "10000", "10000", "10000"], G: ["01111", "10000", "10000", "10111", "10001", "10001", "01111"], H: ["10001", "10001", "10001", "11111", "10001", "10001", "10001"], I: ["11111", "00100", "00100", "00100", "00100", "00100", "11111"], J: ["00111", "00010", "00010", "00010", "10010", "10010", "01100"], K: ["10001", "10010", "10100", "11000", "10100", "10010", "10001"], L: ["10000", "10000", "10000", "10000", "10000", "10000", "11111"], M: ["10001", "11011", "10101", "10101", "10001", "10001", "10001"], N: ["10001", "11001", "10101", "10011", "10001", "10001", "10001"], O: ["01110", "10001", "10001", "10001", "10001", "10001", "01110"], P: ["11110", "10001", "10001", "11110", "10000", "10000", "10000"], Q: ["01110", "10001", "10001", "10001", "10101", "10010", "01101"], R: ["11110", "10001", "10001", "11110", "10100", "10010", "10001"], S: ["01111", "10000", "10000", "01110", "00001", "00001", "11110"], T: ["11111", "00100", "00100", "00100", "00100", "00100", "00100"], U: ["10001", "10001", "10001", "10001", "10001", "10001", "01110"], V: ["10001", "10001", "10001", "10001", "10001", "01010", "00100"], W: ["10001", "10001", "10001", "10101", "10101", "11011", "10001"], X: ["10001", "10001", "01010", "00100", "01010", "10001", "10001"], Y: ["10001", "10001", "01010", "00100", "00100", "00100", "00100"], Z: ["11111", "00001", "00010", "00100", "01000", "10000", "11111"],
150
+ "0": ["01110", "10001", "10011", "10101", "11001", "10001", "01110"], "1": ["00100", "01100", "00100", "00100", "00100", "00100", "01110"], "2": ["01110", "10001", "00001", "00010", "00100", "01000", "11111"], "3": ["11110", "00001", "00001", "01110", "00001", "00001", "11110"], "4": ["00010", "00110", "01010", "10010", "11111", "00010", "00010"], "5": ["11111", "10000", "10000", "11110", "00001", "00001", "11110"], "6": ["01110", "10000", "10000", "11110", "10001", "10001", "01110"], "7": ["11111", "00001", "00010", "00100", "01000", "01000", "01000"], "8": ["01110", "10001", "10001", "01110", "10001", "10001", "01110"], "9": ["01110", "10001", "10001", "01111", "00001", "00001", "01110"], "-": ["00000", "00000", "00000", "11111", "00000", "00000", "00000"], ".": ["00000", "00000", "00000", "00000", "00000", "01100", "01100"]
151
+ };
152
+ //# sourceMappingURL=RootGeometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootGeometry.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/RootGeometry.ts"],"names":[],"mappings":"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AE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACvI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACvI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,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EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC;IAChjD,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,EAAE,GAAG,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC;CACnvB,CAAC"}