blacktrigram 0.7.43 → 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 (750) 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/AudioPool.js +3 -0
  6. package/lib/audio/AudioPool.js.map +1 -1
  7. package/lib/audio/index.d.ts.map +1 -1
  8. package/lib/audio/index.js.map +1 -1
  9. package/lib/audio/types.d.ts +18 -2
  10. package/lib/audio/types.d.ts.map +1 -1
  11. package/lib/audio/types.js +1 -0
  12. package/lib/audio/types.js.map +1 -1
  13. package/lib/components/effects/WindParticles3D.d.ts.map +1 -1
  14. package/lib/components/index.d.ts.map +1 -1
  15. package/lib/components/index.js.map +1 -1
  16. package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
  17. package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
  18. package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts +0 -1
  19. package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts.map +1 -1
  20. package/lib/components/screens/combat/components/controls/KeyboardHints.js +0 -1
  21. package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
  22. package/lib/components/screens/combat/components/controls/PauseMenu.d.ts.map +1 -1
  23. package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
  24. package/lib/components/screens/combat/components/effects/ArterialSpray3D.d.ts.map +1 -1
  25. package/lib/components/screens/combat/components/effects/BloodDecals3D.d.ts.map +1 -1
  26. package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
  27. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts.map +1 -1
  28. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
  29. package/lib/components/screens/combat/components/effects/BloodParticles3D.d.ts.map +1 -1
  30. package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
  31. package/lib/components/screens/combat/components/effects/BloodViscosity3D.d.ts.map +1 -1
  32. package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
  33. package/lib/components/screens/combat/components/effects/BoneCrackParticles3D.d.ts.map +1 -1
  34. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.d.ts.map +1 -1
  35. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
  36. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts.map +1 -1
  37. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
  38. package/lib/components/screens/combat/components/effects/DustClouds3D.d.ts.map +1 -1
  39. package/lib/components/screens/combat/components/effects/EarthCrackEffect3D.d.ts.map +1 -1
  40. package/lib/components/screens/combat/components/effects/EarthHealingEffect3D.d.ts.map +1 -1
  41. package/lib/components/screens/combat/components/effects/ImpactSparks3D.d.ts.map +1 -1
  42. package/lib/components/screens/combat/components/effects/InternalDamage3D.d.ts.map +1 -1
  43. package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
  44. package/lib/components/screens/combat/components/effects/LiPrecisionTargetingOverlay.d.ts.map +1 -1
  45. package/lib/components/screens/combat/components/effects/NerveStrikeParticles3D.d.ts.map +1 -1
  46. package/lib/components/screens/combat/components/effects/PainVignette.d.ts.map +1 -1
  47. package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
  48. package/lib/components/screens/combat/components/effects/ParticleAudio3D.d.ts.map +1 -1
  49. package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
  50. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.d.ts.map +1 -1
  51. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
  52. package/lib/components/screens/combat/components/effects/WaterRipple3D.d.ts.map +1 -1
  53. package/lib/components/screens/combat/components/effects/WaterWave3D.d.ts.map +1 -1
  54. package/lib/components/screens/combat/components/effects/index.d.ts.map +1 -1
  55. package/lib/components/screens/combat/components/feedback/MatchCountdown.d.ts.map +1 -1
  56. package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
  57. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.d.ts.map +1 -1
  58. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
  59. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.d.ts.map +1 -1
  60. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
  61. package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
  62. package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
  63. package/lib/components/screens/combat/components/hud/CombatLeftHUD.d.ts.map +1 -1
  64. package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
  65. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts.map +1 -1
  66. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
  67. package/lib/components/screens/combat/components/hud/CombatRightHUD.d.ts.map +1 -1
  68. package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
  69. package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
  70. package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
  71. package/lib/components/screens/combat/components/hud/DifficultyIndicator.d.ts.map +1 -1
  72. package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
  73. package/lib/components/screens/combat/components/hud/FPSMonitor.d.ts.map +1 -1
  74. package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
  75. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts.map +1 -1
  76. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
  77. package/lib/components/screens/combat/components/indicators/BalanceIndicator.d.ts.map +1 -1
  78. package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
  79. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts +0 -1
  80. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts.map +1 -1
  81. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js +0 -1
  82. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
  83. package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts.map +1 -1
  84. package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
  85. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts +0 -2
  86. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts.map +1 -1
  87. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js +0 -1
  88. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
  89. package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
  90. package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
  91. package/lib/components/screens/combat/helpers/combatHelpers.d.ts.map +1 -1
  92. package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
  93. package/lib/components/screens/combat/hooks/useAICombat.d.ts.map +1 -1
  94. package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
  95. package/lib/components/screens/combat/hooks/useCombatActions.d.ts.map +1 -1
  96. package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
  97. package/lib/components/screens/combat/hooks/useCombatAttackMovement.d.ts.map +1 -1
  98. package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
  99. package/lib/components/screens/combat/hooks/useCombatAudio.d.ts.map +1 -1
  100. package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
  101. package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
  102. package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
  103. package/lib/components/screens/combat/hooks/useCombatState.d.ts.map +1 -1
  104. package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
  105. package/lib/components/screens/combat/hooks/useGrapplingAudio.d.ts.map +1 -1
  106. package/lib/components/screens/combat/hooks/usePreloadCombatAudio.d.ts.map +1 -1
  107. package/lib/components/screens/controls/ControlsScreen3D.d.ts.map +1 -1
  108. package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
  109. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.d.ts.map +1 -1
  110. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
  111. package/lib/components/screens/controls/components/GamepadVisualization3D.d.ts.map +1 -1
  112. package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
  113. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.d.ts.map +1 -1
  114. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
  115. package/lib/components/screens/controls/components/Key3D.d.ts.map +1 -1
  116. package/lib/components/screens/controls/components/Key3D.js.map +1 -1
  117. package/lib/components/screens/controls/components/VisualKeyboard3D.d.ts.map +1 -1
  118. package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
  119. package/lib/components/screens/controls/constants/ControlsConstants.d.ts.map +1 -1
  120. package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
  121. package/lib/components/screens/controls/hooks/useControlsState.d.ts.map +1 -1
  122. package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
  123. package/lib/components/screens/endscreen/EndScreen3D.d.ts.map +1 -1
  124. package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
  125. package/lib/components/screens/endscreen/components/DefeatAnimation3D.d.ts.map +1 -1
  126. package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
  127. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.d.ts.map +1 -1
  128. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
  129. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.d.ts.map +1 -1
  130. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
  131. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.d.ts.map +1 -1
  132. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
  133. package/lib/components/screens/endscreen/components/VictoryAnimation3D.d.ts.map +1 -1
  134. package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
  135. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.d.ts.map +1 -1
  136. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
  137. package/lib/components/screens/endscreen/components/index.d.ts.map +1 -1
  138. package/lib/components/screens/endscreen/index.d.ts.map +1 -1
  139. package/lib/components/screens/intro/IntroScreen3D.d.ts.map +1 -1
  140. package/lib/components/screens/intro/IntroScreen3D.js +1 -1
  141. package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
  142. package/lib/components/screens/intro/components/AbilityListOverlayHtml.d.ts.map +1 -1
  143. package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
  144. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.d.ts.map +1 -1
  145. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
  146. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.d.ts.map +1 -1
  147. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
  148. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.d.ts.map +1 -1
  149. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
  150. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.d.ts.map +1 -1
  151. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
  152. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.d.ts.map +1 -1
  153. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
  154. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.d.ts.map +1 -1
  155. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
  156. package/lib/components/screens/intro/components/StatBarOverlayHtml.d.ts.map +1 -1
  157. package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
  158. package/lib/components/screens/philosophy/PhilosophyScreen3D.d.ts.map +1 -1
  159. package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
  160. package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts +0 -1
  161. package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts.map +1 -1
  162. package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts +0 -1
  163. package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts.map +1 -1
  164. package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts +0 -1
  165. package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts.map +1 -1
  166. package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts +0 -1
  167. package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts.map +1 -1
  168. package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts +0 -1
  169. package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts.map +1 -1
  170. package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts +0 -1
  171. package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts.map +1 -1
  172. package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts +0 -1
  173. package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts.map +1 -1
  174. package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
  175. package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
  176. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.d.ts.map +1 -1
  177. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
  178. package/lib/components/screens/training/components/AnatomyOverlay3D.d.ts.map +1 -1
  179. package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
  180. package/lib/components/screens/training/components/DamageNumber3D.d.ts.map +1 -1
  181. package/lib/components/screens/training/components/FootPlacementMarkers3D.d.ts.map +1 -1
  182. package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
  183. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.d.ts.map +1 -1
  184. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
  185. package/lib/components/screens/training/components/HitFeedbackEffect3D.d.ts.map +1 -1
  186. package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
  187. package/lib/components/screens/training/components/TrainingAICharacter3D.d.ts.map +1 -1
  188. package/lib/components/screens/training/components/TrainingArena3D.d.ts.map +1 -1
  189. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.d.ts.map +1 -1
  190. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
  191. package/lib/components/screens/training/components/TrainingDummy3D.d.ts.map +1 -1
  192. package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
  193. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.d.ts.map +1 -1
  194. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
  195. package/lib/components/screens/training/components/TrainingHitEffects3D.d.ts.map +1 -1
  196. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.d.ts.map +1 -1
  197. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
  198. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.d.ts.map +1 -1
  199. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
  200. package/lib/components/screens/training/components/VitalPointMarker3D.d.ts.map +1 -1
  201. package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
  202. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.d.ts.map +1 -1
  203. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
  204. package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
  205. package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
  206. package/lib/components/screens/training/components/hud/TrainingLeftHUD.d.ts.map +1 -1
  207. package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
  208. package/lib/components/screens/training/components/hud/TrainingRightHUD.d.ts.map +1 -1
  209. package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
  210. package/lib/components/screens/training/components/hud/TrainingTopHUD.d.ts.map +1 -1
  211. package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
  212. package/lib/components/screens/training/components/index.d.ts.map +1 -1
  213. package/lib/components/screens/training/hooks/useAttackMovement.d.ts.map +1 -1
  214. package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
  215. package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
  216. package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
  217. package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
  218. package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
  219. package/lib/components/screens/training/hooks/useTrainingState.d.ts.map +1 -1
  220. package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
  221. package/lib/components/shared/base/AccessibilityProvider.d.ts.map +1 -1
  222. package/lib/components/shared/base/BaseButton.d.ts.map +1 -1
  223. package/lib/components/shared/base/BaseButton.js.map +1 -1
  224. package/lib/components/shared/base/BaseButtonOverlayHtml.d.ts.map +1 -1
  225. package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
  226. package/lib/components/shared/base/BasePanel.d.ts.map +1 -1
  227. package/lib/components/shared/base/BasePanel.js.map +1 -1
  228. package/lib/components/shared/base/BaseText.d.ts.map +1 -1
  229. package/lib/components/shared/base/BaseText.js.map +1 -1
  230. package/lib/components/shared/base/ResponsiveContainer.d.ts.map +1 -1
  231. package/lib/components/shared/base/index.d.ts.map +1 -1
  232. package/lib/components/shared/base/useKoreanTheme.d.ts.map +1 -1
  233. package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
  234. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.d.ts.map +1 -1
  235. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
  236. package/lib/components/shared/effects/ScreenFlash.d.ts.map +1 -1
  237. package/lib/components/shared/mobile/ActionButtons.d.ts.map +1 -1
  238. package/lib/components/shared/mobile/ActionButtons.js +0 -1
  239. package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
  240. package/lib/components/shared/mobile/GestureRecognizerPure.d.ts +0 -1
  241. package/lib/components/shared/mobile/GestureRecognizerPure.d.ts.map +1 -1
  242. package/lib/components/shared/mobile/GestureRecognizerPure.js +0 -1
  243. package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
  244. package/lib/components/shared/mobile/HapticController.d.ts +0 -13
  245. package/lib/components/shared/mobile/HapticController.d.ts.map +1 -1
  246. package/lib/components/shared/mobile/HapticController.js +0 -10
  247. package/lib/components/shared/mobile/HapticController.js.map +1 -1
  248. package/lib/components/shared/mobile/MobileControlsPure.d.ts.map +1 -1
  249. package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
  250. package/lib/components/shared/mobile/PerformanceMonitor.d.ts +0 -15
  251. package/lib/components/shared/mobile/PerformanceMonitor.d.ts.map +1 -1
  252. package/lib/components/shared/mobile/StanceWheelPure.d.ts +0 -1
  253. package/lib/components/shared/mobile/StanceWheelPure.d.ts.map +1 -1
  254. package/lib/components/shared/mobile/StanceWheelPure.js +0 -1
  255. package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
  256. package/lib/components/shared/mobile/TouchOptimizer.d.ts +0 -4
  257. package/lib/components/shared/mobile/TouchOptimizer.d.ts.map +1 -1
  258. package/lib/components/shared/mobile/TouchOptimizer.js +0 -3
  259. package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
  260. package/lib/components/shared/mobile/VirtualDPad.d.ts.map +1 -1
  261. package/lib/components/shared/mobile/VirtualDPad.js +0 -1
  262. package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
  263. package/lib/components/shared/mobile/index.d.ts.map +1 -1
  264. package/lib/components/shared/three/anatomy/BodySurface.d.ts.map +1 -1
  265. package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
  266. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.d.ts.map +1 -1
  267. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
  268. package/lib/components/shared/three/anatomy/BoneClothing.d.ts.map +1 -1
  269. package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
  270. package/lib/components/shared/three/anatomy/BoneRenderer.d.ts +0 -1
  271. package/lib/components/shared/three/anatomy/BoneRenderer.d.ts.map +1 -1
  272. package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
  273. package/lib/components/shared/three/anatomy/Face3D.d.ts.map +1 -1
  274. package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
  275. package/lib/components/shared/three/anatomy/Foot3D.d.ts +0 -1
  276. package/lib/components/shared/three/anatomy/Foot3D.d.ts.map +1 -1
  277. package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
  278. package/lib/components/shared/three/anatomy/Hand3D.d.ts +0 -1
  279. package/lib/components/shared/three/anatomy/Hand3D.d.ts.map +1 -1
  280. package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
  281. package/lib/components/shared/three/effects/ActionFeedback.d.ts.map +1 -1
  282. package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
  283. package/lib/components/shared/three/effects/DamageNumbers.d.ts.map +1 -1
  284. package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
  285. package/lib/components/shared/three/effects/ExplosiveBurstEffect3D.d.ts.map +1 -1
  286. package/lib/components/shared/three/effects/GrapplingIndicator3D.d.ts.map +1 -1
  287. package/lib/components/shared/three/effects/HitEffects3D.d.ts.map +1 -1
  288. package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
  289. package/lib/components/shared/three/effects/LimbExposureIndicator3D.d.ts.map +1 -1
  290. package/lib/components/shared/three/effects/NerveDisruptionEffect3D.d.ts.map +1 -1
  291. package/lib/components/shared/three/effects/PlayerStateIndicators.d.ts.map +1 -1
  292. package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
  293. package/lib/components/shared/three/effects/StanceSymbol3D.d.ts.map +1 -1
  294. package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
  295. package/lib/components/shared/three/effects/StanceTransitionEffect.d.ts.map +1 -1
  296. package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
  297. package/lib/components/shared/three/effects/ThunderEffect3D.d.ts.map +1 -1
  298. package/lib/components/shared/three/effects/VitalPointMarkers3D.d.ts.map +1 -1
  299. package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
  300. package/lib/components/shared/three/index.d.ts.map +1 -1
  301. package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts +0 -6
  302. package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts.map +1 -1
  303. package/lib/components/shared/three/indicators/ElementalColorSystem.js +0 -4
  304. package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
  305. package/lib/components/shared/three/indicators/GuardIndicator.d.ts +0 -1
  306. package/lib/components/shared/three/indicators/GuardIndicator.d.ts.map +1 -1
  307. package/lib/components/shared/three/indicators/GuardIndicator.js +0 -1
  308. package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
  309. package/lib/components/shared/three/indicators/HapticFeedback.d.ts +0 -7
  310. package/lib/components/shared/three/indicators/HapticFeedback.d.ts.map +1 -1
  311. package/lib/components/shared/three/indicators/HapticFeedback.js +0 -2
  312. package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
  313. package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts +0 -1
  314. package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts.map +1 -1
  315. package/lib/components/shared/three/indicators/StanceChangeIndicator.js +0 -1
  316. package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
  317. package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts +0 -1
  318. package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts.map +1 -1
  319. package/lib/components/shared/three/models/Player3DWithTransitions.d.ts.map +1 -1
  320. package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
  321. package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
  322. package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
  323. package/lib/components/shared/three/optimization/AdaptiveQuality.d.ts.map +1 -1
  324. package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
  325. package/lib/components/shared/three/optimization/InstancedGeometry.d.ts.map +1 -1
  326. package/lib/components/shared/three/optimization/LODSystem.d.ts.map +1 -1
  327. package/lib/components/shared/three/scene/AtmosphericParticles3D.d.ts.map +1 -1
  328. package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
  329. package/lib/components/shared/three/scene/BackgroundScene3D.d.ts.map +1 -1
  330. package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
  331. package/lib/components/shared/three/scene/CombatArena3D.d.ts.map +1 -1
  332. package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
  333. package/lib/components/shared/three/scene/DebugCollision.d.ts +0 -2
  334. package/lib/components/shared/three/scene/DebugCollision.d.ts.map +1 -1
  335. package/lib/components/shared/three/scene/KoreanSignage3D.d.ts.map +1 -1
  336. package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
  337. package/lib/components/shared/three/ui/ArchetypeCard.d.ts.map +1 -1
  338. package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
  339. package/lib/components/shared/three/ui/BodyPartHealthDisplay.d.ts.map +1 -1
  340. package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
  341. package/lib/components/shared/three/ui/BreathingIndicator.d.ts.map +1 -1
  342. package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
  343. package/lib/components/shared/three/ui/CombatReadinessBar.d.ts.map +1 -1
  344. package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
  345. package/lib/components/shared/three/ui/ComboCounter.d.ts.map +1 -1
  346. package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
  347. package/lib/components/shared/three/ui/HealthBar.d.ts.map +1 -1
  348. package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
  349. package/lib/components/shared/three/ui/KoreanButton.d.ts.map +1 -1
  350. package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
  351. package/lib/components/shared/three/ui/KoreanPanel.d.ts.map +1 -1
  352. package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
  353. package/lib/components/shared/three/ui/KoreanText.d.ts.map +1 -1
  354. package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
  355. package/lib/components/shared/three/ui/MenuList.d.ts.map +1 -1
  356. package/lib/components/shared/three/ui/MenuList.js.map +1 -1
  357. package/lib/components/shared/three/ui/PlayerHUD.d.ts.map +1 -1
  358. package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
  359. package/lib/components/shared/three/ui/ProgressBar.d.ts.map +1 -1
  360. package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
  361. package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts +0 -1
  362. package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts.map +1 -1
  363. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js +0 -1
  364. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
  365. package/lib/components/shared/three/ui/StaminaBar.d.ts.map +1 -1
  366. package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
  367. package/lib/components/shared/three/ui/TechniqueBar.d.ts.map +1 -1
  368. package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
  369. package/lib/components/shared/three/ui/TechniqueBarContainer.d.ts.map +1 -1
  370. package/lib/components/shared/three/ui/TechniqueCard.d.ts.map +1 -1
  371. package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
  372. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.d.ts.map +1 -1
  373. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
  374. package/lib/components/shared/three/ui/VulnerabilityWindowHUD.d.ts.map +1 -1
  375. package/lib/components/shared/ui/BaseHUDContainer.d.ts.map +1 -1
  376. package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
  377. package/lib/components/shared/ui/CombatTimer.d.ts.map +1 -1
  378. package/lib/components/shared/ui/CombatTimer.js.map +1 -1
  379. package/lib/components/shared/ui/ErrorBoundary.d.ts.map +1 -1
  380. package/lib/components/shared/ui/ErrorModal.d.ts.map +1 -1
  381. package/lib/components/shared/ui/ErrorModal.js.map +1 -1
  382. package/lib/components/shared/ui/HUDSection.d.ts.map +1 -1
  383. package/lib/components/shared/ui/LoadingState.d.ts.map +1 -1
  384. package/lib/components/shared/ui/LoadingState.js.map +1 -1
  385. package/lib/components/shared/ui/MobileHUDLayout.d.ts +0 -1
  386. package/lib/components/shared/ui/MobileHUDLayout.d.ts.map +1 -1
  387. package/lib/components/shared/ui/ResponsiveContainer.d.ts +0 -1
  388. package/lib/components/shared/ui/ResponsiveContainer.d.ts.map +1 -1
  389. package/lib/components/shared/ui/SplashScreen.d.ts.map +1 -1
  390. package/lib/components/shared/ui/SplashScreen.js +2 -2
  391. package/lib/components/shared/ui/SplashScreen.js.map +1 -1
  392. package/lib/components/shared/ui/StyledHUDPanel.d.ts.map +1 -1
  393. package/lib/components/shared/ui/VitalPointOverlayControlsPure.d.ts.map +1 -1
  394. package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
  395. package/lib/components/shared/ui/VolumeControl.d.ts.map +1 -1
  396. package/lib/components/shared/ui/VolumeControl.js.map +1 -1
  397. package/lib/components/shared/ui/shared/ConfirmDialog.d.ts.map +1 -1
  398. package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
  399. package/lib/components/test/Hello3D.d.ts.map +1 -1
  400. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.d.ts.map +1 -1
  401. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
  402. package/lib/components/ui/combat/ComboCounter.d.ts.map +1 -1
  403. package/lib/components/ui/combat/PressureMeter.d.ts.map +1 -1
  404. package/lib/systems/CombatSystem.d.ts +0 -6
  405. package/lib/systems/CombatSystem.d.ts.map +1 -1
  406. package/lib/systems/CombatSystem.js +0 -6
  407. package/lib/systems/CombatSystem.js.map +1 -1
  408. package/lib/systems/EffectCalculator.d.ts +0 -7
  409. package/lib/systems/EffectCalculator.d.ts.map +1 -1
  410. package/lib/systems/EffectCalculator.js +0 -4
  411. package/lib/systems/EffectCalculator.js.map +1 -1
  412. package/lib/systems/LayoutSystem.d.ts +0 -1
  413. package/lib/systems/LayoutSystem.d.ts.map +1 -1
  414. package/lib/systems/LayoutSystem.js +0 -1
  415. package/lib/systems/LayoutSystem.js.map +1 -1
  416. package/lib/systems/PlayerEffectManager.d.ts +0 -10
  417. package/lib/systems/PlayerEffectManager.d.ts.map +1 -1
  418. package/lib/systems/PlayerEffectManager.js +0 -3
  419. package/lib/systems/PlayerEffectManager.js.map +1 -1
  420. package/lib/systems/ResponsiveScaling.d.ts +0 -12
  421. package/lib/systems/ResponsiveScaling.d.ts.map +1 -1
  422. package/lib/systems/ResponsiveScaling.js +0 -12
  423. package/lib/systems/ResponsiveScaling.js.map +1 -1
  424. package/lib/systems/TrigramSystem.d.ts +0 -13
  425. package/lib/systems/TrigramSystem.d.ts.map +1 -1
  426. package/lib/systems/TrigramSystem.js +0 -13
  427. package/lib/systems/TrigramSystem.js.map +1 -1
  428. package/lib/systems/VitalPointSystem.d.ts +0 -10
  429. package/lib/systems/VitalPointSystem.d.ts.map +1 -1
  430. package/lib/systems/VitalPointSystem.js +0 -10
  431. package/lib/systems/VitalPointSystem.js.map +1 -1
  432. package/lib/systems/animation/builders/KeyframeInterpolation.d.ts +0 -4
  433. package/lib/systems/animation/builders/KeyframeInterpolation.d.ts.map +1 -1
  434. package/lib/systems/animation/builders/KeyframeInterpolation.js +0 -1
  435. package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
  436. package/lib/systems/animation/builders/SkeletonRig.d.ts +0 -4
  437. package/lib/systems/animation/builders/SkeletonRig.d.ts.map +1 -1
  438. package/lib/systems/animation/builders/SkeletonRig.js +0 -3
  439. package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
  440. package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts +0 -5
  441. package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts.map +1 -1
  442. package/lib/systems/animation/catalogs/RecoveryAnimations.js +0 -5
  443. package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
  444. package/lib/systems/animation/core/AnimationHitTiming.d.ts +0 -6
  445. package/lib/systems/animation/core/AnimationHitTiming.d.ts.map +1 -1
  446. package/lib/systems/animation/core/AnimationHitTiming.js +0 -4
  447. package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
  448. package/lib/systems/animation/core/AnimationStateMachine.js +1 -0
  449. package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
  450. package/lib/systems/animation/core/AnimationTransitions.d.ts +0 -3
  451. package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
  452. package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
  453. package/lib/systems/animation/core/LateralityTransform.d.ts +0 -3
  454. package/lib/systems/animation/core/LateralityTransform.d.ts.map +1 -1
  455. package/lib/systems/animation/core/LateralityTransform.js +0 -1
  456. package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
  457. package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts +0 -1
  458. package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts.map +1 -1
  459. package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
  460. package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts +0 -10
  461. package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts.map +1 -1
  462. package/lib/systems/animation/core/TechniqueAnimationMapper.js +0 -8
  463. package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
  464. package/lib/systems/animation/core/TrigramAnimationMapping.d.ts +0 -10
  465. package/lib/systems/animation/core/TrigramAnimationMapping.d.ts.map +1 -1
  466. package/lib/systems/animation/core/TrigramStanceTransitions.d.ts +0 -2
  467. package/lib/systems/animation/core/TrigramStanceTransitions.d.ts.map +1 -1
  468. package/lib/systems/animation/core/types.d.ts +0 -39
  469. package/lib/systems/animation/core/types.d.ts.map +1 -1
  470. package/lib/systems/animation/core/types.js +0 -9
  471. package/lib/systems/animation/core/types.js.map +1 -1
  472. package/lib/systems/animation/systems/AdvancedJointMovements.d.ts +0 -27
  473. package/lib/systems/animation/systems/AdvancedJointMovements.d.ts.map +1 -1
  474. package/lib/systems/animation/systems/AdvancedJointMovements.js +0 -1
  475. package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
  476. package/lib/systems/animation/systems/BodyFacingSystem.d.ts +0 -19
  477. package/lib/systems/animation/systems/BodyFacingSystem.d.ts.map +1 -1
  478. package/lib/systems/animation/systems/BodyFacingSystem.js +0 -14
  479. package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
  480. package/lib/systems/animation/systems/FacialExpressions.d.ts +0 -10
  481. package/lib/systems/animation/systems/FacialExpressions.d.ts.map +1 -1
  482. package/lib/systems/animation/systems/FacialExpressions.js +0 -2
  483. package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
  484. package/lib/systems/animation/systems/FallAnimations.d.ts +0 -4
  485. package/lib/systems/animation/systems/FallAnimations.d.ts.map +1 -1
  486. package/lib/systems/animation/systems/FallAnimations.js +0 -2
  487. package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
  488. package/lib/systems/animation/systems/HeadMovements.d.ts +0 -10
  489. package/lib/systems/animation/systems/HeadMovements.d.ts.map +1 -1
  490. package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts +0 -7
  491. package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts.map +1 -1
  492. package/lib/systems/bodypart/BodyPartDamageIntegration.js +0 -7
  493. package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
  494. package/lib/systems/bodypart/BodyPartHealthSystem.d.ts +0 -13
  495. package/lib/systems/bodypart/BodyPartHealthSystem.d.ts.map +1 -1
  496. package/lib/systems/bodypart/BodyPartHealthSystem.js +0 -13
  497. package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
  498. package/lib/systems/bodypart/BodyPartPositionMapping.d.ts +0 -6
  499. package/lib/systems/bodypart/BodyPartPositionMapping.d.ts.map +1 -1
  500. package/lib/systems/bodypart/BodyPartPositionMapping.js +0 -6
  501. package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
  502. package/lib/systems/bodypart/CombatInjuryIntegration.d.ts +0 -10
  503. package/lib/systems/bodypart/CombatInjuryIntegration.d.ts.map +1 -1
  504. package/lib/systems/bodypart/CombatInjuryIntegration.js +0 -8
  505. package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
  506. package/lib/systems/bodypart/InjuryIntegration.d.ts +0 -2
  507. package/lib/systems/bodypart/InjuryIntegration.d.ts.map +1 -1
  508. package/lib/systems/bodypart/InjuryIntegration.js +0 -2
  509. package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
  510. package/lib/systems/bodypart/InjuryTracker.d.ts +0 -14
  511. package/lib/systems/bodypart/InjuryTracker.d.ts.map +1 -1
  512. package/lib/systems/bodypart/InjuryTracker.js +0 -12
  513. package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
  514. package/lib/systems/bodypart/MovementPenaltySystem.d.ts +0 -8
  515. package/lib/systems/bodypart/MovementPenaltySystem.d.ts.map +1 -1
  516. package/lib/systems/bodypart/MovementPenaltySystem.js +0 -8
  517. package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
  518. package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts +0 -8
  519. package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts.map +1 -1
  520. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js +0 -8
  521. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
  522. package/lib/systems/bodypart/types.d.ts +0 -13
  523. package/lib/systems/bodypart/types.d.ts.map +1 -1
  524. package/lib/systems/bodypart/types.js +0 -5
  525. package/lib/systems/bodypart/types.js.map +1 -1
  526. package/lib/systems/breathing/BreathingDisruptionSystem.d.ts +0 -3
  527. package/lib/systems/breathing/BreathingDisruptionSystem.d.ts.map +1 -1
  528. package/lib/systems/breathing/BreathingDisruptionSystem.js +0 -2
  529. package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
  530. package/lib/systems/combat/BalanceSystem.d.ts +0 -25
  531. package/lib/systems/combat/BalanceSystem.d.ts.map +1 -1
  532. package/lib/systems/combat/BalanceSystem.js +0 -25
  533. package/lib/systems/combat/BalanceSystem.js.map +1 -1
  534. package/lib/systems/combat/BreakingStatusEffects.d.ts +0 -4
  535. package/lib/systems/combat/BreakingStatusEffects.d.ts.map +1 -1
  536. package/lib/systems/combat/BreakingStatusEffects.js +0 -3
  537. package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
  538. package/lib/systems/combat/CombatStateSystem.d.ts +0 -9
  539. package/lib/systems/combat/CombatStateSystem.d.ts.map +1 -1
  540. package/lib/systems/combat/CombatStateSystem.js +0 -9
  541. package/lib/systems/combat/CombatStateSystem.js.map +1 -1
  542. package/lib/systems/combat/ConsciousnessSystem.d.ts +0 -16
  543. package/lib/systems/combat/ConsciousnessSystem.d.ts.map +1 -1
  544. package/lib/systems/combat/ConsciousnessSystem.js +0 -16
  545. package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
  546. package/lib/systems/combat/FallIntegration.d.ts +0 -3
  547. package/lib/systems/combat/FallIntegration.d.ts.map +1 -1
  548. package/lib/systems/combat/FallIntegration.js +0 -3
  549. package/lib/systems/combat/FallIntegration.js.map +1 -1
  550. package/lib/systems/combat/GrappleSystem.d.ts +0 -2
  551. package/lib/systems/combat/GrappleSystem.d.ts.map +1 -1
  552. package/lib/systems/combat/GrappleSystem.js +0 -2
  553. package/lib/systems/combat/GrappleSystem.js.map +1 -1
  554. package/lib/systems/combat/LimbExposureSystem.d.ts +0 -7
  555. package/lib/systems/combat/LimbExposureSystem.d.ts.map +1 -1
  556. package/lib/systems/combat/LimbExposureSystem.js +0 -7
  557. package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
  558. package/lib/systems/combat/PainResponseSystem.d.ts +0 -11
  559. package/lib/systems/combat/PainResponseSystem.d.ts.map +1 -1
  560. package/lib/systems/combat/PainResponseSystem.js +0 -11
  561. package/lib/systems/combat/PainResponseSystem.js.map +1 -1
  562. package/lib/systems/combat/painConsciousnessUtils.d.ts +0 -7
  563. package/lib/systems/combat/painConsciousnessUtils.d.ts.map +1 -1
  564. package/lib/systems/combat/painConsciousnessUtils.js +0 -7
  565. package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
  566. package/lib/systems/effects.d.ts +11 -0
  567. package/lib/systems/effects.d.ts.map +1 -1
  568. package/lib/systems/effects.js +10 -0
  569. package/lib/systems/effects.js.map +1 -1
  570. package/lib/systems/game.d.ts +16 -0
  571. package/lib/systems/game.d.ts.map +1 -1
  572. package/lib/systems/game.js +1 -0
  573. package/lib/systems/game.js.map +1 -1
  574. package/lib/systems/index.d.ts +5 -1
  575. package/lib/systems/index.d.ts.map +1 -1
  576. package/lib/systems/index.js.map +1 -1
  577. package/lib/systems/movement/InjuryMovementModifier.d.ts +0 -10
  578. package/lib/systems/movement/InjuryMovementModifier.d.ts.map +1 -1
  579. package/lib/systems/movement/InjuryMovementModifier.js +0 -7
  580. package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
  581. package/lib/systems/movement/integration.d.ts +0 -3
  582. package/lib/systems/movement/integration.d.ts.map +1 -1
  583. package/lib/systems/movement/integration.js +0 -3
  584. package/lib/systems/movement/integration.js.map +1 -1
  585. package/lib/systems/physics/AttackMovementPhysics.d.ts +0 -9
  586. package/lib/systems/physics/AttackMovementPhysics.d.ts.map +1 -1
  587. package/lib/systems/physics/AttackMovementPhysics.js +0 -7
  588. package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
  589. package/lib/systems/physics/CollisionDetection.d.ts +0 -6
  590. package/lib/systems/physics/CollisionDetection.d.ts.map +1 -1
  591. package/lib/systems/physics/CollisionDetection.js +0 -6
  592. package/lib/systems/physics/CollisionDetection.js.map +1 -1
  593. package/lib/systems/physics/CoordinateMapper.d.ts +0 -1
  594. package/lib/systems/physics/CoordinateMapper.d.ts.map +1 -1
  595. package/lib/systems/physics/CoordinateMapper.js +0 -1
  596. package/lib/systems/physics/CoordinateMapper.js.map +1 -1
  597. package/lib/systems/physics/KnockbackPhysics.d.ts +0 -11
  598. package/lib/systems/physics/KnockbackPhysics.d.ts.map +1 -1
  599. package/lib/systems/physics/KnockbackPhysics.js +0 -8
  600. package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
  601. package/lib/systems/physics/MovementPhysics.d.ts +0 -10
  602. package/lib/systems/physics/MovementPhysics.d.ts.map +1 -1
  603. package/lib/systems/physics/MovementPhysics.js +0 -8
  604. package/lib/systems/physics/MovementPhysics.js.map +1 -1
  605. package/lib/systems/physics/PhysicalReachCalculator.d.ts +0 -6
  606. package/lib/systems/physics/PhysicalReachCalculator.d.ts.map +1 -1
  607. package/lib/systems/physics/PhysicalReachCalculator.js +0 -5
  608. package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
  609. package/lib/systems/physics/SpeedModifierSystem.d.ts +0 -5
  610. package/lib/systems/physics/SpeedModifierSystem.d.ts.map +1 -1
  611. package/lib/systems/physics/SpeedModifierSystem.js +0 -4
  612. package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
  613. package/lib/systems/player.d.ts +0 -5
  614. package/lib/systems/player.d.ts.map +1 -1
  615. package/lib/systems/trigram/TrigramCalculator.d.ts +0 -1
  616. package/lib/systems/trigram/TrigramCalculator.d.ts.map +1 -1
  617. package/lib/systems/trigram/TrigramCalculator.js +0 -1
  618. package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
  619. package/lib/systems/trigram/types.d.ts +0 -4
  620. package/lib/systems/trigram/types.d.ts.map +1 -1
  621. package/lib/systems/trigram/types.js +0 -2
  622. package/lib/systems/trigram/types.js.map +1 -1
  623. package/lib/systems/types.d.ts +7 -2
  624. package/lib/systems/types.d.ts.map +1 -1
  625. package/lib/systems/types.js.map +1 -1
  626. package/lib/systems/vitalpoint/DamageCalculator.d.ts +0 -3
  627. package/lib/systems/vitalpoint/DamageCalculator.d.ts.map +1 -1
  628. package/lib/systems/vitalpoint/DamageCalculator.js +0 -3
  629. package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
  630. package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts +0 -8
  631. package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts.map +1 -1
  632. package/lib/systems/vitalpoint/KoreanVitalPoints.js +0 -8
  633. package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
  634. package/lib/systems/vitalpoint/VitalPointsData.d.ts +0 -3
  635. package/lib/systems/vitalpoint/VitalPointsData.d.ts.map +1 -1
  636. package/lib/systems/vitalpoint/VitalPointsData.js +0 -1
  637. package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
  638. package/lib/types/PhysicsTypes.d.ts +21 -78
  639. package/lib/types/PhysicsTypes.d.ts.map +1 -1
  640. package/lib/types/PhysicsTypes.js +17 -63
  641. package/lib/types/PhysicsTypes.js.map +1 -1
  642. package/lib/types/clothing.d.ts +0 -9
  643. package/lib/types/clothing.d.ts.map +1 -1
  644. package/lib/types/constants/animations.d.ts +35 -1
  645. package/lib/types/constants/animations.d.ts.map +1 -1
  646. package/lib/types/constants/animations.js +12 -1
  647. package/lib/types/constants/animations.js.map +1 -1
  648. package/lib/types/constants/colors.d.ts +28 -2
  649. package/lib/types/constants/colors.d.ts.map +1 -1
  650. package/lib/types/constants/colors.js +30 -4
  651. package/lib/types/constants/colors.js.map +1 -1
  652. package/lib/types/constants/index.d.ts +5 -1
  653. package/lib/types/constants/index.d.ts.map +1 -1
  654. package/lib/types/constants/index.js.map +1 -1
  655. package/lib/types/constants/performance.d.ts +0 -2
  656. package/lib/types/constants/performance.d.ts.map +1 -1
  657. package/lib/types/constants/performance.js +0 -2
  658. package/lib/types/constants/performance.js.map +1 -1
  659. package/lib/types/constants/typography.d.ts +40 -2
  660. package/lib/types/constants/typography.d.ts.map +1 -1
  661. package/lib/types/constants/typography.js +40 -2
  662. package/lib/types/constants/typography.js.map +1 -1
  663. package/lib/types/constants/ui.d.ts +89 -1
  664. package/lib/types/constants/ui.d.ts.map +1 -1
  665. package/lib/types/constants/ui.js +33 -1
  666. package/lib/types/constants/ui.js.map +1 -1
  667. package/lib/types/facial.d.ts +0 -15
  668. package/lib/types/facial.d.ts.map +1 -1
  669. package/lib/types/facial.js +0 -8
  670. package/lib/types/facial.js.map +1 -1
  671. package/lib/types/hand-animation.d.ts +34 -147
  672. package/lib/types/hand-animation.d.ts.map +1 -1
  673. package/lib/types/hand-animation.js +0 -2
  674. package/lib/types/hand-animation.js.map +1 -1
  675. package/lib/types/injury.d.ts +0 -2
  676. package/lib/types/injury.d.ts.map +1 -1
  677. package/lib/types/injury.js +0 -1
  678. package/lib/types/injury.js.map +1 -1
  679. package/lib/types/physics.d.ts +0 -21
  680. package/lib/types/physics.d.ts.map +1 -1
  681. package/lib/types/physics.js +0 -6
  682. package/lib/types/physics.js.map +1 -1
  683. package/lib/types/physicsConstants.d.ts +0 -12
  684. package/lib/types/physicsConstants.d.ts.map +1 -1
  685. package/lib/types/physicsConstants.js +0 -12
  686. package/lib/types/physicsConstants.js.map +1 -1
  687. package/lib/types/player-visual.d.ts +45 -189
  688. package/lib/types/player-visual.d.ts.map +1 -1
  689. package/lib/types/technique.d.ts +1 -5
  690. package/lib/types/technique.d.ts.map +1 -1
  691. package/lib/types/techniqueId.d.ts +0 -1
  692. package/lib/types/techniqueId.d.ts.map +1 -1
  693. package/lib/types/techniqueId.js +0 -1
  694. package/lib/types/techniqueId.js.map +1 -1
  695. package/lib/utils/arenaWorldDimensions.d.ts +0 -11
  696. package/lib/utils/arenaWorldDimensions.d.ts.map +1 -1
  697. package/lib/utils/arenaWorldDimensions.js +0 -6
  698. package/lib/utils/arenaWorldDimensions.js.map +1 -1
  699. package/lib/utils/controlMapping.d.ts +3 -4
  700. package/lib/utils/controlMapping.d.ts.map +1 -1
  701. package/lib/utils/controlMapping.js +1 -2
  702. package/lib/utils/controlMapping.js.map +1 -1
  703. package/lib/utils/deviceDetection.d.ts +0 -5
  704. package/lib/utils/deviceDetection.d.ts.map +1 -1
  705. package/lib/utils/deviceDetection.js +0 -5
  706. package/lib/utils/deviceDetection.js.map +1 -1
  707. package/lib/utils/hapticFeedback.d.ts +23 -95
  708. package/lib/utils/hapticFeedback.d.ts.map +1 -1
  709. package/lib/utils/hapticFeedback.js +9 -39
  710. package/lib/utils/hapticFeedback.js.map +1 -1
  711. package/lib/utils/haptics.d.ts +0 -3
  712. package/lib/utils/haptics.d.ts.map +1 -1
  713. package/lib/utils/haptics.js +0 -1
  714. package/lib/utils/haptics.js.map +1 -1
  715. package/lib/utils/math.d.ts +0 -3
  716. package/lib/utils/math.d.ts.map +1 -1
  717. package/lib/utils/math.js +0 -2
  718. package/lib/utils/math.js.map +1 -1
  719. package/lib/utils/mobileLayoutHelpers.d.ts +0 -3
  720. package/lib/utils/mobileLayoutHelpers.d.ts.map +1 -1
  721. package/lib/utils/mobileLayoutHelpers.js +0 -1
  722. package/lib/utils/mobileLayoutHelpers.js.map +1 -1
  723. package/lib/utils/mobileUIUtils.d.ts +5 -100
  724. package/lib/utils/mobileUIUtils.d.ts.map +1 -1
  725. package/lib/utils/mobileUIUtils.js +0 -9
  726. package/lib/utils/mobileUIUtils.js.map +1 -1
  727. package/lib/utils/physicalAttributeValidation.d.ts.map +1 -1
  728. package/lib/utils/player3DHelpers.d.ts.map +1 -1
  729. package/lib/utils/player3DHelpers.js.map +1 -1
  730. package/lib/utils/responsiveLayoutHelpers.d.ts +0 -65
  731. package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
  732. package/lib/utils/responsiveLayoutHelpers.js +0 -65
  733. package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
  734. package/lib/utils/responsiveOrientationConstants.d.ts +0 -7
  735. package/lib/utils/responsiveOrientationConstants.d.ts.map +1 -1
  736. package/lib/utils/responsiveOrientationConstants.js +0 -7
  737. package/lib/utils/responsiveOrientationConstants.js.map +1 -1
  738. package/lib/utils/safeAreaUtils.d.ts +0 -6
  739. package/lib/utils/safeAreaUtils.d.ts.map +1 -1
  740. package/lib/utils/safeAreaUtils.js +0 -2
  741. package/lib/utils/safeAreaUtils.js.map +1 -1
  742. package/lib/utils/sharedPhysicsConfig.d.ts +0 -4
  743. package/lib/utils/sharedPhysicsConfig.d.ts.map +1 -1
  744. package/lib/utils/sharedPhysicsConfig.js +0 -2
  745. package/lib/utils/sharedPhysicsConfig.js.map +1 -1
  746. package/lib/utils/skeletonScaling.d.ts +0 -9
  747. package/lib/utils/skeletonScaling.d.ts.map +1 -1
  748. package/lib/utils/skeletonScaling.js +0 -1
  749. package/lib/utils/skeletonScaling.js.map +1 -1
  750. package/package.json +11 -11
@@ -80,7 +80,6 @@ var BalanceLevel = /* @__PURE__ */ function(BalanceLevel) {
80
80
  * const recovered = balanceSystem.applyRecovery(newPlayer, 1000);
81
81
  * ```
82
82
  *
83
- * @public
84
83
  * @korean 균형시스템
85
84
  */
86
85
  var BalanceSystem = class {
@@ -184,7 +183,6 @@ var BalanceSystem = class {
184
183
  * );
185
184
  * ```
186
185
  *
187
- * @public
188
186
  * @korean 균형파괴
189
187
  */
190
188
  disruptBalance(player, impact, region, currentTime) {
@@ -219,7 +217,6 @@ var BalanceSystem = class {
219
217
  * player = system.applyRecovery(player, 16); // ~60fps
220
218
  * ```
221
219
  *
222
- * @public
223
220
  * @korean 균형회복
224
221
  */
225
222
  applyRecovery(player, deltaTime) {
@@ -245,7 +242,6 @@ var BalanceSystem = class {
245
242
  * @param balance - Balance value (0-100)
246
243
  * @returns Current balance level
247
244
  *
248
- * @public
249
245
  * @korean 균형수준확인
250
246
  */
251
247
  getBalanceLevel(balance) {
@@ -260,7 +256,6 @@ var BalanceSystem = class {
260
256
  * @param level - Balance level
261
257
  * @returns Effects applied at that level
262
258
  *
263
- * @public
264
259
  * @korean 균형효과
265
260
  */
266
261
  getEffects(level) {
@@ -274,7 +269,6 @@ var BalanceSystem = class {
274
269
  * @param player - Current player state
275
270
  * @returns Modified player state with balance effects
276
271
  *
277
- * @public
278
272
  * @korean 균형효과적용
279
273
  */
280
274
  applyEffects(player) {
@@ -292,7 +286,6 @@ var BalanceSystem = class {
292
286
  * @param player - Current player state
293
287
  * @returns True if off-balance or falling
294
288
  *
295
- * @public
296
289
  * @korean 균형취약확인
297
290
  */
298
291
  isVulnerable(player) {
@@ -305,7 +298,6 @@ var BalanceSystem = class {
305
298
  * @param player - Current player state
306
299
  * @returns Damage multiplier (1.0 = normal, >1.0 = increased damage)
307
300
  *
308
- * @public
309
301
  * @korean 취약성배율
310
302
  */
311
303
  getVulnerabilityMultiplier(player) {
@@ -319,7 +311,6 @@ var BalanceSystem = class {
319
311
  * @param randomFn - Optional random number generator (returns number in [0,1)), defaults to Math.random
320
312
  * @returns True if knockdown should occur
321
313
  *
322
- * @public
323
314
  * @korean 넘어짐확인
324
315
  */
325
316
  shouldKnockdown(player, randomFn = Math.random) {
@@ -333,7 +324,6 @@ var BalanceSystem = class {
333
324
  * @param level - Balance level
334
325
  * @returns Korean and English level names
335
326
  *
336
- * @public
337
327
  * @korean 균형이름
338
328
  */
339
329
  getLevelName(level) {
@@ -362,7 +352,6 @@ var BalanceSystem = class {
362
352
  * @param level - Balance level
363
353
  * @returns Hex color code
364
354
  *
365
- * @public
366
355
  * @korean 균형색상
367
356
  */
368
357
  getLevelColor(level) {
@@ -394,7 +383,6 @@ var BalanceSystem = class {
394
383
  * }
395
384
  * ```
396
385
  *
397
- * @public
398
386
  * @korean 낙법발동확인
399
387
  */
400
388
  shouldTriggerFall(player) {
@@ -437,7 +425,6 @@ var BalanceSystem = class {
437
425
  * // Returns: 'side_right' (swept to the side)
438
426
  * ```
439
427
  *
440
- * @public
441
428
  * @korean 낙법유형결정
442
429
  */
443
430
  determineFallType(_player, attackAngle, attackHeight = "mid") {
@@ -461,7 +448,6 @@ var BalanceSystem = class {
461
448
  * // Returns: 'forward' (Heaven stance has forward bias)
462
449
  * ```
463
450
  *
464
- * @public
465
451
  * @korean 자세낙법결정
466
452
  */
467
453
  determineFallTypeFromStance(stance) {
@@ -485,7 +471,6 @@ var BalanceSystem = class {
485
471
  * // Returns: false
486
472
  * ```
487
473
  *
488
- * @public
489
474
  * @korean 지면상태확인
490
475
  */
491
476
  isGrounded(animationState) {
@@ -509,7 +494,6 @@ var BalanceSystem = class {
509
494
  * // Returns: null
510
495
  * ```
511
496
  *
512
- * @public
513
497
  * @korean 지면자세가져오기
514
498
  */
515
499
  getGroundState(animationState) {
@@ -539,7 +523,6 @@ var BalanceSystem = class {
539
523
  * // Returns: true (no stamina requirement)
540
524
  * ```
541
525
  *
542
- * @public
543
526
  * @korean 회복가능확인
544
527
  */
545
528
  canRecoverWithType(player, recoveryType) {
@@ -563,7 +546,6 @@ var BalanceSystem = class {
563
546
  * // recovered.stamina = player.stamina - 20
564
547
  * ```
565
548
  *
566
- * @public
567
549
  * @korean 회복비용적용
568
550
  */
569
551
  applyRecoveryCost(player, recoveryType) {
@@ -595,7 +577,6 @@ var BalanceSystem = class {
595
577
  * // Returns: 1.0 (full damage)
596
578
  * ```
597
579
  *
598
- * @public
599
580
  * @korean 회복피해배율
600
581
  */
601
582
  getRecoveryDamageMultiplier(recoveryType, currentFrame) {
@@ -626,7 +607,6 @@ var BalanceSystem = class {
626
607
  * // transitioning.transitionState.vulnerabilityMultiplier = 1.5
627
608
  * ```
628
609
  *
629
- * @public
630
610
  * @korean 자세전환시작
631
611
  */
632
612
  startStanceTransition(player, newStance, currentTime) {
@@ -672,7 +652,6 @@ var BalanceSystem = class {
672
652
  * player = balanceSystem.updateTransition(player, Date.now());
673
653
  * ```
674
654
  *
675
- * @public
676
655
  * @korean 전환상태갱신
677
656
  */
678
657
  updateTransition(player, currentTime) {
@@ -710,7 +689,6 @@ var BalanceSystem = class {
710
689
  * const effectiveBalance = player.balance * modifier;
711
690
  * ```
712
691
  *
713
- * @public
714
692
  * @korean 균형조정계수계산
715
693
  */
716
694
  calculateBalanceModifier(player) {
@@ -742,7 +720,6 @@ var BalanceSystem = class {
742
720
  * const effectiveKnockback = baseKnockback * (1.0 / resistance);
743
721
  * ```
744
722
  *
745
- * @public
746
723
  * @korean 넉백저항계산
747
724
  */
748
725
  getKnockbackResistance(stance) {
@@ -770,7 +747,6 @@ var BalanceSystem = class {
770
747
  * }
771
748
  * ```
772
749
  *
773
- * @public
774
750
  * @korean 급속변경벌칙확인
775
751
  */
776
752
  isRapidChangePenaltyActive(player, currentTime) {
@@ -793,7 +769,6 @@ var BalanceSystem = class {
793
769
  * const finalDamage = baseDamage * multiplier;
794
770
  * ```
795
771
  *
796
- * @public
797
772
  * @korean 총취약성배율
798
773
  */
799
774
  getTotalVulnerabilityMultiplier(player) {
@@ -1 +1 @@
1
- {"version":3,"file":"BalanceSystem.js","names":[],"sources":["../../../src/systems/combat/BalanceSystem.ts"],"sourcesContent":["/**\n * Balance System for managing stability and vulnerability windows.\n *\n * **Korean**: 균형 시스템 (Balance System)\n *\n * Implements physical balance and stability mechanics. Loss of balance creates\n * vulnerability windows where damage is increased and defensive options limited.\n * Balance is affected by:\n * - Leg strikes\n * - Throws and sweeps\n * - Heavy impacts\n * - Fatigue (low stamina)\n * - Stance transitions (0.5s vulnerability window)\n * - Body part damage (legs reduce balance)\n * - Rapid stance changes (penalty system)\n *\n * ## Balance States\n *\n * - **Stable**: 80-100 balance - Full mobility and defense\n * - **Unsteady**: 50-79 balance - Reduced evasion, slower movement\n * - **Off-Balance**: 20-49 balance - Vulnerability window, defense penalty\n * - **Falling**: 0-19 balance - Severe vulnerability, possible knockdown\n *\n * ## Fall System Integration\n *\n * When balance falls below 20%, the system can trigger fall animations (낙법).\n * Fall direction is determined by attack vector and player stance.\n *\n * ## Stance Transition Vulnerability\n *\n * Changing stances creates a 0.5s vulnerability window with 1.5x damage multiplier.\n * Rapid stance changes (>2 in 3s) apply additional 20% balance penalty for 2s.\n *\n * @module systems/combat/BalanceSystem\n * @category Combat System\n * @korean 균형시스템\n */\n\nimport { BodyRegion } from \"@/types\";\nimport { TrigramStance } from \"@/types/common\";\nimport {\n determineFallDirection,\n determineFallFromStance,\n getRecoveryConfig,\n isVulnerableFrame,\n} from \"../animation\";\nimport type {\n FallType,\n GroundState,\n RecoveryAnimationType,\n} from \"../animation/core/types\";\nimport { PlayerState } from \"../player\";\n\n/**\n * Stance transition state tracking.\n *\n * **Korean**: 자세 전환 상태 (Stance Transition State)\n *\n * Tracks when a player is transitioning between stances, creating a\n * 0.5s vulnerability window with increased damage multiplier.\n */\nexport interface TransitionState {\n /** Whether player is currently transitioning */\n readonly isTransitioning: boolean;\n /** Timestamp when transition started (ms) */\n readonly transitionStartTime: number;\n /** Damage multiplier during transition (1.5x) */\n readonly vulnerabilityMultiplier: number;\n /** Stance transitioning from */\n readonly fromStance: TrigramStance | null;\n /** Stance transitioning to */\n readonly toStance: TrigramStance | null;\n}\n\n/**\n * Stance change history entry.\n *\n * **Korean**: 자세 변경 기록 (Stance Change Record)\n */\ninterface StanceChangeRecord {\n /** Timestamp of stance change */\n readonly timestamp: number;\n /** Stance changed from */\n readonly fromStance: TrigramStance;\n /** Stance changed to */\n readonly toStance: TrigramStance;\n}\n\n/**\n * Extended player state with balance system data.\n *\n * Extends PlayerState with additional balance-specific tracking.\n */\nexport interface BalancePlayerState extends PlayerState {\n /** Stance transition state */\n readonly transitionState?: TransitionState;\n /** Stance change history (last 5 changes) */\n readonly stanceChangeHistory?: readonly StanceChangeRecord[];\n /** Rapid change penalty end timestamp */\n readonly rapidChangePenaltyEnd?: number;\n}\n\n/**\n * Balance levels representing physical stability.\n *\n * **Korean**: 균형 수준\n */\nexport enum BalanceLevel {\n /** Stable footing (80-100) */\n STABLE = \"stable\",\n /** Unsteady but controlled (50-79) */\n UNSTEADY = \"unsteady\",\n /** Off-balance, vulnerable (20-49) */\n OFF_BALANCE = \"off_balance\",\n /** Falling or knocked down (0-19) */\n FALLING = \"falling\",\n}\n\n/**\n * Effects of balance on combat performance.\n */\ninterface BalanceEffects {\n /** Balance value range */\n readonly range: readonly [number, number];\n /** Defense multiplier */\n readonly defenseMultiplier: number;\n /** Evasion success chance modifier */\n readonly evasionModifier: number;\n /** Movement speed multiplier */\n readonly movementSpeedMultiplier: number;\n /** Vulnerability to attacks multiplier */\n readonly vulnerabilityMultiplier: number;\n /** Can perform evasive actions */\n readonly canEvade: boolean;\n /** Risk of knockdown */\n readonly knockdownRisk: number;\n}\n\n/**\n * Balance System managing stability and vulnerability.\n *\n * Balance represents physical stability and center of gravity control.\n * Low balance creates vulnerability windows where opponents can capitalize\n * with increased damage and reduced defensive options.\n *\n * @example\n * ```typescript\n * const balanceSystem = new BalanceSystem();\n *\n * // Apply balance disruption from leg strike\n * const newPlayer = balanceSystem.disruptBalance(\n * player,\n * 15,\n * BodyRegion.LEFT_LEG\n * );\n *\n * // Check if vulnerable\n * const isVulnerable = balanceSystem.isVulnerable(newPlayer);\n *\n * // Apply recovery\n * const recovered = balanceSystem.applyRecovery(newPlayer, 1000);\n * ```\n *\n * @public\n * @korean 균형시스템\n */\nexport class BalanceSystem {\n /**\n * Balance level effects and thresholds.\n */\n private readonly balanceEffects: Record<BalanceLevel, BalanceEffects> = {\n [BalanceLevel.STABLE]: {\n range: [80, 100],\n defenseMultiplier: 1.0,\n evasionModifier: 1.0,\n movementSpeedMultiplier: 1.0,\n vulnerabilityMultiplier: 1.0,\n canEvade: true,\n knockdownRisk: 0.0,\n },\n [BalanceLevel.UNSTEADY]: {\n range: [50, 79],\n defenseMultiplier: 0.85,\n evasionModifier: 0.7,\n movementSpeedMultiplier: 0.85,\n vulnerabilityMultiplier: 1.15,\n canEvade: true,\n knockdownRisk: 0.1,\n },\n [BalanceLevel.OFF_BALANCE]: {\n range: [20, 49],\n defenseMultiplier: 0.6,\n evasionModifier: 0.4,\n movementSpeedMultiplier: 0.6,\n vulnerabilityMultiplier: 1.5, // 50% more damage taken\n canEvade: false,\n knockdownRisk: 0.3,\n },\n [BalanceLevel.FALLING]: {\n range: [0, 19],\n defenseMultiplier: 0.3,\n evasionModifier: 0.0,\n movementSpeedMultiplier: 0.3,\n vulnerabilityMultiplier: 2.0, // 100% more damage taken\n canEvade: false,\n knockdownRisk: 0.8,\n },\n };\n\n /**\n * Balance disruption multipliers by body region.\n */\n private readonly regionMultipliers: Record<string, number> = {\n [BodyRegion.LEFT_LEG]: 2.5,\n [BodyRegion.RIGHT_LEG]: 2.5,\n [BodyRegion.CORE]: 2.0,\n [BodyRegion.TORSO]: 1.5,\n [BodyRegion.HEAD]: 1.0,\n default: 0.5,\n };\n\n /**\n * Base balance recovery rate per second.\n */\n private readonly baseRecoveryRate = 8.0; // 8 points per second\n\n /**\n * Maximum balance value.\n */\n private readonly maxBalance = 100;\n\n /**\n * Stance transition constants.\n */\n private readonly transitionDuration = 500; // 0.5s in milliseconds\n private readonly transitionVulnerabilityMultiplier = 1.5; // 1.5x damage during transition\n\n /**\n * Rapid stance change penalty constants.\n */\n private readonly rapidChangeWindow = 3000; // 3 seconds in milliseconds\n private readonly rapidChangeThreshold = 2; // >2 changes trigger penalty\n private readonly rapidChangePenalty = 0.2; // 20% balance reduction\n private readonly rapidChangePenaltyDuration = 2000; // 2 seconds penalty\n private readonly stanceChangeHistoryLimit = 5; // Keep last 5 changes\n\n /**\n * Disrupts balance from combat impact.\n *\n * Calculates balance loss based on damage amount and body region hit.\n * Leg strikes cause maximum balance disruption.\n *\n * Now also considers:\n * - Body part damage modifier (damaged legs reduce balance more)\n * - Rapid stance change penalty (20% additional reduction)\n *\n * @param player - Current player state\n * @param impact - Impact force amount\n * @param region - Body region affected\n * @param currentTime - Current game time for penalty checks (optional)\n * @returns Updated player state with reduced balance\n *\n * @example\n * ```typescript\n * // Leg sweep causes major balance disruption\n * player = system.disruptBalance(\n * player,\n * 20,\n * BodyRegion.RIGHT_LEG,\n * Date.now()\n * );\n * ```\n *\n * @public\n * @korean 균형파괴\n */\n disruptBalance(\n player: BalancePlayerState,\n impact: number,\n region?: BodyRegion,\n currentTime?: number\n ): BalancePlayerState {\n // Get multiplier based on region\n const multiplier = region\n ? this.regionMultipliers[region] ?? this.regionMultipliers.default\n : this.regionMultipliers.default;\n\n // Calculate base balance loss\n let balanceLoss = impact * multiplier * 0.6; // 0.6 = balance sensitivity\n\n // Apply body part damage modifier\n const bodyModifier = this.calculateBalanceModifier(player);\n balanceLoss *= 1.0 / bodyModifier; // More damage = more balance loss\n\n // Apply rapid stance change penalty if time is provided\n if (currentTime !== undefined && this.isRapidChangePenaltyActive(player, currentTime)) {\n balanceLoss *= 1.0 + this.rapidChangePenalty; // +20% balance loss\n }\n\n // Apply balance loss, clamped to 0\n const newBalance = Math.max(0, player.balance - balanceLoss);\n\n return {\n ...player,\n balance: newBalance,\n };\n }\n\n /**\n * Applies balance recovery over time.\n *\n * Balance recovers quickly when not being disrupted, allowing\n * fighters to regain stable footing between exchanges.\n *\n * Recovery is affected by:\n * - Balance level (harder to recover when off-balance)\n * - Stamina (low stamina = slow recovery)\n * - Body part damage (leg damage reduces recovery rate)\n *\n * @param player - Current player state\n * @param deltaTime - Time elapsed in milliseconds\n * @returns Updated player state with recovered balance\n *\n * @example\n * ```typescript\n * // In game loop\n * player = system.applyRecovery(player, 16); // ~60fps\n * ```\n *\n * @public\n * @korean 균형회복\n */\n applyRecovery(player: BalancePlayerState, deltaTime: number): BalancePlayerState {\n // Already at maximum balance\n if (player.balance >= this.maxBalance) {\n return player;\n }\n\n const deltaSeconds = deltaTime / 1000;\n const level = this.getBalanceLevel(player.balance);\n\n // Recovery modifier based on balance level\n let recoveryModifier = 1.0;\n if (level === BalanceLevel.OFF_BALANCE) {\n recoveryModifier = 0.7; // Harder to recover when off-balance\n } else if (level === BalanceLevel.FALLING) {\n recoveryModifier = 0.4; // Very hard to recover when falling\n }\n\n // Stamina affects recovery rate\n const staminaFactor = player.stamina / player.maxStamina;\n \n // Body part damage affects recovery rate\n const bodyModifier = this.calculateBalanceModifier(player);\n \n const finalModifier = recoveryModifier * (0.5 + staminaFactor * 0.5) * bodyModifier;\n\n const recovery = this.baseRecoveryRate * deltaSeconds * finalModifier;\n const newBalance = Math.min(this.maxBalance, player.balance + recovery);\n\n return {\n ...player,\n balance: newBalance,\n };\n }\n\n /**\n * Determines balance level from balance value.\n *\n * @param balance - Balance value (0-100)\n * @returns Current balance level\n *\n * @public\n * @korean 균형수준확인\n */\n getBalanceLevel(balance: number): BalanceLevel {\n if (balance >= 80) return BalanceLevel.STABLE;\n if (balance >= 50) return BalanceLevel.UNSTEADY;\n if (balance >= 20) return BalanceLevel.OFF_BALANCE;\n return BalanceLevel.FALLING;\n }\n\n /**\n * Gets effects for a specific balance level.\n *\n * @param level - Balance level\n * @returns Effects applied at that level\n *\n * @public\n * @korean 균형효과\n */\n getEffects(level: BalanceLevel): BalanceEffects {\n return this.balanceEffects[level];\n }\n\n /**\n * Applies balance effects to player state.\n *\n * Modifies player stats based on current balance level.\n *\n * @param player - Current player state\n * @returns Modified player state with balance effects\n *\n * @public\n * @korean 균형효과적용\n */\n applyEffects(player: PlayerState): PlayerState {\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n\n return {\n ...player,\n defense: Math.floor(player.defense * effects.defenseMultiplier),\n speed: Math.floor(player.speed * effects.movementSpeedMultiplier),\n };\n }\n\n /**\n * Checks if player is vulnerable due to balance.\n *\n * @param player - Current player state\n * @returns True if off-balance or falling\n *\n * @public\n * @korean 균형취약확인\n */\n isVulnerable(player: PlayerState): boolean {\n const level = this.getBalanceLevel(player.balance);\n return level === BalanceLevel.OFF_BALANCE || level === BalanceLevel.FALLING;\n }\n\n /**\n * Calculates damage multiplier for vulnerable balance state.\n *\n * @param player - Current player state\n * @returns Damage multiplier (1.0 = normal, >1.0 = increased damage)\n *\n * @public\n * @korean 취약성배율\n */\n getVulnerabilityMultiplier(player: PlayerState): number {\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n return effects.vulnerabilityMultiplier;\n }\n\n /**\n * Checks if knockdown should occur, using a provided random function for determinism.\n *\n * @param player - Current player state\n * @param randomFn - Optional random number generator (returns number in [0,1)), defaults to Math.random\n * @returns True if knockdown should occur\n *\n * @public\n * @korean 넘어짐확인\n */\n shouldKnockdown(\n player: PlayerState,\n randomFn: () => number = Math.random\n ): boolean {\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n return randomFn() < effects.knockdownRisk;\n }\n\n /**\n * Gets bilingual name for balance level.\n *\n * @param level - Balance level\n * @returns Korean and English level names\n *\n * @public\n * @korean 균형이름\n */\n getLevelName(level: BalanceLevel): { korean: string; english: string } {\n const names: Record<BalanceLevel, { korean: string; english: string }> = {\n [BalanceLevel.STABLE]: {\n korean: \"안정\",\n english: \"Stable\",\n },\n [BalanceLevel.UNSTEADY]: {\n korean: \"불안정\",\n english: \"Unsteady\",\n },\n [BalanceLevel.OFF_BALANCE]: {\n korean: \"균형상실\",\n english: \"Off-Balance\",\n },\n [BalanceLevel.FALLING]: {\n korean: \"낙하중\",\n english: \"Falling\",\n },\n };\n\n return names[level];\n }\n\n /**\n * Gets color indicator for balance level (for UI).\n *\n * @param level - Balance level\n * @returns Hex color code\n *\n * @public\n * @korean 균형색상\n */\n getLevelColor(level: BalanceLevel): number {\n const colors: Record<BalanceLevel, number> = {\n [BalanceLevel.STABLE]: 0x00ff00, // Green\n [BalanceLevel.UNSTEADY]: 0xffff00, // Yellow\n [BalanceLevel.OFF_BALANCE]: 0xff8800, // Orange\n [BalanceLevel.FALLING]: 0xff0000, // Red\n };\n\n return colors[level];\n }\n\n /**\n * Checks if balance is low enough to trigger fall animation.\n *\n * Falls occur when balance drops below 20% (FALLING state).\n * This creates realistic knockdown conditions from balance loss.\n *\n * @param player - Current player state\n * @returns True if fall animation should trigger\n *\n * @example\n * ```typescript\n * if (balanceSystem.shouldTriggerFall(player)) {\n * const fallType = balanceSystem.determineFallType(\n * player,\n * attackAngle,\n * attackHeight\n * );\n * animationMachine.transitionTo(FALL_TYPE_TO_ANIMATION[fallType]);\n * }\n * ```\n *\n * @public\n * @korean 낙법발동확인\n */\n shouldTriggerFall(player: PlayerState): boolean {\n return player.balance < 20; // FALLING threshold\n }\n\n /**\n * Determines which fall animation to play based on attack and stance.\n *\n * Calculates fall direction using:\n * - Attack angle relative to player\n * - Attack height (high/mid/low)\n * - Player's current stance bias\n *\n * Korean falling techniques (낙법):\n * - 전방낙법 (Jeonbang Nakbeop): Forward fall\n * - 후방낙법 (Hubang Nakbeop): Backward fall\n * - 측방낙법 (Cheukbang Nakbeop): Side fall\n *\n * @param player - Current player state\n * @param attackAngle - Angle of attack in radians (0 = from front)\n * @param attackHeight - Attack height: 'high', 'mid', or 'low'\n * @returns Fall type to use for animation\n *\n * @example\n * ```typescript\n * // Player facing forward (0°), attacked from behind (π)\n * const fallType = balanceSystem.determineFallType(\n * player,\n * Math.PI,\n * 'mid'\n * );\n * // Returns: 'forward' (pushed forward by rear attack)\n *\n * // Low sweep from right side\n * const fallType = balanceSystem.determineFallType(\n * player,\n * Math.PI/2,\n * 'low'\n * );\n * // Returns: 'side_right' (swept to the side)\n * ```\n *\n * @public\n * @korean 낙법유형결정\n */\n determineFallType(\n _player: PlayerState,\n attackAngle: number,\n attackHeight: \"high\" | \"mid\" | \"low\" = \"mid\"\n ): FallType {\n // Get player facing angle from position or default to 0\n const playerFacing = 0; // Default facing forward\n\n // Use attack direction to determine fall\n return determineFallDirection(attackAngle, playerFacing, attackHeight);\n }\n\n /**\n * Determines fall type based on player stance when no attack direction available.\n *\n * Uses stance bias to determine likely fall direction when balance is lost\n * without a specific attack (e.g., from fatigue, leg damage accumulation).\n *\n * @param stance - Current trigram stance\n * @returns Fall type based on stance characteristics\n *\n * @example\n * ```typescript\n * // Player in Heaven stance (aggressive forward)\n * const fallType = balanceSystem.determineFallTypeFromStance(\n * TrigramStance.GEON\n * );\n * // Returns: 'forward' (Heaven stance has forward bias)\n * ```\n *\n * @public\n * @korean 자세낙법결정\n */\n determineFallTypeFromStance(stance: TrigramStance): FallType {\n return determineFallFromStance(stance);\n }\n\n /**\n * Check if player is in a grounded state based on animation state.\n *\n * Player is considered grounded when in any ground_* animation state\n * (ground_prone, ground_supine, ground_side_left, ground_side_right).\n *\n * @param animationState - Current animation state from AnimationStateMachine\n * @returns True if player is on the ground\n *\n * @example\n * ```typescript\n * const isGrounded = balanceSystem.isGrounded(\"ground_prone\");\n * // Returns: true\n *\n * const notGrounded = balanceSystem.isGrounded(\"idle\");\n * // Returns: false\n * ```\n *\n * @public\n * @korean 지면상태확인\n */\n isGrounded(animationState: string): boolean {\n return animationState.startsWith(\"ground_\");\n }\n\n /**\n * Get ground state from animation state.\n *\n * Extracts the ground position type from animation state name.\n * Returns null if not in a ground state.\n *\n * @param animationState - Current animation state from AnimationStateMachine\n * @returns Ground state or null if not grounded\n *\n * @example\n * ```typescript\n * const state = balanceSystem.getGroundState(\"ground_prone\");\n * // Returns: \"prone\"\n *\n * const none = balanceSystem.getGroundState(\"idle\");\n * // Returns: null\n * ```\n *\n * @public\n * @korean 지면자세가져오기\n */\n getGroundState(animationState: string): GroundState | null {\n if (!this.isGrounded(animationState)) {\n return null;\n }\n\n // Extract ground state from animation state name\n // \"ground_prone\" -> \"prone\"\n const groundType = animationState.replace(\"ground_\", \"\");\n\n // Validate that it's a valid ground state\n if (\n groundType === \"prone\" ||\n groundType === \"supine\" ||\n groundType === \"side_left\" ||\n groundType === \"side_right\"\n ) {\n return groundType as GroundState;\n }\n\n return null;\n }\n\n /**\n * Check if player can execute recovery based on stamina.\n *\n * Some recovery animations (like roll recovery) require stamina.\n * This checks if player has sufficient stamina for the recovery type.\n *\n * @param player - Current player state\n * @param recoveryType - Type of recovery animation\n * @returns True if player has enough stamina\n *\n * @example\n * ```typescript\n * // Roll recovery costs 20 stamina\n * const canRoll = balanceSystem.canRecoverWithType(player, \"roll_recovery\");\n * // Returns: true if player.stamina >= 20\n *\n * // Normal recoveries have no cost\n * const canStand = balanceSystem.canRecoverWithType(player, \"prone_standup\");\n * // Returns: true (no stamina requirement)\n * ```\n *\n * @public\n * @korean 회복가능확인\n */\n canRecoverWithType(\n player: PlayerState,\n recoveryType: RecoveryAnimationType\n ): boolean {\n const config = getRecoveryConfig(recoveryType);\n\n // Check if player has enough stamina\n return player.stamina >= config.staminaCost;\n }\n\n /**\n * Apply stamina cost for recovery animation.\n *\n * Deducts stamina cost from player state for recovery animations\n * that require stamina (like roll recovery).\n *\n * @param player - Current player state\n * @param recoveryType - Type of recovery animation\n * @returns Updated player state with stamina deducted\n *\n * @example\n * ```typescript\n * // Roll recovery costs 20 stamina\n * const recovered = balanceSystem.applyRecoveryCost(player, \"roll_recovery\");\n * // recovered.stamina = player.stamina - 20\n * ```\n *\n * @public\n * @korean 회복비용적용\n */\n applyRecoveryCost(\n player: PlayerState,\n recoveryType: RecoveryAnimationType\n ): PlayerState {\n const config = getRecoveryConfig(recoveryType);\n\n if (config.staminaCost === 0) {\n return player;\n }\n\n return {\n ...player,\n stamina: Math.max(0, player.stamina - config.staminaCost),\n };\n }\n\n /**\n * Get damage multiplier during recovery animation.\n *\n * Some recovery animations (like defensive getup) provide damage reduction.\n * This returns the multiplier to apply to incoming damage.\n *\n * @param recoveryType - Type of recovery animation\n * @param currentFrame - Current frame in the animation\n * @returns Damage multiplier (1.0 = normal, 0.5 = 50% reduction)\n *\n * @example\n * ```typescript\n * // Defensive getup has 50% damage reduction\n * const multiplier = balanceSystem.getRecoveryDamageMultiplier(\"defensive_getup\", 20);\n * // Returns: 0.5 (50% damage reduction)\n *\n * // Normal recoveries have no reduction\n * const normal = balanceSystem.getRecoveryDamageMultiplier(\"prone_standup\", 15);\n * // Returns: 1.0 (full damage)\n * ```\n *\n * @public\n * @korean 회복피해배율\n */\n getRecoveryDamageMultiplier(\n recoveryType: RecoveryAnimationType,\n currentFrame: number\n ): number {\n const config = getRecoveryConfig(recoveryType);\n\n // Only apply damage reduction during vulnerable frames\n if (!isVulnerableFrame(recoveryType, currentFrame)) {\n return 1.0; // No vulnerability = full damage (or no damage if invulnerable)\n }\n\n // Apply damage reduction\n // damageReduction of 0.5 means 50% reduction, so multiplier is 0.5\n return 1.0 - config.damageReduction;\n }\n\n /**\n * Start a stance transition, creating vulnerability window.\n *\n * When a player changes stance, they become vulnerable for 0.5s with\n * a 1.5x damage multiplier. This creates tactical depth around stance changes.\n *\n * @param player - Current player state\n * @param newStance - Target stance to transition to\n * @param currentTime - Current game time in milliseconds\n * @returns Updated player state with transition tracking\n *\n * @example\n * ```typescript\n * // Player switches from Heaven to Water stance\n * const transitioning = balanceSystem.startStanceTransition(\n * player,\n * TrigramStance.GAM,\n * Date.now()\n * );\n * // transitioning.transitionState.isTransitioning = true\n * // transitioning.transitionState.vulnerabilityMultiplier = 1.5\n * ```\n *\n * @public\n * @korean 자세전환시작\n */\n startStanceTransition(\n player: BalancePlayerState,\n newStance: TrigramStance,\n currentTime: number\n ): BalancePlayerState {\n // No-op if changing to the same stance (avoid unnecessary transitions)\n if (newStance === player.currentStance) {\n return player;\n }\n\n // Initialize transition state\n const transitionState: TransitionState = {\n isTransitioning: true,\n transitionStartTime: currentTime,\n vulnerabilityMultiplier: this.transitionVulnerabilityMultiplier,\n fromStance: player.currentStance,\n toStance: newStance,\n };\n\n // Add to stance change history\n const historyEntry: StanceChangeRecord = {\n timestamp: currentTime,\n fromStance: player.currentStance,\n toStance: newStance,\n };\n\n const history = player.stanceChangeHistory ?? [];\n const newHistory = [...history, historyEntry].slice(-this.stanceChangeHistoryLimit);\n\n // Check for rapid stance changes (inclusive boundary)\n const recentChanges = newHistory.filter(\n (entry) => currentTime - entry.timestamp <= this.rapidChangeWindow\n );\n\n let rapidChangePenaltyEnd = player.rapidChangePenaltyEnd;\n\n if (recentChanges.length > this.rapidChangeThreshold) {\n // Apply rapid change penalty\n rapidChangePenaltyEnd = currentTime + this.rapidChangePenaltyDuration;\n }\n\n return {\n ...player,\n currentStance: newStance,\n lastStanceChangeTime: currentTime,\n transitionState,\n stanceChangeHistory: newHistory,\n rapidChangePenaltyEnd,\n };\n }\n\n /**\n * Update stance transition state based on time elapsed.\n *\n * Transitions last 0.5s. After that, vulnerability window closes.\n * Called each frame to manage transition timing.\n *\n * @param player - Current player state\n * @param currentTime - Current game time in milliseconds\n * @returns Updated player state\n *\n * @example\n * ```typescript\n * // In game loop\n * player = balanceSystem.updateTransition(player, Date.now());\n * ```\n *\n * @public\n * @korean 전환상태갱신\n */\n updateTransition(\n player: BalancePlayerState,\n currentTime: number\n ): BalancePlayerState {\n if (!player.transitionState?.isTransitioning) {\n return player;\n }\n\n const elapsed = currentTime - player.transitionState.transitionStartTime;\n\n // Check if transition window has ended\n if (elapsed >= this.transitionDuration) {\n return {\n ...player,\n transitionState: {\n ...player.transitionState,\n isTransitioning: false,\n vulnerabilityMultiplier: 1.0,\n },\n };\n }\n\n return player;\n }\n\n /**\n * Calculate balance modifier based on body part damage.\n *\n * Leg damage significantly reduces balance. The leg-specific modifier\n * scales linearly from 0.7x at 0% leg health to 1.0x at 100% leg health:\n * - 100% leg health: 1.0x balance (no reduction from legs)\n * - 70% leg health: ≈0.91x balance (≈9% reduction from legs)\n * - 30% leg health: ≈0.79x balance (≈21% reduction from legs)\n * - 0% leg health: 0.7x balance (30% reduction from legs)\n *\n * Torso damage also affects balance but to a lesser degree, and the\n * combined leg/torso modifier is clamped so the final balance modifier\n * stays within the range 0.5x to 1.0x.\n *\n * @param player - Current player state with body part health\n * @returns Balance modifier (0.5 to 1.0)\n *\n * @example\n * ```typescript\n * const modifier = balanceSystem.calculateBalanceModifier(player);\n * const effectiveBalance = player.balance * modifier;\n * ```\n *\n * @public\n * @korean 균형조정계수계산\n */\n calculateBalanceModifier(player: BalancePlayerState): number {\n if (!player.bodyPartHealth || !player.bodyPartMaxHealth) {\n return 1.0; // No body part tracking, no modifier\n }\n\n // Read leg and torso health ratios from body part health tracking\n const leftLegHealthRaw =\n (player.bodyPartHealth.legLeft ?? 0) /\n (player.bodyPartMaxHealth.legLeft ?? 1);\n const rightLegHealthRaw =\n (player.bodyPartHealth.legRight ?? 0) /\n (player.bodyPartMaxHealth.legRight ?? 1);\n \n // Use torsoLower for core balance (lower body)\n const torsoHealthRaw =\n (player.bodyPartHealth.torsoLower ?? 0) /\n (player.bodyPartMaxHealth.torsoLower ?? 1);\n\n // Clamp health ratios to [0, 1] to prevent out-of-range values\n const leftLegHealth = Math.max(0, Math.min(1, leftLegHealthRaw));\n const rightLegHealth = Math.max(0, Math.min(1, rightLegHealthRaw));\n const torsoHealth = Math.max(0, Math.min(1, torsoHealthRaw));\n\n // Average leg health (both legs affect balance)\n const avgLegHealth = (leftLegHealth + rightLegHealth) / 2;\n\n // Leg damage: 0-30% reduction based on damage\n const legModifier = 0.7 + avgLegHealth * 0.3; // Range: 0.7 to 1.0\n\n // Torso damage: 0-10% reduction based on damage\n const torsoModifier = 0.9 + torsoHealth * 0.1; // Range: 0.9 to 1.0\n\n // Combine modifiers (multiplicative)\n const combinedModifier = legModifier * torsoModifier;\n\n // Clamp to [0.5, 1.0] range as documented\n return Math.max(0.5, Math.min(1.0, combinedModifier));\n }\n\n /**\n * Calculate knockback resistance based on current stance.\n *\n * Different stances provide varying levels of knockback resistance:\n * - Defensive stances (Mountain, Earth): +50% resistance\n * - Balanced stances (Water, Wind): normal resistance\n * - Offensive stances (Heaven, Fire, Thunder): -30% resistance\n * - Fluid stance (Lake): normal resistance\n *\n * @param stance - Current trigram stance\n * @returns Knockback resistance multiplier (0.7 to 1.5)\n *\n * @example\n * ```typescript\n * const resistance = balanceSystem.getKnockbackResistance(TrigramStance.GAN);\n * const effectiveKnockback = baseKnockback * (1.0 / resistance);\n * ```\n *\n * @public\n * @korean 넉백저항계산\n */\n getKnockbackResistance(stance: TrigramStance): number {\n // Defensive stances: +50% resistance\n if (stance === TrigramStance.GAN || stance === TrigramStance.GON) {\n // Mountain, Earth\n return 1.5;\n }\n\n // Offensive stances: -30% resistance\n if (stance === TrigramStance.GEON || stance === TrigramStance.LI || stance === TrigramStance.JIN) {\n // Heaven, Fire, Thunder\n return 0.7;\n }\n\n // Balanced/adaptive stances: normal resistance\n return 1.0; // Water, Wind, Lake\n }\n\n /**\n * Check if rapid stance change penalty is active.\n *\n * Penalty applies when player changes stances >2 times in 3 seconds.\n * Lasts for 2 seconds after the last rapid change.\n * The penalty increases balance loss by 20% in `disruptBalance()`.\n *\n * @param player - Current player state\n * @param currentTime - Current game time in milliseconds\n * @returns True if penalty is active\n *\n * @example\n * ```typescript\n * // The penalty is applied automatically in disruptBalance()\n * if (balanceSystem.isRapidChangePenaltyActive(player, Date.now())) {\n * // Penalty active: balance loss will be increased by 20%\n * cy.log(\"Rapid change penalty active\");\n * }\n * ```\n *\n * @public\n * @korean 급속변경벌칙확인\n */\n isRapidChangePenaltyActive(\n player: BalancePlayerState,\n currentTime: number\n ): boolean {\n if (!player.rapidChangePenaltyEnd) {\n return false;\n }\n return currentTime < player.rapidChangePenaltyEnd;\n }\n\n /**\n * Get total vulnerability multiplier considering all factors.\n *\n * Combines:\n * - Base balance state vulnerability (1.0 to 2.0)\n * - Stance transition vulnerability (1.5x during 0.5s window)\n *\n * @param player - Current player state\n * @returns Combined vulnerability multiplier\n *\n * @example\n * ```typescript\n * const multiplier = balanceSystem.getTotalVulnerabilityMultiplier(player);\n * const finalDamage = baseDamage * multiplier;\n * ```\n *\n * @public\n * @korean 총취약성배율\n */\n getTotalVulnerabilityMultiplier(player: BalancePlayerState): number {\n // Get base balance vulnerability\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n let multiplier = effects.vulnerabilityMultiplier;\n\n // Apply transition vulnerability if active\n if (player.transitionState?.isTransitioning) {\n multiplier *= player.transitionState.vulnerabilityMultiplier;\n }\n\n return multiplier;\n }\n}\n\nexport default BalanceSystem;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BalanceSystem.js","names":[],"sources":["../../../src/systems/combat/BalanceSystem.ts"],"sourcesContent":["/**\n * Balance System for managing stability and vulnerability windows.\n *\n * **Korean**: 균형 시스템 (Balance System)\n *\n * Implements physical balance and stability mechanics. Loss of balance creates\n * vulnerability windows where damage is increased and defensive options limited.\n * Balance is affected by:\n * - Leg strikes\n * - Throws and sweeps\n * - Heavy impacts\n * - Fatigue (low stamina)\n * - Stance transitions (0.5s vulnerability window)\n * - Body part damage (legs reduce balance)\n * - Rapid stance changes (penalty system)\n *\n * ## Balance States\n *\n * - **Stable**: 80-100 balance - Full mobility and defense\n * - **Unsteady**: 50-79 balance - Reduced evasion, slower movement\n * - **Off-Balance**: 20-49 balance - Vulnerability window, defense penalty\n * - **Falling**: 0-19 balance - Severe vulnerability, possible knockdown\n *\n * ## Fall System Integration\n *\n * When balance falls below 20%, the system can trigger fall animations (낙법).\n * Fall direction is determined by attack vector and player stance.\n *\n * ## Stance Transition Vulnerability\n *\n * Changing stances creates a 0.5s vulnerability window with 1.5x damage multiplier.\n * Rapid stance changes (>2 in 3s) apply additional 20% balance penalty for 2s.\n *\n * @module systems/combat/BalanceSystem\n * @category Combat System\n * @korean 균형시스템\n */\n\nimport { BodyRegion } from \"@/types\";\nimport { TrigramStance } from \"@/types/common\";\nimport {\n determineFallDirection,\n determineFallFromStance,\n getRecoveryConfig,\n isVulnerableFrame,\n} from \"../animation\";\nimport type {\n FallType,\n GroundState,\n RecoveryAnimationType,\n} from \"../animation/core/types\";\nimport { PlayerState } from \"../player\";\n\n/**\n * Stance transition state tracking.\n *\n * **Korean**: 자세 전환 상태 (Stance Transition State)\n *\n * Tracks when a player is transitioning between stances, creating a\n * 0.5s vulnerability window with increased damage multiplier.\n */\nexport interface TransitionState {\n /** Whether player is currently transitioning */\n readonly isTransitioning: boolean;\n /** Timestamp when transition started (ms) */\n readonly transitionStartTime: number;\n /** Damage multiplier during transition (1.5x) */\n readonly vulnerabilityMultiplier: number;\n /** Stance transitioning from */\n readonly fromStance: TrigramStance | null;\n /** Stance transitioning to */\n readonly toStance: TrigramStance | null;\n}\n\n/**\n * Stance change history entry.\n *\n * **Korean**: 자세 변경 기록 (Stance Change Record)\n */\ninterface StanceChangeRecord {\n /** Timestamp of stance change */\n readonly timestamp: number;\n /** Stance changed from */\n readonly fromStance: TrigramStance;\n /** Stance changed to */\n readonly toStance: TrigramStance;\n}\n\n/**\n * Extended player state with balance system data.\n *\n * Extends PlayerState with additional balance-specific tracking.\n */\nexport interface BalancePlayerState extends PlayerState {\n /** Stance transition state */\n readonly transitionState?: TransitionState;\n /** Stance change history (last 5 changes) */\n readonly stanceChangeHistory?: readonly StanceChangeRecord[];\n /** Rapid change penalty end timestamp */\n readonly rapidChangePenaltyEnd?: number;\n}\n\n/**\n * Balance levels representing physical stability.\n *\n * **Korean**: 균형 수준\n */\nexport enum BalanceLevel {\n /** Stable footing (80-100) */\n STABLE = \"stable\",\n /** Unsteady but controlled (50-79) */\n UNSTEADY = \"unsteady\",\n /** Off-balance, vulnerable (20-49) */\n OFF_BALANCE = \"off_balance\",\n /** Falling or knocked down (0-19) */\n FALLING = \"falling\",\n}\n\n/**\n * Effects of balance on combat performance.\n */\ninterface BalanceEffects {\n /** Balance value range */\n readonly range: readonly [number, number];\n /** Defense multiplier */\n readonly defenseMultiplier: number;\n /** Evasion success chance modifier */\n readonly evasionModifier: number;\n /** Movement speed multiplier */\n readonly movementSpeedMultiplier: number;\n /** Vulnerability to attacks multiplier */\n readonly vulnerabilityMultiplier: number;\n /** Can perform evasive actions */\n readonly canEvade: boolean;\n /** Risk of knockdown */\n readonly knockdownRisk: number;\n}\n\n/**\n * Balance System managing stability and vulnerability.\n *\n * Balance represents physical stability and center of gravity control.\n * Low balance creates vulnerability windows where opponents can capitalize\n * with increased damage and reduced defensive options.\n *\n * @example\n * ```typescript\n * const balanceSystem = new BalanceSystem();\n *\n * // Apply balance disruption from leg strike\n * const newPlayer = balanceSystem.disruptBalance(\n * player,\n * 15,\n * BodyRegion.LEFT_LEG\n * );\n *\n * // Check if vulnerable\n * const isVulnerable = balanceSystem.isVulnerable(newPlayer);\n *\n * // Apply recovery\n * const recovered = balanceSystem.applyRecovery(newPlayer, 1000);\n * ```\n *\n * @korean 균형시스템\n */\nexport class BalanceSystem {\n /**\n * Balance level effects and thresholds.\n */\n private readonly balanceEffects: Record<BalanceLevel, BalanceEffects> = {\n [BalanceLevel.STABLE]: {\n range: [80, 100],\n defenseMultiplier: 1.0,\n evasionModifier: 1.0,\n movementSpeedMultiplier: 1.0,\n vulnerabilityMultiplier: 1.0,\n canEvade: true,\n knockdownRisk: 0.0,\n },\n [BalanceLevel.UNSTEADY]: {\n range: [50, 79],\n defenseMultiplier: 0.85,\n evasionModifier: 0.7,\n movementSpeedMultiplier: 0.85,\n vulnerabilityMultiplier: 1.15,\n canEvade: true,\n knockdownRisk: 0.1,\n },\n [BalanceLevel.OFF_BALANCE]: {\n range: [20, 49],\n defenseMultiplier: 0.6,\n evasionModifier: 0.4,\n movementSpeedMultiplier: 0.6,\n vulnerabilityMultiplier: 1.5, // 50% more damage taken\n canEvade: false,\n knockdownRisk: 0.3,\n },\n [BalanceLevel.FALLING]: {\n range: [0, 19],\n defenseMultiplier: 0.3,\n evasionModifier: 0.0,\n movementSpeedMultiplier: 0.3,\n vulnerabilityMultiplier: 2.0, // 100% more damage taken\n canEvade: false,\n knockdownRisk: 0.8,\n },\n };\n\n /**\n * Balance disruption multipliers by body region.\n */\n private readonly regionMultipliers: Record<string, number> = {\n [BodyRegion.LEFT_LEG]: 2.5,\n [BodyRegion.RIGHT_LEG]: 2.5,\n [BodyRegion.CORE]: 2.0,\n [BodyRegion.TORSO]: 1.5,\n [BodyRegion.HEAD]: 1.0,\n default: 0.5,\n };\n\n /**\n * Base balance recovery rate per second.\n */\n private readonly baseRecoveryRate = 8.0; // 8 points per second\n\n /**\n * Maximum balance value.\n */\n private readonly maxBalance = 100;\n\n /**\n * Stance transition constants.\n */\n private readonly transitionDuration = 500; // 0.5s in milliseconds\n private readonly transitionVulnerabilityMultiplier = 1.5; // 1.5x damage during transition\n\n /**\n * Rapid stance change penalty constants.\n */\n private readonly rapidChangeWindow = 3000; // 3 seconds in milliseconds\n private readonly rapidChangeThreshold = 2; // >2 changes trigger penalty\n private readonly rapidChangePenalty = 0.2; // 20% balance reduction\n private readonly rapidChangePenaltyDuration = 2000; // 2 seconds penalty\n private readonly stanceChangeHistoryLimit = 5; // Keep last 5 changes\n\n /**\n * Disrupts balance from combat impact.\n *\n * Calculates balance loss based on damage amount and body region hit.\n * Leg strikes cause maximum balance disruption.\n *\n * Now also considers:\n * - Body part damage modifier (damaged legs reduce balance more)\n * - Rapid stance change penalty (20% additional reduction)\n *\n * @param player - Current player state\n * @param impact - Impact force amount\n * @param region - Body region affected\n * @param currentTime - Current game time for penalty checks (optional)\n * @returns Updated player state with reduced balance\n *\n * @example\n * ```typescript\n * // Leg sweep causes major balance disruption\n * player = system.disruptBalance(\n * player,\n * 20,\n * BodyRegion.RIGHT_LEG,\n * Date.now()\n * );\n * ```\n *\n * @korean 균형파괴\n */\n disruptBalance(\n player: BalancePlayerState,\n impact: number,\n region?: BodyRegion,\n currentTime?: number\n ): BalancePlayerState {\n // Get multiplier based on region\n const multiplier = region\n ? this.regionMultipliers[region] ?? this.regionMultipliers.default\n : this.regionMultipliers.default;\n\n // Calculate base balance loss\n let balanceLoss = impact * multiplier * 0.6; // 0.6 = balance sensitivity\n\n // Apply body part damage modifier\n const bodyModifier = this.calculateBalanceModifier(player);\n balanceLoss *= 1.0 / bodyModifier; // More damage = more balance loss\n\n // Apply rapid stance change penalty if time is provided\n if (currentTime !== undefined && this.isRapidChangePenaltyActive(player, currentTime)) {\n balanceLoss *= 1.0 + this.rapidChangePenalty; // +20% balance loss\n }\n\n // Apply balance loss, clamped to 0\n const newBalance = Math.max(0, player.balance - balanceLoss);\n\n return {\n ...player,\n balance: newBalance,\n };\n }\n\n /**\n * Applies balance recovery over time.\n *\n * Balance recovers quickly when not being disrupted, allowing\n * fighters to regain stable footing between exchanges.\n *\n * Recovery is affected by:\n * - Balance level (harder to recover when off-balance)\n * - Stamina (low stamina = slow recovery)\n * - Body part damage (leg damage reduces recovery rate)\n *\n * @param player - Current player state\n * @param deltaTime - Time elapsed in milliseconds\n * @returns Updated player state with recovered balance\n *\n * @example\n * ```typescript\n * // In game loop\n * player = system.applyRecovery(player, 16); // ~60fps\n * ```\n *\n * @korean 균형회복\n */\n applyRecovery(player: BalancePlayerState, deltaTime: number): BalancePlayerState {\n // Already at maximum balance\n if (player.balance >= this.maxBalance) {\n return player;\n }\n\n const deltaSeconds = deltaTime / 1000;\n const level = this.getBalanceLevel(player.balance);\n\n // Recovery modifier based on balance level\n let recoveryModifier = 1.0;\n if (level === BalanceLevel.OFF_BALANCE) {\n recoveryModifier = 0.7; // Harder to recover when off-balance\n } else if (level === BalanceLevel.FALLING) {\n recoveryModifier = 0.4; // Very hard to recover when falling\n }\n\n // Stamina affects recovery rate\n const staminaFactor = player.stamina / player.maxStamina;\n \n // Body part damage affects recovery rate\n const bodyModifier = this.calculateBalanceModifier(player);\n \n const finalModifier = recoveryModifier * (0.5 + staminaFactor * 0.5) * bodyModifier;\n\n const recovery = this.baseRecoveryRate * deltaSeconds * finalModifier;\n const newBalance = Math.min(this.maxBalance, player.balance + recovery);\n\n return {\n ...player,\n balance: newBalance,\n };\n }\n\n /**\n * Determines balance level from balance value.\n *\n * @param balance - Balance value (0-100)\n * @returns Current balance level\n *\n * @korean 균형수준확인\n */\n getBalanceLevel(balance: number): BalanceLevel {\n if (balance >= 80) return BalanceLevel.STABLE;\n if (balance >= 50) return BalanceLevel.UNSTEADY;\n if (balance >= 20) return BalanceLevel.OFF_BALANCE;\n return BalanceLevel.FALLING;\n }\n\n /**\n * Gets effects for a specific balance level.\n *\n * @param level - Balance level\n * @returns Effects applied at that level\n *\n * @korean 균형효과\n */\n getEffects(level: BalanceLevel): BalanceEffects {\n return this.balanceEffects[level];\n }\n\n /**\n * Applies balance effects to player state.\n *\n * Modifies player stats based on current balance level.\n *\n * @param player - Current player state\n * @returns Modified player state with balance effects\n *\n * @korean 균형효과적용\n */\n applyEffects(player: PlayerState): PlayerState {\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n\n return {\n ...player,\n defense: Math.floor(player.defense * effects.defenseMultiplier),\n speed: Math.floor(player.speed * effects.movementSpeedMultiplier),\n };\n }\n\n /**\n * Checks if player is vulnerable due to balance.\n *\n * @param player - Current player state\n * @returns True if off-balance or falling\n *\n * @korean 균형취약확인\n */\n isVulnerable(player: PlayerState): boolean {\n const level = this.getBalanceLevel(player.balance);\n return level === BalanceLevel.OFF_BALANCE || level === BalanceLevel.FALLING;\n }\n\n /**\n * Calculates damage multiplier for vulnerable balance state.\n *\n * @param player - Current player state\n * @returns Damage multiplier (1.0 = normal, >1.0 = increased damage)\n *\n * @korean 취약성배율\n */\n getVulnerabilityMultiplier(player: PlayerState): number {\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n return effects.vulnerabilityMultiplier;\n }\n\n /**\n * Checks if knockdown should occur, using a provided random function for determinism.\n *\n * @param player - Current player state\n * @param randomFn - Optional random number generator (returns number in [0,1)), defaults to Math.random\n * @returns True if knockdown should occur\n *\n * @korean 넘어짐확인\n */\n shouldKnockdown(\n player: PlayerState,\n randomFn: () => number = Math.random\n ): boolean {\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n return randomFn() < effects.knockdownRisk;\n }\n\n /**\n * Gets bilingual name for balance level.\n *\n * @param level - Balance level\n * @returns Korean and English level names\n *\n * @korean 균형이름\n */\n getLevelName(level: BalanceLevel): { korean: string; english: string } {\n const names: Record<BalanceLevel, { korean: string; english: string }> = {\n [BalanceLevel.STABLE]: {\n korean: \"안정\",\n english: \"Stable\",\n },\n [BalanceLevel.UNSTEADY]: {\n korean: \"불안정\",\n english: \"Unsteady\",\n },\n [BalanceLevel.OFF_BALANCE]: {\n korean: \"균형상실\",\n english: \"Off-Balance\",\n },\n [BalanceLevel.FALLING]: {\n korean: \"낙하중\",\n english: \"Falling\",\n },\n };\n\n return names[level];\n }\n\n /**\n * Gets color indicator for balance level (for UI).\n *\n * @param level - Balance level\n * @returns Hex color code\n *\n * @korean 균형색상\n */\n getLevelColor(level: BalanceLevel): number {\n const colors: Record<BalanceLevel, number> = {\n [BalanceLevel.STABLE]: 0x00ff00, // Green\n [BalanceLevel.UNSTEADY]: 0xffff00, // Yellow\n [BalanceLevel.OFF_BALANCE]: 0xff8800, // Orange\n [BalanceLevel.FALLING]: 0xff0000, // Red\n };\n\n return colors[level];\n }\n\n /**\n * Checks if balance is low enough to trigger fall animation.\n *\n * Falls occur when balance drops below 20% (FALLING state).\n * This creates realistic knockdown conditions from balance loss.\n *\n * @param player - Current player state\n * @returns True if fall animation should trigger\n *\n * @example\n * ```typescript\n * if (balanceSystem.shouldTriggerFall(player)) {\n * const fallType = balanceSystem.determineFallType(\n * player,\n * attackAngle,\n * attackHeight\n * );\n * animationMachine.transitionTo(FALL_TYPE_TO_ANIMATION[fallType]);\n * }\n * ```\n *\n * @korean 낙법발동확인\n */\n shouldTriggerFall(player: PlayerState): boolean {\n return player.balance < 20; // FALLING threshold\n }\n\n /**\n * Determines which fall animation to play based on attack and stance.\n *\n * Calculates fall direction using:\n * - Attack angle relative to player\n * - Attack height (high/mid/low)\n * - Player's current stance bias\n *\n * Korean falling techniques (낙법):\n * - 전방낙법 (Jeonbang Nakbeop): Forward fall\n * - 후방낙법 (Hubang Nakbeop): Backward fall\n * - 측방낙법 (Cheukbang Nakbeop): Side fall\n *\n * @param player - Current player state\n * @param attackAngle - Angle of attack in radians (0 = from front)\n * @param attackHeight - Attack height: 'high', 'mid', or 'low'\n * @returns Fall type to use for animation\n *\n * @example\n * ```typescript\n * // Player facing forward (0°), attacked from behind (π)\n * const fallType = balanceSystem.determineFallType(\n * player,\n * Math.PI,\n * 'mid'\n * );\n * // Returns: 'forward' (pushed forward by rear attack)\n *\n * // Low sweep from right side\n * const fallType = balanceSystem.determineFallType(\n * player,\n * Math.PI/2,\n * 'low'\n * );\n * // Returns: 'side_right' (swept to the side)\n * ```\n *\n * @korean 낙법유형결정\n */\n determineFallType(\n _player: PlayerState,\n attackAngle: number,\n attackHeight: \"high\" | \"mid\" | \"low\" = \"mid\"\n ): FallType {\n // Get player facing angle from position or default to 0\n const playerFacing = 0; // Default facing forward\n\n // Use attack direction to determine fall\n return determineFallDirection(attackAngle, playerFacing, attackHeight);\n }\n\n /**\n * Determines fall type based on player stance when no attack direction available.\n *\n * Uses stance bias to determine likely fall direction when balance is lost\n * without a specific attack (e.g., from fatigue, leg damage accumulation).\n *\n * @param stance - Current trigram stance\n * @returns Fall type based on stance characteristics\n *\n * @example\n * ```typescript\n * // Player in Heaven stance (aggressive forward)\n * const fallType = balanceSystem.determineFallTypeFromStance(\n * TrigramStance.GEON\n * );\n * // Returns: 'forward' (Heaven stance has forward bias)\n * ```\n *\n * @korean 자세낙법결정\n */\n determineFallTypeFromStance(stance: TrigramStance): FallType {\n return determineFallFromStance(stance);\n }\n\n /**\n * Check if player is in a grounded state based on animation state.\n *\n * Player is considered grounded when in any ground_* animation state\n * (ground_prone, ground_supine, ground_side_left, ground_side_right).\n *\n * @param animationState - Current animation state from AnimationStateMachine\n * @returns True if player is on the ground\n *\n * @example\n * ```typescript\n * const isGrounded = balanceSystem.isGrounded(\"ground_prone\");\n * // Returns: true\n *\n * const notGrounded = balanceSystem.isGrounded(\"idle\");\n * // Returns: false\n * ```\n *\n * @korean 지면상태확인\n */\n isGrounded(animationState: string): boolean {\n return animationState.startsWith(\"ground_\");\n }\n\n /**\n * Get ground state from animation state.\n *\n * Extracts the ground position type from animation state name.\n * Returns null if not in a ground state.\n *\n * @param animationState - Current animation state from AnimationStateMachine\n * @returns Ground state or null if not grounded\n *\n * @example\n * ```typescript\n * const state = balanceSystem.getGroundState(\"ground_prone\");\n * // Returns: \"prone\"\n *\n * const none = balanceSystem.getGroundState(\"idle\");\n * // Returns: null\n * ```\n *\n * @korean 지면자세가져오기\n */\n getGroundState(animationState: string): GroundState | null {\n if (!this.isGrounded(animationState)) {\n return null;\n }\n\n // Extract ground state from animation state name\n // \"ground_prone\" -> \"prone\"\n const groundType = animationState.replace(\"ground_\", \"\");\n\n // Validate that it's a valid ground state\n if (\n groundType === \"prone\" ||\n groundType === \"supine\" ||\n groundType === \"side_left\" ||\n groundType === \"side_right\"\n ) {\n return groundType as GroundState;\n }\n\n return null;\n }\n\n /**\n * Check if player can execute recovery based on stamina.\n *\n * Some recovery animations (like roll recovery) require stamina.\n * This checks if player has sufficient stamina for the recovery type.\n *\n * @param player - Current player state\n * @param recoveryType - Type of recovery animation\n * @returns True if player has enough stamina\n *\n * @example\n * ```typescript\n * // Roll recovery costs 20 stamina\n * const canRoll = balanceSystem.canRecoverWithType(player, \"roll_recovery\");\n * // Returns: true if player.stamina >= 20\n *\n * // Normal recoveries have no cost\n * const canStand = balanceSystem.canRecoverWithType(player, \"prone_standup\");\n * // Returns: true (no stamina requirement)\n * ```\n *\n * @korean 회복가능확인\n */\n canRecoverWithType(\n player: PlayerState,\n recoveryType: RecoveryAnimationType\n ): boolean {\n const config = getRecoveryConfig(recoveryType);\n\n // Check if player has enough stamina\n return player.stamina >= config.staminaCost;\n }\n\n /**\n * Apply stamina cost for recovery animation.\n *\n * Deducts stamina cost from player state for recovery animations\n * that require stamina (like roll recovery).\n *\n * @param player - Current player state\n * @param recoveryType - Type of recovery animation\n * @returns Updated player state with stamina deducted\n *\n * @example\n * ```typescript\n * // Roll recovery costs 20 stamina\n * const recovered = balanceSystem.applyRecoveryCost(player, \"roll_recovery\");\n * // recovered.stamina = player.stamina - 20\n * ```\n *\n * @korean 회복비용적용\n */\n applyRecoveryCost(\n player: PlayerState,\n recoveryType: RecoveryAnimationType\n ): PlayerState {\n const config = getRecoveryConfig(recoveryType);\n\n if (config.staminaCost === 0) {\n return player;\n }\n\n return {\n ...player,\n stamina: Math.max(0, player.stamina - config.staminaCost),\n };\n }\n\n /**\n * Get damage multiplier during recovery animation.\n *\n * Some recovery animations (like defensive getup) provide damage reduction.\n * This returns the multiplier to apply to incoming damage.\n *\n * @param recoveryType - Type of recovery animation\n * @param currentFrame - Current frame in the animation\n * @returns Damage multiplier (1.0 = normal, 0.5 = 50% reduction)\n *\n * @example\n * ```typescript\n * // Defensive getup has 50% damage reduction\n * const multiplier = balanceSystem.getRecoveryDamageMultiplier(\"defensive_getup\", 20);\n * // Returns: 0.5 (50% damage reduction)\n *\n * // Normal recoveries have no reduction\n * const normal = balanceSystem.getRecoveryDamageMultiplier(\"prone_standup\", 15);\n * // Returns: 1.0 (full damage)\n * ```\n *\n * @korean 회복피해배율\n */\n getRecoveryDamageMultiplier(\n recoveryType: RecoveryAnimationType,\n currentFrame: number\n ): number {\n const config = getRecoveryConfig(recoveryType);\n\n // Only apply damage reduction during vulnerable frames\n if (!isVulnerableFrame(recoveryType, currentFrame)) {\n return 1.0; // No vulnerability = full damage (or no damage if invulnerable)\n }\n\n // Apply damage reduction\n // damageReduction of 0.5 means 50% reduction, so multiplier is 0.5\n return 1.0 - config.damageReduction;\n }\n\n /**\n * Start a stance transition, creating vulnerability window.\n *\n * When a player changes stance, they become vulnerable for 0.5s with\n * a 1.5x damage multiplier. This creates tactical depth around stance changes.\n *\n * @param player - Current player state\n * @param newStance - Target stance to transition to\n * @param currentTime - Current game time in milliseconds\n * @returns Updated player state with transition tracking\n *\n * @example\n * ```typescript\n * // Player switches from Heaven to Water stance\n * const transitioning = balanceSystem.startStanceTransition(\n * player,\n * TrigramStance.GAM,\n * Date.now()\n * );\n * // transitioning.transitionState.isTransitioning = true\n * // transitioning.transitionState.vulnerabilityMultiplier = 1.5\n * ```\n *\n * @korean 자세전환시작\n */\n startStanceTransition(\n player: BalancePlayerState,\n newStance: TrigramStance,\n currentTime: number\n ): BalancePlayerState {\n // No-op if changing to the same stance (avoid unnecessary transitions)\n if (newStance === player.currentStance) {\n return player;\n }\n\n // Initialize transition state\n const transitionState: TransitionState = {\n isTransitioning: true,\n transitionStartTime: currentTime,\n vulnerabilityMultiplier: this.transitionVulnerabilityMultiplier,\n fromStance: player.currentStance,\n toStance: newStance,\n };\n\n // Add to stance change history\n const historyEntry: StanceChangeRecord = {\n timestamp: currentTime,\n fromStance: player.currentStance,\n toStance: newStance,\n };\n\n const history = player.stanceChangeHistory ?? [];\n const newHistory = [...history, historyEntry].slice(-this.stanceChangeHistoryLimit);\n\n // Check for rapid stance changes (inclusive boundary)\n const recentChanges = newHistory.filter(\n (entry) => currentTime - entry.timestamp <= this.rapidChangeWindow\n );\n\n let rapidChangePenaltyEnd = player.rapidChangePenaltyEnd;\n\n if (recentChanges.length > this.rapidChangeThreshold) {\n // Apply rapid change penalty\n rapidChangePenaltyEnd = currentTime + this.rapidChangePenaltyDuration;\n }\n\n return {\n ...player,\n currentStance: newStance,\n lastStanceChangeTime: currentTime,\n transitionState,\n stanceChangeHistory: newHistory,\n rapidChangePenaltyEnd,\n };\n }\n\n /**\n * Update stance transition state based on time elapsed.\n *\n * Transitions last 0.5s. After that, vulnerability window closes.\n * Called each frame to manage transition timing.\n *\n * @param player - Current player state\n * @param currentTime - Current game time in milliseconds\n * @returns Updated player state\n *\n * @example\n * ```typescript\n * // In game loop\n * player = balanceSystem.updateTransition(player, Date.now());\n * ```\n *\n * @korean 전환상태갱신\n */\n updateTransition(\n player: BalancePlayerState,\n currentTime: number\n ): BalancePlayerState {\n if (!player.transitionState?.isTransitioning) {\n return player;\n }\n\n const elapsed = currentTime - player.transitionState.transitionStartTime;\n\n // Check if transition window has ended\n if (elapsed >= this.transitionDuration) {\n return {\n ...player,\n transitionState: {\n ...player.transitionState,\n isTransitioning: false,\n vulnerabilityMultiplier: 1.0,\n },\n };\n }\n\n return player;\n }\n\n /**\n * Calculate balance modifier based on body part damage.\n *\n * Leg damage significantly reduces balance. The leg-specific modifier\n * scales linearly from 0.7x at 0% leg health to 1.0x at 100% leg health:\n * - 100% leg health: 1.0x balance (no reduction from legs)\n * - 70% leg health: ≈0.91x balance (≈9% reduction from legs)\n * - 30% leg health: ≈0.79x balance (≈21% reduction from legs)\n * - 0% leg health: 0.7x balance (30% reduction from legs)\n *\n * Torso damage also affects balance but to a lesser degree, and the\n * combined leg/torso modifier is clamped so the final balance modifier\n * stays within the range 0.5x to 1.0x.\n *\n * @param player - Current player state with body part health\n * @returns Balance modifier (0.5 to 1.0)\n *\n * @example\n * ```typescript\n * const modifier = balanceSystem.calculateBalanceModifier(player);\n * const effectiveBalance = player.balance * modifier;\n * ```\n *\n * @korean 균형조정계수계산\n */\n calculateBalanceModifier(player: BalancePlayerState): number {\n if (!player.bodyPartHealth || !player.bodyPartMaxHealth) {\n return 1.0; // No body part tracking, no modifier\n }\n\n // Read leg and torso health ratios from body part health tracking\n const leftLegHealthRaw =\n (player.bodyPartHealth.legLeft ?? 0) /\n (player.bodyPartMaxHealth.legLeft ?? 1);\n const rightLegHealthRaw =\n (player.bodyPartHealth.legRight ?? 0) /\n (player.bodyPartMaxHealth.legRight ?? 1);\n \n // Use torsoLower for core balance (lower body)\n const torsoHealthRaw =\n (player.bodyPartHealth.torsoLower ?? 0) /\n (player.bodyPartMaxHealth.torsoLower ?? 1);\n\n // Clamp health ratios to [0, 1] to prevent out-of-range values\n const leftLegHealth = Math.max(0, Math.min(1, leftLegHealthRaw));\n const rightLegHealth = Math.max(0, Math.min(1, rightLegHealthRaw));\n const torsoHealth = Math.max(0, Math.min(1, torsoHealthRaw));\n\n // Average leg health (both legs affect balance)\n const avgLegHealth = (leftLegHealth + rightLegHealth) / 2;\n\n // Leg damage: 0-30% reduction based on damage\n const legModifier = 0.7 + avgLegHealth * 0.3; // Range: 0.7 to 1.0\n\n // Torso damage: 0-10% reduction based on damage\n const torsoModifier = 0.9 + torsoHealth * 0.1; // Range: 0.9 to 1.0\n\n // Combine modifiers (multiplicative)\n const combinedModifier = legModifier * torsoModifier;\n\n // Clamp to [0.5, 1.0] range as documented\n return Math.max(0.5, Math.min(1.0, combinedModifier));\n }\n\n /**\n * Calculate knockback resistance based on current stance.\n *\n * Different stances provide varying levels of knockback resistance:\n * - Defensive stances (Mountain, Earth): +50% resistance\n * - Balanced stances (Water, Wind): normal resistance\n * - Offensive stances (Heaven, Fire, Thunder): -30% resistance\n * - Fluid stance (Lake): normal resistance\n *\n * @param stance - Current trigram stance\n * @returns Knockback resistance multiplier (0.7 to 1.5)\n *\n * @example\n * ```typescript\n * const resistance = balanceSystem.getKnockbackResistance(TrigramStance.GAN);\n * const effectiveKnockback = baseKnockback * (1.0 / resistance);\n * ```\n *\n * @korean 넉백저항계산\n */\n getKnockbackResistance(stance: TrigramStance): number {\n // Defensive stances: +50% resistance\n if (stance === TrigramStance.GAN || stance === TrigramStance.GON) {\n // Mountain, Earth\n return 1.5;\n }\n\n // Offensive stances: -30% resistance\n if (stance === TrigramStance.GEON || stance === TrigramStance.LI || stance === TrigramStance.JIN) {\n // Heaven, Fire, Thunder\n return 0.7;\n }\n\n // Balanced/adaptive stances: normal resistance\n return 1.0; // Water, Wind, Lake\n }\n\n /**\n * Check if rapid stance change penalty is active.\n *\n * Penalty applies when player changes stances >2 times in 3 seconds.\n * Lasts for 2 seconds after the last rapid change.\n * The penalty increases balance loss by 20% in `disruptBalance()`.\n *\n * @param player - Current player state\n * @param currentTime - Current game time in milliseconds\n * @returns True if penalty is active\n *\n * @example\n * ```typescript\n * // The penalty is applied automatically in disruptBalance()\n * if (balanceSystem.isRapidChangePenaltyActive(player, Date.now())) {\n * // Penalty active: balance loss will be increased by 20%\n * cy.log(\"Rapid change penalty active\");\n * }\n * ```\n *\n * @korean 급속변경벌칙확인\n */\n isRapidChangePenaltyActive(\n player: BalancePlayerState,\n currentTime: number\n ): boolean {\n if (!player.rapidChangePenaltyEnd) {\n return false;\n }\n return currentTime < player.rapidChangePenaltyEnd;\n }\n\n /**\n * Get total vulnerability multiplier considering all factors.\n *\n * Combines:\n * - Base balance state vulnerability (1.0 to 2.0)\n * - Stance transition vulnerability (1.5x during 0.5s window)\n *\n * @param player - Current player state\n * @returns Combined vulnerability multiplier\n *\n * @example\n * ```typescript\n * const multiplier = balanceSystem.getTotalVulnerabilityMultiplier(player);\n * const finalDamage = baseDamage * multiplier;\n * ```\n *\n * @korean 총취약성배율\n */\n getTotalVulnerabilityMultiplier(player: BalancePlayerState): number {\n // Get base balance vulnerability\n const level = this.getBalanceLevel(player.balance);\n const effects = this.getEffects(level);\n let multiplier = effects.vulnerabilityMultiplier;\n\n // Apply transition vulnerability if active\n if (player.transitionState?.isTransitioning) {\n multiplier *= player.transitionState.vulnerabilityMultiplier;\n }\n\n return multiplier;\n }\n}\n\nexport default BalanceSystem;\n"],"mappings":"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"}
@@ -18,7 +18,6 @@
18
18
  *
19
19
  * **Korean**: 파쇄 상태효과 ID
20
20
  *
21
- * @public
22
21
  * @korean 파쇄상태효과ID
23
22
  */
24
23
  export declare const BREAKING_STATUS_EFFECT_IDS: {
@@ -69,7 +68,6 @@ export declare const BREAKING_STATUS_EFFECT_IDS: {
69
68
  * Type representing valid breaking status effect IDs.
70
69
  * Use this type when referencing breaking effect IDs to ensure type safety.
71
70
  *
72
- * @public
73
71
  * @korean 파쇄상태효과ID타입
74
72
  */
75
73
  export type BreakingStatusEffectId = (typeof BREAKING_STATUS_EFFECT_IDS)[keyof typeof BREAKING_STATUS_EFFECT_IDS];
@@ -79,7 +77,6 @@ export type BreakingStatusEffectId = (typeof BREAKING_STATUS_EFFECT_IDS)[keyof t
79
77
  * @param id - The ID to validate
80
78
  * @returns true if the ID is a valid breaking status effect
81
79
  *
82
- * @public
83
80
  * @korean 파쇄상태효과ID검증
84
81
  */
85
82
  export declare function isBreakingStatusEffectId(id: string): id is BreakingStatusEffectId;
@@ -88,7 +85,6 @@ export declare function isBreakingStatusEffectId(id: string): id is BreakingStat
88
85
  *
89
86
  * @returns Array of all breaking status effect ID strings
90
87
  *
91
- * @public
92
88
  * @korean 모든파쇄상태효과ID
93
89
  */
94
90
  export declare function getAllBreakingStatusEffectIds(): readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"BreakingStatusEffects.d.ts","sourceRoot":"","sources":["../../../src/systems/combat/BreakingStatusEffects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B;IACrC;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;CAEK,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAChC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,OAAO,0BAA0B,CAAC,CAAC;AAE/E;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,GACT,EAAE,IAAI,sBAAsB,CAI9B;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,IAAI,SAAS,MAAM,EAAE,CAEjE;AAED,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"BreakingStatusEffects.d.ts","sourceRoot":"","sources":["../../../src/systems/combat/BreakingStatusEffects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B;IACrC;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;CAEK,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAChC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,OAAO,0BAA0B,CAAC,CAAC;AAE/E;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,GACT,EAAE,IAAI,sBAAsB,CAI9B;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,IAAI,SAAS,MAAM,EAAE,CAEjE;AAED,eAAe,0BAA0B,CAAC"}
@@ -19,7 +19,6 @@
19
19
  *
20
20
  * **Korean**: 파쇄 상태효과 ID
21
21
  *
22
- * @public
23
22
  * @korean 파쇄상태효과ID
24
23
  */
25
24
  var BREAKING_STATUS_EFFECT_IDS = {
@@ -72,7 +71,6 @@ var BREAKING_STATUS_EFFECT_IDS = {
72
71
  * @param id - The ID to validate
73
72
  * @returns true if the ID is a valid breaking status effect
74
73
  *
75
- * @public
76
74
  * @korean 파쇄상태효과ID검증
77
75
  */
78
76
  function isBreakingStatusEffectId(id) {
@@ -83,7 +81,6 @@ function isBreakingStatusEffectId(id) {
83
81
  *
84
82
  * @returns Array of all breaking status effect ID strings
85
83
  *
86
- * @public
87
84
  * @korean 모든파쇄상태효과ID
88
85
  */
89
86
  function getAllBreakingStatusEffectIds() {
@@ -1 +1 @@
1
- {"version":3,"file":"BreakingStatusEffects.js","names":[],"sources":["../../../src/systems/combat/BreakingStatusEffects.ts"],"sourcesContent":["/**\n * Breaking Technique Status Effect Constants\n *\n * **Korean**: 파쇄기술 상태효과 상수\n *\n * Defines status effect IDs used by the limb exposure and breaking technique system.\n * These effects are applied when joints/bones are broken during counter-attacks.\n *\n * @module systems/combat/BreakingStatusEffects\n * @korean 파쇄상태효과\n */\n\n/**\n * Status effect IDs for breaking techniques.\n *\n * These IDs are used when creating StatusEffect objects after successful\n * breaking technique execution. Each ID should eventually have a corresponding\n * StatusEffect implementation in the game's effect system.\n *\n * **Korean**: 파쇄 상태효과 ID\n *\n * @public\n * @korean 파쇄상태효과ID\n */\nexport const BREAKING_STATUS_EFFECT_IDS = {\n /**\n * General pain effect applied on all successful breaks.\n * Maps to existing VitalPointEffectType.PAIN.\n * @korean 고통\n */\n PAIN: \"pain\" as const,\n\n /**\n * Severe injury from high-severity breaks (severity > 0.8).\n * Indicates major trauma requiring immediate attention.\n * @korean 심각한부상\n */\n SEVERE_INJURY: \"severe_injury\" as const,\n\n /**\n * Limb is completely disabled and cannot be used.\n * Applied to broken joints/bones preventing limb function.\n * @korean 사지불능\n */\n DISABLED_LIMB: \"disabled_limb\" as const,\n\n /**\n * Moderate limb injury (severity 0.5-0.8).\n * Limb can be used but with reduced effectiveness.\n * @korean 사지부상\n */\n INJURED_LIMB: \"injured_limb\" as const,\n\n /**\n * Minor joint sprain or strain (severity < 0.5).\n * Causes discomfort but doesn't prevent use.\n * @korean 관절염좌\n */\n SPRAINED_JOINT: \"sprained_joint\" as const,\n\n /**\n * Movement speed reduction from leg/ankle breaks.\n * Applied when ankle or knee is broken.\n * @korean 이동력감소\n */\n IMPAIRED_MOBILITY: \"impaired_mobility\" as const,\n\n /**\n * Bleeding from severe bone breaks (severity > 0.6).\n * Causes continuous health drain.\n * @korean 출혈\n */\n BLEEDING: \"bleeding\" as const,\n} as const;\n\n/**\n * Type representing valid breaking status effect IDs.\n * Use this type when referencing breaking effect IDs to ensure type safety.\n *\n * @public\n * @korean 파쇄상태효과ID타입\n */\nexport type BreakingStatusEffectId =\n (typeof BREAKING_STATUS_EFFECT_IDS)[keyof typeof BREAKING_STATUS_EFFECT_IDS];\n\n/**\n * Helper function to validate if a string is a valid breaking status effect ID.\n *\n * @param id - The ID to validate\n * @returns true if the ID is a valid breaking status effect\n *\n * @public\n * @korean 파쇄상태효과ID검증\n */\nexport function isBreakingStatusEffectId(\n id: string\n): id is BreakingStatusEffectId {\n return Object.values(BREAKING_STATUS_EFFECT_IDS).includes(\n id as BreakingStatusEffectId\n );\n}\n\n/**\n * Get all breaking status effect IDs as an array.\n *\n * @returns Array of all breaking status effect ID strings\n *\n * @public\n * @korean 모든파쇄상태효과ID\n */\nexport function getAllBreakingStatusEffectIds(): readonly string[] {\n return Object.values(BREAKING_STATUS_EFFECT_IDS);\n}\n\nexport default BREAKING_STATUS_EFFECT_IDS;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAa,6BAA6B;;;;;;CAMxC,MAAM;;;;;;CAON,eAAe;;;;;;CAOf,eAAe;;;;;;CAOf,cAAc;;;;;;CAOd,gBAAgB;;;;;;CAOhB,mBAAmB;;;;;;CAOnB,UAAU;CACX;;;;;;;;;;AAqBD,SAAgB,yBACd,IAC8B;CAC9B,OAAO,OAAO,OAAO,2BAA2B,CAAC,SAC/C,GACD;;;;;;;;;;AAWH,SAAgB,gCAAmD;CACjE,OAAO,OAAO,OAAO,2BAA2B"}
1
+ {"version":3,"file":"BreakingStatusEffects.js","names":[],"sources":["../../../src/systems/combat/BreakingStatusEffects.ts"],"sourcesContent":["/**\n * Breaking Technique Status Effect Constants\n *\n * **Korean**: 파쇄기술 상태효과 상수\n *\n * Defines status effect IDs used by the limb exposure and breaking technique system.\n * These effects are applied when joints/bones are broken during counter-attacks.\n *\n * @module systems/combat/BreakingStatusEffects\n * @korean 파쇄상태효과\n */\n\n/**\n * Status effect IDs for breaking techniques.\n *\n * These IDs are used when creating StatusEffect objects after successful\n * breaking technique execution. Each ID should eventually have a corresponding\n * StatusEffect implementation in the game's effect system.\n *\n * **Korean**: 파쇄 상태효과 ID\n *\n * @korean 파쇄상태효과ID\n */\nexport const BREAKING_STATUS_EFFECT_IDS = {\n /**\n * General pain effect applied on all successful breaks.\n * Maps to existing VitalPointEffectType.PAIN.\n * @korean 고통\n */\n PAIN: \"pain\" as const,\n\n /**\n * Severe injury from high-severity breaks (severity > 0.8).\n * Indicates major trauma requiring immediate attention.\n * @korean 심각한부상\n */\n SEVERE_INJURY: \"severe_injury\" as const,\n\n /**\n * Limb is completely disabled and cannot be used.\n * Applied to broken joints/bones preventing limb function.\n * @korean 사지불능\n */\n DISABLED_LIMB: \"disabled_limb\" as const,\n\n /**\n * Moderate limb injury (severity 0.5-0.8).\n * Limb can be used but with reduced effectiveness.\n * @korean 사지부상\n */\n INJURED_LIMB: \"injured_limb\" as const,\n\n /**\n * Minor joint sprain or strain (severity < 0.5).\n * Causes discomfort but doesn't prevent use.\n * @korean 관절염좌\n */\n SPRAINED_JOINT: \"sprained_joint\" as const,\n\n /**\n * Movement speed reduction from leg/ankle breaks.\n * Applied when ankle or knee is broken.\n * @korean 이동력감소\n */\n IMPAIRED_MOBILITY: \"impaired_mobility\" as const,\n\n /**\n * Bleeding from severe bone breaks (severity > 0.6).\n * Causes continuous health drain.\n * @korean 출혈\n */\n BLEEDING: \"bleeding\" as const,\n} as const;\n\n/**\n * Type representing valid breaking status effect IDs.\n * Use this type when referencing breaking effect IDs to ensure type safety.\n *\n * @korean 파쇄상태효과ID타입\n */\nexport type BreakingStatusEffectId =\n (typeof BREAKING_STATUS_EFFECT_IDS)[keyof typeof BREAKING_STATUS_EFFECT_IDS];\n\n/**\n * Helper function to validate if a string is a valid breaking status effect ID.\n *\n * @param id - The ID to validate\n * @returns true if the ID is a valid breaking status effect\n *\n * @korean 파쇄상태효과ID검증\n */\nexport function isBreakingStatusEffectId(\n id: string\n): id is BreakingStatusEffectId {\n return Object.values(BREAKING_STATUS_EFFECT_IDS).includes(\n id as BreakingStatusEffectId\n );\n}\n\n/**\n * Get all breaking status effect IDs as an array.\n *\n * @returns Array of all breaking status effect ID strings\n *\n * @korean 모든파쇄상태효과ID\n */\nexport function getAllBreakingStatusEffectIds(): readonly string[] {\n return Object.values(BREAKING_STATUS_EFFECT_IDS);\n}\n\nexport default BREAKING_STATUS_EFFECT_IDS;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAa,6BAA6B;;;;;;CAMxC,MAAM;;;;;;CAON,eAAe;;;;;;CAOf,eAAe;;;;;;CAOf,cAAc;;;;;;CAOd,gBAAgB;;;;;;CAOhB,mBAAmB;;;;;;CAOnB,UAAU;CACX;;;;;;;;;AAmBD,SAAgB,yBACd,IAC8B;CAC9B,OAAO,OAAO,OAAO,2BAA2B,CAAC,SAC/C,GACD;;;;;;;;;AAUH,SAAgB,gCAAmD;CACjE,OAAO,OAAO,OAAO,2BAA2B"}
@@ -82,7 +82,6 @@ interface StateCapability {
82
82
  * const modifiedDamage = baseDamage * capability.accuracyModifier;
83
83
  * ```
84
84
  *
85
- * @public
86
85
  * @korean 전투상태시스템
87
86
  */
88
87
  export declare class CombatStateSystem {
@@ -118,7 +117,6 @@ export declare class CombatStateSystem {
118
117
  * }
119
118
  * ```
120
119
  *
121
- * @public
122
120
  * @korean 상태결정
123
121
  */
124
122
  determineState(player: PlayerState, currentTime?: number): CombatReadinessState;
@@ -146,7 +144,6 @@ export declare class CombatStateSystem {
146
144
  * }
147
145
  * ```
148
146
  *
149
- * @public
150
147
  * @korean 능력조회
151
148
  */
152
149
  getCapability(state: CombatReadinessState): StateCapability;
@@ -169,7 +166,6 @@ export declare class CombatStateSystem {
169
166
  * );
170
167
  * ```
171
168
  *
172
- * @public
173
169
  * @korean 상태적용
174
170
  */
175
171
  applyStateModifiers(player: PlayerState, state: CombatReadinessState): PlayerState;
@@ -179,7 +175,6 @@ export declare class CombatStateSystem {
179
175
  * @param state - Combat readiness state
180
176
  * @returns Korean and English state names
181
177
  *
182
- * @public
183
178
  * @korean 상태이름
184
179
  */
185
180
  getStateName(state: CombatReadinessState): {
@@ -192,7 +187,6 @@ export declare class CombatStateSystem {
192
187
  * @param state - Combat readiness state
193
188
  * @returns Emoji representing the state
194
189
  *
195
- * @public
196
190
  * @korean 상태아이콘
197
191
  */
198
192
  getStateEmoji(state: CombatReadinessState): string;
@@ -229,7 +223,6 @@ export declare class CombatStateSystem {
229
223
  * @param currentTime - Timestamp of the hit
230
224
  * @returns Updated player state with recorded hit
231
225
  *
232
- * @public
233
226
  * @korean 타격기록
234
227
  */
235
228
  recordHit(player: PlayerState, currentTime: number): PlayerState;
@@ -242,7 +235,6 @@ export declare class CombatStateSystem {
242
235
  * @param currentTime - Timestamp when entering helpless state
243
236
  * @returns Updated player state
244
237
  *
245
- * @public
246
238
  * @korean 무력상태기록
247
239
  */
248
240
  enterHelplessState(player: PlayerState, currentTime: number): PlayerState;
@@ -255,7 +247,6 @@ export declare class CombatStateSystem {
255
247
  * @param currentTime - Current timestamp
256
248
  * @returns True if recovery is possible
257
249
  *
258
- * @public
259
250
  * @korean 회복가능확인
260
251
  */
261
252
  canRecoverFromHelpless(player: PlayerState, currentTime: number): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"CombatStateSystem.d.ts","sourceRoot":"","sources":["../../../src/systems/combat/CombatStateSystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;GAIG;AACH,oBAAY,oBAAoB;IAC9B,+CAA+C;IAC/C,KAAK,UAAU;IACf,8CAA8C;IAC9C,MAAM,WAAW;IACjB,mDAAmD;IACnD,UAAU,eAAe;IACzB,8CAA8C;IAC9C,QAAQ,aAAa;CACtB;AAED;;;;GAIG;AACH,UAAU,eAAe;IACvB,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,8BAA8B;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAyChC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,oBAAoB;IAoF/E;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe;IAI3D;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,mBAAmB,CACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,oBAAoB,GAC1B,WAAW;IAad;;;;;;;;OAQG;IACH,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAuB9E;;;;;;;;OAQG;IACH,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAWlD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAevB;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW;IAahE;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW;IAOzE;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAU1E;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"CombatStateSystem.d.ts","sourceRoot":"","sources":["../../../src/systems/combat/CombatStateSystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;GAIG;AACH,oBAAY,oBAAoB;IAC9B,+CAA+C;IAC/C,KAAK,UAAU;IACf,8CAA8C;IAC9C,MAAM,WAAW;IACjB,mDAAmD;IACnD,UAAU,eAAe;IACzB,8CAA8C;IAC9C,QAAQ,aAAa;CACtB;AAED;;;;GAIG;AACH,UAAU,eAAe;IACvB,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,8BAA8B;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAyChC;IAEF;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,oBAAoB;IAoF/E;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe;IAI3D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,mBAAmB,CACjB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,oBAAoB,GAC1B,WAAW;IAad;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAuB9E;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAWlD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAevB;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW;IAahE;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW;IAOzE;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAU1E;AAED,eAAe,iBAAiB,CAAC"}
@@ -40,7 +40,6 @@ var CombatReadinessState = /* @__PURE__ */ function(CombatReadinessState) {
40
40
  * const modifiedDamage = baseDamage * capability.accuracyModifier;
41
41
  * ```
42
42
  *
43
- * @public
44
43
  * @korean 전투상태시스템
45
44
  */
46
45
  var CombatStateSystem = class {
@@ -117,7 +116,6 @@ var CombatStateSystem = class {
117
116
  * }
118
117
  * ```
119
118
  *
120
- * @public
121
119
  * @korean 상태결정
122
120
  */
123
121
  determineState(player, currentTime) {
@@ -164,7 +162,6 @@ var CombatStateSystem = class {
164
162
  * }
165
163
  * ```
166
164
  *
167
- * @public
168
165
  * @korean 능력조회
169
166
  */
170
167
  getCapability(state) {
@@ -189,7 +186,6 @@ var CombatStateSystem = class {
189
186
  * );
190
187
  * ```
191
188
  *
192
- * @public
193
189
  * @korean 상태적용
194
190
  */
195
191
  applyStateModifiers(player, state) {
@@ -209,7 +205,6 @@ var CombatStateSystem = class {
209
205
  * @param state - Combat readiness state
210
206
  * @returns Korean and English state names
211
207
  *
212
- * @public
213
208
  * @korean 상태이름
214
209
  */
215
210
  getStateName(state) {
@@ -238,7 +233,6 @@ var CombatStateSystem = class {
238
233
  * @param state - Combat readiness state
239
234
  * @returns Emoji representing the state
240
235
  *
241
- * @public
242
236
  * @korean 상태아이콘
243
237
  */
244
238
  getStateEmoji(state) {
@@ -299,7 +293,6 @@ var CombatStateSystem = class {
299
293
  * @param currentTime - Timestamp of the hit
300
294
  * @returns Updated player state with recorded hit
301
295
  *
302
- * @public
303
296
  * @korean 타격기록
304
297
  */
305
298
  recordHit(player, currentTime) {
@@ -319,7 +312,6 @@ var CombatStateSystem = class {
319
312
  * @param currentTime - Timestamp when entering helpless state
320
313
  * @returns Updated player state
321
314
  *
322
- * @public
323
315
  * @korean 무력상태기록
324
316
  */
325
317
  enterHelplessState(player, currentTime) {
@@ -337,7 +329,6 @@ var CombatStateSystem = class {
337
329
  * @param currentTime - Current timestamp
338
330
  * @returns True if recovery is possible
339
331
  *
340
- * @public
341
332
  * @korean 회복가능확인
342
333
  */
343
334
  canRecoverFromHelpless(player, currentTime) {