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.
- package/lib/audio/AudioManager.d.ts +26 -0
- package/lib/audio/AudioManager.d.ts.map +1 -1
- package/lib/audio/AudioManager.js +26 -0
- package/lib/audio/AudioManager.js.map +1 -1
- package/lib/audio/AudioPool.js +3 -0
- package/lib/audio/AudioPool.js.map +1 -1
- package/lib/audio/index.d.ts.map +1 -1
- package/lib/audio/index.js.map +1 -1
- package/lib/audio/types.d.ts +18 -2
- package/lib/audio/types.d.ts.map +1 -1
- package/lib/audio/types.js +1 -0
- package/lib/audio/types.js.map +1 -1
- package/lib/components/effects/WindParticles3D.d.ts.map +1 -1
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/index.js.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts +0 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js +0 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ArterialSpray3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BoneCrackParticles3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
- package/lib/components/screens/combat/components/effects/DustClouds3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/EarthCrackEffect3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/EarthHealingEffect3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/ImpactSparks3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/LiPrecisionTargetingOverlay.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/NerveStrikeParticles3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/WaterRipple3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/WaterWave3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/index.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts +0 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js +0 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts +0 -2
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js +0 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.d.ts.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAudio.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
- package/lib/components/screens/combat/hooks/useGrapplingAudio.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/usePreloadCombatAudio.d.ts.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.d.ts.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/Key3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/Key3D.js.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.d.ts.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.d.ts.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.d.ts.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/index.d.ts.map +1 -1
- package/lib/components/screens/endscreen/index.d.ts.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.d.ts.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
- package/lib/components/screens/intro/components/AbilityListOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.d.ts.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
- package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts +0 -1
- package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts +0 -1
- package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts.map +1 -1
- package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts +0 -1
- package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
- package/lib/components/screens/training/components/DamageNumber3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingAICharacter3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingArena3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingHitEffects3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
- package/lib/components/screens/training/components/index.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
- package/lib/components/shared/base/AccessibilityProvider.d.ts.map +1 -1
- package/lib/components/shared/base/BaseButton.d.ts.map +1 -1
- package/lib/components/shared/base/BaseButton.js.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.d.ts.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
- package/lib/components/shared/base/BasePanel.d.ts.map +1 -1
- package/lib/components/shared/base/BasePanel.js.map +1 -1
- package/lib/components/shared/base/BaseText.d.ts.map +1 -1
- package/lib/components/shared/base/BaseText.js.map +1 -1
- package/lib/components/shared/base/ResponsiveContainer.d.ts.map +1 -1
- package/lib/components/shared/base/index.d.ts.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.d.ts.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.d.ts.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
- package/lib/components/shared/effects/ScreenFlash.d.ts.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.d.ts.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.js +0 -1
- package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.d.ts +0 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.d.ts.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js +0 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
- package/lib/components/shared/mobile/HapticController.d.ts +0 -13
- package/lib/components/shared/mobile/HapticController.d.ts.map +1 -1
- package/lib/components/shared/mobile/HapticController.js +0 -10
- package/lib/components/shared/mobile/HapticController.js.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.d.ts.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
- package/lib/components/shared/mobile/PerformanceMonitor.d.ts +0 -15
- package/lib/components/shared/mobile/PerformanceMonitor.d.ts.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.d.ts +0 -1
- package/lib/components/shared/mobile/StanceWheelPure.d.ts.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.js +0 -1
- package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.d.ts +0 -4
- package/lib/components/shared/mobile/TouchOptimizer.d.ts.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.js +0 -3
- package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.d.ts.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.js +0 -1
- package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
- package/lib/components/shared/mobile/index.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.d.ts +0 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.d.ts +0 -1
- package/lib/components/shared/three/anatomy/Foot3D.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.d.ts +0 -1
- package/lib/components/shared/three/anatomy/Hand3D.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.d.ts.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.d.ts.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
- package/lib/components/shared/three/effects/ExplosiveBurstEffect3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/GrapplingIndicator3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
- package/lib/components/shared/three/effects/LimbExposureIndicator3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/NerveDisruptionEffect3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.d.ts.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.d.ts.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
- package/lib/components/shared/three/effects/ThunderEffect3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
- package/lib/components/shared/three/index.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts +0 -6
- package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.js +0 -4
- package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.d.ts +0 -1
- package/lib/components/shared/three/indicators/GuardIndicator.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js +0 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.d.ts +0 -7
- package/lib/components/shared/three/indicators/HapticFeedback.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.js +0 -2
- package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts +0 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js +0 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts +0 -1
- package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts.map +1 -1
- package/lib/components/shared/three/models/Player3DWithTransitions.d.ts.map +1 -1
- package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.d.ts.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
- package/lib/components/shared/three/optimization/InstancedGeometry.d.ts.map +1 -1
- package/lib/components/shared/three/optimization/LODSystem.d.ts.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
- package/lib/components/shared/three/scene/DebugCollision.d.ts +0 -2
- package/lib/components/shared/three/scene/DebugCollision.d.ts.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.d.ts.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.d.ts.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator.d.ts.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.d.ts.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.d.ts.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.d.ts.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.d.ts.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
- package/lib/components/shared/three/ui/MenuList.d.ts.map +1 -1
- package/lib/components/shared/three/ui/MenuList.js.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.d.ts.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts +0 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js +0 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBarContainer.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.d.ts.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
- package/lib/components/shared/three/ui/VulnerabilityWindowHUD.d.ts.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.d.ts.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
- package/lib/components/shared/ui/CombatTimer.d.ts.map +1 -1
- package/lib/components/shared/ui/CombatTimer.js.map +1 -1
- package/lib/components/shared/ui/ErrorBoundary.d.ts.map +1 -1
- package/lib/components/shared/ui/ErrorModal.d.ts.map +1 -1
- package/lib/components/shared/ui/ErrorModal.js.map +1 -1
- package/lib/components/shared/ui/HUDSection.d.ts.map +1 -1
- package/lib/components/shared/ui/LoadingState.d.ts.map +1 -1
- package/lib/components/shared/ui/LoadingState.js.map +1 -1
- package/lib/components/shared/ui/MobileHUDLayout.d.ts +0 -1
- package/lib/components/shared/ui/MobileHUDLayout.d.ts.map +1 -1
- package/lib/components/shared/ui/ResponsiveContainer.d.ts +0 -1
- package/lib/components/shared/ui/ResponsiveContainer.d.ts.map +1 -1
- package/lib/components/shared/ui/SplashScreen.d.ts.map +1 -1
- package/lib/components/shared/ui/SplashScreen.js +2 -2
- package/lib/components/shared/ui/SplashScreen.js.map +1 -1
- package/lib/components/shared/ui/StyledHUDPanel.d.ts.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.d.ts.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
- package/lib/components/shared/ui/VolumeControl.d.ts.map +1 -1
- package/lib/components/shared/ui/VolumeControl.js.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.d.ts.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
- package/lib/components/test/Hello3D.d.ts.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.d.ts.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
- package/lib/components/ui/combat/ComboCounter.d.ts.map +1 -1
- package/lib/components/ui/combat/PressureMeter.d.ts.map +1 -1
- package/lib/systems/CombatSystem.d.ts +0 -6
- package/lib/systems/CombatSystem.d.ts.map +1 -1
- package/lib/systems/CombatSystem.js +0 -6
- package/lib/systems/CombatSystem.js.map +1 -1
- package/lib/systems/EffectCalculator.d.ts +0 -7
- package/lib/systems/EffectCalculator.d.ts.map +1 -1
- package/lib/systems/EffectCalculator.js +0 -4
- package/lib/systems/EffectCalculator.js.map +1 -1
- package/lib/systems/LayoutSystem.d.ts +0 -1
- package/lib/systems/LayoutSystem.d.ts.map +1 -1
- package/lib/systems/LayoutSystem.js +0 -1
- package/lib/systems/LayoutSystem.js.map +1 -1
- package/lib/systems/PlayerEffectManager.d.ts +0 -10
- package/lib/systems/PlayerEffectManager.d.ts.map +1 -1
- package/lib/systems/PlayerEffectManager.js +0 -3
- package/lib/systems/PlayerEffectManager.js.map +1 -1
- package/lib/systems/ResponsiveScaling.d.ts +0 -12
- package/lib/systems/ResponsiveScaling.d.ts.map +1 -1
- package/lib/systems/ResponsiveScaling.js +0 -12
- package/lib/systems/ResponsiveScaling.js.map +1 -1
- package/lib/systems/TrigramSystem.d.ts +0 -13
- package/lib/systems/TrigramSystem.d.ts.map +1 -1
- package/lib/systems/TrigramSystem.js +0 -13
- package/lib/systems/TrigramSystem.js.map +1 -1
- package/lib/systems/VitalPointSystem.d.ts +0 -10
- package/lib/systems/VitalPointSystem.d.ts.map +1 -1
- package/lib/systems/VitalPointSystem.js +0 -10
- package/lib/systems/VitalPointSystem.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.d.ts +0 -4
- package/lib/systems/animation/builders/KeyframeInterpolation.d.ts.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js +0 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.d.ts +0 -4
- package/lib/systems/animation/builders/SkeletonRig.d.ts.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.js +0 -3
- package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts +0 -5
- package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.js +0 -5
- package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.d.ts +0 -6
- package/lib/systems/animation/core/AnimationHitTiming.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.js +0 -4
- package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
- package/lib/systems/animation/core/AnimationStateMachine.js +1 -0
- package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.d.ts +0 -3
- package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.d.ts +0 -3
- package/lib/systems/animation/core/LateralityTransform.d.ts.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.js +0 -1
- package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts +0 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts +0 -10
- package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.js +0 -8
- package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
- package/lib/systems/animation/core/TrigramAnimationMapping.d.ts +0 -10
- package/lib/systems/animation/core/TrigramAnimationMapping.d.ts.map +1 -1
- package/lib/systems/animation/core/TrigramStanceTransitions.d.ts +0 -2
- package/lib/systems/animation/core/TrigramStanceTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/types.d.ts +0 -39
- package/lib/systems/animation/core/types.d.ts.map +1 -1
- package/lib/systems/animation/core/types.js +0 -9
- package/lib/systems/animation/core/types.js.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.d.ts +0 -27
- package/lib/systems/animation/systems/AdvancedJointMovements.d.ts.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js +0 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.d.ts +0 -19
- package/lib/systems/animation/systems/BodyFacingSystem.d.ts.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.js +0 -14
- package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.d.ts +0 -10
- package/lib/systems/animation/systems/FacialExpressions.d.ts.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.js +0 -2
- package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.d.ts +0 -4
- package/lib/systems/animation/systems/FallAnimations.d.ts.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.js +0 -2
- package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
- package/lib/systems/animation/systems/HeadMovements.d.ts +0 -10
- package/lib/systems/animation/systems/HeadMovements.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts +0 -7
- package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.js +0 -7
- package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.d.ts +0 -13
- package/lib/systems/bodypart/BodyPartHealthSystem.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.js +0 -13
- package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.d.ts +0 -6
- package/lib/systems/bodypart/BodyPartPositionMapping.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.js +0 -6
- package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.d.ts +0 -10
- package/lib/systems/bodypart/CombatInjuryIntegration.d.ts.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.js +0 -8
- package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.d.ts +0 -2
- package/lib/systems/bodypart/InjuryIntegration.d.ts.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.js +0 -2
- package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.d.ts +0 -14
- package/lib/systems/bodypart/InjuryTracker.d.ts.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.js +0 -12
- package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.d.ts +0 -8
- package/lib/systems/bodypart/MovementPenaltySystem.d.ts.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.js +0 -8
- package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts +0 -8
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js +0 -8
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
- package/lib/systems/bodypart/types.d.ts +0 -13
- package/lib/systems/bodypart/types.d.ts.map +1 -1
- package/lib/systems/bodypart/types.js +0 -5
- package/lib/systems/bodypart/types.js.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.d.ts +0 -3
- package/lib/systems/breathing/BreathingDisruptionSystem.d.ts.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.js +0 -2
- package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
- package/lib/systems/combat/BalanceSystem.d.ts +0 -25
- package/lib/systems/combat/BalanceSystem.d.ts.map +1 -1
- package/lib/systems/combat/BalanceSystem.js +0 -25
- package/lib/systems/combat/BalanceSystem.js.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.d.ts +0 -4
- package/lib/systems/combat/BreakingStatusEffects.d.ts.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.js +0 -3
- package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
- package/lib/systems/combat/CombatStateSystem.d.ts +0 -9
- package/lib/systems/combat/CombatStateSystem.d.ts.map +1 -1
- package/lib/systems/combat/CombatStateSystem.js +0 -9
- package/lib/systems/combat/CombatStateSystem.js.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.d.ts +0 -16
- package/lib/systems/combat/ConsciousnessSystem.d.ts.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.js +0 -16
- package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
- package/lib/systems/combat/FallIntegration.d.ts +0 -3
- package/lib/systems/combat/FallIntegration.d.ts.map +1 -1
- package/lib/systems/combat/FallIntegration.js +0 -3
- package/lib/systems/combat/FallIntegration.js.map +1 -1
- package/lib/systems/combat/GrappleSystem.d.ts +0 -2
- package/lib/systems/combat/GrappleSystem.d.ts.map +1 -1
- package/lib/systems/combat/GrappleSystem.js +0 -2
- package/lib/systems/combat/GrappleSystem.js.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.d.ts +0 -7
- package/lib/systems/combat/LimbExposureSystem.d.ts.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.js +0 -7
- package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
- package/lib/systems/combat/PainResponseSystem.d.ts +0 -11
- package/lib/systems/combat/PainResponseSystem.d.ts.map +1 -1
- package/lib/systems/combat/PainResponseSystem.js +0 -11
- package/lib/systems/combat/PainResponseSystem.js.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.d.ts +0 -7
- package/lib/systems/combat/painConsciousnessUtils.d.ts.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.js +0 -7
- package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
- package/lib/systems/effects.d.ts +11 -0
- package/lib/systems/effects.d.ts.map +1 -1
- package/lib/systems/effects.js +10 -0
- package/lib/systems/effects.js.map +1 -1
- package/lib/systems/game.d.ts +16 -0
- package/lib/systems/game.d.ts.map +1 -1
- package/lib/systems/game.js +1 -0
- package/lib/systems/game.js.map +1 -1
- package/lib/systems/index.d.ts +5 -1
- package/lib/systems/index.d.ts.map +1 -1
- package/lib/systems/index.js.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.d.ts +0 -10
- package/lib/systems/movement/InjuryMovementModifier.d.ts.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.js +0 -7
- package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
- package/lib/systems/movement/integration.d.ts +0 -3
- package/lib/systems/movement/integration.d.ts.map +1 -1
- package/lib/systems/movement/integration.js +0 -3
- package/lib/systems/movement/integration.js.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.d.ts +0 -9
- package/lib/systems/physics/AttackMovementPhysics.d.ts.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.js +0 -7
- package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
- package/lib/systems/physics/CollisionDetection.d.ts +0 -6
- package/lib/systems/physics/CollisionDetection.d.ts.map +1 -1
- package/lib/systems/physics/CollisionDetection.js +0 -6
- package/lib/systems/physics/CollisionDetection.js.map +1 -1
- package/lib/systems/physics/CoordinateMapper.d.ts +0 -1
- package/lib/systems/physics/CoordinateMapper.d.ts.map +1 -1
- package/lib/systems/physics/CoordinateMapper.js +0 -1
- package/lib/systems/physics/CoordinateMapper.js.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.d.ts +0 -11
- package/lib/systems/physics/KnockbackPhysics.d.ts.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.js +0 -8
- package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
- package/lib/systems/physics/MovementPhysics.d.ts +0 -10
- package/lib/systems/physics/MovementPhysics.d.ts.map +1 -1
- package/lib/systems/physics/MovementPhysics.js +0 -8
- package/lib/systems/physics/MovementPhysics.js.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.d.ts +0 -6
- package/lib/systems/physics/PhysicalReachCalculator.d.ts.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.js +0 -5
- package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.d.ts +0 -5
- package/lib/systems/physics/SpeedModifierSystem.d.ts.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.js +0 -4
- package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
- package/lib/systems/player.d.ts +0 -5
- package/lib/systems/player.d.ts.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.d.ts +0 -1
- package/lib/systems/trigram/TrigramCalculator.d.ts.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.js +0 -1
- package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
- package/lib/systems/trigram/types.d.ts +0 -4
- package/lib/systems/trigram/types.d.ts.map +1 -1
- package/lib/systems/trigram/types.js +0 -2
- package/lib/systems/trigram/types.js.map +1 -1
- package/lib/systems/types.d.ts +7 -2
- package/lib/systems/types.d.ts.map +1 -1
- package/lib/systems/types.js.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.d.ts +0 -3
- package/lib/systems/vitalpoint/DamageCalculator.d.ts.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.js +0 -3
- package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts +0 -8
- package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.js +0 -8
- package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.d.ts +0 -3
- package/lib/systems/vitalpoint/VitalPointsData.d.ts.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.js +0 -1
- package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
- package/lib/types/PhysicsTypes.d.ts +21 -78
- package/lib/types/PhysicsTypes.d.ts.map +1 -1
- package/lib/types/PhysicsTypes.js +17 -63
- package/lib/types/PhysicsTypes.js.map +1 -1
- package/lib/types/clothing.d.ts +0 -9
- package/lib/types/clothing.d.ts.map +1 -1
- package/lib/types/constants/animations.d.ts +35 -1
- package/lib/types/constants/animations.d.ts.map +1 -1
- package/lib/types/constants/animations.js +12 -1
- package/lib/types/constants/animations.js.map +1 -1
- package/lib/types/constants/colors.d.ts +28 -2
- package/lib/types/constants/colors.d.ts.map +1 -1
- package/lib/types/constants/colors.js +30 -4
- package/lib/types/constants/colors.js.map +1 -1
- package/lib/types/constants/index.d.ts +5 -1
- package/lib/types/constants/index.d.ts.map +1 -1
- package/lib/types/constants/index.js.map +1 -1
- package/lib/types/constants/performance.d.ts +0 -2
- package/lib/types/constants/performance.d.ts.map +1 -1
- package/lib/types/constants/performance.js +0 -2
- package/lib/types/constants/performance.js.map +1 -1
- package/lib/types/constants/typography.d.ts +40 -2
- package/lib/types/constants/typography.d.ts.map +1 -1
- package/lib/types/constants/typography.js +40 -2
- package/lib/types/constants/typography.js.map +1 -1
- package/lib/types/constants/ui.d.ts +89 -1
- package/lib/types/constants/ui.d.ts.map +1 -1
- package/lib/types/constants/ui.js +33 -1
- package/lib/types/constants/ui.js.map +1 -1
- package/lib/types/facial.d.ts +0 -15
- package/lib/types/facial.d.ts.map +1 -1
- package/lib/types/facial.js +0 -8
- package/lib/types/facial.js.map +1 -1
- package/lib/types/hand-animation.d.ts +34 -147
- package/lib/types/hand-animation.d.ts.map +1 -1
- package/lib/types/hand-animation.js +0 -2
- package/lib/types/hand-animation.js.map +1 -1
- package/lib/types/injury.d.ts +0 -2
- package/lib/types/injury.d.ts.map +1 -1
- package/lib/types/injury.js +0 -1
- package/lib/types/injury.js.map +1 -1
- package/lib/types/physics.d.ts +0 -21
- package/lib/types/physics.d.ts.map +1 -1
- package/lib/types/physics.js +0 -6
- package/lib/types/physics.js.map +1 -1
- package/lib/types/physicsConstants.d.ts +0 -12
- package/lib/types/physicsConstants.d.ts.map +1 -1
- package/lib/types/physicsConstants.js +0 -12
- package/lib/types/physicsConstants.js.map +1 -1
- package/lib/types/player-visual.d.ts +45 -189
- package/lib/types/player-visual.d.ts.map +1 -1
- package/lib/types/technique.d.ts +1 -5
- package/lib/types/technique.d.ts.map +1 -1
- package/lib/types/techniqueId.d.ts +0 -1
- package/lib/types/techniqueId.d.ts.map +1 -1
- package/lib/types/techniqueId.js +0 -1
- package/lib/types/techniqueId.js.map +1 -1
- package/lib/utils/arenaWorldDimensions.d.ts +0 -11
- package/lib/utils/arenaWorldDimensions.d.ts.map +1 -1
- package/lib/utils/arenaWorldDimensions.js +0 -6
- package/lib/utils/arenaWorldDimensions.js.map +1 -1
- package/lib/utils/controlMapping.d.ts +3 -4
- package/lib/utils/controlMapping.d.ts.map +1 -1
- package/lib/utils/controlMapping.js +1 -2
- package/lib/utils/controlMapping.js.map +1 -1
- package/lib/utils/deviceDetection.d.ts +0 -5
- package/lib/utils/deviceDetection.d.ts.map +1 -1
- package/lib/utils/deviceDetection.js +0 -5
- package/lib/utils/deviceDetection.js.map +1 -1
- package/lib/utils/hapticFeedback.d.ts +23 -95
- package/lib/utils/hapticFeedback.d.ts.map +1 -1
- package/lib/utils/hapticFeedback.js +9 -39
- package/lib/utils/hapticFeedback.js.map +1 -1
- package/lib/utils/haptics.d.ts +0 -3
- package/lib/utils/haptics.d.ts.map +1 -1
- package/lib/utils/haptics.js +0 -1
- package/lib/utils/haptics.js.map +1 -1
- package/lib/utils/math.d.ts +0 -3
- package/lib/utils/math.d.ts.map +1 -1
- package/lib/utils/math.js +0 -2
- package/lib/utils/math.js.map +1 -1
- package/lib/utils/mobileLayoutHelpers.d.ts +0 -3
- package/lib/utils/mobileLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/mobileLayoutHelpers.js +0 -1
- package/lib/utils/mobileLayoutHelpers.js.map +1 -1
- package/lib/utils/mobileUIUtils.d.ts +5 -100
- package/lib/utils/mobileUIUtils.d.ts.map +1 -1
- package/lib/utils/mobileUIUtils.js +0 -9
- package/lib/utils/mobileUIUtils.js.map +1 -1
- package/lib/utils/physicalAttributeValidation.d.ts.map +1 -1
- package/lib/utils/player3DHelpers.d.ts.map +1 -1
- package/lib/utils/player3DHelpers.js.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.d.ts +0 -65
- package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.js +0 -65
- package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
- package/lib/utils/responsiveOrientationConstants.d.ts +0 -7
- package/lib/utils/responsiveOrientationConstants.d.ts.map +1 -1
- package/lib/utils/responsiveOrientationConstants.js +0 -7
- package/lib/utils/responsiveOrientationConstants.js.map +1 -1
- package/lib/utils/safeAreaUtils.d.ts +0 -6
- package/lib/utils/safeAreaUtils.d.ts.map +1 -1
- package/lib/utils/safeAreaUtils.js +0 -2
- package/lib/utils/safeAreaUtils.js.map +1 -1
- package/lib/utils/sharedPhysicsConfig.d.ts +0 -4
- package/lib/utils/sharedPhysicsConfig.d.ts.map +1 -1
- package/lib/utils/sharedPhysicsConfig.js +0 -2
- package/lib/utils/sharedPhysicsConfig.js.map +1 -1
- package/lib/utils/skeletonScaling.d.ts +0 -9
- package/lib/utils/skeletonScaling.d.ts.map +1 -1
- package/lib/utils/skeletonScaling.js +0 -1
- package/lib/utils/skeletonScaling.js.map +1 -1
- 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2GA,IAAY,eAAL,yBAAA,cAAA;;CAEL,aAAA,YAAS;;CAET,aAAA,cAAW;;CAEX,aAAA,iBAAc;;CAEd,aAAA,aAAU;;KACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDD,IAAa,gBAAb,MAA2B;;;;CAIzB,iBAAwE;GACrE,aAAa,SAAS;GACrB,OAAO,CAAC,IAAI,IAAI;GAChB,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;GACA,aAAa,WAAW;GACvB,OAAO,CAAC,IAAI,GAAG;GACf,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;GACA,aAAa,cAAc;GAC1B,OAAO,CAAC,IAAI,GAAG;GACf,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;GACA,aAAa,UAAU;GACtB,OAAO,CAAC,GAAG,GAAG;GACd,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;EACF;;;;CAKD,oBAA6D;GAC1D,WAAW,WAAW;GACtB,WAAW,YAAY;GACvB,WAAW,OAAO;GAClB,WAAW,QAAQ;GACnB,WAAW,OAAO;EACnB,SAAS;EACV;;;;CAKD,mBAAoC;;;;CAKpC,aAA8B;;;;CAK9B,qBAAsC;CACtC,oCAAqD;;;;CAKrD,oBAAqC;CACrC,uBAAwC;CACxC,qBAAsC;CACtC,6BAA8C;CAC9C,2BAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC5C,eACE,QACA,QACA,QACA,aACoB;EAOpB,IAAI,cAAc,UALC,SACf,KAAK,kBAAkB,WAAW,KAAK,kBAAkB,UACzD,KAAK,kBAAkB,WAGa;EAGxC,MAAM,eAAe,KAAK,yBAAyB,OAAO;EAC1D,eAAe,IAAM;EAGrB,IAAI,gBAAgB,KAAA,KAAa,KAAK,2BAA2B,QAAQ,YAAY,EACnF,eAAe,IAAM,KAAK;EAI5B,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,UAAU,YAAY;EAE5D,OAAO;GACL,GAAG;GACH,SAAS;GACV;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BH,cAAc,QAA4B,WAAuC;EAE/E,IAAI,OAAO,WAAW,KAAK,YACzB,OAAO;EAGT,MAAM,eAAe,YAAY;EACjC,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAGlD,IAAI,mBAAmB;EACvB,IAAI,UAAU,aAAa,aACzB,mBAAmB;OACd,IAAI,UAAU,aAAa,SAChC,mBAAmB;EAIrB,MAAM,gBAAgB,OAAO,UAAU,OAAO;EAG9C,MAAM,eAAe,KAAK,yBAAyB,OAAO;EAE1D,MAAM,gBAAgB,oBAAoB,KAAM,gBAAgB,MAAO;EAEvE,MAAM,WAAW,KAAK,mBAAmB,eAAe;EACxD,MAAM,aAAa,KAAK,IAAI,KAAK,YAAY,OAAO,UAAU,SAAS;EAEvE,OAAO;GACL,GAAG;GACH,SAAS;GACV;;;;;;;;;;;CAYH,gBAAgB,SAA+B;EAC7C,IAAI,WAAW,IAAI,OAAO,aAAa;EACvC,IAAI,WAAW,IAAI,OAAO,aAAa;EACvC,IAAI,WAAW,IAAI,OAAO,aAAa;EACvC,OAAO,aAAa;;;;;;;;;;;CAYtB,WAAW,OAAqC;EAC9C,OAAO,KAAK,eAAe;;;;;;;;;;;;;CAc7B,aAAa,QAAkC;EAC7C,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAClD,MAAM,UAAU,KAAK,WAAW,MAAM;EAEtC,OAAO;GACL,GAAG;GACH,SAAS,KAAK,MAAM,OAAO,UAAU,QAAQ,kBAAkB;GAC/D,OAAO,KAAK,MAAM,OAAO,QAAQ,QAAQ,wBAAwB;GAClE;;;;;;;;;;;CAYH,aAAa,QAA8B;EACzC,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAClD,OAAO,UAAU,aAAa,eAAe,UAAU,aAAa;;;;;;;;;;;CAYtE,2BAA2B,QAA6B;EACtD,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAElD,OADgB,KAAK,WAAW,MACzB,CAAQ;;;;;;;;;;;;CAajB,gBACE,QACA,WAAyB,KAAK,QACrB;EACT,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAClD,MAAM,UAAU,KAAK,WAAW,MAAM;EACtC,OAAO,UAAU,GAAG,QAAQ;;;;;;;;;;;CAY9B,aAAa,OAA0D;EAoBrE,OAAO;IAlBJ,aAAa,SAAS;IACrB,QAAQ;IACR,SAAS;IACV;IACA,aAAa,WAAW;IACvB,QAAQ;IACR,SAAS;IACV;IACA,aAAa,cAAc;IAC1B,QAAQ;IACR,SAAS;IACV;IACA,aAAa,UAAU;IACtB,QAAQ;IACR,SAAS;IACV;GAGI,CAAM;;;;;;;;;;;CAYf,cAAc,OAA6B;EAQzC,OAAO;IANJ,aAAa,SAAS;IACtB,aAAa,WAAW;IACxB,aAAa,cAAc;IAC3B,aAAa,UAAU;GAGnB,CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhB,kBAAkB,QAA8B;EAC9C,OAAO,OAAO,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C1B,kBACE,SACA,aACA,eAAuC,OAC7B;EAKV,OAAO,uBAAuB,aAAa,GAAc,aAAa;;;;;;;;;;;;;;;;;;;;;;;CAwBxE,4BAA4B,QAAiC;EAC3D,OAAO,wBAAwB,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAwBxC,WAAW,gBAAiC;EAC1C,OAAO,eAAe,WAAW,UAAU;;;;;;;;;;;;;;;;;;;;;;;CAwB7C,eAAe,gBAA4C;EACzD,IAAI,CAAC,KAAK,WAAW,eAAe,EAClC,OAAO;EAKT,MAAM,aAAa,eAAe,QAAQ,WAAW,GAAG;EAGxD,IACE,eAAe,WACf,eAAe,YACf,eAAe,eACf,eAAe,cAEf,OAAO;EAGT,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BT,mBACE,QACA,cACS;EACT,MAAM,SAAS,kBAAkB,aAAa;EAG9C,OAAO,OAAO,WAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;CAuBlC,kBACE,QACA,cACa;EACb,MAAM,SAAS,kBAAkB,aAAa;EAE9C,IAAI,OAAO,gBAAgB,GACzB,OAAO;EAGT,OAAO;GACL,GAAG;GACH,SAAS,KAAK,IAAI,GAAG,OAAO,UAAU,OAAO,YAAY;GAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BH,4BACE,cACA,cACQ;EACR,MAAM,SAAS,kBAAkB,aAAa;EAG9C,IAAI,CAAC,kBAAkB,cAAc,aAAa,EAChD,OAAO;EAKT,OAAO,IAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BtB,sBACE,QACA,WACA,aACoB;EAEpB,IAAI,cAAc,OAAO,eACvB,OAAO;EAIT,MAAM,kBAAmC;GACvC,iBAAiB;GACjB,qBAAqB;GACrB,yBAAyB,KAAK;GAC9B,YAAY,OAAO;GACnB,UAAU;GACX;EAGD,MAAM,eAAmC;GACvC,WAAW;GACX,YAAY,OAAO;GACnB,UAAU;GACX;EAGD,MAAM,aAAa,CAAC,GADJ,OAAO,uBAAuB,EAAE,EAChB,aAAa,CAAC,MAAM,CAAC,KAAK,yBAAyB;EAGnF,MAAM,gBAAgB,WAAW,QAC9B,UAAU,cAAc,MAAM,aAAa,KAAK,kBAClD;EAED,IAAI,wBAAwB,OAAO;EAEnC,IAAI,cAAc,SAAS,KAAK,sBAE9B,wBAAwB,cAAc,KAAK;EAG7C,OAAO;GACL,GAAG;GACH,eAAe;GACf,sBAAsB;GACtB;GACA,qBAAqB;GACrB;GACD;;;;;;;;;;;;;;;;;;;;;CAsBH,iBACE,QACA,aACoB;EACpB,IAAI,CAAC,OAAO,iBAAiB,iBAC3B,OAAO;EAMT,IAHgB,cAAc,OAAO,gBAAgB,uBAGtC,KAAK,oBAClB,OAAO;GACL,GAAG;GACH,iBAAiB;IACf,GAAG,OAAO;IACV,iBAAiB;IACjB,yBAAyB;IAC1B;GACF;EAGH,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BT,yBAAyB,QAAoC;EAC3D,IAAI,CAAC,OAAO,kBAAkB,CAAC,OAAO,mBACpC,OAAO;EAIT,MAAM,oBACH,OAAO,eAAe,WAAW,MACjC,OAAO,kBAAkB,WAAW;EACvC,MAAM,qBACH,OAAO,eAAe,YAAY,MAClC,OAAO,kBAAkB,YAAY;EAGxC,MAAM,kBACH,OAAO,eAAe,cAAc,MACpC,OAAO,kBAAkB,cAAc;EAG1C,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,iBAAiB,CAAC;EAChE,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,kBAAkB,CAAC;EAClE,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,eAAe,CAAC;EAY5D,MAAM,oBANc,MAHE,gBAAgB,kBAAkB,IAGf,OAGnB,KAAM,cAAc;EAM1C,OAAO,KAAK,IAAI,IAAK,KAAK,IAAI,GAAK,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAwBvD,uBAAuB,QAA+B;EAEpD,IAAI,WAAW,cAAc,OAAO,WAAW,cAAc,KAE3D,OAAO;EAIT,IAAI,WAAW,cAAc,QAAQ,WAAW,cAAc,MAAM,WAAW,cAAc,KAE3F,OAAO;EAIT,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CA0BT,2BACE,QACA,aACS;EACT,IAAI,CAAC,OAAO,uBACV,OAAO;EAET,OAAO,cAAc,OAAO;;;;;;;;;;;;;;;;;;;;;CAsB9B,gCAAgC,QAAoC;EAElE,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAElD,IAAI,aADY,KAAK,WAAW,MACf,CAAQ;EAGzB,IAAI,OAAO,iBAAiB,iBAC1B,cAAc,OAAO,gBAAgB;EAGvC,OAAO"}
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2GA,IAAY,eAAL,yBAAA,cAAA;;CAEL,aAAA,YAAS;;CAET,aAAA,cAAW;;CAEX,aAAA,iBAAc;;CAEd,aAAA,aAAU;;KACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDD,IAAa,gBAAb,MAA2B;;;;CAIzB,iBAAwE;GACrE,aAAa,SAAS;GACrB,OAAO,CAAC,IAAI,IAAI;GAChB,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;GACA,aAAa,WAAW;GACvB,OAAO,CAAC,IAAI,GAAG;GACf,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;GACA,aAAa,cAAc;GAC1B,OAAO,CAAC,IAAI,GAAG;GACf,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;GACA,aAAa,UAAU;GACtB,OAAO,CAAC,GAAG,GAAG;GACd,mBAAmB;GACnB,iBAAiB;GACjB,yBAAyB;GACzB,yBAAyB;GACzB,UAAU;GACV,eAAe;GAChB;EACF;;;;CAKD,oBAA6D;GAC1D,WAAW,WAAW;GACtB,WAAW,YAAY;GACvB,WAAW,OAAO;GAClB,WAAW,QAAQ;GACnB,WAAW,OAAO;EACnB,SAAS;EACV;;;;CAKD,mBAAoC;;;;CAKpC,aAA8B;;;;CAK9B,qBAAsC;CACtC,oCAAqD;;;;CAKrD,oBAAqC;CACrC,uBAAwC;CACxC,qBAAsC;CACtC,6BAA8C;CAC9C,2BAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B5C,eACE,QACA,QACA,QACA,aACoB;EAOpB,IAAI,cAAc,UALC,SACf,KAAK,kBAAkB,WAAW,KAAK,kBAAkB,UACzD,KAAK,kBAAkB,WAGa;EAGxC,MAAM,eAAe,KAAK,yBAAyB,OAAO;EAC1D,eAAe,IAAM;EAGrB,IAAI,gBAAgB,KAAA,KAAa,KAAK,2BAA2B,QAAQ,YAAY,EACnF,eAAe,IAAM,KAAK;EAI5B,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,UAAU,YAAY;EAE5D,OAAO;GACL,GAAG;GACH,SAAS;GACV;;;;;;;;;;;;;;;;;;;;;;;;;CA0BH,cAAc,QAA4B,WAAuC;EAE/E,IAAI,OAAO,WAAW,KAAK,YACzB,OAAO;EAGT,MAAM,eAAe,YAAY;EACjC,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAGlD,IAAI,mBAAmB;EACvB,IAAI,UAAU,aAAa,aACzB,mBAAmB;OACd,IAAI,UAAU,aAAa,SAChC,mBAAmB;EAIrB,MAAM,gBAAgB,OAAO,UAAU,OAAO;EAG9C,MAAM,eAAe,KAAK,yBAAyB,OAAO;EAE1D,MAAM,gBAAgB,oBAAoB,KAAM,gBAAgB,MAAO;EAEvE,MAAM,WAAW,KAAK,mBAAmB,eAAe;EACxD,MAAM,aAAa,KAAK,IAAI,KAAK,YAAY,OAAO,UAAU,SAAS;EAEvE,OAAO;GACL,GAAG;GACH,SAAS;GACV;;;;;;;;;;CAWH,gBAAgB,SAA+B;EAC7C,IAAI,WAAW,IAAI,OAAO,aAAa;EACvC,IAAI,WAAW,IAAI,OAAO,aAAa;EACvC,IAAI,WAAW,IAAI,OAAO,aAAa;EACvC,OAAO,aAAa;;;;;;;;;;CAWtB,WAAW,OAAqC;EAC9C,OAAO,KAAK,eAAe;;;;;;;;;;;;CAa7B,aAAa,QAAkC;EAC7C,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAClD,MAAM,UAAU,KAAK,WAAW,MAAM;EAEtC,OAAO;GACL,GAAG;GACH,SAAS,KAAK,MAAM,OAAO,UAAU,QAAQ,kBAAkB;GAC/D,OAAO,KAAK,MAAM,OAAO,QAAQ,QAAQ,wBAAwB;GAClE;;;;;;;;;;CAWH,aAAa,QAA8B;EACzC,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAClD,OAAO,UAAU,aAAa,eAAe,UAAU,aAAa;;;;;;;;;;CAWtE,2BAA2B,QAA6B;EACtD,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAElD,OADgB,KAAK,WAAW,MACzB,CAAQ;;;;;;;;;;;CAYjB,gBACE,QACA,WAAyB,KAAK,QACrB;EACT,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAClD,MAAM,UAAU,KAAK,WAAW,MAAM;EACtC,OAAO,UAAU,GAAG,QAAQ;;;;;;;;;;CAW9B,aAAa,OAA0D;EAoBrE,OAAO;IAlBJ,aAAa,SAAS;IACrB,QAAQ;IACR,SAAS;IACV;IACA,aAAa,WAAW;IACvB,QAAQ;IACR,SAAS;IACV;IACA,aAAa,cAAc;IAC1B,QAAQ;IACR,SAAS;IACV;IACA,aAAa,UAAU;IACtB,QAAQ;IACR,SAAS;IACV;GAGI,CAAM;;;;;;;;;;CAWf,cAAc,OAA6B;EAQzC,OAAO;IANJ,aAAa,SAAS;IACtB,aAAa,WAAW;IACxB,aAAa,cAAc;IAC3B,aAAa,UAAU;GAGnB,CAAO;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhB,kBAAkB,QAA8B;EAC9C,OAAO,OAAO,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C1B,kBACE,SACA,aACA,eAAuC,OAC7B;EAKV,OAAO,uBAAuB,aAAa,GAAc,aAAa;;;;;;;;;;;;;;;;;;;;;;CAuBxE,4BAA4B,QAAiC;EAC3D,OAAO,wBAAwB,OAAO;;;;;;;;;;;;;;;;;;;;;;CAuBxC,WAAW,gBAAiC;EAC1C,OAAO,eAAe,WAAW,UAAU;;;;;;;;;;;;;;;;;;;;;;CAuB7C,eAAe,gBAA4C;EACzD,IAAI,CAAC,KAAK,WAAW,eAAe,EAClC,OAAO;EAKT,MAAM,aAAa,eAAe,QAAQ,WAAW,GAAG;EAGxD,IACE,eAAe,WACf,eAAe,YACf,eAAe,eACf,eAAe,cAEf,OAAO;EAGT,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CA0BT,mBACE,QACA,cACS;EACT,MAAM,SAAS,kBAAkB,aAAa;EAG9C,OAAO,OAAO,WAAW,OAAO;;;;;;;;;;;;;;;;;;;;;CAsBlC,kBACE,QACA,cACa;EACb,MAAM,SAAS,kBAAkB,aAAa;EAE9C,IAAI,OAAO,gBAAgB,GACzB,OAAO;EAGT,OAAO;GACL,GAAG;GACH,SAAS,KAAK,IAAI,GAAG,OAAO,UAAU,OAAO,YAAY;GAC1D;;;;;;;;;;;;;;;;;;;;;;;;;CA0BH,4BACE,cACA,cACQ;EACR,MAAM,SAAS,kBAAkB,aAAa;EAG9C,IAAI,CAAC,kBAAkB,cAAc,aAAa,EAChD,OAAO;EAKT,OAAO,IAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BtB,sBACE,QACA,WACA,aACoB;EAEpB,IAAI,cAAc,OAAO,eACvB,OAAO;EAIT,MAAM,kBAAmC;GACvC,iBAAiB;GACjB,qBAAqB;GACrB,yBAAyB,KAAK;GAC9B,YAAY,OAAO;GACnB,UAAU;GACX;EAGD,MAAM,eAAmC;GACvC,WAAW;GACX,YAAY,OAAO;GACnB,UAAU;GACX;EAGD,MAAM,aAAa,CAAC,GADJ,OAAO,uBAAuB,EAAE,EAChB,aAAa,CAAC,MAAM,CAAC,KAAK,yBAAyB;EAGnF,MAAM,gBAAgB,WAAW,QAC9B,UAAU,cAAc,MAAM,aAAa,KAAK,kBAClD;EAED,IAAI,wBAAwB,OAAO;EAEnC,IAAI,cAAc,SAAS,KAAK,sBAE9B,wBAAwB,cAAc,KAAK;EAG7C,OAAO;GACL,GAAG;GACH,eAAe;GACf,sBAAsB;GACtB;GACA,qBAAqB;GACrB;GACD;;;;;;;;;;;;;;;;;;;;CAqBH,iBACE,QACA,aACoB;EACpB,IAAI,CAAC,OAAO,iBAAiB,iBAC3B,OAAO;EAMT,IAHgB,cAAc,OAAO,gBAAgB,uBAGtC,KAAK,oBAClB,OAAO;GACL,GAAG;GACH,iBAAiB;IACf,GAAG,OAAO;IACV,iBAAiB;IACjB,yBAAyB;IAC1B;GACF;EAGH,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BT,yBAAyB,QAAoC;EAC3D,IAAI,CAAC,OAAO,kBAAkB,CAAC,OAAO,mBACpC,OAAO;EAIT,MAAM,oBACH,OAAO,eAAe,WAAW,MACjC,OAAO,kBAAkB,WAAW;EACvC,MAAM,qBACH,OAAO,eAAe,YAAY,MAClC,OAAO,kBAAkB,YAAY;EAGxC,MAAM,kBACH,OAAO,eAAe,cAAc,MACpC,OAAO,kBAAkB,cAAc;EAG1C,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,iBAAiB,CAAC;EAChE,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,kBAAkB,CAAC;EAClE,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,eAAe,CAAC;EAY5D,MAAM,oBANc,MAHE,gBAAgB,kBAAkB,IAGf,OAGnB,KAAM,cAAc;EAM1C,OAAO,KAAK,IAAI,IAAK,KAAK,IAAI,GAAK,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;CAuBvD,uBAAuB,QAA+B;EAEpD,IAAI,WAAW,cAAc,OAAO,WAAW,cAAc,KAE3D,OAAO;EAIT,IAAI,WAAW,cAAc,QAAQ,WAAW,cAAc,MAAM,WAAW,cAAc,KAE3F,OAAO;EAIT,OAAO;;;;;;;;;;;;;;;;;;;;;;;;CAyBT,2BACE,QACA,aACS;EACT,IAAI,CAAC,OAAO,uBACV,OAAO;EAET,OAAO,cAAc,OAAO;;;;;;;;;;;;;;;;;;;;CAqB9B,gCAAgC,QAAoC;EAElE,MAAM,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;EAElD,IAAI,aADY,KAAK,WAAW,MACf,CAAQ;EAGzB,IAAI,OAAO,iBAAiB,iBAC1B,cAAc,OAAO,gBAAgB;EAGvC,OAAO"}
|
|
@@ -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
|
|
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 * @
|
|
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
|
|
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) {
|