@aura3d/engine 4.6.1 → 4.7.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 (514) hide show
  1. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.d.ts +12 -0
  2. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -1
  3. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.js +26 -1
  4. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -1
  5. package/dist/assets/vfx/LICENSE.md +1 -0
  6. package/dist/assets/vfx/aura-vfx-1k.png +0 -0
  7. package/dist/assets/vfx/aura-vfx-2k.png +0 -0
  8. package/dist/aura3d-cli/admission/cubeLut.d.ts +18 -0
  9. package/dist/aura3d-cli/admission/cubeLut.d.ts.map +1 -0
  10. package/dist/aura3d-cli/admission/cubeLut.js +53 -0
  11. package/dist/aura3d-cli/admission/cubeLut.js.map +1 -0
  12. package/dist/aura3d-cli/asset-core-types.d.ts +7 -4
  13. package/dist/aura3d-cli/asset-core-types.d.ts.map +1 -1
  14. package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
  15. package/dist/aura3d-cli/cli-help.js +7 -4
  16. package/dist/aura3d-cli/cli-help.js.map +1 -1
  17. package/dist/aura3d-cli/cli-options.d.ts +1 -1
  18. package/dist/aura3d-cli/cli-options.d.ts.map +1 -1
  19. package/dist/aura3d-cli/cli-options.js +2 -2
  20. package/dist/aura3d-cli/cli-options.js.map +1 -1
  21. package/dist/aura3d-cli/cli.js +3 -2
  22. package/dist/aura3d-cli/cli.js.map +1 -1
  23. package/dist/aura3d-cli/commands/assets/certifyCategories.d.ts +26 -0
  24. package/dist/aura3d-cli/commands/assets/certifyCategories.d.ts.map +1 -0
  25. package/dist/aura3d-cli/commands/assets/certifyCategories.js +31 -0
  26. package/dist/aura3d-cli/commands/assets/certifyCategories.js.map +1 -0
  27. package/dist/aura3d-cli/commands/assets/optimize.d.ts +66 -0
  28. package/dist/aura3d-cli/commands/assets/optimize.d.ts.map +1 -1
  29. package/dist/aura3d-cli/commands/assets/optimize.js +270 -1
  30. package/dist/aura3d-cli/commands/assets/optimize.js.map +1 -1
  31. package/dist/aura3d-cli/commands/assets/optimizeVerb.d.ts.map +1 -1
  32. package/dist/aura3d-cli/commands/assets/optimizeVerb.js +26 -1
  33. package/dist/aura3d-cli/commands/assets/optimizeVerb.js.map +1 -1
  34. package/dist/aura3d-cli/commands/evidence/judge.d.ts +50 -1
  35. package/dist/aura3d-cli/commands/evidence/judge.d.ts.map +1 -1
  36. package/dist/aura3d-cli/commands/evidence/judge.js +154 -6
  37. package/dist/aura3d-cli/commands/evidence/judge.js.map +1 -1
  38. package/dist/aura3d-cli/commands/prd05/index.js +1 -1
  39. package/dist/aura3d-cli/commands/prd05/index.js.map +1 -1
  40. package/dist/aura3d-cli/index.d.ts.map +1 -1
  41. package/dist/aura3d-cli/index.js +25 -9
  42. package/dist/aura3d-cli/index.js.map +1 -1
  43. package/dist/aura3d-cli/look/judge.d.ts +53 -5
  44. package/dist/aura3d-cli/look/judge.d.ts.map +1 -1
  45. package/dist/aura3d-cli/look/judge.js +226 -50
  46. package/dist/aura3d-cli/look/judge.js.map +1 -1
  47. package/dist/create-aura3d/index.js +1 -1
  48. package/dist/engine/agent-api/RootRuntimeSupport.d.ts +7 -0
  49. package/dist/engine/agent-api/RootRuntimeSupport.d.ts.map +1 -1
  50. package/dist/engine/agent-api/RootRuntimeSupport.js +7 -0
  51. package/dist/engine/agent-api/RootRuntimeSupport.js.map +1 -1
  52. package/dist/engine/agent-api/app/actorAnimationHandle.d.ts +2 -0
  53. package/dist/engine/agent-api/app/actorAnimationHandle.d.ts.map +1 -1
  54. package/dist/engine/agent-api/app/actorAnimationHandle.js +149 -2
  55. package/dist/engine/agent-api/app/actorAnimationHandle.js.map +1 -1
  56. package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
  57. package/dist/engine/agent-api/app/createAuraApp.js +13 -1
  58. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  59. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  60. package/dist/engine/agent-api/app/frameLoop.js +4 -2
  61. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  62. package/dist/engine/agent-api/camera/layers/cinematicBars.d.ts +2 -0
  63. package/dist/engine/agent-api/camera/layers/cinematicBars.d.ts.map +1 -1
  64. package/dist/engine/agent-api/camera/layers/cinematicBars.js +4 -0
  65. package/dist/engine/agent-api/camera/layers/cinematicBars.js.map +1 -1
  66. package/dist/engine/agent-api/compiler/compileScene.d.ts +11 -1
  67. package/dist/engine/agent-api/compiler/compileScene.d.ts.map +1 -1
  68. package/dist/engine/agent-api/compiler/compileScene.js +27 -1
  69. package/dist/engine/agent-api/compiler/compileScene.js.map +1 -1
  70. package/dist/engine/agent-api/compiler/customMaterial.d.ts +16 -5
  71. package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
  72. package/dist/engine/agent-api/compiler/customMaterial.js +149 -20
  73. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  74. package/dist/engine/agent-api/compiler/environment.d.ts +57 -1
  75. package/dist/engine/agent-api/compiler/environment.d.ts.map +1 -1
  76. package/dist/engine/agent-api/compiler/environment.js +170 -5
  77. package/dist/engine/agent-api/compiler/environment.js.map +1 -1
  78. package/dist/engine/agent-api/compiler/fog.js +1 -1
  79. package/dist/engine/agent-api/compiler/fog.js.map +1 -1
  80. package/dist/engine/agent-api/compiler/lights.d.ts +92 -0
  81. package/dist/engine/agent-api/compiler/lights.d.ts.map +1 -1
  82. package/dist/engine/agent-api/compiler/lights.js +358 -1
  83. package/dist/engine/agent-api/compiler/lights.js.map +1 -1
  84. package/dist/engine/agent-api/compiler/observations.d.ts +34 -0
  85. package/dist/engine/agent-api/compiler/observations.d.ts.map +1 -1
  86. package/dist/engine/agent-api/compiler/observations.js +77 -5
  87. package/dist/engine/agent-api/compiler/observations.js.map +1 -1
  88. package/dist/engine/agent-api/compiler/postprocess.d.ts +10 -0
  89. package/dist/engine/agent-api/compiler/postprocess.d.ts.map +1 -1
  90. package/dist/engine/agent-api/compiler/postprocess.js +28 -7
  91. package/dist/engine/agent-api/compiler/postprocess.js.map +1 -1
  92. package/dist/engine/agent-api/compiler/renderInput.d.ts +2 -0
  93. package/dist/engine/agent-api/compiler/renderInput.d.ts.map +1 -1
  94. package/dist/engine/agent-api/compiler/renderInput.js +15 -2
  95. package/dist/engine/agent-api/compiler/renderInput.js.map +1 -1
  96. package/dist/engine/agent-api/compiler/renderer.d.ts +6 -0
  97. package/dist/engine/agent-api/compiler/renderer.d.ts.map +1 -1
  98. package/dist/engine/agent-api/compiler/renderer.js +14 -3
  99. package/dist/engine/agent-api/compiler/renderer.js.map +1 -1
  100. package/dist/engine/agent-api/diagnostics.d.ts +16 -0
  101. package/dist/engine/agent-api/diagnostics.d.ts.map +1 -1
  102. package/dist/engine/agent-api/diagnostics.js +45 -2
  103. package/dist/engine/agent-api/diagnostics.js.map +1 -1
  104. package/dist/engine/agent-api/index.d.ts +2 -0
  105. package/dist/engine/agent-api/index.d.ts.map +1 -1
  106. package/dist/engine/agent-api/index.js +3 -0
  107. package/dist/engine/agent-api/index.js.map +1 -1
  108. package/dist/engine/agent-api/looks/lookPresets.d.ts +2 -0
  109. package/dist/engine/agent-api/looks/lookPresets.d.ts.map +1 -1
  110. package/dist/engine/agent-api/looks/lookPresets.js.map +1 -1
  111. package/dist/engine/agent-api/looks/looks.d.ts +12 -2
  112. package/dist/engine/agent-api/looks/looks.d.ts.map +1 -1
  113. package/dist/engine/agent-api/looks/looks.js +365 -65
  114. package/dist/engine/agent-api/looks/looks.js.map +1 -1
  115. package/dist/engine/agent-api/nodes/builder.d.ts +8 -0
  116. package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
  117. package/dist/engine/agent-api/nodes/builder.js +15 -0
  118. package/dist/engine/agent-api/nodes/builder.js.map +1 -1
  119. package/dist/engine/agent-api/nodes/effects.composite.d.ts +13 -9
  120. package/dist/engine/agent-api/nodes/effects.composite.d.ts.map +1 -1
  121. package/dist/engine/agent-api/nodes/effects.d.ts +65 -14
  122. package/dist/engine/agent-api/nodes/effects.d.ts.map +1 -1
  123. package/dist/engine/agent-api/nodes/effects.js +49 -16
  124. package/dist/engine/agent-api/nodes/effects.js.map +1 -1
  125. package/dist/engine/agent-api/nodes/effects.post.d.ts +62 -5
  126. package/dist/engine/agent-api/nodes/effects.post.d.ts.map +1 -1
  127. package/dist/engine/agent-api/nodes/effects.post.js +30 -17
  128. package/dist/engine/agent-api/nodes/effects.post.js.map +1 -1
  129. package/dist/engine/agent-api/nodes/effects.toon.d.ts +65 -1
  130. package/dist/engine/agent-api/nodes/effects.toon.d.ts.map +1 -1
  131. package/dist/engine/agent-api/nodes/effects.toon.js +186 -23
  132. package/dist/engine/agent-api/nodes/effects.toon.js.map +1 -1
  133. package/dist/engine/agent-api/nodes/groups.d.ts.map +1 -1
  134. package/dist/engine/agent-api/nodes/groups.js +2 -2
  135. package/dist/engine/agent-api/nodes/groups.js.map +1 -1
  136. package/dist/engine/agent-api/nodes/instances.d.ts +130 -90
  137. package/dist/engine/agent-api/nodes/instances.d.ts.map +1 -1
  138. package/dist/engine/agent-api/nodes/instances.js +192 -48
  139. package/dist/engine/agent-api/nodes/instances.js.map +1 -1
  140. package/dist/engine/agent-api/nodes/material.d.ts +8 -1
  141. package/dist/engine/agent-api/nodes/material.d.ts.map +1 -1
  142. package/dist/engine/agent-api/nodes/material.js +82 -0
  143. package/dist/engine/agent-api/nodes/material.js.map +1 -1
  144. package/dist/engine/agent-api/nodes/outlineTargets.d.ts +16 -0
  145. package/dist/engine/agent-api/nodes/outlineTargets.d.ts.map +1 -0
  146. package/dist/engine/agent-api/nodes/outlineTargets.js +46 -0
  147. package/dist/engine/agent-api/nodes/outlineTargets.js.map +1 -0
  148. package/dist/engine/agent-api/nodes/scene.d.ts.map +1 -1
  149. package/dist/engine/agent-api/nodes/scene.js +2 -2
  150. package/dist/engine/agent-api/nodes/scene.js.map +1 -1
  151. package/dist/engine/agent-api/nodes/sky.d.ts +23 -6
  152. package/dist/engine/agent-api/nodes/sky.d.ts.map +1 -1
  153. package/dist/engine/agent-api/nodes/sky.js +2 -0
  154. package/dist/engine/agent-api/nodes/sky.js.map +1 -1
  155. package/dist/engine/agent-api/nodes/types/runtime.d.ts +28 -1
  156. package/dist/engine/agent-api/nodes/types/runtime.d.ts.map +1 -1
  157. package/dist/engine/agent-api/nodes/types.d.ts +71 -3
  158. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  159. package/dist/engine/agent-api/performanceEvidence.js +7 -2
  160. package/dist/engine/agent-api/performanceEvidence.js.map +1 -1
  161. package/dist/engine/agent-api/postBridge.d.ts +75 -3
  162. package/dist/engine/agent-api/postBridge.d.ts.map +1 -1
  163. package/dist/engine/agent-api/postBridge.js +436 -33
  164. package/dist/engine/agent-api/postBridge.js.map +1 -1
  165. package/dist/engine/agent-api/postPresets.d.ts +8 -4
  166. package/dist/engine/agent-api/postPresets.d.ts.map +1 -1
  167. package/dist/engine/agent-api/postPresets.js +12 -11
  168. package/dist/engine/agent-api/postPresets.js.map +1 -1
  169. package/dist/engine/agent-api/publishedUnion.d.ts +7 -4
  170. package/dist/engine/agent-api/publishedUnion.d.ts.map +1 -1
  171. package/dist/engine/agent-api/publishedUnion.js +1 -1
  172. package/dist/engine/agent-api/publishedUnion.js.map +1 -1
  173. package/dist/engine/agent-api/rendererDiagnostics.js +4 -6
  174. package/dist/engine/agent-api/rendererDiagnostics.js.map +1 -1
  175. package/dist/engine/agent-api/vfx/atmosphere-api.d.ts +2 -4
  176. package/dist/engine/agent-api/vfx/atmosphere-api.d.ts.map +1 -1
  177. package/dist/engine/agent-api/vfx/atmosphere-api.js +2 -1
  178. package/dist/engine/agent-api/vfx/atmosphere-api.js.map +1 -1
  179. package/dist/engine/agent-api/vfx/effects-api.d.ts +3 -0
  180. package/dist/engine/agent-api/vfx/effects-api.d.ts.map +1 -1
  181. package/dist/engine/agent-api/vfx/effects-api.js +337 -74
  182. package/dist/engine/agent-api/vfx/effects-api.js.map +1 -1
  183. package/dist/engine/agent-api/world/flags.d.ts +33 -3
  184. package/dist/engine/agent-api/world/flags.d.ts.map +1 -1
  185. package/dist/engine/agent-api/world/flags.js +44 -12
  186. package/dist/engine/agent-api/world/flags.js.map +1 -1
  187. package/dist/engine/agent-api/world/index.d.ts +10 -1
  188. package/dist/engine/agent-api/world/index.d.ts.map +1 -1
  189. package/dist/engine/agent-api/world/index.js +11 -2
  190. package/dist/engine/agent-api/world/index.js.map +1 -1
  191. package/dist/engine/agent-api/world/scatter.d.ts +50 -3
  192. package/dist/engine/agent-api/world/scatter.d.ts.map +1 -1
  193. package/dist/engine/agent-api/world/scatter.js +93 -7
  194. package/dist/engine/agent-api/world/scatter.js.map +1 -1
  195. package/dist/engine/agent-api/world/terrain.d.ts +8 -0
  196. package/dist/engine/agent-api/world/terrain.d.ts.map +1 -1
  197. package/dist/engine/agent-api/world/terrain.js +6 -1
  198. package/dist/engine/agent-api/world/terrain.js.map +1 -1
  199. package/dist/engine/contracts/animation.d.ts +30 -12
  200. package/dist/engine/contracts/animation.d.ts.map +1 -1
  201. package/dist/engine/contracts/animation.js +2 -0
  202. package/dist/engine/contracts/animation.js.map +1 -1
  203. package/dist/engine/contracts/art.d.ts +1 -1
  204. package/dist/engine/contracts/art.d.ts.map +1 -1
  205. package/dist/engine/contracts/atmosphere.d.ts +43 -9
  206. package/dist/engine/contracts/atmosphere.d.ts.map +1 -1
  207. package/dist/engine/contracts/atmosphere.js.map +1 -1
  208. package/dist/engine/contracts/camera.d.ts +8 -2
  209. package/dist/engine/contracts/camera.d.ts.map +1 -1
  210. package/dist/engine/contracts/camera.js +14 -3
  211. package/dist/engine/contracts/camera.js.map +1 -1
  212. package/dist/engine/contracts/effects.d.ts +83 -37
  213. package/dist/engine/contracts/effects.d.ts.map +1 -1
  214. package/dist/engine/contracts/effects.js +2 -1
  215. package/dist/engine/contracts/effects.js.map +1 -1
  216. package/dist/engine/contracts/flags.d.ts.map +1 -1
  217. package/dist/engine/contracts/flags.js +29 -4
  218. package/dist/engine/contracts/flags.js.map +1 -1
  219. package/dist/engine/contracts/lighting.d.ts +33 -1
  220. package/dist/engine/contracts/lighting.d.ts.map +1 -1
  221. package/dist/engine/contracts/lighting.js +13 -1
  222. package/dist/engine/contracts/lighting.js.map +1 -1
  223. package/dist/engine/contracts/looks.d.ts +57 -1
  224. package/dist/engine/contracts/looks.d.ts.map +1 -1
  225. package/dist/engine/contracts/looks.js.map +1 -1
  226. package/dist/engine/contracts/materials.d.ts +25 -0
  227. package/dist/engine/contracts/materials.d.ts.map +1 -1
  228. package/dist/engine/contracts/materials.js +4 -1
  229. package/dist/engine/contracts/materials.js.map +1 -1
  230. package/dist/engine/contracts/post.d.ts +14 -0
  231. package/dist/engine/contracts/post.d.ts.map +1 -1
  232. package/dist/engine/contracts/post.js +2 -0
  233. package/dist/engine/contracts/post.js.map +1 -1
  234. package/dist/engine/instances-model/CrowdKit.d.ts +231 -0
  235. package/dist/engine/instances-model/CrowdKit.d.ts.map +1 -0
  236. package/dist/engine/instances-model/CrowdKit.js +496 -0
  237. package/dist/engine/instances-model/CrowdKit.js.map +1 -0
  238. package/dist/engine/lanes/prd02.d.ts +36 -2
  239. package/dist/engine/lanes/prd02.d.ts.map +1 -1
  240. package/dist/engine/lanes/prd02.js +120 -7
  241. package/dist/engine/lanes/prd02.js.map +1 -1
  242. package/dist/engine/lanes/prd03.d.ts.map +1 -1
  243. package/dist/engine/lanes/prd03.js +9 -1
  244. package/dist/engine/lanes/prd03.js.map +1 -1
  245. package/dist/engine/lanes/prd07.d.ts.map +1 -1
  246. package/dist/engine/lanes/prd07.js +12 -7
  247. package/dist/engine/lanes/prd07.js.map +1 -1
  248. package/dist/engine/production-runtime/GlbResourceCache.d.ts +140 -0
  249. package/dist/engine/production-runtime/GlbResourceCache.d.ts.map +1 -0
  250. package/dist/engine/production-runtime/GlbResourceCache.js +237 -0
  251. package/dist/engine/production-runtime/GlbResourceCache.js.map +1 -0
  252. package/dist/engine/production-runtime/ModelMaterialOverrides.d.ts +53 -2
  253. package/dist/engine/production-runtime/ModelMaterialOverrides.d.ts.map +1 -1
  254. package/dist/engine/production-runtime/ModelMaterialOverrides.js +142 -1
  255. package/dist/engine/production-runtime/ModelMaterialOverrides.js.map +1 -1
  256. package/dist/engine/production-runtime/TypedGLBActor.d.ts +55 -0
  257. package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
  258. package/dist/engine/production-runtime/TypedGLBActor.js +205 -3
  259. package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
  260. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -1
  261. package/dist/engine/production-runtime/actor/ModelTextureShare.js +5 -2
  262. package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -1
  263. package/dist/engine/production-runtime/actor/TypedGLBActorMaterials.d.ts.map +1 -1
  264. package/dist/engine/production-runtime/actor/TypedGLBActorMaterials.js +10 -1
  265. package/dist/engine/production-runtime/actor/TypedGLBActorMaterials.js.map +1 -1
  266. package/dist/engine/production-runtime/effects/EffectNodeLowering.d.ts +55 -0
  267. package/dist/engine/production-runtime/effects/EffectNodeLowering.d.ts.map +1 -1
  268. package/dist/engine/production-runtime/effects/EffectNodeLowering.js +71 -7
  269. package/dist/engine/production-runtime/effects/EffectNodeLowering.js.map +1 -1
  270. package/dist/engine/production-runtime/effects/FlipbookAtlas.d.ts +85 -0
  271. package/dist/engine/production-runtime/effects/FlipbookAtlas.d.ts.map +1 -1
  272. package/dist/engine/production-runtime/effects/FlipbookAtlas.js +164 -0
  273. package/dist/engine/production-runtime/effects/FlipbookAtlas.js.map +1 -1
  274. package/dist/engine/production-runtime/effects/LiveAtmosphere.d.ts +37 -6
  275. package/dist/engine/production-runtime/effects/LiveAtmosphere.d.ts.map +1 -1
  276. package/dist/engine/production-runtime/effects/LiveAtmosphere.js +93 -10
  277. package/dist/engine/production-runtime/effects/LiveAtmosphere.js.map +1 -1
  278. package/dist/engine/production-runtime/effects/ProductionEffectSystem.d.ts +71 -1
  279. package/dist/engine/production-runtime/effects/ProductionEffectSystem.d.ts.map +1 -1
  280. package/dist/engine/production-runtime/effects/ProductionEffectSystem.js +356 -6
  281. package/dist/engine/production-runtime/effects/ProductionEffectSystem.js.map +1 -1
  282. package/dist/engine/production-runtime/world/WaterRuntime.d.ts +9 -0
  283. package/dist/engine/production-runtime/world/WaterRuntime.d.ts.map +1 -1
  284. package/dist/engine/production-runtime/world/WaterRuntime.js +27 -11
  285. package/dist/engine/production-runtime/world/WaterRuntime.js.map +1 -1
  286. package/dist/engine/production-runtime/world/WorldFramePasses.d.ts +11 -1
  287. package/dist/engine/production-runtime/world/WorldFramePasses.d.ts.map +1 -1
  288. package/dist/engine/production-runtime/world/WorldFramePasses.js +37 -1
  289. package/dist/engine/production-runtime/world/WorldFramePasses.js.map +1 -1
  290. package/dist/engine/public/index.d.ts +22 -0
  291. package/dist/engine/public/index.d.ts.map +1 -1
  292. package/dist/engine/public/index.js +14 -0
  293. package/dist/engine/public/index.js.map +1 -1
  294. package/dist/game/art/define.d.ts +1 -1
  295. package/dist/game/art/define.d.ts.map +1 -1
  296. package/dist/game/art/define.js +1 -1
  297. package/dist/game/art/define.js.map +1 -1
  298. package/dist/game/fonts/register.d.ts +16 -1
  299. package/dist/game/fonts/register.d.ts.map +1 -1
  300. package/dist/game/fonts/register.js +18 -7
  301. package/dist/game/fonts/register.js.map +1 -1
  302. package/dist/game/hud/themes.d.ts +33 -8
  303. package/dist/game/hud/themes.d.ts.map +1 -1
  304. package/dist/game/hud/themes.js +125 -22
  305. package/dist/game/hud/themes.js.map +1 -1
  306. package/dist/game/index.d.ts +4 -2
  307. package/dist/game/index.d.ts.map +1 -1
  308. package/dist/game/index.js +2 -1
  309. package/dist/game/index.js.map +1 -1
  310. package/dist/game/juice/audioReactive.d.ts +42 -0
  311. package/dist/game/juice/audioReactive.d.ts.map +1 -0
  312. package/dist/game/juice/audioReactive.js +68 -0
  313. package/dist/game/juice/audioReactive.js.map +1 -0
  314. package/dist/game/styles/themes/arcade-neon.css +2 -1
  315. package/dist/game/styles/themes/fighting.css +2 -1
  316. package/dist/game/styles/themes/ink-scroll.css +15 -0
  317. package/dist/game/styles/themes/motorsport.css +2 -1
  318. package/dist/game/styles/themes/plain.css +2 -1
  319. package/dist/game/styles/themes/sci-fi-telemetry.css +2 -1
  320. package/dist/game/styles/themes/sky-expedition.css +15 -0
  321. package/dist/game/styles/themes/sports-broadcast.css +2 -1
  322. package/dist/game/styles/themes/storybook.css +15 -0
  323. package/dist/game/styles/themes/tabletop.css +2 -1
  324. package/dist/game/styles.css +3 -1
  325. package/dist/rendering/ClusteredForwardLighting.d.ts.map +1 -1
  326. package/dist/rendering/ClusteredForwardLighting.js +3 -1
  327. package/dist/rendering/ClusteredForwardLighting.js.map +1 -1
  328. package/dist/rendering/DepthPass.d.ts +25 -0
  329. package/dist/rendering/DepthPass.d.ts.map +1 -1
  330. package/dist/rendering/DepthPass.js +149 -1
  331. package/dist/rendering/DepthPass.js.map +1 -1
  332. package/dist/rendering/ForwardPass.d.ts +84 -0
  333. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  334. package/dist/rendering/ForwardPass.js +236 -12
  335. package/dist/rendering/ForwardPass.js.map +1 -1
  336. package/dist/rendering/LightUniforms.d.ts +12 -0
  337. package/dist/rendering/LightUniforms.d.ts.map +1 -1
  338. package/dist/rendering/LightUniforms.js +9 -1
  339. package/dist/rendering/LightUniforms.js.map +1 -1
  340. package/dist/rendering/atmosphere/CloudLayer.d.ts +15 -0
  341. package/dist/rendering/atmosphere/CloudLayer.d.ts.map +1 -1
  342. package/dist/rendering/atmosphere/CloudLayer.js +27 -5
  343. package/dist/rendering/atmosphere/CloudLayer.js.map +1 -1
  344. package/dist/rendering/atmosphere/GradientSky.d.ts +3 -3
  345. package/dist/rendering/atmosphere/GradientSky.d.ts.map +1 -1
  346. package/dist/rendering/atmosphere/GradientSky.js +20 -9
  347. package/dist/rendering/atmosphere/GradientSky.js.map +1 -1
  348. package/dist/rendering/atmosphere/HeightFog.d.ts.map +1 -1
  349. package/dist/rendering/atmosphere/HeightFog.js +9 -0
  350. package/dist/rendering/atmosphere/HeightFog.js.map +1 -1
  351. package/dist/rendering/atmosphere/SkyBackgroundPass.d.ts +11 -0
  352. package/dist/rendering/atmosphere/SkyBackgroundPass.d.ts.map +1 -1
  353. package/dist/rendering/atmosphere/SkyBackgroundPass.js +40 -7
  354. package/dist/rendering/atmosphere/SkyBackgroundPass.js.map +1 -1
  355. package/dist/rendering/atmosphere/StarField.d.ts +21 -0
  356. package/dist/rendering/atmosphere/StarField.d.ts.map +1 -1
  357. package/dist/rendering/atmosphere/StarField.js +24 -1
  358. package/dist/rendering/atmosphere/StarField.js.map +1 -1
  359. package/dist/rendering/atmosphere/sky.glsl.d.ts.map +1 -1
  360. package/dist/rendering/atmosphere/sky.glsl.js +8 -0
  361. package/dist/rendering/atmosphere/sky.glsl.js.map +1 -1
  362. package/dist/rendering/contracts/flags.state.d.ts.map +1 -1
  363. package/dist/rendering/contracts/flags.state.js +19 -0
  364. package/dist/rendering/contracts/flags.state.js.map +1 -1
  365. package/dist/rendering/forward/Lighting.d.ts +7 -1
  366. package/dist/rendering/forward/Lighting.d.ts.map +1 -1
  367. package/dist/rendering/forward/Lighting.js +24 -1
  368. package/dist/rendering/forward/Lighting.js.map +1 -1
  369. package/dist/rendering/forward/Velocity.d.ts +8 -0
  370. package/dist/rendering/forward/Velocity.d.ts.map +1 -1
  371. package/dist/rendering/forward/Velocity.js +10 -0
  372. package/dist/rendering/forward/Velocity.js.map +1 -1
  373. package/dist/rendering/lanes/prd03.d.ts +1 -1
  374. package/dist/rendering/lanes/prd03.d.ts.map +1 -1
  375. package/dist/rendering/lanes/prd03.js +6 -1
  376. package/dist/rendering/lanes/prd03.js.map +1 -1
  377. package/dist/rendering/lanes/prd07.d.ts.map +1 -1
  378. package/dist/rendering/lanes/prd07.js +5 -2
  379. package/dist/rendering/lanes/prd07.js.map +1 -1
  380. package/dist/rendering/post/DisplayLutCache.d.ts +10 -2
  381. package/dist/rendering/post/DisplayLutCache.d.ts.map +1 -1
  382. package/dist/rendering/post/DisplayLutCache.js +15 -3
  383. package/dist/rendering/post/DisplayLutCache.js.map +1 -1
  384. package/dist/rendering/post/PostGraph.d.ts +23 -0
  385. package/dist/rendering/post/PostGraph.d.ts.map +1 -1
  386. package/dist/rendering/post/PostGraph.js.map +1 -1
  387. package/dist/rendering/post/PostQualityTiers.d.ts +36 -0
  388. package/dist/rendering/post/PostQualityTiers.d.ts.map +1 -1
  389. package/dist/rendering/post/PostQualityTiers.js +75 -0
  390. package/dist/rendering/post/PostQualityTiers.js.map +1 -1
  391. package/dist/rendering/post/chunks/velocity.glsl.d.ts +7 -0
  392. package/dist/rendering/post/chunks/velocity.glsl.d.ts.map +1 -1
  393. package/dist/rendering/post/chunks/velocity.glsl.js +12 -1
  394. package/dist/rendering/post/chunks/velocity.glsl.js.map +1 -1
  395. package/dist/rendering/post/shaders/displayGrade.glsl.d.ts +15 -1
  396. package/dist/rendering/post/shaders/displayGrade.glsl.d.ts.map +1 -1
  397. package/dist/rendering/post/shaders/displayGrade.glsl.js +26 -2
  398. package/dist/rendering/post/shaders/displayGrade.glsl.js.map +1 -1
  399. package/dist/rendering/post/shaders/dof.glsl.d.ts +11 -1
  400. package/dist/rendering/post/shaders/dof.glsl.d.ts.map +1 -1
  401. package/dist/rendering/post/shaders/dof.glsl.js +22 -0
  402. package/dist/rendering/post/shaders/dof.glsl.js.map +1 -1
  403. package/dist/rendering/post/shaders/finalize.glsl.d.ts +1 -1
  404. package/dist/rendering/post/shaders/finalize.glsl.d.ts.map +1 -1
  405. package/dist/rendering/post/shaders/finalize.glsl.js +3 -2
  406. package/dist/rendering/post/shaders/finalize.glsl.js.map +1 -1
  407. package/dist/rendering/post/shaders/godrays.glsl.d.ts +24 -1
  408. package/dist/rendering/post/shaders/godrays.glsl.d.ts.map +1 -1
  409. package/dist/rendering/post/shaders/godrays.glsl.js +45 -5
  410. package/dist/rendering/post/shaders/godrays.glsl.js.map +1 -1
  411. package/dist/rendering/post/shaders/hdrGrade.glsl.d.ts +66 -0
  412. package/dist/rendering/post/shaders/hdrGrade.glsl.d.ts.map +1 -0
  413. package/dist/rendering/post/shaders/hdrGrade.glsl.js +159 -0
  414. package/dist/rendering/post/shaders/hdrGrade.glsl.js.map +1 -0
  415. package/dist/rendering/post/shaders/ssr.glsl.d.ts +39 -0
  416. package/dist/rendering/post/shaders/ssr.glsl.d.ts.map +1 -0
  417. package/dist/rendering/post/shaders/ssr.glsl.js +163 -0
  418. package/dist/rendering/post/shaders/ssr.glsl.js.map +1 -0
  419. package/dist/rendering/post/v2Stages.d.ts +53 -0
  420. package/dist/rendering/post/v2Stages.d.ts.map +1 -1
  421. package/dist/rendering/post/v2Stages.js +314 -23
  422. package/dist/rendering/post/v2Stages.js.map +1 -1
  423. package/dist/rendering/postprocess/NativeBloomPyramid.d.ts +19 -0
  424. package/dist/rendering/postprocess/NativeBloomPyramid.d.ts.map +1 -1
  425. package/dist/rendering/postprocess/NativeBloomPyramid.js +37 -0
  426. package/dist/rendering/postprocess/NativeBloomPyramid.js.map +1 -1
  427. package/dist/rendering/program/ProgramGenerator.d.ts.map +1 -1
  428. package/dist/rendering/program/ProgramGenerator.js +12 -1
  429. package/dist/rendering/program/ProgramGenerator.js.map +1 -1
  430. package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts +12 -0
  431. package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts.map +1 -1
  432. package/dist/rendering/program/chunks/shadow_forward.glsl.js +57 -0
  433. package/dist/rendering/program/chunks/shadow_forward.glsl.js.map +1 -1
  434. package/dist/rendering/renderer/Background.d.ts.map +1 -1
  435. package/dist/rendering/renderer/Background.js +26 -2
  436. package/dist/rendering/renderer/Background.js.map +1 -1
  437. package/dist/rendering/renderer/FrameGraph.d.ts +8 -0
  438. package/dist/rendering/renderer/FrameGraph.d.ts.map +1 -1
  439. package/dist/rendering/renderer/FrameGraph.js +46 -7
  440. package/dist/rendering/renderer/FrameGraph.js.map +1 -1
  441. package/dist/rendering/renderer/OutlineTargets.d.ts +99 -0
  442. package/dist/rendering/renderer/OutlineTargets.d.ts.map +1 -0
  443. package/dist/rendering/renderer/OutlineTargets.js +286 -0
  444. package/dist/rendering/renderer/OutlineTargets.js.map +1 -0
  445. package/dist/rendering/renderer/PostprocessExecution.d.ts +5 -0
  446. package/dist/rendering/renderer/PostprocessExecution.d.ts.map +1 -1
  447. package/dist/rendering/renderer/PostprocessExecution.js +70 -4
  448. package/dist/rendering/renderer/PostprocessExecution.js.map +1 -1
  449. package/dist/rendering/renderer/postSkipped.d.ts +6 -0
  450. package/dist/rendering/renderer/postSkipped.d.ts.map +1 -1
  451. package/dist/rendering/renderer/postSkipped.js +8 -0
  452. package/dist/rendering/renderer/postSkipped.js.map +1 -1
  453. package/dist/rendering/shaders/chunks/author/ibl.glsl.d.ts +20 -0
  454. package/dist/rendering/shaders/chunks/author/ibl.glsl.d.ts.map +1 -0
  455. package/dist/rendering/shaders/chunks/author/ibl.glsl.js +84 -0
  456. package/dist/rendering/shaders/chunks/author/ibl.glsl.js.map +1 -0
  457. package/dist/rendering/shaders/chunks/author/index.d.ts +3 -1
  458. package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -1
  459. package/dist/rendering/shaders/chunks/author/index.js +38 -3
  460. package/dist/rendering/shaders/chunks/author/index.js.map +1 -1
  461. package/dist/rendering/shaders/chunks/author/lights.glsl.d.ts +16 -0
  462. package/dist/rendering/shaders/chunks/author/lights.glsl.d.ts.map +1 -0
  463. package/dist/rendering/shaders/chunks/author/lights.glsl.js +112 -0
  464. package/dist/rendering/shaders/chunks/author/lights.glsl.js.map +1 -0
  465. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts +16 -2
  466. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts.map +1 -1
  467. package/dist/rendering/shaders/chunks/author/shadow.glsl.js +46 -2
  468. package/dist/rendering/shaders/chunks/author/shadow.glsl.js.map +1 -1
  469. package/dist/rendering/shaders/chunks/instance_color_target.glsl.d.ts +34 -0
  470. package/dist/rendering/shaders/chunks/instance_color_target.glsl.d.ts.map +1 -0
  471. package/dist/rendering/shaders/chunks/instance_color_target.glsl.js +101 -0
  472. package/dist/rendering/shaders/chunks/instance_color_target.glsl.js.map +1 -0
  473. package/dist/rendering/shaders/chunks/rim.glsl.d.ts +37 -0
  474. package/dist/rendering/shaders/chunks/rim.glsl.d.ts.map +1 -0
  475. package/dist/rendering/shaders/chunks/rim.glsl.js +50 -0
  476. package/dist/rendering/shaders/chunks/rim.glsl.js.map +1 -0
  477. package/dist/rendering/shadows/Prd02ShadowBridge.d.ts +26 -3
  478. package/dist/rendering/shadows/Prd02ShadowBridge.d.ts.map +1 -1
  479. package/dist/rendering/shadows/Prd02ShadowBridge.js +134 -8
  480. package/dist/rendering/shadows/Prd02ShadowBridge.js.map +1 -1
  481. package/dist/rendering/shadows/Prd02ShadowsContributor.d.ts.map +1 -1
  482. package/dist/rendering/shadows/Prd02ShadowsContributor.js +4 -16
  483. package/dist/rendering/shadows/Prd02ShadowsContributor.js.map +1 -1
  484. package/dist/rendering/vfx/VfxAtlas.d.ts +10 -0
  485. package/dist/rendering/vfx/VfxAtlas.d.ts.map +1 -1
  486. package/dist/rendering/vfx/VfxAtlas.js +18 -3
  487. package/dist/rendering/vfx/VfxAtlas.js.map +1 -1
  488. package/dist/rendering/webgl2/LegacyPost.d.ts +9 -1
  489. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  490. package/dist/rendering/webgl2/LegacyPost.js +23 -7
  491. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  492. package/dist/rendering/webgl2/MultiDraw.d.ts.map +1 -1
  493. package/dist/rendering/webgl2/MultiDraw.js +51 -1
  494. package/dist/rendering/webgl2/MultiDraw.js.map +1 -1
  495. package/dist/rendering/world/vegetation/WindField.d.ts.map +1 -1
  496. package/dist/rendering/world/vegetation/WindField.js +4 -1
  497. package/dist/rendering/world/vegetation/WindField.js.map +1 -1
  498. package/dist/rendering/world/water/ReflectionViewPass.d.ts.map +1 -1
  499. package/dist/rendering/world/water/ReflectionViewPass.js +12 -2
  500. package/dist/rendering/world/water/ReflectionViewPass.js.map +1 -1
  501. package/dist/rendering/world/water/SceneCopyFallback.d.ts.map +1 -1
  502. package/dist/rendering/world/water/SceneCopyFallback.js +9 -2
  503. package/dist/rendering/world/water/SceneCopyFallback.js.map +1 -1
  504. package/dist/rendering/world/water/WaterMaterial.d.ts.map +1 -1
  505. package/dist/rendering/world/water/WaterMaterial.js +8 -2
  506. package/dist/rendering/world/water/WaterMaterial.js.map +1 -1
  507. package/package.json +25 -25
  508. package/templates/cinematic-scene/package.json +2 -2
  509. package/templates/mini-game/package.json +2 -2
  510. package/templates/product-viewer/package.json +2 -2
  511. package/templates/production-asset-inspector/package.json +1 -1
  512. package/templates/production-material-studio/package.json +1 -1
  513. package/templates/production-product-configurator/package.json +1 -1
  514. package/templates/production-product-viewer/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"atmosphere-api.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/vfx/atmosphere-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"atmosphere-api.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/vfx/atmosphere-api.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAK3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAgB,MAAM,yDAAyD,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,UAAU,yBAAyB,CAAC,GAAY,EAAE,GAAuB;IAC7E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtG,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,sBAAsB,CAAC,GAAyB,CAAC,CAAC;IACjF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpD,oEAAoE;IACpE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACzD,qHAAqH;IACrH,gHAAgH;IAChH,mBAAmB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACzE,2EAA2E;IAC3E,yEAAyE;IACzE,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ;QAAE,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,OAAO;QACL,MAAM,EAAE,CAAC,IAA2B,EAAE,CAAqB,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1F,MAAM,EAAE,CAAC,IAA0B,EAAE,CAAkC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtG,UAAU,EAAE,CAAC,KAAa,EAAE,CAAkC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAClG,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;KAChC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,GAAY;IACxC,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,uHAAuH,CAAC,CAAC;IAC3I,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,CAAC,GAAY,EAAE,IAA2B,EAAE,CAAqB,EAAQ,EAAE,CACjF,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,GAAY,EAAE,IAA0B,EAAE,CAAkC,EAAQ,EAAE,CAC7F,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,GAAY,EAAE,KAAa,EAAE,CAAkC,EAAQ,EAAE,CACpF,oBAAoB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,KAAK,EAAE,CAAC,GAAY,EAA+E,EAAE,CACnG,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;CAC3B,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import type { AuraApp, AuraCreateAppOptions } from "../index.js";
2
+ import type { AuraVfxGenreVariant } from "../../contracts/effects.js";
2
3
  import type { QrFlags } from "../../../rendering/contracts/index.js";
3
4
  import { ProductionEffectSystem } from "../../production-runtime/effects/ProductionEffectSystem.js";
4
5
  export interface AuraEffectsExtensionContext {
5
6
  readonly flags: QrFlags;
6
7
  readonly options: AuraCreateAppOptions;
7
8
  }
9
+ /** GU47 E-F: the genre variant names, in table order. */
10
+ export declare const AURA_VFX_GENRE_VARIANTS: readonly AuraVfxGenreVariant[];
8
11
  /** Real `AuraAppEffects` — pooled effect instances over the emitter system. */
9
12
  export declare function createAppEffects(app: AuraApp, system: ProductionEffectSystem): import("../../contracts/effects.js").AuraAppEffects;
10
13
  interface PendingGameEffects {
@@ -1 +1 @@
1
- {"version":3,"file":"effects-api.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/vfx/effects-api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAuB,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEnF,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAgB,MAAM,yDAAyD,CAAC;AAS/G,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;CACxC;AAgDD,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,yBAAyB,EAAE,cAAc,CAyO/H;AASD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAID,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAGxE;AAsBD,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAE1E;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAOD;;;;;gCAKgC;AAChC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,2BAA2B,GAAG,OAAO,yBAAyB,EAAE,cAAc,CAcvI;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpD;AAKD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,GAAG,sBAAsB,CAO9G;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAE1E"}
1
+ {"version":3,"file":"effects-api.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/vfx/effects-api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAuB,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,KAAK,EAAiH,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClL,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAgB,MAAM,yDAAyD,CAAC;AAU/G,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;CACxC;AA2DD,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,EAAwC,SAAS,mBAAmB,EAAE,CAAC;AA+F3G,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,yBAAyB,EAAE,cAAc,CA0Z/H;AASD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAID,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAGxE;AAsBD,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAE1E;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAOD;;;;;gCAKgC;AAChC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,2BAA2B,GAAG,OAAO,yBAAyB,EAAE,cAAc,CAcvI;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpD;AAKD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,GAAG,sBAAsB,CAO9G;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAE1E"}
@@ -22,6 +22,33 @@ const BURST_PRESETS = {
22
22
  "impact-decal": { speed: [0, 0], life: [2, 3], gravity: 0, color: [0.15, 0.12, 0.1], size: [0.2, 0.35], spread: 0.05, additive: false },
23
23
  "aura-burst": { speed: [2, 4], life: [0.5, 1.1], gravity: 0, color: [1.5, 2.5, 6], size: [0.08, 0.2], spread: 1, additive: true, light: { intensity: 10, range: 8, duration: 0.6 } }
24
24
  };
25
+ /**
26
+ * GU47 E-F genre-coloured variants of `spark`, `dust` and `pickup`: the base row's motion, life and size with
27
+ * a genre palette, so two games firing "the same" hit or pickup stop looking identical. Additive rows keep an
28
+ * HDR colour of the base's energy; dust rows stay LDR.
29
+ */
30
+ const GENRE_VARIANT_COLORS = {
31
+ "spark-fire": ["spark", [4.5, 1.4, 0.35]],
32
+ "spark-electric": ["spark", [1.2, 2.8, 4.6]],
33
+ "spark-gold": ["spark", [4.2, 3, 0.9]],
34
+ "spark-magic": ["spark", [3.4, 1, 4.2]],
35
+ "spark-ice": ["spark", [2.2, 3.4, 4.4]],
36
+ "dust-sand": ["dust", [0.76, 0.62, 0.42]],
37
+ "dust-turf": ["dust", [0.36, 0.42, 0.24]],
38
+ "dust-snow": ["dust", [0.9, 0.93, 0.98]],
39
+ "dust-ash": ["dust", [0.28, 0.27, 0.27]],
40
+ "dust-clay": ["dust", [0.66, 0.38, 0.26]],
41
+ "pickup-gold": ["pickup", [4.4, 3.2, 0.8]],
42
+ "pickup-gem": ["pickup", [0.9, 2.8, 4.6]],
43
+ "pickup-power": ["pickup", [3.8, 1, 4]],
44
+ "pickup-star": ["pickup", [4.4, 4, 2.8]],
45
+ "pickup-heart": ["pickup", [4.4, 1, 1.6]]
46
+ };
47
+ /** GU47 E-F: the genre variant names, in table order. */
48
+ export const AURA_VFX_GENRE_VARIANTS = Object.keys(GENRE_VARIANT_COLORS);
49
+ for (const [name, [base, color]] of Object.entries(GENRE_VARIANT_COLORS)) {
50
+ BURST_PRESETS[name] = { ...BURST_PRESETS[base], color };
51
+ }
25
52
  /** super-flash C-05 overlay flash: LDR warm white, 0.3 peak, 180 ms decay. */
26
53
  const SUPER_FLASH = { color: [1, 0.9, 0.72], peak: 0.3, ms: 180 };
27
54
  /** HDR colour → chromaticity (max component 1); LDR colours pass unchanged. */
@@ -29,6 +56,58 @@ function lightChromaticity(c) {
29
56
  const m = Math.max(1, c[0] ?? 0, c[1] ?? 0, c[2] ?? 0);
30
57
  return [(c[0] ?? 0) / m, (c[1] ?? 0) / m, (c[2] ?? 0) / m];
31
58
  }
59
+ function builtinRecipe(kind) {
60
+ const preset = BURST_PRESETS[kind] ?? BURST_PRESETS.spark;
61
+ return { speed: preset.speed, life: preset.life, gravity: preset.gravity, color: preset.color, size: preset.size, spread: preset.spread, additive: preset.additive, ...(preset.sprite !== undefined ? { sprite: preset.sprite } : {}) };
62
+ }
63
+ function numberOr(value, fallback) {
64
+ return typeof value === "number" && Number.isFinite(value) ? value : fallback;
65
+ }
66
+ function rangeOr(value, fallback) {
67
+ if (typeof value === "number" && Number.isFinite(value))
68
+ return [value, value];
69
+ if (Array.isArray(value) && typeof value[0] === "number")
70
+ return [value[0], typeof value[1] === "number" ? value[1] : value[0]];
71
+ return fallback;
72
+ }
73
+ const LAYER_BLENDS = new Set(["alpha", "premultiplied", "additive", "multiply"]);
74
+ /**
75
+ * GU47 E-F: a registered preset's emitter layer over its base row. The base is the built-in (or genre
76
+ * variant) named by `layer.preset`, else the built-in of the preset's own name, else `spark`. Recognised layer
77
+ * fields: count, speed, life | lifetime, gravity (number or vec3: y is used), color (hex or linear rgb),
78
+ * intensity (multiplies color), size, spread, additive | blend | materialMode, sprite, maxScreen, drag, direction.
79
+ */
80
+ function recipeFromLayer(kind, layer) {
81
+ const baseKind = typeof layer.preset === "string" && BURST_PRESETS[layer.preset] ? layer.preset : kind;
82
+ const base = builtinRecipe(baseKind);
83
+ const gravity = Array.isArray(layer.gravity) ? numberOr(layer.gravity[1], base.gravity) : numberOr(layer.gravity, base.gravity);
84
+ const rawColor = typeof layer.color === "string" || Array.isArray(layer.color) ? toVec3(layer.color, base.color) : base.color;
85
+ const intensity = numberOr(layer.intensity, 1);
86
+ const blend = typeof layer.blend === "string" && LAYER_BLENDS.has(layer.blend) ? layer.blend : undefined;
87
+ const additive = typeof layer.additive === "boolean"
88
+ ? layer.additive
89
+ : blend !== undefined
90
+ ? blend === "additive"
91
+ : typeof layer.materialMode === "string"
92
+ ? ["additive-glow", "spark", "star"].includes(layer.materialMode)
93
+ : base.additive;
94
+ const direction = Array.isArray(layer.direction) && layer.direction.length >= 3 ? [Number(layer.direction[0]), Number(layer.direction[1]), Number(layer.direction[2])] : undefined;
95
+ return {
96
+ speed: rangeOr(layer.speed, base.speed),
97
+ life: rangeOr(layer.life ?? layer.lifetime, base.life),
98
+ gravity,
99
+ color: [rawColor[0] * intensity, rawColor[1] * intensity, rawColor[2] * intensity],
100
+ size: rangeOr(layer.size, base.size),
101
+ spread: numberOr(layer.spread, base.spread),
102
+ additive,
103
+ ...(blend !== undefined ? { blend } : {}),
104
+ ...(typeof layer.count === "number" && layer.count > 0 ? { count: Math.round(layer.count) } : {}),
105
+ ...(layer.sprite !== undefined ? { sprite: layer.sprite } : base.sprite !== undefined ? { sprite: base.sprite } : {}),
106
+ ...(typeof layer.maxScreen === "number" && layer.maxScreen > 0 ? { maxScreen: layer.maxScreen } : {}),
107
+ ...(typeof layer.drag === "number" ? { drag: layer.drag } : {}),
108
+ ...(direction ? { direction } : {})
109
+ };
110
+ }
32
111
  let nextInstanceId = 0;
33
112
  /** Concurrent transient-instance pool cap (E20's `poolSize ?? 96` default). */
34
113
  const EFFECT_INSTANCE_CAP = 96;
@@ -124,25 +203,42 @@ export function createAppEffects(app, system) {
124
203
  });
125
204
  }
126
205
  };
127
- const spawnEmitter = (kind, position, options) => {
206
+ /** GU47 E-F: presets registered by the app; `burst`/`spawn` resolve these before the built-in table. */
207
+ const registered = new Map();
208
+ let unsupportedLayerNoted = false;
209
+ const pendingLayers = [];
210
+ let layerClock = 0;
211
+ let offLayerFrame = null;
212
+ const scheduleLayer = (delay, fire) => {
213
+ const entry = { due: layerClock + delay, fire, cancelled: false, done: false };
214
+ pendingLayers.push(entry);
215
+ if (!offLayerFrame && typeof app.onFrame === "function") {
216
+ offLayerFrame = app.onFrame((frame) => {
217
+ layerClock += Math.max(0, frame.dt);
218
+ for (let i = 0; i < pendingLayers.length;) {
219
+ const pending = pendingLayers[i];
220
+ if (pending.cancelled || pending.due <= layerClock) {
221
+ pendingLayers.splice(i, 1);
222
+ pending.done = true;
223
+ if (!pending.cancelled)
224
+ pending.fire();
225
+ }
226
+ else
227
+ i += 1;
228
+ }
229
+ });
230
+ }
231
+ return entry;
232
+ };
233
+ /** Create one pooled emitter instance; returns its id (also the system emitter id). */
234
+ const spawnInstance = (recipe, kind, position, options) => {
128
235
  const id = `fx-${nextInstanceId++}`;
129
- const preset = BURST_PRESETS[kind] ?? BURST_PRESETS.spark;
130
- if (options.camera !== false)
131
- applyPresetLayers(kind);
132
- const color = toVec3(options.color, preset.color);
236
+ const color = toVec3(options.color, recipe.color);
133
237
  const sizeScale = options.scale !== undefined && Number.isFinite(options.scale) && options.scale > 0 ? options.scale : 1;
134
- // P2-T7 §6.2.12 light layer — tier-capped transient pool flash.
135
- if (preset.light) {
136
- system.flashLight({
137
- position: [position[0] ?? 0, position[1] ?? 0, position[2] ?? 0],
138
- // The particle colour is HDR (up to 9); the light takes chromaticity
139
- // only so `intensity` alone sets the flash energy (9 × 20 = 180 blew
140
- // every lit surface in range to white).
141
- color: lightChromaticity(color),
142
- intensity: preset.light.intensity * (options.intensity ?? 1),
143
- range: preset.light.range,
144
- duration: preset.light.duration
145
- });
238
+ // GU47 E-F: spent one-shots (retired by the system) leave the pool before the cap check.
239
+ for (const [instanceId, entry] of instances) {
240
+ if (entry.alive && entry.emitterId && !system.instanceAlive(entry.emitterId))
241
+ instances.delete(instanceId);
146
242
  }
147
243
  // Pool cap: recycle the oldest live instance when the pool is full.
148
244
  if (instances.size >= EFFECT_INSTANCE_CAP) {
@@ -153,43 +249,205 @@ export function createAppEffects(app, system) {
153
249
  system.removeInstance(entry.emitterId);
154
250
  instances.delete(oldest);
155
251
  }
252
+ const count = options.count ?? recipe.count;
253
+ const sprite = (options.sprite ?? recipe.sprite);
156
254
  const emitterId = system.addInstance(id, {
157
255
  kind: "effect",
158
256
  effect: "particles",
159
257
  id,
160
258
  position,
161
- particleCount: options.continuous ? Math.max(64, options.count ?? 64) : Math.max(1, options.count ?? 24),
162
- ...(options.continuous ? {} : { burst: Math.max(1, options.count ?? 24) }),
163
- materialMode: preset.additive ? "additive-glow" : "soft-alpha",
164
- speed: options.speed ?? preset.speed,
165
- gravity: preset.gravity,
259
+ particleCount: options.continuous ? Math.max(64, count ?? 64) : Math.max(1, count ?? 24),
260
+ ...(options.continuous ? {} : { burst: Math.max(1, count ?? 24) }),
261
+ materialMode: recipe.additive ? "additive-glow" : "soft-alpha",
262
+ ...(recipe.blend !== undefined ? { blend: recipe.blend } : {}),
263
+ speed: options.speed ?? recipe.speed,
264
+ gravity: recipe.gravity,
166
265
  // The preset's own life, size and spread: without them every kind inherited the
167
266
  // emitter defaults (1.2 to 2.4 s lifetime, 5 to 14 cm glow discs) and read as lingering bubbles.
168
- lifetime: preset.life,
169
- size: [preset.size[0] * sizeScale, preset.size[1] * sizeScale],
170
- spread: preset.spread,
267
+ lifetime: recipe.life,
268
+ size: [recipe.size[0] * sizeScale, recipe.size[1] * sizeScale],
269
+ spread: recipe.spread,
171
270
  // a preset's soft discs never grow past this share of the screen height: sparks and dust stay specks, not bubbles
172
- maxScreen: PRESET_MAX_SCREEN[kind] ?? 0.05,
173
- emissionRate: options.continuous ? (options.count ?? 24) * 2 : 0,
271
+ maxScreen: recipe.maxScreen ?? PRESET_MAX_SCREEN[kind] ?? 0.05,
272
+ emissionRate: options.continuous ? (count ?? 24) * 2 : 0,
174
273
  color,
175
- seed: options.seed
274
+ seed: options.seed,
275
+ ...(recipe.drag !== undefined ? { drag: recipe.drag } : {}),
276
+ ...(recipe.direction !== undefined ? { direction: recipe.direction } : {}),
277
+ // GU47 E-F: atlas sprite (call site, else preset) and node following.
278
+ ...(sprite !== undefined ? { sprite } : {}),
279
+ ...(options.attachTo !== undefined ? { attachTo: options.attachTo } : {})
176
280
  });
177
281
  instances.set(id, { id, emitterId, alive: true });
282
+ return id;
283
+ };
284
+ const stopInstance = (id, immediate) => {
285
+ const entry = instances.get(id);
286
+ if (!entry)
287
+ return;
288
+ entry.alive = false;
289
+ if (entry.emitterId)
290
+ system.removeInstance(entry.emitterId);
291
+ if (!immediate)
292
+ instances.delete(id);
293
+ };
294
+ /** Built-in preset path (unchanged behaviour): camera layer, light layer, one pooled emitter. */
295
+ const spawnBuiltin = (kind, position, options) => {
296
+ const preset = BURST_PRESETS[kind] ?? BURST_PRESETS.spark;
297
+ if (options.camera !== false)
298
+ applyPresetLayers(kind);
299
+ const color = toVec3(options.color, preset.color);
300
+ // P2-T7 §6.2.12 light layer — tier-capped transient pool flash.
301
+ if (preset.light) {
302
+ system.flashLight({
303
+ position: [position[0] ?? 0, position[1] ?? 0, position[2] ?? 0],
304
+ // The particle colour is HDR (up to 9); the light takes chromaticity
305
+ // only so `intensity` alone sets the flash energy (9 × 20 = 180 blew
306
+ // every lit surface in range to white).
307
+ color: lightChromaticity(color),
308
+ intensity: preset.light.intensity * (options.intensity ?? 1),
309
+ range: preset.light.range,
310
+ duration: preset.light.duration
311
+ });
312
+ }
313
+ const id = spawnInstance(builtinRecipe(kind), kind, position, options);
178
314
  return {
179
315
  id,
180
316
  get alive() {
181
- return instances.get(id)?.alive ?? false;
317
+ // GU47 E-F: a one-shot is alive until its particles are gone (the system retires spent emitters).
318
+ return (instances.get(id)?.alive ?? false) && system.instanceAlive(id);
319
+ },
320
+ stop: (o) => stopInstance(id, o?.immediate),
321
+ setPosition: (p) => system.setInstanceOrigin(id, p)
322
+ };
323
+ };
324
+ /**
325
+ * GU47 E-F registered preset path: every layer of the spec fires at `position` (after `layer.at` seconds):
326
+ * emitter layers spawn pooled emitters (one-shot bursts for named presets, continuous for authored spec
327
+ * objects), light layers flash the transient pool, camera layers shake/punch, decal layers place a decal.
328
+ */
329
+ const spawnSpec = (spec, position, options) => {
330
+ const groupId = `fx-${nextInstanceId++}`;
331
+ const members = [];
332
+ const timers = [];
333
+ let stopped = false;
334
+ let firstColor;
335
+ const fireLayer = (layer) => {
336
+ if (stopped)
337
+ return;
338
+ switch (layer.type) {
339
+ case "emitter": {
340
+ const recipe = recipeFromLayer(spec.name, layer);
341
+ firstColor ??= toVec3(options.color, recipe.color);
342
+ members.push(spawnInstance(recipe, spec.name, position, options));
343
+ break;
344
+ }
345
+ case "light": {
346
+ const color = typeof layer.color === "string" || Array.isArray(layer.color) ? toVec3(layer.color, [1, 1, 1]) : firstColor ?? [1, 1, 1];
347
+ system.flashLight({
348
+ position: [position[0] ?? 0, position[1] ?? 0, position[2] ?? 0],
349
+ color: lightChromaticity(color),
350
+ intensity: numberOr(layer.intensity, 8) * (options.intensity ?? 1),
351
+ range: numberOr(layer.range, 6),
352
+ duration: numberOr(layer.duration, 0.25)
353
+ });
354
+ break;
355
+ }
356
+ case "camera": {
357
+ if (options.camera === false)
358
+ break;
359
+ const cam = app.camera;
360
+ if (!cam?.shake) {
361
+ if (!cameraWarned) {
362
+ cameraWarned = true;
363
+ system.diagnostics.note("VFX_LAYER_UNAVAILABLE", spec.name, "camera layers skipped — no C-22 camera extension");
364
+ }
365
+ break;
366
+ }
367
+ const configure = layer.configure;
368
+ if (configure)
369
+ cam.shake.configure(configure);
370
+ if (typeof layer.shake === "number")
371
+ cam.shake.add(layer.shake);
372
+ if (layer.punch && typeof layer.punch === "object")
373
+ cam.punch?.trigger(layer.punch);
374
+ break;
375
+ }
376
+ case "decal": {
377
+ const handle = spawnDecal({ position, normal: options.normal ?? [0, 1, 0] }, {
378
+ ...(typeof layer.size === "number" ? { size: layer.size } : {}),
379
+ ...(typeof layer.lifetime === "number" ? { lifetime: layer.lifetime } : {}),
380
+ ...(typeof layer.opacity === "number" ? { opacity: layer.opacity } : {}),
381
+ ...(layer.color !== undefined ? { color: layer.color } : {})
382
+ });
383
+ members.push(handle.id);
384
+ break;
385
+ }
386
+ default:
387
+ if (!unsupportedLayerNoted) {
388
+ unsupportedLayerNoted = true;
389
+ system.diagnostics.note("VFX_PRESET_LAYER_UNSUPPORTED", spec.name, `preset layer type "${layer.type}" is not spawned by burst/spawn (emitter, light, camera and decal are)`);
390
+ }
391
+ }
392
+ };
393
+ // A spec without layers is its named built-in (or spark) as one emitter, as before GU47.
394
+ const layers = spec.layers.length > 0 ? spec.layers : [{ type: "emitter" }];
395
+ for (const layer of layers) {
396
+ const delay = typeof layer.at === "number" && layer.at > 0 ? layer.at : 0;
397
+ if (delay > 0)
398
+ timers.push(scheduleLayer(delay, () => fireLayer(layer)));
399
+ else
400
+ fireLayer(layer);
401
+ }
402
+ return {
403
+ id: groupId,
404
+ get alive() {
405
+ return !stopped && (members.some((member) => system.instanceAlive(member) && (instances.get(member)?.alive ?? true)) || timers.some((timer) => !timer.cancelled && !timer.done));
182
406
  },
183
407
  stop: (o) => {
184
- const entry = instances.get(id);
185
- if (!entry)
186
- return;
187
- entry.alive = false;
188
- if (entry.emitterId)
189
- system.removeInstance(entry.emitterId);
190
- if (!o?.immediate)
191
- instances.delete(id);
408
+ stopped = true;
409
+ for (const timer of timers)
410
+ timer.cancelled = true;
411
+ for (const member of members) {
412
+ if (instances.has(member))
413
+ stopInstance(member, o?.immediate);
414
+ else
415
+ system.removeInstance(member);
416
+ }
192
417
  },
418
+ setPosition: (p) => {
419
+ for (const member of members)
420
+ system.setInstanceOrigin(member, p);
421
+ }
422
+ };
423
+ };
424
+ const spawnEmitter = (kind, position, options) => {
425
+ const spec = registered.get(kind);
426
+ return spec ? spawnSpec(spec, position, options) : spawnBuiltin(kind, position, options);
427
+ };
428
+ // P6-T1 — runtime decal routed through the merged DecalBatch (§6.9) under A3D_QR_VFX_DECALS.
429
+ const spawnDecal = (at, options) => {
430
+ const id = `fx-${nextInstanceId++}`;
431
+ const size = Math.max(0.01, options?.size ?? 0.5);
432
+ system.addInstance(id, {
433
+ kind: "effect",
434
+ effect: "decal",
435
+ id,
436
+ position: at.position,
437
+ decal: {
438
+ size: [size, size],
439
+ normal: at.normal,
440
+ baseOpacity: options?.opacity ?? 0.85,
441
+ ...(options?.color !== undefined ? { color: options.color } : {}),
442
+ ...(options?.lifetime !== undefined ? { lifetime: options.lifetime } : {})
443
+ }
444
+ });
445
+ return {
446
+ id,
447
+ get alive() {
448
+ return true;
449
+ },
450
+ stop: () => system.removeInstance(id),
193
451
  setPosition: (p) => system.setInstanceOrigin(id, p)
194
452
  };
195
453
  };
@@ -204,51 +462,52 @@ export function createAppEffects(app, system) {
204
462
  return spawnEmitter(kind, position, options ?? {});
205
463
  },
206
464
  spawn(effect, at, options) {
207
- const kind = typeof effect === "string" ? effect : effect.name;
465
+ // GU47 E-F: `{ node, socket }` (or the spec's own attachTo) makes the effect follow that node; the old
466
+ // code spawned it at the world origin.
467
+ const onNode = !Array.isArray(at) && typeof at.node === "string";
208
468
  const position = Array.isArray(at) ? at : [0, 0, 0];
209
- // A named preset is a one-shot impact: it bursts and dies with its particles. Only an authored
210
- // AuraVfxEffectSpec object is a looping effect that the caller stops.
211
- return spawnEmitter(kind, position, { ...(options ?? {}), continuous: typeof effect !== "string" });
212
- },
213
- trail(_target, options) {
214
- void options;
215
- system.diagnostics.note("VFX_TRAIL_PENDING", "", "effects.trail lands with P2-T5 ribbons");
216
- return {
217
- id: `fx-${nextInstanceId++}`,
218
- get alive() {
219
- return false;
220
- },
221
- stop: () => { },
222
- setPosition: () => { }
223
- };
469
+ const attachTo = onNode ? at : typeof effect === "string" ? undefined : effect.attachTo;
470
+ const spawnOptions = { ...(options ?? {}), continuous: typeof effect !== "string", ...(attachTo !== undefined ? { attachTo } : {}) };
471
+ // A named preset (registered first, then built-in) is a one-shot impact: it bursts and dies with its
472
+ // particles. Only an authored AuraVfxEffectSpec object is a looping effect that the caller stops.
473
+ return typeof effect === "string" ? spawnEmitter(effect, position, spawnOptions) : spawnSpec(effect, position, spawnOptions);
224
474
  },
225
- decal(at, options) {
226
- // P6-T1 — runtime decal routed through the merged DecalBatch (§6.9)
227
- // under A3D_QR_VFX_DECALS.
475
+ trail(target, options) {
476
+ // GU47 E-F: a real ribbon on the RibbonBatch that follows `target` (node id, handle or { node, socket }).
477
+ // Runtime effects "off" drops trails like every other runtime-spawned effect.
228
478
  const id = `fx-${nextInstanceId++}`;
229
- const size = Math.max(0.01, options?.size ?? 0.5);
230
- system.addInstance(id, {
231
- kind: "effect",
232
- effect: "decal",
233
- id,
234
- position: at.position,
235
- decal: {
236
- size: [size, size],
237
- normal: at.normal,
238
- baseOpacity: options?.opacity ?? 0.85,
239
- ...(options?.color !== undefined ? { color: options.color } : {}),
240
- ...(options?.lifetime !== undefined ? { lifetime: options.lifetime } : {})
241
- }
242
- });
479
+ const live = system.runtimeEffects !== "off";
480
+ if (live) {
481
+ system.addTrail(id, target, {
482
+ width: options.width,
483
+ life: options.life,
484
+ color: options.color ?? "#ffffff",
485
+ ...(options.widthOverSpeed !== undefined ? { widthOverSpeed: options.widthOverSpeed } : {}),
486
+ ...(options.colorTail !== undefined ? { colorTail: options.colorTail } : {})
487
+ });
488
+ }
243
489
  return {
244
490
  id,
245
491
  get alive() {
246
- return true;
492
+ return live && system.trailInfo(id) !== null;
247
493
  },
248
- stop: () => system.removeInstance(id),
249
- setPosition: (p) => system.setInstanceOrigin(id, p)
494
+ get length() {
495
+ return system.trailInfo(id)?.length ?? 0;
496
+ },
497
+ get pointCount() {
498
+ return system.trailInfo(id)?.pointCount ?? 0;
499
+ },
500
+ stop: (o) => system.stopTrail(id, o?.immediate === true),
501
+ setPosition: (p) => {
502
+ system.trailPush(id, [p[0] ?? 0, p[1] ?? 0, p[2] ?? 0]);
503
+ },
504
+ clear: () => system.clearTrail(id),
505
+ translate: (dx, dy, dz) => system.translateTrail(id, [dx, dy, dz])
250
506
  };
251
507
  },
508
+ decal(at, options) {
509
+ return spawnDecal(at, options);
510
+ },
252
511
  get presets() {
253
512
  const out = {};
254
513
  for (const [k, v] of presets)
@@ -256,6 +515,8 @@ export function createAppEffects(app, system) {
256
515
  return out;
257
516
  },
258
517
  registerPreset(kind, spec) {
518
+ // GU47 E-F: registered names (new or overriding a built-in) resolve in burst/spawn before BURST_PRESETS.
519
+ registered.set(kind, spec);
259
520
  presets.set(kind, spec);
260
521
  },
261
522
  get liveCount() {
@@ -267,6 +528,8 @@ export function createAppEffects(app, system) {
267
528
  system.removeInstance(entry.emitterId);
268
529
  }
269
530
  instances.clear();
531
+ // GU47 E-F: runtime trails and any other runtime emitter go too.
532
+ system.clearRuntimeParticles();
270
533
  }
271
534
  };
272
535
  }
@@ -369,6 +632,6 @@ function toVec3(c, fallback) {
369
632
  }
370
633
  if (Array.isArray(c) && c.length >= 3)
371
634
  return [Number(c[0]), Number(c[1]), Number(c[2])];
372
- return fallback;
635
+ return [fallback[0], fallback[1], fallback[2]];
373
636
  }
374
637
  //# sourceMappingURL=effects-api.js.map