@zephyr3d/scene 0.9.4 → 0.9.6

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 (517) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"animationset.js","sources":["../../src/animation/animationset.ts"],"sourcesContent":["import { weightedAverage, Disposable, Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport type { DRef, IDisposable, Nullable } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene';\r\nimport { AnimationClip } from './animation';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport { NodeRotationTrack } from './rotationtrack';\r\nimport { NodeEulerRotationTrack } from './eulerrotationtrack';\r\nimport { NodeTranslationTrack } from './translationtrack';\r\nimport { NodeScaleTrack } from './scaletrack';\r\nimport { HumanoidBodyRig, Skeleton } from './skeleton';\r\n\r\n/**\r\n * Options for playing an animation.\r\n *\r\n * Controls looping, playback speed (including reverse), and fade-in blending.\r\n * @public\r\n **/\r\nexport type PlayAnimationOptions = {\r\n /**\r\n * Number of loops to play.\r\n *\r\n * - 0: infinite looping (default).\r\n * - n \\> 0: play exactly n loops (each loop is one full duration of the clip).\r\n */\r\n repeat?: number;\r\n /**\r\n * Playback speed multiplier.\r\n *\r\n * - 1: normal speed (default).\r\n * - \\>1: faster; \\<1: slower.\r\n * - Negative values play the clip in reverse. The initial `currentTime` will be set to the end.\r\n */\r\n speedRatio?: number;\r\n /**\r\n * Fade-in duration in seconds.\r\n *\r\n * Interpolates the animation weight from 0 to the clip's configured weight over this time.\r\n * Use together with `stopAnimation(..., { fadeOut })` for smooth cross-fading.\r\n * Default is 0 (no fade-in).\r\n */\r\n fadeIn?: number;\r\n /**\r\n * Weight of the animation clip.\r\n *\r\n * Used during blending when multiple animations affect the same property.\r\n * Default is the clip's configured weight.\r\n */\r\n weight?: number;\r\n};\r\n\r\n/**\r\n * Options for stopping an animation.\r\n *\r\n * Allows a graceful fade-out instead of abrupt stop.\r\n * @public\r\n */\r\nexport type StopAnimationOptions = {\r\n /**\r\n * Fade-out duration in seconds.\r\n *\r\n * Interpolates the current animation weight down to 0 over this time.\r\n * Default is 0 (immediate stop).\r\n */\r\n fadeOut?: number;\r\n};\r\n\r\ntype JointRetargetRemap = {\r\n dstNode: SceneNode;\r\n dstJointIndex: number;\r\n srcNode: SceneNode;\r\n srcBindRotInv: Quaternion;\r\n dstBindRot: Quaternion;\r\n srcBindPos: Vector3;\r\n dstBindPos: Vector3;\r\n translationScale: number;\r\n translationRotation?: Quaternion;\r\n};\r\n\r\nfunction cloneInterpolator(src: Interpolator): Interpolator {\r\n return new Interpolator(\r\n src.mode,\r\n src.target,\r\n src.inputs instanceof Float32Array ? new Float32Array(src.inputs) : [...src.inputs],\r\n src.outputs instanceof Float32Array ? new Float32Array(src.outputs) : [...src.outputs]\r\n );\r\n}\r\n\r\nfunction createJointRetargetRemap(\r\n srcSkeleton: Skeleton,\r\n dstSkeleton: Skeleton,\r\n srcJoint: SceneNode,\r\n dstJoint: SceneNode,\r\n translationRotation?: Quaternion\r\n): JointRetargetRemap {\r\n const si = srcSkeleton.joints.indexOf(srcJoint);\r\n const di = dstSkeleton.joints.indexOf(dstJoint);\r\n const srcBindPose = srcSkeleton.bindPose[si];\r\n const dstBindPose = dstSkeleton.bindPose[di];\r\n const srcLen = srcBindPose.position.magnitude;\r\n const dstLen = dstBindPose.position.magnitude;\r\n return {\r\n dstNode: dstJoint,\r\n dstJointIndex: di,\r\n srcNode: srcJoint,\r\n srcBindRotInv: Quaternion.inverse(srcBindPose.rotation),\r\n dstBindRot: dstBindPose.rotation.clone(),\r\n srcBindPos: srcBindPose.position.clone(),\r\n dstBindPos: dstBindPose.position.clone(),\r\n translationScale: srcLen > 1e-6 ? dstLen / srcLen : 1,\r\n translationRotation\r\n };\r\n}\r\n\r\nfunction retargetRotation(qSrcAnim: Quaternion, remap: JointRetargetRemap, out: Quaternion): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcAnim, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out.inplaceNormalize();\r\n}\r\n\r\nfunction retargetRotationTangent(\r\n qSrcTangent: Quaternion,\r\n remap: JointRetargetRemap,\r\n out: Quaternion\r\n): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcTangent, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationValue(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.subBy(remap.srcBindPos);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n out.addBy(remap.dstBindPos);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationTangent(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n return out;\r\n}\r\n\r\nfunction retargetRotationTrack(src: NodeRotationTrack, remap: JointRetargetRemap): NodeRotationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 12 : 4;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 4 : 0;\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n q.setXYZW(\r\n srcOutputs[base + t],\r\n srcOutputs[base + t + 1],\r\n srcOutputs[base + t + 2],\r\n srcOutputs[base + t + 3]\r\n );\r\n retargetRotation(q, remap, q);\r\n if (isCubic) {\r\n // Cubic quaternion tangents live in the same component space, so apply the\r\n // same constant bind-pose transform without normalizing them.\r\n q.setXYZW(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2], srcOutputs[base + 3]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base);\r\n newOutputs.set(\r\n retargetRotation(new Quaternion(srcOutputs.subarray(base + 4, base + 8)), remap, q),\r\n base + 4\r\n );\r\n q.setXYZW(srcOutputs[base + 8], srcOutputs[base + 9], srcOutputs[base + 10], srcOutputs[base + 11]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base + 8);\r\n } else {\r\n newOutputs.set(q, base);\r\n }\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'quat',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetEulerToRotationTrack(\r\n src: NodeEulerRotationTrack,\r\n remap: JointRetargetRemap\r\n): NodeRotationTrack {\r\n const srcInputs = src.interpolator.inputs as Float32Array;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const t = isCubic ? 3 : 0;\r\n const numFrames = srcInputs.length;\r\n const newOutputs = new Float32Array(numFrames * 4);\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride + t;\r\n q.fromEulerAngle(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n retargetRotation(q, remap, q);\r\n newOutputs.set(q, f * 4);\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode === 'step' ? 'step' : 'linear',\r\n 'quat',\r\n new Float32Array(srcInputs),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetTranslationTrack(\r\n src: NodeTranslationTrack,\r\n remap: JointRetargetRemap\r\n): NodeTranslationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 3 : 0;\r\n const v = new Vector3();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n v.setXYZ(srcOutputs[base + t], srcOutputs[base + t + 1], srcOutputs[base + t + 2]);\r\n retargetTranslationValue(v, remap, v);\r\n if (isCubic) {\r\n v.setXYZ(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base);\r\n v.setXYZ(srcOutputs[base + 3], srcOutputs[base + 4], srcOutputs[base + 5]);\r\n newOutputs.set(retargetTranslationValue(v, remap, v), base + 3);\r\n v.setXYZ(srcOutputs[base + 6], srcOutputs[base + 7], srcOutputs[base + 8]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base + 6);\r\n } else {\r\n newOutputs.set(v, base);\r\n }\r\n }\r\n return new NodeTranslationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'vec3',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction findRotationTrack(\r\n tracks: AnimationTrack[] | undefined\r\n): NodeRotationTrack | NodeEulerRotationTrack | null {\r\n return (tracks?.find(\r\n (track) => track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack\r\n ) ?? null) as NodeRotationTrack | NodeEulerRotationTrack | null;\r\n}\r\n\r\nfunction collectTrackTimes(track: AnimationTrack | null, times: Set<number>) {\r\n if (track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack) {\r\n for (const time of track.interpolator.inputs as Float32Array) {\r\n times.add(time);\r\n }\r\n }\r\n}\r\n\r\nfunction sampleRotationTrack(\r\n track: NodeRotationTrack | NodeEulerRotationTrack | null,\r\n time: number,\r\n fallback: Quaternion,\r\n out: Quaternion\r\n): Quaternion {\r\n if (!track) {\r\n out.set(fallback);\r\n return out;\r\n }\r\n const state = track.calculateState({}, time);\r\n out.set(state);\r\n return out;\r\n}\r\n\r\nfunction bakeHumanoidRotationTracks(\r\n sourceClip: AnimationClip,\r\n srcSkeleton: Skeleton,\r\n dstSkeleton: Skeleton,\r\n srcRootRotation: Quaternion,\r\n dstRootRotation: Quaternion,\r\n dstClip: AnimationClip,\r\n remaps: JointRetargetRemap[]\r\n) {\r\n const rotationTracksByRemap = new Map<\r\n JointRetargetRemap,\r\n NodeRotationTrack | NodeEulerRotationTrack | null\r\n >();\r\n const times = new Set<number>([0, sourceClip.timeDuration]);\r\n const remapsByDstNode = new Map<object, JointRetargetRemap>();\r\n const srcJointSet = new Set(srcSkeleton.joints);\r\n const dstJointSet = new Set(dstSkeleton.joints);\r\n const srcBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const dstBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const srcRotationTrackByNode = new Map<SceneNode, NodeRotationTrack | NodeEulerRotationTrack | null>();\r\n\r\n for (let i = 0; i < srcSkeleton.joints.length; i++) {\r\n const joint = srcSkeleton.joints[i];\r\n srcBindRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);\r\n const track = findRotationTrack(sourceClip.tracks.get(joint));\r\n srcRotationTrackByNode.set(joint, track);\r\n collectTrackTimes(track, times);\r\n }\r\n for (let i = 0; i < dstSkeleton.joints.length; i++) {\r\n dstBindRotByNode.set(dstSkeleton.joints[i], dstSkeleton.bindPose[i].rotation);\r\n }\r\n for (const remap of remaps) {\r\n const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));\r\n rotationTracksByRemap.set(remap, track);\r\n remapsByDstNode.set(remap.dstNode, remap);\r\n }\r\n const inputs = new Float32Array([...times].sort((a, b) => a - b));\r\n const srcBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const srcAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const outputsByRemap = new Map<JointRetargetRemap, Float32Array>();\r\n const tmpLocalRot = new Quaternion();\r\n const tmpWorldDelta = new Quaternion();\r\n const tmpParentInv = new Quaternion();\r\n\r\n for (const remap of remaps) {\r\n outputsByRemap.set(remap, new Float32Array(inputs.length * 4));\r\n }\r\n\r\n function getSrcBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = srcBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (srcBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && srcJointSet.has(parent)) {\r\n Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, rot, rot);\r\n }\r\n srcBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = dstBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && dstJointSet.has(parent)) {\r\n Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(dstRootRotation, rot, rot);\r\n }\r\n dstBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getSrcAnimWorldRot(node: SceneNode, time: number): Quaternion {\r\n let rot = srcAnimWorldRots.get(node);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n srcAnimWorldRots.set(node, rot);\r\n }\r\n const parent = node.parent;\r\n const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;\r\n sampleRotationTrack(\r\n srcRotationTrackByNode.get(node) ?? null,\r\n time,\r\n srcBindRotByNode.get(node) ?? Quaternion.identity(),\r\n tmpLocalRot\r\n );\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, tmpLocalRot, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstAnimWorldRot(remap: JointRetargetRemap, time: number): Quaternion {\r\n let rot = dstAnimWorldRots.get(remap.dstNode);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n dstAnimWorldRots.set(remap.dstNode, rot);\r\n }\r\n const srcBindWorldRot = getSrcBindWorldRot(remap.srcNode);\r\n const srcAnimWorldRot = getSrcAnimWorldRot(remap.srcNode, time);\r\n Quaternion.multiply(srcAnimWorldRot, Quaternion.inverse(srcBindWorldRot, tmpWorldDelta), tmpWorldDelta);\r\n Quaternion.multiply(tmpWorldDelta, getDstBindWorldRot(remap.dstNode), rot);\r\n return rot;\r\n }\r\n\r\n function getDstParentAnimWorldRot(node: SceneNode, time: number): Quaternion | null {\r\n const parent = node.parent;\r\n if (!parent || !dstJointSet.has(parent)) {\r\n return dstRootRotation;\r\n }\r\n const mappedParent = remapsByDstNode.get(parent);\r\n if (mappedParent) {\r\n return getDstAnimWorldRot(mappedParent, time);\r\n }\r\n let rot = dstAnimWorldRots.get(parent);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(parent) ?? Quaternion.identity()).clone();\r\n const parentWorldRot = getDstParentAnimWorldRot(parent, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, rot, rot);\r\n }\r\n dstAnimWorldRots.set(parent, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n for (let i = 0; i < inputs.length; i++) {\r\n const time = inputs[i];\r\n srcAnimWorldRots.clear();\r\n dstAnimWorldRots.clear();\r\n for (const remap of remaps) {\r\n const dstAnimWorldRot = getDstAnimWorldRot(remap, time);\r\n const parentWorldRot = getDstParentAnimWorldRot(remap.dstNode, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(Quaternion.inverse(parentWorldRot, tmpParentInv), dstAnimWorldRot, tmpLocalRot);\r\n } else {\r\n tmpLocalRot.set(dstAnimWorldRot);\r\n }\r\n tmpLocalRot.inplaceNormalize();\r\n outputsByRemap.get(remap)!.set(tmpLocalRot, i * 4);\r\n }\r\n }\r\n\r\n for (const remap of remaps) {\r\n if (!rotationTracksByRemap.get(remap)) {\r\n continue;\r\n }\r\n const outputs = new Float32Array(outputsByRemap.get(remap)!);\r\n const track = new NodeRotationTrack(\r\n new Interpolator('linear', 'quat', new Float32Array(inputs), outputs)\r\n );\r\n track.name = 'rotation';\r\n track.target = remap.dstNode.persistentId;\r\n track.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(remap.dstNode, track);\r\n }\r\n}\r\n\r\n/**\r\n * Animation set\r\n *\r\n * Manages a collection of named animation clips for a model and orchestrates:\r\n * - Playback state (time, loops, speed, weights, fade-in/out).\r\n * - Blending across multiple tracks targeting the same property via weighted averages.\r\n * - Skeleton usage and application for clips that drive skeletal animation.\r\n * - Active track registration and cleanup as clips start/stop.\r\n *\r\n * Usage:\r\n * - Create or retrieve `AnimationClip`s by name.\r\n * - Start playback with `playAnimation(name, options)`.\r\n * - Advance animation with `update(deltaSeconds)`.\r\n * - Optionally adjust weight while playing with `setAnimationWeight(name, weight)`.\r\n *\r\n * Lifetime:\r\n * - Disposing the set releases references to the model, clips, and clears active state.\r\n *\r\n * @public\r\n */\r\nexport class AnimationSet extends Disposable implements IDisposable {\r\n /** @internal */\r\n private _model: SceneNode;\r\n /** @internal */\r\n private _animations: Partial<Record<string, AnimationClip>>;\r\n /** @internal */\r\n private _skeletons: DRef<Skeleton>[];\r\n /** @internal */\r\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\r\n /** @internal */\r\n private readonly _activeSkeletons: Map<Skeleton, number>;\r\n /** @internal */\r\n private readonly _activeAnimations: Map<\r\n AnimationClip,\r\n {\r\n currentTime: number;\r\n repeat: number;\r\n repeatCounter: number;\r\n weight: number;\r\n speedRatio: number;\r\n firstFrame: boolean;\r\n fadeIn: number;\r\n fadeOut: number;\r\n fadeOutStart: number;\r\n animateTime: number;\r\n }\r\n >;\r\n /**\r\n * Create an AnimationSet controlling the provided model.\r\n *\r\n * @param model - The SceneNode (model root) controlled by this animation set.\r\n */\r\n constructor(model: SceneNode) {\r\n super();\r\n this._model = model;\r\n this._animations = {};\r\n this._activeTracks = new Map();\r\n this._activeSkeletons = new Map();\r\n this._activeAnimations = new Map();\r\n this._skeletons = [];\r\n }\r\n /**\r\n * The model (SceneNode) controlled by this animation set.\r\n */\r\n get model() {\r\n return this._model;\r\n }\r\n /**\r\n * Number of animation clips registered in this set.\r\n */\r\n get numAnimations() {\r\n return Object.getOwnPropertyNames(this._animations).length;\r\n }\r\n /**\r\n * The skeletons used by animations in this set.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /**\r\n * Retrieve an animation clip by name.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n get(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Create and register a new animation clip.\r\n *\r\n * @param name - Unique name for the animation clip.\r\n * @param embedded - Whether the clip is embedded/owned (implementation-specific). Default false.\r\n * @returns The created clip, or null if the name is empty or not unique.\r\n */\r\n createAnimation(name: string, embedded = false) {\r\n if (!name || this._animations[name]) {\r\n console.error('Animation must have unique name');\r\n return null;\r\n } else {\r\n const animation = new AnimationClip(name, this, embedded);\r\n this._animations[name] = animation;\r\n this._model.scene?.queueUpdateNode(this._model);\r\n return animation;\r\n }\r\n }\r\n /**\r\n * Delete and dispose an animation clip by name.\r\n *\r\n * - If the animation is currently playing, it is first stopped (immediately).\r\n *\r\n * @param name - Name of the animation to remove.\r\n */\r\n deleteAnimation(name: string) {\r\n const animation = this._animations[name];\r\n if (animation) {\r\n this.stopAnimation(name);\r\n delete this._animations[name];\r\n animation.dispose();\r\n }\r\n }\r\n /**\r\n * Get the list of all registered animation names.\r\n *\r\n * @returns An array of clip names.\r\n */\r\n getAnimationNames() {\r\n return Object.keys(this._animations);\r\n }\r\n /**\r\n * Advance and apply active animations.\r\n *\r\n * Responsibilities per call:\r\n * - Update time cursor for each active clip (respecting speedRatio and looping).\r\n * - Enforce repeat limits and apply fade-out termination if configured.\r\n * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)\r\n * and apply the resulting state to the target.\r\n * - Apply all active skeletons to update skinning transforms.\r\n *\r\n * @param deltaInSeconds - Time step in seconds since last update.\r\n */\r\n update(deltaInSeconds: number) {\r\n this._activeAnimations.forEach((v, k) => {\r\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\r\n v.fadeOutStart = v.animateTime;\r\n }\r\n // Update animation time\r\n if (v.firstFrame) {\r\n v.firstFrame = false;\r\n } else {\r\n const timeAdvance = deltaInSeconds * v.speedRatio;\r\n v.currentTime += timeAdvance;\r\n v.animateTime += timeAdvance;\r\n if (v.currentTime > k.timeDuration) {\r\n v.repeatCounter++;\r\n v.currentTime = 0;\r\n } else if (v.currentTime < 0) {\r\n v.repeatCounter++;\r\n v.currentTime = k.timeDuration;\r\n }\r\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\r\n this.stopAnimation(k.name);\r\n } else if (v.fadeOut > 0) {\r\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name);\r\n }\r\n }\r\n }\r\n });\r\n // Update tracks\r\n this._activeTracks.forEach((v, k) => {\r\n v.forEach((alltracks) => {\r\n // Only deal with tracks which have not been removed\r\n const tracks = alltracks.filter(\r\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\r\n );\r\n if (tracks.length > 0) {\r\n const weights = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const weight = info.weight;\r\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\r\n let fadeOut = 1;\r\n if (info.fadeOut !== 0) {\r\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\r\n }\r\n return weight * fadeIn * fadeOut;\r\n });\r\n const states = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const t = (info.currentTime / track.animation!.timeDuration) * track.getDuration();\r\n return track.calculateState(k, t);\r\n });\r\n const state = weightedAverage(weights, states, (a, b, t) => {\r\n return tracks[0].mixState(a, b, t);\r\n });\r\n tracks[0].applyState(k, state);\r\n }\r\n });\r\n });\r\n // Update skeletons\r\n this._skeletons.forEach((v) => {\r\n v.get()?.apply(deltaInSeconds);\r\n });\r\n }\r\n /**\r\n * Check whether an animation is currently playing.\r\n *\r\n * @param name - Optional animation name. If omitted, returns true if any animation is playing.\r\n * @returns True if playing; otherwise false.\r\n */\r\n isPlayingAnimation(name?: string) {\r\n if (name) {\r\n const animation = this._animations[name];\r\n return !!animation && this._activeAnimations.has(animation);\r\n }\r\n return this._activeAnimations.size > 0;\r\n }\r\n /**\r\n * Get an animation clip by name.\r\n *\r\n * Alias of `get(name)` returning a nullable type.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n getAnimationClip(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Set the runtime blend weight for a currently playing animation.\r\n *\r\n * Has no effect if the clip is not active.\r\n *\r\n * @param name - Name of the playing animation.\r\n * @param weight - New weight value used during blending.\r\n */\r\n setAnimationWeight(name: string, weight: number) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.weight = weight;\r\n }\r\n }\r\n /**\r\n * Start (or update) playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If the clip is already playing, updates its fade-in (resets fade-out).\r\n * - Otherwise initializes playback state (repeat counter, speed, weight, initial time).\r\n * - Registers clip tracks and skeletons into the active sets for blending and application.\r\n *\r\n * @param name - Name of the animation to play.\r\n * @param options - Playback options (repeat, speedRatio, fadeIn).\r\n */\r\n playAnimation(name: string, options?: PlayAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.fadeOut = 0;\r\n info.fadeIn = fadeIn;\r\n } else {\r\n const repeat = options?.repeat ?? 0;\r\n const speedRatio = options?.speedRatio ?? 1;\r\n const weight = options?.weight ?? ani.weight ?? 1;\r\n this._activeAnimations.set(ani, {\r\n repeat,\r\n weight,\r\n speedRatio,\r\n fadeIn,\r\n fadeOut: 0,\r\n repeatCounter: 0,\r\n currentTime: speedRatio < 0 ? ani.timeDuration : 0,\r\n animateTime: 0,\r\n fadeOutStart: 0,\r\n firstFrame: true\r\n });\r\n ani.tracks?.forEach((v, k) => {\r\n let nodeTracks = this._activeTracks.get(k);\r\n if (!nodeTracks) {\r\n nodeTracks = new Map();\r\n this._activeTracks.set(k, nodeTracks);\r\n }\r\n for (const track of v) {\r\n const blendId = track.getBlendId();\r\n let blendedTracks = nodeTracks.get(blendId);\r\n if (!blendedTracks) {\r\n blendedTracks = [];\r\n nodeTracks.set(blendId, blendedTracks);\r\n }\r\n blendedTracks.push(track);\r\n }\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const skeleton = this.model.findSkeletonById(k);\r\n if (skeleton) {\r\n const refcount = this._activeSkeletons.get(skeleton);\r\n if (refcount) {\r\n this._activeSkeletons.set(skeleton, refcount + 1);\r\n } else {\r\n this._activeSkeletons.set(skeleton, 1);\r\n }\r\n skeleton.playing = true;\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Stop playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If `options.fadeOut > 0`, marks the clip for fade-out; actual removal occurs after fade completes.\r\n * - If `fadeOut` is 0 or omitted, immediately:\r\n * - Removes the clip from active animations.\r\n * - Unregisters its tracks from active track maps.\r\n * - Decrements skeleton reference counts; resets and removes skeletons when refcount reaches 0.\r\n *\r\n * @param name - Name of the animation to stop.\r\n * @param options - Optional fade-out configuration.\r\n */\r\n stopAnimation(name: string, options?: StopAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\r\n if (fadeOut !== 0) {\r\n info.fadeOut = fadeOut;\r\n info.fadeOutStart = -1;\r\n } else {\r\n this._activeAnimations.delete(ani);\r\n this._activeTracks.forEach((v) => {\r\n v.forEach((tracks, id) => {\r\n v.set(\r\n id,\r\n tracks.filter((track) => track.animation !== ani)\r\n );\r\n });\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const skeleton = this.model.findSkeletonById(k);\r\n if (skeleton) {\r\n const refcount = this._activeSkeletons.get(skeleton)!;\r\n if (refcount === 1) {\r\n skeleton.reset();\r\n this._activeSkeletons.delete(skeleton);\r\n } else {\r\n this._activeSkeletons.set(skeleton, refcount - 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.\r\n *\r\n * Prerequisites:\r\n * - Both source and destination skeletons must have a non-null `humanoidJointMapping`.\r\n * - Joints are matched by shared `HumanoidBodyRig` / `HumanoidHandRig` keys instead of joint names.\r\n * - The source clip must exist in `sourceSet` and must be driven by exactly one skeleton.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n */\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string\r\n ): AnimationClip | null {\r\n const destName = targetName ?? animationName;\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n if (sourceClip.skeletons.size !== 1) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: source animation clip must be affected by exactly one skeleton`\r\n );\r\n return null;\r\n }\r\n const srcSkeletonId = [...sourceClip.skeletons][0];\r\n const srcSkeleton = Skeleton.findSkeletonById(srcSkeletonId);\r\n if (!srcSkeleton) {\r\n console.error(`copyHumanoidAnimationFrom: source skeleton '${srcSkeletonId}' not found`);\r\n return null;\r\n }\r\n\r\n // Check that source skeleton has humanoid mapping\r\n const srcHumanoidMapping = srcSkeleton.humanoidJointMapping;\r\n if (!srcHumanoidMapping) {\r\n console.error(`copyHumanoidAnimationFrom: source skeleton does not have a humanoid joint mapping`);\r\n return null;\r\n }\r\n\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n // Find a destination skeleton that has a humanoid mapping and share at least the body rig keys\r\n let srcJointsFiltered: SceneNode[] = [];\r\n let dstJointsFiltered: SceneNode[] = [];\r\n\r\n const dstSkeleton = this._skeletons\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n // Check that destination skeleton has humanoid mapping\r\n const dstHumanoidMapping = sk.humanoidJointMapping;\r\n if (!dstHumanoidMapping) {\r\n return false;\r\n }\r\n\r\n // Collect matched (srcJoint, dstJoint) pairs via shared humanoid rig keys\r\n const srcMatched: SceneNode[] = [];\r\n const dstMatched: SceneNode[] = [];\r\n\r\n // Match body rig joints\r\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\r\n const srcJoint = srcHumanoidMapping.body[key];\r\n const dstJoint = dstHumanoidMapping.body[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n\r\n // Match left hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.leftHand && dstHumanoidMapping.leftHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.leftHand\r\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\r\n const srcJoint = srcHumanoidMapping.leftHand[key];\r\n const dstJoint = dstHumanoidMapping.leftHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n // Match right hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.rightHand && dstHumanoidMapping.rightHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.rightHand\r\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\r\n const srcJoint = srcHumanoidMapping.rightHand[key];\r\n const dstJoint = dstHumanoidMapping.rightHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n if (srcMatched.length === 0) {\r\n return false;\r\n }\r\n\r\n srcJointsFiltered = srcMatched;\r\n dstJointsFiltered = dstMatched;\r\n return true;\r\n });\r\n\r\n if (!dstSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: no matching humanoid skeleton in target set for '${srcSkeletonId}'`\r\n );\r\n return null;\r\n }\r\n\r\n // Compute the world-space rotation of the parent chain above the Hips joint,\r\n // walking ALL ancestor nodes up to (but not including) the model root.\r\n // This must include non-joint nodes such as \"Armature\" in Mixamo rigs, which\r\n // carry a 90° X rotation that is NOT captured by humanoidRootRotation (which\r\n // only traverses nodes inside the skeleton joints list).\r\n function computeHipsParentChainRotation(\r\n hipsNode: SceneNode,\r\n modelRoot: SceneNode,\r\n skeleton: Skeleton\r\n ): Quaternion {\r\n const result = Quaternion.identity();\r\n const jointSet = new Set(skeleton.joints);\r\n let p = hipsNode.parent;\r\n while (p && p !== modelRoot) {\r\n if (!jointSet.has(p)) {\r\n Quaternion.multiply(p.rotation, result, result);\r\n }\r\n p = p.parent;\r\n }\r\n return result;\r\n }\r\n\r\n const srcHipsNode = srcSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const dstHipsNode = dstSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const srcRootRot = computeHipsParentChainRotation(srcHipsNode, sourceSet.model, srcSkeleton);\r\n const dstRootRot = computeHipsParentChainRotation(dstHipsNode, this._model, dstSkeleton);\r\n const hipsTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcRootRot);\r\n const jointRemaps: JointRetargetRemap[] = [];\r\n const mappedSrcNodes = new Set<SceneNode>();\r\n const mappedDstNodes = new Set<SceneNode>();\r\n // Build remap for matched joint pairs\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n if (mappedSrcNodes.has(srcJoint) || mappedDstNodes.has(dstJoint)) {\r\n continue;\r\n }\r\n mappedSrcNodes.add(srcJoint);\r\n mappedDstNodes.add(dstJoint);\r\n const isHipsBone = srcJoint === srcHipsNode;\r\n nodeMap.set(srcJoint, dstJoint);\r\n const remap = createJointRetargetRemap(\r\n srcSkeleton,\r\n dstSkeleton,\r\n srcJoint,\r\n dstJoint,\r\n isHipsBone ? hipsTranslationRotation : undefined\r\n );\r\n jointRemaps.push(remap);\r\n jointRemapBySrcNode.set(srcJoint, remap);\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n bakeHumanoidRotationTracks(\r\n sourceClip,\r\n srcSkeleton,\r\n dstSkeleton,\r\n srcRootRot,\r\n dstRootRot,\r\n dstClip,\r\n jointRemaps\r\n );\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n // Not every humanoid joint must have a track; skip silently\r\n continue;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(\r\n `copyHumanoidAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`\r\n );\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n }\r\n /**\r\n * Copy an animation clip from another AnimationSet into this one.\r\n *\r\n * Prerequisites:\r\n * - Both sets must reference skeletons with identical joint names and counts.\r\n * - The source clip must exist in `sourceSet`.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from\r\n * skeleton structure matching.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n *\r\n * @deprecated Use the new {@link AnimationSet.copyHumanoidAnimationFrom} method instead.\r\n */\r\n copyAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n excludeJoint?: (jointName: string) => boolean\r\n ): AnimationClip | null {\r\n const destName = targetName ?? animationName;\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n if (sourceClip.skeletons.size !== 1) {\r\n console.error(`copyAnimationFrom: source animation clip must be affected by exactly one skeleton`);\r\n return null;\r\n }\r\n const srcSkeletonId = [...sourceClip.skeletons][0];\r\n const srcSkeleton = Skeleton.findSkeletonById(srcSkeletonId);\r\n if (!srcSkeleton) {\r\n console.error(`copyAnimationFrom: source skeleton '${srcSkeletonId}' not found`);\r\n return null;\r\n }\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n const jointsFiltered = srcSkeleton.joints.filter((j) => !excludeJoint?.(j.name));\r\n const srcRootNode = findRootJoint(jointsFiltered);\r\n if (!srcRootNode) {\r\n console.error(`copyAnimationFrom: cannot determine the root joint for source skeleton`);\r\n return null;\r\n }\r\n // Build filtered joint lists for matching (exclude joints rejected by filterJoint)\r\n const srcJointsFiltered = sortJoints(srcRootNode, jointsFiltered);\r\n if (!srcJointsFiltered) {\r\n console.error(`copyAnimationFrom: invalid source skeleton structure`);\r\n return null;\r\n }\r\n let dstJointsFiltered: SceneNode[] = [];\r\n const dstSkeleton = this._skeletons\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n const jointsFiltered = sk.joints.filter((j) => !excludeJoint?.(j.name));\r\n if (jointsFiltered.length !== srcJointsFiltered.length) {\r\n return false;\r\n }\r\n const rootNode = findRootJoint(jointsFiltered);\r\n if (!rootNode) {\r\n return false;\r\n }\r\n const sortedJointsFiltered = sortJoints(rootNode, jointsFiltered);\r\n if (\r\n sortedJointsFiltered &&\r\n srcJointsFiltered.every((j, i) => j.name === sortedJointsFiltered[i].name)\r\n ) {\r\n dstJointsFiltered = sortedJointsFiltered;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!dstJointsFiltered || !dstSkeleton) {\r\n console.error(`copyAnimationFrom: no matching skeleton in target set for '${srcSkeletonId}'`);\r\n return null;\r\n }\r\n // Build remap only for joints that pass the filter\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n nodeMap.set(srcJoint, dstJoint);\r\n jointRemapBySrcNode.set(\r\n srcJoint,\r\n createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint)\r\n );\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n console.error(`copyAnimationFrom: no track for joint: ${srcNode.name}`);\r\n return null;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n dstTrack = retargetRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n dstTrack = retargetEulerToRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(`copyAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`);\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n\r\n function findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n if (!root || !joints.includes(root)) {\r\n return null;\r\n }\r\n return root;\r\n }\r\n\r\n function sortJoints(root: SceneNode, joints: SceneNode[]): Nullable<SceneNode[]> {\r\n const ordered: SceneNode[] = [];\r\n const visited = new Set<SceneNode>();\r\n function visit(joint: SceneNode) {\r\n if (visited.has(joint)) {\r\n return true;\r\n }\r\n if (!joints.includes(joint)) {\r\n return false;\r\n }\r\n if (joint !== root) {\r\n visit(joint.parent!);\r\n }\r\n visited.add(joint);\r\n ordered.push(joint);\r\n return true;\r\n }\r\n for (const joint of joints) {\r\n if (!visit(joint)) {\r\n return null;\r\n }\r\n }\r\n return ordered;\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the animation set and release owned resources.\r\n *\r\n * - Disposes the weak reference to the model.\r\n * - Disposes all registered animation clips.\r\n * - Clears active animations, tracks, and skeleton references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const k in this._animations) {\r\n this._animations[k]!.dispose();\r\n }\r\n this._animations = {};\r\n this._activeAnimations.clear();\r\n this._activeSkeletons.clear();\r\n this._activeTracks.clear();\r\n }\r\n}\r\n"],"names":["cloneInterpolator","src","Interpolator","mode","target","inputs","Float32Array","outputs","createJointRetargetRemap","srcSkeleton","dstSkeleton","srcJoint","dstJoint","translationRotation","si","joints","indexOf","di","srcBindPose","bindPose","dstBindPose","srcLen","position","magnitude","dstLen","dstNode","dstJointIndex","srcNode","srcBindRotInv","Quaternion","inverse","rotation","dstBindRot","clone","srcBindPos","dstBindPos","translationScale","retargetRotation","qSrcAnim","remap","out","multiply","inplaceNormalize","retargetRotationTangent","qSrcTangent","retargetTranslationValue","srcValue","setXYZ","x","y","z","subBy","scaleBy","transform","addBy","retargetTranslationTangent","retargetRotationTrack","isCubic","interpolator","frameStride","numFrames","length","srcOutputs","newOutputs","t","q","f","base","setXYZW","set","subarray","NodeRotationTrack","retargetEulerToRotationTrack","srcInputs","fromEulerAngle","retargetTranslationTrack","v","Vector3","NodeTranslationTrack","findRotationTrack","tracks","find","track","NodeEulerRotationTrack","collectTrackTimes","times","time","add","sampleRotationTrack","fallback","state","calculateState","bakeHumanoidRotationTracks","sourceClip","srcRootRotation","dstRootRotation","dstClip","remaps","rotationTracksByRemap","Map","Set","timeDuration","remapsByDstNode","srcJointSet","dstJointSet","srcBindRotByNode","dstBindRotByNode","srcRotationTrackByNode","i","joint","get","sort","a","b","srcBindWorldRots","dstBindWorldRots","srcAnimWorldRots","dstAnimWorldRots","outputsByRemap","tmpLocalRot","tmpWorldDelta","tmpParentInv","getSrcBindWorldRot","node","rot","identity","parent","has","getDstBindWorldRot","getSrcAnimWorldRot","parentWorldRot","getDstAnimWorldRot","srcBindWorldRot","srcAnimWorldRot","getDstParentAnimWorldRot","mappedParent","clear","dstAnimWorldRot","name","persistentId","jointIndex","addTrack","AnimationSet","Disposable","model","_model","_animations","_activeTracks","_activeSkeletons","_activeAnimations","_skeletons","numAnimations","Object","getOwnPropertyNames","skeletons","createAnimation","embedded","console","error","animation","AnimationClip","scene","queueUpdateNode","deleteAnimation","stopAnimation","dispose","getAnimationNames","keys","update","deltaInSeconds","forEach","k","fadeOut","fadeOutStart","animateTime","firstFrame","timeAdvance","speedRatio","currentTime","repeatCounter","repeat","alltracks","filter","isPlayingAnimation","weights","map","info","weight","fadeIn","Math","min","states","getDuration","weightedAverage","mixState","applyState","apply","size","getAnimationClip","setAnimationWeight","ani","playAnimation","options","max","nodeTracks","blendId","getBlendId","blendedTracks","push","skeleton","findSkeletonById","refcount","playing","delete","id","reset","copyHumanoidAnimationFrom","sourceSet","animationName","targetName","destName","srcSkeletonId","Skeleton","srcHumanoidMapping","humanoidJointMapping","nodeMap","jointRemapBySrcNode","srcJointsFiltered","dstJointsFiltered","ref","sk","dstHumanoidMapping","srcMatched","dstMatched","key","body","leftHand","rightHand","computeHipsParentChainRotation","hipsNode","modelRoot","result","jointSet","p","srcHipsNode","HumanoidBodyRig","Hips","dstHipsNode","srcRootRot","dstRootRot","hipsTranslationRotation","jointRemaps","mappedSrcNodes","mappedDstNodes","fi","isHipsBone","undefined","autoPlay","addSkeleton","srcTracks","srcTrack","dstTrack","NodeScaleTrack","warn","copyAnimationFrom","excludeJoint","jointsFiltered","j","srcRootNode","findRootJoint","sortJoints","rootNode","sortedJointsFiltered","every","root","isParentOf","includes","ordered","visited","visit","onDispose"],"mappings":";;;;;;;;AA+EA,SAASA,kBAAkBC,GAAiB,EAAA;AAC1C,IAAA,OAAO,IAAIC,YACTD,CAAAA,GAAAA,CAAIE,IAAI,EACRF,IAAIG,MAAM,EACVH,GAAII,CAAAA,MAAM,YAAYC,YAAe,GAAA,IAAIA,YAAaL,CAAAA,GAAAA,CAAII,MAAM,CAAI,GAAA;AAAIJ,QAAAA,GAAAA,GAAAA,CAAII;KAAO,EACnFJ,GAAAA,CAAIM,OAAO,YAAYD,YAAAA,GAAe,IAAIA,YAAaL,CAAAA,GAAAA,CAAIM,OAAO,CAAI,GAAA;AAAIN,QAAAA,GAAAA,GAAAA,CAAIM;AAAQ,KAAA,CAAA;AAE1F;AAEA,SAASC,wBAAAA,CACPC,WAAqB,EACrBC,WAAqB,EACrBC,QAAmB,EACnBC,QAAmB,EACnBC,mBAAgC,EAAA;AAEhC,IAAA,MAAMC,EAAKL,GAAAA,WAAAA,CAAYM,MAAM,CAACC,OAAO,CAACL,QAAAA,CAAAA;AACtC,IAAA,MAAMM,EAAKP,GAAAA,WAAAA,CAAYK,MAAM,CAACC,OAAO,CAACJ,QAAAA,CAAAA;AACtC,IAAA,MAAMM,WAAcT,GAAAA,WAAAA,CAAYU,QAAQ,CAACL,EAAG,CAAA;AAC5C,IAAA,MAAMM,WAAcV,GAAAA,WAAAA,CAAYS,QAAQ,CAACF,EAAG,CAAA;AAC5C,IAAA,MAAMI,MAASH,GAAAA,WAAAA,CAAYI,QAAQ,CAACC,SAAS;AAC7C,IAAA,MAAMC,MAASJ,GAAAA,WAAAA,CAAYE,QAAQ,CAACC,SAAS;IAC7C,OAAO;QACLE,OAASb,EAAAA,QAAAA;QACTc,aAAeT,EAAAA,EAAAA;QACfU,OAAShB,EAAAA,QAAAA;AACTiB,QAAAA,aAAAA,EAAeC,UAAWC,CAAAA,OAAO,CAACZ,WAAAA,CAAYa,QAAQ,CAAA;QACtDC,UAAYZ,EAAAA,WAAAA,CAAYW,QAAQ,CAACE,KAAK,EAAA;QACtCC,UAAYhB,EAAAA,WAAAA,CAAYI,QAAQ,CAACW,KAAK,EAAA;QACtCE,UAAYf,EAAAA,WAAAA,CAAYE,QAAQ,CAACW,KAAK,EAAA;QACtCG,gBAAkBf,EAAAA,MAAAA,GAAS,IAAOG,GAAAA,MAAAA,GAASH,MAAS,GAAA,CAAA;AACpDR,QAAAA;AACF,KAAA;AACF;AAEA,SAASwB,gBAAiBC,CAAAA,QAAoB,EAAEC,KAAyB,EAAEC,GAAe,EAAA;AACxFX,IAAAA,UAAAA,CAAWY,QAAQ,CAACF,KAAMX,CAAAA,aAAa,EAAEU,QAAUE,EAAAA,GAAAA,CAAAA;AACnDX,IAAAA,UAAAA,CAAWY,QAAQ,CAACF,KAAMP,CAAAA,UAAU,EAAEQ,GAAKA,EAAAA,GAAAA,CAAAA;AAC3C,IAAA,OAAOA,IAAIE,gBAAgB,EAAA;AAC7B;AAEA,SAASC,uBACPC,CAAAA,WAAuB,EACvBL,KAAyB,EACzBC,GAAe,EAAA;AAEfX,IAAAA,UAAAA,CAAWY,QAAQ,CAACF,KAAMX,CAAAA,aAAa,EAAEgB,WAAaJ,EAAAA,GAAAA,CAAAA;AACtDX,IAAAA,UAAAA,CAAWY,QAAQ,CAACF,KAAMP,CAAAA,UAAU,EAAEQ,GAAKA,EAAAA,GAAAA,CAAAA;IAC3C,OAAOA,GAAAA;AACT;AAEA,SAASK,wBAAyBC,CAAAA,QAAiB,EAAEP,KAAyB,EAAEC,GAAY,EAAA;IAC1FA,GAAIO,CAAAA,MAAM,CAACD,QAASE,CAAAA,CAAC,EAAEF,QAASG,CAAAA,CAAC,EAAEH,QAAAA,CAASI,CAAC,CAAA;IAC7CV,GAAIW,CAAAA,KAAK,CAACZ,KAAAA,CAAML,UAAU,CAAA;IAC1BM,GAAIY,CAAAA,OAAO,CAACb,KAAAA,CAAMH,gBAAgB,CAAA;IAClC,IAAIG,KAAAA,CAAM1B,mBAAmB,EAAE;AAC7B0B,QAAAA,KAAAA,CAAM1B,mBAAmB,CAACwC,SAAS,CAACb,GAAKA,EAAAA,GAAAA,CAAAA;AAC3C;IACAA,GAAIc,CAAAA,KAAK,CAACf,KAAAA,CAAMJ,UAAU,CAAA;IAC1B,OAAOK,GAAAA;AACT;AAEA,SAASe,0BAA2BT,CAAAA,QAAiB,EAAEP,KAAyB,EAAEC,GAAY,EAAA;IAC5FA,GAAIO,CAAAA,MAAM,CAACD,QAASE,CAAAA,CAAC,EAAEF,QAASG,CAAAA,CAAC,EAAEH,QAAAA,CAASI,CAAC,CAAA;IAC7CV,GAAIY,CAAAA,OAAO,CAACb,KAAAA,CAAMH,gBAAgB,CAAA;IAClC,IAAIG,KAAAA,CAAM1B,mBAAmB,EAAE;AAC7B0B,QAAAA,KAAAA,CAAM1B,mBAAmB,CAACwC,SAAS,CAACb,GAAKA,EAAAA,GAAAA,CAAAA;AAC3C;IACA,OAAOA,GAAAA;AACT;AAEA,SAASgB,qBAAAA,CAAsBvD,GAAsB,EAAEsC,KAAyB,EAAA;AAC9E,IAAA,MAAMkB,OAAUxD,GAAAA,GAAAA,CAAIyD,YAAY,CAACvD,IAAI,KAAK,aAAA;IAC1C,MAAMwD,WAAAA,GAAcF,UAAU,EAAK,GAAA,CAAA;AACnC,IAAA,MAAMG,YAAY,GAAC3D,CAAIyD,YAAY,CAACrD,MAAM,CAAkBwD,MAAM;AAClE,IAAA,MAAMC,UAAa7D,GAAAA,GAAAA,CAAIyD,YAAY,CAACnD,OAAO;AAC3C,IAAA,MAAMwD,UAAa,GAAA,IAAIzD,YAAawD,CAAAA,UAAAA,CAAWD,MAAM,CAAA;IACrD,MAAMG,CAAAA,GAAIP,UAAU,CAAI,GAAA,CAAA;AACxB,IAAA,MAAMQ,IAAI,IAAIpC,UAAAA,EAAAA;AACd,IAAA,IAAK,IAAIqC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIN,WAAWM,CAAK,EAAA,CAAA;AAClC,QAAA,MAAMC,OAAOD,CAAIP,GAAAA,WAAAA;QACjBM,CAAEG,CAAAA,OAAO,CACPN,UAAU,CAACK,OAAOH,CAAE,CAAA,EACpBF,UAAU,CAACK,IAAOH,GAAAA,CAAAA,GAAI,EAAE,EACxBF,UAAU,CAACK,IAAAA,GAAOH,CAAI,GAAA,CAAA,CAAE,EACxBF,UAAU,CAACK,IAAOH,GAAAA,CAAAA,GAAI,CAAE,CAAA,CAAA;AAE1B3B,QAAAA,gBAAAA,CAAiB4B,GAAG1B,KAAO0B,EAAAA,CAAAA,CAAAA;AAC3B,QAAA,IAAIR,OAAS,EAAA;;;AAGXQ,YAAAA,CAAAA,CAAEG,OAAO,CAACN,UAAU,CAACK,IAAK,CAAA,EAAEL,UAAU,CAACK,IAAAA,GAAO,EAAE,EAAEL,UAAU,CAACK,IAAO,GAAA,CAAA,CAAE,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,CAAA;AAC5FJ,YAAAA,UAAAA,CAAWM,GAAG,CAAC1B,uBAAwBsB,CAAAA,CAAAA,EAAG1B,OAAO0B,CAAIE,CAAAA,EAAAA,IAAAA,CAAAA;AACrDJ,YAAAA,UAAAA,CAAWM,GAAG,CACZhC,gBAAiB,CAAA,IAAIR,WAAWiC,UAAWQ,CAAAA,QAAQ,CAACH,IAAAA,GAAO,CAAGA,EAAAA,IAAAA,GAAO,CAAK5B,CAAAA,CAAAA,EAAAA,KAAAA,EAAO0B,IACjFE,IAAO,GAAA,CAAA,CAAA;YAETF,CAAEG,CAAAA,OAAO,CAACN,UAAU,CAACK,OAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,IAAAA,GAAO,EAAE,EAAEL,UAAU,CAACK,IAAO,GAAA,EAAA,CAAG,EAAEL,UAAU,CAACK,OAAO,EAAG,CAAA,CAAA;AAClGJ,YAAAA,UAAAA,CAAWM,GAAG,CAAC1B,uBAAAA,CAAwBsB,CAAG1B,EAAAA,KAAAA,EAAO0B,IAAIE,IAAO,GAAA,CAAA,CAAA;SACvD,MAAA;YACLJ,UAAWM,CAAAA,GAAG,CAACJ,CAAGE,EAAAA,IAAAA,CAAAA;AACpB;AACF;AACA,IAAA,OAAO,IAAII,iBACT,CAAA,IAAIrE,YACFD,CAAAA,GAAAA,CAAIyD,YAAY,CAACvD,IAAI,EACrB,MAAA,EACA,IAAIG,YAAaL,CAAAA,GAAAA,CAAIyD,YAAY,CAACrD,MAAM,CACxC0D,EAAAA,UAAAA,CAAAA,CAAAA;AAGN;AAEA,SAASS,4BAAAA,CACPvE,GAA2B,EAC3BsC,KAAyB,EAAA;AAEzB,IAAA,MAAMkC,SAAYxE,GAAAA,GAAAA,CAAIyD,YAAY,CAACrD,MAAM;AACzC,IAAA,MAAMyD,UAAa7D,GAAAA,GAAAA,CAAIyD,YAAY,CAACnD,OAAO;AAC3C,IAAA,MAAMkD,OAAUxD,GAAAA,GAAAA,CAAIyD,YAAY,CAACvD,IAAI,KAAK,aAAA;IAC1C,MAAMwD,WAAAA,GAAcF,UAAU,CAAI,GAAA,CAAA;IAClC,MAAMO,CAAAA,GAAIP,UAAU,CAAI,GAAA,CAAA;IACxB,MAAMG,SAAAA,GAAYa,UAAUZ,MAAM;IAClC,MAAME,UAAAA,GAAa,IAAIzD,YAAAA,CAAasD,SAAY,GAAA,CAAA,CAAA;AAChD,IAAA,MAAMK,IAAI,IAAIpC,UAAAA,EAAAA;AACd,IAAA,IAAK,IAAIqC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIN,WAAWM,CAAK,EAAA,CAAA;QAClC,MAAMC,IAAAA,GAAOD,IAAIP,WAAcK,GAAAA,CAAAA;AAC/BC,QAAAA,CAAAA,CAAES,cAAc,CAACZ,UAAU,CAACK,KAAK,EAAEL,UAAU,CAACK,IAAAA,GAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,CAAA;AAC7E9B,QAAAA,gBAAAA,CAAiB4B,GAAG1B,KAAO0B,EAAAA,CAAAA,CAAAA;QAC3BF,UAAWM,CAAAA,GAAG,CAACJ,CAAAA,EAAGC,CAAI,GAAA,CAAA,CAAA;AACxB;AACA,IAAA,OAAO,IAAIK,iBAAAA,CACT,IAAIrE,YAAAA,CACFD,IAAIyD,YAAY,CAACvD,IAAI,KAAK,SAAS,MAAS,GAAA,QAAA,EAC5C,MACA,EAAA,IAAIG,aAAamE,SACjBV,CAAAA,EAAAA,UAAAA,CAAAA,CAAAA;AAGN;AAEA,SAASY,wBAAAA,CACP1E,GAAyB,EACzBsC,KAAyB,EAAA;AAEzB,IAAA,MAAMkB,OAAUxD,GAAAA,GAAAA,CAAIyD,YAAY,CAACvD,IAAI,KAAK,aAAA;IAC1C,MAAMwD,WAAAA,GAAcF,UAAU,CAAI,GAAA,CAAA;AAClC,IAAA,MAAMG,YAAY,GAAC3D,CAAIyD,YAAY,CAACrD,MAAM,CAAkBwD,MAAM;AAClE,IAAA,MAAMC,UAAa7D,GAAAA,GAAAA,CAAIyD,YAAY,CAACnD,OAAO;AAC3C,IAAA,MAAMwD,UAAa,GAAA,IAAIzD,YAAawD,CAAAA,UAAAA,CAAWD,MAAM,CAAA;IACrD,MAAMG,CAAAA,GAAIP,UAAU,CAAI,GAAA,CAAA;AACxB,IAAA,MAAMmB,IAAI,IAAIC,OAAAA,EAAAA;AACd,IAAA,IAAK,IAAIX,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIN,WAAWM,CAAK,EAAA,CAAA;AAClC,QAAA,MAAMC,OAAOD,CAAIP,GAAAA,WAAAA;AACjBiB,QAAAA,CAAAA,CAAE7B,MAAM,CAACe,UAAU,CAACK,IAAAA,GAAOH,EAAE,EAAEF,UAAU,CAACK,IAAAA,GAAOH,IAAI,CAAE,CAAA,EAAEF,UAAU,CAACK,IAAAA,GAAOH,IAAI,CAAE,CAAA,CAAA;AACjFnB,QAAAA,wBAAAA,CAAyB+B,GAAGrC,KAAOqC,EAAAA,CAAAA,CAAAA;AACnC,QAAA,IAAInB,OAAS,EAAA;AACXmB,YAAAA,CAAAA,CAAE7B,MAAM,CAACe,UAAU,CAACK,KAAK,EAAEL,UAAU,CAACK,IAAAA,GAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,CAAA;AACrEJ,YAAAA,UAAAA,CAAWM,GAAG,CAACd,0BAA2BqB,CAAAA,CAAAA,EAAGrC,OAAOqC,CAAIT,CAAAA,EAAAA,IAAAA,CAAAA;AACxDS,YAAAA,CAAAA,CAAE7B,MAAM,CAACe,UAAU,CAACK,OAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,CAAA;AACzEJ,YAAAA,UAAAA,CAAWM,GAAG,CAACxB,wBAAAA,CAAyB+B,CAAGrC,EAAAA,KAAAA,EAAOqC,IAAIT,IAAO,GAAA,CAAA,CAAA;AAC7DS,YAAAA,CAAAA,CAAE7B,MAAM,CAACe,UAAU,CAACK,OAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,EAAEL,UAAU,CAACK,OAAO,CAAE,CAAA,CAAA;AACzEJ,YAAAA,UAAAA,CAAWM,GAAG,CAACd,0BAAAA,CAA2BqB,CAAGrC,EAAAA,KAAAA,EAAOqC,IAAIT,IAAO,GAAA,CAAA,CAAA;SAC1D,MAAA;YACLJ,UAAWM,CAAAA,GAAG,CAACO,CAAGT,EAAAA,IAAAA,CAAAA;AACpB;AACF;AACA,IAAA,OAAO,IAAIW,oBACT,CAAA,IAAI5E,YACFD,CAAAA,GAAAA,CAAIyD,YAAY,CAACvD,IAAI,EACrB,MAAA,EACA,IAAIG,YAAaL,CAAAA,GAAAA,CAAIyD,YAAY,CAACrD,MAAM,CACxC0D,EAAAA,UAAAA,CAAAA,CAAAA;AAGN;AAEA,SAASgB,kBACPC,MAAoC,EAAA;AAEpC,IAAA,OAAQA,QAAQC,IACd,CAAA,CAACC,QAAUA,KAAiBX,YAAAA,iBAAAA,IAAqBW,iBAAiBC,sBAC/D,CAAA,IAAA,IAAA;AACP;AAEA,SAASC,iBAAAA,CAAkBF,KAA4B,EAAEG,KAAkB,EAAA;IACzE,IAAIH,KAAAA,YAAiBX,iBAAqBW,IAAAA,KAAAA,YAAiBC,sBAAwB,EAAA;AACjF,QAAA,KAAK,MAAMG,IAAQJ,IAAAA,KAAAA,CAAMxB,YAAY,CAACrD,MAAM,CAAkB;AAC5DgF,YAAAA,KAAAA,CAAME,GAAG,CAACD,IAAAA,CAAAA;AACZ;AACF;AACF;AAEA,SAASE,oBACPN,KAAwD,EACxDI,IAAY,EACZG,QAAoB,EACpBjD,GAAe,EAAA;AAEf,IAAA,IAAI,CAAC0C,KAAO,EAAA;AACV1C,QAAAA,GAAAA,CAAI6B,GAAG,CAACoB,QAAAA,CAAAA;QACR,OAAOjD,GAAAA;AACT;AACA,IAAA,MAAMkD,KAAQR,GAAAA,KAAAA,CAAMS,cAAc,CAAC,EAAIL,EAAAA,IAAAA,CAAAA;AACvC9C,IAAAA,GAAAA,CAAI6B,GAAG,CAACqB,KAAAA,CAAAA;IACR,OAAOlD,GAAAA;AACT;AAEA,SAASoD,0BACPC,CAAAA,UAAyB,EACzBpF,WAAqB,EACrBC,WAAqB,EACrBoF,eAA2B,EAC3BC,eAA2B,EAC3BC,OAAsB,EACtBC,MAA4B,EAAA;AAE5B,IAAA,MAAMC,wBAAwB,IAAIC,GAAAA,EAAAA;IAIlC,MAAMd,KAAAA,GAAQ,IAAIe,GAAY,CAAA;AAAC,QAAA,CAAA;AAAGP,QAAAA,UAAAA,CAAWQ;AAAa,KAAA,CAAA;AAC1D,IAAA,MAAMC,kBAAkB,IAAIH,GAAAA,EAAAA;AAC5B,IAAA,MAAMI,WAAc,GAAA,IAAIH,GAAI3F,CAAAA,WAAAA,CAAYM,MAAM,CAAA;AAC9C,IAAA,MAAMyF,WAAc,GAAA,IAAIJ,GAAI1F,CAAAA,WAAAA,CAAYK,MAAM,CAAA;AAC9C,IAAA,MAAM0F,mBAAmB,IAAIN,GAAAA,EAAAA;AAC7B,IAAA,MAAMO,mBAAmB,IAAIP,GAAAA,EAAAA;AAC7B,IAAA,MAAMQ,yBAAyB,IAAIR,GAAAA,EAAAA;IAEnC,IAAK,IAAIS,IAAI,CAAGA,EAAAA,CAAAA,GAAInG,YAAYM,MAAM,CAAC8C,MAAM,EAAE+C,CAAK,EAAA,CAAA;AAClD,QAAA,MAAMC,KAAQpG,GAAAA,WAAAA,CAAYM,MAAM,CAAC6F,CAAE,CAAA;QACnCH,gBAAiBpC,CAAAA,GAAG,CAACwC,KAAOpG,EAAAA,WAAAA,CAAYU,QAAQ,CAACyF,CAAAA,CAAE,CAAC7E,QAAQ,CAAA;AAC5D,QAAA,MAAMmD,QAAQH,iBAAkBc,CAAAA,UAAAA,CAAWb,MAAM,CAAC8B,GAAG,CAACD,KAAAA,CAAAA,CAAAA;QACtDF,sBAAuBtC,CAAAA,GAAG,CAACwC,KAAO3B,EAAAA,KAAAA,CAAAA;AAClCE,QAAAA,iBAAAA,CAAkBF,KAAOG,EAAAA,KAAAA,CAAAA;AAC3B;IACA,IAAK,IAAIuB,IAAI,CAAGA,EAAAA,CAAAA,GAAIlG,YAAYK,MAAM,CAAC8C,MAAM,EAAE+C,CAAK,EAAA,CAAA;AAClDF,QAAAA,gBAAAA,CAAiBrC,GAAG,CAAC3D,WAAYK,CAAAA,MAAM,CAAC6F,CAAAA,CAAE,EAAElG,WAAAA,CAAYS,QAAQ,CAACyF,CAAE,CAAA,CAAC7E,QAAQ,CAAA;AAC9E;IACA,KAAK,MAAMQ,SAAS0D,MAAQ,CAAA;QAC1B,MAAMf,KAAAA,GAAQH,kBAAkBc,UAAWb,CAAAA,MAAM,CAAC8B,GAAG,CAACvE,MAAMZ,OAAO,CAAA,CAAA;QACnEuE,qBAAsB7B,CAAAA,GAAG,CAAC9B,KAAO2C,EAAAA,KAAAA,CAAAA;AACjCoB,QAAAA,eAAAA,CAAgBjC,GAAG,CAAC9B,KAAMd,CAAAA,OAAO,EAAEc,KAAAA,CAAAA;AACrC;IACA,MAAMlC,MAAAA,GAAS,IAAIC,YAAa,CAAA;AAAI+E,QAAAA,GAAAA;AAAM,KAAA,CAAC0B,IAAI,CAAC,CAACC,CAAAA,EAAGC,IAAMD,CAAIC,GAAAA,CAAAA,CAAAA,CAAAA;AAC9D,IAAA,MAAMC,mBAAmB,IAAIf,GAAAA,EAAAA;AAC7B,IAAA,MAAMgB,mBAAmB,IAAIhB,GAAAA,EAAAA;AAC7B,IAAA,MAAMiB,mBAAmB,IAAIjB,GAAAA,EAAAA;AAC7B,IAAA,MAAMkB,mBAAmB,IAAIlB,GAAAA,EAAAA;AAC7B,IAAA,MAAMmB,iBAAiB,IAAInB,GAAAA,EAAAA;AAC3B,IAAA,MAAMoB,cAAc,IAAI1F,UAAAA,EAAAA;AACxB,IAAA,MAAM2F,gBAAgB,IAAI3F,UAAAA,EAAAA;AAC1B,IAAA,MAAM4F,eAAe,IAAI5F,UAAAA,EAAAA;IAEzB,KAAK,MAAMU,SAAS0D,MAAQ,CAAA;AAC1BqB,QAAAA,cAAAA,CAAejD,GAAG,CAAC9B,KAAAA,EAAO,IAAIjC,YAAaD,CAAAA,MAAAA,CAAOwD,MAAM,GAAG,CAAA,CAAA,CAAA;AAC7D;AAEA,IAAA,SAAS6D,mBAAmBC,IAAe,EAAA;QACzC,IAAIC,GAAAA,GAAMV,gBAAiBJ,CAAAA,GAAG,CAACa,IAAAA,CAAAA;AAC/B,QAAA,IAAI,CAACC,GAAK,EAAA;YACRA,GAAM,GAACnB,CAAAA,gBAAAA,CAAiBK,GAAG,CAACa,SAAS9F,UAAWgG,CAAAA,QAAQ,EAAC,EAAG5F,KAAK,EAAA;YACjE,MAAM6F,MAAAA,GAASH,KAAKG,MAAM;AAC1B,YAAA,IAAIA,MAAUvB,IAAAA,WAAAA,CAAYwB,GAAG,CAACD,MAAS,CAAA,EAAA;AACrCjG,gBAAAA,UAAAA,CAAWY,QAAQ,CAACiF,kBAAmBI,CAAAA,MAAAA,CAAAA,EAASF,GAAKA,EAAAA,GAAAA,CAAAA;aAChD,MAAA;gBACL/F,UAAWY,CAAAA,QAAQ,CAACqD,eAAAA,EAAiB8B,GAAKA,EAAAA,GAAAA,CAAAA;AAC5C;YACAV,gBAAiB7C,CAAAA,GAAG,CAACsD,IAAMC,EAAAA,GAAAA,CAAAA;AAC7B;QACA,OAAOA,GAAAA;AACT;AAEA,IAAA,SAASI,mBAAmBL,IAAe,EAAA;QACzC,IAAIC,GAAAA,GAAMT,gBAAiBL,CAAAA,GAAG,CAACa,IAAAA,CAAAA;AAC/B,QAAA,IAAI,CAACC,GAAK,EAAA;YACRA,GAAM,GAAClB,CAAAA,gBAAAA,CAAiBI,GAAG,CAACa,SAAS9F,UAAWgG,CAAAA,QAAQ,EAAC,EAAG5F,KAAK,EAAA;YACjE,MAAM6F,MAAAA,GAASH,KAAKG,MAAM;AAC1B,YAAA,IAAIA,MAAUtB,IAAAA,WAAAA,CAAYuB,GAAG,CAACD,MAAS,CAAA,EAAA;AACrCjG,gBAAAA,UAAAA,CAAWY,QAAQ,CAACuF,kBAAmBF,CAAAA,MAAAA,CAAAA,EAASF,GAAKA,EAAAA,GAAAA,CAAAA;aAChD,MAAA;gBACL/F,UAAWY,CAAAA,QAAQ,CAACsD,eAAAA,EAAiB6B,GAAKA,EAAAA,GAAAA,CAAAA;AAC5C;YACAT,gBAAiB9C,CAAAA,GAAG,CAACsD,IAAMC,EAAAA,GAAAA,CAAAA;AAC7B;QACA,OAAOA,GAAAA;AACT;IAEA,SAASK,kBAAAA,CAAmBN,IAAe,EAAErC,IAAY,EAAA;QACvD,IAAIsC,GAAAA,GAAMR,gBAAiBN,CAAAA,GAAG,CAACa,IAAAA,CAAAA;AAC/B,QAAA,IAAI,CAACC,GAAK,EAAA;AACRA,YAAAA,GAAAA,GAAM,IAAI/F,UAAAA,EAAAA;YACVuF,gBAAiB/C,CAAAA,GAAG,CAACsD,IAAMC,EAAAA,GAAAA,CAAAA;AAC7B;QACA,MAAME,MAAAA,GAASH,KAAKG,MAAM;QAC1B,MAAMI,cAAAA,GAAiBJ,UAAUvB,WAAYwB,CAAAA,GAAG,CAACD,MAAUG,CAAAA,GAAAA,kBAAAA,CAAmBH,QAAQxC,IAAQ,CAAA,GAAA,IAAA;AAC9FE,QAAAA,mBAAAA,CACEmB,sBAAuBG,CAAAA,GAAG,CAACa,IAAAA,CAAAA,IAAS,IACpCrC,EAAAA,IAAAA,EACAmB,gBAAiBK,CAAAA,GAAG,CAACa,IAAAA,CAAAA,IAAS9F,UAAWgG,CAAAA,QAAQ,EACjDN,EAAAA,WAAAA,CAAAA;AAEF,QAAA,IAAIW,cAAgB,EAAA;YAClBrG,UAAWY,CAAAA,QAAQ,CAACyF,cAAAA,EAAgBX,WAAaK,EAAAA,GAAAA,CAAAA;SAC5C,MAAA;YACL/F,UAAWY,CAAAA,QAAQ,CAACqD,eAAAA,EAAiByB,WAAaK,EAAAA,GAAAA,CAAAA;AACpD;QACA,OAAOA,GAAAA;AACT;IAEA,SAASO,kBAAAA,CAAmB5F,KAAyB,EAAE+C,IAAY,EAAA;AACjE,QAAA,IAAIsC,GAAMP,GAAAA,gBAAAA,CAAiBP,GAAG,CAACvE,MAAMd,OAAO,CAAA;AAC5C,QAAA,IAAI,CAACmG,GAAK,EAAA;AACRA,YAAAA,GAAAA,GAAM,IAAI/F,UAAAA,EAAAA;AACVwF,YAAAA,gBAAAA,CAAiBhD,GAAG,CAAC9B,KAAMd,CAAAA,OAAO,EAAEmG,GAAAA,CAAAA;AACtC;QACA,MAAMQ,eAAAA,GAAkBV,kBAAmBnF,CAAAA,KAAAA,CAAMZ,OAAO,CAAA;AACxD,QAAA,MAAM0G,eAAkBJ,GAAAA,kBAAAA,CAAmB1F,KAAMZ,CAAAA,OAAO,EAAE2D,IAAAA,CAAAA;AAC1DzD,QAAAA,UAAAA,CAAWY,QAAQ,CAAC4F,eAAAA,EAAiBxG,WAAWC,OAAO,CAACsG,iBAAiBZ,aAAgBA,CAAAA,EAAAA,aAAAA,CAAAA;AACzF3F,QAAAA,UAAAA,CAAWY,QAAQ,CAAC+E,aAAAA,EAAeQ,kBAAmBzF,CAAAA,KAAAA,CAAMd,OAAO,CAAGmG,EAAAA,GAAAA,CAAAA;QACtE,OAAOA,GAAAA;AACT;IAEA,SAASU,wBAAAA,CAAyBX,IAAe,EAAErC,IAAY,EAAA;QAC7D,MAAMwC,MAAAA,GAASH,KAAKG,MAAM;AAC1B,QAAA,IAAI,CAACA,MAAU,IAAA,CAACtB,WAAYuB,CAAAA,GAAG,CAACD,MAAS,CAAA,EAAA;YACvC,OAAO/B,eAAAA;AACT;QACA,MAAMwC,YAAAA,GAAejC,eAAgBQ,CAAAA,GAAG,CAACgB,MAAAA,CAAAA;AACzC,QAAA,IAAIS,YAAc,EAAA;AAChB,YAAA,OAAOJ,mBAAmBI,YAAcjD,EAAAA,IAAAA,CAAAA;AAC1C;QACA,IAAIsC,GAAAA,GAAMP,gBAAiBP,CAAAA,GAAG,CAACgB,MAAAA,CAAAA;AAC/B,QAAA,IAAI,CAACF,GAAK,EAAA;YACRA,GAAM,GAAClB,CAAAA,gBAAAA,CAAiBI,GAAG,CAACgB,WAAWjG,UAAWgG,CAAAA,QAAQ,EAAC,EAAG5F,KAAK,EAAA;YACnE,MAAMiG,cAAAA,GAAiBI,yBAAyBR,MAAQxC,EAAAA,IAAAA,CAAAA;AACxD,YAAA,IAAI4C,cAAgB,EAAA;gBAClBrG,UAAWY,CAAAA,QAAQ,CAACyF,cAAAA,EAAgBN,GAAKA,EAAAA,GAAAA,CAAAA;AAC3C;YACAP,gBAAiBhD,CAAAA,GAAG,CAACyD,MAAQF,EAAAA,GAAAA,CAAAA;AAC/B;QACA,OAAOA,GAAAA;AACT;AAEA,IAAA,IAAK,IAAIhB,CAAI,GAAA,CAAA,EAAGA,IAAIvG,MAAOwD,CAAAA,MAAM,EAAE+C,CAAK,EAAA,CAAA;QACtC,MAAMtB,IAAAA,GAAOjF,MAAM,CAACuG,CAAE,CAAA;AACtBQ,QAAAA,gBAAAA,CAAiBoB,KAAK,EAAA;AACtBnB,QAAAA,gBAAAA,CAAiBmB,KAAK,EAAA;QACtB,KAAK,MAAMjG,SAAS0D,MAAQ,CAAA;YAC1B,MAAMwC,eAAAA,GAAkBN,mBAAmB5F,KAAO+C,EAAAA,IAAAA,CAAAA;AAClD,YAAA,MAAM4C,cAAiBI,GAAAA,wBAAAA,CAAyB/F,KAAMd,CAAAA,OAAO,EAAE6D,IAAAA,CAAAA;AAC/D,YAAA,IAAI4C,cAAgB,EAAA;AAClBrG,gBAAAA,UAAAA,CAAWY,QAAQ,CAACZ,UAAAA,CAAWC,OAAO,CAACoG,cAAAA,EAAgBT,eAAegB,eAAiBlB,EAAAA,WAAAA,CAAAA;aAClF,MAAA;AACLA,gBAAAA,WAAAA,CAAYlD,GAAG,CAACoE,eAAAA,CAAAA;AAClB;AACAlB,YAAAA,WAAAA,CAAY7E,gBAAgB,EAAA;AAC5B4E,YAAAA,cAAAA,CAAeR,GAAG,CAACvE,KAAAA,CAAAA,CAAQ8B,GAAG,CAACkD,aAAaX,CAAI,GAAA,CAAA,CAAA;AAClD;AACF;IAEA,KAAK,MAAMrE,SAAS0D,MAAQ,CAAA;AAC1B,QAAA,IAAI,CAACC,qBAAAA,CAAsBY,GAAG,CAACvE,KAAQ,CAAA,EAAA;AACrC,YAAA;AACF;AACA,QAAA,MAAMhC,OAAU,GAAA,IAAID,YAAagH,CAAAA,cAAAA,CAAeR,GAAG,CAACvE,KAAAA,CAAAA,CAAAA;QACpD,MAAM2C,KAAAA,GAAQ,IAAIX,iBAChB,CAAA,IAAIrE,aAAa,QAAU,EAAA,MAAA,EAAQ,IAAII,YAAAA,CAAaD,MAASE,CAAAA,EAAAA,OAAAA,CAAAA,CAAAA;AAE/D2E,QAAAA,KAAAA,CAAMwD,IAAI,GAAG,UAAA;AACbxD,QAAAA,KAAAA,CAAM9E,MAAM,GAAGmC,KAAMd,CAAAA,OAAO,CAACkH,YAAY;QACzCzD,KAAM0D,CAAAA,UAAU,GAAGrG,KAAAA,CAAMb,aAAa;AACtCsE,QAAAA,OAAAA,CAAQ6C,QAAQ,CAACtG,KAAMd,CAAAA,OAAO,EAAEyD,KAAAA,CAAAA;AAClC;AACF;AAEA;;;;;;;;;;;;;;;;;;;IAoBO,MAAM4D,YAAqBC,SAAAA,UAAAA,CAAAA;qBAEhC,MAA0B;qBAE1B,WAA4D;qBAE5D,UAAqC;qBAErC,aAA4E;qBAE5E,gBAAyD;qBAEzD,iBAcE;AACF;;;;MAKA,WAAA,CAAYC,KAAgB,CAAE;QAC5B,KAAK,EAAA;QACL,IAAI,CAACC,MAAM,GAAGD,KAAAA;QACd,IAAI,CAACE,WAAW,GAAG,EAAC;QACpB,IAAI,CAACC,aAAa,GAAG,IAAIhD,GAAAA,EAAAA;QACzB,IAAI,CAACiD,gBAAgB,GAAG,IAAIjD,GAAAA,EAAAA;QAC5B,IAAI,CAACkD,iBAAiB,GAAG,IAAIlD,GAAAA,EAAAA;QAC7B,IAAI,CAACmD,UAAU,GAAG,EAAE;AACtB;AACA;;AAEC,MACD,IAAIN,KAAQ,GAAA;QACV,OAAO,IAAI,CAACC,MAAM;AACpB;AACA;;AAEC,MACD,IAAIM,aAAgB,GAAA;AAClB,QAAA,OAAOC,OAAOC,mBAAmB,CAAC,IAAI,CAACP,WAAW,EAAErF,MAAM;AAC5D;AACA;;AAEC,MACD,IAAI6F,SAAY,GAAA;QACd,OAAO,IAAI,CAACJ,UAAU;AACxB;AACA;;;;;MAMAxC,GAAAA,CAAI4B,IAAY,EAAE;AAChB,QAAA,OAAO,IAAI,CAACQ,WAAW,CAACR,KAAK,IAAI,IAAA;AACnC;AACA;;;;;;AAMC,MACDiB,eAAgBjB,CAAAA,IAAY,EAAEkB,QAAAA,GAAW,KAAK,EAAE;AAC9C,QAAA,IAAI,CAAClB,IAAQ,IAAA,IAAI,CAACQ,WAAW,CAACR,KAAK,EAAE;AACnCmB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,iCAAA,CAAA;YACd,OAAO,IAAA;SACF,MAAA;AACL,YAAA,MAAMC,SAAY,GAAA,IAAIC,aAActB,CAAAA,IAAAA,EAAM,IAAI,EAAEkB,QAAAA,CAAAA;AAChD,YAAA,IAAI,CAACV,WAAW,CAACR,IAAAA,CAAK,GAAGqB,SAAAA;YACzB,IAAI,CAACd,MAAM,CAACgB,KAAK,EAAEC,eAAgB,CAAA,IAAI,CAACjB,MAAM,CAAA;YAC9C,OAAOc,SAAAA;AACT;AACF;AACA;;;;;;MAOAI,eAAAA,CAAgBzB,IAAY,EAAE;AAC5B,QAAA,MAAMqB,SAAY,GAAA,IAAI,CAACb,WAAW,CAACR,IAAK,CAAA;AACxC,QAAA,IAAIqB,SAAW,EAAA;YACb,IAAI,CAACK,aAAa,CAAC1B,IAAAA,CAAAA;AACnB,YAAA,OAAO,IAAI,CAACQ,WAAW,CAACR,IAAK,CAAA;AAC7BqB,YAAAA,SAAAA,CAAUM,OAAO,EAAA;AACnB;AACF;AACA;;;;AAIC,MACDC,iBAAoB,GAAA;AAClB,QAAA,OAAOd,MAAOe,CAAAA,IAAI,CAAC,IAAI,CAACrB,WAAW,CAAA;AACrC;AACA;;;;;;;;;;;MAYAsB,MAAAA,CAAOC,cAAsB,EAAE;AAC7B,QAAA,IAAI,CAACpB,iBAAiB,CAACqB,OAAO,CAAC,CAAC9F,CAAG+F,EAAAA,CAAAA,GAAAA;AACjC,YAAA,IAAI/F,EAAEgG,OAAO,GAAG,KAAKhG,CAAEiG,CAAAA,YAAY,GAAG,CAAG,EAAA;gBACvCjG,CAAEiG,CAAAA,YAAY,GAAGjG,CAAAA,CAAEkG,WAAW;AAChC;;YAEA,IAAIlG,CAAAA,CAAEmG,UAAU,EAAE;AAChBnG,gBAAAA,CAAAA,CAAEmG,UAAU,GAAG,KAAA;aACV,MAAA;gBACL,MAAMC,WAAAA,GAAcP,cAAiB7F,GAAAA,CAAAA,CAAEqG,UAAU;AACjDrG,gBAAAA,CAAAA,CAAEsG,WAAW,IAAIF,WAAAA;AACjBpG,gBAAAA,CAAAA,CAAEkG,WAAW,IAAIE,WAAAA;AACjB,gBAAA,IAAIpG,CAAEsG,CAAAA,WAAW,GAAGP,CAAAA,CAAEtE,YAAY,EAAE;AAClCzB,oBAAAA,CAAAA,CAAEuG,aAAa,EAAA;AACfvG,oBAAAA,CAAAA,CAAEsG,WAAW,GAAG,CAAA;AAClB,iBAAA,MAAO,IAAItG,CAAAA,CAAEsG,WAAW,GAAG,CAAG,EAAA;AAC5BtG,oBAAAA,CAAAA,CAAEuG,aAAa,EAAA;oBACfvG,CAAEsG,CAAAA,WAAW,GAAGP,CAAAA,CAAEtE,YAAY;AAChC;gBACA,IAAIzB,CAAAA,CAAEwG,MAAM,KAAK,CAAA,IAAKxG,EAAEuG,aAAa,IAAIvG,CAAEwG,CAAAA,MAAM,EAAE;AACjD,oBAAA,IAAI,CAAChB,aAAa,CAACO,CAAAA,CAAEjC,IAAI,CAAA;AAC3B,iBAAA,MAAO,IAAI9D,CAAAA,CAAEgG,OAAO,GAAG,CAAG,EAAA;oBACxB,IAAIhG,CAAAA,CAAEkG,WAAW,GAAGlG,CAAAA,CAAEiG,YAAY,IAAIjG,CAAAA,CAAEgG,OAAO,EAAE;AAC/C,wBAAA,IAAI,CAACR,aAAa,CAACO,CAAAA,CAAEjC,IAAI,CAAA;AAC3B;AACF;AACF;AACF,SAAA,CAAA;;AAEA,QAAA,IAAI,CAACS,aAAa,CAACuB,OAAO,CAAC,CAAC9F,CAAG+F,EAAAA,CAAAA,GAAAA;YAC7B/F,CAAE8F,CAAAA,OAAO,CAAC,CAACW,SAAAA,GAAAA;;AAET,gBAAA,MAAMrG,SAASqG,SAAUC,CAAAA,MAAM,CAC7B,CAACpG,QAAUA,KAAM6E,CAAAA,SAAS,IAAI,IAAI,CAACwB,kBAAkB,CAACrG,KAAM6E,CAAAA,SAAS,CAACrB,IAAI,CAAA,CAAA;gBAE5E,IAAI1D,MAAAA,CAAOnB,MAAM,GAAG,CAAG,EAAA;AACrB,oBAAA,MAAM2H,OAAUxG,GAAAA,MAAAA,CAAOyG,GAAG,CAAC,CAACvG,KAAAA,GAAAA;wBAC1B,MAAMwG,IAAAA,GAAO,IAAI,CAACrC,iBAAiB,CAACvC,GAAG,CAAC5B,MAAM6E,SAAS,CAAA;wBACvD,MAAM4B,MAAAA,GAASD,KAAKC,MAAM;AAC1B,wBAAA,MAAMC,MAASF,GAAAA,IAAAA,CAAKE,MAAM,KAAK,IAAI,CAAIC,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGJ,EAAAA,IAAAA,CAAKZ,WAAW,GAAGY,KAAKE,MAAM,CAAA;AACjF,wBAAA,IAAIhB,OAAU,GAAA,CAAA;wBACd,IAAIc,IAAAA,CAAKd,OAAO,KAAK,CAAG,EAAA;4BACtBA,OAAU,GAAA,CAAA,GAAI,CAACc,IAAKZ,CAAAA,WAAW,GAAGY,IAAAA,CAAKb,YAAW,IAAKa,IAAAA,CAAKd,OAAO;AACrE;AACA,wBAAA,OAAOe,SAASC,MAAShB,GAAAA,OAAAA;AAC3B,qBAAA,CAAA;AACA,oBAAA,MAAMmB,MAAS/G,GAAAA,MAAAA,CAAOyG,GAAG,CAAC,CAACvG,KAAAA,GAAAA;wBACzB,MAAMwG,IAAAA,GAAO,IAAI,CAACrC,iBAAiB,CAACvC,GAAG,CAAC5B,MAAM6E,SAAS,CAAA;wBACvD,MAAM/F,CAAAA,GAAI,IAAC0H,CAAKR,WAAW,GAAGhG,KAAM6E,CAAAA,SAAS,CAAE1D,YAAY,GAAInB,KAAAA,CAAM8G,WAAW,EAAA;wBAChF,OAAO9G,KAAAA,CAAMS,cAAc,CAACgF,CAAG3G,EAAAA,CAAAA,CAAAA;AACjC,qBAAA,CAAA;AACA,oBAAA,MAAM0B,QAAQuG,eAAgBT,CAAAA,OAAAA,EAASO,MAAQ,EAAA,CAAC/E,GAAGC,CAAGjD,EAAAA,CAAAA,GAAAA;AACpD,wBAAA,OAAOgB,MAAM,CAAC,CAAA,CAAE,CAACkH,QAAQ,CAAClF,GAAGC,CAAGjD,EAAAA,CAAAA,CAAAA;AAClC,qBAAA,CAAA;AACAgB,oBAAAA,MAAM,CAAC,CAAA,CAAE,CAACmH,UAAU,CAACxB,CAAGjF,EAAAA,KAAAA,CAAAA;AAC1B;AACF,aAAA,CAAA;AACF,SAAA,CAAA;;AAEA,QAAA,IAAI,CAAC4D,UAAU,CAACoB,OAAO,CAAC,CAAC9F,CAAAA,GAAAA;YACvBA,CAAEkC,CAAAA,GAAG,IAAIsF,KAAM3B,CAAAA,cAAAA,CAAAA;AACjB,SAAA,CAAA;AACF;AACA;;;;;MAMAc,kBAAAA,CAAmB7C,IAAa,EAAE;AAChC,QAAA,IAAIA,IAAM,EAAA;AACR,YAAA,MAAMqB,SAAY,GAAA,IAAI,CAACb,WAAW,CAACR,IAAK,CAAA;YACxC,OAAO,CAAC,CAACqB,SAAa,IAAA,IAAI,CAACV,iBAAiB,CAACtB,GAAG,CAACgC,SAAAA,CAAAA;AACnD;AACA,QAAA,OAAO,IAAI,CAACV,iBAAiB,CAACgD,IAAI,GAAG,CAAA;AACvC;AACA;;;;;;;MAQAC,gBAAAA,CAAiB5D,IAAY,EAAE;AAC7B,QAAA,OAAO,IAAI,CAACQ,WAAW,CAACR,KAAK,IAAI,IAAA;AACnC;AACA;;;;;;;AAOC,MACD6D,kBAAmB7D,CAAAA,IAAY,EAAEiD,MAAc,EAAE;AAC/C,QAAA,MAAMa,GAAM,GAAA,IAAI,CAACtD,WAAW,CAACR,IAAK,CAAA;AAClC,QAAA,IAAI,CAAC8D,GAAK,EAAA;AACR3C,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,UAAU,EAAEpB,IAAAA,CAAK,WAAW,CAAC,CAAA;AAC5C,YAAA;AACF;AACA,QAAA,MAAMgD,OAAO,IAAI,CAACrC,iBAAiB,CAACvC,GAAG,CAAC0F,GAAAA,CAAAA;AACxC,QAAA,IAAId,IAAM,EAAA;AACRA,YAAAA,IAAAA,CAAKC,MAAM,GAAGA,MAAAA;AAChB;AACF;AACA;;;;;;;;;;AAUC,MACDc,aAAc/D,CAAAA,IAAY,EAAEgE,OAA8B,EAAE;AAC1D,QAAA,MAAMF,GAAM,GAAA,IAAI,CAACtD,WAAW,CAACR,IAAK,CAAA;AAClC,QAAA,IAAI,CAAC8D,GAAK,EAAA;AACR3C,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,UAAU,EAAEpB,IAAAA,CAAK,WAAW,CAAC,CAAA;AAC5C,YAAA;AACF;AACA,QAAA,MAAMkD,SAASC,IAAKc,CAAAA,GAAG,CAACD,OAAAA,EAASd,UAAU,CAAG,EAAA,CAAA,CAAA;AAC9C,QAAA,MAAMF,OAAO,IAAI,CAACrC,iBAAiB,CAACvC,GAAG,CAAC0F,GAAAA,CAAAA;AACxC,QAAA,IAAId,IAAM,EAAA;AACRA,YAAAA,IAAAA,CAAKd,OAAO,GAAG,CAAA;AACfc,YAAAA,IAAAA,CAAKE,MAAM,GAAGA,MAAAA;SACT,MAAA;YACL,MAAMR,MAAAA,GAASsB,SAAStB,MAAU,IAAA,CAAA;YAClC,MAAMH,UAAAA,GAAayB,SAASzB,UAAc,IAAA,CAAA;AAC1C,YAAA,MAAMU,MAASe,GAAAA,OAAAA,EAASf,MAAUa,IAAAA,GAAAA,CAAIb,MAAM,IAAI,CAAA;AAChD,YAAA,IAAI,CAACtC,iBAAiB,CAAChF,GAAG,CAACmI,GAAK,EAAA;AAC9BpB,gBAAAA,MAAAA;AACAO,gBAAAA,MAAAA;AACAV,gBAAAA,UAAAA;AACAW,gBAAAA,MAAAA;gBACAhB,OAAS,EAAA,CAAA;gBACTO,aAAe,EAAA,CAAA;AACfD,gBAAAA,WAAAA,EAAaD,UAAa,GAAA,CAAA,GAAIuB,GAAInG,CAAAA,YAAY,GAAG,CAAA;gBACjDyE,WAAa,EAAA,CAAA;gBACbD,YAAc,EAAA,CAAA;gBACdE,UAAY,EAAA;AACd,aAAA,CAAA;AACAyB,YAAAA,GAAAA,CAAIxH,MAAM,EAAE0F,OAAQ,CAAA,CAAC9F,CAAG+F,EAAAA,CAAAA,GAAAA;AACtB,gBAAA,IAAIiC,aAAa,IAAI,CAACzD,aAAa,CAACrC,GAAG,CAAC6D,CAAAA,CAAAA;AACxC,gBAAA,IAAI,CAACiC,UAAY,EAAA;AACfA,oBAAAA,UAAAA,GAAa,IAAIzG,GAAAA,EAAAA;AACjB,oBAAA,IAAI,CAACgD,aAAa,CAAC9E,GAAG,CAACsG,CAAGiC,EAAAA,UAAAA,CAAAA;AAC5B;gBACA,KAAK,MAAM1H,SAASN,CAAG,CAAA;oBACrB,MAAMiI,OAAAA,GAAU3H,MAAM4H,UAAU,EAAA;oBAChC,IAAIC,aAAAA,GAAgBH,UAAW9F,CAAAA,GAAG,CAAC+F,OAAAA,CAAAA;AACnC,oBAAA,IAAI,CAACE,aAAe,EAAA;AAClBA,wBAAAA,aAAAA,GAAgB,EAAE;wBAClBH,UAAWvI,CAAAA,GAAG,CAACwI,OAASE,EAAAA,aAAAA,CAAAA;AAC1B;AACAA,oBAAAA,aAAAA,CAAcC,IAAI,CAAC9H,KAAAA,CAAAA;AACrB;AACF,aAAA,CAAA;AACAsH,YAAAA,GAAAA,CAAI9C,SAAS,EAAEgB,OAAQ,CAAA,CAAC9F,CAAG+F,EAAAA,CAAAA,GAAAA;AACzB,gBAAA,MAAMsC,WAAW,IAAI,CAACjE,KAAK,CAACkE,gBAAgB,CAACvC,CAAAA,CAAAA;AAC7C,gBAAA,IAAIsC,QAAU,EAAA;AACZ,oBAAA,MAAME,WAAW,IAAI,CAAC/D,gBAAgB,CAACtC,GAAG,CAACmG,QAAAA,CAAAA;AAC3C,oBAAA,IAAIE,QAAU,EAAA;AACZ,wBAAA,IAAI,CAAC/D,gBAAgB,CAAC/E,GAAG,CAAC4I,UAAUE,QAAW,GAAA,CAAA,CAAA;qBAC1C,MAAA;AACL,wBAAA,IAAI,CAAC/D,gBAAgB,CAAC/E,GAAG,CAAC4I,QAAU,EAAA,CAAA,CAAA;AACtC;AACAA,oBAAAA,QAAAA,CAASG,OAAO,GAAG,IAAA;AACrB;AACF,aAAA,CAAA;AACF;AACF;AACA;;;;;;;;;;;;AAYC,MACDhD,aAAc1B,CAAAA,IAAY,EAAEgE,OAA8B,EAAE;AAC1D,QAAA,MAAMF,GAAM,GAAA,IAAI,CAACtD,WAAW,CAACR,IAAK,CAAA;AAClC,QAAA,IAAI,CAAC8D,GAAK,EAAA;AACR3C,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,UAAU,EAAEpB,IAAAA,CAAK,WAAW,CAAC,CAAA;AAC5C,YAAA;AACF;AACA,QAAA,MAAMgD,OAAO,IAAI,CAACrC,iBAAiB,CAACvC,GAAG,CAAC0F,GAAAA,CAAAA;AACxC,QAAA,IAAId,IAAM,EAAA;AACR,YAAA,MAAMd,UAAUiB,IAAKc,CAAAA,GAAG,CAACD,OAAAA,EAAS9B,WAAW,CAAG,EAAA,CAAA,CAAA;AAChD,YAAA,IAAIA,YAAY,CAAG,EAAA;AACjBc,gBAAAA,IAAAA,CAAKd,OAAO,GAAGA,OAAAA;gBACfc,IAAKb,CAAAA,YAAY,GAAG,EAAC;aAChB,MAAA;AACL,gBAAA,IAAI,CAACxB,iBAAiB,CAACgE,MAAM,CAACb,GAAAA,CAAAA;AAC9B,gBAAA,IAAI,CAACrD,aAAa,CAACuB,OAAO,CAAC,CAAC9F,CAAAA,GAAAA;oBAC1BA,CAAE8F,CAAAA,OAAO,CAAC,CAAC1F,MAAQsI,EAAAA,EAAAA,GAAAA;wBACjB1I,CAAEP,CAAAA,GAAG,CACHiJ,EAAAA,EACAtI,MAAOsG,CAAAA,MAAM,CAAC,CAACpG,KAAAA,GAAUA,KAAM6E,CAAAA,SAAS,KAAKyC,GAAAA,CAAAA,CAAAA;AAEjD,qBAAA,CAAA;AACF,iBAAA,CAAA;AACAA,gBAAAA,GAAAA,CAAI9C,SAAS,EAAEgB,OAAQ,CAAA,CAAC9F,CAAG+F,EAAAA,CAAAA,GAAAA;AACzB,oBAAA,MAAMsC,WAAW,IAAI,CAACjE,KAAK,CAACkE,gBAAgB,CAACvC,CAAAA,CAAAA;AAC7C,oBAAA,IAAIsC,QAAU,EAAA;AACZ,wBAAA,MAAME,WAAW,IAAI,CAAC/D,gBAAgB,CAACtC,GAAG,CAACmG,QAAAA,CAAAA;AAC3C,wBAAA,IAAIE,aAAa,CAAG,EAAA;AAClBF,4BAAAA,QAAAA,CAASM,KAAK,EAAA;AACd,4BAAA,IAAI,CAACnE,gBAAgB,CAACiE,MAAM,CAACJ,QAAAA,CAAAA;yBACxB,MAAA;AACL,4BAAA,IAAI,CAAC7D,gBAAgB,CAAC/E,GAAG,CAAC4I,UAAUE,QAAW,GAAA,CAAA,CAAA;AACjD;AACF;AACF,iBAAA,CAAA;AACF;AACF;AACF;AACA;;;;;;;;;;;;AAYC,MACDK,0BACEC,SAAuB,EACvBC,aAAqB,EACrBC,UAAmB,EACG;AACtB,QAAA,MAAMC,WAAWD,UAAcD,IAAAA,aAAAA;QAC/B,MAAM7H,UAAAA,GAAa4H,SAAU3G,CAAAA,GAAG,CAAC4G,aAAAA,CAAAA;AACjC,QAAA,IAAI,CAAC7H,UAAY,EAAA;AACfgE,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,sCAAsC,EAAE4D,aAAAA,CAAc,yBAAyB,CAAC,CAAA;YAC/F,OAAO,IAAA;AACT;AACA,QAAA,IAAI,IAAI,CAACxE,WAAW,CAAC0E,SAAS,EAAE;AAC9B/D,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,sCAAsC,EAAE8D,QAAAA,CAAS,8BAA8B,CAAC,CAAA;YAC/F,OAAO,IAAA;AACT;AAEA,QAAA,IAAI/H,UAAW6D,CAAAA,SAAS,CAAC2C,IAAI,KAAK,CAAG,EAAA;AACnCxC,YAAAA,OAAAA,CAAQC,KAAK,CACX,CAAC,yFAAyF,CAAC,CAAA;YAE7F,OAAO,IAAA;AACT;AACA,QAAA,MAAM+D,aAAgB,GAAA;AAAIhI,YAAAA,GAAAA,UAAAA,CAAW6D;AAAU,SAAA,CAAC,CAAE,CAAA;QAClD,MAAMjJ,WAAAA,GAAcqN,QAASZ,CAAAA,gBAAgB,CAACW,aAAAA,CAAAA;AAC9C,QAAA,IAAI,CAACpN,WAAa,EAAA;AAChBoJ,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,4CAA4C,EAAE+D,aAAAA,CAAc,WAAW,CAAC,CAAA;YACvF,OAAO,IAAA;AACT;;QAGA,MAAME,kBAAAA,GAAqBtN,YAAYuN,oBAAoB;AAC3D,QAAA,IAAI,CAACD,kBAAoB,EAAA;AACvBlE,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,iFAAiF,CAAC,CAAA;YACjG,OAAO,IAAA;AACT;AAEA,QAAA,MAAMmE,UAAU,IAAI9H,GAAAA,EAAAA;AACpB,QAAA,MAAM+H,sBAAsB,IAAI/H,GAAAA,EAAAA;;AAGhC,QAAA,IAAIgI,oBAAiC,EAAE;AACvC,QAAA,IAAIC,oBAAiC,EAAE;AAEvC,QAAA,MAAM1N,WAAc,GAAA,IAAI,CAAC4I,UAAU,CAChCmC,GAAG,CAAC,CAAC4C,GAAAA,GAAQA,GAAIvH,CAAAA,GAAG,EACpB7B,CAAAA,CAAAA,IAAI,CAAC,CAACqJ,EAAAA,GAAAA;AACL,YAAA,IAAI,CAACA,EAAI,EAAA;gBACP,OAAO,KAAA;AACT;;YAEA,MAAMC,kBAAAA,GAAqBD,GAAGN,oBAAoB;AAClD,YAAA,IAAI,CAACO,kBAAoB,EAAA;gBACvB,OAAO,KAAA;AACT;;AAGA,YAAA,MAAMC,aAA0B,EAAE;AAClC,YAAA,MAAMC,aAA0B,EAAE;;AAGlC,YAAA,KAAK,MAAMC,GAAOlF,IAAAA,MAAAA,CAAOe,IAAI,CAACwD,kBAAAA,CAAmBY,IAAI,CAA+C,CAAA;AAClG,gBAAA,MAAMhO,QAAWoN,GAAAA,kBAAAA,CAAmBY,IAAI,CAACD,GAAI,CAAA;AAC7C,gBAAA,MAAM9N,QAAW2N,GAAAA,kBAAAA,CAAmBI,IAAI,CAACD,GAAI,CAAA;AAC7C,gBAAA,IAAI/N,YAAYC,QAAU,EAAA;AACxB4N,oBAAAA,UAAAA,CAAWxB,IAAI,CAACrM,QAAAA,CAAAA;AAChB8N,oBAAAA,UAAAA,CAAWzB,IAAI,CAACpM,QAAAA,CAAAA;AAClB;AACF;;AAGA,YAAA,IAAImN,kBAAmBa,CAAAA,QAAQ,IAAIL,kBAAAA,CAAmBK,QAAQ,EAAE;AAC9D,gBAAA,KAAK,MAAMF,GAAOlF,IAAAA,MAAAA,CAAOe,IAAI,CAC3BwD,kBAAAA,CAAmBa,QAAQ,CACsB,CAAA;AACjD,oBAAA,MAAMjO,QAAWoN,GAAAA,kBAAAA,CAAmBa,QAAQ,CAACF,GAAI,CAAA;AACjD,oBAAA,MAAM9N,QAAW2N,GAAAA,kBAAAA,CAAmBK,QAAQ,CAACF,GAAI,CAAA;AACjD,oBAAA,IAAI/N,YAAYC,QAAU,EAAA;AACxB4N,wBAAAA,UAAAA,CAAWxB,IAAI,CAACrM,QAAAA,CAAAA;AAChB8N,wBAAAA,UAAAA,CAAWzB,IAAI,CAACpM,QAAAA,CAAAA;AAClB;AACF;AACF;;AAGA,YAAA,IAAImN,kBAAmBc,CAAAA,SAAS,IAAIN,kBAAAA,CAAmBM,SAAS,EAAE;AAChE,gBAAA,KAAK,MAAMH,GAAOlF,IAAAA,MAAAA,CAAOe,IAAI,CAC3BwD,kBAAAA,CAAmBc,SAAS,CACsB,CAAA;AAClD,oBAAA,MAAMlO,QAAWoN,GAAAA,kBAAAA,CAAmBc,SAAS,CAACH,GAAI,CAAA;AAClD,oBAAA,MAAM9N,QAAW2N,GAAAA,kBAAAA,CAAmBM,SAAS,CAACH,GAAI,CAAA;AAClD,oBAAA,IAAI/N,YAAYC,QAAU,EAAA;AACxB4N,wBAAAA,UAAAA,CAAWxB,IAAI,CAACrM,QAAAA,CAAAA;AAChB8N,wBAAAA,UAAAA,CAAWzB,IAAI,CAACpM,QAAAA,CAAAA;AAClB;AACF;AACF;YAEA,IAAI4N,UAAAA,CAAW3K,MAAM,KAAK,CAAG,EAAA;gBAC3B,OAAO,KAAA;AACT;YAEAsK,iBAAoBK,GAAAA,UAAAA;YACpBJ,iBAAoBK,GAAAA,UAAAA;YACpB,OAAO,IAAA;AACT,SAAA,CAAA;AAEF,QAAA,IAAI,CAAC/N,WAAa,EAAA;AAChBmJ,YAAAA,OAAAA,CAAQC,KAAK,CACX,CAAC,4EAA4E,EAAE+D,aAAAA,CAAc,CAAC,CAAC,CAAA;YAEjG,OAAO,IAAA;AACT;;;;;;AAOA,QAAA,SAASiB,8BACPC,CAAAA,QAAmB,EACnBC,SAAoB,EACpB/B,QAAkB,EAAA;YAElB,MAAMgC,MAAAA,GAASpN,WAAWgG,QAAQ,EAAA;AAClC,YAAA,MAAMqH,QAAW,GAAA,IAAI9I,GAAI6G,CAAAA,QAAAA,CAASlM,MAAM,CAAA;YACxC,IAAIoO,CAAAA,GAAIJ,SAASjH,MAAM;YACvB,MAAOqH,CAAAA,IAAKA,MAAMH,SAAW,CAAA;AAC3B,gBAAA,IAAI,CAACE,QAAAA,CAASnH,GAAG,CAACoH,CAAI,CAAA,EAAA;AACpBtN,oBAAAA,UAAAA,CAAWY,QAAQ,CAAC0M,CAAEpN,CAAAA,QAAQ,EAAEkN,MAAQA,EAAAA,MAAAA,CAAAA;AAC1C;AACAE,gBAAAA,CAAAA,GAAIA,EAAErH,MAAM;AACd;YACA,OAAOmH,MAAAA;AACT;QAEA,MAAMG,WAAAA,GAAc3O,YAAYuN,oBAAoB,CAAEW,IAAI,CAACU,eAAAA,CAAgBC,IAAI,CAAC;QAChF,MAAMC,WAAAA,GAAc7O,YAAYsN,oBAAoB,CAAEW,IAAI,CAACU,eAAAA,CAAgBC,IAAI,CAAC;AAChF,QAAA,MAAME,UAAaV,GAAAA,8BAAAA,CAA+BM,WAAa3B,EAAAA,SAAAA,CAAUzE,KAAK,EAAEvI,WAAAA,CAAAA;AAChF,QAAA,MAAMgP,aAAaX,8BAA+BS,CAAAA,WAAAA,EAAa,IAAI,CAACtG,MAAM,EAAEvI,WAAAA,CAAAA;AAC5E,QAAA,MAAMgP,0BAA0B7N,UAAWY,CAAAA,QAAQ,CAACZ,UAAWC,CAAAA,OAAO,CAAC2N,UAAaD,CAAAA,EAAAA,UAAAA,CAAAA;AACpF,QAAA,MAAMG,cAAoC,EAAE;AAC5C,QAAA,MAAMC,iBAAiB,IAAIxJ,GAAAA,EAAAA;AAC3B,QAAA,MAAMyJ,iBAAiB,IAAIzJ,GAAAA,EAAAA;;AAE3B,QAAA,IAAK,IAAI0J,EAAK,GAAA,CAAA,EAAGA,KAAK3B,iBAAkBtK,CAAAA,MAAM,EAAEiM,EAAM,EAAA,CAAA;YACpD,MAAMnP,QAAAA,GAAWwN,iBAAiB,CAAC2B,EAAG,CAAA;YACtC,MAAMlP,QAAAA,GAAWwN,iBAAiB,CAAC0B,EAAG,CAAA;AACtC,YAAA,IAAIF,eAAe7H,GAAG,CAACpH,aAAakP,cAAe9H,CAAAA,GAAG,CAACnH,QAAW,CAAA,EAAA;AAChE,gBAAA;AACF;AACAgP,YAAAA,cAAAA,CAAerK,GAAG,CAAC5E,QAAAA,CAAAA;AACnBkP,YAAAA,cAAAA,CAAetK,GAAG,CAAC3E,QAAAA,CAAAA;AACnB,YAAA,MAAMmP,aAAapP,QAAayO,KAAAA,WAAAA;YAChCnB,OAAQ5J,CAAAA,GAAG,CAAC1D,QAAUC,EAAAA,QAAAA,CAAAA;AACtB,YAAA,MAAM2B,QAAQ/B,wBACZC,CAAAA,WAAAA,EACAC,aACAC,QACAC,EAAAA,QAAAA,EACAmP,aAAaL,uBAA0BM,GAAAA,SAAAA,CAAAA;AAEzCL,YAAAA,WAAAA,CAAY3C,IAAI,CAACzK,KAAAA,CAAAA;YACjB2L,mBAAoB7J,CAAAA,GAAG,CAAC1D,QAAU4B,EAAAA,KAAAA,CAAAA;AACpC;AAEA,QAAA,MAAMyD,OAAU,GAAA,IAAI,CAAC2D,eAAe,CAACiE,QAAAA,CAAAA;AACrC,QAAA,IAAI,CAAC5H,OAAS,EAAA;YACZ,OAAO,IAAA;AACT;QACAA,OAAQK,CAAAA,YAAY,GAAGR,UAAAA,CAAWQ,YAAY;QAC9CL,OAAQ2F,CAAAA,MAAM,GAAG9F,UAAAA,CAAW8F,MAAM;QAClC3F,OAAQiK,CAAAA,QAAQ,GAAGpK,UAAAA,CAAWoK,QAAQ;;QAGtCjK,OAAQkK,CAAAA,WAAW,CAACxP,WAAAA,CAAYiI,YAAY,CAAA;AAE5C/C,QAAAA,0BAAAA,CACEC,UACApF,EAAAA,WAAAA,EACAC,WACA8O,EAAAA,UAAAA,EACAC,YACAzJ,OACA2J,EAAAA,WAAAA,CAAAA;QAGF,KAAK,MAAMhO,WAAWwM,iBAAmB,CAAA;AACvC,YAAA,MAAMgC,SAAYtK,GAAAA,UAAAA,CAAWb,MAAM,CAAC8B,GAAG,CAACnF,OAAAA,CAAAA;AACxC,YAAA,IAAI,CAACwO,SAAW,EAAA;AAEd,gBAAA;AACF;YACA,MAAM1O,OAAAA,GAAUwM,OAAQnH,CAAAA,GAAG,CAACnF,OAAAA,CAAAA;YAC5B,MAAMY,KAAAA,GAAQ2L,mBAAoBpH,CAAAA,GAAG,CAACnF,OAAAA,CAAAA;YAEtC,KAAK,MAAMyO,YAAYD,SAAW,CAAA;gBAChC,IAAIE,QAAAA;AACJ,gBAAA,IAAID,oBAAoB7L,iBAAmB,EAAA;AACzC,oBAAA;iBACK,MAAA,IAAI6L,oBAAoBjL,sBAAwB,EAAA;AACrD,oBAAA;iBACK,MAAA,IAAIiL,oBAAoBtL,oBAAsB,EAAA;AACnDuL,oBAAAA,QAAAA,GAAW1L,yBAAyByL,QAAU7N,EAAAA,KAAAA,CAAAA;iBACzC,MAAA,IAAI6N,oBAAoBE,cAAgB,EAAA;AAC7CD,oBAAAA,QAAAA,GAAW,IAAIC,cAAAA,CAAetQ,iBAAkBoQ,CAAAA,QAAAA,CAAS1M,YAAY,CAAA,CAAA;iBAChE,MAAA;oBACLmG,OAAQ0G,CAAAA,IAAI,CACV,CAAC,mDAAmD,EAAEH,QAAS,CAAA,WAAW,CAAC1H,IAAI,CAAC,WAAW,CAAC,CAAA;AAE9F,oBAAA;AACF;gBAEA2H,QAAS3H,CAAAA,IAAI,GAAG0H,QAAAA,CAAS1H,IAAI;gBAC7B2H,QAASjQ,CAAAA,MAAM,GAAGqB,OAAAA,CAAQkH,YAAY;gBACtC0H,QAASzH,CAAAA,UAAU,GAAGrG,KAAAA,CAAMb,aAAa;gBACzCsE,OAAQ6C,CAAAA,QAAQ,CAACpH,OAAS4O,EAAAA,QAAAA,CAAAA;AAC5B;AACF;QAEA,OAAOrK,OAAAA;AACT;AACA;;;;;;;;;;;;;;;MAgBAwK,iBAAAA,CACE/C,SAAuB,EACvBC,aAAqB,EACrBC,UAAmB,EACnB8C,YAA6C,EACvB;AACtB,QAAA,MAAM7C,WAAWD,UAAcD,IAAAA,aAAAA;QAC/B,MAAM7H,UAAAA,GAAa4H,SAAU3G,CAAAA,GAAG,CAAC4G,aAAAA,CAAAA;AACjC,QAAA,IAAI,CAAC7H,UAAY,EAAA;AACfgE,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,8BAA8B,EAAE4D,aAAAA,CAAc,yBAAyB,CAAC,CAAA;YACvF,OAAO,IAAA;AACT;AACA,QAAA,IAAI,IAAI,CAACxE,WAAW,CAAC0E,SAAS,EAAE;AAC9B/D,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,8BAA8B,EAAE8D,QAAAA,CAAS,8BAA8B,CAAC,CAAA;YACvF,OAAO,IAAA;AACT;AAEA,QAAA,IAAI/H,UAAW6D,CAAAA,SAAS,CAAC2C,IAAI,KAAK,CAAG,EAAA;AACnCxC,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,iFAAiF,CAAC,CAAA;YACjG,OAAO,IAAA;AACT;AACA,QAAA,MAAM+D,aAAgB,GAAA;AAAIhI,YAAAA,GAAAA,UAAAA,CAAW6D;AAAU,SAAA,CAAC,CAAE,CAAA;QAClD,MAAMjJ,WAAAA,GAAcqN,QAASZ,CAAAA,gBAAgB,CAACW,aAAAA,CAAAA;AAC9C,QAAA,IAAI,CAACpN,WAAa,EAAA;AAChBoJ,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,oCAAoC,EAAE+D,aAAAA,CAAc,WAAW,CAAC,CAAA;YAC/E,OAAO,IAAA;AACT;AACA,QAAA,MAAMI,UAAU,IAAI9H,GAAAA,EAAAA;AACpB,QAAA,MAAM+H,sBAAsB,IAAI/H,GAAAA,EAAAA;QAEhC,MAAMuK,cAAAA,GAAiBjQ,WAAYM,CAAAA,MAAM,CAACuK,MAAM,CAAC,CAACqF,CAAM,GAAA,CAACF,YAAeE,GAAAA,CAAAA,CAAEjI,IAAI,CAAA,CAAA;AAC9E,QAAA,MAAMkI,cAAcC,aAAcH,CAAAA,cAAAA,CAAAA;AAClC,QAAA,IAAI,CAACE,WAAa,EAAA;AAChB/G,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,sEAAsE,CAAC,CAAA;YACtF,OAAO,IAAA;AACT;;QAEA,MAAMqE,iBAAAA,GAAoB2C,WAAWF,WAAaF,EAAAA,cAAAA,CAAAA;AAClD,QAAA,IAAI,CAACvC,iBAAmB,EAAA;AACtBtE,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,oDAAoD,CAAC,CAAA;YACpE,OAAO,IAAA;AACT;AACA,QAAA,IAAIsE,oBAAiC,EAAE;AACvC,QAAA,MAAM1N,WAAc,GAAA,IAAI,CAAC4I,UAAU,CAChCmC,GAAG,CAAC,CAAC4C,GAAAA,GAAQA,GAAIvH,CAAAA,GAAG,EACpB7B,CAAAA,CAAAA,IAAI,CAAC,CAACqJ,EAAAA,GAAAA;AACL,YAAA,IAAI,CAACA,EAAI,EAAA;gBACP,OAAO,KAAA;AACT;YACA,MAAMoC,cAAAA,GAAiBpC,EAAGvN,CAAAA,MAAM,CAACuK,MAAM,CAAC,CAACqF,CAAM,GAAA,CAACF,YAAeE,GAAAA,CAAAA,CAAEjI,IAAI,CAAA,CAAA;AACrE,YAAA,IAAIgI,cAAe7M,CAAAA,MAAM,KAAKsK,iBAAAA,CAAkBtK,MAAM,EAAE;gBACtD,OAAO,KAAA;AACT;AACA,YAAA,MAAMkN,WAAWF,aAAcH,CAAAA,cAAAA,CAAAA;AAC/B,YAAA,IAAI,CAACK,QAAU,EAAA;gBACb,OAAO,KAAA;AACT;YACA,MAAMC,oBAAAA,GAAuBF,WAAWC,QAAUL,EAAAA,cAAAA,CAAAA;AAClD,YAAA,IACEM,oBACA7C,IAAAA,iBAAAA,CAAkB8C,KAAK,CAAC,CAACN,CAAG/J,EAAAA,CAAAA,GAAM+J,CAAEjI,CAAAA,IAAI,KAAKsI,oBAAoB,CAACpK,CAAE,CAAA,CAAC8B,IAAI,CACzE,EAAA;gBACA0F,iBAAoB4C,GAAAA,oBAAAA;gBACpB,OAAO,IAAA;AACT;YACA,OAAO,KAAA;AACT,SAAA,CAAA;QACF,IAAI,CAAC5C,iBAAqB,IAAA,CAAC1N,WAAa,EAAA;AACtCmJ,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,2DAA2D,EAAE+D,aAAAA,CAAc,CAAC,CAAC,CAAA;YAC5F,OAAO,IAAA;AACT;;AAEA,QAAA,IAAK,IAAIiC,EAAK,GAAA,CAAA,EAAGA,KAAK3B,iBAAkBtK,CAAAA,MAAM,EAAEiM,EAAM,EAAA,CAAA;YACpD,MAAMnP,QAAAA,GAAWwN,iBAAiB,CAAC2B,EAAG,CAAA;YACtC,MAAMlP,QAAAA,GAAWwN,iBAAiB,CAAC0B,EAAG,CAAA;YACtC7B,OAAQ5J,CAAAA,GAAG,CAAC1D,QAAUC,EAAAA,QAAAA,CAAAA;AACtBsN,YAAAA,mBAAAA,CAAoB7J,GAAG,CACrB1D,QAAAA,EACAH,wBAAyBC,CAAAA,WAAAA,EAAaC,aAAaC,QAAUC,EAAAA,QAAAA,CAAAA,CAAAA;AAEjE;AAEA,QAAA,MAAMoF,OAAU,GAAA,IAAI,CAAC2D,eAAe,CAACiE,QAAAA,CAAAA;AACrC,QAAA,IAAI,CAAC5H,OAAS,EAAA;YACZ,OAAO,IAAA;AACT;QACAA,OAAQK,CAAAA,YAAY,GAAGR,UAAAA,CAAWQ,YAAY;QAC9CL,OAAQ2F,CAAAA,MAAM,GAAG9F,UAAAA,CAAW8F,MAAM;QAClC3F,OAAQiK,CAAAA,QAAQ,GAAGpK,UAAAA,CAAWoK,QAAQ;;QAGtCjK,OAAQkK,CAAAA,WAAW,CAACxP,WAAAA,CAAYiI,YAAY,CAAA;QAE5C,KAAK,MAAMhH,WAAWwM,iBAAmB,CAAA;AACvC,YAAA,MAAMgC,SAAYtK,GAAAA,UAAAA,CAAWb,MAAM,CAAC8B,GAAG,CAACnF,OAAAA,CAAAA;AACxC,YAAA,IAAI,CAACwO,SAAW,EAAA;AACdtG,gBAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,uCAAuC,EAAEnI,OAAAA,CAAQ+G,IAAI,CAAE,CAAA,CAAA;gBACtE,OAAO,IAAA;AACT;YACA,MAAMjH,OAAAA,GAAUwM,OAAQnH,CAAAA,GAAG,CAACnF,OAAAA,CAAAA;YAC5B,MAAMY,KAAAA,GAAQ2L,mBAAoBpH,CAAAA,GAAG,CAACnF,OAAAA,CAAAA;YAEtC,KAAK,MAAMyO,YAAYD,SAAW,CAAA;gBAChC,IAAIE,QAAAA;AACJ,gBAAA,IAAID,oBAAoB7L,iBAAmB,EAAA;AACzC8L,oBAAAA,QAAAA,GAAW7M,sBAAsB4M,QAAU7N,EAAAA,KAAAA,CAAAA;iBACtC,MAAA,IAAI6N,oBAAoBjL,sBAAwB,EAAA;AACrDkL,oBAAAA,QAAAA,GAAW7L,6BAA6B4L,QAAU7N,EAAAA,KAAAA,CAAAA;iBAC7C,MAAA,IAAI6N,oBAAoBtL,oBAAsB,EAAA;AACnDuL,oBAAAA,QAAAA,GAAW1L,yBAAyByL,QAAU7N,EAAAA,KAAAA,CAAAA;iBACzC,MAAA,IAAI6N,oBAAoBE,cAAgB,EAAA;AAC7CD,oBAAAA,QAAAA,GAAW,IAAIC,cAAAA,CAAetQ,iBAAkBoQ,CAAAA,QAAAA,CAAS1M,YAAY,CAAA,CAAA;iBAChE,MAAA;oBACLmG,OAAQ0G,CAAAA,IAAI,CAAC,CAAC,2CAA2C,EAAEH,QAAS,CAAA,WAAW,CAAC1H,IAAI,CAAC,WAAW,CAAC,CAAA;AACjG,oBAAA;AACF;gBAEA2H,QAAS3H,CAAAA,IAAI,GAAG0H,QAAAA,CAAS1H,IAAI;gBAC7B2H,QAASjQ,CAAAA,MAAM,GAAGqB,OAAAA,CAAQkH,YAAY;gBACtC0H,QAASzH,CAAAA,UAAU,GAAGrG,KAAAA,CAAMb,aAAa;gBACzCsE,OAAQ6C,CAAAA,QAAQ,CAACpH,OAAS4O,EAAAA,QAAAA,CAAAA;AAC5B;AACF;QAEA,OAAOrK,OAAAA;AAEP,QAAA,SAAS6K,cAAc9P,MAAmB,EAAA;AACxC,YAAA,IAAImQ,IAA4B,GAAA,IAAA;YAChC,KAAK,MAAMrK,SAAS9F,MAAQ,CAAA;AAC1B,gBAAA,IAAI,CAACmQ,IAAM,EAAA;oBACTA,IAAOrK,GAAAA,KAAAA;AACT;AACA,gBAAA,MAAO,CAACqK,IAAAA,CAAMC,UAAU,CAACtK,KAAQ,CAAA,CAAA;AAC/BqK,oBAAAA,IAAAA,GAAOA,KAAMpJ,MAAM;AACrB;AACA,gBAAA,IAAI,CAACoJ,IAAM,EAAA;AACT,oBAAA;AACF;AACF;AACA,YAAA,IAAI,CAACA,IAAQ,IAAA,CAACnQ,MAAOqQ,CAAAA,QAAQ,CAACF,IAAO,CAAA,EAAA;gBACnC,OAAO,IAAA;AACT;YACA,OAAOA,IAAAA;AACT;QAEA,SAASJ,UAAAA,CAAWI,IAAe,EAAEnQ,MAAmB,EAAA;AACtD,YAAA,MAAMsQ,UAAuB,EAAE;AAC/B,YAAA,MAAMC,UAAU,IAAIlL,GAAAA,EAAAA;AACpB,YAAA,SAASmL,MAAM1K,KAAgB,EAAA;gBAC7B,IAAIyK,OAAAA,CAAQvJ,GAAG,CAAClB,KAAQ,CAAA,EAAA;oBACtB,OAAO,IAAA;AACT;AACA,gBAAA,IAAI,CAAC9F,MAAAA,CAAOqQ,QAAQ,CAACvK,KAAQ,CAAA,EAAA;oBAC3B,OAAO,KAAA;AACT;AACA,gBAAA,IAAIA,UAAUqK,IAAM,EAAA;AAClBK,oBAAAA,KAAAA,CAAM1K,MAAMiB,MAAM,CAAA;AACpB;AACAwJ,gBAAAA,OAAAA,CAAQ/L,GAAG,CAACsB,KAAAA,CAAAA;AACZwK,gBAAAA,OAAAA,CAAQrE,IAAI,CAACnG,KAAAA,CAAAA;gBACb,OAAO,IAAA;AACT;YACA,KAAK,MAAMA,SAAS9F,MAAQ,CAAA;gBAC1B,IAAI,CAACwQ,MAAM1K,KAAQ,CAAA,EAAA;oBACjB,OAAO,IAAA;AACT;AACF;YACA,OAAOwK,OAAAA;AACT;AACF;AAEA;;;;;;AAMC,MACD,SAAsB,GAAA;AACpB,QAAA,KAAK,CAACG,SAAAA,EAAAA;AACN,QAAA,IAAK,MAAM7G,CAAAA,IAAK,IAAI,CAACzB,WAAW,CAAE;AAChC,YAAA,IAAI,CAACA,WAAW,CAACyB,CAAAA,CAAE,CAAEN,OAAO,EAAA;AAC9B;QACA,IAAI,CAACnB,WAAW,GAAG,EAAC;QACpB,IAAI,CAACG,iBAAiB,CAACb,KAAK,EAAA;QAC5B,IAAI,CAACY,gBAAgB,CAACZ,KAAK,EAAA;QAC3B,IAAI,CAACW,aAAa,CAACX,KAAK,EAAA;AAC1B;AACF;;;;"}
1
+ {"version":3,"file":"animationset.js","sources":["../../src/animation/animationset.ts"],"sourcesContent":["import { weightedAverage, Disposable, Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport type { DRef, IDisposable, Nullable } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene';\r\nimport { AnimationClip } from './animation';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport { NodeRotationTrack } from './rotationtrack';\r\nimport { NodeEulerRotationTrack } from './eulerrotationtrack';\r\nimport { NodeTranslationTrack } from './translationtrack';\r\nimport { NodeScaleTrack } from './scaletrack';\r\nimport type { SkeletonBindPose, SkeletonRig, SkinBinding } from './skeleton';\r\nimport { HumanoidBodyRig } from './skeleton';\r\nimport type { SkeletalAnimationMaskOptions } from './animationmask';\r\nimport { createSkeletalMaskedAnimationClip } from './animationmask';\r\n\r\n/**\r\n * Options for playing an animation.\r\n *\r\n * Controls looping, playback speed (including reverse), and fade-in blending.\r\n * @public\r\n **/\r\nexport type PlayAnimationOptions = {\r\n /**\r\n * Number of loops to play.\r\n *\r\n * - 0: infinite looping (default).\r\n * - n \\> 0: play exactly n loops (each loop is one full duration of the clip).\r\n */\r\n repeat?: number;\r\n /**\r\n * Playback speed multiplier.\r\n *\r\n * - 1: normal speed (default).\r\n * - \\>1: faster; \\<1: slower.\r\n * - Negative values play the clip in reverse. The initial `currentTime` will be set to the end.\r\n */\r\n speedRatio?: number;\r\n /**\r\n * Fade-in duration in seconds.\r\n *\r\n * Interpolates the animation weight from 0 to the clip's configured weight over this time.\r\n * Use together with `stopAnimation(..., { fadeOut })` for smooth cross-fading.\r\n * Default is 0 (no fade-in).\r\n */\r\n fadeIn?: number;\r\n /**\r\n * Weight of the animation clip.\r\n *\r\n * Used during blending when multiple animations affect the same property.\r\n * Default is the clip's configured weight.\r\n */\r\n weight?: number;\r\n};\r\n\r\n/**\r\n * Options for stopping an animation.\r\n *\r\n * Allows a graceful fade-out instead of abrupt stop.\r\n * @public\r\n */\r\nexport type StopAnimationOptions = {\r\n /**\r\n * Fade-out duration in seconds.\r\n *\r\n * Interpolates the current animation weight down to 0 over this time.\r\n * Default is 0 (immediate stop).\r\n */\r\n fadeOut?: number;\r\n};\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionMode = 'scaled' | 'copy' | 'locked' | 'none';\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionScaleMode = 'legLength' | 'none' | number;\r\n\r\n/** @public */\r\nexport type HumanoidRetargetAxisLocks = {\r\n x?: boolean;\r\n y?: boolean;\r\n z?: boolean;\r\n};\r\n\r\n/** @public */\r\nexport type CopyHumanoidAnimationOptions = {\r\n /**\r\n * Name for the new clip. Ignored when the legacy third `targetName` argument is a string.\r\n */\r\n targetName?: string;\r\n /**\r\n * How root translation should be handled.\r\n *\r\n * - `scaled`: retarget and scale root motion to the destination rig size.\r\n * - `copy`: retarget root motion without scale.\r\n * - `locked`: write a constant destination bind-pose root translation.\r\n * - `none`: do not create a root translation track.\r\n */\r\n rootMotion?: HumanoidRootMotionMode;\r\n /**\r\n * Scale used when `rootMotion` is `scaled`.\r\n */\r\n rootMotionScale?: HumanoidRootMotionScaleMode;\r\n /**\r\n * Axis locks applied after root motion retargeting. Locked axes stay at the destination bind pose.\r\n */\r\n lockRootMotionAxes?: HumanoidRetargetAxisLocks;\r\n /**\r\n * Whether to preserve non-root humanoid translation tracks. These are skipped by default because\r\n * retargeting humanoid joints should normally keep the destination skeleton lengths intact.\r\n */\r\n jointTranslations?: 'skip' | 'preserve';\r\n};\r\n\r\ntype JointRetargetRemap = {\r\n dstNode: SceneNode;\r\n dstJointIndex: number;\r\n srcNode: SceneNode;\r\n srcBindRotInv: Quaternion;\r\n dstBindRot: Quaternion;\r\n srcBindPos: Vector3;\r\n dstBindPos: Vector3;\r\n translationScale: number;\r\n translationRotation?: Quaternion;\r\n translationAxisLocks?: HumanoidRetargetAxisLocks;\r\n};\r\n\r\nfunction cloneInterpolator(src: Interpolator): Interpolator {\r\n return new Interpolator(\r\n src.mode,\r\n src.target,\r\n src.inputs instanceof Float32Array ? new Float32Array(src.inputs) : [...src.inputs],\r\n src.outputs instanceof Float32Array ? new Float32Array(src.outputs) : [...src.outputs]\r\n );\r\n}\r\n\r\nfunction createJointRetargetRemap(\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcJoint: SceneNode,\r\n dstJoint: SceneNode,\r\n translationRotation?: Quaternion,\r\n translationScale?: number,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks\r\n): JointRetargetRemap {\r\n const si = srcSkeleton.joints.indexOf(srcJoint);\r\n const di = dstSkeleton.joints.indexOf(dstJoint);\r\n const srcBindPose = srcSkeleton.bindPose[si];\r\n const dstBindPose = dstSkeleton.bindPose[di];\r\n const srcLen = srcBindPose.position.magnitude;\r\n const dstLen = dstBindPose.position.magnitude;\r\n return {\r\n dstNode: dstJoint,\r\n dstJointIndex: di,\r\n srcNode: srcJoint,\r\n srcBindRotInv: Quaternion.inverse(srcBindPose.rotation),\r\n dstBindRot: dstBindPose.rotation.clone(),\r\n srcBindPos: srcBindPose.position.clone(),\r\n dstBindPos: dstBindPose.position.clone(),\r\n translationScale: translationScale ?? (srcLen > 1e-6 ? dstLen / srcLen : 1),\r\n translationRotation,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction createTranslationRetargetRemap(\r\n srcNode: SceneNode,\r\n dstNode: SceneNode,\r\n srcBindPos: Vector3,\r\n dstBindPos: Vector3,\r\n dstJointIndex: number,\r\n translationScale: number,\r\n translationRotation?: Quaternion,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks\r\n): JointRetargetRemap {\r\n return {\r\n dstNode,\r\n dstJointIndex,\r\n srcNode,\r\n srcBindRotInv: Quaternion.identity(),\r\n dstBindRot: Quaternion.identity(),\r\n srcBindPos: srcBindPos.clone(),\r\n dstBindPos: dstBindPos.clone(),\r\n translationScale,\r\n translationRotation,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction getBindPosition(skeleton: SkeletonRig, joint: SceneNode): Vector3 | null {\r\n const index = skeleton.joints.indexOf(joint);\r\n return index >= 0 ? skeleton.bindPose[index].position : null;\r\n}\r\n\r\nfunction getRigBindPoseForNode(skeleton: SkeletonRig, node: SceneNode): SkeletonBindPose {\r\n return (\r\n skeleton.getBindPoseForJoint(node) ??\r\n (node === skeleton.rootJoint\r\n ? skeleton.rootBindPose\r\n : {\r\n position: node.position,\r\n rotation: node.rotation,\r\n scale: node.scale\r\n })\r\n );\r\n}\r\n\r\nfunction getBindDistanceToAncestor(skeleton: SkeletonRig, joint: SceneNode, ancestor: SceneNode): number {\r\n let distance = 0;\r\n let node: SceneNode | null = joint;\r\n while (node && node !== ancestor) {\r\n const bindPosition = getBindPosition(skeleton, node);\r\n if (!bindPosition) {\r\n return 0;\r\n }\r\n distance += bindPosition.magnitude;\r\n node = node.parent;\r\n }\r\n return node === ancestor ? distance : 0;\r\n}\r\n\r\nfunction getHumanoidLegLength(skeleton: SkeletonRig, side: 'left' | 'right'): number {\r\n const mapping = skeleton.humanoidJointMapping;\r\n if (!mapping) {\r\n return 0;\r\n }\r\n const body = mapping.body;\r\n const hips = body[HumanoidBodyRig.Hips];\r\n const foot = side === 'left' ? body[HumanoidBodyRig.LeftFoot] : body[HumanoidBodyRig.RightFoot];\r\n const toes = side === 'left' ? body[HumanoidBodyRig.LeftToes] : body[HumanoidBodyRig.RightToes];\r\n return Math.max(\r\n getBindDistanceToAncestor(skeleton, foot, hips),\r\n getBindDistanceToAncestor(skeleton, toes, hips)\r\n );\r\n}\r\n\r\nfunction getHumanoidRootMotionScale(srcSkeleton: SkeletonRig, dstSkeleton: SkeletonRig): number {\r\n const srcLeftLeg = getHumanoidLegLength(srcSkeleton, 'left');\r\n const srcRightLeg = getHumanoidLegLength(srcSkeleton, 'right');\r\n const dstLeftLeg = getHumanoidLegLength(dstSkeleton, 'left');\r\n const dstRightLeg = getHumanoidLegLength(dstSkeleton, 'right');\r\n const srcLegLength = Math.max(srcLeftLeg, srcRightLeg);\r\n const dstLegLength = Math.max(dstLeftLeg, dstRightLeg);\r\n return srcLegLength > 1e-6 && dstLegLength > 1e-6 ? dstLegLength / srcLegLength : 1;\r\n}\r\n\r\nfunction findTranslationTrack(tracks: AnimationTrack[] | undefined): NodeTranslationTrack | null {\r\n return (tracks?.find((track) => track instanceof NodeTranslationTrack) ??\r\n null) as NodeTranslationTrack | null;\r\n}\r\n\r\nfunction applyTranslationAxisLocks(\r\n value: Vector3,\r\n bindValue: Vector3,\r\n locks: HumanoidRetargetAxisLocks | undefined\r\n) {\r\n if (locks?.x) {\r\n value.x = bindValue.x;\r\n }\r\n if (locks?.y) {\r\n value.y = bindValue.y;\r\n }\r\n if (locks?.z) {\r\n value.z = bindValue.z;\r\n }\r\n}\r\n\r\nfunction applyTranslationTangentAxisLocks(value: Vector3, locks: HumanoidRetargetAxisLocks | undefined) {\r\n if (locks?.x) {\r\n value.x = 0;\r\n }\r\n if (locks?.y) {\r\n value.y = 0;\r\n }\r\n if (locks?.z) {\r\n value.z = 0;\r\n }\r\n}\r\n\r\nfunction retargetRotation(qSrcAnim: Quaternion, remap: JointRetargetRemap, out: Quaternion): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcAnim, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out.inplaceNormalize();\r\n}\r\n\r\nfunction retargetRotationTangent(\r\n qSrcTangent: Quaternion,\r\n remap: JointRetargetRemap,\r\n out: Quaternion\r\n): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcTangent, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationValue(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.subBy(remap.srcBindPos);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n out.addBy(remap.dstBindPos);\r\n applyTranslationAxisLocks(out, remap.dstBindPos, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationTangent(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n applyTranslationTangentAxisLocks(out, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetRotationTrack(src: NodeRotationTrack, remap: JointRetargetRemap): NodeRotationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 12 : 4;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 4 : 0;\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n q.setXYZW(\r\n srcOutputs[base + t],\r\n srcOutputs[base + t + 1],\r\n srcOutputs[base + t + 2],\r\n srcOutputs[base + t + 3]\r\n );\r\n retargetRotation(q, remap, q);\r\n if (isCubic) {\r\n // Cubic quaternion tangents live in the same component space, so apply the\r\n // same constant bind-pose transform without normalizing them.\r\n q.setXYZW(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2], srcOutputs[base + 3]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base);\r\n newOutputs.set(\r\n retargetRotation(new Quaternion(srcOutputs.subarray(base + 4, base + 8)), remap, q),\r\n base + 4\r\n );\r\n q.setXYZW(srcOutputs[base + 8], srcOutputs[base + 9], srcOutputs[base + 10], srcOutputs[base + 11]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base + 8);\r\n } else {\r\n newOutputs.set(q, base);\r\n }\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'quat',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetEulerToRotationTrack(\r\n src: NodeEulerRotationTrack,\r\n remap: JointRetargetRemap\r\n): NodeRotationTrack {\r\n const srcInputs = src.interpolator.inputs as Float32Array;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const t = isCubic ? 3 : 0;\r\n const numFrames = srcInputs.length;\r\n const newOutputs = new Float32Array(numFrames * 4);\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride + t;\r\n q.fromEulerAngle(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n retargetRotation(q, remap, q);\r\n newOutputs.set(q, f * 4);\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode === 'step' ? 'step' : 'linear',\r\n 'quat',\r\n new Float32Array(srcInputs),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetTranslationTrack(\r\n src: NodeTranslationTrack,\r\n remap: JointRetargetRemap\r\n): NodeTranslationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 3 : 0;\r\n const v = new Vector3();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n v.setXYZ(srcOutputs[base + t], srcOutputs[base + t + 1], srcOutputs[base + t + 2]);\r\n retargetTranslationValue(v, remap, v);\r\n if (isCubic) {\r\n v.setXYZ(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base);\r\n v.setXYZ(srcOutputs[base + 3], srcOutputs[base + 4], srcOutputs[base + 5]);\r\n newOutputs.set(retargetTranslationValue(v, remap, v), base + 3);\r\n v.setXYZ(srcOutputs[base + 6], srcOutputs[base + 7], srcOutputs[base + 8]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base + 6);\r\n } else {\r\n newOutputs.set(v, base);\r\n }\r\n }\r\n return new NodeTranslationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'vec3',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction createConstantTranslationTrack(value: Vector3): NodeTranslationTrack {\r\n return new NodeTranslationTrack(\r\n new Interpolator('step', 'vec3', new Float32Array([0]), new Float32Array([value.x, value.y, value.z]))\r\n );\r\n}\r\n\r\nfunction findRotationTrack(\r\n tracks: AnimationTrack[] | undefined\r\n): NodeRotationTrack | NodeEulerRotationTrack | null {\r\n return (tracks?.find(\r\n (track) => track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack\r\n ) ?? null) as NodeRotationTrack | NodeEulerRotationTrack | null;\r\n}\r\n\r\nfunction collectTrackTimes(track: AnimationTrack | null, times: Set<number>) {\r\n if (track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack) {\r\n for (const time of track.interpolator.inputs as Float32Array) {\r\n times.add(time);\r\n }\r\n }\r\n}\r\n\r\nfunction sampleRotationTrack(\r\n track: NodeRotationTrack | NodeEulerRotationTrack | null,\r\n time: number,\r\n fallback: Quaternion,\r\n out: Quaternion\r\n): Quaternion {\r\n if (!track) {\r\n out.set(fallback);\r\n return out;\r\n }\r\n const state = track.calculateState({}, time);\r\n out.set(state);\r\n return out;\r\n}\r\n\r\nfunction bakeHumanoidRotationTracks(\r\n sourceClip: AnimationClip,\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcRootRotation: Quaternion,\r\n dstRootRotation: Quaternion,\r\n dstClip: AnimationClip,\r\n remaps: JointRetargetRemap[]\r\n) {\r\n const rotationTracksByRemap = new Map<\r\n JointRetargetRemap,\r\n NodeRotationTrack | NodeEulerRotationTrack | null\r\n >();\r\n const times = new Set<number>([0, sourceClip.timeDuration]);\r\n const remapsByDstNode = new Map<object, JointRetargetRemap>();\r\n const srcJointSet = new Set(srcSkeleton.joints);\r\n const dstJointSet = new Set(dstSkeleton.joints);\r\n const srcBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const dstBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const srcRotationTrackByNode = new Map<SceneNode, NodeRotationTrack | NodeEulerRotationTrack | null>();\r\n\r\n for (let i = 0; i < srcSkeleton.joints.length; i++) {\r\n const joint = srcSkeleton.joints[i];\r\n srcBindRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);\r\n const track = findRotationTrack(sourceClip.tracks.get(joint));\r\n srcRotationTrackByNode.set(joint, track);\r\n collectTrackTimes(track, times);\r\n }\r\n for (let i = 0; i < dstSkeleton.joints.length; i++) {\r\n dstBindRotByNode.set(dstSkeleton.joints[i], dstSkeleton.bindPose[i].rotation);\r\n }\r\n for (const remap of remaps) {\r\n const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));\r\n rotationTracksByRemap.set(remap, track);\r\n remapsByDstNode.set(remap.dstNode, remap);\r\n }\r\n const inputs = new Float32Array([...times].sort((a, b) => a - b));\r\n const srcBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const srcAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const outputsByRemap = new Map<JointRetargetRemap, Float32Array>();\r\n const tmpLocalRot = new Quaternion();\r\n const tmpWorldDelta = new Quaternion();\r\n const tmpParentInv = new Quaternion();\r\n\r\n for (const remap of remaps) {\r\n outputsByRemap.set(remap, new Float32Array(inputs.length * 4));\r\n }\r\n\r\n function getSrcBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = srcBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (srcBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && srcJointSet.has(parent)) {\r\n Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, rot, rot);\r\n }\r\n srcBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = dstBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && dstJointSet.has(parent)) {\r\n Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(dstRootRotation, rot, rot);\r\n }\r\n dstBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getSrcAnimWorldRot(node: SceneNode, time: number): Quaternion {\r\n let rot = srcAnimWorldRots.get(node);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n srcAnimWorldRots.set(node, rot);\r\n }\r\n const parent = node.parent;\r\n const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;\r\n sampleRotationTrack(\r\n srcRotationTrackByNode.get(node) ?? null,\r\n time,\r\n srcBindRotByNode.get(node) ?? Quaternion.identity(),\r\n tmpLocalRot\r\n );\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, tmpLocalRot, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstAnimWorldRot(remap: JointRetargetRemap, time: number): Quaternion {\r\n let rot = dstAnimWorldRots.get(remap.dstNode);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n dstAnimWorldRots.set(remap.dstNode, rot);\r\n }\r\n const srcBindWorldRot = getSrcBindWorldRot(remap.srcNode);\r\n const srcAnimWorldRot = getSrcAnimWorldRot(remap.srcNode, time);\r\n Quaternion.multiply(srcAnimWorldRot, Quaternion.inverse(srcBindWorldRot, tmpWorldDelta), tmpWorldDelta);\r\n Quaternion.multiply(tmpWorldDelta, getDstBindWorldRot(remap.dstNode), rot);\r\n return rot;\r\n }\r\n\r\n function getDstParentAnimWorldRot(node: SceneNode, time: number): Quaternion | null {\r\n const parent = node.parent;\r\n if (!parent || !dstJointSet.has(parent)) {\r\n return dstRootRotation;\r\n }\r\n const mappedParent = remapsByDstNode.get(parent);\r\n if (mappedParent) {\r\n return getDstAnimWorldRot(mappedParent, time);\r\n }\r\n let rot = dstAnimWorldRots.get(parent);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(parent) ?? Quaternion.identity()).clone();\r\n const parentWorldRot = getDstParentAnimWorldRot(parent, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, rot, rot);\r\n }\r\n dstAnimWorldRots.set(parent, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n for (let i = 0; i < inputs.length; i++) {\r\n const time = inputs[i];\r\n srcAnimWorldRots.clear();\r\n dstAnimWorldRots.clear();\r\n for (const remap of remaps) {\r\n const dstAnimWorldRot = getDstAnimWorldRot(remap, time);\r\n const parentWorldRot = getDstParentAnimWorldRot(remap.dstNode, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(Quaternion.inverse(parentWorldRot, tmpParentInv), dstAnimWorldRot, tmpLocalRot);\r\n } else {\r\n tmpLocalRot.set(dstAnimWorldRot);\r\n }\r\n tmpLocalRot.inplaceNormalize();\r\n outputsByRemap.get(remap)!.set(tmpLocalRot, i * 4);\r\n }\r\n }\r\n\r\n for (const remap of remaps) {\r\n if (!rotationTracksByRemap.get(remap)) {\r\n continue;\r\n }\r\n const outputs = new Float32Array(outputsByRemap.get(remap)!);\r\n const track = new NodeRotationTrack(\r\n new Interpolator('linear', 'quat', new Float32Array(inputs), outputs)\r\n );\r\n track.name = 'rotation';\r\n track.target = remap.dstNode.persistentId;\r\n track.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(remap.dstNode, track);\r\n }\r\n}\r\n\r\n/**\r\n * Animation set\r\n *\r\n * Manages a collection of named animation clips for a model and orchestrates:\r\n * - Playback state (time, loops, speed, weights, fade-in/out).\r\n * - Blending across multiple tracks targeting the same property via weighted averages.\r\n * - Skeleton usage and application for clips that drive skeletal animation.\r\n * - Active track registration and cleanup as clips start/stop.\r\n *\r\n * Usage:\r\n * - Create or retrieve `AnimationClip`s by name.\r\n * - Start playback with `playAnimation(name, options)`.\r\n * - Advance animation with `update(deltaSeconds)`.\r\n * - Optionally adjust weight while playing with `setAnimationWeight(name, weight)`.\r\n *\r\n * Lifetime:\r\n * - Disposing the set releases references to the model, clips, and clears active state.\r\n *\r\n * @public\r\n */\r\nexport class AnimationSet extends Disposable implements IDisposable {\r\n /** @internal */\r\n private _model: SceneNode;\r\n /** @internal */\r\n private _animations: Partial<Record<string, AnimationClip>>;\r\n /** @internal */\r\n private _skeletons: DRef<SkinBinding>[];\r\n /** @internal */\r\n private _rigs: DRef<SkeletonRig>[];\r\n /** @internal */\r\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\r\n /** @internal */\r\n private readonly _activeSkinBindings: Map<SkinBinding, number>;\r\n /** @internal */\r\n private readonly _activeRigs: Map<SkeletonRig, number>;\r\n /** @internal */\r\n private readonly _activeAnimations: Map<\r\n AnimationClip,\r\n {\r\n currentTime: number;\r\n repeat: number;\r\n repeatCounter: number;\r\n weight: number;\r\n speedRatio: number;\r\n firstFrame: boolean;\r\n fadeIn: number;\r\n fadeOut: number;\r\n fadeOutStart: number;\r\n animateTime: number;\r\n }\r\n >;\r\n /**\r\n * Create an AnimationSet controlling the provided model.\r\n *\r\n * @param model - The SceneNode (model root) controlled by this animation set.\r\n */\r\n constructor(model: SceneNode) {\r\n super();\r\n this._model = model;\r\n this._animations = {};\r\n this._activeTracks = new Map();\r\n this._activeSkinBindings = new Map();\r\n this._activeRigs = new Map();\r\n this._activeAnimations = new Map();\r\n this._skeletons = [];\r\n this._rigs = [];\r\n }\r\n /**\r\n * The model (SceneNode) controlled by this animation set.\r\n */\r\n get model() {\r\n return this._model;\r\n }\r\n /**\r\n * Number of animation clips registered in this set.\r\n */\r\n get numAnimations() {\r\n return Object.getOwnPropertyNames(this._animations).length;\r\n }\r\n /**\r\n * The skeletons used by animations in this set.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /**\r\n * The shared rigs used by animations in this set.\r\n */\r\n get rigs() {\r\n return this._rigs;\r\n }\r\n /**\r\n * Per-skin bindings used by skinned meshes in this set.\r\n */\r\n get skinBindings() {\r\n return this._skeletons;\r\n }\r\n private resolveRigByAnimationBindingId(id: string): SkeletonRig | null {\r\n return this._model.findSkeletonRigById(id) ?? this._model.findSkinBindingById(id)?.rig ?? null;\r\n }\r\n private resolveClipRig(clip: AnimationClip): SkeletonRig | null {\r\n let rig: SkeletonRig | null = null;\r\n for (const id of clip.skeletons) {\r\n const nextRig = this.resolveRigByAnimationBindingId(id);\r\n if (!nextRig) {\r\n continue;\r\n }\r\n if (!rig) {\r\n rig = nextRig;\r\n } else if (rig !== nextRig) {\r\n return null;\r\n }\r\n }\r\n return rig;\r\n }\r\n /**\r\n * Retrieve an animation clip by name.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n get(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Create and register a new animation clip.\r\n *\r\n * @param name - Unique name for the animation clip.\r\n * @param embedded - Whether the clip is embedded/owned (implementation-specific). Default false.\r\n * @returns The created clip, or null if the name is empty or not unique.\r\n */\r\n createAnimation(name: string, embedded = false) {\r\n if (!name || this._animations[name]) {\r\n console.error('Animation must have unique name');\r\n return null;\r\n } else {\r\n const animation = new AnimationClip(name, this, embedded);\r\n this._animations[name] = animation;\r\n this._model.scene?.queueUpdateNode(this._model);\r\n return animation;\r\n }\r\n }\r\n /**\r\n * Delete and dispose an animation clip by name.\r\n *\r\n * - If the animation is currently playing, it is first stopped (immediately).\r\n *\r\n * @param name - Name of the animation to remove.\r\n */\r\n deleteAnimation(name: string) {\r\n const animation = this._animations[name];\r\n if (animation) {\r\n this.stopAnimation(name);\r\n delete this._animations[name];\r\n animation.dispose();\r\n }\r\n }\r\n /**\r\n * Get the list of all registered animation names.\r\n *\r\n * @returns An array of clip names.\r\n */\r\n getAnimationNames() {\r\n return Object.keys(this._animations);\r\n }\r\n /**\r\n * Advance and apply active animations.\r\n *\r\n * Responsibilities per call:\r\n * - Update time cursor for each active clip (respecting speedRatio and looping).\r\n * - Enforce repeat limits and apply fade-out termination if configured.\r\n * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)\r\n * and apply the resulting state to the target.\r\n * - Apply shared rig modifiers once, then update skin binding palettes.\r\n *\r\n * @param deltaInSeconds - Time step in seconds since last update.\r\n */\r\n update(deltaInSeconds: number) {\r\n this._activeAnimations.forEach((v, k) => {\r\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\r\n v.fadeOutStart = v.animateTime;\r\n }\r\n // Update animation time\r\n if (v.firstFrame) {\r\n v.firstFrame = false;\r\n } else {\r\n const timeAdvance = deltaInSeconds * v.speedRatio;\r\n v.currentTime += timeAdvance;\r\n v.animateTime += timeAdvance;\r\n if (k.timeDuration > 0) {\r\n if (v.currentTime > k.timeDuration) {\r\n v.repeatCounter += Math.max(1, Math.floor(v.currentTime / k.timeDuration));\r\n v.currentTime %= k.timeDuration;\r\n } else if (v.currentTime < 0) {\r\n v.repeatCounter += Math.max(1, Math.ceil(-v.currentTime / k.timeDuration));\r\n v.currentTime = ((v.currentTime % k.timeDuration) + k.timeDuration) % k.timeDuration;\r\n }\r\n }\r\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\r\n this.stopAnimation(k.name);\r\n } else if (v.fadeOut > 0) {\r\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name);\r\n }\r\n }\r\n }\r\n });\r\n // Update tracks\r\n this._activeTracks.forEach((v, k) => {\r\n v.forEach((alltracks) => {\r\n // Only deal with tracks which have not been removed\r\n const tracks = alltracks.filter(\r\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\r\n );\r\n if (tracks.length > 0) {\r\n const weights = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const weight = info.weight;\r\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\r\n let fadeOut = 1;\r\n if (info.fadeOut !== 0) {\r\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\r\n }\r\n return weight * fadeIn * fadeOut;\r\n });\r\n const states = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const t = (info.currentTime / track.animation!.timeDuration) * track.getDuration();\r\n return track.calculateState(k, t);\r\n });\r\n const state = weightedAverage(weights, states, (a, b, t) => {\r\n return tracks[0].mixState(a, b, t);\r\n });\r\n tracks[0].applyState(k, state);\r\n }\r\n });\r\n });\r\n // Update rigs once before computing per-skin palettes.\r\n this._rigs.forEach((v) => {\r\n v.get()?.apply(deltaInSeconds);\r\n });\r\n this._skeletons.forEach((v) => {\r\n v.get()?.apply();\r\n });\r\n }\r\n /**\r\n * Check whether an animation is currently playing.\r\n *\r\n * @param name - Optional animation name. If omitted, returns true if any animation is playing.\r\n * @returns True if playing; otherwise false.\r\n */\r\n isPlayingAnimation(name?: string) {\r\n if (name) {\r\n const animation = this._animations[name];\r\n return !!animation && this._activeAnimations.has(animation);\r\n }\r\n return this._activeAnimations.size > 0;\r\n }\r\n /**\r\n * Get an animation clip by name.\r\n *\r\n * Alias of `get(name)` returning a nullable type.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n getAnimationClip(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Set the runtime blend weight for a currently playing animation.\r\n *\r\n * Has no effect if the clip is not active.\r\n *\r\n * @param name - Name of the playing animation.\r\n * @param weight - New weight value used during blending.\r\n */\r\n setAnimationWeight(name: string, weight: number) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.weight = weight;\r\n }\r\n }\r\n /**\r\n * Start (or update) playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If the clip is already playing, updates its fade-in (resets fade-out).\r\n * - Otherwise initializes playback state (repeat counter, speed, weight, initial time).\r\n * - Registers clip tracks and skeletons into the active sets for blending and application.\r\n *\r\n * @param name - Name of the animation to play.\r\n * @param options - Playback options (repeat, speedRatio, fadeIn).\r\n */\r\n playAnimation(name: string, options?: PlayAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.fadeOut = 0;\r\n info.fadeIn = fadeIn;\r\n } else {\r\n const repeat = options?.repeat ?? 0;\r\n const speedRatio = options?.speedRatio ?? 1;\r\n const weight = options?.weight ?? ani.weight ?? 1;\r\n this._activeAnimations.set(ani, {\r\n repeat,\r\n weight,\r\n speedRatio,\r\n fadeIn,\r\n fadeOut: 0,\r\n repeatCounter: 0,\r\n currentTime: speedRatio < 0 ? ani.timeDuration : 0,\r\n animateTime: 0,\r\n fadeOutStart: 0,\r\n firstFrame: true\r\n });\r\n ani.tracks?.forEach((v, k) => {\r\n let nodeTracks = this._activeTracks.get(k);\r\n if (!nodeTracks) {\r\n nodeTracks = new Map();\r\n this._activeTracks.set(k, nodeTracks);\r\n }\r\n for (const track of v) {\r\n const blendId = track.getBlendId();\r\n let blendedTracks = nodeTracks.get(blendId);\r\n if (!blendedTracks) {\r\n blendedTracks = [];\r\n nodeTracks.set(blendId, blendedTracks);\r\n }\r\n blendedTracks.push(track);\r\n }\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig);\r\n this._activeRigs.set(rig, refcount ? refcount + 1 : 1);\r\n rig.playing = true;\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding);\r\n this._activeSkinBindings.set(binding, refcount ? refcount + 1 : 1);\r\n binding.playing = true;\r\n const rigRefcount = this._activeRigs.get(binding.rig);\r\n this._activeRigs.set(binding.rig, rigRefcount ? rigRefcount + 1 : 1);\r\n binding.rig.playing = true;\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Stop playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If `options.fadeOut > 0`, marks the clip for fade-out; actual removal occurs after fade completes.\r\n * - If `fadeOut` is 0 or omitted, immediately:\r\n * - Removes the clip from active animations.\r\n * - Unregisters its tracks from active track maps.\r\n * - Decrements skeleton reference counts; resets and removes skeletons when refcount reaches 0.\r\n *\r\n * @param name - Name of the animation to stop.\r\n * @param options - Optional fade-out configuration.\r\n */\r\n stopAnimation(name: string, options?: StopAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\r\n if (fadeOut !== 0) {\r\n info.fadeOut = fadeOut;\r\n info.fadeOutStart = -1;\r\n } else {\r\n this._activeAnimations.delete(ani);\r\n this._activeTracks.forEach((v) => {\r\n v.forEach((tracks, id) => {\r\n v.set(\r\n id,\r\n tracks.filter((track) => track.animation !== ani)\r\n );\r\n });\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig)!;\r\n if (refcount === 1) {\r\n rig.reset();\r\n this._activeRigs.delete(rig);\r\n } else {\r\n this._activeRigs.set(rig, refcount - 1);\r\n }\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding)!;\r\n if (refcount === 1) {\r\n binding.reset();\r\n this._activeSkinBindings.delete(binding);\r\n } else {\r\n this._activeSkinBindings.set(binding, refcount - 1);\r\n }\r\n const rigRefcount = this._activeRigs.get(binding.rig)!;\r\n if (rigRefcount === 1) {\r\n binding.rig.reset();\r\n this._activeRigs.delete(binding.rig);\r\n } else {\r\n this._activeRigs.set(binding.rig, rigRefcount - 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n * Create a skeletal-only masked clip from an existing clip in this set.\r\n *\r\n * The generated clip is a regular `AnimationClip`: it contains cloned node transform tracks\r\n * for the selected rig joints and can be played/blended through the normal animation system.\r\n * Non-skeletal tracks are skipped by default.\r\n *\r\n * @param sourceName - Name of the source clip.\r\n * @param targetName - Name of the generated clip.\r\n * @param options - Humanoid semantic or joint-name based mask options.\r\n * @returns The generated clip, or null on failure.\r\n */\r\n createSkeletalMaskedAnimation(\r\n sourceName: string,\r\n targetName: string,\r\n options: SkeletalAnimationMaskOptions\r\n ): AnimationClip | null {\r\n const sourceClip = this.get(sourceName);\r\n if (!sourceClip) {\r\n console.error(`createSkeletalMaskedAnimation: animation '${sourceName}' not found`);\r\n return null;\r\n }\r\n const rig = this.resolveClipRig(sourceClip);\r\n if (!rig) {\r\n console.error(`createSkeletalMaskedAnimation: source animation must resolve to exactly one rig`);\r\n return null;\r\n }\r\n return createSkeletalMaskedAnimationClip(this, sourceClip, targetName, rig, options);\r\n }\r\n /**\r\n * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.\r\n *\r\n * Prerequisites:\r\n * - Both source and destination skeletons must have a non-null `humanoidJointMapping`.\r\n * - Joints are matched by shared `HumanoidBodyRig` / `HumanoidHandRig` keys instead of joint names.\r\n * - The source clip must exist in `sourceSet` and must be driven by exactly one skeleton.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n */\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetNameOrOptions?: string | CopyHumanoidAnimationOptions,\r\n copyOptions?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null {\r\n const options =\r\n typeof targetNameOrOptions === 'string' ? (copyOptions ?? {}) : (targetNameOrOptions ?? {});\r\n const destName =\r\n typeof targetNameOrOptions === 'string' ? targetNameOrOptions : (options.targetName ?? animationName);\r\n const rootMotion = options.rootMotion ?? 'scaled';\r\n const jointTranslations = options.jointTranslations ?? 'skip';\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: source animation clip must resolve to exactly one humanoid rig`\r\n );\r\n return null;\r\n }\r\n\r\n // Check that source skeleton has humanoid mapping\r\n const srcHumanoidMapping = srcSkeleton.humanoidJointMapping;\r\n if (!srcHumanoidMapping) {\r\n console.error(`copyHumanoidAnimationFrom: source skeleton does not have a humanoid joint mapping`);\r\n return null;\r\n }\r\n\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n // Find a destination skeleton that has a humanoid mapping and share at least the body rig keys\r\n let srcJointsFiltered: SceneNode[] = [];\r\n let dstJointsFiltered: SceneNode[] = [];\r\n\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n // Check that destination skeleton has humanoid mapping\r\n const dstHumanoidMapping = sk.humanoidJointMapping;\r\n if (!dstHumanoidMapping) {\r\n return false;\r\n }\r\n\r\n // Collect matched (srcJoint, dstJoint) pairs via shared humanoid rig keys\r\n const srcMatched: SceneNode[] = [];\r\n const dstMatched: SceneNode[] = [];\r\n\r\n // Match body rig joints\r\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\r\n const srcJoint = srcHumanoidMapping.body[key];\r\n const dstJoint = dstHumanoidMapping.body[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n\r\n // Match left hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.leftHand && dstHumanoidMapping.leftHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.leftHand\r\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\r\n const srcJoint = srcHumanoidMapping.leftHand[key];\r\n const dstJoint = dstHumanoidMapping.leftHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n // Match right hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.rightHand && dstHumanoidMapping.rightHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.rightHand\r\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\r\n const srcJoint = srcHumanoidMapping.rightHand[key];\r\n const dstJoint = dstHumanoidMapping.rightHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n if (srcMatched.length === 0) {\r\n return false;\r\n }\r\n\r\n srcJointsFiltered = srcMatched;\r\n dstJointsFiltered = dstMatched;\r\n return true;\r\n });\r\n\r\n if (!dstSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: no matching humanoid skeleton in target set for '${srcSkeletonId}'`\r\n );\r\n return null;\r\n }\r\n\r\n // Compute the world-space rotation of the parent chain above a motion node,\r\n // walking ALL ancestor nodes up to (but not including) the model root.\r\n // This must include non-joint nodes such as \"Armature\" in Mixamo rigs, which\r\n // carry a 90° X rotation that is NOT captured by humanoidRootRotation (which\r\n // only traverses nodes inside the skeleton joints list).\r\n function computeParentChainRotation(\r\n node: SceneNode,\r\n modelRoot: SceneNode,\r\n skeleton: SkeletonRig\r\n ): Quaternion {\r\n const result = Quaternion.identity();\r\n const jointSet = new Set(skeleton.joints);\r\n let p = node.parent;\r\n while (p && p !== modelRoot) {\r\n if (!jointSet.has(p)) {\r\n Quaternion.multiply(p.rotation, result, result);\r\n }\r\n p = p.parent;\r\n }\r\n return result;\r\n }\r\n\r\n const srcHipsNode = srcSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const dstHipsNode = dstSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const srcRootNode = srcSkeleton.rootJoint ?? srcHipsNode;\r\n const dstRootNode = dstSkeleton.rootJoint ?? dstHipsNode;\r\n const srcRootRot = computeParentChainRotation(srcRootNode, sourceSet.model, srcSkeleton);\r\n const dstRootRot = computeParentChainRotation(dstRootNode, this._model, dstSkeleton);\r\n const srcRootTranslationTrack = findTranslationTrack(sourceClip.tracks.get(srcRootNode));\r\n const srcFallbackHipsTranslationTrack =\r\n !srcRootTranslationTrack && srcRootNode !== srcHipsNode\r\n ? findTranslationTrack(sourceClip.tracks.get(srcHipsNode))\r\n : null;\r\n const srcMotionTrack = srcRootTranslationTrack ?? srcFallbackHipsTranslationTrack;\r\n const srcMotionNode = srcRootTranslationTrack\r\n ? srcRootNode\r\n : srcFallbackHipsTranslationTrack\r\n ? srcHipsNode\r\n : null;\r\n const srcMotionParentRot = srcMotionNode\r\n ? computeParentChainRotation(srcMotionNode, sourceSet.model, srcSkeleton)\r\n : srcRootRot;\r\n const rootTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcMotionParentRot);\r\n const rootTranslationScale =\r\n rootMotion === 'scaled'\r\n ? typeof options.rootMotionScale === 'number'\r\n ? options.rootMotionScale\r\n : options.rootMotionScale === 'none'\r\n ? 1\r\n : getHumanoidRootMotionScale(srcSkeleton, dstSkeleton)\r\n : 1;\r\n const jointRemaps: JointRetargetRemap[] = [];\r\n const mappedSrcNodes = new Set<SceneNode>();\r\n const mappedDstNodes = new Set<SceneNode>();\r\n // Build remap for matched joint pairs\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n if (mappedSrcNodes.has(srcJoint) || mappedDstNodes.has(dstJoint)) {\r\n continue;\r\n }\r\n mappedSrcNodes.add(srcJoint);\r\n mappedDstNodes.add(dstJoint);\r\n nodeMap.set(srcJoint, dstJoint);\r\n const remap = createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint);\r\n jointRemaps.push(remap);\r\n jointRemapBySrcNode.set(srcJoint, remap);\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n bakeHumanoidRotationTracks(\r\n sourceClip,\r\n srcSkeleton,\r\n dstSkeleton,\r\n srcRootRot,\r\n dstRootRot,\r\n dstClip,\r\n jointRemaps\r\n );\r\n\r\n if (rootMotion !== 'none') {\r\n const dstRootBindPose = getRigBindPoseForNode(dstSkeleton, dstRootNode);\r\n let dstRootTrack: NodeTranslationTrack | null = null;\r\n if (rootMotion === 'locked') {\r\n dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);\r\n } else if (srcMotionTrack && srcMotionNode) {\r\n const srcMotionBindPose = getRigBindPoseForNode(srcSkeleton, srcMotionNode);\r\n const rootRemap = createTranslationRetargetRemap(\r\n srcMotionNode,\r\n dstRootNode,\r\n srcMotionBindPose.position,\r\n dstRootBindPose.position,\r\n dstSkeleton.joints.indexOf(dstRootNode),\r\n rootTranslationScale,\r\n rootTranslationRotation,\r\n options.lockRootMotionAxes\r\n );\r\n dstRootTrack = retargetTranslationTrack(srcMotionTrack, rootRemap);\r\n }\r\n if (dstRootTrack) {\r\n dstRootTrack.name = srcMotionTrack?.name ?? 'translation';\r\n dstRootTrack.target = dstRootNode.persistentId;\r\n dstRootTrack.jointIndex = dstSkeleton.joints.indexOf(dstRootNode);\r\n dstClip.addTrack(dstRootNode, dstRootTrack);\r\n }\r\n }\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n // Not every humanoid joint must have a track; skip silently\r\n continue;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n if (srcNode === srcRootNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {\r\n continue;\r\n }\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(\r\n `copyHumanoidAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`\r\n );\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n }\r\n /**\r\n * Copy an animation clip from another AnimationSet into this one.\r\n *\r\n * Prerequisites:\r\n * - Both sets must reference skeletons with identical joint names and counts.\r\n * - The source clip must exist in `sourceSet`.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from\r\n * skeleton structure matching.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n *\r\n * @deprecated Use AnimationSet.copyHumanoidAnimationFrom instead.\r\n */\r\n copyAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n excludeJoint?: (jointName: string) => boolean\r\n ): AnimationClip | null {\r\n const destName = targetName ?? animationName;\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(`copyAnimationFrom: source animation clip must resolve to exactly one rig`);\r\n return null;\r\n }\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n const jointsFiltered = srcSkeleton.joints.filter((j) => !excludeJoint?.(j.name));\r\n const srcRootNode = findRootJoint(jointsFiltered);\r\n if (!srcRootNode) {\r\n console.error(`copyAnimationFrom: cannot determine the root joint for source skeleton`);\r\n return null;\r\n }\r\n // Build filtered joint lists for matching (exclude joints rejected by filterJoint)\r\n const srcJointsFiltered = sortJoints(srcRootNode, jointsFiltered);\r\n if (!srcJointsFiltered) {\r\n console.error(`copyAnimationFrom: invalid source skeleton structure`);\r\n return null;\r\n }\r\n let dstJointsFiltered: SceneNode[] = [];\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n const jointsFiltered = sk.joints.filter((j) => !excludeJoint?.(j.name));\r\n if (jointsFiltered.length !== srcJointsFiltered.length) {\r\n return false;\r\n }\r\n const rootNode = findRootJoint(jointsFiltered);\r\n if (!rootNode) {\r\n return false;\r\n }\r\n const sortedJointsFiltered = sortJoints(rootNode, jointsFiltered);\r\n if (\r\n sortedJointsFiltered &&\r\n srcJointsFiltered.every((j, i) => j.name === sortedJointsFiltered[i].name)\r\n ) {\r\n dstJointsFiltered = sortedJointsFiltered;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!dstJointsFiltered || !dstSkeleton) {\r\n console.error(`copyAnimationFrom: no matching skeleton in target set for '${srcSkeletonId}'`);\r\n return null;\r\n }\r\n // Build remap only for joints that pass the filter\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n nodeMap.set(srcJoint, dstJoint);\r\n jointRemapBySrcNode.set(\r\n srcJoint,\r\n createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint)\r\n );\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n console.error(`copyAnimationFrom: no track for joint: ${srcNode.name}`);\r\n return null;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n dstTrack = retargetRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n dstTrack = retargetEulerToRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(`copyAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`);\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n\r\n function findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n if (!root || !joints.includes(root)) {\r\n return null;\r\n }\r\n return root;\r\n }\r\n\r\n function sortJoints(root: SceneNode, joints: SceneNode[]): Nullable<SceneNode[]> {\r\n const ordered: SceneNode[] = [];\r\n const visited = new Set<SceneNode>();\r\n function visit(joint: SceneNode) {\r\n if (visited.has(joint)) {\r\n return true;\r\n }\r\n if (!joints.includes(joint)) {\r\n return false;\r\n }\r\n if (joint !== root) {\r\n visit(joint.parent!);\r\n }\r\n visited.add(joint);\r\n ordered.push(joint);\r\n return true;\r\n }\r\n for (const joint of joints) {\r\n if (!visit(joint)) {\r\n return null;\r\n }\r\n }\r\n return ordered;\r\n }\r\n }\r\n\r\n /**\r\n * Reset all skeleton modifiers\r\n */\r\n resetSkeletonModifiers() {\r\n for (const sk of this._skeletons) {\r\n for (const modifier of sk.get()!.modifiers) {\r\n modifier.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the animation set and release owned resources.\r\n *\r\n * - Disposes the weak reference to the model.\r\n * - Disposes all registered animation clips.\r\n * - Clears active animations, tracks, and skeleton references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const k in this._animations) {\r\n this._animations[k]!.dispose();\r\n }\r\n this._animations = {};\r\n this._activeAnimations.clear();\r\n this._activeSkinBindings.clear();\r\n this._activeRigs.clear();\r\n this._activeTracks.clear();\r\n }\r\n}\r\n"],"names":["cloneInterpolator","src","Interpolator","mode","target","inputs","Float32Array","outputs","createJointRetargetRemap","srcSkeleton","dstSkeleton","srcJoint","dstJoint","translationRotation","translationScale","translationAxisLocks","si","joints","indexOf","di","srcBindPose","bindPose","dstBindPose","srcLen","position","magnitude","dstLen","dstNode","dstJointIndex","srcNode","srcBindRotInv","Quaternion","inverse","rotation","dstBindRot","clone","srcBindPos","dstBindPos","createTranslationRetargetRemap","identity","getBindPosition","skeleton","joint","index","getRigBindPoseForNode","node","getBindPoseForJoint","rootJoint","rootBindPose","scale","getBindDistanceToAncestor","ancestor","distance","bindPosition","parent","getHumanoidLegLength","side","mapping","humanoidJointMapping","body","hips","HumanoidBodyRig","Hips","foot","LeftFoot","RightFoot","toes","LeftToes","RightToes","Math","max","getHumanoidRootMotionScale","srcLeftLeg","srcRightLeg","dstLeftLeg","dstRightLeg","srcLegLength","dstLegLength","findTranslationTrack","tracks","find","track","NodeTranslationTrack","applyTranslationAxisLocks","value","bindValue","locks","x","y","z","applyTranslationTangentAxisLocks","retargetRotation","qSrcAnim","remap","out","multiply","inplaceNormalize","retargetRotationTangent","qSrcTangent","retargetTranslationValue","srcValue","setXYZ","subBy","scaleBy","transform","addBy","retargetTranslationTangent","retargetRotationTrack","isCubic","interpolator","frameStride","numFrames","length","srcOutputs","newOutputs","t","q","f","base","setXYZW","set","subarray","NodeRotationTrack","retargetEulerToRotationTrack","srcInputs","fromEulerAngle","retargetTranslationTrack","v","Vector3","createConstantTranslationTrack","findRotationTrack","NodeEulerRotationTrack","collectTrackTimes","times","time","add","sampleRotationTrack","fallback","state","calculateState","bakeHumanoidRotationTracks","sourceClip","srcRootRotation","dstRootRotation","dstClip","remaps","rotationTracksByRemap","Map","Set","timeDuration","remapsByDstNode","srcJointSet","dstJointSet","srcBindRotByNode","dstBindRotByNode","srcRotationTrackByNode","i","get","sort","a","b","srcBindWorldRots","dstBindWorldRots","srcAnimWorldRots","dstAnimWorldRots","outputsByRemap","tmpLocalRot","tmpWorldDelta","tmpParentInv","getSrcBindWorldRot","rot","has","getDstBindWorldRot","getSrcAnimWorldRot","parentWorldRot","getDstAnimWorldRot","srcBindWorldRot","srcAnimWorldRot","getDstParentAnimWorldRot","mappedParent","clear","dstAnimWorldRot","name","persistentId","jointIndex","addTrack","AnimationSet","Disposable","model","_model","_animations","_activeTracks","_activeSkinBindings","_activeRigs","_activeAnimations","_skeletons","_rigs","numAnimations","Object","getOwnPropertyNames","skeletons","rigs","skinBindings","resolveRigByAnimationBindingId","id","findSkeletonRigById","findSkinBindingById","rig","resolveClipRig","clip","nextRig","createAnimation","embedded","console","error","animation","AnimationClip","scene","queueUpdateNode","deleteAnimation","stopAnimation","dispose","getAnimationNames","keys","update","deltaInSeconds","forEach","k","fadeOut","fadeOutStart","animateTime","firstFrame","timeAdvance","speedRatio","currentTime","repeatCounter","floor","ceil","repeat","alltracks","filter","isPlayingAnimation","weights","map","info","weight","fadeIn","min","states","getDuration","weightedAverage","mixState","applyState","apply","size","getAnimationClip","setAnimationWeight","ani","playAnimation","options","nodeTracks","blendId","getBlendId","blendedTracks","push","refcount","playing","binding","rigRefcount","delete","reset","createSkeletalMaskedAnimation","sourceName","targetName","createSkeletalMaskedAnimationClip","copyHumanoidAnimationFrom","sourceSet","animationName","targetNameOrOptions","copyOptions","destName","rootMotion","jointTranslations","srcSkeletonId","srcHumanoidMapping","nodeMap","jointRemapBySrcNode","srcJointsFiltered","dstJointsFiltered","ref","sk","dstHumanoidMapping","srcMatched","dstMatched","key","leftHand","rightHand","computeParentChainRotation","modelRoot","result","jointSet","p","srcHipsNode","dstHipsNode","srcRootNode","dstRootNode","srcRootRot","dstRootRot","srcRootTranslationTrack","srcFallbackHipsTranslationTrack","srcMotionTrack","srcMotionNode","srcMotionParentRot","rootTranslationRotation","rootTranslationScale","rootMotionScale","jointRemaps","mappedSrcNodes","mappedDstNodes","fi","autoPlay","addSkeleton","dstRootBindPose","dstRootTrack","srcMotionBindPose","rootRemap","lockRootMotionAxes","srcTracks","srcTrack","dstTrack","NodeScaleTrack","warn","copyAnimationFrom","excludeJoint","jointsFiltered","j","findRootJoint","sortJoints","rootNode","sortedJointsFiltered","every","root","isParentOf","includes","ordered","visited","visit","resetSkeletonModifiers","modifier","modifiers","onDispose"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"animationtrack.js","sources":["../../src/animation/animationtrack.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport type { AnimationClip } from './animation';\r\n\r\n/**\r\n * Base class for animation tracks.\r\n *\r\n * A track produces time-varying state for a specific target and defines how to:\r\n * - Compute state at a given time (`calculateState`)\r\n * - Apply that state to a target (`applyState`)\r\n * - Blend between two states (`mixState`)\r\n * - Report its blend compatibility (`getBlendId`)\r\n * - Report its intrinsic duration (`getDuration`)\r\n *\r\n * Generic:\r\n * - `StateType` is the shape of the computed/applied state (e.g., number, vector, pose).\r\n *\r\n * @public\r\n */\r\nexport abstract class AnimationTrack<StateType = unknown> {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _animation: Nullable<AnimationClip>;\r\n /** @internal */\r\n protected _target: string;\r\n /** @internal */\r\n protected _jointIndex: number;\r\n /**\r\n * Construct a new animation track.\r\n *\r\n * @param embedded - Whether this track is embedded/owned inline by its container. Default false.\r\n */\r\n constructor(embedded?: boolean) {\r\n this._name = 'noname';\r\n this._animation = null;\r\n this._embedded = !!embedded;\r\n this._target = '';\r\n this._jointIndex = -1;\r\n }\r\n /**\r\n * Human-readable name of the track.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val;\r\n }\r\n /**\r\n * Whether this track is embedded (owned inline by a resource/container).\r\n */\r\n get embedded() {\r\n return this._embedded;\r\n }\r\n /**\r\n * The `AnimationClip` that owns this track.\r\n */\r\n get animation() {\r\n return this._animation;\r\n }\r\n set animation(ani) {\r\n this._animation = ani;\r\n }\r\n /**\r\n * Logical target identifier for this track (optional metadata).\r\n *\r\n * This does not affect application; it can be used by tooling or higher-level\r\n * systems to label/group tracks.\r\n */\r\n get target() {\r\n return this._target;\r\n }\r\n set target(val: string) {\r\n this._target = val;\r\n }\r\n /**\r\n * Joint index if this track controls a joint, otherwise -1\r\n */\r\n get jointIndex() {\r\n return this._jointIndex;\r\n }\r\n set jointIndex(index: number) {\r\n this._jointIndex = index;\r\n }\r\n /**\r\n * Reset the track to its initial state for the given target.\r\n *\r\n * Intended to stop playback and rewind the target to the first frame or default state.\r\n *\r\n * @param _target - The animated object to reset.\r\n */\r\n reset(_target: object) {}\r\n /**\r\n * Compute the animation state at the specified time.\r\n *\r\n * Implementations should be pure with respect to inputs: given the same `target` and\r\n * `currentTime`, return the same `StateType`.\r\n *\r\n * @param target - The animated object (used to resolve current baseline if needed).\r\n * @param currentTime - Time cursor in seconds within the track's timeline.\r\n * @returns The computed state at `currentTime`.\r\n */\r\n abstract calculateState(target: object, currentTime: number): StateType;\r\n /**\r\n * Apply a previously computed animation state to the target.\r\n *\r\n * @param target - The animated object to modify.\r\n * @param state - The state to apply.\r\n */\r\n abstract applyState(target: object, state: StateType): unknown;\r\n /**\r\n * Blend two states into a new state using a weight.\r\n *\r\n * @param a - First state.\r\n * @param b - Second state.\r\n * @param t - Blend weight in \\[0, 1\\], where 0 yields `a` and 1 yields `b`.\r\n * @returns The blended state.\r\n */\r\n abstract mixState(a: StateType, b: StateType, t: number): StateType;\r\n /**\r\n * Get the blend identifier for this track.\r\n *\r\n * Tracks with the same blend ID are considered compatible for blending on the\r\n * same target channel/property.\r\n *\r\n * @returns An identifier used to group compatible tracks for blending.\r\n */\r\n abstract getBlendId(): unknown;\r\n /**\r\n * Get the intrinsic duration of this track in seconds.\r\n *\r\n * Used by clips to determine overall clip duration and looping behavior.\r\n *\r\n * @returns Track duration (seconds).\r\n */\r\n abstract getDuration(): number;\r\n}\r\n"],"names":["AnimationTrack","embedded","_name","_animation","_embedded","_target","_jointIndex","name","val","animation","ani","target","jointIndex","index","reset"],"mappings":"AAGA;;;;;;;;;;;;;;AAcC,IACM,MAAeA,cAAAA,CAAAA;qBAEpB,KAAwB;qBAExB,SAA6B;qBAE7B,UAA8C;qBAE9C,OAA0B;qBAE1B,WAA8B;AAC9B;;;;MAKA,WAAA,CAAYC,QAAkB,CAAE;QAC9B,IAAI,CAACC,KAAK,GAAG,QAAA;QACb,IAAI,CAACC,UAAU,GAAG,IAAA;AAClB,QAAA,IAAI,CAACC,SAAS,GAAG,CAAC,CAACH,QAAAA;QACnB,IAAI,CAACI,OAAO,GAAG,EAAA;QACf,IAAI,CAACC,WAAW,GAAG,EAAC;AACtB;AACA;;AAEC,MACD,IAAIC,IAAO,GAAA;QACT,OAAO,IAAI,CAACL,KAAK;AACnB;IACA,IAAIK,IAAAA,CAAKC,GAAW,EAAE;QACpB,IAAI,CAACN,KAAK,GAAGM,GAAAA;AACf;AACA;;AAEC,MACD,IAAIP,QAAW,GAAA;QACb,OAAO,IAAI,CAACG,SAAS;AACvB;AACA;;AAEC,MACD,IAAIK,SAAY,GAAA;QACd,OAAO,IAAI,CAACN,UAAU;AACxB;IACA,IAAIM,SAAAA,CAAUC,GAAG,EAAE;QACjB,IAAI,CAACP,UAAU,GAAGO,GAAAA;AACpB;AACA;;;;;AAKC,MACD,IAAIC,MAAS,GAAA;QACX,OAAO,IAAI,CAACN,OAAO;AACrB;IACA,IAAIM,MAAAA,CAAOH,GAAW,EAAE;QACtB,IAAI,CAACH,OAAO,GAAGG,GAAAA;AACjB;AACA;;AAEC,MACD,IAAII,UAAa,GAAA;QACf,OAAO,IAAI,CAACN,WAAW;AACzB;IACA,IAAIM,UAAAA,CAAWC,KAAa,EAAE;QAC5B,IAAI,CAACP,WAAW,GAAGO,KAAAA;AACrB;AACA;;;;;;MAOAC,KAAAA,CAAMT,OAAe,EAAE;AA6CzB;;;;"}
1
+ {"version":3,"file":"animationtrack.js","sources":["../../src/animation/animationtrack.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport type { AnimationClip } from './animation';\r\n\r\n/**\r\n * Base class for animation tracks.\r\n *\r\n * A track produces time-varying state for a specific target and defines how to:\r\n * - Compute state at a given time (`calculateState`)\r\n * - Apply that state to a target (`applyState`)\r\n * - Blend between two states (`mixState`)\r\n * - Report its blend compatibility (`getBlendId`)\r\n * - Report its intrinsic duration (`getDuration`)\r\n *\r\n * Generic:\r\n * - `StateType` is the shape of the computed/applied state (e.g., number, vector, pose).\r\n *\r\n * @public\r\n */\r\nexport abstract class AnimationTrack<StateType = unknown> {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _animation: Nullable<AnimationClip>;\r\n /** @internal */\r\n protected _target: string;\r\n /** @internal */\r\n protected _jointIndex: number;\r\n /**\r\n * Construct a new animation track.\r\n *\r\n * @param embedded - Whether this track is embedded/owned inline by its container. Default false.\r\n */\r\n constructor(embedded?: boolean) {\r\n this._name = 'noname';\r\n this._animation = null;\r\n this._embedded = !!embedded;\r\n this._target = '';\r\n this._jointIndex = -1;\r\n }\r\n /**\r\n * Human-readable name of the track.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val;\r\n }\r\n /**\r\n * Whether this track is embedded (owned inline by a resource/container).\r\n */\r\n get embedded() {\r\n return this._embedded;\r\n }\r\n /**\r\n * The `AnimationClip` that owns this track.\r\n */\r\n get animation() {\r\n return this._animation;\r\n }\r\n set animation(ani) {\r\n this._animation = ani;\r\n }\r\n /**\r\n * Logical target identifier for this track (optional metadata).\r\n *\r\n * This does not affect application; it can be used by tooling or higher-level\r\n * systems to label/group tracks.\r\n */\r\n get target() {\r\n return this._target;\r\n }\r\n set target(val: string) {\r\n this._target = val;\r\n }\r\n /**\r\n * Joint index if this track controls a joint, otherwise -1\r\n */\r\n get jointIndex() {\r\n return this._jointIndex;\r\n }\r\n set jointIndex(index: number) {\r\n this._jointIndex = index;\r\n }\r\n /**\r\n * Clone this animation track\r\n */\r\n abstract clone(): this;\r\n /**\r\n * Reset the track to its initial state for the given target.\r\n *\r\n * Intended to stop playback and rewind the target to the first frame or default state.\r\n *\r\n * @param _target - The animated object to reset.\r\n */\r\n reset(_target: object) {}\r\n /**\r\n * Compute the animation state at the specified time.\r\n *\r\n * Implementations should be pure with respect to inputs: given the same `target` and\r\n * `currentTime`, return the same `StateType`.\r\n *\r\n * @param target - The animated object (used to resolve current baseline if needed).\r\n * @param currentTime - Time cursor in seconds within the track's timeline.\r\n * @returns The computed state at `currentTime`.\r\n */\r\n abstract calculateState(target: object, currentTime: number): StateType;\r\n /**\r\n * Apply a previously computed animation state to the target.\r\n *\r\n * @param target - The animated object to modify.\r\n * @param state - The state to apply.\r\n */\r\n abstract applyState(target: object, state: StateType): unknown;\r\n /**\r\n * Blend two states into a new state using a weight.\r\n *\r\n * @param a - First state.\r\n * @param b - Second state.\r\n * @param t - Blend weight in \\[0, 1\\], where 0 yields `a` and 1 yields `b`.\r\n * @returns The blended state.\r\n */\r\n abstract mixState(a: StateType, b: StateType, t: number): StateType;\r\n /**\r\n * Get the blend identifier for this track.\r\n *\r\n * Tracks with the same blend ID are considered compatible for blending on the\r\n * same target channel/property.\r\n *\r\n * @returns An identifier used to group compatible tracks for blending.\r\n */\r\n abstract getBlendId(): unknown;\r\n /**\r\n * Get the intrinsic duration of this track in seconds.\r\n *\r\n * Used by clips to determine overall clip duration and looping behavior.\r\n *\r\n * @returns Track duration (seconds).\r\n */\r\n abstract getDuration(): number;\r\n}\r\n"],"names":["AnimationTrack","embedded","_name","_animation","_embedded","_target","_jointIndex","name","val","animation","ani","target","jointIndex","index","reset"],"mappings":"AAGA;;;;;;;;;;;;;;AAcC,IACM,MAAeA,cAAAA,CAAAA;qBAEpB,KAAwB;qBAExB,SAA6B;qBAE7B,UAA8C;qBAE9C,OAA0B;qBAE1B,WAA8B;AAC9B;;;;MAKA,WAAA,CAAYC,QAAkB,CAAE;QAC9B,IAAI,CAACC,KAAK,GAAG,QAAA;QACb,IAAI,CAACC,UAAU,GAAG,IAAA;AAClB,QAAA,IAAI,CAACC,SAAS,GAAG,CAAC,CAACH,QAAAA;QACnB,IAAI,CAACI,OAAO,GAAG,EAAA;QACf,IAAI,CAACC,WAAW,GAAG,EAAC;AACtB;AACA;;AAEC,MACD,IAAIC,IAAO,GAAA;QACT,OAAO,IAAI,CAACL,KAAK;AACnB;IACA,IAAIK,IAAAA,CAAKC,GAAW,EAAE;QACpB,IAAI,CAACN,KAAK,GAAGM,GAAAA;AACf;AACA;;AAEC,MACD,IAAIP,QAAW,GAAA;QACb,OAAO,IAAI,CAACG,SAAS;AACvB;AACA;;AAEC,MACD,IAAIK,SAAY,GAAA;QACd,OAAO,IAAI,CAACN,UAAU;AACxB;IACA,IAAIM,SAAAA,CAAUC,GAAG,EAAE;QACjB,IAAI,CAACP,UAAU,GAAGO,GAAAA;AACpB;AACA;;;;;AAKC,MACD,IAAIC,MAAS,GAAA;QACX,OAAO,IAAI,CAACN,OAAO;AACrB;IACA,IAAIM,MAAAA,CAAOH,GAAW,EAAE;QACtB,IAAI,CAACH,OAAO,GAAGG,GAAAA;AACjB;AACA;;AAEC,MACD,IAAII,UAAa,GAAA;QACf,OAAO,IAAI,CAACN,WAAW;AACzB;IACA,IAAIM,UAAAA,CAAWC,KAAa,EAAE;QAC5B,IAAI,CAACP,WAAW,GAAGO,KAAAA;AACrB;AAKA;;;;;;MAOAC,KAAAA,CAAMT,OAAe,EAAE;AA6CzB;;;;"}
@@ -40,6 +40,9 @@ const tmpVec3 = new Vector3();
40
40
  }
41
41
  this._interpolator = interp ?? null;
42
42
  }
43
+ /** {@inheritDoc AnimationTrack.clone} */ clone() {
44
+ return new NodeEulerRotationTrack(this._interpolator?.clone(), false);
45
+ }
43
46
  /** {@inheritDoc AnimationTrack.calculateState} */ calculateState(target, currentTime) {
44
47
  this._interpolator.interpolate(currentTime, tmpVec3);
45
48
  this._state.fromEulerAngle(tmpVec3.x, tmpVec3.y, tmpVec3.z);
@@ -1 +1 @@
1
- {"version":3,"file":"eulerrotationtrack.js","sources":["../../src/animation/eulerrotationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\nconst tmpVec3 = new Vector3();\r\n\r\n/**\r\n * Euler angle rotation animation track\r\n * @public\r\n */\r\nexport class NodeEulerRotationTrack extends AnimationTrack<Quaternion> {\r\n private readonly _state: Quaternion;\r\n private _interpolator!: Interpolator;\r\n /**\r\n * Create an instance of EulerRotationTrack\r\n */\r\n constructor();\r\n /**\r\n * Create an instance of EulerRotationTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains the keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of EulerRotationTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Vector3 }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator?: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Vector3 }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator === undefined) {\r\n super(false);\r\n } else if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'vec3') {\r\n throw new Error(`EulerRotationTrack(): interpolator target must be 'vec3'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Vector3 }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 3);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 3 + 0] = keyFrames[i].value.x;\r\n outputs[i * 3 + 1] = keyFrames[i].value.y;\r\n outputs[i * 3 + 2] = keyFrames[i].value.z;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);\r\n }\r\n this._state = new Quaternion();\r\n }\r\n get interpolator() {\r\n return this._interpolator;\r\n }\r\n set interpolator(interp: Interpolator) {\r\n if (interp && interp.target !== 'vec3') {\r\n throw new Error(`EulerRotationTrack(): interpolator target must be 'vec3'`);\r\n }\r\n this._interpolator = interp ?? null;\r\n }\r\n /** {@inheritDoc AnimationTrack.calculateState} */\r\n calculateState(target: object, currentTime: number) {\r\n this._interpolator.interpolate(currentTime, tmpVec3);\r\n this._state.fromEulerAngle(tmpVec3.x, tmpVec3.y, tmpVec3.z);\r\n return this._state;\r\n }\r\n /** {@inheritDoc AnimationTrack.applyState} */\r\n applyState(node: SceneNode, state: Quaternion) {\r\n node.rotation.set(state);\r\n }\r\n /** {@inheritDoc AnimationTrack.mixState} */\r\n mixState(a: Quaternion, b: Quaternion, t: number) {\r\n return Quaternion.slerp(a, b, t);\r\n }\r\n /** {@inheritDoc AnimationTrack.getBlendId} */\r\n getBlendId() {\r\n return 'node-rotation';\r\n }\r\n /** {@inheritDoc AnimationTrack.getDuration} */\r\n getDuration() {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["tmpVec3","Vector3","NodeEulerRotationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","undefined","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Quaternion","interpolator","interp","calculateState","currentTime","interpolate","fromEulerAngle","applyState","node","state","rotation","set","mixState","a","b","t","slerp","getBlendId","getDuration","maxTime"],"mappings":"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"}
1
+ {"version":3,"file":"eulerrotationtrack.js","sources":["../../src/animation/eulerrotationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\nconst tmpVec3 = new Vector3();\r\n\r\n/**\r\n * Euler angle rotation animation track\r\n * @public\r\n */\r\nexport class NodeEulerRotationTrack extends AnimationTrack<Quaternion> {\r\n private readonly _state: Quaternion;\r\n private _interpolator!: Interpolator;\r\n /**\r\n * Create an instance of EulerRotationTrack\r\n */\r\n constructor();\r\n /**\r\n * Create an instance of EulerRotationTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains the keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of EulerRotationTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Vector3 }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator?: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Vector3 }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator === undefined) {\r\n super(false);\r\n } else if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'vec3') {\r\n throw new Error(`EulerRotationTrack(): interpolator target must be 'vec3'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Vector3 }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 3);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 3 + 0] = keyFrames[i].value.x;\r\n outputs[i * 3 + 1] = keyFrames[i].value.y;\r\n outputs[i * 3 + 2] = keyFrames[i].value.z;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);\r\n }\r\n this._state = new Quaternion();\r\n }\r\n get interpolator() {\r\n return this._interpolator;\r\n }\r\n set interpolator(interp: Interpolator) {\r\n if (interp && interp.target !== 'vec3') {\r\n throw new Error(`EulerRotationTrack(): interpolator target must be 'vec3'`);\r\n }\r\n this._interpolator = interp ?? null;\r\n }\r\n /** {@inheritDoc AnimationTrack.clone} */\r\n clone(): this {\r\n return new NodeEulerRotationTrack(this._interpolator?.clone(), false) as this;\r\n }\r\n /** {@inheritDoc AnimationTrack.calculateState} */\r\n calculateState(target: object, currentTime: number) {\r\n this._interpolator.interpolate(currentTime, tmpVec3);\r\n this._state.fromEulerAngle(tmpVec3.x, tmpVec3.y, tmpVec3.z);\r\n return this._state;\r\n }\r\n /** {@inheritDoc AnimationTrack.applyState} */\r\n applyState(node: SceneNode, state: Quaternion) {\r\n node.rotation.set(state);\r\n }\r\n /** {@inheritDoc AnimationTrack.mixState} */\r\n mixState(a: Quaternion, b: Quaternion, t: number) {\r\n return Quaternion.slerp(a, b, t);\r\n }\r\n /** {@inheritDoc AnimationTrack.getBlendId} */\r\n getBlendId() {\r\n return 'node-rotation';\r\n }\r\n /** {@inheritDoc AnimationTrack.getDuration} */\r\n getDuration() {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["tmpVec3","Vector3","NodeEulerRotationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","undefined","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Quaternion","interpolator","interp","clone","calculateState","currentTime","interpolate","fromEulerAngle","applyState","node","state","rotation","set","mixState","a","b","t","slerp","getBlendId","getDuration","maxTime"],"mappings":"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"}
@@ -17,6 +17,13 @@ import { createGeometryCacheState, mixGeometryCacheBoundingBox, ensureGeometryCa
17
17
  this._state = this._frames.length > 0 ? createGeometryCacheState(this._frames[0]) : null;
18
18
  this._meshBindings = new WeakMap();
19
19
  }
20
+ clone() {
21
+ return new FixedGeometryCacheTrack(this._times.slice(), this._frames.map((frame)=>({
22
+ positions: frame.positions.slice(),
23
+ normals: frame.normals?.slice() ?? null,
24
+ boundingBox: frame.boundingBox.clone()
25
+ })), false);
26
+ }
20
27
  get times() {
21
28
  return this._times;
22
29
  }