@aura3d/engine 1.0.2 → 1.0.5

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 (296) hide show
  1. package/README.md +331 -16
  2. package/dist/animation/AnimationClipEvents.d.ts +57 -0
  3. package/dist/animation/AnimationClipEvents.d.ts.map +1 -0
  4. package/dist/animation/AnimationClipEvents.js +171 -0
  5. package/dist/animation/AnimationClipEvents.js.map +1 -0
  6. package/dist/animation/AnimationClipRegistry.d.ts +76 -0
  7. package/dist/animation/AnimationClipRegistry.d.ts.map +1 -0
  8. package/dist/animation/AnimationClipRegistry.js +130 -0
  9. package/dist/animation/AnimationClipRegistry.js.map +1 -0
  10. package/dist/animation/AnimationController.d.ts +168 -0
  11. package/dist/animation/AnimationController.d.ts.map +1 -0
  12. package/dist/animation/AnimationController.js +619 -0
  13. package/dist/animation/AnimationController.js.map +1 -0
  14. package/dist/animation/HumanoidRetargeting.d.ts +76 -0
  15. package/dist/animation/HumanoidRetargeting.d.ts.map +1 -0
  16. package/dist/animation/HumanoidRetargeting.js +331 -0
  17. package/dist/animation/HumanoidRetargeting.js.map +1 -0
  18. package/dist/animation/browser-index.d.ts +18 -0
  19. package/dist/animation/browser-index.d.ts.map +1 -1
  20. package/dist/animation/browser-index.js +13 -0
  21. package/dist/animation/browser-index.js.map +1 -1
  22. package/dist/animation/index.d.ts +16 -1
  23. package/dist/animation/index.d.ts.map +1 -1
  24. package/dist/animation/index.js +11 -1
  25. package/dist/animation/index.js.map +1 -1
  26. package/dist/animation/threejs-compatibility/AnimationDiagnostics.d.ts.map +1 -1
  27. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js +3 -5
  28. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js.map +1 -1
  29. package/dist/assets/GLTFAnimationRuntime.js +1 -1
  30. package/dist/assets/GLTFLoader.js +1 -1
  31. package/dist/aura3d-cli/cli.js +194 -8
  32. package/dist/aura3d-cli/cli.js.map +1 -1
  33. package/dist/aura3d-cli/index.d.ts +280 -3
  34. package/dist/aura3d-cli/index.d.ts.map +1 -1
  35. package/dist/aura3d-cli/index.js +886 -4
  36. package/dist/aura3d-cli/index.js.map +1 -1
  37. package/dist/aura3d-cli/pull-bridge.d.ts +95 -0
  38. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -0
  39. package/dist/aura3d-cli/pull-bridge.js +247 -0
  40. package/dist/aura3d-cli/pull-bridge.js.map +1 -0
  41. package/dist/create-aura3d/index.d.ts +1 -1
  42. package/dist/create-aura3d/index.d.ts.map +1 -1
  43. package/dist/create-aura3d/index.js +9 -2
  44. package/dist/create-aura3d/index.js.map +1 -1
  45. package/dist/editor-runtime/ProjectSerializer.d.ts +74 -1
  46. package/dist/editor-runtime/ProjectSerializer.d.ts.map +1 -1
  47. package/dist/editor-runtime/ProjectSerializer.js +123 -6
  48. package/dist/editor-runtime/ProjectSerializer.js.map +1 -1
  49. package/dist/editor-runtime/TimelineModel.d.ts +18 -0
  50. package/dist/editor-runtime/TimelineModel.d.ts.map +1 -1
  51. package/dist/editor-runtime/TimelineModel.js +67 -3
  52. package/dist/editor-runtime/TimelineModel.js.map +1 -1
  53. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts +98 -0
  54. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts.map +1 -0
  55. package/dist/editor-runtime/TimelineRuntimeBridge.js +186 -0
  56. package/dist/editor-runtime/TimelineRuntimeBridge.js.map +1 -0
  57. package/dist/editor-runtime/index.d.ts +3 -1
  58. package/dist/editor-runtime/index.d.ts.map +1 -1
  59. package/dist/editor-runtime/index.js +1 -0
  60. package/dist/editor-runtime/index.js.map +1 -1
  61. package/dist/engine/agent-api/AnimationController.d.ts +607 -0
  62. package/dist/engine/agent-api/AnimationController.d.ts.map +1 -0
  63. package/dist/engine/agent-api/AnimationController.js +2192 -0
  64. package/dist/engine/agent-api/AnimationController.js.map +1 -0
  65. package/dist/engine/agent-api/AssetEvidence.d.ts +88 -0
  66. package/dist/engine/agent-api/AssetEvidence.d.ts.map +1 -0
  67. package/dist/engine/agent-api/AssetEvidence.js +157 -0
  68. package/dist/engine/agent-api/AssetEvidence.js.map +1 -0
  69. package/dist/engine/agent-api/AuraAppHandle.d.ts +55 -0
  70. package/dist/engine/agent-api/AuraAppHandle.d.ts.map +1 -0
  71. package/dist/engine/agent-api/AuraAppHandle.js +15 -0
  72. package/dist/engine/agent-api/AuraAppHandle.js.map +1 -0
  73. package/dist/engine/agent-api/AuraVoiceBridge.d.ts +96 -0
  74. package/dist/engine/agent-api/AuraVoiceBridge.d.ts.map +1 -0
  75. package/dist/engine/agent-api/AuraVoiceBridge.js +370 -0
  76. package/dist/engine/agent-api/AuraVoiceBridge.js.map +1 -0
  77. package/dist/engine/agent-api/CartoonDirector.d.ts +95 -0
  78. package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
  79. package/dist/engine/agent-api/CartoonDirector.js +342 -0
  80. package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
  81. package/dist/engine/agent-api/CartoonPerformance.d.ts +149 -0
  82. package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
  83. package/dist/engine/agent-api/CartoonPerformance.js +317 -0
  84. package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
  85. package/dist/engine/agent-api/CartoonRenderQueue.d.ts +132 -0
  86. package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
  87. package/dist/engine/agent-api/CartoonRenderQueue.js +385 -0
  88. package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
  89. package/dist/engine/agent-api/CharacterAssembly.d.ts +126 -0
  90. package/dist/engine/agent-api/CharacterAssembly.d.ts.map +1 -0
  91. package/dist/engine/agent-api/CharacterAssembly.js +280 -0
  92. package/dist/engine/agent-api/CharacterAssembly.js.map +1 -0
  93. package/dist/engine/agent-api/DialoguePerformance.d.ts +150 -0
  94. package/dist/engine/agent-api/DialoguePerformance.d.ts.map +1 -0
  95. package/dist/engine/agent-api/DialoguePerformance.js +335 -0
  96. package/dist/engine/agent-api/DialoguePerformance.js.map +1 -0
  97. package/dist/engine/agent-api/FrameLoop.d.ts +70 -0
  98. package/dist/engine/agent-api/FrameLoop.d.ts.map +1 -0
  99. package/dist/engine/agent-api/FrameLoop.js +165 -0
  100. package/dist/engine/agent-api/FrameLoop.js.map +1 -0
  101. package/dist/engine/agent-api/GameAssetValidation.d.ts +279 -0
  102. package/dist/engine/agent-api/GameAssetValidation.d.ts.map +1 -0
  103. package/dist/engine/agent-api/GameAssetValidation.js +719 -0
  104. package/dist/engine/agent-api/GameAssetValidation.js.map +1 -0
  105. package/dist/engine/agent-api/GameEvidence.d.ts +148 -0
  106. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -0
  107. package/dist/engine/agent-api/GameEvidence.js +269 -0
  108. package/dist/engine/agent-api/GameEvidence.js.map +1 -0
  109. package/dist/engine/agent-api/GameRuntime.d.ts +931 -0
  110. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -0
  111. package/dist/engine/agent-api/GameRuntime.js +2229 -0
  112. package/dist/engine/agent-api/GameRuntime.js.map +1 -0
  113. package/dist/engine/agent-api/GameSceneBridge.d.ts +54 -0
  114. package/dist/engine/agent-api/GameSceneBridge.d.ts.map +1 -0
  115. package/dist/engine/agent-api/GameSceneBridge.js +110 -0
  116. package/dist/engine/agent-api/GameSceneBridge.js.map +1 -0
  117. package/dist/engine/agent-api/PromptAnimationContract.d.ts +278 -0
  118. package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -0
  119. package/dist/engine/agent-api/PromptAnimationContract.js +238 -0
  120. package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -0
  121. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts +183 -0
  122. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts.map +1 -0
  123. package/dist/engine/agent-api/PromptAnimationEvidence.js +454 -0
  124. package/dist/engine/agent-api/PromptAnimationEvidence.js.map +1 -0
  125. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +100 -0
  126. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -0
  127. package/dist/engine/agent-api/RuntimeNodeHandle.js +36 -0
  128. package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -0
  129. package/dist/engine/agent-api/ShotTimeline.d.ts +179 -0
  130. package/dist/engine/agent-api/ShotTimeline.d.ts.map +1 -0
  131. package/dist/engine/agent-api/ShotTimeline.js +264 -0
  132. package/dist/engine/agent-api/ShotTimeline.js.map +1 -0
  133. package/dist/engine/agent-api/VisemeController.d.ts +89 -0
  134. package/dist/engine/agent-api/VisemeController.d.ts.map +1 -0
  135. package/dist/engine/agent-api/VisemeController.js +207 -0
  136. package/dist/engine/agent-api/VisemeController.js.map +1 -0
  137. package/dist/engine/agent-api/game-kits/fighting.d.ts +123 -0
  138. package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -0
  139. package/dist/engine/agent-api/game-kits/fighting.js +483 -0
  140. package/dist/engine/agent-api/game-kits/fighting.js.map +1 -0
  141. package/dist/engine/agent-api/game-kits/index.d.ts +15 -0
  142. package/dist/engine/agent-api/game-kits/index.d.ts.map +1 -0
  143. package/dist/engine/agent-api/game-kits/index.js +6 -0
  144. package/dist/engine/agent-api/game-kits/index.js.map +1 -0
  145. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +18 -81
  146. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts.map +1 -1
  147. package/dist/engine/agent-api/humanoid-walk-runtime.js +4 -279
  148. package/dist/engine/agent-api/humanoid-walk-runtime.js.map +1 -1
  149. package/dist/engine/agent-api/index.d.ts +490 -4
  150. package/dist/engine/agent-api/index.d.ts.map +1 -1
  151. package/dist/engine/agent-api/index.js +759 -1802
  152. package/dist/engine/agent-api/index.js.map +1 -1
  153. package/dist/engine/agent-api/particle-fountain-runtime.d.ts +5 -80
  154. package/dist/engine/agent-api/particle-fountain-runtime.d.ts.map +1 -1
  155. package/dist/engine/agent-api/particle-fountain-runtime.js +7 -291
  156. package/dist/engine/agent-api/particle-fountain-runtime.js.map +1 -1
  157. package/dist/engine/agent-api/product-viewer-runtime.d.ts +17 -107
  158. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  159. package/dist/engine/agent-api/product-viewer-runtime.js +4 -330
  160. package/dist/engine/agent-api/product-viewer-runtime.js.map +1 -1
  161. package/dist/index.d.ts +1 -0
  162. package/dist/index.js +1 -0
  163. package/dist/physics/CollisionVolumes.d.ts +57 -0
  164. package/dist/physics/CollisionVolumes.d.ts.map +1 -0
  165. package/dist/physics/CollisionVolumes.js +159 -0
  166. package/dist/physics/CollisionVolumes.js.map +1 -0
  167. package/dist/physics/HitboxWorld.d.ts +229 -0
  168. package/dist/physics/HitboxWorld.d.ts.map +1 -0
  169. package/dist/physics/HitboxWorld.js +640 -0
  170. package/dist/physics/HitboxWorld.js.map +1 -0
  171. package/dist/physics/KinematicBody.d.ts +157 -0
  172. package/dist/physics/KinematicBody.d.ts.map +1 -0
  173. package/dist/physics/KinematicBody.js +405 -0
  174. package/dist/physics/KinematicBody.js.map +1 -0
  175. package/dist/physics/KinematicWorld.d.ts +58 -0
  176. package/dist/physics/KinematicWorld.d.ts.map +1 -0
  177. package/dist/physics/KinematicWorld.js +246 -0
  178. package/dist/physics/KinematicWorld.js.map +1 -0
  179. package/dist/physics/index.d.ts +4 -0
  180. package/dist/physics/index.d.ts.map +1 -1
  181. package/dist/physics/index.js +4 -0
  182. package/dist/physics/index.js.map +1 -1
  183. package/dist/rendering/ForwardPass.js +2 -2
  184. package/dist/rendering/ShaderLibrary.js +2 -2
  185. package/dist/rendering/SkinnedLitMaterial.js +3 -3
  186. package/dist/rendering/SkinnedUnlitMaterial.js +3 -3
  187. package/dist/scene/Renderable.js +2 -2
  188. package/dist/scripting/VisualGraph.d.ts +2 -1
  189. package/dist/scripting/VisualGraph.d.ts.map +1 -1
  190. package/dist/scripting/VisualGraph.js +118 -1
  191. package/dist/scripting/VisualGraph.js.map +1 -1
  192. package/dist/scripting/VisualGraphContext.d.ts +123 -0
  193. package/dist/scripting/VisualGraphContext.d.ts.map +1 -0
  194. package/dist/scripting/VisualGraphContext.js +2 -0
  195. package/dist/scripting/VisualGraphContext.js.map +1 -0
  196. package/dist/scripting/VisualGraphExecutor.d.ts +6 -1
  197. package/dist/scripting/VisualGraphExecutor.d.ts.map +1 -1
  198. package/dist/scripting/VisualGraphExecutor.js +364 -7
  199. package/dist/scripting/VisualGraphExecutor.js.map +1 -1
  200. package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
  201. package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
  202. package/dist/scripting/VisualNodeCatalog.js +61 -1
  203. package/dist/scripting/VisualNodeCatalog.js.map +1 -1
  204. package/dist/scripting/index.d.ts +1 -0
  205. package/dist/scripting/index.d.ts.map +1 -1
  206. package/dist/scripting/index.js.map +1 -1
  207. package/package.json +193 -121
  208. package/templates/product-viewer/src/main.ts +1 -0
  209. package/dist/three-compat/ThreeApiInventory.d.ts +0 -18
  210. package/dist/three-compat/ThreeApiInventory.d.ts.map +0 -1
  211. package/dist/three-compat/ThreeApiInventory.js +0 -99
  212. package/dist/three-compat/ThreeApiInventory.js.map +0 -1
  213. package/dist/three-compat/ThreeCompatibilityMatrix.d.ts +0 -30
  214. package/dist/three-compat/ThreeCompatibilityMatrix.d.ts.map +0 -1
  215. package/dist/three-compat/ThreeCompatibilityMatrix.js +0 -69
  216. package/dist/three-compat/ThreeCompatibilityMatrix.js.map +0 -1
  217. package/dist/three-compat/animation/index.d.ts +0 -3
  218. package/dist/three-compat/animation/index.d.ts.map +0 -1
  219. package/dist/three-compat/animation/index.js +0 -2
  220. package/dist/three-compat/animation/index.js.map +0 -1
  221. package/dist/three-compat/cameras/index.d.ts +0 -24
  222. package/dist/three-compat/cameras/index.d.ts.map +0 -1
  223. package/dist/three-compat/cameras/index.js +0 -44
  224. package/dist/three-compat/cameras/index.js.map +0 -1
  225. package/dist/three-compat/controls/index.d.ts +0 -3
  226. package/dist/three-compat/controls/index.d.ts.map +0 -1
  227. package/dist/three-compat/controls/index.js +0 -2
  228. package/dist/three-compat/controls/index.js.map +0 -1
  229. package/dist/three-compat/core/Object3DCompat.d.ts +0 -62
  230. package/dist/three-compat/core/Object3DCompat.d.ts.map +0 -1
  231. package/dist/three-compat/core/Object3DCompat.js +0 -112
  232. package/dist/three-compat/core/Object3DCompat.js.map +0 -1
  233. package/dist/three-compat/core/RaycasterCompat.d.ts +0 -18
  234. package/dist/three-compat/core/RaycasterCompat.d.ts.map +0 -1
  235. package/dist/three-compat/core/RaycasterCompat.js +0 -28
  236. package/dist/three-compat/core/RaycasterCompat.js.map +0 -1
  237. package/dist/three-compat/core/SceneCompat.d.ts +0 -8
  238. package/dist/three-compat/core/SceneCompat.d.ts.map +0 -1
  239. package/dist/three-compat/core/SceneCompat.js +0 -8
  240. package/dist/three-compat/core/SceneCompat.js.map +0 -1
  241. package/dist/three-compat/geometries/index.d.ts +0 -67
  242. package/dist/three-compat/geometries/index.d.ts.map +0 -1
  243. package/dist/three-compat/geometries/index.js +0 -114
  244. package/dist/three-compat/geometries/index.js.map +0 -1
  245. package/dist/three-compat/helpers/index.d.ts +0 -40
  246. package/dist/three-compat/helpers/index.d.ts.map +0 -1
  247. package/dist/three-compat/helpers/index.js +0 -129
  248. package/dist/three-compat/helpers/index.js.map +0 -1
  249. package/dist/three-compat/index.d.ts +0 -32
  250. package/dist/three-compat/index.d.ts.map +0 -1
  251. package/dist/three-compat/index.js +0 -22
  252. package/dist/three-compat/index.js.map +0 -1
  253. package/dist/three-compat/lights/index.d.ts +0 -35
  254. package/dist/three-compat/lights/index.d.ts.map +0 -1
  255. package/dist/three-compat/lights/index.js +0 -39
  256. package/dist/three-compat/lights/index.js.map +0 -1
  257. package/dist/three-compat/loaders/index.d.ts +0 -54
  258. package/dist/three-compat/loaders/index.d.ts.map +0 -1
  259. package/dist/three-compat/loaders/index.js +0 -79
  260. package/dist/three-compat/loaders/index.js.map +0 -1
  261. package/dist/three-compat/materials/index.d.ts +0 -70
  262. package/dist/three-compat/materials/index.d.ts.map +0 -1
  263. package/dist/three-compat/materials/index.js +0 -85
  264. package/dist/three-compat/materials/index.js.map +0 -1
  265. package/dist/three-compat/math/index.d.ts +0 -34
  266. package/dist/three-compat/math/index.d.ts.map +0 -1
  267. package/dist/three-compat/math/index.js +0 -90
  268. package/dist/three-compat/math/index.js.map +0 -1
  269. package/dist/three-compat/migration/CompatibilityWarnings.d.ts +0 -6
  270. package/dist/three-compat/migration/CompatibilityWarnings.d.ts.map +0 -1
  271. package/dist/three-compat/migration/CompatibilityWarnings.js +0 -8
  272. package/dist/three-compat/migration/CompatibilityWarnings.js.map +0 -1
  273. package/dist/three-compat/migration/ImportMap.d.ts +0 -2
  274. package/dist/three-compat/migration/ImportMap.d.ts.map +0 -1
  275. package/dist/three-compat/migration/ImportMap.js +0 -10
  276. package/dist/three-compat/migration/ImportMap.js.map +0 -1
  277. package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts +0 -8
  278. package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts.map +0 -1
  279. package/dist/three-compat/migration/ThreeToA3DAdapter.js +0 -20
  280. package/dist/three-compat/migration/ThreeToA3DAdapter.js.map +0 -1
  281. package/dist/three-compat/postprocessing/index.d.ts +0 -2
  282. package/dist/three-compat/postprocessing/index.d.ts.map +0 -1
  283. package/dist/three-compat/postprocessing/index.js +0 -2
  284. package/dist/three-compat/postprocessing/index.js.map +0 -1
  285. package/dist/three-compat/render-targets/index.d.ts +0 -17
  286. package/dist/three-compat/render-targets/index.d.ts.map +0 -1
  287. package/dist/three-compat/render-targets/index.js +0 -29
  288. package/dist/three-compat/render-targets/index.js.map +0 -1
  289. package/dist/three-compat/shaders/index.d.ts +0 -3
  290. package/dist/three-compat/shaders/index.d.ts.map +0 -1
  291. package/dist/three-compat/shaders/index.js +0 -3
  292. package/dist/three-compat/shaders/index.js.map +0 -1
  293. package/dist/three-compat/textures/index.d.ts +0 -19
  294. package/dist/three-compat/textures/index.d.ts.map +0 -1
  295. package/dist/three-compat/textures/index.js +0 -24
  296. package/dist/three-compat/textures/index.js.map +0 -1
@@ -1,338 +1,12 @@
1
- import * as THREE from "three";
2
- import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
3
- import { RoomEnvironment } from "three/examples/jsm/environments/RoomEnvironment.js";
4
- const auraAssetRefBrand = Symbol("AuraAssetRef");
5
- export function defineAuraAssets(definitions) {
6
- const refs = {};
7
- for (const [id, definition] of Object.entries(definitions)) {
8
- refs[id] = {
9
- ...definition,
10
- kind: "aura-asset-ref",
11
- id,
12
- [auraAssetRefBrand]: {
13
- type: definition.type,
14
- id
15
- }
16
- };
17
- }
18
- return refs;
19
- }
1
+ import { product as rootProduct, sceneKits as rootSceneKits } from "./index.js";
2
+ export { createAuraApp, defineAuraAssets } from "./index.js";
3
+ export const product = rootProduct;
20
4
  export const sceneKits = {
21
5
  productViewer(asset, options = {}) {
22
6
  return productViewer(asset, options);
23
7
  }
24
8
  };
25
- export const product = {
26
- visualQA(nodes) {
27
- const hasModel = nodes.some((node) => node.kind === "model");
28
- const hasStage = nodes.some((node) => String(node.name ?? "").includes("studio plinth"));
29
- const problems = [
30
- ...(hasModel ? [] : ["missing typed product model node"]),
31
- ...(hasStage ? [] : ["missing studio plinth node"])
32
- ];
33
- return {
34
- score: problems.length === 0 ? 5 : 2,
35
- problems
36
- };
37
- }
38
- };
39
9
  export function productViewer(asset, options = {}) {
40
- return createProductViewerKit(asset, options);
41
- }
42
- export function createAuraApp(target, options) {
43
- const canvas = resolveCanvas(target);
44
- const scene = options.scene;
45
- const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: false, preserveDrawingBuffer: true });
46
- const pixelRatio = Math.min(2, Math.max(1, options.pixelRatio ?? window.devicePixelRatio ?? 1));
47
- renderer.setPixelRatio(pixelRatio);
48
- renderer.outputColorSpace = THREE.SRGBColorSpace;
49
- renderer.toneMapping = THREE.ACESFilmicToneMapping;
50
- renderer.toneMappingExposure = 0.95;
51
- renderer.setClearColor("#071017", 1);
52
- const threeScene = new THREE.Scene();
53
- threeScene.background = new THREE.Color("#071017");
54
- const pmrem = new THREE.PMREMGenerator(renderer);
55
- const environment = pmrem.fromScene(new RoomEnvironment(), 0.04).texture;
56
- threeScene.environment = environment;
57
- const camera = new THREE.PerspectiveCamera(42, 1, 0.05, 100);
58
- camera.position.set(1.55, 1.35, 3.4);
59
- camera.lookAt(0, 0.62, -0.25);
60
- const ambient = new THREE.AmbientLight("#e8f1ff", 0.46);
61
- threeScene.add(ambient);
62
- const key = new THREE.DirectionalLight("#ffffff", 1.22);
63
- key.position.set(-2.4, 3.2, 2.2);
64
- threeScene.add(key);
65
- const fill = new THREE.DirectionalLight("#dbeafe", 0.62);
66
- fill.position.set(2.2, 1.8, 1.7);
67
- threeScene.add(fill);
68
- const rim = new THREE.DirectionalLight("#ffd9aa", 0.46);
69
- rim.position.set(2.6, 1.4, -1.4);
70
- threeScene.add(rim);
71
- buildProductStage(threeScene);
72
- const readoutElement = createProductReadout();
73
- let disposed = false;
74
- let model;
75
- let modelLoaded = false;
76
- let routePublished = false;
77
- let lastFrameTime = performance.now();
78
- const diagnostics = {
79
- backend: "three",
80
- fps: 60,
81
- drawCalls: 1,
82
- renderSize: [canvas.width, canvas.height],
83
- warnings: [],
84
- errors: [],
85
- renderer: {
86
- kind: "aura-renderer-diagnostics",
87
- backend: "three-lean-product-viewer",
88
- runtimeStatus: "loading",
89
- postprocess: {
90
- enabled: false,
91
- actualPasses: []
92
- },
93
- assets: {
94
- modelLoaded: false,
95
- assetId: scene.asset.id,
96
- assetUrl: scene.asset.url
97
- }
98
- }
99
- };
100
- const resize = () => {
101
- const parent = canvas.parentElement;
102
- const width = Math.max(1, Math.round(parent?.clientWidth || window.innerWidth || 1440));
103
- const height = Math.max(1, Math.round(parent?.clientHeight || window.innerHeight || 960));
104
- renderer.setSize(width, height, false);
105
- canvas.style.width = "100%";
106
- canvas.style.height = "100%";
107
- camera.aspect = width / Math.max(1, height);
108
- camera.updateProjectionMatrix();
109
- diagnostics.renderSize = [canvas.width, canvas.height];
110
- };
111
- resize();
112
- if (options.resize !== false)
113
- window.addEventListener("resize", resize);
114
- void loadProductModel(scene.asset)
115
- .then((loadedModel) => {
116
- if (disposed)
117
- return;
118
- model = loadedModel;
119
- threeScene.add(model);
120
- modelLoaded = true;
121
- diagnostics.renderer.runtimeStatus = "ready";
122
- diagnostics.renderer.assets.modelLoaded = true;
123
- })
124
- .catch((error) => {
125
- if (disposed)
126
- return;
127
- diagnostics.renderer.runtimeStatus = "error";
128
- diagnostics.errors = [productLoadErrorMessage(scene.asset, error)];
129
- markRouteError(scene, diagnostics);
130
- });
131
- const render = (time = performance.now()) => {
132
- if (disposed)
133
- return;
134
- const delta = Math.max(1, time - lastFrameTime);
135
- lastFrameTime = time;
136
- diagnostics.fps = Math.round(1000 / delta);
137
- if (model)
138
- model.rotation.y += 0.004;
139
- renderer.render(threeScene, camera);
140
- diagnostics.drawCalls = Math.max(1, renderer.info.render.calls);
141
- diagnostics.renderSize = [canvas.width, canvas.height];
142
- if (modelLoaded && !routePublished) {
143
- routePublished = true;
144
- markRouteReady(scene, diagnostics);
145
- }
146
- if (options.autoStart !== false)
147
- requestAnimationFrame(render);
148
- };
149
- render();
150
- return {
151
- canvas,
152
- scene,
153
- backend: "three",
154
- diagnostics: () => diagnostics,
155
- screenshot: () => ({
156
- mimeType: "image/png",
157
- dataUrl: canvas.toDataURL("image/png"),
158
- width: canvas.width,
159
- height: canvas.height
160
- }),
161
- dispose: () => {
162
- disposed = true;
163
- if (options.resize !== false)
164
- window.removeEventListener("resize", resize);
165
- readoutElement?.remove();
166
- disposeThreeScene(threeScene);
167
- environment.dispose();
168
- pmrem.dispose();
169
- renderer.dispose();
170
- }
171
- };
172
- }
173
- function createProductViewerKit(asset, options) {
174
- const scene = normalizeProductViewerScene(asset, options);
175
- const nodes = [
176
- { kind: "primitive", name: "studio plinth" },
177
- { kind: "light", name: "off camera left product softbox" },
178
- { kind: "light", name: "off camera right product fill" },
179
- { kind: "model", name: "typed sneaker asset", assetId: scene.asset.id, assetUrl: scene.asset.url },
180
- { kind: "label", name: "typed sneaker asset label", text: "typed sneaker asset | orbit | studio" }
181
- ];
182
- const evidence = [
183
- "typed GLB asset loaded through GLTFLoader",
184
- "normalized authored sneaker model scale",
185
- "dark studio plinth with off-camera softbox lighting",
186
- "lean product-viewer subpath avoids unrelated humanoid and procedural scene-kit imports"
187
- ];
188
- return {
189
- kind: "aura-scene-kit",
190
- id: "productViewer",
191
- nodes,
192
- evidence,
193
- acceptanceEvidence: evidence,
194
- diagnostics: {
195
- kind: "aura-scene-kit-diagnostics",
196
- id: "productViewer",
197
- structuralScore: 5,
198
- problems: []
199
- },
200
- scene: () => scene,
201
- toAppOptions: () => ({ scene, diagnostics: false }),
202
- customize: (next) => createProductViewerKit(asset, { ...options, ...next })
203
- };
204
- }
205
- function normalizeProductViewerScene(asset, options) {
206
- if (asset.type !== "model" || !["glb", "gltf"].includes(asset.format)) {
207
- throw new Error(`Aura3D product viewer requires a typed GLB/glTF model asset. Received ${asset.type}:${asset.format}.`);
208
- }
209
- return {
210
- kind: "aura3d-product-viewer-scene",
211
- asset,
212
- options: {
213
- captureFrame: options.captureFrame ?? 0.32
214
- }
215
- };
216
- }
217
- function resolveCanvas(target) {
218
- if (target instanceof HTMLCanvasElement)
219
- return target;
220
- const host = typeof target === "string" ? document.querySelector(target) : target;
221
- const parent = host ?? document.body;
222
- if (parent instanceof HTMLCanvasElement)
223
- return parent;
224
- let canvas = parent.querySelector("canvas[data-aura3d-lean-product-viewer]");
225
- if (!canvas) {
226
- canvas = document.createElement("canvas");
227
- canvas.dataset.aura3dLeanProductViewer = "true";
228
- canvas.style.display = "block";
229
- canvas.style.width = "100%";
230
- canvas.style.height = "100%";
231
- parent.appendChild(canvas);
232
- }
233
- return canvas;
234
- }
235
- function buildProductStage(scene) {
236
- scene.add(productBox("studio plinth", "#d8dde6", [0, 0.04, -0.25], [2.4, 0.08, 1.8], false));
237
- }
238
- function productBox(name, color, position, scale, emissive) {
239
- const material = emissive
240
- ? new THREE.MeshBasicMaterial({ color, transparent: true, opacity: 0.68 })
241
- : new THREE.MeshStandardMaterial({ color, roughness: 0.62, metalness: 0.04 });
242
- const mesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), material);
243
- mesh.name = name;
244
- mesh.position.set(...position);
245
- mesh.scale.set(...scale);
246
- return mesh;
247
- }
248
- async function loadProductModel(asset) {
249
- const loader = new GLTFLoader();
250
- const url = new URL(asset.url, document.baseURI).href;
251
- const gltf = await loader.loadAsync(url);
252
- const root = gltf.scene ?? gltf.scenes?.[0];
253
- if (!root)
254
- throw new Error("GLB loaded but did not contain a scene");
255
- root.traverse((child) => {
256
- const mesh = child;
257
- if (!mesh.isMesh)
258
- return;
259
- mesh.castShadow = true;
260
- mesh.receiveShadow = true;
261
- const materials = Array.isArray(mesh.material) ? mesh.material : mesh.material ? [mesh.material] : [];
262
- for (const material of materials) {
263
- if ("roughness" in material && typeof material.roughness === "number")
264
- material.roughness = Math.min(material.roughness, 0.82);
265
- if ("metalness" in material && typeof material.metalness === "number")
266
- material.metalness = Math.max(material.metalness, 0.02);
267
- material.needsUpdate = true;
268
- }
269
- });
270
- normalizeProductModel(root);
271
- return root;
272
- }
273
- function normalizeProductModel(model) {
274
- const bounds = new THREE.Box3().setFromObject(model);
275
- const size = bounds.getSize(new THREE.Vector3());
276
- const center = bounds.getCenter(new THREE.Vector3());
277
- const scale = 1.55 / Math.max(size.x, size.y, size.z, 0.001);
278
- model.scale.setScalar(scale);
279
- model.position.sub(center.multiplyScalar(scale));
280
- model.position.y += 0.1;
281
- model.position.z -= 0.25;
282
- }
283
- function createProductReadout() {
284
- if (typeof document === "undefined")
285
- return undefined;
286
- const label = document.createElement("div");
287
- label.className = "label prompt-readout";
288
- label.textContent = "typed sneaker asset | orbit | studio";
289
- document.body.appendChild(label);
290
- return label;
291
- }
292
- function markRouteReady(scene, diagnostics) {
293
- const readout = {
294
- ready: true,
295
- status: "pass",
296
- scene: scene.kind,
297
- promptFamily: "product-viewer",
298
- diagnostics,
299
- evidence: [
300
- "lean product-viewer runtime rendered a Three.js scene",
301
- "typed GLB asset loaded and visible before readiness",
302
- "readiness is pixel-backed, not a structural QA counter"
303
- ]
304
- };
305
- window.__AURA3D_ROUTE_READY__ = readout;
306
- window.__ENGINE_READY__ = () => true;
307
- window.__ENGINE_READOUT__ = () => readout;
308
- }
309
- function markRouteError(scene, diagnostics) {
310
- const readout = {
311
- ready: false,
312
- status: "error",
313
- scene: scene.kind,
314
- promptFamily: "product-viewer",
315
- diagnostics,
316
- evidence: ["typed GLB asset failed to load before readiness"]
317
- };
318
- window.__AURA3D_ROUTE_READY__ = readout;
319
- window.__ENGINE_READY__ = () => false;
320
- window.__ENGINE_READOUT__ = () => readout;
321
- }
322
- function productLoadErrorMessage(asset, error) {
323
- const reason = error instanceof Error ? error.message : String(error);
324
- return `Aura3D product-viewer failed to load typed model "${asset.id}" from "${asset.url}": ${reason}`;
325
- }
326
- function disposeThreeScene(scene) {
327
- scene.traverse((object) => {
328
- const mesh = object;
329
- if (mesh.geometry)
330
- mesh.geometry.dispose();
331
- const material = mesh.material;
332
- if (Array.isArray(material))
333
- material.forEach((entry) => entry.dispose());
334
- else if (material)
335
- material.dispose();
336
- });
10
+ return rootSceneKits.productViewer(asset, options);
337
11
  }
338
12
  //# sourceMappingURL=product-viewer-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-viewer-runtime.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/product-viewer-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product-viewer-runtime.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/product-viewer-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AAahF,OAAO,EACL,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAoBpB,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC;AAEnC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,aAAa,CAAC,KAA4B,EAAE,UAAgC,EAAE;QAC5E,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACO,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,KAA4B,EAAE,UAAgC,EAAE;IAC5F,OAAO,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./animation/index.js";
2
2
  export * from "./apps/index.js";
3
+ export * from "./asset-index/index.js";
3
4
  export * from "./assets/index.js";
4
5
  export * from "./audio/index.js";
5
6
  export * from "./aura3d-cli/index.js";
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./animation/index.js";
2
2
  export * from "./apps/index.js";
3
+ export * from "./asset-index/index.js";
3
4
  export * from "./assets/index.js";
4
5
  export * from "./audio/index.js";
5
6
  export * from "./aura3d-cli/index.js";
@@ -0,0 +1,57 @@
1
+ import { type Bounds, type Vec3 } from "./Shape.js";
2
+ export type CombatFacing = -1 | 1;
3
+ export type CollisionOwnerId = string | number;
4
+ export type CollisionVolumeKind = "hitbox" | "hurtbox" | "pushbox" | "guardbox";
5
+ export type CollisionVolumeDescriptor = {
6
+ readonly id?: string;
7
+ readonly ownerId?: CollisionOwnerId;
8
+ readonly offset?: Vec3;
9
+ readonly halfExtents: Vec3;
10
+ readonly enabled?: boolean;
11
+ readonly tags?: readonly string[];
12
+ readonly metadata?: Readonly<Record<string, unknown>>;
13
+ };
14
+ export type CollisionVolume = {
15
+ readonly id: string;
16
+ readonly kind: CollisionVolumeKind;
17
+ readonly offset: Vec3;
18
+ readonly halfExtents: Vec3;
19
+ readonly enabled: boolean;
20
+ readonly tags: readonly string[];
21
+ readonly ownerId?: CollisionOwnerId;
22
+ readonly metadata?: Readonly<Record<string, unknown>>;
23
+ };
24
+ export type ResolvedCollisionVolume = CollisionVolume & {
25
+ readonly center: Vec3;
26
+ readonly facing: CombatFacing;
27
+ readonly bounds: Bounds;
28
+ };
29
+ export type CollisionPenetration = {
30
+ readonly normal: Vec3;
31
+ readonly depth: number;
32
+ readonly axis: 0 | 1 | 2;
33
+ readonly overlap: Vec3;
34
+ };
35
+ export declare function collisionVolume(kind: CollisionVolumeKind, descriptor: CollisionVolumeDescriptor): CollisionVolume;
36
+ export declare function hitbox(descriptor: CollisionVolumeDescriptor): CollisionVolume;
37
+ export declare function hurtbox(descriptor: CollisionVolumeDescriptor): CollisionVolume;
38
+ export declare function pushbox(descriptor: CollisionVolumeDescriptor): CollisionVolume;
39
+ export declare function guardbox(descriptor: CollisionVolumeDescriptor): CollisionVolume;
40
+ export declare const createHitbox: typeof hitbox;
41
+ export declare const createHurtbox: typeof hurtbox;
42
+ export declare const createPushbox: typeof pushbox;
43
+ export declare const createGuardbox: typeof guardbox;
44
+ export declare const createGuardBox: typeof guardbox;
45
+ export declare function cloneCollisionVolume(volume: CollisionVolume): CollisionVolume;
46
+ export declare function withVolumeOwner(volume: CollisionVolume, ownerId: CollisionOwnerId): CollisionVolume;
47
+ export declare function resolveCollisionVolume(volume: CollisionVolume, ownerPosition: Vec3, facing?: CombatFacing): ResolvedCollisionVolume;
48
+ export declare function aabbFromCenter(center: Vec3, halfExtents: Vec3): Bounds;
49
+ export declare function boundsCenter(bounds: Bounds): Vec3;
50
+ export declare function boundsHalfExtents(bounds: Bounds): Vec3;
51
+ export declare function overlapsAabb(a: Bounds, b: Bounds): boolean;
52
+ export declare function overlapsVolume(a: ResolvedCollisionVolume, b: ResolvedCollisionVolume): boolean;
53
+ export declare function aabbPenetration(a: Bounds, b: Bounds): CollisionPenetration | null;
54
+ export declare function volumePairKey(a: CollisionVolume | ResolvedCollisionVolume, b: CollisionVolume | ResolvedCollisionVolume): string;
55
+ export declare function normalizeFacing(value: number): CombatFacing;
56
+ export declare function validateBounds(bounds: Bounds, name: string): void;
57
+ //# sourceMappingURL=CollisionVolumes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollisionVolumes.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/CollisionVolumes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ import { cloneVec3, validateFiniteVec3 } from "./Shape.js";
2
+ export function collisionVolume(kind, descriptor) {
3
+ validateHalfExtents(descriptor.halfExtents, `${kind} halfExtents`);
4
+ const volume = {
5
+ id: descriptor.id ?? kind,
6
+ kind,
7
+ offset: cloneVec3(descriptor.offset ?? [0, 0, 0]),
8
+ halfExtents: cloneVec3(descriptor.halfExtents),
9
+ enabled: descriptor.enabled ?? true,
10
+ tags: [...(descriptor.tags ?? [])],
11
+ ...(descriptor.ownerId === undefined ? {} : { ownerId: descriptor.ownerId }),
12
+ ...(descriptor.metadata === undefined ? {} : { metadata: { ...descriptor.metadata } })
13
+ };
14
+ validateFiniteVec3(volume.offset, `${kind} offset`);
15
+ return volume;
16
+ }
17
+ export function hitbox(descriptor) {
18
+ return collisionVolume("hitbox", descriptor);
19
+ }
20
+ export function hurtbox(descriptor) {
21
+ return collisionVolume("hurtbox", descriptor);
22
+ }
23
+ export function pushbox(descriptor) {
24
+ return collisionVolume("pushbox", descriptor);
25
+ }
26
+ export function guardbox(descriptor) {
27
+ return collisionVolume("guardbox", descriptor);
28
+ }
29
+ export const createHitbox = hitbox;
30
+ export const createHurtbox = hurtbox;
31
+ export const createPushbox = pushbox;
32
+ export const createGuardbox = guardbox;
33
+ export const createGuardBox = guardbox;
34
+ export function cloneCollisionVolume(volume) {
35
+ return {
36
+ id: volume.id,
37
+ kind: volume.kind,
38
+ offset: cloneVec3(volume.offset),
39
+ halfExtents: cloneVec3(volume.halfExtents),
40
+ enabled: volume.enabled,
41
+ tags: [...volume.tags],
42
+ ...(volume.ownerId === undefined ? {} : { ownerId: volume.ownerId }),
43
+ ...(volume.metadata === undefined ? {} : { metadata: { ...volume.metadata } })
44
+ };
45
+ }
46
+ export function withVolumeOwner(volume, ownerId) {
47
+ return {
48
+ ...cloneCollisionVolume(volume),
49
+ ownerId
50
+ };
51
+ }
52
+ export function resolveCollisionVolume(volume, ownerPosition, facing = 1) {
53
+ validateFiniteVec3(ownerPosition, "volume owner position");
54
+ const resolvedFacing = normalizeFacing(facing);
55
+ const center = [
56
+ ownerPosition[0] + volume.offset[0] * resolvedFacing,
57
+ ownerPosition[1] + volume.offset[1],
58
+ ownerPosition[2] + volume.offset[2]
59
+ ];
60
+ return {
61
+ ...cloneCollisionVolume(volume),
62
+ center,
63
+ facing: resolvedFacing,
64
+ bounds: aabbFromCenter(center, volume.halfExtents)
65
+ };
66
+ }
67
+ export function aabbFromCenter(center, halfExtents) {
68
+ validateFiniteVec3(center, "aabb center");
69
+ validateHalfExtents(halfExtents, "aabb halfExtents");
70
+ return {
71
+ min: [center[0] - halfExtents[0], center[1] - halfExtents[1], center[2] - halfExtents[2]],
72
+ max: [center[0] + halfExtents[0], center[1] + halfExtents[1], center[2] + halfExtents[2]]
73
+ };
74
+ }
75
+ export function boundsCenter(bounds) {
76
+ validateBounds(bounds, "bounds");
77
+ return [
78
+ (bounds.min[0] + bounds.max[0]) * 0.5,
79
+ (bounds.min[1] + bounds.max[1]) * 0.5,
80
+ (bounds.min[2] + bounds.max[2]) * 0.5
81
+ ];
82
+ }
83
+ export function boundsHalfExtents(bounds) {
84
+ validateBounds(bounds, "bounds");
85
+ return [
86
+ (bounds.max[0] - bounds.min[0]) * 0.5,
87
+ (bounds.max[1] - bounds.min[1]) * 0.5,
88
+ (bounds.max[2] - bounds.min[2]) * 0.5
89
+ ];
90
+ }
91
+ export function overlapsAabb(a, b) {
92
+ validateBounds(a, "a bounds");
93
+ validateBounds(b, "b bounds");
94
+ return (a.min[0] < b.max[0] &&
95
+ a.max[0] > b.min[0] &&
96
+ a.min[1] < b.max[1] &&
97
+ a.max[1] > b.min[1] &&
98
+ a.min[2] < b.max[2] &&
99
+ a.max[2] > b.min[2]);
100
+ }
101
+ export function overlapsVolume(a, b) {
102
+ if (!a.enabled || !b.enabled) {
103
+ return false;
104
+ }
105
+ return overlapsAabb(a.bounds, b.bounds);
106
+ }
107
+ export function aabbPenetration(a, b) {
108
+ if (!overlapsAabb(a, b)) {
109
+ return null;
110
+ }
111
+ const overlap = [
112
+ Math.min(a.max[0] - b.min[0], b.max[0] - a.min[0]),
113
+ Math.min(a.max[1] - b.min[1], b.max[1] - a.min[1]),
114
+ Math.min(a.max[2] - b.min[2], b.max[2] - a.min[2])
115
+ ];
116
+ let axis = 0;
117
+ if (overlap[1] < overlap[axis]) {
118
+ axis = 1;
119
+ }
120
+ if (overlap[2] < overlap[axis]) {
121
+ axis = 2;
122
+ }
123
+ const centerA = boundsCenter(a);
124
+ const centerB = boundsCenter(b);
125
+ const normal = [0, 0, 0];
126
+ normal[axis] = centerA[axis] <= centerB[axis] ? -1 : 1;
127
+ return {
128
+ normal,
129
+ depth: overlap[axis],
130
+ axis,
131
+ overlap
132
+ };
133
+ }
134
+ export function volumePairKey(a, b) {
135
+ const keyA = volumeKey(a);
136
+ const keyB = volumeKey(b);
137
+ return keyA < keyB ? `${keyA}:${keyB}` : `${keyB}:${keyA}`;
138
+ }
139
+ export function normalizeFacing(value) {
140
+ return value < 0 ? -1 : 1;
141
+ }
142
+ export function validateBounds(bounds, name) {
143
+ validateFiniteVec3(bounds.min, `${name} min`);
144
+ validateFiniteVec3(bounds.max, `${name} max`);
145
+ if (bounds.min[0] > bounds.max[0] || bounds.min[1] > bounds.max[1] || bounds.min[2] > bounds.max[2]) {
146
+ throw new Error(`${name} min values must be less than or equal to max values.`);
147
+ }
148
+ }
149
+ function validateHalfExtents(value, name) {
150
+ validateFiniteVec3(value, name);
151
+ if (value[0] <= 0 || value[1] <= 0 || value[2] <= 0) {
152
+ throw new Error(`${name} must contain finite positive values.`);
153
+ }
154
+ }
155
+ function volumeKey(volume) {
156
+ const owner = volume.ownerId === undefined ? "none" : String(volume.ownerId);
157
+ return `${owner}/${volume.kind}/${volume.id}`;
158
+ }
159
+ //# sourceMappingURL=CollisionVolumes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollisionVolumes.js","sourceRoot":"","sources":["../../../../packages/physics/src/CollisionVolumes.ts"],"names":[],"mappings":"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"}