blacktrigram 0.7.44 → 0.7.45

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 (746) hide show
  1. package/lib/audio/AudioManager.d.ts +26 -0
  2. package/lib/audio/AudioManager.d.ts.map +1 -1
  3. package/lib/audio/AudioManager.js +26 -0
  4. package/lib/audio/AudioManager.js.map +1 -1
  5. package/lib/audio/index.d.ts.map +1 -1
  6. package/lib/audio/index.js.map +1 -1
  7. package/lib/audio/types.d.ts +18 -2
  8. package/lib/audio/types.d.ts.map +1 -1
  9. package/lib/audio/types.js +1 -0
  10. package/lib/audio/types.js.map +1 -1
  11. package/lib/components/effects/WindParticles3D.d.ts.map +1 -1
  12. package/lib/components/index.d.ts.map +1 -1
  13. package/lib/components/index.js.map +1 -1
  14. package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
  15. package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
  16. package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts +0 -1
  17. package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts.map +1 -1
  18. package/lib/components/screens/combat/components/controls/KeyboardHints.js +0 -1
  19. package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
  20. package/lib/components/screens/combat/components/controls/PauseMenu.d.ts.map +1 -1
  21. package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
  22. package/lib/components/screens/combat/components/effects/ArterialSpray3D.d.ts.map +1 -1
  23. package/lib/components/screens/combat/components/effects/BloodDecals3D.d.ts.map +1 -1
  24. package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
  25. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts.map +1 -1
  26. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
  27. package/lib/components/screens/combat/components/effects/BloodParticles3D.d.ts.map +1 -1
  28. package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
  29. package/lib/components/screens/combat/components/effects/BloodViscosity3D.d.ts.map +1 -1
  30. package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
  31. package/lib/components/screens/combat/components/effects/BoneCrackParticles3D.d.ts.map +1 -1
  32. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.d.ts.map +1 -1
  33. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
  34. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts.map +1 -1
  35. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
  36. package/lib/components/screens/combat/components/effects/DustClouds3D.d.ts.map +1 -1
  37. package/lib/components/screens/combat/components/effects/EarthCrackEffect3D.d.ts.map +1 -1
  38. package/lib/components/screens/combat/components/effects/EarthHealingEffect3D.d.ts.map +1 -1
  39. package/lib/components/screens/combat/components/effects/ImpactSparks3D.d.ts.map +1 -1
  40. package/lib/components/screens/combat/components/effects/InternalDamage3D.d.ts.map +1 -1
  41. package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
  42. package/lib/components/screens/combat/components/effects/LiPrecisionTargetingOverlay.d.ts.map +1 -1
  43. package/lib/components/screens/combat/components/effects/NerveStrikeParticles3D.d.ts.map +1 -1
  44. package/lib/components/screens/combat/components/effects/PainVignette.d.ts.map +1 -1
  45. package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
  46. package/lib/components/screens/combat/components/effects/ParticleAudio3D.d.ts.map +1 -1
  47. package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
  48. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.d.ts.map +1 -1
  49. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
  50. package/lib/components/screens/combat/components/effects/WaterRipple3D.d.ts.map +1 -1
  51. package/lib/components/screens/combat/components/effects/WaterWave3D.d.ts.map +1 -1
  52. package/lib/components/screens/combat/components/effects/index.d.ts.map +1 -1
  53. package/lib/components/screens/combat/components/feedback/MatchCountdown.d.ts.map +1 -1
  54. package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
  55. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.d.ts.map +1 -1
  56. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
  57. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.d.ts.map +1 -1
  58. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
  59. package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
  60. package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
  61. package/lib/components/screens/combat/components/hud/CombatLeftHUD.d.ts.map +1 -1
  62. package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
  63. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts.map +1 -1
  64. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
  65. package/lib/components/screens/combat/components/hud/CombatRightHUD.d.ts.map +1 -1
  66. package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
  67. package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
  68. package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
  69. package/lib/components/screens/combat/components/hud/DifficultyIndicator.d.ts.map +1 -1
  70. package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
  71. package/lib/components/screens/combat/components/hud/FPSMonitor.d.ts.map +1 -1
  72. package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
  73. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts.map +1 -1
  74. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
  75. package/lib/components/screens/combat/components/indicators/BalanceIndicator.d.ts.map +1 -1
  76. package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
  77. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts +0 -1
  78. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts.map +1 -1
  79. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js +0 -1
  80. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
  81. package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts.map +1 -1
  82. package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
  83. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts +0 -2
  84. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts.map +1 -1
  85. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js +0 -1
  86. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
  87. package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
  88. package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
  89. package/lib/components/screens/combat/helpers/combatHelpers.d.ts.map +1 -1
  90. package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
  91. package/lib/components/screens/combat/hooks/useAICombat.d.ts.map +1 -1
  92. package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
  93. package/lib/components/screens/combat/hooks/useCombatActions.d.ts.map +1 -1
  94. package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
  95. package/lib/components/screens/combat/hooks/useCombatAttackMovement.d.ts.map +1 -1
  96. package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
  97. package/lib/components/screens/combat/hooks/useCombatAudio.d.ts.map +1 -1
  98. package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
  99. package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
  100. package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
  101. package/lib/components/screens/combat/hooks/useCombatState.d.ts.map +1 -1
  102. package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
  103. package/lib/components/screens/combat/hooks/useGrapplingAudio.d.ts.map +1 -1
  104. package/lib/components/screens/combat/hooks/usePreloadCombatAudio.d.ts.map +1 -1
  105. package/lib/components/screens/controls/ControlsScreen3D.d.ts.map +1 -1
  106. package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
  107. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.d.ts.map +1 -1
  108. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
  109. package/lib/components/screens/controls/components/GamepadVisualization3D.d.ts.map +1 -1
  110. package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
  111. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.d.ts.map +1 -1
  112. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
  113. package/lib/components/screens/controls/components/Key3D.d.ts.map +1 -1
  114. package/lib/components/screens/controls/components/Key3D.js.map +1 -1
  115. package/lib/components/screens/controls/components/VisualKeyboard3D.d.ts.map +1 -1
  116. package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
  117. package/lib/components/screens/controls/constants/ControlsConstants.d.ts.map +1 -1
  118. package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
  119. package/lib/components/screens/controls/hooks/useControlsState.d.ts.map +1 -1
  120. package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
  121. package/lib/components/screens/endscreen/EndScreen3D.d.ts.map +1 -1
  122. package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
  123. package/lib/components/screens/endscreen/components/DefeatAnimation3D.d.ts.map +1 -1
  124. package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
  125. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.d.ts.map +1 -1
  126. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
  127. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.d.ts.map +1 -1
  128. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
  129. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.d.ts.map +1 -1
  130. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
  131. package/lib/components/screens/endscreen/components/VictoryAnimation3D.d.ts.map +1 -1
  132. package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
  133. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.d.ts.map +1 -1
  134. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
  135. package/lib/components/screens/endscreen/components/index.d.ts.map +1 -1
  136. package/lib/components/screens/endscreen/index.d.ts.map +1 -1
  137. package/lib/components/screens/intro/IntroScreen3D.d.ts.map +1 -1
  138. package/lib/components/screens/intro/IntroScreen3D.js +1 -1
  139. package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
  140. package/lib/components/screens/intro/components/AbilityListOverlayHtml.d.ts.map +1 -1
  141. package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
  142. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.d.ts.map +1 -1
  143. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
  144. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.d.ts.map +1 -1
  145. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
  146. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.d.ts.map +1 -1
  147. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
  148. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.d.ts.map +1 -1
  149. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
  150. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.d.ts.map +1 -1
  151. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
  152. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.d.ts.map +1 -1
  153. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
  154. package/lib/components/screens/intro/components/StatBarOverlayHtml.d.ts.map +1 -1
  155. package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
  156. package/lib/components/screens/philosophy/PhilosophyScreen3D.d.ts.map +1 -1
  157. package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
  158. package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts +0 -1
  159. package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts.map +1 -1
  160. package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts +0 -1
  161. package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts.map +1 -1
  162. package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts +0 -1
  163. package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts.map +1 -1
  164. package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts +0 -1
  165. package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts.map +1 -1
  166. package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts +0 -1
  167. package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts.map +1 -1
  168. package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts +0 -1
  169. package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts.map +1 -1
  170. package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts +0 -1
  171. package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts.map +1 -1
  172. package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
  173. package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
  174. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.d.ts.map +1 -1
  175. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
  176. package/lib/components/screens/training/components/AnatomyOverlay3D.d.ts.map +1 -1
  177. package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
  178. package/lib/components/screens/training/components/DamageNumber3D.d.ts.map +1 -1
  179. package/lib/components/screens/training/components/FootPlacementMarkers3D.d.ts.map +1 -1
  180. package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
  181. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.d.ts.map +1 -1
  182. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
  183. package/lib/components/screens/training/components/HitFeedbackEffect3D.d.ts.map +1 -1
  184. package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
  185. package/lib/components/screens/training/components/TrainingAICharacter3D.d.ts.map +1 -1
  186. package/lib/components/screens/training/components/TrainingArena3D.d.ts.map +1 -1
  187. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.d.ts.map +1 -1
  188. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
  189. package/lib/components/screens/training/components/TrainingDummy3D.d.ts.map +1 -1
  190. package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
  191. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.d.ts.map +1 -1
  192. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
  193. package/lib/components/screens/training/components/TrainingHitEffects3D.d.ts.map +1 -1
  194. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.d.ts.map +1 -1
  195. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
  196. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.d.ts.map +1 -1
  197. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
  198. package/lib/components/screens/training/components/VitalPointMarker3D.d.ts.map +1 -1
  199. package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
  200. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.d.ts.map +1 -1
  201. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
  202. package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
  203. package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
  204. package/lib/components/screens/training/components/hud/TrainingLeftHUD.d.ts.map +1 -1
  205. package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
  206. package/lib/components/screens/training/components/hud/TrainingRightHUD.d.ts.map +1 -1
  207. package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
  208. package/lib/components/screens/training/components/hud/TrainingTopHUD.d.ts.map +1 -1
  209. package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
  210. package/lib/components/screens/training/components/index.d.ts.map +1 -1
  211. package/lib/components/screens/training/hooks/useAttackMovement.d.ts.map +1 -1
  212. package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
  213. package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
  214. package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
  215. package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
  216. package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
  217. package/lib/components/screens/training/hooks/useTrainingState.d.ts.map +1 -1
  218. package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
  219. package/lib/components/shared/base/AccessibilityProvider.d.ts.map +1 -1
  220. package/lib/components/shared/base/BaseButton.d.ts.map +1 -1
  221. package/lib/components/shared/base/BaseButton.js.map +1 -1
  222. package/lib/components/shared/base/BaseButtonOverlayHtml.d.ts.map +1 -1
  223. package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
  224. package/lib/components/shared/base/BasePanel.d.ts.map +1 -1
  225. package/lib/components/shared/base/BasePanel.js.map +1 -1
  226. package/lib/components/shared/base/BaseText.d.ts.map +1 -1
  227. package/lib/components/shared/base/BaseText.js.map +1 -1
  228. package/lib/components/shared/base/ResponsiveContainer.d.ts.map +1 -1
  229. package/lib/components/shared/base/index.d.ts.map +1 -1
  230. package/lib/components/shared/base/useKoreanTheme.d.ts.map +1 -1
  231. package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
  232. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.d.ts.map +1 -1
  233. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
  234. package/lib/components/shared/effects/ScreenFlash.d.ts.map +1 -1
  235. package/lib/components/shared/mobile/ActionButtons.d.ts.map +1 -1
  236. package/lib/components/shared/mobile/ActionButtons.js +0 -1
  237. package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
  238. package/lib/components/shared/mobile/GestureRecognizerPure.d.ts +0 -1
  239. package/lib/components/shared/mobile/GestureRecognizerPure.d.ts.map +1 -1
  240. package/lib/components/shared/mobile/GestureRecognizerPure.js +0 -1
  241. package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
  242. package/lib/components/shared/mobile/HapticController.d.ts +0 -13
  243. package/lib/components/shared/mobile/HapticController.d.ts.map +1 -1
  244. package/lib/components/shared/mobile/HapticController.js +0 -10
  245. package/lib/components/shared/mobile/HapticController.js.map +1 -1
  246. package/lib/components/shared/mobile/MobileControlsPure.d.ts.map +1 -1
  247. package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
  248. package/lib/components/shared/mobile/PerformanceMonitor.d.ts +0 -15
  249. package/lib/components/shared/mobile/PerformanceMonitor.d.ts.map +1 -1
  250. package/lib/components/shared/mobile/StanceWheelPure.d.ts +0 -1
  251. package/lib/components/shared/mobile/StanceWheelPure.d.ts.map +1 -1
  252. package/lib/components/shared/mobile/StanceWheelPure.js +0 -1
  253. package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
  254. package/lib/components/shared/mobile/TouchOptimizer.d.ts +0 -4
  255. package/lib/components/shared/mobile/TouchOptimizer.d.ts.map +1 -1
  256. package/lib/components/shared/mobile/TouchOptimizer.js +0 -3
  257. package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
  258. package/lib/components/shared/mobile/VirtualDPad.d.ts.map +1 -1
  259. package/lib/components/shared/mobile/VirtualDPad.js +0 -1
  260. package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
  261. package/lib/components/shared/mobile/index.d.ts.map +1 -1
  262. package/lib/components/shared/three/anatomy/BodySurface.d.ts.map +1 -1
  263. package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
  264. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.d.ts.map +1 -1
  265. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
  266. package/lib/components/shared/three/anatomy/BoneClothing.d.ts.map +1 -1
  267. package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
  268. package/lib/components/shared/three/anatomy/BoneRenderer.d.ts +0 -1
  269. package/lib/components/shared/three/anatomy/BoneRenderer.d.ts.map +1 -1
  270. package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
  271. package/lib/components/shared/three/anatomy/Face3D.d.ts.map +1 -1
  272. package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
  273. package/lib/components/shared/three/anatomy/Foot3D.d.ts +0 -1
  274. package/lib/components/shared/three/anatomy/Foot3D.d.ts.map +1 -1
  275. package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
  276. package/lib/components/shared/three/anatomy/Hand3D.d.ts +0 -1
  277. package/lib/components/shared/three/anatomy/Hand3D.d.ts.map +1 -1
  278. package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
  279. package/lib/components/shared/three/effects/ActionFeedback.d.ts.map +1 -1
  280. package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
  281. package/lib/components/shared/three/effects/DamageNumbers.d.ts.map +1 -1
  282. package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
  283. package/lib/components/shared/three/effects/ExplosiveBurstEffect3D.d.ts.map +1 -1
  284. package/lib/components/shared/three/effects/GrapplingIndicator3D.d.ts.map +1 -1
  285. package/lib/components/shared/three/effects/HitEffects3D.d.ts.map +1 -1
  286. package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
  287. package/lib/components/shared/three/effects/LimbExposureIndicator3D.d.ts.map +1 -1
  288. package/lib/components/shared/three/effects/NerveDisruptionEffect3D.d.ts.map +1 -1
  289. package/lib/components/shared/three/effects/PlayerStateIndicators.d.ts.map +1 -1
  290. package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
  291. package/lib/components/shared/three/effects/StanceSymbol3D.d.ts.map +1 -1
  292. package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
  293. package/lib/components/shared/three/effects/StanceTransitionEffect.d.ts.map +1 -1
  294. package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
  295. package/lib/components/shared/three/effects/ThunderEffect3D.d.ts.map +1 -1
  296. package/lib/components/shared/three/effects/VitalPointMarkers3D.d.ts.map +1 -1
  297. package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
  298. package/lib/components/shared/three/index.d.ts.map +1 -1
  299. package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts +0 -6
  300. package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts.map +1 -1
  301. package/lib/components/shared/three/indicators/ElementalColorSystem.js +0 -4
  302. package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
  303. package/lib/components/shared/three/indicators/GuardIndicator.d.ts +0 -1
  304. package/lib/components/shared/three/indicators/GuardIndicator.d.ts.map +1 -1
  305. package/lib/components/shared/three/indicators/GuardIndicator.js +0 -1
  306. package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
  307. package/lib/components/shared/three/indicators/HapticFeedback.d.ts +0 -7
  308. package/lib/components/shared/three/indicators/HapticFeedback.d.ts.map +1 -1
  309. package/lib/components/shared/three/indicators/HapticFeedback.js +0 -2
  310. package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
  311. package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts +0 -1
  312. package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts.map +1 -1
  313. package/lib/components/shared/three/indicators/StanceChangeIndicator.js +0 -1
  314. package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
  315. package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts +0 -1
  316. package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts.map +1 -1
  317. package/lib/components/shared/three/models/Player3DWithTransitions.d.ts.map +1 -1
  318. package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
  319. package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
  320. package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
  321. package/lib/components/shared/three/optimization/AdaptiveQuality.d.ts.map +1 -1
  322. package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
  323. package/lib/components/shared/three/optimization/InstancedGeometry.d.ts.map +1 -1
  324. package/lib/components/shared/three/optimization/LODSystem.d.ts.map +1 -1
  325. package/lib/components/shared/three/scene/AtmosphericParticles3D.d.ts.map +1 -1
  326. package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
  327. package/lib/components/shared/three/scene/BackgroundScene3D.d.ts.map +1 -1
  328. package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
  329. package/lib/components/shared/three/scene/CombatArena3D.d.ts.map +1 -1
  330. package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
  331. package/lib/components/shared/three/scene/DebugCollision.d.ts +0 -2
  332. package/lib/components/shared/three/scene/DebugCollision.d.ts.map +1 -1
  333. package/lib/components/shared/three/scene/KoreanSignage3D.d.ts.map +1 -1
  334. package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
  335. package/lib/components/shared/three/ui/ArchetypeCard.d.ts.map +1 -1
  336. package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
  337. package/lib/components/shared/three/ui/BodyPartHealthDisplay.d.ts.map +1 -1
  338. package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
  339. package/lib/components/shared/three/ui/BreathingIndicator.d.ts.map +1 -1
  340. package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
  341. package/lib/components/shared/three/ui/CombatReadinessBar.d.ts.map +1 -1
  342. package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
  343. package/lib/components/shared/three/ui/ComboCounter.d.ts.map +1 -1
  344. package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
  345. package/lib/components/shared/three/ui/HealthBar.d.ts.map +1 -1
  346. package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
  347. package/lib/components/shared/three/ui/KoreanButton.d.ts.map +1 -1
  348. package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
  349. package/lib/components/shared/three/ui/KoreanPanel.d.ts.map +1 -1
  350. package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
  351. package/lib/components/shared/three/ui/KoreanText.d.ts.map +1 -1
  352. package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
  353. package/lib/components/shared/three/ui/MenuList.d.ts.map +1 -1
  354. package/lib/components/shared/three/ui/MenuList.js.map +1 -1
  355. package/lib/components/shared/three/ui/PlayerHUD.d.ts.map +1 -1
  356. package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
  357. package/lib/components/shared/three/ui/ProgressBar.d.ts.map +1 -1
  358. package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
  359. package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts +0 -1
  360. package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts.map +1 -1
  361. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js +0 -1
  362. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
  363. package/lib/components/shared/three/ui/StaminaBar.d.ts.map +1 -1
  364. package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
  365. package/lib/components/shared/three/ui/TechniqueBar.d.ts.map +1 -1
  366. package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
  367. package/lib/components/shared/three/ui/TechniqueBarContainer.d.ts.map +1 -1
  368. package/lib/components/shared/three/ui/TechniqueCard.d.ts.map +1 -1
  369. package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
  370. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.d.ts.map +1 -1
  371. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
  372. package/lib/components/shared/three/ui/VulnerabilityWindowHUD.d.ts.map +1 -1
  373. package/lib/components/shared/ui/BaseHUDContainer.d.ts.map +1 -1
  374. package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
  375. package/lib/components/shared/ui/CombatTimer.d.ts.map +1 -1
  376. package/lib/components/shared/ui/CombatTimer.js.map +1 -1
  377. package/lib/components/shared/ui/ErrorBoundary.d.ts.map +1 -1
  378. package/lib/components/shared/ui/ErrorModal.d.ts.map +1 -1
  379. package/lib/components/shared/ui/ErrorModal.js.map +1 -1
  380. package/lib/components/shared/ui/HUDSection.d.ts.map +1 -1
  381. package/lib/components/shared/ui/LoadingState.d.ts.map +1 -1
  382. package/lib/components/shared/ui/LoadingState.js.map +1 -1
  383. package/lib/components/shared/ui/MobileHUDLayout.d.ts +0 -1
  384. package/lib/components/shared/ui/MobileHUDLayout.d.ts.map +1 -1
  385. package/lib/components/shared/ui/ResponsiveContainer.d.ts +0 -1
  386. package/lib/components/shared/ui/ResponsiveContainer.d.ts.map +1 -1
  387. package/lib/components/shared/ui/SplashScreen.d.ts.map +1 -1
  388. package/lib/components/shared/ui/SplashScreen.js +2 -2
  389. package/lib/components/shared/ui/SplashScreen.js.map +1 -1
  390. package/lib/components/shared/ui/StyledHUDPanel.d.ts.map +1 -1
  391. package/lib/components/shared/ui/VitalPointOverlayControlsPure.d.ts.map +1 -1
  392. package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
  393. package/lib/components/shared/ui/VolumeControl.d.ts.map +1 -1
  394. package/lib/components/shared/ui/VolumeControl.js.map +1 -1
  395. package/lib/components/shared/ui/shared/ConfirmDialog.d.ts.map +1 -1
  396. package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
  397. package/lib/components/test/Hello3D.d.ts.map +1 -1
  398. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.d.ts.map +1 -1
  399. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
  400. package/lib/components/ui/combat/ComboCounter.d.ts.map +1 -1
  401. package/lib/components/ui/combat/PressureMeter.d.ts.map +1 -1
  402. package/lib/systems/CombatSystem.d.ts +0 -6
  403. package/lib/systems/CombatSystem.d.ts.map +1 -1
  404. package/lib/systems/CombatSystem.js +0 -6
  405. package/lib/systems/CombatSystem.js.map +1 -1
  406. package/lib/systems/EffectCalculator.d.ts +0 -7
  407. package/lib/systems/EffectCalculator.d.ts.map +1 -1
  408. package/lib/systems/EffectCalculator.js +0 -4
  409. package/lib/systems/EffectCalculator.js.map +1 -1
  410. package/lib/systems/LayoutSystem.d.ts +0 -1
  411. package/lib/systems/LayoutSystem.d.ts.map +1 -1
  412. package/lib/systems/LayoutSystem.js +0 -1
  413. package/lib/systems/LayoutSystem.js.map +1 -1
  414. package/lib/systems/PlayerEffectManager.d.ts +0 -10
  415. package/lib/systems/PlayerEffectManager.d.ts.map +1 -1
  416. package/lib/systems/PlayerEffectManager.js +0 -3
  417. package/lib/systems/PlayerEffectManager.js.map +1 -1
  418. package/lib/systems/ResponsiveScaling.d.ts +0 -12
  419. package/lib/systems/ResponsiveScaling.d.ts.map +1 -1
  420. package/lib/systems/ResponsiveScaling.js +0 -12
  421. package/lib/systems/ResponsiveScaling.js.map +1 -1
  422. package/lib/systems/TrigramSystem.d.ts +0 -13
  423. package/lib/systems/TrigramSystem.d.ts.map +1 -1
  424. package/lib/systems/TrigramSystem.js +0 -13
  425. package/lib/systems/TrigramSystem.js.map +1 -1
  426. package/lib/systems/VitalPointSystem.d.ts +0 -10
  427. package/lib/systems/VitalPointSystem.d.ts.map +1 -1
  428. package/lib/systems/VitalPointSystem.js +0 -10
  429. package/lib/systems/VitalPointSystem.js.map +1 -1
  430. package/lib/systems/animation/builders/KeyframeInterpolation.d.ts +0 -4
  431. package/lib/systems/animation/builders/KeyframeInterpolation.d.ts.map +1 -1
  432. package/lib/systems/animation/builders/KeyframeInterpolation.js +0 -1
  433. package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
  434. package/lib/systems/animation/builders/SkeletonRig.d.ts +0 -4
  435. package/lib/systems/animation/builders/SkeletonRig.d.ts.map +1 -1
  436. package/lib/systems/animation/builders/SkeletonRig.js +0 -3
  437. package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
  438. package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts +0 -5
  439. package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts.map +1 -1
  440. package/lib/systems/animation/catalogs/RecoveryAnimations.js +0 -5
  441. package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
  442. package/lib/systems/animation/core/AnimationHitTiming.d.ts +0 -6
  443. package/lib/systems/animation/core/AnimationHitTiming.d.ts.map +1 -1
  444. package/lib/systems/animation/core/AnimationHitTiming.js +0 -4
  445. package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
  446. package/lib/systems/animation/core/AnimationTransitions.d.ts +0 -3
  447. package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
  448. package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
  449. package/lib/systems/animation/core/LateralityTransform.d.ts +0 -3
  450. package/lib/systems/animation/core/LateralityTransform.d.ts.map +1 -1
  451. package/lib/systems/animation/core/LateralityTransform.js +0 -1
  452. package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
  453. package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts +0 -1
  454. package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts.map +1 -1
  455. package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
  456. package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts +0 -10
  457. package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts.map +1 -1
  458. package/lib/systems/animation/core/TechniqueAnimationMapper.js +0 -8
  459. package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
  460. package/lib/systems/animation/core/TrigramAnimationMapping.d.ts +0 -10
  461. package/lib/systems/animation/core/TrigramAnimationMapping.d.ts.map +1 -1
  462. package/lib/systems/animation/core/TrigramStanceTransitions.d.ts +0 -2
  463. package/lib/systems/animation/core/TrigramStanceTransitions.d.ts.map +1 -1
  464. package/lib/systems/animation/core/types.d.ts +0 -39
  465. package/lib/systems/animation/core/types.d.ts.map +1 -1
  466. package/lib/systems/animation/core/types.js +0 -9
  467. package/lib/systems/animation/core/types.js.map +1 -1
  468. package/lib/systems/animation/systems/AdvancedJointMovements.d.ts +0 -27
  469. package/lib/systems/animation/systems/AdvancedJointMovements.d.ts.map +1 -1
  470. package/lib/systems/animation/systems/AdvancedJointMovements.js +0 -1
  471. package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
  472. package/lib/systems/animation/systems/BodyFacingSystem.d.ts +0 -19
  473. package/lib/systems/animation/systems/BodyFacingSystem.d.ts.map +1 -1
  474. package/lib/systems/animation/systems/BodyFacingSystem.js +0 -14
  475. package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
  476. package/lib/systems/animation/systems/FacialExpressions.d.ts +0 -10
  477. package/lib/systems/animation/systems/FacialExpressions.d.ts.map +1 -1
  478. package/lib/systems/animation/systems/FacialExpressions.js +0 -2
  479. package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
  480. package/lib/systems/animation/systems/FallAnimations.d.ts +0 -4
  481. package/lib/systems/animation/systems/FallAnimations.d.ts.map +1 -1
  482. package/lib/systems/animation/systems/FallAnimations.js +0 -2
  483. package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
  484. package/lib/systems/animation/systems/HeadMovements.d.ts +0 -10
  485. package/lib/systems/animation/systems/HeadMovements.d.ts.map +1 -1
  486. package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts +0 -7
  487. package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts.map +1 -1
  488. package/lib/systems/bodypart/BodyPartDamageIntegration.js +0 -7
  489. package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
  490. package/lib/systems/bodypart/BodyPartHealthSystem.d.ts +0 -13
  491. package/lib/systems/bodypart/BodyPartHealthSystem.d.ts.map +1 -1
  492. package/lib/systems/bodypart/BodyPartHealthSystem.js +0 -13
  493. package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
  494. package/lib/systems/bodypart/BodyPartPositionMapping.d.ts +0 -6
  495. package/lib/systems/bodypart/BodyPartPositionMapping.d.ts.map +1 -1
  496. package/lib/systems/bodypart/BodyPartPositionMapping.js +0 -6
  497. package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
  498. package/lib/systems/bodypart/CombatInjuryIntegration.d.ts +0 -10
  499. package/lib/systems/bodypart/CombatInjuryIntegration.d.ts.map +1 -1
  500. package/lib/systems/bodypart/CombatInjuryIntegration.js +0 -8
  501. package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
  502. package/lib/systems/bodypart/InjuryIntegration.d.ts +0 -2
  503. package/lib/systems/bodypart/InjuryIntegration.d.ts.map +1 -1
  504. package/lib/systems/bodypart/InjuryIntegration.js +0 -2
  505. package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
  506. package/lib/systems/bodypart/InjuryTracker.d.ts +0 -14
  507. package/lib/systems/bodypart/InjuryTracker.d.ts.map +1 -1
  508. package/lib/systems/bodypart/InjuryTracker.js +0 -12
  509. package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
  510. package/lib/systems/bodypart/MovementPenaltySystem.d.ts +0 -8
  511. package/lib/systems/bodypart/MovementPenaltySystem.d.ts.map +1 -1
  512. package/lib/systems/bodypart/MovementPenaltySystem.js +0 -8
  513. package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
  514. package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts +0 -8
  515. package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts.map +1 -1
  516. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js +0 -8
  517. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
  518. package/lib/systems/bodypart/types.d.ts +0 -13
  519. package/lib/systems/bodypart/types.d.ts.map +1 -1
  520. package/lib/systems/bodypart/types.js +0 -5
  521. package/lib/systems/bodypart/types.js.map +1 -1
  522. package/lib/systems/breathing/BreathingDisruptionSystem.d.ts +0 -3
  523. package/lib/systems/breathing/BreathingDisruptionSystem.d.ts.map +1 -1
  524. package/lib/systems/breathing/BreathingDisruptionSystem.js +0 -2
  525. package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
  526. package/lib/systems/combat/BalanceSystem.d.ts +0 -25
  527. package/lib/systems/combat/BalanceSystem.d.ts.map +1 -1
  528. package/lib/systems/combat/BalanceSystem.js +0 -25
  529. package/lib/systems/combat/BalanceSystem.js.map +1 -1
  530. package/lib/systems/combat/BreakingStatusEffects.d.ts +0 -4
  531. package/lib/systems/combat/BreakingStatusEffects.d.ts.map +1 -1
  532. package/lib/systems/combat/BreakingStatusEffects.js +0 -3
  533. package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
  534. package/lib/systems/combat/CombatStateSystem.d.ts +0 -9
  535. package/lib/systems/combat/CombatStateSystem.d.ts.map +1 -1
  536. package/lib/systems/combat/CombatStateSystem.js +0 -9
  537. package/lib/systems/combat/CombatStateSystem.js.map +1 -1
  538. package/lib/systems/combat/ConsciousnessSystem.d.ts +0 -16
  539. package/lib/systems/combat/ConsciousnessSystem.d.ts.map +1 -1
  540. package/lib/systems/combat/ConsciousnessSystem.js +0 -16
  541. package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
  542. package/lib/systems/combat/FallIntegration.d.ts +0 -3
  543. package/lib/systems/combat/FallIntegration.d.ts.map +1 -1
  544. package/lib/systems/combat/FallIntegration.js +0 -3
  545. package/lib/systems/combat/FallIntegration.js.map +1 -1
  546. package/lib/systems/combat/GrappleSystem.d.ts +0 -2
  547. package/lib/systems/combat/GrappleSystem.d.ts.map +1 -1
  548. package/lib/systems/combat/GrappleSystem.js +0 -2
  549. package/lib/systems/combat/GrappleSystem.js.map +1 -1
  550. package/lib/systems/combat/LimbExposureSystem.d.ts +0 -7
  551. package/lib/systems/combat/LimbExposureSystem.d.ts.map +1 -1
  552. package/lib/systems/combat/LimbExposureSystem.js +0 -7
  553. package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
  554. package/lib/systems/combat/PainResponseSystem.d.ts +0 -11
  555. package/lib/systems/combat/PainResponseSystem.d.ts.map +1 -1
  556. package/lib/systems/combat/PainResponseSystem.js +0 -11
  557. package/lib/systems/combat/PainResponseSystem.js.map +1 -1
  558. package/lib/systems/combat/painConsciousnessUtils.d.ts +0 -7
  559. package/lib/systems/combat/painConsciousnessUtils.d.ts.map +1 -1
  560. package/lib/systems/combat/painConsciousnessUtils.js +0 -7
  561. package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
  562. package/lib/systems/effects.d.ts +11 -0
  563. package/lib/systems/effects.d.ts.map +1 -1
  564. package/lib/systems/effects.js +10 -0
  565. package/lib/systems/effects.js.map +1 -1
  566. package/lib/systems/game.d.ts +16 -0
  567. package/lib/systems/game.d.ts.map +1 -1
  568. package/lib/systems/game.js +1 -0
  569. package/lib/systems/game.js.map +1 -1
  570. package/lib/systems/index.d.ts +5 -1
  571. package/lib/systems/index.d.ts.map +1 -1
  572. package/lib/systems/index.js.map +1 -1
  573. package/lib/systems/movement/InjuryMovementModifier.d.ts +0 -10
  574. package/lib/systems/movement/InjuryMovementModifier.d.ts.map +1 -1
  575. package/lib/systems/movement/InjuryMovementModifier.js +0 -7
  576. package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
  577. package/lib/systems/movement/integration.d.ts +0 -3
  578. package/lib/systems/movement/integration.d.ts.map +1 -1
  579. package/lib/systems/movement/integration.js +0 -3
  580. package/lib/systems/movement/integration.js.map +1 -1
  581. package/lib/systems/physics/AttackMovementPhysics.d.ts +0 -9
  582. package/lib/systems/physics/AttackMovementPhysics.d.ts.map +1 -1
  583. package/lib/systems/physics/AttackMovementPhysics.js +0 -7
  584. package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
  585. package/lib/systems/physics/CollisionDetection.d.ts +0 -6
  586. package/lib/systems/physics/CollisionDetection.d.ts.map +1 -1
  587. package/lib/systems/physics/CollisionDetection.js +0 -6
  588. package/lib/systems/physics/CollisionDetection.js.map +1 -1
  589. package/lib/systems/physics/CoordinateMapper.d.ts +0 -1
  590. package/lib/systems/physics/CoordinateMapper.d.ts.map +1 -1
  591. package/lib/systems/physics/CoordinateMapper.js +0 -1
  592. package/lib/systems/physics/CoordinateMapper.js.map +1 -1
  593. package/lib/systems/physics/KnockbackPhysics.d.ts +0 -11
  594. package/lib/systems/physics/KnockbackPhysics.d.ts.map +1 -1
  595. package/lib/systems/physics/KnockbackPhysics.js +0 -8
  596. package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
  597. package/lib/systems/physics/MovementPhysics.d.ts +0 -10
  598. package/lib/systems/physics/MovementPhysics.d.ts.map +1 -1
  599. package/lib/systems/physics/MovementPhysics.js +0 -8
  600. package/lib/systems/physics/MovementPhysics.js.map +1 -1
  601. package/lib/systems/physics/PhysicalReachCalculator.d.ts +0 -6
  602. package/lib/systems/physics/PhysicalReachCalculator.d.ts.map +1 -1
  603. package/lib/systems/physics/PhysicalReachCalculator.js +0 -5
  604. package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
  605. package/lib/systems/physics/SpeedModifierSystem.d.ts +0 -5
  606. package/lib/systems/physics/SpeedModifierSystem.d.ts.map +1 -1
  607. package/lib/systems/physics/SpeedModifierSystem.js +0 -4
  608. package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
  609. package/lib/systems/player.d.ts +0 -5
  610. package/lib/systems/player.d.ts.map +1 -1
  611. package/lib/systems/trigram/TrigramCalculator.d.ts +0 -1
  612. package/lib/systems/trigram/TrigramCalculator.d.ts.map +1 -1
  613. package/lib/systems/trigram/TrigramCalculator.js +0 -1
  614. package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
  615. package/lib/systems/trigram/types.d.ts +0 -4
  616. package/lib/systems/trigram/types.d.ts.map +1 -1
  617. package/lib/systems/trigram/types.js +0 -2
  618. package/lib/systems/trigram/types.js.map +1 -1
  619. package/lib/systems/types.d.ts +7 -2
  620. package/lib/systems/types.d.ts.map +1 -1
  621. package/lib/systems/types.js.map +1 -1
  622. package/lib/systems/vitalpoint/DamageCalculator.d.ts +0 -3
  623. package/lib/systems/vitalpoint/DamageCalculator.d.ts.map +1 -1
  624. package/lib/systems/vitalpoint/DamageCalculator.js +0 -3
  625. package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
  626. package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts +0 -8
  627. package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts.map +1 -1
  628. package/lib/systems/vitalpoint/KoreanVitalPoints.js +0 -8
  629. package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
  630. package/lib/systems/vitalpoint/VitalPointsData.d.ts +0 -3
  631. package/lib/systems/vitalpoint/VitalPointsData.d.ts.map +1 -1
  632. package/lib/systems/vitalpoint/VitalPointsData.js +0 -1
  633. package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
  634. package/lib/types/PhysicsTypes.d.ts +21 -78
  635. package/lib/types/PhysicsTypes.d.ts.map +1 -1
  636. package/lib/types/PhysicsTypes.js +17 -63
  637. package/lib/types/PhysicsTypes.js.map +1 -1
  638. package/lib/types/clothing.d.ts +0 -9
  639. package/lib/types/clothing.d.ts.map +1 -1
  640. package/lib/types/constants/animations.d.ts +35 -1
  641. package/lib/types/constants/animations.d.ts.map +1 -1
  642. package/lib/types/constants/animations.js +12 -1
  643. package/lib/types/constants/animations.js.map +1 -1
  644. package/lib/types/constants/colors.d.ts +28 -2
  645. package/lib/types/constants/colors.d.ts.map +1 -1
  646. package/lib/types/constants/colors.js +30 -4
  647. package/lib/types/constants/colors.js.map +1 -1
  648. package/lib/types/constants/index.d.ts +5 -1
  649. package/lib/types/constants/index.d.ts.map +1 -1
  650. package/lib/types/constants/index.js.map +1 -1
  651. package/lib/types/constants/performance.d.ts +0 -2
  652. package/lib/types/constants/performance.d.ts.map +1 -1
  653. package/lib/types/constants/performance.js +0 -2
  654. package/lib/types/constants/performance.js.map +1 -1
  655. package/lib/types/constants/typography.d.ts +40 -2
  656. package/lib/types/constants/typography.d.ts.map +1 -1
  657. package/lib/types/constants/typography.js +40 -2
  658. package/lib/types/constants/typography.js.map +1 -1
  659. package/lib/types/constants/ui.d.ts +89 -1
  660. package/lib/types/constants/ui.d.ts.map +1 -1
  661. package/lib/types/constants/ui.js +33 -1
  662. package/lib/types/constants/ui.js.map +1 -1
  663. package/lib/types/facial.d.ts +0 -15
  664. package/lib/types/facial.d.ts.map +1 -1
  665. package/lib/types/facial.js +0 -8
  666. package/lib/types/facial.js.map +1 -1
  667. package/lib/types/hand-animation.d.ts +34 -147
  668. package/lib/types/hand-animation.d.ts.map +1 -1
  669. package/lib/types/hand-animation.js +0 -2
  670. package/lib/types/hand-animation.js.map +1 -1
  671. package/lib/types/injury.d.ts +0 -2
  672. package/lib/types/injury.d.ts.map +1 -1
  673. package/lib/types/injury.js +0 -1
  674. package/lib/types/injury.js.map +1 -1
  675. package/lib/types/physics.d.ts +0 -21
  676. package/lib/types/physics.d.ts.map +1 -1
  677. package/lib/types/physics.js +0 -6
  678. package/lib/types/physics.js.map +1 -1
  679. package/lib/types/physicsConstants.d.ts +0 -12
  680. package/lib/types/physicsConstants.d.ts.map +1 -1
  681. package/lib/types/physicsConstants.js +0 -12
  682. package/lib/types/physicsConstants.js.map +1 -1
  683. package/lib/types/player-visual.d.ts +45 -189
  684. package/lib/types/player-visual.d.ts.map +1 -1
  685. package/lib/types/technique.d.ts +1 -5
  686. package/lib/types/technique.d.ts.map +1 -1
  687. package/lib/types/techniqueId.d.ts +0 -1
  688. package/lib/types/techniqueId.d.ts.map +1 -1
  689. package/lib/types/techniqueId.js +0 -1
  690. package/lib/types/techniqueId.js.map +1 -1
  691. package/lib/utils/arenaWorldDimensions.d.ts +0 -11
  692. package/lib/utils/arenaWorldDimensions.d.ts.map +1 -1
  693. package/lib/utils/arenaWorldDimensions.js +0 -6
  694. package/lib/utils/arenaWorldDimensions.js.map +1 -1
  695. package/lib/utils/controlMapping.d.ts +3 -4
  696. package/lib/utils/controlMapping.d.ts.map +1 -1
  697. package/lib/utils/controlMapping.js +1 -2
  698. package/lib/utils/controlMapping.js.map +1 -1
  699. package/lib/utils/deviceDetection.d.ts +0 -5
  700. package/lib/utils/deviceDetection.d.ts.map +1 -1
  701. package/lib/utils/deviceDetection.js +0 -5
  702. package/lib/utils/deviceDetection.js.map +1 -1
  703. package/lib/utils/hapticFeedback.d.ts +23 -95
  704. package/lib/utils/hapticFeedback.d.ts.map +1 -1
  705. package/lib/utils/hapticFeedback.js +9 -39
  706. package/lib/utils/hapticFeedback.js.map +1 -1
  707. package/lib/utils/haptics.d.ts +0 -3
  708. package/lib/utils/haptics.d.ts.map +1 -1
  709. package/lib/utils/haptics.js +0 -1
  710. package/lib/utils/haptics.js.map +1 -1
  711. package/lib/utils/math.d.ts +0 -3
  712. package/lib/utils/math.d.ts.map +1 -1
  713. package/lib/utils/math.js +0 -2
  714. package/lib/utils/math.js.map +1 -1
  715. package/lib/utils/mobileLayoutHelpers.d.ts +0 -3
  716. package/lib/utils/mobileLayoutHelpers.d.ts.map +1 -1
  717. package/lib/utils/mobileLayoutHelpers.js +0 -1
  718. package/lib/utils/mobileLayoutHelpers.js.map +1 -1
  719. package/lib/utils/mobileUIUtils.d.ts +5 -100
  720. package/lib/utils/mobileUIUtils.d.ts.map +1 -1
  721. package/lib/utils/mobileUIUtils.js +0 -9
  722. package/lib/utils/mobileUIUtils.js.map +1 -1
  723. package/lib/utils/physicalAttributeValidation.d.ts.map +1 -1
  724. package/lib/utils/player3DHelpers.d.ts.map +1 -1
  725. package/lib/utils/player3DHelpers.js.map +1 -1
  726. package/lib/utils/responsiveLayoutHelpers.d.ts +0 -65
  727. package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
  728. package/lib/utils/responsiveLayoutHelpers.js +0 -65
  729. package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
  730. package/lib/utils/responsiveOrientationConstants.d.ts +0 -7
  731. package/lib/utils/responsiveOrientationConstants.d.ts.map +1 -1
  732. package/lib/utils/responsiveOrientationConstants.js +0 -7
  733. package/lib/utils/responsiveOrientationConstants.js.map +1 -1
  734. package/lib/utils/safeAreaUtils.d.ts +0 -6
  735. package/lib/utils/safeAreaUtils.d.ts.map +1 -1
  736. package/lib/utils/safeAreaUtils.js +0 -2
  737. package/lib/utils/safeAreaUtils.js.map +1 -1
  738. package/lib/utils/sharedPhysicsConfig.d.ts +0 -4
  739. package/lib/utils/sharedPhysicsConfig.d.ts.map +1 -1
  740. package/lib/utils/sharedPhysicsConfig.js +0 -2
  741. package/lib/utils/sharedPhysicsConfig.js.map +1 -1
  742. package/lib/utils/skeletonScaling.d.ts +0 -9
  743. package/lib/utils/skeletonScaling.d.ts.map +1 -1
  744. package/lib/utils/skeletonScaling.js +0 -1
  745. package/lib/utils/skeletonScaling.js.map +1 -1
  746. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"SkeletonRig.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/builders/SkeletonRig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EACV,IAAI,EACJ,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,QAAQ,IAAI,GAAG,IAAI,EACnB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAClC,eAAY,KACX,IAuBF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,QAAO,WAyIpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,kBAAkB,KAC7B,WAoOF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAoF9C,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,EAyElC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,IAAI,EACV,YAAY,eAAe,KAC1B,IAkBF,CAAC;AAOF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,KAAG,KAAK,CAAC,OA0BvD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,KAAG,KAAK,CAAC,KAsBvD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,IAAI,KAAG,IAIhD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,WAAW,KAAG,IAIrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,IAAI,EACd,MAAM,MAAM,GAAG,OAAO,KACrB,GAAG,CAAC,MAAM,EAAE,IAAI,CAiMlB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,GACrC,mBAAkB,OAAe,KAChC,WAkCF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;CAEK,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,KAAK,CAAC,OAAO,EAC9B,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAC/B,kBAAkB,EAAE,KAAK,CAAC,OAAO,EACjC,WAAW,EAAE,MAAM,GAClB,MAAM,CA0BR;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAC1C,MAAM,CAeR"}
1
+ {"version":3,"file":"SkeletonRig.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/builders/SkeletonRig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EACV,IAAI,EACJ,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,QAAQ,IAAI,GAAG,IAAI,EACnB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAClC,eAAY,KACX,IAuBF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,QAAO,WAyIpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,kBAAkB,KAC7B,WAoOF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAoF9C,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,EAyElC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,IAAI,EACV,YAAY,eAAe,KAC1B,IAkBF,CAAC;AAOF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,KAAG,KAAK,CAAC,OA0BvD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,KAAG,KAAK,CAAC,KAsBvD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,IAAI,KAAG,IAIhD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,WAAW,KAAG,IAIrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,IAAI,EACd,MAAM,MAAM,GAAG,OAAO,KACrB,GAAG,CAAC,MAAM,EAAE,IAAI,CAiMlB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,GACrC,mBAAkB,OAAe,KAChC,WAkCF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;IAGH;;;;;OAKG;;CAEK,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,KAAK,CAAC,OAAO,EAC9B,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAC/B,kBAAkB,EAAE,KAAK,CAAC,OAAO,EACjC,WAAW,EAAE,MAAM,GAClB,MAAM,CA0BR;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAC1C,MAAM,CAeR"}
@@ -89,7 +89,6 @@ var createBone = (name, parent, position, length = .1) => {
89
89
  * // Height: 188cm, Legs: 100cm, Arms: 84cm, Shoulders: 54cm (25% wider!)
90
90
  * ```
91
91
  *
92
- * @public
93
92
  * @korean 크기조정된인간형골격생성
94
93
  */
95
94
  var createScaledHumanoidRig = (attributes) => {
@@ -287,7 +286,6 @@ new THREE.Vector3();
287
286
  * - 허리회전 (Heorhwoejeon) - Torso rotation
288
287
  * - 해부학적제약 (Haebuhakjeok Jeyak) - Anatomical constraints
289
288
  *
290
- * @public
291
289
  * @korean 허리회전제약조건
292
290
  */
293
291
  var TORSO_CONSTRAINTS = {
@@ -342,7 +340,6 @@ var TORSO_CONSTRAINTS = {
342
340
  * // Returns 1.05 (5% damage bonus)
343
341
  * ```
344
342
  *
345
- * @public
346
343
  * @korean 허리회전으로인한데미지배율계산
347
344
  */
348
345
  function calculateHipRotationPowerModifier(hipRotationAngle, techniqueType) {
@@ -1 +1 @@
1
- {"version":3,"file":"SkeletonRig.js","names":[],"sources":["../../../../src/systems/animation/builders/SkeletonRig.ts"],"sourcesContent":["/**\n * Skeleton rig implementation for articulated body model\n *\n * Creates and manages humanoid skeletal rig with 28 bones for realistic\n * martial arts animations. Implements bone hierarchy following Korean martial\n * arts body mechanics.\n *\n * Now supports dynamic scaling based on player physical attributes for\n * anatomically accurate body proportions per archetype.\n *\n * @module systems/animation/SkeletonRig\n * @category Animation System\n * @korean 골격시스템\n */\n\nimport { PhysicalAttributes } from \"@/types/common\";\nimport type {\n Bone,\n BoneChain,\n JointConstraint,\n SkeletalRig,\n} from \"@/types/skeletal\";\nimport { BoneName } from \"@/types/skeletal\";\nimport {\n calculateSkeletonDimensions,\n cmToMeters,\n} from \"@/utils/characterScaling\";\nimport * as THREE from \"three\";\n\n/**\n * Create a bone with default rest pose\n *\n * Helper function to create a bone with position, rotation, and scale.\n * Sets up rest pose for animation blending.\n *\n * @param name - Unique bone identifier\n * @param parent - Parent bone (null for root)\n * @param position - Local position relative to parent [x, y, z]\n * @param length - Bone length for rendering\n * @returns Newly created bone\n *\n * @korean 뼈생성\n */\nexport const createBone = (\n name: string,\n parent: Bone | null,\n position: [number, number, number],\n length = 0.1,\n): Bone => {\n const pos = new THREE.Vector3(position[0], position[1], position[2]);\n const rot = new THREE.Euler(0, 0, 0);\n const scale = new THREE.Vector3(1, 1, 1);\n\n const bone: Bone = {\n name,\n parent,\n position: pos.clone(),\n rotation: rot.clone(),\n scale: scale.clone(),\n children: [],\n length,\n restPosition: pos.clone(),\n restRotation: rot.clone(),\n };\n\n // Add to parent's children\n if (parent) {\n parent.children.push(bone);\n }\n\n return bone;\n};\n\n/**\n * Create complete humanoid skeletal rig\n *\n * Creates 28-bone humanoid skeleton following Korean martial arts anatomy:\n * - 1 root (pelvis)\n * - 3 spine bones\n * - 2 head bones (neck, head)\n * - 12 arm bones (6 per arm)\n * - 10 leg bones (5 per leg)\n *\n * Total: 28 bones (under 30 bone limit for 60fps performance)\n *\n * @returns Complete skeletal rig with bone hierarchy\n *\n * @example\n * ```typescript\n * const rig = createHumanoidRig();\n * const rightHand = rig.bones.get(BoneName.HAND_R);\n * console.log(`Hand position: ${rightHand?.position}`);\n * ```\n *\n * @korean 인간형골격생성\n */\nexport const createHumanoidRig = (): SkeletalRig => {\n // Root (pelvis) - center of mass at hip height\n // Pelvis height = sum of leg segments (hip + thigh + knee + shin + foot)\n // = 0.1 + 0.3 + 0.3 + 0.3 + 0.1 = 1.1 to have feet at Y=0\n const root = createBone(BoneName.PELVIS, null, [0, 1.1, 0], 0.15);\n\n // Spine chain (3 bones)\n const spine1 = createBone(BoneName.SPINE_LOWER, root, [0, 0.15, 0], 0.2);\n const spine2 = createBone(BoneName.SPINE_MIDDLE, spine1, [0, 0.2, 0], 0.2);\n const spine3 = createBone(BoneName.SPINE_UPPER, spine2, [0, 0.2, 0], 0.2);\n\n // Head chain (2 bones)\n const neck = createBone(BoneName.NECK, spine3, [0, 0.15, 0], 0.1);\n const head = createBone(BoneName.HEAD, neck, [0, 0.2, 0], 0.2);\n\n // Left arm chain (6 bones)\n const leftShoulder = createBone(\n BoneName.SHOULDER_L,\n spine3,\n [-0.15, 0.1, 0],\n 0.1,\n );\n const leftUpperArm = createBone(\n BoneName.UPPER_ARM_L,\n leftShoulder,\n [-0.15, 0, 0],\n 0.25,\n );\n const leftElbow = createBone(\n BoneName.ELBOW_L,\n leftUpperArm,\n [-0.25, 0, 0],\n 0.05,\n );\n const leftForearm = createBone(\n BoneName.FOREARM_L,\n leftElbow,\n [-0.25, 0, 0],\n 0.25,\n );\n const leftWrist = createBone(\n BoneName.WRIST_L,\n leftForearm,\n [-0.15, 0, 0],\n 0.05,\n );\n const leftHand = createBone(BoneName.HAND_L, leftWrist, [-0.08, 0, 0], 0.08);\n\n // Right arm chain (6 bones - mirror of left)\n const rightShoulder = createBone(\n BoneName.SHOULDER_R,\n spine3,\n [0.15, 0.1, 0],\n 0.1,\n );\n const rightUpperArm = createBone(\n BoneName.UPPER_ARM_R,\n rightShoulder,\n [0.15, 0, 0],\n 0.25,\n );\n const rightElbow = createBone(\n BoneName.ELBOW_R,\n rightUpperArm,\n [0.25, 0, 0],\n 0.05,\n );\n const rightForearm = createBone(\n BoneName.FOREARM_R,\n rightElbow,\n [0.25, 0, 0],\n 0.25,\n );\n const rightWrist = createBone(\n BoneName.WRIST_R,\n rightForearm,\n [0.15, 0, 0],\n 0.05,\n );\n const rightHand = createBone(BoneName.HAND_R, rightWrist, [0.08, 0, 0], 0.08);\n\n // Left leg chain (5 bones)\n const leftHip = createBone(BoneName.HIP_L, root, [-0.1, -0.1, 0], 0.1);\n const leftThigh = createBone(BoneName.THIGH_L, leftHip, [0, -0.3, 0], 0.3);\n const leftKnee = createBone(BoneName.KNEE_L, leftThigh, [0, -0.3, 0], 0.05);\n const leftShin = createBone(BoneName.SHIN_L, leftKnee, [0, -0.3, 0], 0.3);\n const leftFoot = createBone(BoneName.FOOT_L, leftShin, [0, -0.1, 0.1], 0.15);\n\n // Right leg chain (5 bones - mirror of left)\n const rightHip = createBone(BoneName.HIP_R, root, [0.1, -0.1, 0], 0.1);\n const rightThigh = createBone(BoneName.THIGH_R, rightHip, [0, -0.3, 0], 0.3);\n const rightKnee = createBone(BoneName.KNEE_R, rightThigh, [0, -0.3, 0], 0.05);\n const rightShin = createBone(BoneName.SHIN_R, rightKnee, [0, -0.3, 0], 0.3);\n const rightFoot = createBone(\n BoneName.FOOT_R,\n rightShin,\n [0, -0.1, 0.1],\n 0.15,\n );\n\n // Create bone map for fast lookup\n const bones = new Map<string, Bone>([\n [BoneName.PELVIS, root],\n [BoneName.SPINE_LOWER, spine1],\n [BoneName.SPINE_MIDDLE, spine2],\n [BoneName.SPINE_UPPER, spine3],\n [BoneName.NECK, neck],\n [BoneName.HEAD, head],\n [BoneName.SHOULDER_L, leftShoulder],\n [BoneName.UPPER_ARM_L, leftUpperArm],\n [BoneName.ELBOW_L, leftElbow],\n [BoneName.FOREARM_L, leftForearm],\n [BoneName.WRIST_L, leftWrist],\n [BoneName.HAND_L, leftHand],\n [BoneName.SHOULDER_R, rightShoulder],\n [BoneName.UPPER_ARM_R, rightUpperArm],\n [BoneName.ELBOW_R, rightElbow],\n [BoneName.FOREARM_R, rightForearm],\n [BoneName.WRIST_R, rightWrist],\n [BoneName.HAND_R, rightHand],\n [BoneName.HIP_L, leftHip],\n [BoneName.THIGH_L, leftThigh],\n [BoneName.KNEE_L, leftKnee],\n [BoneName.SHIN_L, leftShin],\n [BoneName.FOOT_L, leftFoot],\n [BoneName.HIP_R, rightHip],\n [BoneName.THIGH_R, rightThigh],\n [BoneName.KNEE_R, rightKnee],\n [BoneName.SHIN_R, rightShin],\n [BoneName.FOOT_R, rightFoot],\n ]);\n\n return {\n root,\n bones,\n boneCount: bones.size,\n };\n};\n\n/**\n * Create humanoid rig with dynamic scaling based on physical attributes.\n *\n * **Korean**: 신체 속성 기반 골격 생성 (Physical Attributes-Based Skeleton Creation)\n *\n * Creates a 28-bone humanoid skeleton with bone lengths scaled according to\n * the fighter's physical attributes. This allows each archetype to have\n * anatomically accurate body proportions that affect combat hitboxes, vital\n * point positioning, and visual representation.\n *\n * ## Visual Amplification\n *\n * The scaling system applies amplification factors to create distinct visual\n * silhouettes while maintaining anatomical realism:\n *\n * - **2.5x limb amplification**: Makes reach differences clearly visible\n * - **1.15x shoulder amplification**: Creates recognizable body width differences\n * - **1.5x height amplification**: Subtle overall size differences\n *\n * ### Archetype Silhouettes Created\n *\n * The following table shows the effective shoulder span after amplification\n * (full span = offset * 2). Values show raw attribute → amplified visual span.\n *\n * | Archetype | Shoulders (Raw → Amplified Span) | Height | Silhouette |\n * |-----------|----------------------------------|--------|------------|\n * | Hacker | 43cm → 49.5cm | 175cm | Compact, narrow |\n * | Amsalja | 44cm → 50.6cm | 186cm | Tall, lean |\n * | Jeongbo | 45cm → 51.8cm | 179cm | Balanced |\n * | Musa | 46cm → 52.9cm | 180cm | Athletic |\n * | Jojik | 54cm → 62.1cm | 188cm | Massive, wide |\n *\n * Note: Amplified span = raw width * 1.15 (shoulder amplification factor)\n * Percentage differences remain constant, but absolute gaps are amplified:\n * - Raw gap: Jojik (54cm) - Hacker (43cm) = 11cm\n * - Amplified gap: 62.1cm - 49.5cm = 12.6cm (15% larger absolute difference)\n *\n * @param attributes - Physical attributes to scale the skeleton\n * @returns Complete skeletal rig with scaled bone dimensions\n *\n * @example\n * ```typescript\n * import { AMSALJA_PHYSICAL } from \"@/data/archetypePhysicalAttributes\";\n *\n * // Create skeleton for lean assassin archetype\n * const amsaljaRig = createScaledHumanoidRig(AMSALJA_PHYSICAL);\n * // Results in taller skeleton with longer limbs, narrower shoulders\n * // Height: 186cm, Legs: 102cm, Arms: 82cm, Shoulders: 44cm\n *\n * // Create skeleton for heavy brawler archetype\n * const jojikRig = createScaledHumanoidRig(JOJIK_PHYSICAL);\n * // Results in stockier skeleton with wider shoulders, thicker torso\n * // Height: 188cm, Legs: 100cm, Arms: 84cm, Shoulders: 54cm (25% wider!)\n * ```\n *\n * @public\n * @korean 크기조정된인간형골격생성\n */\nexport const createScaledHumanoidRig = (\n attributes: PhysicalAttributes,\n): SkeletalRig => {\n // Calculate anatomically correct bone dimensions in meters\n const dims = calculateSkeletonDimensions(attributes);\n\n // Calculate shoulder offset (half of shoulder width) in meters\n const shoulderOffsetMeters = cmToMeters(attributes.shoulderWidth) / 2;\n const hipOffsetMeters = cmToMeters(attributes.shoulderWidth) * 0.35; // Hips are ~70% of shoulder width\n\n // Root (pelvis) - position at pelvis height (ground + leg length + foot)\n // This ensures feet are at Y=0\n const root = createBone(\n BoneName.PELVIS,\n null,\n [0, dims.pelvisHeight, 0],\n dims.hip,\n );\n\n // Spine chain (3 bones) - using actual torso segment lengths\n const spine1 = createBone(\n BoneName.SPINE_LOWER,\n root,\n [0, dims.spineLower * 0.5, 0], // Start half a segment up from pelvis\n dims.spineLower,\n );\n const spine2 = createBone(\n BoneName.SPINE_MIDDLE,\n spine1,\n [0, dims.spineMiddle, 0],\n dims.spineMiddle,\n );\n const spine3 = createBone(\n BoneName.SPINE_UPPER,\n spine2,\n [0, dims.spineUpper, 0],\n dims.spineUpper,\n );\n\n // Head chain (2 bones) - using actual neck and head sizes\n const neck = createBone(\n BoneName.NECK,\n spine3,\n [0, dims.neck * 0.5, 0], // Start from top of spine\n dims.neck,\n );\n const head = createBone(\n BoneName.HEAD,\n neck,\n [0, dims.head * 0.75, 0], // Head center offset\n dims.head,\n );\n\n // Left arm chain (6 bones) - using actual arm segment lengths\n const leftShoulder = createBone(\n BoneName.SHOULDER_L,\n spine3,\n [-shoulderOffsetMeters * 0.7, dims.neck * 0.3, 0], // Shoulder starts inward from edge\n dims.shoulder,\n );\n const leftUpperArm = createBone(\n BoneName.UPPER_ARM_L,\n leftShoulder,\n [-dims.shoulder, 0, 0], // Extend outward by shoulder length\n dims.upperArm,\n );\n const leftElbow = createBone(\n BoneName.ELBOW_L,\n leftUpperArm,\n [-dims.upperArm, 0, 0], // End of upper arm\n dims.elbow,\n );\n const leftForearm = createBone(\n BoneName.FOREARM_L,\n leftElbow,\n [-dims.elbow, 0, 0], // Past elbow joint\n dims.forearm,\n );\n const leftWrist = createBone(\n BoneName.WRIST_L,\n leftForearm,\n [-dims.forearm, 0, 0], // End of forearm\n dims.wrist,\n );\n const leftHand = createBone(\n BoneName.HAND_L,\n leftWrist,\n [-dims.wrist, 0, 0], // Past wrist\n dims.hand,\n );\n\n // Right arm chain (6 bones - mirror of left)\n const rightShoulder = createBone(\n BoneName.SHOULDER_R,\n spine3,\n [shoulderOffsetMeters * 0.7, dims.neck * 0.3, 0],\n dims.shoulder,\n );\n const rightUpperArm = createBone(\n BoneName.UPPER_ARM_R,\n rightShoulder,\n [dims.shoulder, 0, 0],\n dims.upperArm,\n );\n const rightElbow = createBone(\n BoneName.ELBOW_R,\n rightUpperArm,\n [dims.upperArm, 0, 0],\n dims.elbow,\n );\n const rightForearm = createBone(\n BoneName.FOREARM_R,\n rightElbow,\n [dims.elbow, 0, 0],\n dims.forearm,\n );\n const rightWrist = createBone(\n BoneName.WRIST_R,\n rightForearm,\n [dims.forearm, 0, 0],\n dims.wrist,\n );\n const rightHand = createBone(\n BoneName.HAND_R,\n rightWrist,\n [dims.wrist, 0, 0],\n dims.hand,\n );\n\n // Left leg chain (5 bones) - using actual leg segment lengths\n const leftHip = createBone(\n BoneName.HIP_L,\n root,\n [-hipOffsetMeters, -dims.hip * 0.5, 0],\n dims.hip,\n );\n const leftThigh = createBone(\n BoneName.THIGH_L,\n leftHip,\n [0, -dims.hip, 0], // Drop down from hip\n dims.thigh,\n );\n const leftKnee = createBone(\n BoneName.KNEE_L,\n leftThigh,\n [0, -dims.thigh, 0], // End of thigh\n dims.knee,\n );\n const leftShin = createBone(\n BoneName.SHIN_L,\n leftKnee,\n [0, -dims.knee, 0], // Past knee\n dims.shin,\n );\n const leftFoot = createBone(\n BoneName.FOOT_L,\n leftShin,\n [0, -dims.shin, dims.foot * 0.5], // End of shin, slight forward for foot\n dims.foot,\n );\n\n // Right leg chain (5 bones - mirror of left)\n const rightHip = createBone(\n BoneName.HIP_R,\n root,\n [hipOffsetMeters, -dims.hip * 0.5, 0],\n dims.hip,\n );\n const rightThigh = createBone(\n BoneName.THIGH_R,\n rightHip,\n [0, -dims.hip, 0],\n dims.thigh,\n );\n const rightKnee = createBone(\n BoneName.KNEE_R,\n rightThigh,\n [0, -dims.thigh, 0],\n dims.knee,\n );\n const rightShin = createBone(\n BoneName.SHIN_R,\n rightKnee,\n [0, -dims.knee, 0],\n dims.shin,\n );\n const rightFoot = createBone(\n BoneName.FOOT_R,\n rightShin,\n [0, -dims.shin, dims.foot * 0.5],\n dims.foot,\n );\n\n // Create bone map for fast lookup\n const bones = new Map<string, Bone>([\n [BoneName.PELVIS, root],\n [BoneName.SPINE_LOWER, spine1],\n [BoneName.SPINE_MIDDLE, spine2],\n [BoneName.SPINE_UPPER, spine3],\n [BoneName.NECK, neck],\n [BoneName.HEAD, head],\n [BoneName.SHOULDER_L, leftShoulder],\n [BoneName.UPPER_ARM_L, leftUpperArm],\n [BoneName.ELBOW_L, leftElbow],\n [BoneName.FOREARM_L, leftForearm],\n [BoneName.WRIST_L, leftWrist],\n [BoneName.HAND_L, leftHand],\n [BoneName.SHOULDER_R, rightShoulder],\n [BoneName.UPPER_ARM_R, rightUpperArm],\n [BoneName.ELBOW_R, rightElbow],\n [BoneName.FOREARM_R, rightForearm],\n [BoneName.WRIST_R, rightWrist],\n [BoneName.HAND_R, rightHand],\n [BoneName.HIP_L, leftHip],\n [BoneName.THIGH_L, leftThigh],\n [BoneName.KNEE_L, leftKnee],\n [BoneName.SHIN_L, leftShin],\n [BoneName.FOOT_L, leftFoot],\n [BoneName.HIP_R, rightHip],\n [BoneName.THIGH_R, rightThigh],\n [BoneName.KNEE_R, rightKnee],\n [BoneName.SHIN_R, rightShin],\n [BoneName.FOOT_R, rightFoot],\n ]);\n\n return {\n root,\n bones,\n boneCount: bones.size,\n };\n};\n\n/**\n * Joint constraints for anatomically correct movement\n *\n * Defines rotation limits for each joint to prevent unrealistic poses.\n * Based on human anatomy and Korean martial arts biomechanics.\n *\n * @korean 관절제약조건들\n */\nexport const JOINT_CONSTRAINTS: JointConstraint[] = [\n // Elbow joints - can only bend one direction\n {\n boneName: BoneName.ELBOW_L,\n minRotation: new THREE.Vector3(0, 0, -2.4), // ~-137 degrees\n maxRotation: new THREE.Vector3(0, 0, 0),\n canTwist: false,\n },\n {\n boneName: BoneName.ELBOW_R,\n minRotation: new THREE.Vector3(0, 0, 0),\n maxRotation: new THREE.Vector3(0, 0, 2.4), // ~137 degrees\n canTwist: false,\n },\n\n // Knee joints - can only bend backward\n {\n boneName: BoneName.KNEE_L,\n minRotation: new THREE.Vector3(-2.4, 0, 0), // ~-137 degrees\n maxRotation: new THREE.Vector3(0, 0, 0),\n canTwist: false,\n },\n {\n boneName: BoneName.KNEE_R,\n minRotation: new THREE.Vector3(-2.4, 0, 0), // ~-137 degrees\n maxRotation: new THREE.Vector3(0, 0, 0),\n canTwist: false,\n },\n\n // Shoulder joints - full range of motion\n {\n boneName: BoneName.SHOULDER_L,\n minRotation: new THREE.Vector3(-1.5, -1.5, -3.0),\n maxRotation: new THREE.Vector3(1.5, 1.5, 3.0),\n canTwist: true,\n },\n {\n boneName: BoneName.SHOULDER_R,\n minRotation: new THREE.Vector3(-1.5, -1.5, -3.0),\n maxRotation: new THREE.Vector3(1.5, 1.5, 3.0),\n canTwist: true,\n },\n\n // Hip joints - large range for kicks\n {\n boneName: BoneName.HIP_L,\n minRotation: new THREE.Vector3(-1.8, -0.8, -1.5),\n maxRotation: new THREE.Vector3(1.8, 0.8, 1.5),\n canTwist: true,\n },\n {\n boneName: BoneName.HIP_R,\n minRotation: new THREE.Vector3(-1.8, -0.8, -1.5),\n maxRotation: new THREE.Vector3(1.8, 0.8, 1.5),\n canTwist: true,\n },\n\n // Neck - moderate range\n {\n boneName: BoneName.NECK,\n minRotation: new THREE.Vector3(-0.5, -0.8, -0.5),\n maxRotation: new THREE.Vector3(0.5, 0.8, 0.5),\n canTwist: true,\n },\n\n // Spine bones - limited rotation for realism\n {\n boneName: BoneName.SPINE_LOWER,\n minRotation: new THREE.Vector3(-0.3, -0.5, -0.3),\n maxRotation: new THREE.Vector3(0.3, 0.5, 0.3),\n canTwist: true,\n },\n {\n boneName: BoneName.SPINE_MIDDLE,\n minRotation: new THREE.Vector3(-0.3, -0.5, -0.3),\n maxRotation: new THREE.Vector3(0.3, 0.5, 0.3),\n canTwist: true,\n },\n {\n boneName: BoneName.SPINE_UPPER,\n minRotation: new THREE.Vector3(-0.3, -0.5, -0.3),\n maxRotation: new THREE.Vector3(0.3, 0.5, 0.3),\n canTwist: true,\n },\n];\n\n/**\n * Bone chains for IK (Inverse Kinematics)\n *\n * Defines logical bone chains for limbs, used for IK solving\n * and animation retargeting.\n *\n * @korean 뼈체인들\n */\nexport const BONE_CHAINS: BoneChain[] = [\n // Left arm chain\n {\n name: \"left_arm\",\n startBone: BoneName.SHOULDER_L,\n endBone: BoneName.HAND_L,\n bones: [\n BoneName.SHOULDER_L,\n BoneName.UPPER_ARM_L,\n BoneName.ELBOW_L,\n BoneName.FOREARM_L,\n BoneName.WRIST_L,\n BoneName.HAND_L,\n ],\n },\n\n // Right arm chain\n {\n name: \"right_arm\",\n startBone: BoneName.SHOULDER_R,\n endBone: BoneName.HAND_R,\n bones: [\n BoneName.SHOULDER_R,\n BoneName.UPPER_ARM_R,\n BoneName.ELBOW_R,\n BoneName.FOREARM_R,\n BoneName.WRIST_R,\n BoneName.HAND_R,\n ],\n },\n\n // Left leg chain\n {\n name: \"left_leg\",\n startBone: BoneName.HIP_L,\n endBone: BoneName.FOOT_L,\n bones: [\n BoneName.HIP_L,\n BoneName.THIGH_L,\n BoneName.KNEE_L,\n BoneName.SHIN_L,\n BoneName.FOOT_L,\n ],\n },\n\n // Right leg chain\n {\n name: \"right_leg\",\n startBone: BoneName.HIP_R,\n endBone: BoneName.FOOT_R,\n bones: [\n BoneName.HIP_R,\n BoneName.THIGH_R,\n BoneName.KNEE_R,\n BoneName.SHIN_R,\n BoneName.FOOT_R,\n ],\n },\n\n // Spine chain\n {\n name: \"spine\",\n startBone: BoneName.PELVIS,\n endBone: BoneName.HEAD,\n bones: [\n BoneName.PELVIS,\n BoneName.SPINE_LOWER,\n BoneName.SPINE_MIDDLE,\n BoneName.SPINE_UPPER,\n BoneName.NECK,\n BoneName.HEAD,\n ],\n },\n];\n\n/**\n * Apply joint constraints to bone rotation\n *\n * Clamps bone rotation to anatomically correct ranges.\n * Prevents unrealistic poses like backward-bending elbows.\n *\n * @param bone - Bone to constrain\n * @param constraints - Joint constraint to apply\n *\n * @korean 관절제약적용\n */\nexport const applyJointConstraint = (\n bone: Bone,\n constraint: JointConstraint,\n): void => {\n // Clamp X rotation\n bone.rotation.x = Math.max(\n constraint.minRotation.x,\n Math.min(constraint.maxRotation.x, bone.rotation.x),\n );\n\n // Clamp Y rotation\n bone.rotation.y = Math.max(\n constraint.minRotation.y,\n Math.min(constraint.maxRotation.y, bone.rotation.y),\n );\n\n // Clamp Z rotation\n bone.rotation.z = Math.max(\n constraint.minRotation.z,\n Math.min(constraint.maxRotation.z, bone.rotation.z),\n );\n};\n\n// Reusable matrix objects for world transform calculations (avoid allocations in useFrame)\nconst tempMatrix = new THREE.Matrix4();\nconst tempQuaternion = new THREE.Quaternion();\nconst tempScale = new THREE.Vector3();\n\n/**\n * Get world position of bone\n *\n * Calculates absolute world position by traversing parent chain.\n * Uses proper matrix multiplication to account for parent rotations.\n *\n * @param bone - Bone to get world position for\n * @returns World position as Vector3\n *\n * @korean 뼈의세계위치구하기\n */\nexport const getBoneWorldPosition = (bone: Bone): THREE.Vector3 => {\n // Build the bone chain from root to this bone\n const boneChain: Bone[] = [];\n let currentBone: Bone | null = bone;\n while (currentBone) {\n boneChain.unshift(currentBone);\n currentBone = currentBone.parent;\n }\n\n // Compose world matrix by multiplying all local transforms\n const worldMatrix = new THREE.Matrix4();\n worldMatrix.identity();\n\n for (const b of boneChain) {\n tempMatrix.compose(\n b.position,\n tempQuaternion.setFromEuler(b.rotation),\n b.scale,\n );\n worldMatrix.multiply(tempMatrix);\n }\n\n // Extract world position from composed matrix\n const worldPos = new THREE.Vector3();\n worldMatrix.decompose(worldPos, tempQuaternion, tempScale);\n return worldPos;\n};\n\n/**\n * Get world rotation of bone\n *\n * Calculates absolute world rotation by traversing parent chain.\n * Uses proper quaternion multiplication for correct rotation composition.\n *\n * @param bone - Bone to get world rotation for\n * @returns World rotation as Euler\n *\n * @korean 뼈의세계회전구하기\n */\nexport const getBoneWorldRotation = (bone: Bone): THREE.Euler => {\n // Build the bone chain from root to this bone\n const boneChain: Bone[] = [];\n let currentBone: Bone | null = bone;\n while (currentBone) {\n boneChain.unshift(currentBone);\n currentBone = currentBone.parent;\n }\n\n // Compose world rotation by multiplying quaternions (proper rotation composition)\n const worldQuat = new THREE.Quaternion();\n worldQuat.identity();\n\n for (const b of boneChain) {\n tempQuaternion.setFromEuler(b.rotation);\n worldQuat.multiply(tempQuaternion);\n }\n\n // Convert back to Euler\n const worldRot = new THREE.Euler();\n worldRot.setFromQuaternion(worldQuat);\n return worldRot;\n};\n\n/**\n * Reset bone to rest pose\n *\n * Resets bone position and rotation to default rest pose.\n * Useful for animation blending and initialization.\n *\n * @param bone - Bone to reset\n *\n * @korean 뼈를기본자세로초기화\n */\nexport const resetBoneToRestPose = (bone: Bone): void => {\n bone.position.copy(bone.restPosition);\n bone.rotation.copy(bone.restRotation);\n bone.scale.set(1, 1, 1);\n};\n\n/**\n * Reset entire rig to rest pose\n *\n * Resets all bones in rig to rest pose.\n *\n * @param rig - Skeletal rig to reset\n *\n * @korean 골격을기본자세로초기화\n */\nexport const resetRigToRestPose = (rig: SkeletalRig): void => {\n rig.bones.forEach((bone) => {\n resetBoneToRestPose(bone);\n });\n};\n\n/**\n * Create hand bones with 5 fingers\n *\n * Creates detailed hand structure with 5 fingers (thumb, index, middle, ring, pinky),\n * attached to an existing hand/palm bone.\n * Each finger has 3-4 bones for realistic animation.\n *\n * Finger bone structure:\n * - Thumb: 3 bones (metacarpal, proximal, distal) - no intermediate\n * - Other fingers: 4 bones (metacarpal, proximal, intermediate, distal)\n *\n * Total created by this function: 19 finger bones per hand (3 thumb + 4*4 other fingers),\n * all attached to the provided hand bone.\n *\n * @param handBone - Parent hand bone (acts as the palm/root for finger bones)\n * @param side - Hand side (\"left\" or \"right\")\n * @returns Map of finger bones added to the rig\n *\n * @korean 손뼈생성\n */\nexport const createHandBones = (\n handBone: Bone,\n side: \"left\" | \"right\",\n): Map<string, Bone> => {\n const fingerBones = new Map<string, Bone>();\n\n // Hand orientation: left hand extends to -X, right hand extends to +X\n const sideMultiplier = side === \"left\" ? -1 : 1;\n\n // Thumb (3 bones) - offset slightly toward palm center and forward\n const thumbMeta = createBone(\n `${\n BoneName[`THUMB_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [0.015 * sideMultiplier, 0.02, 0.01],\n 0.025,\n );\n const thumbProx = createBone(\n `${\n BoneName[`THUMB_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n thumbMeta,\n [0.015 * sideMultiplier, 0.015, 0.01],\n 0.02,\n );\n const thumbDist = createBone(\n `${\n BoneName[`THUMB_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n thumbProx,\n [0.01 * sideMultiplier, 0.01, 0],\n 0.015,\n );\n\n fingerBones.set(thumbMeta.name, thumbMeta);\n fingerBones.set(thumbProx.name, thumbProx);\n fingerBones.set(thumbDist.name, thumbDist);\n\n // Index finger (4 bones)\n const indexMeta = createBone(\n `${\n BoneName[`INDEX_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [0.015 * sideMultiplier, 0.06, 0],\n 0.03,\n );\n const indexProx = createBone(\n `${\n BoneName[`INDEX_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n indexMeta,\n [0, 0.025, 0],\n 0.025,\n );\n const indexInter = createBone(\n `${\n BoneName[`INDEX_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n indexProx,\n [0, 0.02, 0],\n 0.02,\n );\n const indexDist = createBone(\n `${\n BoneName[`INDEX_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n indexInter,\n [0, 0.015, 0],\n 0.015,\n );\n\n fingerBones.set(indexMeta.name, indexMeta);\n fingerBones.set(indexProx.name, indexProx);\n fingerBones.set(indexInter.name, indexInter);\n fingerBones.set(indexDist.name, indexDist);\n\n // Middle finger (4 bones) - longest finger\n const middleMeta = createBone(\n `${\n BoneName[`MIDDLE_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [0.005 * sideMultiplier, 0.065, 0],\n 0.035,\n );\n const middleProx = createBone(\n `${\n BoneName[`MIDDLE_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n middleMeta,\n [0, 0.03, 0],\n 0.03,\n );\n const middleInter = createBone(\n `${\n BoneName[`MIDDLE_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n middleProx,\n [0, 0.025, 0],\n 0.025,\n );\n const middleDist = createBone(\n `${\n BoneName[`MIDDLE_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n middleInter,\n [0, 0.02, 0],\n 0.02,\n );\n\n fingerBones.set(middleMeta.name, middleMeta);\n fingerBones.set(middleProx.name, middleProx);\n fingerBones.set(middleInter.name, middleInter);\n fingerBones.set(middleDist.name, middleDist);\n\n // Ring finger (4 bones)\n const ringMeta = createBone(\n `${\n BoneName[`RING_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [-0.005 * sideMultiplier, 0.06, 0],\n 0.03,\n );\n const ringProx = createBone(\n `${\n BoneName[`RING_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n ringMeta,\n [0, 0.025, 0],\n 0.025,\n );\n const ringInter = createBone(\n `${\n BoneName[`RING_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n ringProx,\n [0, 0.02, 0],\n 0.02,\n );\n const ringDist = createBone(\n `${\n BoneName[`RING_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n ringInter,\n [0, 0.015, 0],\n 0.015,\n );\n\n fingerBones.set(ringMeta.name, ringMeta);\n fingerBones.set(ringProx.name, ringProx);\n fingerBones.set(ringInter.name, ringInter);\n fingerBones.set(ringDist.name, ringDist);\n\n // Pinky finger (4 bones) - shortest finger\n const pinkyMeta = createBone(\n `${\n BoneName[`PINKY_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [-0.015 * sideMultiplier, 0.05, 0],\n 0.025,\n );\n const pinkyProx = createBone(\n `${\n BoneName[`PINKY_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n pinkyMeta,\n [0, 0.02, 0],\n 0.02,\n );\n const pinkyInter = createBone(\n `${\n BoneName[`PINKY_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n pinkyProx,\n [0, 0.015, 0],\n 0.015,\n );\n const pinkyDist = createBone(\n `${\n BoneName[`PINKY_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n pinkyInter,\n [0, 0.01, 0],\n 0.01,\n );\n\n fingerBones.set(pinkyMeta.name, pinkyMeta);\n fingerBones.set(pinkyProx.name, pinkyProx);\n fingerBones.set(pinkyInter.name, pinkyInter);\n fingerBones.set(pinkyDist.name, pinkyDist);\n\n return fingerBones;\n};\n\n/**\n * Create humanoid rig with optional hand bones\n *\n * Creates complete skeletal rig with optional detailed hand bones.\n * Hand bones can be excluded for performance (LOD system).\n *\n * @param includeHandBones - Whether to include detailed hand bones (default: false)\n * @returns Complete skeletal rig with or without hand bones\n *\n * @korean 손뼈포함골격생성\n */\nexport const createHumanoidRigWithHands = (\n includeHandBones: boolean = false,\n): SkeletalRig => {\n // Create base rig\n const baseRig = createHumanoidRig();\n\n // If hand bones not requested, return base rig\n if (!includeHandBones) {\n return baseRig;\n }\n\n // Get hand bones from base rig\n const leftHand = baseRig.bones.get(BoneName.HAND_L);\n const rightHand = baseRig.bones.get(BoneName.HAND_R);\n\n if (!leftHand || !rightHand) {\n console.warn(\"Hand bones not found in base rig\");\n return baseRig;\n }\n\n // Create finger bones\n const leftFingerBones = createHandBones(leftHand, \"left\");\n const rightFingerBones = createHandBones(rightHand, \"right\");\n\n // Add finger bones to rig bone map\n leftFingerBones.forEach((bone, name) => {\n baseRig.bones.set(name, bone);\n });\n rightFingerBones.forEach((bone, name) => {\n baseRig.bones.set(name, bone);\n });\n\n return {\n ...baseRig,\n boneCount: baseRig.bones.size,\n };\n};\n\n/**\n * Torso rotation constraints for anatomically correct upper/lower body movement\n *\n * Defines limits and behavior for independent torso rotation relative to hips,\n * enabling realistic strafing and lateral movement while facing opponent.\n *\n * Korean terminology:\n * - 허리회전 (Heorhwoejeon) - Torso rotation\n * - 해부학적제약 (Haebuhakjeok Jeyak) - Anatomical constraints\n *\n * @public\n * @korean 허리회전제약조건\n */\nexport const TORSO_CONSTRAINTS = {\n /**\n * Maximum torso rotation relative to hips (radians)\n * ±90° = π/2 radians - anatomically safe rotation limit\n *\n * @korean 최대회전각도\n */\n MAX_ROTATION: Math.PI / 2,\n\n /**\n * Minimum torso rotation relative to hips (radians)\n * -90° = -π/2 radians\n *\n * @korean 최소회전각도\n */\n MIN_ROTATION: -Math.PI / 2,\n\n /**\n * Target interpolation time in seconds\n * 200ms provides smooth, natural rotation feel\n *\n * @korean 보간시간\n */\n INTERPOLATION_TIME: 0.2,\n\n /**\n * Power modifier range for hip rotation\n * [min, max] = [10%, 30%] damage bonus from proper hip engagement\n *\n * @korean 파워배율범위\n */\n POWER_MODIFIER_RANGE: [0.1, 0.3] as const,\n} as const;\n\n/**\n * Calculate torso rotation to face opponent while moving\n *\n * Determines optimal torso rotation angle to keep upper body facing opponent\n * while hips/legs are oriented in movement direction. Enforces anatomical\n * constraints (±90° max rotation).\n *\n * @param currentPosition - Player's current world position\n * @param opponentPosition - Opponent's current world position\n * @param _movementDirection - Direction of player movement (reserved for future use)\n * @param hipRotation - Current hip/pelvis rotation in radians\n * @returns Torso rotation in radians relative to hips (clamped to ±90°)\n *\n * @example\n * ```typescript\n * const playerPos = new THREE.Vector3(0, 0, 0);\n * const opponentPos = new THREE.Vector3(0, 0, 5); // Directly in front along Z+\n * const moveDir = new THREE.Vector3(0, 0, 1); // Moving forward\n * const hipRot = 0; // Hips facing forward (Z+)\n *\n * const torsoRot = calculateTorsoRotation(playerPos, opponentPos, moveDir, hipRot);\n * // Returns 0 (opponent is already aligned with hips)\n * ```\n *\n * @public\n * @korean 상대를향한허리회전계산\n */\nexport function calculateTorsoRotation(\n currentPosition: THREE.Vector3,\n opponentPosition: THREE.Vector3,\n _movementDirection: THREE.Vector3,\n hipRotation: number,\n): number {\n // Calculate angle to opponent\n const directionToOpponent = opponentPosition\n .clone()\n .sub(currentPosition)\n .normalize();\n // Use atan2(x, z) - X is horizontal, Z is forward/back in Three.js\n const angleToOpponent = Math.atan2(\n directionToOpponent.x,\n directionToOpponent.z,\n );\n\n // Calculate torso rotation relative to hips\n let torsoRotation = angleToOpponent - hipRotation;\n\n // Normalize to -π to π range\n while (torsoRotation > Math.PI) torsoRotation -= 2 * Math.PI;\n while (torsoRotation < -Math.PI) torsoRotation += 2 * Math.PI;\n\n // Apply anatomical constraints (±90°)\n torsoRotation = Math.max(\n TORSO_CONSTRAINTS.MIN_ROTATION,\n Math.min(TORSO_CONSTRAINTS.MAX_ROTATION, torsoRotation),\n );\n\n return torsoRotation;\n}\n\n/**\n * Calculate damage modifier from hip rotation\n *\n * Determines power bonus applied to techniques based on hip rotation angle.\n * Greater hip rotation generates more power through proper biomechanics,\n * with strikes benefiting most from full rotation.\n *\n * @param hipRotationAngle - Hip rotation angle in radians (typically from torso twist)\n * @param techniqueType - Type of technique ('strike', 'throw', or 'joint')\n * @returns Damage multiplier (1.0-1.3 for strikes, 1.0-1.1 for throws/joints)\n *\n * @example\n * ```typescript\n * // Full hip rotation on strike technique\n * const modifier = calculateHipRotationPowerModifier(Math.PI / 2, 'strike');\n * // Returns 1.30 (30% damage bonus)\n *\n * // Half rotation on throw\n * const throwMod = calculateHipRotationPowerModifier(Math.PI / 4, 'throw');\n * // Returns 1.05 (5% damage bonus)\n * ```\n *\n * @public\n * @korean 허리회전으로인한데미지배율계산\n */\nexport function calculateHipRotationPowerModifier(\n hipRotationAngle: number,\n techniqueType: \"strike\" | \"throw\" | \"joint\",\n): number {\n // Normalize rotation to 0-1 range (0 = no rotation, 1 = max rotation)\n // Clamp to max rotation first to handle any values exceeding ±90°\n const clampedAngle = Math.max(\n -TORSO_CONSTRAINTS.MAX_ROTATION,\n Math.min(TORSO_CONSTRAINTS.MAX_ROTATION, Math.abs(hipRotationAngle)),\n );\n const normalizedRotation = clampedAngle / TORSO_CONSTRAINTS.MAX_ROTATION;\n\n // Strikes benefit most from hip rotation (up to 30% bonus)\n // Throws get moderate benefit (up to 10% bonus)\n // Joint locks get minimal benefit (up to 10% bonus)\n const baseModifier = techniqueType === \"strike\" ? 0.3 : 0.1;\n\n return 1.0 + normalizedRotation * baseModifier;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SkeletonRig.js","names":[],"sources":["../../../../src/systems/animation/builders/SkeletonRig.ts"],"sourcesContent":["/**\n * Skeleton rig implementation for articulated body model\n *\n * Creates and manages humanoid skeletal rig with 28 bones for realistic\n * martial arts animations. Implements bone hierarchy following Korean martial\n * arts body mechanics.\n *\n * Now supports dynamic scaling based on player physical attributes for\n * anatomically accurate body proportions per archetype.\n *\n * @module systems/animation/SkeletonRig\n * @category Animation System\n * @korean 골격시스템\n */\n\nimport { PhysicalAttributes } from \"@/types/common\";\nimport type {\n Bone,\n BoneChain,\n JointConstraint,\n SkeletalRig,\n} from \"@/types/skeletal\";\nimport { BoneName } from \"@/types/skeletal\";\nimport {\n calculateSkeletonDimensions,\n cmToMeters,\n} from \"@/utils/characterScaling\";\nimport * as THREE from \"three\";\n\n/**\n * Create a bone with default rest pose\n *\n * Helper function to create a bone with position, rotation, and scale.\n * Sets up rest pose for animation blending.\n *\n * @param name - Unique bone identifier\n * @param parent - Parent bone (null for root)\n * @param position - Local position relative to parent [x, y, z]\n * @param length - Bone length for rendering\n * @returns Newly created bone\n *\n * @korean 뼈생성\n */\nexport const createBone = (\n name: string,\n parent: Bone | null,\n position: [number, number, number],\n length = 0.1,\n): Bone => {\n const pos = new THREE.Vector3(position[0], position[1], position[2]);\n const rot = new THREE.Euler(0, 0, 0);\n const scale = new THREE.Vector3(1, 1, 1);\n\n const bone: Bone = {\n name,\n parent,\n position: pos.clone(),\n rotation: rot.clone(),\n scale: scale.clone(),\n children: [],\n length,\n restPosition: pos.clone(),\n restRotation: rot.clone(),\n };\n\n // Add to parent's children\n if (parent) {\n parent.children.push(bone);\n }\n\n return bone;\n};\n\n/**\n * Create complete humanoid skeletal rig\n *\n * Creates 28-bone humanoid skeleton following Korean martial arts anatomy:\n * - 1 root (pelvis)\n * - 3 spine bones\n * - 2 head bones (neck, head)\n * - 12 arm bones (6 per arm)\n * - 10 leg bones (5 per leg)\n *\n * Total: 28 bones (under 30 bone limit for 60fps performance)\n *\n * @returns Complete skeletal rig with bone hierarchy\n *\n * @example\n * ```typescript\n * const rig = createHumanoidRig();\n * const rightHand = rig.bones.get(BoneName.HAND_R);\n * console.log(`Hand position: ${rightHand?.position}`);\n * ```\n *\n * @korean 인간형골격생성\n */\nexport const createHumanoidRig = (): SkeletalRig => {\n // Root (pelvis) - center of mass at hip height\n // Pelvis height = sum of leg segments (hip + thigh + knee + shin + foot)\n // = 0.1 + 0.3 + 0.3 + 0.3 + 0.1 = 1.1 to have feet at Y=0\n const root = createBone(BoneName.PELVIS, null, [0, 1.1, 0], 0.15);\n\n // Spine chain (3 bones)\n const spine1 = createBone(BoneName.SPINE_LOWER, root, [0, 0.15, 0], 0.2);\n const spine2 = createBone(BoneName.SPINE_MIDDLE, spine1, [0, 0.2, 0], 0.2);\n const spine3 = createBone(BoneName.SPINE_UPPER, spine2, [0, 0.2, 0], 0.2);\n\n // Head chain (2 bones)\n const neck = createBone(BoneName.NECK, spine3, [0, 0.15, 0], 0.1);\n const head = createBone(BoneName.HEAD, neck, [0, 0.2, 0], 0.2);\n\n // Left arm chain (6 bones)\n const leftShoulder = createBone(\n BoneName.SHOULDER_L,\n spine3,\n [-0.15, 0.1, 0],\n 0.1,\n );\n const leftUpperArm = createBone(\n BoneName.UPPER_ARM_L,\n leftShoulder,\n [-0.15, 0, 0],\n 0.25,\n );\n const leftElbow = createBone(\n BoneName.ELBOW_L,\n leftUpperArm,\n [-0.25, 0, 0],\n 0.05,\n );\n const leftForearm = createBone(\n BoneName.FOREARM_L,\n leftElbow,\n [-0.25, 0, 0],\n 0.25,\n );\n const leftWrist = createBone(\n BoneName.WRIST_L,\n leftForearm,\n [-0.15, 0, 0],\n 0.05,\n );\n const leftHand = createBone(BoneName.HAND_L, leftWrist, [-0.08, 0, 0], 0.08);\n\n // Right arm chain (6 bones - mirror of left)\n const rightShoulder = createBone(\n BoneName.SHOULDER_R,\n spine3,\n [0.15, 0.1, 0],\n 0.1,\n );\n const rightUpperArm = createBone(\n BoneName.UPPER_ARM_R,\n rightShoulder,\n [0.15, 0, 0],\n 0.25,\n );\n const rightElbow = createBone(\n BoneName.ELBOW_R,\n rightUpperArm,\n [0.25, 0, 0],\n 0.05,\n );\n const rightForearm = createBone(\n BoneName.FOREARM_R,\n rightElbow,\n [0.25, 0, 0],\n 0.25,\n );\n const rightWrist = createBone(\n BoneName.WRIST_R,\n rightForearm,\n [0.15, 0, 0],\n 0.05,\n );\n const rightHand = createBone(BoneName.HAND_R, rightWrist, [0.08, 0, 0], 0.08);\n\n // Left leg chain (5 bones)\n const leftHip = createBone(BoneName.HIP_L, root, [-0.1, -0.1, 0], 0.1);\n const leftThigh = createBone(BoneName.THIGH_L, leftHip, [0, -0.3, 0], 0.3);\n const leftKnee = createBone(BoneName.KNEE_L, leftThigh, [0, -0.3, 0], 0.05);\n const leftShin = createBone(BoneName.SHIN_L, leftKnee, [0, -0.3, 0], 0.3);\n const leftFoot = createBone(BoneName.FOOT_L, leftShin, [0, -0.1, 0.1], 0.15);\n\n // Right leg chain (5 bones - mirror of left)\n const rightHip = createBone(BoneName.HIP_R, root, [0.1, -0.1, 0], 0.1);\n const rightThigh = createBone(BoneName.THIGH_R, rightHip, [0, -0.3, 0], 0.3);\n const rightKnee = createBone(BoneName.KNEE_R, rightThigh, [0, -0.3, 0], 0.05);\n const rightShin = createBone(BoneName.SHIN_R, rightKnee, [0, -0.3, 0], 0.3);\n const rightFoot = createBone(\n BoneName.FOOT_R,\n rightShin,\n [0, -0.1, 0.1],\n 0.15,\n );\n\n // Create bone map for fast lookup\n const bones = new Map<string, Bone>([\n [BoneName.PELVIS, root],\n [BoneName.SPINE_LOWER, spine1],\n [BoneName.SPINE_MIDDLE, spine2],\n [BoneName.SPINE_UPPER, spine3],\n [BoneName.NECK, neck],\n [BoneName.HEAD, head],\n [BoneName.SHOULDER_L, leftShoulder],\n [BoneName.UPPER_ARM_L, leftUpperArm],\n [BoneName.ELBOW_L, leftElbow],\n [BoneName.FOREARM_L, leftForearm],\n [BoneName.WRIST_L, leftWrist],\n [BoneName.HAND_L, leftHand],\n [BoneName.SHOULDER_R, rightShoulder],\n [BoneName.UPPER_ARM_R, rightUpperArm],\n [BoneName.ELBOW_R, rightElbow],\n [BoneName.FOREARM_R, rightForearm],\n [BoneName.WRIST_R, rightWrist],\n [BoneName.HAND_R, rightHand],\n [BoneName.HIP_L, leftHip],\n [BoneName.THIGH_L, leftThigh],\n [BoneName.KNEE_L, leftKnee],\n [BoneName.SHIN_L, leftShin],\n [BoneName.FOOT_L, leftFoot],\n [BoneName.HIP_R, rightHip],\n [BoneName.THIGH_R, rightThigh],\n [BoneName.KNEE_R, rightKnee],\n [BoneName.SHIN_R, rightShin],\n [BoneName.FOOT_R, rightFoot],\n ]);\n\n return {\n root,\n bones,\n boneCount: bones.size,\n };\n};\n\n/**\n * Create humanoid rig with dynamic scaling based on physical attributes.\n *\n * **Korean**: 신체 속성 기반 골격 생성 (Physical Attributes-Based Skeleton Creation)\n *\n * Creates a 28-bone humanoid skeleton with bone lengths scaled according to\n * the fighter's physical attributes. This allows each archetype to have\n * anatomically accurate body proportions that affect combat hitboxes, vital\n * point positioning, and visual representation.\n *\n * ## Visual Amplification\n *\n * The scaling system applies amplification factors to create distinct visual\n * silhouettes while maintaining anatomical realism:\n *\n * - **2.5x limb amplification**: Makes reach differences clearly visible\n * - **1.15x shoulder amplification**: Creates recognizable body width differences\n * - **1.5x height amplification**: Subtle overall size differences\n *\n * ### Archetype Silhouettes Created\n *\n * The following table shows the effective shoulder span after amplification\n * (full span = offset * 2). Values show raw attribute → amplified visual span.\n *\n * | Archetype | Shoulders (Raw → Amplified Span) | Height | Silhouette |\n * |-----------|----------------------------------|--------|------------|\n * | Hacker | 43cm → 49.5cm | 175cm | Compact, narrow |\n * | Amsalja | 44cm → 50.6cm | 186cm | Tall, lean |\n * | Jeongbo | 45cm → 51.8cm | 179cm | Balanced |\n * | Musa | 46cm → 52.9cm | 180cm | Athletic |\n * | Jojik | 54cm → 62.1cm | 188cm | Massive, wide |\n *\n * Note: Amplified span = raw width * 1.15 (shoulder amplification factor)\n * Percentage differences remain constant, but absolute gaps are amplified:\n * - Raw gap: Jojik (54cm) - Hacker (43cm) = 11cm\n * - Amplified gap: 62.1cm - 49.5cm = 12.6cm (15% larger absolute difference)\n *\n * @param attributes - Physical attributes to scale the skeleton\n * @returns Complete skeletal rig with scaled bone dimensions\n *\n * @example\n * ```typescript\n * import { AMSALJA_PHYSICAL } from \"@/data/archetypePhysicalAttributes\";\n *\n * // Create skeleton for lean assassin archetype\n * const amsaljaRig = createScaledHumanoidRig(AMSALJA_PHYSICAL);\n * // Results in taller skeleton with longer limbs, narrower shoulders\n * // Height: 186cm, Legs: 102cm, Arms: 82cm, Shoulders: 44cm\n *\n * // Create skeleton for heavy brawler archetype\n * const jojikRig = createScaledHumanoidRig(JOJIK_PHYSICAL);\n * // Results in stockier skeleton with wider shoulders, thicker torso\n * // Height: 188cm, Legs: 100cm, Arms: 84cm, Shoulders: 54cm (25% wider!)\n * ```\n *\n * @korean 크기조정된인간형골격생성\n */\nexport const createScaledHumanoidRig = (\n attributes: PhysicalAttributes,\n): SkeletalRig => {\n // Calculate anatomically correct bone dimensions in meters\n const dims = calculateSkeletonDimensions(attributes);\n\n // Calculate shoulder offset (half of shoulder width) in meters\n const shoulderOffsetMeters = cmToMeters(attributes.shoulderWidth) / 2;\n const hipOffsetMeters = cmToMeters(attributes.shoulderWidth) * 0.35; // Hips are ~70% of shoulder width\n\n // Root (pelvis) - position at pelvis height (ground + leg length + foot)\n // This ensures feet are at Y=0\n const root = createBone(\n BoneName.PELVIS,\n null,\n [0, dims.pelvisHeight, 0],\n dims.hip,\n );\n\n // Spine chain (3 bones) - using actual torso segment lengths\n const spine1 = createBone(\n BoneName.SPINE_LOWER,\n root,\n [0, dims.spineLower * 0.5, 0], // Start half a segment up from pelvis\n dims.spineLower,\n );\n const spine2 = createBone(\n BoneName.SPINE_MIDDLE,\n spine1,\n [0, dims.spineMiddle, 0],\n dims.spineMiddle,\n );\n const spine3 = createBone(\n BoneName.SPINE_UPPER,\n spine2,\n [0, dims.spineUpper, 0],\n dims.spineUpper,\n );\n\n // Head chain (2 bones) - using actual neck and head sizes\n const neck = createBone(\n BoneName.NECK,\n spine3,\n [0, dims.neck * 0.5, 0], // Start from top of spine\n dims.neck,\n );\n const head = createBone(\n BoneName.HEAD,\n neck,\n [0, dims.head * 0.75, 0], // Head center offset\n dims.head,\n );\n\n // Left arm chain (6 bones) - using actual arm segment lengths\n const leftShoulder = createBone(\n BoneName.SHOULDER_L,\n spine3,\n [-shoulderOffsetMeters * 0.7, dims.neck * 0.3, 0], // Shoulder starts inward from edge\n dims.shoulder,\n );\n const leftUpperArm = createBone(\n BoneName.UPPER_ARM_L,\n leftShoulder,\n [-dims.shoulder, 0, 0], // Extend outward by shoulder length\n dims.upperArm,\n );\n const leftElbow = createBone(\n BoneName.ELBOW_L,\n leftUpperArm,\n [-dims.upperArm, 0, 0], // End of upper arm\n dims.elbow,\n );\n const leftForearm = createBone(\n BoneName.FOREARM_L,\n leftElbow,\n [-dims.elbow, 0, 0], // Past elbow joint\n dims.forearm,\n );\n const leftWrist = createBone(\n BoneName.WRIST_L,\n leftForearm,\n [-dims.forearm, 0, 0], // End of forearm\n dims.wrist,\n );\n const leftHand = createBone(\n BoneName.HAND_L,\n leftWrist,\n [-dims.wrist, 0, 0], // Past wrist\n dims.hand,\n );\n\n // Right arm chain (6 bones - mirror of left)\n const rightShoulder = createBone(\n BoneName.SHOULDER_R,\n spine3,\n [shoulderOffsetMeters * 0.7, dims.neck * 0.3, 0],\n dims.shoulder,\n );\n const rightUpperArm = createBone(\n BoneName.UPPER_ARM_R,\n rightShoulder,\n [dims.shoulder, 0, 0],\n dims.upperArm,\n );\n const rightElbow = createBone(\n BoneName.ELBOW_R,\n rightUpperArm,\n [dims.upperArm, 0, 0],\n dims.elbow,\n );\n const rightForearm = createBone(\n BoneName.FOREARM_R,\n rightElbow,\n [dims.elbow, 0, 0],\n dims.forearm,\n );\n const rightWrist = createBone(\n BoneName.WRIST_R,\n rightForearm,\n [dims.forearm, 0, 0],\n dims.wrist,\n );\n const rightHand = createBone(\n BoneName.HAND_R,\n rightWrist,\n [dims.wrist, 0, 0],\n dims.hand,\n );\n\n // Left leg chain (5 bones) - using actual leg segment lengths\n const leftHip = createBone(\n BoneName.HIP_L,\n root,\n [-hipOffsetMeters, -dims.hip * 0.5, 0],\n dims.hip,\n );\n const leftThigh = createBone(\n BoneName.THIGH_L,\n leftHip,\n [0, -dims.hip, 0], // Drop down from hip\n dims.thigh,\n );\n const leftKnee = createBone(\n BoneName.KNEE_L,\n leftThigh,\n [0, -dims.thigh, 0], // End of thigh\n dims.knee,\n );\n const leftShin = createBone(\n BoneName.SHIN_L,\n leftKnee,\n [0, -dims.knee, 0], // Past knee\n dims.shin,\n );\n const leftFoot = createBone(\n BoneName.FOOT_L,\n leftShin,\n [0, -dims.shin, dims.foot * 0.5], // End of shin, slight forward for foot\n dims.foot,\n );\n\n // Right leg chain (5 bones - mirror of left)\n const rightHip = createBone(\n BoneName.HIP_R,\n root,\n [hipOffsetMeters, -dims.hip * 0.5, 0],\n dims.hip,\n );\n const rightThigh = createBone(\n BoneName.THIGH_R,\n rightHip,\n [0, -dims.hip, 0],\n dims.thigh,\n );\n const rightKnee = createBone(\n BoneName.KNEE_R,\n rightThigh,\n [0, -dims.thigh, 0],\n dims.knee,\n );\n const rightShin = createBone(\n BoneName.SHIN_R,\n rightKnee,\n [0, -dims.knee, 0],\n dims.shin,\n );\n const rightFoot = createBone(\n BoneName.FOOT_R,\n rightShin,\n [0, -dims.shin, dims.foot * 0.5],\n dims.foot,\n );\n\n // Create bone map for fast lookup\n const bones = new Map<string, Bone>([\n [BoneName.PELVIS, root],\n [BoneName.SPINE_LOWER, spine1],\n [BoneName.SPINE_MIDDLE, spine2],\n [BoneName.SPINE_UPPER, spine3],\n [BoneName.NECK, neck],\n [BoneName.HEAD, head],\n [BoneName.SHOULDER_L, leftShoulder],\n [BoneName.UPPER_ARM_L, leftUpperArm],\n [BoneName.ELBOW_L, leftElbow],\n [BoneName.FOREARM_L, leftForearm],\n [BoneName.WRIST_L, leftWrist],\n [BoneName.HAND_L, leftHand],\n [BoneName.SHOULDER_R, rightShoulder],\n [BoneName.UPPER_ARM_R, rightUpperArm],\n [BoneName.ELBOW_R, rightElbow],\n [BoneName.FOREARM_R, rightForearm],\n [BoneName.WRIST_R, rightWrist],\n [BoneName.HAND_R, rightHand],\n [BoneName.HIP_L, leftHip],\n [BoneName.THIGH_L, leftThigh],\n [BoneName.KNEE_L, leftKnee],\n [BoneName.SHIN_L, leftShin],\n [BoneName.FOOT_L, leftFoot],\n [BoneName.HIP_R, rightHip],\n [BoneName.THIGH_R, rightThigh],\n [BoneName.KNEE_R, rightKnee],\n [BoneName.SHIN_R, rightShin],\n [BoneName.FOOT_R, rightFoot],\n ]);\n\n return {\n root,\n bones,\n boneCount: bones.size,\n };\n};\n\n/**\n * Joint constraints for anatomically correct movement\n *\n * Defines rotation limits for each joint to prevent unrealistic poses.\n * Based on human anatomy and Korean martial arts biomechanics.\n *\n * @korean 관절제약조건들\n */\nexport const JOINT_CONSTRAINTS: JointConstraint[] = [\n // Elbow joints - can only bend one direction\n {\n boneName: BoneName.ELBOW_L,\n minRotation: new THREE.Vector3(0, 0, -2.4), // ~-137 degrees\n maxRotation: new THREE.Vector3(0, 0, 0),\n canTwist: false,\n },\n {\n boneName: BoneName.ELBOW_R,\n minRotation: new THREE.Vector3(0, 0, 0),\n maxRotation: new THREE.Vector3(0, 0, 2.4), // ~137 degrees\n canTwist: false,\n },\n\n // Knee joints - can only bend backward\n {\n boneName: BoneName.KNEE_L,\n minRotation: new THREE.Vector3(-2.4, 0, 0), // ~-137 degrees\n maxRotation: new THREE.Vector3(0, 0, 0),\n canTwist: false,\n },\n {\n boneName: BoneName.KNEE_R,\n minRotation: new THREE.Vector3(-2.4, 0, 0), // ~-137 degrees\n maxRotation: new THREE.Vector3(0, 0, 0),\n canTwist: false,\n },\n\n // Shoulder joints - full range of motion\n {\n boneName: BoneName.SHOULDER_L,\n minRotation: new THREE.Vector3(-1.5, -1.5, -3.0),\n maxRotation: new THREE.Vector3(1.5, 1.5, 3.0),\n canTwist: true,\n },\n {\n boneName: BoneName.SHOULDER_R,\n minRotation: new THREE.Vector3(-1.5, -1.5, -3.0),\n maxRotation: new THREE.Vector3(1.5, 1.5, 3.0),\n canTwist: true,\n },\n\n // Hip joints - large range for kicks\n {\n boneName: BoneName.HIP_L,\n minRotation: new THREE.Vector3(-1.8, -0.8, -1.5),\n maxRotation: new THREE.Vector3(1.8, 0.8, 1.5),\n canTwist: true,\n },\n {\n boneName: BoneName.HIP_R,\n minRotation: new THREE.Vector3(-1.8, -0.8, -1.5),\n maxRotation: new THREE.Vector3(1.8, 0.8, 1.5),\n canTwist: true,\n },\n\n // Neck - moderate range\n {\n boneName: BoneName.NECK,\n minRotation: new THREE.Vector3(-0.5, -0.8, -0.5),\n maxRotation: new THREE.Vector3(0.5, 0.8, 0.5),\n canTwist: true,\n },\n\n // Spine bones - limited rotation for realism\n {\n boneName: BoneName.SPINE_LOWER,\n minRotation: new THREE.Vector3(-0.3, -0.5, -0.3),\n maxRotation: new THREE.Vector3(0.3, 0.5, 0.3),\n canTwist: true,\n },\n {\n boneName: BoneName.SPINE_MIDDLE,\n minRotation: new THREE.Vector3(-0.3, -0.5, -0.3),\n maxRotation: new THREE.Vector3(0.3, 0.5, 0.3),\n canTwist: true,\n },\n {\n boneName: BoneName.SPINE_UPPER,\n minRotation: new THREE.Vector3(-0.3, -0.5, -0.3),\n maxRotation: new THREE.Vector3(0.3, 0.5, 0.3),\n canTwist: true,\n },\n];\n\n/**\n * Bone chains for IK (Inverse Kinematics)\n *\n * Defines logical bone chains for limbs, used for IK solving\n * and animation retargeting.\n *\n * @korean 뼈체인들\n */\nexport const BONE_CHAINS: BoneChain[] = [\n // Left arm chain\n {\n name: \"left_arm\",\n startBone: BoneName.SHOULDER_L,\n endBone: BoneName.HAND_L,\n bones: [\n BoneName.SHOULDER_L,\n BoneName.UPPER_ARM_L,\n BoneName.ELBOW_L,\n BoneName.FOREARM_L,\n BoneName.WRIST_L,\n BoneName.HAND_L,\n ],\n },\n\n // Right arm chain\n {\n name: \"right_arm\",\n startBone: BoneName.SHOULDER_R,\n endBone: BoneName.HAND_R,\n bones: [\n BoneName.SHOULDER_R,\n BoneName.UPPER_ARM_R,\n BoneName.ELBOW_R,\n BoneName.FOREARM_R,\n BoneName.WRIST_R,\n BoneName.HAND_R,\n ],\n },\n\n // Left leg chain\n {\n name: \"left_leg\",\n startBone: BoneName.HIP_L,\n endBone: BoneName.FOOT_L,\n bones: [\n BoneName.HIP_L,\n BoneName.THIGH_L,\n BoneName.KNEE_L,\n BoneName.SHIN_L,\n BoneName.FOOT_L,\n ],\n },\n\n // Right leg chain\n {\n name: \"right_leg\",\n startBone: BoneName.HIP_R,\n endBone: BoneName.FOOT_R,\n bones: [\n BoneName.HIP_R,\n BoneName.THIGH_R,\n BoneName.KNEE_R,\n BoneName.SHIN_R,\n BoneName.FOOT_R,\n ],\n },\n\n // Spine chain\n {\n name: \"spine\",\n startBone: BoneName.PELVIS,\n endBone: BoneName.HEAD,\n bones: [\n BoneName.PELVIS,\n BoneName.SPINE_LOWER,\n BoneName.SPINE_MIDDLE,\n BoneName.SPINE_UPPER,\n BoneName.NECK,\n BoneName.HEAD,\n ],\n },\n];\n\n/**\n * Apply joint constraints to bone rotation\n *\n * Clamps bone rotation to anatomically correct ranges.\n * Prevents unrealistic poses like backward-bending elbows.\n *\n * @param bone - Bone to constrain\n * @param constraints - Joint constraint to apply\n *\n * @korean 관절제약적용\n */\nexport const applyJointConstraint = (\n bone: Bone,\n constraint: JointConstraint,\n): void => {\n // Clamp X rotation\n bone.rotation.x = Math.max(\n constraint.minRotation.x,\n Math.min(constraint.maxRotation.x, bone.rotation.x),\n );\n\n // Clamp Y rotation\n bone.rotation.y = Math.max(\n constraint.minRotation.y,\n Math.min(constraint.maxRotation.y, bone.rotation.y),\n );\n\n // Clamp Z rotation\n bone.rotation.z = Math.max(\n constraint.minRotation.z,\n Math.min(constraint.maxRotation.z, bone.rotation.z),\n );\n};\n\n// Reusable matrix objects for world transform calculations (avoid allocations in useFrame)\nconst tempMatrix = new THREE.Matrix4();\nconst tempQuaternion = new THREE.Quaternion();\nconst tempScale = new THREE.Vector3();\n\n/**\n * Get world position of bone\n *\n * Calculates absolute world position by traversing parent chain.\n * Uses proper matrix multiplication to account for parent rotations.\n *\n * @param bone - Bone to get world position for\n * @returns World position as Vector3\n *\n * @korean 뼈의세계위치구하기\n */\nexport const getBoneWorldPosition = (bone: Bone): THREE.Vector3 => {\n // Build the bone chain from root to this bone\n const boneChain: Bone[] = [];\n let currentBone: Bone | null = bone;\n while (currentBone) {\n boneChain.unshift(currentBone);\n currentBone = currentBone.parent;\n }\n\n // Compose world matrix by multiplying all local transforms\n const worldMatrix = new THREE.Matrix4();\n worldMatrix.identity();\n\n for (const b of boneChain) {\n tempMatrix.compose(\n b.position,\n tempQuaternion.setFromEuler(b.rotation),\n b.scale,\n );\n worldMatrix.multiply(tempMatrix);\n }\n\n // Extract world position from composed matrix\n const worldPos = new THREE.Vector3();\n worldMatrix.decompose(worldPos, tempQuaternion, tempScale);\n return worldPos;\n};\n\n/**\n * Get world rotation of bone\n *\n * Calculates absolute world rotation by traversing parent chain.\n * Uses proper quaternion multiplication for correct rotation composition.\n *\n * @param bone - Bone to get world rotation for\n * @returns World rotation as Euler\n *\n * @korean 뼈의세계회전구하기\n */\nexport const getBoneWorldRotation = (bone: Bone): THREE.Euler => {\n // Build the bone chain from root to this bone\n const boneChain: Bone[] = [];\n let currentBone: Bone | null = bone;\n while (currentBone) {\n boneChain.unshift(currentBone);\n currentBone = currentBone.parent;\n }\n\n // Compose world rotation by multiplying quaternions (proper rotation composition)\n const worldQuat = new THREE.Quaternion();\n worldQuat.identity();\n\n for (const b of boneChain) {\n tempQuaternion.setFromEuler(b.rotation);\n worldQuat.multiply(tempQuaternion);\n }\n\n // Convert back to Euler\n const worldRot = new THREE.Euler();\n worldRot.setFromQuaternion(worldQuat);\n return worldRot;\n};\n\n/**\n * Reset bone to rest pose\n *\n * Resets bone position and rotation to default rest pose.\n * Useful for animation blending and initialization.\n *\n * @param bone - Bone to reset\n *\n * @korean 뼈를기본자세로초기화\n */\nexport const resetBoneToRestPose = (bone: Bone): void => {\n bone.position.copy(bone.restPosition);\n bone.rotation.copy(bone.restRotation);\n bone.scale.set(1, 1, 1);\n};\n\n/**\n * Reset entire rig to rest pose\n *\n * Resets all bones in rig to rest pose.\n *\n * @param rig - Skeletal rig to reset\n *\n * @korean 골격을기본자세로초기화\n */\nexport const resetRigToRestPose = (rig: SkeletalRig): void => {\n rig.bones.forEach((bone) => {\n resetBoneToRestPose(bone);\n });\n};\n\n/**\n * Create hand bones with 5 fingers\n *\n * Creates detailed hand structure with 5 fingers (thumb, index, middle, ring, pinky),\n * attached to an existing hand/palm bone.\n * Each finger has 3-4 bones for realistic animation.\n *\n * Finger bone structure:\n * - Thumb: 3 bones (metacarpal, proximal, distal) - no intermediate\n * - Other fingers: 4 bones (metacarpal, proximal, intermediate, distal)\n *\n * Total created by this function: 19 finger bones per hand (3 thumb + 4*4 other fingers),\n * all attached to the provided hand bone.\n *\n * @param handBone - Parent hand bone (acts as the palm/root for finger bones)\n * @param side - Hand side (\"left\" or \"right\")\n * @returns Map of finger bones added to the rig\n *\n * @korean 손뼈생성\n */\nexport const createHandBones = (\n handBone: Bone,\n side: \"left\" | \"right\",\n): Map<string, Bone> => {\n const fingerBones = new Map<string, Bone>();\n\n // Hand orientation: left hand extends to -X, right hand extends to +X\n const sideMultiplier = side === \"left\" ? -1 : 1;\n\n // Thumb (3 bones) - offset slightly toward palm center and forward\n const thumbMeta = createBone(\n `${\n BoneName[`THUMB_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [0.015 * sideMultiplier, 0.02, 0.01],\n 0.025,\n );\n const thumbProx = createBone(\n `${\n BoneName[`THUMB_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n thumbMeta,\n [0.015 * sideMultiplier, 0.015, 0.01],\n 0.02,\n );\n const thumbDist = createBone(\n `${\n BoneName[`THUMB_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n thumbProx,\n [0.01 * sideMultiplier, 0.01, 0],\n 0.015,\n );\n\n fingerBones.set(thumbMeta.name, thumbMeta);\n fingerBones.set(thumbProx.name, thumbProx);\n fingerBones.set(thumbDist.name, thumbDist);\n\n // Index finger (4 bones)\n const indexMeta = createBone(\n `${\n BoneName[`INDEX_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [0.015 * sideMultiplier, 0.06, 0],\n 0.03,\n );\n const indexProx = createBone(\n `${\n BoneName[`INDEX_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n indexMeta,\n [0, 0.025, 0],\n 0.025,\n );\n const indexInter = createBone(\n `${\n BoneName[`INDEX_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n indexProx,\n [0, 0.02, 0],\n 0.02,\n );\n const indexDist = createBone(\n `${\n BoneName[`INDEX_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n indexInter,\n [0, 0.015, 0],\n 0.015,\n );\n\n fingerBones.set(indexMeta.name, indexMeta);\n fingerBones.set(indexProx.name, indexProx);\n fingerBones.set(indexInter.name, indexInter);\n fingerBones.set(indexDist.name, indexDist);\n\n // Middle finger (4 bones) - longest finger\n const middleMeta = createBone(\n `${\n BoneName[`MIDDLE_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [0.005 * sideMultiplier, 0.065, 0],\n 0.035,\n );\n const middleProx = createBone(\n `${\n BoneName[`MIDDLE_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n middleMeta,\n [0, 0.03, 0],\n 0.03,\n );\n const middleInter = createBone(\n `${\n BoneName[`MIDDLE_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n middleProx,\n [0, 0.025, 0],\n 0.025,\n );\n const middleDist = createBone(\n `${\n BoneName[`MIDDLE_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n middleInter,\n [0, 0.02, 0],\n 0.02,\n );\n\n fingerBones.set(middleMeta.name, middleMeta);\n fingerBones.set(middleProx.name, middleProx);\n fingerBones.set(middleInter.name, middleInter);\n fingerBones.set(middleDist.name, middleDist);\n\n // Ring finger (4 bones)\n const ringMeta = createBone(\n `${\n BoneName[`RING_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [-0.005 * sideMultiplier, 0.06, 0],\n 0.03,\n );\n const ringProx = createBone(\n `${\n BoneName[`RING_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n ringMeta,\n [0, 0.025, 0],\n 0.025,\n );\n const ringInter = createBone(\n `${\n BoneName[`RING_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n ringProx,\n [0, 0.02, 0],\n 0.02,\n );\n const ringDist = createBone(\n `${\n BoneName[`RING_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n ringInter,\n [0, 0.015, 0],\n 0.015,\n );\n\n fingerBones.set(ringMeta.name, ringMeta);\n fingerBones.set(ringProx.name, ringProx);\n fingerBones.set(ringInter.name, ringInter);\n fingerBones.set(ringDist.name, ringDist);\n\n // Pinky finger (4 bones) - shortest finger\n const pinkyMeta = createBone(\n `${\n BoneName[`PINKY_META_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n handBone,\n [-0.015 * sideMultiplier, 0.05, 0],\n 0.025,\n );\n const pinkyProx = createBone(\n `${\n BoneName[`PINKY_PROX_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n pinkyMeta,\n [0, 0.02, 0],\n 0.02,\n );\n const pinkyInter = createBone(\n `${\n BoneName[`PINKY_INTER_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n pinkyProx,\n [0, 0.015, 0],\n 0.015,\n );\n const pinkyDist = createBone(\n `${\n BoneName[`PINKY_DIST_${side.toUpperCase()[0]}` as keyof typeof BoneName]\n }`,\n pinkyInter,\n [0, 0.01, 0],\n 0.01,\n );\n\n fingerBones.set(pinkyMeta.name, pinkyMeta);\n fingerBones.set(pinkyProx.name, pinkyProx);\n fingerBones.set(pinkyInter.name, pinkyInter);\n fingerBones.set(pinkyDist.name, pinkyDist);\n\n return fingerBones;\n};\n\n/**\n * Create humanoid rig with optional hand bones\n *\n * Creates complete skeletal rig with optional detailed hand bones.\n * Hand bones can be excluded for performance (LOD system).\n *\n * @param includeHandBones - Whether to include detailed hand bones (default: false)\n * @returns Complete skeletal rig with or without hand bones\n *\n * @korean 손뼈포함골격생성\n */\nexport const createHumanoidRigWithHands = (\n includeHandBones: boolean = false,\n): SkeletalRig => {\n // Create base rig\n const baseRig = createHumanoidRig();\n\n // If hand bones not requested, return base rig\n if (!includeHandBones) {\n return baseRig;\n }\n\n // Get hand bones from base rig\n const leftHand = baseRig.bones.get(BoneName.HAND_L);\n const rightHand = baseRig.bones.get(BoneName.HAND_R);\n\n if (!leftHand || !rightHand) {\n console.warn(\"Hand bones not found in base rig\");\n return baseRig;\n }\n\n // Create finger bones\n const leftFingerBones = createHandBones(leftHand, \"left\");\n const rightFingerBones = createHandBones(rightHand, \"right\");\n\n // Add finger bones to rig bone map\n leftFingerBones.forEach((bone, name) => {\n baseRig.bones.set(name, bone);\n });\n rightFingerBones.forEach((bone, name) => {\n baseRig.bones.set(name, bone);\n });\n\n return {\n ...baseRig,\n boneCount: baseRig.bones.size,\n };\n};\n\n/**\n * Torso rotation constraints for anatomically correct upper/lower body movement\n *\n * Defines limits and behavior for independent torso rotation relative to hips,\n * enabling realistic strafing and lateral movement while facing opponent.\n *\n * Korean terminology:\n * - 허리회전 (Heorhwoejeon) - Torso rotation\n * - 해부학적제약 (Haebuhakjeok Jeyak) - Anatomical constraints\n *\n * @korean 허리회전제약조건\n */\nexport const TORSO_CONSTRAINTS = {\n /**\n * Maximum torso rotation relative to hips (radians)\n * ±90° = π/2 radians - anatomically safe rotation limit\n *\n * @korean 최대회전각도\n */\n MAX_ROTATION: Math.PI / 2,\n\n /**\n * Minimum torso rotation relative to hips (radians)\n * -90° = -π/2 radians\n *\n * @korean 최소회전각도\n */\n MIN_ROTATION: -Math.PI / 2,\n\n /**\n * Target interpolation time in seconds\n * 200ms provides smooth, natural rotation feel\n *\n * @korean 보간시간\n */\n INTERPOLATION_TIME: 0.2,\n\n /**\n * Power modifier range for hip rotation\n * [min, max] = [10%, 30%] damage bonus from proper hip engagement\n *\n * @korean 파워배율범위\n */\n POWER_MODIFIER_RANGE: [0.1, 0.3] as const,\n} as const;\n\n/**\n * Calculate torso rotation to face opponent while moving\n *\n * Determines optimal torso rotation angle to keep upper body facing opponent\n * while hips/legs are oriented in movement direction. Enforces anatomical\n * constraints (±90° max rotation).\n *\n * @param currentPosition - Player's current world position\n * @param opponentPosition - Opponent's current world position\n * @param _movementDirection - Direction of player movement (reserved for future use)\n * @param hipRotation - Current hip/pelvis rotation in radians\n * @returns Torso rotation in radians relative to hips (clamped to ±90°)\n *\n * @example\n * ```typescript\n * const playerPos = new THREE.Vector3(0, 0, 0);\n * const opponentPos = new THREE.Vector3(0, 0, 5); // Directly in front along Z+\n * const moveDir = new THREE.Vector3(0, 0, 1); // Moving forward\n * const hipRot = 0; // Hips facing forward (Z+)\n *\n * const torsoRot = calculateTorsoRotation(playerPos, opponentPos, moveDir, hipRot);\n * // Returns 0 (opponent is already aligned with hips)\n * ```\n *\n * @korean 상대를향한허리회전계산\n */\nexport function calculateTorsoRotation(\n currentPosition: THREE.Vector3,\n opponentPosition: THREE.Vector3,\n _movementDirection: THREE.Vector3,\n hipRotation: number,\n): number {\n // Calculate angle to opponent\n const directionToOpponent = opponentPosition\n .clone()\n .sub(currentPosition)\n .normalize();\n // Use atan2(x, z) - X is horizontal, Z is forward/back in Three.js\n const angleToOpponent = Math.atan2(\n directionToOpponent.x,\n directionToOpponent.z,\n );\n\n // Calculate torso rotation relative to hips\n let torsoRotation = angleToOpponent - hipRotation;\n\n // Normalize to -π to π range\n while (torsoRotation > Math.PI) torsoRotation -= 2 * Math.PI;\n while (torsoRotation < -Math.PI) torsoRotation += 2 * Math.PI;\n\n // Apply anatomical constraints (±90°)\n torsoRotation = Math.max(\n TORSO_CONSTRAINTS.MIN_ROTATION,\n Math.min(TORSO_CONSTRAINTS.MAX_ROTATION, torsoRotation),\n );\n\n return torsoRotation;\n}\n\n/**\n * Calculate damage modifier from hip rotation\n *\n * Determines power bonus applied to techniques based on hip rotation angle.\n * Greater hip rotation generates more power through proper biomechanics,\n * with strikes benefiting most from full rotation.\n *\n * @param hipRotationAngle - Hip rotation angle in radians (typically from torso twist)\n * @param techniqueType - Type of technique ('strike', 'throw', or 'joint')\n * @returns Damage multiplier (1.0-1.3 for strikes, 1.0-1.1 for throws/joints)\n *\n * @example\n * ```typescript\n * // Full hip rotation on strike technique\n * const modifier = calculateHipRotationPowerModifier(Math.PI / 2, 'strike');\n * // Returns 1.30 (30% damage bonus)\n *\n * // Half rotation on throw\n * const throwMod = calculateHipRotationPowerModifier(Math.PI / 4, 'throw');\n * // Returns 1.05 (5% damage bonus)\n * ```\n *\n * @korean 허리회전으로인한데미지배율계산\n */\nexport function calculateHipRotationPowerModifier(\n hipRotationAngle: number,\n techniqueType: \"strike\" | \"throw\" | \"joint\",\n): number {\n // Normalize rotation to 0-1 range (0 = no rotation, 1 = max rotation)\n // Clamp to max rotation first to handle any values exceeding ±90°\n const clampedAngle = Math.max(\n -TORSO_CONSTRAINTS.MAX_ROTATION,\n Math.min(TORSO_CONSTRAINTS.MAX_ROTATION, Math.abs(hipRotationAngle)),\n );\n const normalizedRotation = clampedAngle / TORSO_CONSTRAINTS.MAX_ROTATION;\n\n // Strikes benefit most from hip rotation (up to 30% bonus)\n // Throws get moderate benefit (up to 10% bonus)\n // Joint locks get minimal benefit (up to 10% bonus)\n const baseModifier = techniqueType === \"strike\" ? 0.3 : 0.1;\n\n return 1.0 + normalizedRotation * baseModifier;\n}\n"],"mappings":"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"}
@@ -94,7 +94,6 @@ export declare const RECOVERY_DEFENSIVE_KEYFRAMES: readonly RecoveryKeyframe[];
94
94
  * @param recoveryType - Type of recovery animation
95
95
  * @returns Array of keyframes for that recovery type
96
96
  *
97
- * @public
98
97
  * @korean 기상키프레임가져오기
99
98
  */
100
99
  export declare function getRecoveryKeyframes(recoveryType: RecoveryAnimationType): readonly RecoveryKeyframe[];
@@ -108,7 +107,6 @@ export declare function getRecoveryKeyframes(recoveryType: RecoveryAnimationType
108
107
  * @param frame - Current frame number (0-indexed)
109
108
  * @returns True if player is vulnerable at this frame
110
109
  *
111
- * @public
112
110
  * @korean 취약프레임확인
113
111
  */
114
112
  export declare function isVulnerableFrame(recoveryType: RecoveryAnimationType, frame: number): boolean;
@@ -130,7 +128,6 @@ export declare function isVulnerableFrame(recoveryType: RecoveryAnimationType, f
130
128
  * // Returns: "roll_recovery" (default for side positions)
131
129
  * ```
132
130
  *
133
- * @public
134
131
  * @korean 기상유형결정
135
132
  */
136
133
  export declare function determineRecoveryType(groundState: GroundState): RecoveryAnimationType;
@@ -140,7 +137,6 @@ export declare function determineRecoveryType(groundState: GroundState): Recover
140
137
  * @param recoveryType - Recovery animation type
141
138
  * @returns Animation state name
142
139
  *
143
- * @public
144
140
  * @korean 기상애니메이션상태
145
141
  */
146
142
  export declare function getRecoveryAnimationState(recoveryType: RecoveryAnimationType): string;
@@ -177,7 +173,6 @@ export declare const RECOVERY_CONFIGS: Record<RecoveryAnimationType, RecoveryCon
177
173
  * @param recoveryType - Recovery animation type
178
174
  * @returns Recovery configuration
179
175
  *
180
- * @public
181
176
  * @korean 기상설정가져오기
182
177
  */
183
178
  export declare function getRecoveryConfig(recoveryType: RecoveryAnimationType): RecoveryConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"RecoveryAnimations.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/catalogs/RecoveryAnimations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAMxE;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,+BAA+B;IAC/B,QAAQ,CAAC,aAAa,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5D,mEAAmE;IACnE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,gBAAgB,EAmDtD,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,gBAAgB,EAmDvD,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,gBAAgB,EAmDrD,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,gBAAgB,EAmD1D,CAAC;AAEX;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,qBAAqB,GAClC,SAAS,gBAAgB,EAAE,CAa7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,qBAAqB,EACnC,KAAK,EAAE,MAAM,GACZ,OAAO,CAcT;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,WAAW,GACvB,qBAAqB,CAEvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,qBAAqB,GAClC,MAAM,CAER;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAErC,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,yDAAyD;IACzD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,wEAAwE;IACxE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,qBAAqB,EAAE,cAAc,CA6B1E,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,qBAAqB,GAClC,cAAc,CAEhB"}
1
+ {"version":3,"file":"RecoveryAnimations.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/catalogs/RecoveryAnimations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAMxE;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,+BAA+B;IAC/B,QAAQ,CAAC,aAAa,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5D,mEAAmE;IACnE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,gBAAgB,EAmDtD,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,gBAAgB,EAmDvD,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,gBAAgB,EAmDrD,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,gBAAgB,EAmD1D,CAAC;AAEX;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,qBAAqB,GAClC,SAAS,gBAAgB,EAAE,CAa7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,qBAAqB,EACnC,KAAK,EAAE,MAAM,GACZ,OAAO,CAcT;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,WAAW,GACvB,qBAAqB,CAEvB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,qBAAqB,GAClC,MAAM,CAER;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAErC,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,yDAAyD;IACzD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,wEAAwE;IACxE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,qBAAqB,EAAE,cAAc,CA6B1E,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,qBAAqB,GAClC,cAAc,CAEhB"}
@@ -342,7 +342,6 @@ var RECOVERY_DEFENSIVE_KEYFRAMES = [
342
342
  * @param recoveryType - Type of recovery animation
343
343
  * @returns Array of keyframes for that recovery type
344
344
  *
345
- * @public
346
345
  * @korean 기상키프레임가져오기
347
346
  */
348
347
  function getRecoveryKeyframes(recoveryType) {
@@ -364,7 +363,6 @@ function getRecoveryKeyframes(recoveryType) {
364
363
  * @param frame - Current frame number (0-indexed)
365
364
  * @returns True if player is vulnerable at this frame
366
365
  *
367
- * @public
368
366
  * @korean 취약프레임확인
369
367
  */
370
368
  function isVulnerableFrame(recoveryType, frame) {
@@ -392,7 +390,6 @@ function isVulnerableFrame(recoveryType, frame) {
392
390
  * // Returns: "roll_recovery" (default for side positions)
393
391
  * ```
394
392
  *
395
- * @public
396
393
  * @korean 기상유형결정
397
394
  */
398
395
  function determineRecoveryType(groundState) {
@@ -404,7 +401,6 @@ function determineRecoveryType(groundState) {
404
401
  * @param recoveryType - Recovery animation type
405
402
  * @returns Animation state name
406
403
  *
407
- * @public
408
404
  * @korean 기상애니메이션상태
409
405
  */
410
406
  function getRecoveryAnimationState(recoveryType) {
@@ -453,7 +449,6 @@ var RECOVERY_CONFIGS = {
453
449
  * @param recoveryType - Recovery animation type
454
450
  * @returns Recovery configuration
455
451
  *
456
- * @public
457
452
  * @korean 기상설정가져오기
458
453
  */
459
454
  function getRecoveryConfig(recoveryType) {
@@ -1 +1 @@
1
- {"version":3,"file":"RecoveryAnimations.js","names":[],"sources":["../../../../src/systems/animation/catalogs/RecoveryAnimations.ts"],"sourcesContent":["/**\n * Recovery Animation System for Black Trigram\n *\n * Implements realistic recovery animations for standing up from fallen states.\n * Based on Korean martial arts recovery techniques (기상 - Gisang).\n *\n * @module systems/animation/RecoveryAnimations\n * @category Animation\n * @korean 기상애니메이션\n */\n\nimport type { GroundState, RecoveryAnimationType } from \"../core/types\";\nimport {\n GROUND_STATE_TO_RECOVERY,\n RECOVERY_TYPE_TO_ANIMATION,\n} from \"../core/types\";\n\n/**\n * Recovery animation keyframe data structure\n *\n * Defines key poses during recovery animations for skeletal rendering.\n * Each keyframe specifies body positions at critical moments.\n *\n * @korean 기상키프레임\n */\nexport interface RecoveryKeyframe {\n /** Frame number (0-indexed) */\n readonly frame: number;\n\n /** Torso rotation (radians) */\n readonly torsoRotation: { x: number; y: number; z: number };\n\n /** Center of mass vertical position (0-1, 1=standing, 0=ground) */\n readonly centerOfMassHeight: number;\n\n /** Description of this keyframe */\n readonly description: {\n readonly korean: string;\n readonly english: string;\n };\n\n /** Whether player is vulnerable at this frame */\n readonly vulnerable: boolean;\n}\n\n/**\n * Prone stand-up keyframes (엎드린 기상)\n *\n * 30 frames (500ms) sequence:\n * - Frames 0-8: Push up with hands, torso lifts\n * - Frames 9-18: Legs swing under body, kneeling position\n * - Frames 19-24: Rise from kneeling to standing (vulnerable)\n * - Frames 25-29: Final stance adjustment (interruptible)\n *\n * @korean 엎드린기상키프레임\n */\nexport const RECOVERY_PRONE_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: 1.57, y: 0, z: 0 }, // Face down (90° forward)\n centerOfMassHeight: 0.05,\n description: {\n korean: \"엎드린 자세\",\n english: \"Prone position\",\n },\n vulnerable: true,\n },\n {\n frame: 8,\n torsoRotation: { x: 1.2, y: 0, z: 0 }, // Hands pushing, torso lifting\n centerOfMassHeight: 0.2,\n description: {\n korean: \"손으로 밀어 올리기\",\n english: \"Hands push up torso\",\n },\n vulnerable: true,\n },\n {\n frame: 18,\n torsoRotation: { x: 0.7, y: 0, z: 0 }, // Kneeling position\n centerOfMassHeight: 0.5,\n description: {\n korean: \"무릎 꿇기\",\n english: \"Kneeling position\",\n },\n vulnerable: true,\n },\n {\n frame: 24,\n torsoRotation: { x: 0.2, y: 0, z: 0 }, // Rising to standing\n centerOfMassHeight: 0.75,\n description: {\n korean: \"일어서기\",\n english: \"Rising to standing\",\n },\n vulnerable: false, // Last 6 frames (24-30) entering safe zone\n },\n {\n frame: 29,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Standing (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"서 있는 자세\",\n english: \"Standing stance\",\n },\n vulnerable: false, // Last 6 frames (25-30) are not vulnerable\n },\n] as const;\n\n/**\n * Supine stand-up keyframes (누운 기상)\n *\n * 36 frames (600ms) sequence:\n * - Frames 0-10: Abs crunch sit-up motion\n * - Frames 11-22: Forward roll onto feet\n * - Frames 23-30: Feet plant, rise to standing (vulnerable)\n * - Frames 31-35: Final stance adjustment (interruptible)\n *\n * @korean 누운기상키프레임\n */\nexport const RECOVERY_SUPINE_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: -1.57, y: 0, z: 0 }, // Face up (90° back)\n centerOfMassHeight: 0.05,\n description: {\n korean: \"누운 자세\",\n english: \"Supine position\",\n },\n vulnerable: true,\n },\n {\n frame: 10,\n torsoRotation: { x: -0.9, y: 0, z: 0 }, // Sit-up motion\n centerOfMassHeight: 0.3,\n description: {\n korean: \"윗몸 일으키기\",\n english: \"Sit-up motion\",\n },\n vulnerable: true,\n },\n {\n frame: 22,\n torsoRotation: { x: 0.4, y: 0, z: 0 }, // Forward roll\n centerOfMassHeight: 0.4,\n description: {\n korean: \"전방 구르기\",\n english: \"Forward roll\",\n },\n vulnerable: true,\n },\n {\n frame: 30,\n torsoRotation: { x: 0.2, y: 0, z: 0 }, // Feet planted, rising\n centerOfMassHeight: 0.7,\n description: {\n korean: \"발 디디고 일어서기\",\n english: \"Feet planted, rising\",\n },\n vulnerable: false, // Last 6 frames (30-36) entering safe zone\n },\n {\n frame: 35,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Standing (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"서 있는 자세\",\n english: \"Standing stance\",\n },\n vulnerable: false, // Last 6 frames (30-36) are not vulnerable\n },\n] as const;\n\n/**\n * Roll recovery keyframes (회전기상)\n *\n * 24 frames (400ms) sequence - FAST recovery\n * - Frames 0-6: Roll to side, momentum building\n * - Frames 7-14: Spring to feet with explosive movement\n * - Frames 15-18: Quick stance (vulnerable)\n * - Frames 19-23: Combat ready (interruptible)\n *\n * Costs 20 stamina for speed advantage.\n *\n * @korean 회전기상키프레임\n */\nexport const RECOVERY_ROLL_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: 0, y: 1.57, z: 1.57 }, // Side position (90° roll)\n centerOfMassHeight: 0.05,\n description: {\n korean: \"측면 자세\",\n english: \"Side position\",\n },\n vulnerable: true,\n },\n {\n frame: 6,\n torsoRotation: { x: 0.3, y: 0.8, z: 0.9 }, // Rolling motion\n centerOfMassHeight: 0.25,\n description: {\n korean: \"구르기 움직임\",\n english: \"Rolling motion\",\n },\n vulnerable: true,\n },\n {\n frame: 14,\n torsoRotation: { x: 0.4, y: 0, z: 0 }, // Springing to feet\n centerOfMassHeight: 0.6,\n description: {\n korean: \"발로 튀어오르기\",\n english: \"Spring to feet\",\n },\n vulnerable: true,\n },\n {\n frame: 18,\n torsoRotation: { x: 0.1, y: 0, z: 0 }, // Quick stance\n centerOfMassHeight: 0.85,\n description: {\n korean: \"빠른 자세\",\n english: \"Quick stance\",\n },\n vulnerable: false, // Last 6 frames (18-24) entering safe zone\n },\n {\n frame: 23,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Combat ready (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"전투 준비\",\n english: \"Combat ready\",\n },\n vulnerable: false, // Last 6 frames (18-24) are not vulnerable\n },\n] as const;\n\n/**\n * Defensive getup keyframes (방어기상)\n *\n * 42 frames (700ms) sequence - SLOW but protected\n * - Frames 0-14: Slow rise with arms guarding head/torso\n * - Frames 15-28: Gradual stand with maintained guard\n * - Frames 29-36: Stance formation with guard (50% damage reduction)\n * - Frames 37-41: Ready stance (interruptible)\n *\n * Provides 50% damage reduction throughout animation.\n *\n * @korean 방어기상키프레임\n */\nexport const RECOVERY_DEFENSIVE_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: 1.2, y: 0, z: 0 }, // Grounded, arms up\n centerOfMassHeight: 0.05,\n description: {\n korean: \"지면에서 팔 올리기\",\n english: \"Grounded, arms up\",\n },\n vulnerable: true, // 50% damage reduction applies\n },\n {\n frame: 14,\n torsoRotation: { x: 0.9, y: 0, z: 0 }, // Slow rise, guard maintained\n centerOfMassHeight: 0.3,\n description: {\n korean: \"천천히 일어나며 방어\",\n english: \"Slow rise, guarded\",\n },\n vulnerable: true, // 50% damage reduction applies\n },\n {\n frame: 28,\n torsoRotation: { x: 0.5, y: 0, z: 0 }, // Gradual stand, guard up\n centerOfMassHeight: 0.6,\n description: {\n korean: \"점차 서며 방어 유지\",\n english: \"Gradual stand, guard up\",\n },\n vulnerable: true, // 50% damage reduction applies\n },\n {\n frame: 36,\n torsoRotation: { x: 0.2, y: 0, z: 0 }, // Stance formation, guarded\n centerOfMassHeight: 0.8,\n description: {\n korean: \"자세 형성, 방어 상태\",\n english: \"Stance formation, guarded\",\n },\n vulnerable: false, // Last 6 frames (36-42) entering safe zone (still 50% reduction)\n },\n {\n frame: 41,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Ready stance (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"준비 자세\",\n english: \"Ready stance\",\n },\n vulnerable: false, // Last 6 frames (36-42) are not vulnerable\n },\n] as const;\n\n/**\n * Get keyframes for a specific recovery type\n *\n * @param recoveryType - Type of recovery animation\n * @returns Array of keyframes for that recovery type\n *\n * @public\n * @korean 기상키프레임가져오기\n */\nexport function getRecoveryKeyframes(\n recoveryType: RecoveryAnimationType\n): readonly RecoveryKeyframe[] {\n switch (recoveryType) {\n case \"prone_standup\":\n return RECOVERY_PRONE_KEYFRAMES;\n case \"supine_standup\":\n return RECOVERY_SUPINE_KEYFRAMES;\n case \"roll_recovery\":\n return RECOVERY_ROLL_KEYFRAMES;\n case \"defensive_getup\":\n return RECOVERY_DEFENSIVE_KEYFRAMES;\n default:\n return RECOVERY_ROLL_KEYFRAMES;\n }\n}\n\n/**\n * Check if a frame in a recovery animation is vulnerable\n *\n * Vulnerability is determined by keyframe data. The last 6 frames\n * of each recovery animation are interruptible and not vulnerable.\n *\n * @param recoveryType - Type of recovery animation\n * @param frame - Current frame number (0-indexed)\n * @returns True if player is vulnerable at this frame\n *\n * @public\n * @korean 취약프레임확인\n */\nexport function isVulnerableFrame(\n recoveryType: RecoveryAnimationType,\n frame: number\n): boolean {\n const keyframes = getRecoveryKeyframes(recoveryType);\n\n // Find the keyframe for this frame or the previous keyframe\n let currentKeyframe = keyframes[0];\n for (const kf of keyframes) {\n if (kf.frame <= frame) {\n currentKeyframe = kf;\n } else {\n break;\n }\n }\n\n return currentKeyframe.vulnerable;\n}\n\n/**\n * Determine appropriate recovery animation from ground state\n *\n * Uses ground state to select default recovery animation.\n * Side positions default to roll recovery for dynamic movement.\n *\n * @param groundState - Current ground position\n * @returns Default recovery animation type\n *\n * @example\n * ```typescript\n * const recoveryType = determineRecoveryType(\"prone\");\n * // Returns: \"prone_standup\"\n *\n * const sideRecovery = determineRecoveryType(\"side_left\");\n * // Returns: \"roll_recovery\" (default for side positions)\n * ```\n *\n * @public\n * @korean 기상유형결정\n */\nexport function determineRecoveryType(\n groundState: GroundState\n): RecoveryAnimationType {\n return GROUND_STATE_TO_RECOVERY[groundState];\n}\n\n/**\n * Get recovery animation state from recovery type\n *\n * @param recoveryType - Recovery animation type\n * @returns Animation state name\n *\n * @public\n * @korean 기상애니메이션상태\n */\nexport function getRecoveryAnimationState(\n recoveryType: RecoveryAnimationType\n): string {\n return RECOVERY_TYPE_TO_ANIMATION[recoveryType];\n}\n\n/**\n * Recovery animation configuration\n *\n * Additional properties for recovery animations beyond base AnimationConfig.\n *\n * @korean 기상설정\n */\nexport interface RecoveryConfig {\n /** Recovery animation type */\n readonly type: RecoveryAnimationType;\n\n /** Stamina cost to execute (0 for normal recoveries) */\n readonly staminaCost: number;\n\n /** Damage reduction percentage during animation (0-1) */\n readonly damageReduction: number;\n\n /** Number of initial vulnerable frames (first N frames are vulnerable to damage) */\n readonly vulnerableFrames: number;\n\n /** Frame when player becomes interruptible (last 6 frames typically) */\n readonly interruptibleFrame: number;\n}\n\n/**\n * Recovery animation configurations\n *\n * Defines stamina costs, damage reduction, and vulnerability windows.\n *\n * @korean 기상설정맵\n */\nexport const RECOVERY_CONFIGS: Record<RecoveryAnimationType, RecoveryConfig> = {\n prone_standup: {\n type: \"prone_standup\",\n staminaCost: 0,\n damageReduction: 0,\n vulnerableFrames: 24, // Vulnerable for first 24 frames (80%)\n interruptibleFrame: 24, // Last 6 frames (25-30) are interruptible\n },\n supine_standup: {\n type: \"supine_standup\",\n staminaCost: 0,\n damageReduction: 0,\n vulnerableFrames: 30, // Vulnerable for first 30 frames (83%)\n interruptibleFrame: 30, // Last 6 frames (30-36) are interruptible\n },\n roll_recovery: {\n type: \"roll_recovery\",\n staminaCost: 20, // Costs stamina for speed\n damageReduction: 0,\n vulnerableFrames: 18, // Vulnerable for first 18 frames (75%)\n interruptibleFrame: 18, // Last 6 frames (18-24) are interruptible\n },\n defensive_getup: {\n type: \"defensive_getup\",\n staminaCost: 0,\n damageReduction: 0.5, // 50% damage reduction throughout\n vulnerableFrames: 36, // Vulnerable for first 36 frames (86%)\n interruptibleFrame: 36, // Last 6 frames (36-42) are interruptible\n },\n};\n\n/**\n * Get recovery configuration\n *\n * @param recoveryType - Recovery animation type\n * @returns Recovery configuration\n *\n * @public\n * @korean 기상설정가져오기\n */\nexport function getRecoveryConfig(\n recoveryType: RecoveryAnimationType\n): RecoveryConfig {\n return RECOVERY_CONFIGS[recoveryType];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RecoveryAnimations.js","names":[],"sources":["../../../../src/systems/animation/catalogs/RecoveryAnimations.ts"],"sourcesContent":["/**\n * Recovery Animation System for Black Trigram\n *\n * Implements realistic recovery animations for standing up from fallen states.\n * Based on Korean martial arts recovery techniques (기상 - Gisang).\n *\n * @module systems/animation/RecoveryAnimations\n * @category Animation\n * @korean 기상애니메이션\n */\n\nimport type { GroundState, RecoveryAnimationType } from \"../core/types\";\nimport {\n GROUND_STATE_TO_RECOVERY,\n RECOVERY_TYPE_TO_ANIMATION,\n} from \"../core/types\";\n\n/**\n * Recovery animation keyframe data structure\n *\n * Defines key poses during recovery animations for skeletal rendering.\n * Each keyframe specifies body positions at critical moments.\n *\n * @korean 기상키프레임\n */\nexport interface RecoveryKeyframe {\n /** Frame number (0-indexed) */\n readonly frame: number;\n\n /** Torso rotation (radians) */\n readonly torsoRotation: { x: number; y: number; z: number };\n\n /** Center of mass vertical position (0-1, 1=standing, 0=ground) */\n readonly centerOfMassHeight: number;\n\n /** Description of this keyframe */\n readonly description: {\n readonly korean: string;\n readonly english: string;\n };\n\n /** Whether player is vulnerable at this frame */\n readonly vulnerable: boolean;\n}\n\n/**\n * Prone stand-up keyframes (엎드린 기상)\n *\n * 30 frames (500ms) sequence:\n * - Frames 0-8: Push up with hands, torso lifts\n * - Frames 9-18: Legs swing under body, kneeling position\n * - Frames 19-24: Rise from kneeling to standing (vulnerable)\n * - Frames 25-29: Final stance adjustment (interruptible)\n *\n * @korean 엎드린기상키프레임\n */\nexport const RECOVERY_PRONE_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: 1.57, y: 0, z: 0 }, // Face down (90° forward)\n centerOfMassHeight: 0.05,\n description: {\n korean: \"엎드린 자세\",\n english: \"Prone position\",\n },\n vulnerable: true,\n },\n {\n frame: 8,\n torsoRotation: { x: 1.2, y: 0, z: 0 }, // Hands pushing, torso lifting\n centerOfMassHeight: 0.2,\n description: {\n korean: \"손으로 밀어 올리기\",\n english: \"Hands push up torso\",\n },\n vulnerable: true,\n },\n {\n frame: 18,\n torsoRotation: { x: 0.7, y: 0, z: 0 }, // Kneeling position\n centerOfMassHeight: 0.5,\n description: {\n korean: \"무릎 꿇기\",\n english: \"Kneeling position\",\n },\n vulnerable: true,\n },\n {\n frame: 24,\n torsoRotation: { x: 0.2, y: 0, z: 0 }, // Rising to standing\n centerOfMassHeight: 0.75,\n description: {\n korean: \"일어서기\",\n english: \"Rising to standing\",\n },\n vulnerable: false, // Last 6 frames (24-30) entering safe zone\n },\n {\n frame: 29,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Standing (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"서 있는 자세\",\n english: \"Standing stance\",\n },\n vulnerable: false, // Last 6 frames (25-30) are not vulnerable\n },\n] as const;\n\n/**\n * Supine stand-up keyframes (누운 기상)\n *\n * 36 frames (600ms) sequence:\n * - Frames 0-10: Abs crunch sit-up motion\n * - Frames 11-22: Forward roll onto feet\n * - Frames 23-30: Feet plant, rise to standing (vulnerable)\n * - Frames 31-35: Final stance adjustment (interruptible)\n *\n * @korean 누운기상키프레임\n */\nexport const RECOVERY_SUPINE_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: -1.57, y: 0, z: 0 }, // Face up (90° back)\n centerOfMassHeight: 0.05,\n description: {\n korean: \"누운 자세\",\n english: \"Supine position\",\n },\n vulnerable: true,\n },\n {\n frame: 10,\n torsoRotation: { x: -0.9, y: 0, z: 0 }, // Sit-up motion\n centerOfMassHeight: 0.3,\n description: {\n korean: \"윗몸 일으키기\",\n english: \"Sit-up motion\",\n },\n vulnerable: true,\n },\n {\n frame: 22,\n torsoRotation: { x: 0.4, y: 0, z: 0 }, // Forward roll\n centerOfMassHeight: 0.4,\n description: {\n korean: \"전방 구르기\",\n english: \"Forward roll\",\n },\n vulnerable: true,\n },\n {\n frame: 30,\n torsoRotation: { x: 0.2, y: 0, z: 0 }, // Feet planted, rising\n centerOfMassHeight: 0.7,\n description: {\n korean: \"발 디디고 일어서기\",\n english: \"Feet planted, rising\",\n },\n vulnerable: false, // Last 6 frames (30-36) entering safe zone\n },\n {\n frame: 35,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Standing (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"서 있는 자세\",\n english: \"Standing stance\",\n },\n vulnerable: false, // Last 6 frames (30-36) are not vulnerable\n },\n] as const;\n\n/**\n * Roll recovery keyframes (회전기상)\n *\n * 24 frames (400ms) sequence - FAST recovery\n * - Frames 0-6: Roll to side, momentum building\n * - Frames 7-14: Spring to feet with explosive movement\n * - Frames 15-18: Quick stance (vulnerable)\n * - Frames 19-23: Combat ready (interruptible)\n *\n * Costs 20 stamina for speed advantage.\n *\n * @korean 회전기상키프레임\n */\nexport const RECOVERY_ROLL_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: 0, y: 1.57, z: 1.57 }, // Side position (90° roll)\n centerOfMassHeight: 0.05,\n description: {\n korean: \"측면 자세\",\n english: \"Side position\",\n },\n vulnerable: true,\n },\n {\n frame: 6,\n torsoRotation: { x: 0.3, y: 0.8, z: 0.9 }, // Rolling motion\n centerOfMassHeight: 0.25,\n description: {\n korean: \"구르기 움직임\",\n english: \"Rolling motion\",\n },\n vulnerable: true,\n },\n {\n frame: 14,\n torsoRotation: { x: 0.4, y: 0, z: 0 }, // Springing to feet\n centerOfMassHeight: 0.6,\n description: {\n korean: \"발로 튀어오르기\",\n english: \"Spring to feet\",\n },\n vulnerable: true,\n },\n {\n frame: 18,\n torsoRotation: { x: 0.1, y: 0, z: 0 }, // Quick stance\n centerOfMassHeight: 0.85,\n description: {\n korean: \"빠른 자세\",\n english: \"Quick stance\",\n },\n vulnerable: false, // Last 6 frames (18-24) entering safe zone\n },\n {\n frame: 23,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Combat ready (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"전투 준비\",\n english: \"Combat ready\",\n },\n vulnerable: false, // Last 6 frames (18-24) are not vulnerable\n },\n] as const;\n\n/**\n * Defensive getup keyframes (방어기상)\n *\n * 42 frames (700ms) sequence - SLOW but protected\n * - Frames 0-14: Slow rise with arms guarding head/torso\n * - Frames 15-28: Gradual stand with maintained guard\n * - Frames 29-36: Stance formation with guard (50% damage reduction)\n * - Frames 37-41: Ready stance (interruptible)\n *\n * Provides 50% damage reduction throughout animation.\n *\n * @korean 방어기상키프레임\n */\nexport const RECOVERY_DEFENSIVE_KEYFRAMES: readonly RecoveryKeyframe[] = [\n {\n frame: 0,\n torsoRotation: { x: 1.2, y: 0, z: 0 }, // Grounded, arms up\n centerOfMassHeight: 0.05,\n description: {\n korean: \"지면에서 팔 올리기\",\n english: \"Grounded, arms up\",\n },\n vulnerable: true, // 50% damage reduction applies\n },\n {\n frame: 14,\n torsoRotation: { x: 0.9, y: 0, z: 0 }, // Slow rise, guard maintained\n centerOfMassHeight: 0.3,\n description: {\n korean: \"천천히 일어나며 방어\",\n english: \"Slow rise, guarded\",\n },\n vulnerable: true, // 50% damage reduction applies\n },\n {\n frame: 28,\n torsoRotation: { x: 0.5, y: 0, z: 0 }, // Gradual stand, guard up\n centerOfMassHeight: 0.6,\n description: {\n korean: \"점차 서며 방어 유지\",\n english: \"Gradual stand, guard up\",\n },\n vulnerable: true, // 50% damage reduction applies\n },\n {\n frame: 36,\n torsoRotation: { x: 0.2, y: 0, z: 0 }, // Stance formation, guarded\n centerOfMassHeight: 0.8,\n description: {\n korean: \"자세 형성, 방어 상태\",\n english: \"Stance formation, guarded\",\n },\n vulnerable: false, // Last 6 frames (36-42) entering safe zone (still 50% reduction)\n },\n {\n frame: 41,\n torsoRotation: { x: 0, y: 0, z: 0 }, // Ready stance (interruptible)\n centerOfMassHeight: 0.9,\n description: {\n korean: \"준비 자세\",\n english: \"Ready stance\",\n },\n vulnerable: false, // Last 6 frames (36-42) are not vulnerable\n },\n] as const;\n\n/**\n * Get keyframes for a specific recovery type\n *\n * @param recoveryType - Type of recovery animation\n * @returns Array of keyframes for that recovery type\n *\n * @korean 기상키프레임가져오기\n */\nexport function getRecoveryKeyframes(\n recoveryType: RecoveryAnimationType\n): readonly RecoveryKeyframe[] {\n switch (recoveryType) {\n case \"prone_standup\":\n return RECOVERY_PRONE_KEYFRAMES;\n case \"supine_standup\":\n return RECOVERY_SUPINE_KEYFRAMES;\n case \"roll_recovery\":\n return RECOVERY_ROLL_KEYFRAMES;\n case \"defensive_getup\":\n return RECOVERY_DEFENSIVE_KEYFRAMES;\n default:\n return RECOVERY_ROLL_KEYFRAMES;\n }\n}\n\n/**\n * Check if a frame in a recovery animation is vulnerable\n *\n * Vulnerability is determined by keyframe data. The last 6 frames\n * of each recovery animation are interruptible and not vulnerable.\n *\n * @param recoveryType - Type of recovery animation\n * @param frame - Current frame number (0-indexed)\n * @returns True if player is vulnerable at this frame\n *\n * @korean 취약프레임확인\n */\nexport function isVulnerableFrame(\n recoveryType: RecoveryAnimationType,\n frame: number\n): boolean {\n const keyframes = getRecoveryKeyframes(recoveryType);\n\n // Find the keyframe for this frame or the previous keyframe\n let currentKeyframe = keyframes[0];\n for (const kf of keyframes) {\n if (kf.frame <= frame) {\n currentKeyframe = kf;\n } else {\n break;\n }\n }\n\n return currentKeyframe.vulnerable;\n}\n\n/**\n * Determine appropriate recovery animation from ground state\n *\n * Uses ground state to select default recovery animation.\n * Side positions default to roll recovery for dynamic movement.\n *\n * @param groundState - Current ground position\n * @returns Default recovery animation type\n *\n * @example\n * ```typescript\n * const recoveryType = determineRecoveryType(\"prone\");\n * // Returns: \"prone_standup\"\n *\n * const sideRecovery = determineRecoveryType(\"side_left\");\n * // Returns: \"roll_recovery\" (default for side positions)\n * ```\n *\n * @korean 기상유형결정\n */\nexport function determineRecoveryType(\n groundState: GroundState\n): RecoveryAnimationType {\n return GROUND_STATE_TO_RECOVERY[groundState];\n}\n\n/**\n * Get recovery animation state from recovery type\n *\n * @param recoveryType - Recovery animation type\n * @returns Animation state name\n *\n * @korean 기상애니메이션상태\n */\nexport function getRecoveryAnimationState(\n recoveryType: RecoveryAnimationType\n): string {\n return RECOVERY_TYPE_TO_ANIMATION[recoveryType];\n}\n\n/**\n * Recovery animation configuration\n *\n * Additional properties for recovery animations beyond base AnimationConfig.\n *\n * @korean 기상설정\n */\nexport interface RecoveryConfig {\n /** Recovery animation type */\n readonly type: RecoveryAnimationType;\n\n /** Stamina cost to execute (0 for normal recoveries) */\n readonly staminaCost: number;\n\n /** Damage reduction percentage during animation (0-1) */\n readonly damageReduction: number;\n\n /** Number of initial vulnerable frames (first N frames are vulnerable to damage) */\n readonly vulnerableFrames: number;\n\n /** Frame when player becomes interruptible (last 6 frames typically) */\n readonly interruptibleFrame: number;\n}\n\n/**\n * Recovery animation configurations\n *\n * Defines stamina costs, damage reduction, and vulnerability windows.\n *\n * @korean 기상설정맵\n */\nexport const RECOVERY_CONFIGS: Record<RecoveryAnimationType, RecoveryConfig> = {\n prone_standup: {\n type: \"prone_standup\",\n staminaCost: 0,\n damageReduction: 0,\n vulnerableFrames: 24, // Vulnerable for first 24 frames (80%)\n interruptibleFrame: 24, // Last 6 frames (25-30) are interruptible\n },\n supine_standup: {\n type: \"supine_standup\",\n staminaCost: 0,\n damageReduction: 0,\n vulnerableFrames: 30, // Vulnerable for first 30 frames (83%)\n interruptibleFrame: 30, // Last 6 frames (30-36) are interruptible\n },\n roll_recovery: {\n type: \"roll_recovery\",\n staminaCost: 20, // Costs stamina for speed\n damageReduction: 0,\n vulnerableFrames: 18, // Vulnerable for first 18 frames (75%)\n interruptibleFrame: 18, // Last 6 frames (18-24) are interruptible\n },\n defensive_getup: {\n type: \"defensive_getup\",\n staminaCost: 0,\n damageReduction: 0.5, // 50% damage reduction throughout\n vulnerableFrames: 36, // Vulnerable for first 36 frames (86%)\n interruptibleFrame: 36, // Last 6 frames (36-42) are interruptible\n },\n};\n\n/**\n * Get recovery configuration\n *\n * @param recoveryType - Recovery animation type\n * @returns Recovery configuration\n *\n * @korean 기상설정가져오기\n */\nexport function getRecoveryConfig(\n recoveryType: RecoveryAnimationType\n): RecoveryConfig {\n return RECOVERY_CONFIGS[recoveryType];\n}\n"],"mappings":"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"}
@@ -44,7 +44,6 @@ import { AnimationType } from "../builders/MartialArtsAnimationBuilder";
44
44
  * };
45
45
  * ```
46
46
  *
47
- * @public
48
47
  * @korean 타격창타이밍
49
48
  */
50
49
  export interface AnimationHitWindow {
@@ -86,7 +85,6 @@ export interface AnimationHitWindow {
86
85
  *
87
86
  * **Korean**: 기술 타격 타이밍 설정
88
87
  *
89
- * @public
90
88
  * @korean 기술타격타이밍
91
89
  */
92
90
  export interface TechniqueHitTiming {
@@ -116,7 +114,6 @@ export interface TechniqueHitTiming {
116
114
  * Only includes timing for techniques with actual hit windows.
117
115
  * Movement and non-combat animations can query this and will get undefined.
118
116
  *
119
- * @public
120
117
  * @korean 애니메이션타격타이밍데이터베이스
121
118
  */
122
119
  export declare const ANIMATION_HIT_TIMING: Partial<Record<AnimationType, TechniqueHitTiming>>;
@@ -136,7 +133,6 @@ export declare const ANIMATION_HIT_TIMING: Partial<Record<AnimationType, Techniq
136
133
  * }
137
134
  * ```
138
135
  *
139
- * @public
140
136
  * @korean 애니메이션타격타이밍가져오기
141
137
  */
142
138
  export declare function getAnimationHitTiming(animationType: AnimationType): TechniqueHitTiming | undefined;
@@ -155,7 +151,6 @@ export declare function getAnimationHitTiming(animationType: AnimationType): Tec
155
151
  * // Returns true (0.15s is within jab's 0.10-0.25s window)
156
152
  * ```
157
153
  *
158
- * @public
159
154
  * @korean 타격가능시간확인
160
155
  */
161
156
  export declare function isWithinHitWindow(animationType: AnimationType, currentTime: number): boolean;
@@ -177,7 +172,6 @@ export declare function isWithinHitWindow(animationType: AnimationType, currentT
177
172
  * // Returns 0 (before hit window starts)
178
173
  * ```
179
174
  *
180
- * @public
181
175
  * @korean 현재도달배수계산
182
176
  */
183
177
  export declare function getCurrentReachMultiplier(animationType: AnimationType, currentTime: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationHitTiming.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/core/AnimationHitTiming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CACzC;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CACxC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAutB1C,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,aAAa,GAC3B,kBAAkB,GAAG,SAAS,CAEhC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,OAAO,CAQT;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,MAAM,CAkCR"}
1
+ {"version":3,"file":"AnimationHitTiming.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/core/AnimationHitTiming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CACzC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CACxC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAutB1C,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,aAAa,GAC3B,kBAAkB,GAAG,SAAS,CAEhC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,OAAO,CAQT;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,MAAM,CAkCR"}
@@ -36,7 +36,6 @@ import { AnimationType } from "../builders/MartialArtsConstants.js";
36
36
  * Only includes timing for techniques with actual hit windows.
37
37
  * Movement and non-combat animations can query this and will get undefined.
38
38
  *
39
- * @public
40
39
  * @korean 애니메이션타격타이밍데이터베이스
41
40
  */
42
41
  var ANIMATION_HIT_TIMING = {
@@ -697,7 +696,6 @@ var ANIMATION_HIT_TIMING = {
697
696
  * }
698
697
  * ```
699
698
  *
700
- * @public
701
699
  * @korean 애니메이션타격타이밍가져오기
702
700
  */
703
701
  function getAnimationHitTiming(animationType) {
@@ -718,7 +716,6 @@ function getAnimationHitTiming(animationType) {
718
716
  * // Returns true (0.15s is within jab's 0.10-0.25s window)
719
717
  * ```
720
718
  *
721
- * @public
722
719
  * @korean 타격가능시간확인
723
720
  */
724
721
  function isWithinHitWindow(animationType, currentTime) {
@@ -745,7 +742,6 @@ function isWithinHitWindow(animationType, currentTime) {
745
742
  * // Returns 0 (before hit window starts)
746
743
  * ```
747
744
  *
748
- * @public
749
745
  * @korean 현재도달배수계산
750
746
  */
751
747
  function getCurrentReachMultiplier(animationType, currentTime) {