blacktrigram 0.7.44 → 0.7.47
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/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/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 +8 -8
|
@@ -38,7 +38,6 @@ var DEFAULT_INJURY_MOVEMENT_CONFIG = {
|
|
|
38
38
|
* console.log(`Status: ${result.statusText.korean} | ${result.statusText.english}`);
|
|
39
39
|
* ```
|
|
40
40
|
*
|
|
41
|
-
* @public
|
|
42
41
|
* @category Movement System
|
|
43
42
|
* @korean 손상기반이동수정자
|
|
44
43
|
*/
|
|
@@ -93,7 +92,6 @@ var InjuryMovementModifier = class InjuryMovementModifier {
|
|
|
93
92
|
* @param painLevel - Current pain level (0-100)
|
|
94
93
|
* @returns Complete movement calculation result
|
|
95
94
|
*
|
|
96
|
-
* @public
|
|
97
95
|
* @korean 이동속도계산
|
|
98
96
|
*/
|
|
99
97
|
calculateMovementSpeed(baseSpeed, bodyPartHealth, stance, painLevel) {
|
|
@@ -181,7 +179,6 @@ var InjuryMovementModifier = class InjuryMovementModifier {
|
|
|
181
179
|
* @param stance - Current trigram stance
|
|
182
180
|
* @returns Speed multiplier (0.8-1.25), defaults to 1.0 for unknown stances
|
|
183
181
|
*
|
|
184
|
-
* @public
|
|
185
182
|
*/
|
|
186
183
|
getStanceSpeedModifier(stance) {
|
|
187
184
|
const modifier = STANCE_SPEED_MODIFIERS[stance];
|
|
@@ -257,7 +254,6 @@ var InjuryMovementModifier = class InjuryMovementModifier {
|
|
|
257
254
|
* @param bodyPartHealth - Current body part health
|
|
258
255
|
* @returns True if limping animation should play
|
|
259
256
|
*
|
|
260
|
-
* @public
|
|
261
257
|
*/
|
|
262
258
|
shouldLimp(bodyPartHealth) {
|
|
263
259
|
return Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight) < this.config.legThresholds.normal;
|
|
@@ -272,7 +268,6 @@ var InjuryMovementModifier = class InjuryMovementModifier {
|
|
|
272
268
|
* @param bodyPartHealth - Current body part health
|
|
273
269
|
* @returns True if severe limp (leg health < 30%)
|
|
274
270
|
*
|
|
275
|
-
* @public
|
|
276
271
|
*/
|
|
277
272
|
hasSevereLimp(bodyPartHealth) {
|
|
278
273
|
return Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight) < this.config.legThresholds.limping;
|
|
@@ -287,7 +282,6 @@ var InjuryMovementModifier = class InjuryMovementModifier {
|
|
|
287
282
|
* @param bodyPartHealth - Current body part health
|
|
288
283
|
* @returns Bilingual injury description
|
|
289
284
|
*
|
|
290
|
-
* @public
|
|
291
285
|
*/
|
|
292
286
|
getInjuryDescription(bodyPartHealth) {
|
|
293
287
|
const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);
|
|
@@ -300,7 +294,6 @@ var InjuryMovementModifier = class InjuryMovementModifier {
|
|
|
300
294
|
/**
|
|
301
295
|
* Singleton instance for global access.
|
|
302
296
|
*
|
|
303
|
-
* @public
|
|
304
297
|
*/
|
|
305
298
|
var injuryMovementModifier = new InjuryMovementModifier();
|
|
306
299
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InjuryMovementModifier.js","names":[],"sources":["../../../src/systems/movement/InjuryMovementModifier.ts"],"sourcesContent":["/**\n * Injury-Based Movement Modifier System\n * \n * **Korean**: 손상 기반 이동 시스템 (Injury-Based Movement System)\n * \n * Dynamically calculates movement speed modifiers based on leg injuries, torso\n * damage, stance configuration, and pain levels. Part of the 12 combat realism\n * systems for authentic Korean martial arts gameplay.\n * \n * ## Movement Speed Calculation\n * \n * Base speed is modified by multiple factors:\n * - **Leg Injuries**: 0-100% penalty based on health\n * - **Torso Injuries**: 0-30% minor penalty\n * - **Both Legs Injured**: Additional 20% cumulative penalty\n * - **Stance Modifiers**: -20% (defensive) to +25% (offensive)\n * - **Pain Overload**: -15% when pain ≥ 80\n * \n * ## Injury Severity Thresholds\n * \n * | Leg Health | State | Speed Penalty |\n * |-----------|-------|---------------|\n * | 70-100% | Normal | 0% |\n * | 30-69% | Limping | 0-40% |\n * | 10-29% | Severe Limp | 40-80% |\n * | 0-9% | Critical | 80-100% |\n * \n * @module systems/movement/InjuryMovementModifier\n * @category Movement System\n * @korean 손상기반이동\n */\n\nimport type { TrigramStance } from \"@/types/common\";\nimport type { BodyPartHealth } from \"../bodypart/types\";\nimport { STANCE_SPEED_MODIFIERS } from \"../physics/MovementPhysics\";\n\n/**\n * Configuration for injury-based movement calculations.\n * \n * **Korean**: 손상 이동 설정\n * \n * @public\n * @category Movement System\n */\nexport interface InjuryMovementConfig {\n /** Leg health thresholds for injury states */\n readonly legThresholds: {\n readonly normal: number; // 70% - no penalty\n readonly limping: number; // 30% - start of severe penalty\n readonly critical: number; // 10% - near-maximum penalty\n };\n /** Maximum torso injury penalty (0.3 = 30%) */\n readonly maxTorsoPenalty: number;\n /** Both legs injured cumulative penalty multiplier (0.8 = -20%) */\n readonly bothLegsInjuredMultiplier: number;\n /** Pain overload threshold (80) */\n readonly painOverloadThreshold: number;\n /** Pain overload penalty multiplier (0.85 = -15%) */\n readonly painOverloadMultiplier: number;\n /** Minimum speed multiplier (0.1 = 10% of base speed) */\n readonly minSpeedMultiplier: number;\n}\n\n/**\n * Deep partial type for InjuryMovementConfig to support partial overrides.\n * Allows callers to override individual threshold values without providing all.\n * \n * @public\n * @category Movement System\n */\nexport type PartialInjuryMovementConfig = {\n readonly legThresholds?: Partial<InjuryMovementConfig[\"legThresholds\"]>;\n readonly maxTorsoPenalty?: number;\n readonly bothLegsInjuredMultiplier?: number;\n readonly painOverloadThreshold?: number;\n readonly painOverloadMultiplier?: number;\n readonly minSpeedMultiplier?: number;\n};\n\n/**\n * Default configuration matching acceptance criteria.\n */\nexport const DEFAULT_INJURY_MOVEMENT_CONFIG: InjuryMovementConfig = {\n legThresholds: {\n normal: 70,\n limping: 30,\n critical: 10,\n },\n maxTorsoPenalty: 0.3,\n bothLegsInjuredMultiplier: 0.8,\n painOverloadThreshold: 80,\n painOverloadMultiplier: 0.85,\n minSpeedMultiplier: 0.1,\n} as const;\n\n/**\n * Result of injury-based movement calculation.\n * \n * **Korean**: 손상 이동 결과\n * \n * @public\n * @category Movement System\n */\nexport interface InjuryMovementResult {\n /** Final speed in units/second */\n readonly finalSpeed: number;\n /** Combined speed multiplier (0.1-1.0+) */\n readonly speedMultiplier: number;\n /** Breakdown of penalty sources */\n readonly penalties: {\n readonly leftLegPenalty: number;\n readonly rightLegPenalty: number;\n readonly torsoPenalty: number;\n readonly bothLegsInjured: boolean;\n readonly stanceModifier: number;\n readonly painOverload: boolean;\n };\n /** Whether player is limping */\n readonly isLimping: boolean;\n /** Whether player has severe limp */\n readonly isSevereLimp: boolean;\n /** Bilingual status text */\n readonly statusText: {\n readonly korean: string;\n readonly english: string;\n };\n}\n\n/**\n * Injury-Based Movement Modifier System.\n * \n * **Korean**: 손상 기반 이동 수정자 시스템\n * \n * Calculates dynamic movement speed based on injuries, stance, and pain.\n * Integrates with MovementPhysics to apply realistic combat trauma effects.\n * \n * @example\n * ```typescript\n * const modifier = new InjuryMovementModifier();\n * \n * const result = modifier.calculateMovementSpeed(\n * 5.0, // base speed\n * bodyPartHealth, // current health\n * TrigramStance.GEON, // current stance\n * 65 // pain level\n * );\n * \n * console.log(`Speed: ${result.finalSpeed} m/s`);\n * console.log(`Status: ${result.statusText.korean} | ${result.statusText.english}`);\n * ```\n * \n * @public\n * @category Movement System\n * @korean 손상기반이동수정자\n */\nexport class InjuryMovementModifier {\n private readonly config: InjuryMovementConfig;\n\n /**\n * Threshold for determining if both legs are significantly injured.\n * Uses epsilon to avoid floating-point rounding issues at boundary.\n * \n * @private\n */\n private static readonly BOTH_LEGS_THRESHOLD = 0.3 + 1e-10;\n\n /**\n * Creates a new InjuryMovementModifier with optional configuration.\n * \n * @param config - Optional configuration overrides (supports partial threshold overrides)\n */\n constructor(config?: PartialInjuryMovementConfig) {\n // Deep merge leg thresholds to prevent partial overrides from breaking the config.\n // Use ?? to avoid undefined values overwriting defaults when exactOptionalPropertyTypes is disabled.\n const mergedLegThresholds = {\n normal:\n config?.legThresholds?.normal ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.legThresholds.normal,\n limping:\n config?.legThresholds?.limping ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.legThresholds.limping,\n critical:\n config?.legThresholds?.critical ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.legThresholds.critical,\n };\n\n const mergedConfig: InjuryMovementConfig = {\n legThresholds: mergedLegThresholds,\n maxTorsoPenalty:\n config?.maxTorsoPenalty ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.maxTorsoPenalty,\n bothLegsInjuredMultiplier:\n config?.bothLegsInjuredMultiplier ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.bothLegsInjuredMultiplier,\n painOverloadThreshold:\n config?.painOverloadThreshold ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.painOverloadThreshold,\n painOverloadMultiplier:\n config?.painOverloadMultiplier ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.painOverloadMultiplier,\n minSpeedMultiplier:\n config?.minSpeedMultiplier ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.minSpeedMultiplier,\n };\n\n // Development-mode sanity check: ensure thresholds are finite and ordered\n if (process.env.NODE_ENV !== \"production\") {\n const { normal, limping, critical } = mergedConfig.legThresholds;\n const allFinite =\n Number.isFinite(normal) &&\n Number.isFinite(limping) &&\n Number.isFinite(critical);\n const ordered = normal >= limping && limping >= critical;\n\n if (!allFinite || !ordered) {\n // Non-throwing warning to avoid breaking existing behavior\n console.warn(\n \"[InjuryMovementModifier] Invalid legThresholds configuration detected:\",\n mergedConfig.legThresholds\n );\n }\n }\n\n this.config = mergedConfig;\n }\n\n /**\n * Calculate modified movement speed based on all injury factors.\n * \n * **Korean**: 이동 속도 계산\n * \n * Applies penalties from:\n * 1. Leg injuries (primary factor)\n * 2. Torso injuries (minor factor)\n * 3. Both legs injured (cumulative penalty)\n * 4. Stance modifiers\n * 5. Pain overload\n * \n * @param baseSpeed - Base movement speed (m/s)\n * @param bodyPartHealth - Current body part health values\n * @param stance - Current trigram stance\n * @param painLevel - Current pain level (0-100)\n * @returns Complete movement calculation result\n * \n * @public\n * @korean 이동속도계산\n */\n public calculateMovementSpeed(\n baseSpeed: number,\n bodyPartHealth: BodyPartHealth,\n stance: TrigramStance,\n painLevel: number\n ): InjuryMovementResult {\n // Calculate individual leg penalties\n const leftLegPenalty = this.calculateLegPenalty(bodyPartHealth.legLeft);\n const rightLegPenalty = this.calculateLegPenalty(bodyPartHealth.legRight);\n\n // Use worst leg penalty as base\n const baseLegPenalty = Math.max(leftLegPenalty, rightLegPenalty);\n let speedMultiplier = 1.0 - baseLegPenalty;\n\n // Check if both legs are significantly injured using centralized method\n const bothLegsInjured = this.areBothLegsInjured(leftLegPenalty, rightLegPenalty);\n if (bothLegsInjured) {\n // Additional 20% penalty when both legs injured\n speedMultiplier *= this.config.bothLegsInjuredMultiplier;\n }\n\n // Calculate torso penalty (minor effect, 0-30% max)\n const avgTorsoHealth = (bodyPartHealth.torsoUpper + bodyPartHealth.torsoLower) / 2;\n // Clamp torso health to prevent negative penalties or exceeding max penalty\n const clampedAvgTorsoHealth = Math.min(100, Math.max(0, avgTorsoHealth));\n const torsoPenalty = ((100 - clampedAvgTorsoHealth) / 100) * this.config.maxTorsoPenalty;\n speedMultiplier *= (1 - torsoPenalty);\n\n // Apply stance modifier\n const stanceModifier = this.getStanceSpeedModifier(stance);\n speedMultiplier *= stanceModifier;\n\n // Apply pain overload penalty if applicable (>= threshold, not just >)\n const painOverload = painLevel >= this.config.painOverloadThreshold;\n if (painOverload) {\n speedMultiplier *= this.config.painOverloadMultiplier; // -15%\n }\n\n // Clamp to minimum speed (10% of base)\n speedMultiplier = Math.max(speedMultiplier, this.config.minSpeedMultiplier);\n\n // Calculate final speed\n const finalSpeed = baseSpeed * speedMultiplier;\n\n // Determine injury state for status text based on worst leg health\n // This ensures status matches the actual movement penalty (which uses worst leg)\n // Note: isLimping = true when leg health is in range [30-70) (limping range with 0-40% penalty)\n // isSevereLimp = true when leg health is < 30 (severe/critical with 40-100% penalty)\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n const isLimping =\n worstLegHealth < this.config.legThresholds.normal &&\n worstLegHealth >= this.config.legThresholds.limping;\n const isSevereLimp = worstLegHealth < this.config.legThresholds.limping;\n\n // Generate status text\n const statusText = this.generateStatusText(worstLegHealth, bothLegsInjured, painOverload);\n\n return {\n finalSpeed,\n speedMultiplier,\n penalties: {\n leftLegPenalty,\n rightLegPenalty,\n torsoPenalty,\n bothLegsInjured,\n stanceModifier,\n painOverload,\n },\n isLimping,\n isSevereLimp,\n statusText,\n };\n }\n\n /**\n * Calculate movement penalty from leg injury severity.\n * \n * **Korean**: 다리 부상 페널티 계산\n * \n * Progressive penalty scaling:\n * - 100-70%: No penalty (0%)\n * - 70-30%: Linear scaling (0-40%)\n * - 30-10%: Accelerated scaling (40-80%)\n * - 10-0%: Critical scaling (80-100%)\n * \n * @param legHealth - Leg health (0-100)\n * @returns Penalty factor (0.0-1.0), clamped to valid range\n * \n * @private\n */\n private calculateLegPenalty(legHealth: number): number {\n const { normal, limping, critical } = this.config.legThresholds;\n\n // Clamp input health to valid range to prevent runaway penalties\n const clampedHealth = Math.min(Math.max(legHealth, 0), 100);\n\n let penalty: number;\n\n if (clampedHealth >= normal) {\n // 70-100%: No penalty\n penalty = 0;\n } else if (clampedHealth >= limping) {\n // 30-70%: 0-40% penalty (linear)\n const healthRange = normal - limping;\n // Guard against division by zero if thresholds are misconfigured\n const healthFactor = healthRange > 0 \n ? (normal - clampedHealth) / healthRange \n : 0;\n penalty = healthFactor * 0.4;\n } else if (clampedHealth >= critical) {\n // 10-30%: 40-80% penalty (accelerated)\n const healthRange = limping - critical;\n // Guard against division by zero if thresholds are misconfigured\n const healthFactor = healthRange > 0 \n ? (limping - clampedHealth) / healthRange \n : 0;\n penalty = 0.4 + (healthFactor * 0.4);\n } else {\n // 0-10%: 80-100% penalty (critical)\n // Guard against division by zero if critical is 0\n const healthFactor = critical > 0 \n ? (critical - clampedHealth) / critical \n : 1;\n penalty = 0.8 + (healthFactor * 0.2);\n }\n\n // Ensure returned penalty is always within [0, 1]\n return Math.min(Math.max(penalty, 0), 1);\n }\n\n /**\n * Checks if both legs are significantly injured (>30% penalty each).\n * Uses epsilon-based comparison for floating-point robustness.\n * \n * @param leftLegPenalty - Penalty for left leg (0-1)\n * @param rightLegPenalty - Penalty for right leg (0-1)\n * @returns True if both legs are significantly injured\n * @private\n */\n private areBothLegsInjured(leftLegPenalty: number, rightLegPenalty: number): boolean {\n return leftLegPenalty >= InjuryMovementModifier.BOTH_LEGS_THRESHOLD && \n rightLegPenalty >= InjuryMovementModifier.BOTH_LEGS_THRESHOLD;\n }\n\n /**\n * Get stance-based speed modifier.\n * \n * **Korean**: 자세 속도 배수 가져오기\n * \n * @param stance - Current trigram stance\n * @returns Speed multiplier (0.8-1.25), defaults to 1.0 for unknown stances\n * \n * @public\n */\n public getStanceSpeedModifier(stance: TrigramStance): number {\n const modifier = STANCE_SPEED_MODIFIERS[stance];\n\n // Defensive fallback for unknown stances (e.g., test/invalid values)\n if (modifier == null) {\n // Runtime-safe environment check (works in both Node and browser/Vite environments)\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV === \"development\"\n ) {\n console.warn(\n `[InjuryMovementModifier] Unknown stance \"${String(\n stance\n )}\" received in getStanceSpeedModifier; defaulting to 1.0.`\n );\n }\n return 1.0;\n }\n\n return modifier;\n }\n\n /**\n * Generate bilingual status text based on injury state.\n * \n * **Korean**: 상태 텍스트 생성\n * \n * @param legHealthForStatus - Leg health percentage used for status determination (typically worst leg)\n * @param bothLegsInjured - Whether both legs are significantly injured\n * @param painOverload - Whether pain is over threshold\n * @returns Bilingual status text\n * \n * @private\n */\n private generateStatusText(\n legHealthForStatus: number,\n bothLegsInjured: boolean,\n painOverload: boolean\n ): { korean: string; english: string } {\n const { normal, limping, critical } = this.config.legThresholds;\n\n if (legHealthForStatus < critical) {\n const painText = painOverload ? \" | 고통 과부하\" : \"\";\n const painTextEn = painOverload ? \" | Pain Overload\" : \"\";\n const baseKorean = bothLegsInjured ? \"심각한 부상 | 양 다리\" : \"심각한 부상\";\n const baseEnglish = bothLegsInjured ? \"Critical Injury | Both Legs\" : \"Critical Injury\";\n return {\n korean: `${baseKorean}${painText}`,\n english: `${baseEnglish}${painTextEn}`,\n };\n } else if (legHealthForStatus < limping) {\n const painText = painOverload ? \" | 고통 과부하\" : \"\";\n const painTextEn = painOverload ? \" | Pain Overload\" : \"\";\n const baseKorean = bothLegsInjured ? \"중증 절름거림 | 양 다리\" : \"중증 절름거림\";\n const baseEnglish = bothLegsInjured ? \"Severe Limping | Both Legs\" : \"Severe Limping\";\n return {\n korean: `${baseKorean}${painText}`,\n english: `${baseEnglish}${painTextEn}`,\n };\n } else if (legHealthForStatus < normal) {\n const statusKrParts = [\"절름거림\"];\n const statusEnParts = [\"Limping\"];\n\n if (bothLegsInjured) {\n statusKrParts.push(\"양 다리\");\n statusEnParts.push(\"Both Legs\");\n }\n\n if (painOverload) {\n statusKrParts.push(\"고통 과부하\");\n statusEnParts.push(\"Pain Overload\");\n }\n\n return {\n korean: statusKrParts.join(\" | \"),\n english: statusEnParts.join(\" | \"),\n };\n } else if (painOverload) {\n return {\n korean: \"고통 과부하\",\n english: \"Pain Overload\",\n };\n } else {\n return {\n korean: \"정상\",\n english: \"Normal\",\n };\n }\n }\n\n /**\n * Check if player should display limping animation.\n * \n * **Korean**: 절름거림 확인\n * \n * Uses worst leg health to match movement penalty behavior.\n * \n * @param bodyPartHealth - Current body part health\n * @returns True if limping animation should play\n * \n * @public\n */\n public shouldLimp(bodyPartHealth: BodyPartHealth): boolean {\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n return worstLegHealth < this.config.legThresholds.normal;\n }\n\n /**\n * Check if player has severe limp.\n * \n * **Korean**: 중증 절름거림 확인\n * \n * Uses worst leg health to match movement penalty behavior.\n * \n * @param bodyPartHealth - Current body part health\n * @returns True if severe limp (leg health < 30%)\n * \n * @public\n */\n public hasSevereLimp(bodyPartHealth: BodyPartHealth): boolean {\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n return worstLegHealth < this.config.legThresholds.limping;\n }\n\n /**\n * Get current injury state description.\n * \n * **Korean**: 부상 상태 설명\n * \n * Uses worst leg health to match movement penalty behavior.\n * \n * @param bodyPartHealth - Current body part health\n * @returns Bilingual injury description\n * \n * @public\n */\n public getInjuryDescription(bodyPartHealth: BodyPartHealth): {\n korean: string;\n english: string;\n } {\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n const leftLegPenalty = this.calculateLegPenalty(bodyPartHealth.legLeft);\n const rightLegPenalty = this.calculateLegPenalty(bodyPartHealth.legRight);\n const bothLegsInjured = this.areBothLegsInjured(leftLegPenalty, rightLegPenalty);\n\n return this.generateStatusText(worstLegHealth, bothLegsInjured, false);\n }\n}\n\n/**\n * Singleton instance for global access.\n * \n * @public\n */\nexport const injuryMovementModifier = new InjuryMovementModifier();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InjuryMovementModifier.js","names":[],"sources":["../../../src/systems/movement/InjuryMovementModifier.ts"],"sourcesContent":["/**\n * Injury-Based Movement Modifier System\n * \n * **Korean**: 손상 기반 이동 시스템 (Injury-Based Movement System)\n * \n * Dynamically calculates movement speed modifiers based on leg injuries, torso\n * damage, stance configuration, and pain levels. Part of the 12 combat realism\n * systems for authentic Korean martial arts gameplay.\n * \n * ## Movement Speed Calculation\n * \n * Base speed is modified by multiple factors:\n * - **Leg Injuries**: 0-100% penalty based on health\n * - **Torso Injuries**: 0-30% minor penalty\n * - **Both Legs Injured**: Additional 20% cumulative penalty\n * - **Stance Modifiers**: -20% (defensive) to +25% (offensive)\n * - **Pain Overload**: -15% when pain ≥ 80\n * \n * ## Injury Severity Thresholds\n * \n * | Leg Health | State | Speed Penalty |\n * |-----------|-------|---------------|\n * | 70-100% | Normal | 0% |\n * | 30-69% | Limping | 0-40% |\n * | 10-29% | Severe Limp | 40-80% |\n * | 0-9% | Critical | 80-100% |\n * \n * @module systems/movement/InjuryMovementModifier\n * @category Movement System\n * @korean 손상기반이동\n */\n\nimport type { TrigramStance } from \"@/types/common\";\nimport type { BodyPartHealth } from \"../bodypart/types\";\nimport { STANCE_SPEED_MODIFIERS } from \"../physics/MovementPhysics\";\n\n/**\n * Configuration for injury-based movement calculations.\n * \n * **Korean**: 손상 이동 설정\n * \n * @category Movement System\n */\nexport interface InjuryMovementConfig {\n /** Leg health thresholds for injury states */\n readonly legThresholds: {\n readonly normal: number; // 70% - no penalty\n readonly limping: number; // 30% - start of severe penalty\n readonly critical: number; // 10% - near-maximum penalty\n };\n /** Maximum torso injury penalty (0.3 = 30%) */\n readonly maxTorsoPenalty: number;\n /** Both legs injured cumulative penalty multiplier (0.8 = -20%) */\n readonly bothLegsInjuredMultiplier: number;\n /** Pain overload threshold (80) */\n readonly painOverloadThreshold: number;\n /** Pain overload penalty multiplier (0.85 = -15%) */\n readonly painOverloadMultiplier: number;\n /** Minimum speed multiplier (0.1 = 10% of base speed) */\n readonly minSpeedMultiplier: number;\n}\n\n/**\n * Deep partial type for InjuryMovementConfig to support partial overrides.\n * Allows callers to override individual threshold values without providing all.\n * \n * @category Movement System\n */\nexport type PartialInjuryMovementConfig = {\n readonly legThresholds?: Partial<InjuryMovementConfig[\"legThresholds\"]>;\n readonly maxTorsoPenalty?: number;\n readonly bothLegsInjuredMultiplier?: number;\n readonly painOverloadThreshold?: number;\n readonly painOverloadMultiplier?: number;\n readonly minSpeedMultiplier?: number;\n};\n\n/**\n * Default configuration matching acceptance criteria.\n */\nexport const DEFAULT_INJURY_MOVEMENT_CONFIG: InjuryMovementConfig = {\n legThresholds: {\n normal: 70,\n limping: 30,\n critical: 10,\n },\n maxTorsoPenalty: 0.3,\n bothLegsInjuredMultiplier: 0.8,\n painOverloadThreshold: 80,\n painOverloadMultiplier: 0.85,\n minSpeedMultiplier: 0.1,\n} as const;\n\n/**\n * Result of injury-based movement calculation.\n * \n * **Korean**: 손상 이동 결과\n * \n * @category Movement System\n */\nexport interface InjuryMovementResult {\n /** Final speed in units/second */\n readonly finalSpeed: number;\n /** Combined speed multiplier (0.1-1.0+) */\n readonly speedMultiplier: number;\n /** Breakdown of penalty sources */\n readonly penalties: {\n readonly leftLegPenalty: number;\n readonly rightLegPenalty: number;\n readonly torsoPenalty: number;\n readonly bothLegsInjured: boolean;\n readonly stanceModifier: number;\n readonly painOverload: boolean;\n };\n /** Whether player is limping */\n readonly isLimping: boolean;\n /** Whether player has severe limp */\n readonly isSevereLimp: boolean;\n /** Bilingual status text */\n readonly statusText: {\n readonly korean: string;\n readonly english: string;\n };\n}\n\n/**\n * Injury-Based Movement Modifier System.\n * \n * **Korean**: 손상 기반 이동 수정자 시스템\n * \n * Calculates dynamic movement speed based on injuries, stance, and pain.\n * Integrates with MovementPhysics to apply realistic combat trauma effects.\n * \n * @example\n * ```typescript\n * const modifier = new InjuryMovementModifier();\n * \n * const result = modifier.calculateMovementSpeed(\n * 5.0, // base speed\n * bodyPartHealth, // current health\n * TrigramStance.GEON, // current stance\n * 65 // pain level\n * );\n * \n * console.log(`Speed: ${result.finalSpeed} m/s`);\n * console.log(`Status: ${result.statusText.korean} | ${result.statusText.english}`);\n * ```\n * \n * @category Movement System\n * @korean 손상기반이동수정자\n */\nexport class InjuryMovementModifier {\n private readonly config: InjuryMovementConfig;\n\n /**\n * Threshold for determining if both legs are significantly injured.\n * Uses epsilon to avoid floating-point rounding issues at boundary.\n * \n * @private\n */\n private static readonly BOTH_LEGS_THRESHOLD = 0.3 + 1e-10;\n\n /**\n * Creates a new InjuryMovementModifier with optional configuration.\n * \n * @param config - Optional configuration overrides (supports partial threshold overrides)\n */\n constructor(config?: PartialInjuryMovementConfig) {\n // Deep merge leg thresholds to prevent partial overrides from breaking the config.\n // Use ?? to avoid undefined values overwriting defaults when exactOptionalPropertyTypes is disabled.\n const mergedLegThresholds = {\n normal:\n config?.legThresholds?.normal ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.legThresholds.normal,\n limping:\n config?.legThresholds?.limping ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.legThresholds.limping,\n critical:\n config?.legThresholds?.critical ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.legThresholds.critical,\n };\n\n const mergedConfig: InjuryMovementConfig = {\n legThresholds: mergedLegThresholds,\n maxTorsoPenalty:\n config?.maxTorsoPenalty ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.maxTorsoPenalty,\n bothLegsInjuredMultiplier:\n config?.bothLegsInjuredMultiplier ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.bothLegsInjuredMultiplier,\n painOverloadThreshold:\n config?.painOverloadThreshold ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.painOverloadThreshold,\n painOverloadMultiplier:\n config?.painOverloadMultiplier ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.painOverloadMultiplier,\n minSpeedMultiplier:\n config?.minSpeedMultiplier ??\n DEFAULT_INJURY_MOVEMENT_CONFIG.minSpeedMultiplier,\n };\n\n // Development-mode sanity check: ensure thresholds are finite and ordered\n if (process.env.NODE_ENV !== \"production\") {\n const { normal, limping, critical } = mergedConfig.legThresholds;\n const allFinite =\n Number.isFinite(normal) &&\n Number.isFinite(limping) &&\n Number.isFinite(critical);\n const ordered = normal >= limping && limping >= critical;\n\n if (!allFinite || !ordered) {\n // Non-throwing warning to avoid breaking existing behavior\n console.warn(\n \"[InjuryMovementModifier] Invalid legThresholds configuration detected:\",\n mergedConfig.legThresholds\n );\n }\n }\n\n this.config = mergedConfig;\n }\n\n /**\n * Calculate modified movement speed based on all injury factors.\n * \n * **Korean**: 이동 속도 계산\n * \n * Applies penalties from:\n * 1. Leg injuries (primary factor)\n * 2. Torso injuries (minor factor)\n * 3. Both legs injured (cumulative penalty)\n * 4. Stance modifiers\n * 5. Pain overload\n * \n * @param baseSpeed - Base movement speed (m/s)\n * @param bodyPartHealth - Current body part health values\n * @param stance - Current trigram stance\n * @param painLevel - Current pain level (0-100)\n * @returns Complete movement calculation result\n * \n * @korean 이동속도계산\n */\n public calculateMovementSpeed(\n baseSpeed: number,\n bodyPartHealth: BodyPartHealth,\n stance: TrigramStance,\n painLevel: number\n ): InjuryMovementResult {\n // Calculate individual leg penalties\n const leftLegPenalty = this.calculateLegPenalty(bodyPartHealth.legLeft);\n const rightLegPenalty = this.calculateLegPenalty(bodyPartHealth.legRight);\n\n // Use worst leg penalty as base\n const baseLegPenalty = Math.max(leftLegPenalty, rightLegPenalty);\n let speedMultiplier = 1.0 - baseLegPenalty;\n\n // Check if both legs are significantly injured using centralized method\n const bothLegsInjured = this.areBothLegsInjured(leftLegPenalty, rightLegPenalty);\n if (bothLegsInjured) {\n // Additional 20% penalty when both legs injured\n speedMultiplier *= this.config.bothLegsInjuredMultiplier;\n }\n\n // Calculate torso penalty (minor effect, 0-30% max)\n const avgTorsoHealth = (bodyPartHealth.torsoUpper + bodyPartHealth.torsoLower) / 2;\n // Clamp torso health to prevent negative penalties or exceeding max penalty\n const clampedAvgTorsoHealth = Math.min(100, Math.max(0, avgTorsoHealth));\n const torsoPenalty = ((100 - clampedAvgTorsoHealth) / 100) * this.config.maxTorsoPenalty;\n speedMultiplier *= (1 - torsoPenalty);\n\n // Apply stance modifier\n const stanceModifier = this.getStanceSpeedModifier(stance);\n speedMultiplier *= stanceModifier;\n\n // Apply pain overload penalty if applicable (>= threshold, not just >)\n const painOverload = painLevel >= this.config.painOverloadThreshold;\n if (painOverload) {\n speedMultiplier *= this.config.painOverloadMultiplier; // -15%\n }\n\n // Clamp to minimum speed (10% of base)\n speedMultiplier = Math.max(speedMultiplier, this.config.minSpeedMultiplier);\n\n // Calculate final speed\n const finalSpeed = baseSpeed * speedMultiplier;\n\n // Determine injury state for status text based on worst leg health\n // This ensures status matches the actual movement penalty (which uses worst leg)\n // Note: isLimping = true when leg health is in range [30-70) (limping range with 0-40% penalty)\n // isSevereLimp = true when leg health is < 30 (severe/critical with 40-100% penalty)\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n const isLimping =\n worstLegHealth < this.config.legThresholds.normal &&\n worstLegHealth >= this.config.legThresholds.limping;\n const isSevereLimp = worstLegHealth < this.config.legThresholds.limping;\n\n // Generate status text\n const statusText = this.generateStatusText(worstLegHealth, bothLegsInjured, painOverload);\n\n return {\n finalSpeed,\n speedMultiplier,\n penalties: {\n leftLegPenalty,\n rightLegPenalty,\n torsoPenalty,\n bothLegsInjured,\n stanceModifier,\n painOverload,\n },\n isLimping,\n isSevereLimp,\n statusText,\n };\n }\n\n /**\n * Calculate movement penalty from leg injury severity.\n * \n * **Korean**: 다리 부상 페널티 계산\n * \n * Progressive penalty scaling:\n * - 100-70%: No penalty (0%)\n * - 70-30%: Linear scaling (0-40%)\n * - 30-10%: Accelerated scaling (40-80%)\n * - 10-0%: Critical scaling (80-100%)\n * \n * @param legHealth - Leg health (0-100)\n * @returns Penalty factor (0.0-1.0), clamped to valid range\n * \n * @private\n */\n private calculateLegPenalty(legHealth: number): number {\n const { normal, limping, critical } = this.config.legThresholds;\n\n // Clamp input health to valid range to prevent runaway penalties\n const clampedHealth = Math.min(Math.max(legHealth, 0), 100);\n\n let penalty: number;\n\n if (clampedHealth >= normal) {\n // 70-100%: No penalty\n penalty = 0;\n } else if (clampedHealth >= limping) {\n // 30-70%: 0-40% penalty (linear)\n const healthRange = normal - limping;\n // Guard against division by zero if thresholds are misconfigured\n const healthFactor = healthRange > 0 \n ? (normal - clampedHealth) / healthRange \n : 0;\n penalty = healthFactor * 0.4;\n } else if (clampedHealth >= critical) {\n // 10-30%: 40-80% penalty (accelerated)\n const healthRange = limping - critical;\n // Guard against division by zero if thresholds are misconfigured\n const healthFactor = healthRange > 0 \n ? (limping - clampedHealth) / healthRange \n : 0;\n penalty = 0.4 + (healthFactor * 0.4);\n } else {\n // 0-10%: 80-100% penalty (critical)\n // Guard against division by zero if critical is 0\n const healthFactor = critical > 0 \n ? (critical - clampedHealth) / critical \n : 1;\n penalty = 0.8 + (healthFactor * 0.2);\n }\n\n // Ensure returned penalty is always within [0, 1]\n return Math.min(Math.max(penalty, 0), 1);\n }\n\n /**\n * Checks if both legs are significantly injured (>30% penalty each).\n * Uses epsilon-based comparison for floating-point robustness.\n * \n * @param leftLegPenalty - Penalty for left leg (0-1)\n * @param rightLegPenalty - Penalty for right leg (0-1)\n * @returns True if both legs are significantly injured\n * @private\n */\n private areBothLegsInjured(leftLegPenalty: number, rightLegPenalty: number): boolean {\n return leftLegPenalty >= InjuryMovementModifier.BOTH_LEGS_THRESHOLD && \n rightLegPenalty >= InjuryMovementModifier.BOTH_LEGS_THRESHOLD;\n }\n\n /**\n * Get stance-based speed modifier.\n * \n * **Korean**: 자세 속도 배수 가져오기\n * \n * @param stance - Current trigram stance\n * @returns Speed multiplier (0.8-1.25), defaults to 1.0 for unknown stances\n * \n */\n public getStanceSpeedModifier(stance: TrigramStance): number {\n const modifier = STANCE_SPEED_MODIFIERS[stance];\n\n // Defensive fallback for unknown stances (e.g., test/invalid values)\n if (modifier == null) {\n // Runtime-safe environment check (works in both Node and browser/Vite environments)\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV === \"development\"\n ) {\n console.warn(\n `[InjuryMovementModifier] Unknown stance \"${String(\n stance\n )}\" received in getStanceSpeedModifier; defaulting to 1.0.`\n );\n }\n return 1.0;\n }\n\n return modifier;\n }\n\n /**\n * Generate bilingual status text based on injury state.\n * \n * **Korean**: 상태 텍스트 생성\n * \n * @param legHealthForStatus - Leg health percentage used for status determination (typically worst leg)\n * @param bothLegsInjured - Whether both legs are significantly injured\n * @param painOverload - Whether pain is over threshold\n * @returns Bilingual status text\n * \n * @private\n */\n private generateStatusText(\n legHealthForStatus: number,\n bothLegsInjured: boolean,\n painOverload: boolean\n ): { korean: string; english: string } {\n const { normal, limping, critical } = this.config.legThresholds;\n\n if (legHealthForStatus < critical) {\n const painText = painOverload ? \" | 고통 과부하\" : \"\";\n const painTextEn = painOverload ? \" | Pain Overload\" : \"\";\n const baseKorean = bothLegsInjured ? \"심각한 부상 | 양 다리\" : \"심각한 부상\";\n const baseEnglish = bothLegsInjured ? \"Critical Injury | Both Legs\" : \"Critical Injury\";\n return {\n korean: `${baseKorean}${painText}`,\n english: `${baseEnglish}${painTextEn}`,\n };\n } else if (legHealthForStatus < limping) {\n const painText = painOverload ? \" | 고통 과부하\" : \"\";\n const painTextEn = painOverload ? \" | Pain Overload\" : \"\";\n const baseKorean = bothLegsInjured ? \"중증 절름거림 | 양 다리\" : \"중증 절름거림\";\n const baseEnglish = bothLegsInjured ? \"Severe Limping | Both Legs\" : \"Severe Limping\";\n return {\n korean: `${baseKorean}${painText}`,\n english: `${baseEnglish}${painTextEn}`,\n };\n } else if (legHealthForStatus < normal) {\n const statusKrParts = [\"절름거림\"];\n const statusEnParts = [\"Limping\"];\n\n if (bothLegsInjured) {\n statusKrParts.push(\"양 다리\");\n statusEnParts.push(\"Both Legs\");\n }\n\n if (painOverload) {\n statusKrParts.push(\"고통 과부하\");\n statusEnParts.push(\"Pain Overload\");\n }\n\n return {\n korean: statusKrParts.join(\" | \"),\n english: statusEnParts.join(\" | \"),\n };\n } else if (painOverload) {\n return {\n korean: \"고통 과부하\",\n english: \"Pain Overload\",\n };\n } else {\n return {\n korean: \"정상\",\n english: \"Normal\",\n };\n }\n }\n\n /**\n * Check if player should display limping animation.\n * \n * **Korean**: 절름거림 확인\n * \n * Uses worst leg health to match movement penalty behavior.\n * \n * @param bodyPartHealth - Current body part health\n * @returns True if limping animation should play\n * \n */\n public shouldLimp(bodyPartHealth: BodyPartHealth): boolean {\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n return worstLegHealth < this.config.legThresholds.normal;\n }\n\n /**\n * Check if player has severe limp.\n * \n * **Korean**: 중증 절름거림 확인\n * \n * Uses worst leg health to match movement penalty behavior.\n * \n * @param bodyPartHealth - Current body part health\n * @returns True if severe limp (leg health < 30%)\n * \n */\n public hasSevereLimp(bodyPartHealth: BodyPartHealth): boolean {\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n return worstLegHealth < this.config.legThresholds.limping;\n }\n\n /**\n * Get current injury state description.\n * \n * **Korean**: 부상 상태 설명\n * \n * Uses worst leg health to match movement penalty behavior.\n * \n * @param bodyPartHealth - Current body part health\n * @returns Bilingual injury description\n * \n */\n public getInjuryDescription(bodyPartHealth: BodyPartHealth): {\n korean: string;\n english: string;\n } {\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n const leftLegPenalty = this.calculateLegPenalty(bodyPartHealth.legLeft);\n const rightLegPenalty = this.calculateLegPenalty(bodyPartHealth.legRight);\n const bothLegsInjured = this.areBothLegsInjured(leftLegPenalty, rightLegPenalty);\n\n return this.generateStatusText(worstLegHealth, bothLegsInjured, false);\n }\n}\n\n/**\n * Singleton instance for global access.\n * \n */\nexport const injuryMovementModifier = new InjuryMovementModifier();\n"],"mappings":"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"}
|
|
@@ -33,7 +33,6 @@ import { TrigramStance } from "../../types/common";
|
|
|
33
33
|
* movementState.legInjuryFactor = legInjuryFactor;
|
|
34
34
|
* ```
|
|
35
35
|
*
|
|
36
|
-
* @public
|
|
37
36
|
* @korean 다리손상요소계산
|
|
38
37
|
*/
|
|
39
38
|
export declare function calculateLegInjuryFactor(bodyPartHealth: BodyPartHealth): number;
|
|
@@ -67,7 +66,6 @@ export declare function calculateLegInjuryFactor(bodyPartHealth: BodyPartHealth)
|
|
|
67
66
|
* movementPhysics.setMaxSpeed(finalSpeed);
|
|
68
67
|
* ```
|
|
69
68
|
*
|
|
70
|
-
* @public
|
|
71
69
|
* @korean 종합이동속도계산
|
|
72
70
|
*/
|
|
73
71
|
export declare function calculateMovementSpeed(baseSpeed: number, bodyPartHealth: BodyPartHealth, stance: TrigramStance, painLevel: number): number;
|
|
@@ -84,7 +82,6 @@ export declare function calculateMovementSpeed(baseSpeed: number, bodyPartHealth
|
|
|
84
82
|
* @param bodyPartHealth - Current body part health
|
|
85
83
|
* @returns Speed multiplier (0.1-1.0)
|
|
86
84
|
*
|
|
87
|
-
* @public
|
|
88
85
|
* @korean 손상속도배수계산
|
|
89
86
|
*/
|
|
90
87
|
export declare function calculateInjuryMultiplier(bodyPartHealth: BodyPartHealth): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/systems/movement/integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/systems/movement/integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,cAAc,GAC7B,MAAM,CAeR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,MAAM,CASR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,GAC7B,MAAM,CAWR"}
|
|
@@ -34,7 +34,6 @@ import { injuryMovementModifier } from "./InjuryMovementModifier.js";
|
|
|
34
34
|
* movementState.legInjuryFactor = legInjuryFactor;
|
|
35
35
|
* ```
|
|
36
36
|
*
|
|
37
|
-
* @public
|
|
38
37
|
* @korean 다리손상요소계산
|
|
39
38
|
*/
|
|
40
39
|
function calculateLegInjuryFactor(bodyPartHealth) {
|
|
@@ -72,7 +71,6 @@ function calculateLegInjuryFactor(bodyPartHealth) {
|
|
|
72
71
|
* movementPhysics.setMaxSpeed(finalSpeed);
|
|
73
72
|
* ```
|
|
74
73
|
*
|
|
75
|
-
* @public
|
|
76
74
|
* @korean 종합이동속도계산
|
|
77
75
|
*/
|
|
78
76
|
function calculateMovementSpeed(baseSpeed, bodyPartHealth, stance, painLevel) {
|
|
@@ -91,7 +89,6 @@ function calculateMovementSpeed(baseSpeed, bodyPartHealth, stance, painLevel) {
|
|
|
91
89
|
* @param bodyPartHealth - Current body part health
|
|
92
90
|
* @returns Speed multiplier (0.1-1.0)
|
|
93
91
|
*
|
|
94
|
-
* @public
|
|
95
92
|
* @korean 손상속도배수계산
|
|
96
93
|
*/
|
|
97
94
|
function calculateInjuryMultiplier(bodyPartHealth) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.js","names":[],"sources":["../../../src/systems/movement/integration.ts"],"sourcesContent":["/**\n * Integration module for InjuryMovementModifier with MovementPhysics\n * \n * **Korean**: 손상 이동 통합 (Injury Movement Integration)\n * \n * Provides helper functions to integrate the InjuryMovementModifier system\n * with the existing MovementPhysics system.\n * \n * @module systems/movement/integration\n * @category Movement System\n * @korean 손상이동통합\n */\n\nimport { injuryMovementModifier } from \"./InjuryMovementModifier\";\nimport type { BodyPartHealth } from \"../bodypart/types\";\nimport { TrigramStance } from \"@/types/common\";\n\n/**\n * Calculate leg injury factor for MovementPhysics from body part health.\n * \n * **Korean**: 다리 손상 요소 계산\n * \n * Converts detailed body part health into a simple 0-1 injury factor\n * that MovementPhysics.MovementState expects. This allows gradual\n * migration from the old simple system to the new detailed system.\n * \n * Uses the **worst** (minimum) leg health to match the main injury system's behavior,\n * ensuring asymmetric injuries (e.g., one leg at 0%, other at 100%) are properly represented.\n * \n * @param bodyPartHealth - Current body part health\n * @returns Leg injury factor (0 = healthy, 1 = fully injured), clamped to 0-1 range\n * \n * @example\n * ```typescript\n * const legInjuryFactor = calculateLegInjuryFactor(bodyPartHealth);\n * movementState.legInjuryFactor = legInjuryFactor;\n * ```\n * \n * @
|
|
1
|
+
{"version":3,"file":"integration.js","names":[],"sources":["../../../src/systems/movement/integration.ts"],"sourcesContent":["/**\n * Integration module for InjuryMovementModifier with MovementPhysics\n * \n * **Korean**: 손상 이동 통합 (Injury Movement Integration)\n * \n * Provides helper functions to integrate the InjuryMovementModifier system\n * with the existing MovementPhysics system.\n * \n * @module systems/movement/integration\n * @category Movement System\n * @korean 손상이동통합\n */\n\nimport { injuryMovementModifier } from \"./InjuryMovementModifier\";\nimport type { BodyPartHealth } from \"../bodypart/types\";\nimport { TrigramStance } from \"@/types/common\";\n\n/**\n * Calculate leg injury factor for MovementPhysics from body part health.\n * \n * **Korean**: 다리 손상 요소 계산\n * \n * Converts detailed body part health into a simple 0-1 injury factor\n * that MovementPhysics.MovementState expects. This allows gradual\n * migration from the old simple system to the new detailed system.\n * \n * Uses the **worst** (minimum) leg health to match the main injury system's behavior,\n * ensuring asymmetric injuries (e.g., one leg at 0%, other at 100%) are properly represented.\n * \n * @param bodyPartHealth - Current body part health\n * @returns Leg injury factor (0 = healthy, 1 = fully injured), clamped to 0-1 range\n * \n * @example\n * ```typescript\n * const legInjuryFactor = calculateLegInjuryFactor(bodyPartHealth);\n * movementState.legInjuryFactor = legInjuryFactor;\n * ```\n * \n * @korean 다리손상요소계산\n */\nexport function calculateLegInjuryFactor(\n bodyPartHealth: BodyPartHealth\n): number {\n // Use worst (minimum) leg health to match main injury system behavior\n // This ensures asymmetric injuries are properly represented\n const worstLegHealth = Math.min(bodyPartHealth.legLeft, bodyPartHealth.legRight);\n \n // Clamp worst leg health to valid 0-100 range to avoid invalid injury factors\n const clampedLegHealth = Math.min(100, Math.max(0, worstLegHealth));\n\n // Normalize to 0-1 health ratio (1 = fully healthy, 0 = no health)\n const healthRatio = clampedLegHealth / 100;\n\n // Convert to 0-1 injury factor (0 = healthy, 1 = fully injured)\n // Use inverse of health ratio and clamp defensively to 0-1\n const injuryFactor = 1.0 - healthRatio;\n return Math.min(1, Math.max(0, injuryFactor));\n}\n\n/**\n * Calculate comprehensive movement speed with all injury modifiers.\n * \n * **Korean**: 종합 이동 속도 계산\n * \n * This is the recommended function for full integration with the new\n * injury system. It applies all modifiers including leg injuries,\n * torso damage, stance bonuses, and pain penalties.\n * \n * Uses the shared singleton instance to avoid allocations in per-frame loops.\n * \n * @param baseSpeed - Base movement speed (m/s)\n * @param bodyPartHealth - Current body part health\n * @param stance - Current trigram stance\n * @param painLevel - Current pain level (0-100)\n * @returns Final calculated speed in m/s\n * \n * @example\n * ```typescript\n * const finalSpeed = calculateMovementSpeed(\n * 5.0,\n * playerBodyHealth,\n * TrigramStance.GEON,\n * 65\n * );\n * \n * // Use this speed to override MovementPhysics\n * movementPhysics.setMaxSpeed(finalSpeed);\n * ```\n * \n * @korean 종합이동속도계산\n */\nexport function calculateMovementSpeed(\n baseSpeed: number,\n bodyPartHealth: BodyPartHealth,\n stance: TrigramStance,\n painLevel: number\n): number {\n const result = injuryMovementModifier.calculateMovementSpeed(\n baseSpeed,\n bodyPartHealth,\n stance,\n painLevel\n );\n \n return result.finalSpeed;\n}\n\n/**\n * Calculate speed multiplier from injuries (without stance or pain).\n * \n * **Korean**: 손상 속도 배수 계산\n * \n * Useful when you want to apply injury penalties separately from\n * stance and pain modifiers.\n * \n * Uses the shared singleton instance to avoid allocations in per-frame loops.\n * \n * @param bodyPartHealth - Current body part health\n * @returns Speed multiplier (0.1-1.0)\n * \n * @korean 손상속도배수계산\n */\nexport function calculateInjuryMultiplier(\n bodyPartHealth: BodyPartHealth\n): number {\n // Calculate without stance or pain modifiers\n const result = injuryMovementModifier.calculateMovementSpeed(\n 1.0, // Base speed of 1.0 to get pure multiplier\n bodyPartHealth,\n TrigramStance.GEON, // Neutral stance (1.0x)\n 0 // No pain\n );\n \n // The result will be the pure injury multiplier\n return result.speedMultiplier;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,SAAgB,yBACd,gBACQ;CAGR,MAAM,iBAAiB,KAAK,IAAI,eAAe,SAAS,eAAe,SAAS;CAUhF,MAAM,eAAe,IAPI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,eAAe,CAG9C,GAAmB;CAKvC,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmC/C,SAAgB,uBACd,WACA,gBACA,QACA,WACQ;CAQR,OAPe,uBAAuB,uBACpC,WACA,gBACA,QACA,UAGK,CAAO;;;;;;;;;;;;;;;;;AAkBhB,SAAgB,0BACd,gBACQ;CAUR,OARe,uBAAuB,uBACpC,GACA,gBACA,cAAc,MACd,EAIK,CAAO"}
|
|
@@ -38,7 +38,6 @@ import { AnimationType } from "../animation";
|
|
|
38
38
|
*
|
|
39
39
|
* **Korean**: 공격 이동 설정 (Attack Movement Configuration)
|
|
40
40
|
*
|
|
41
|
-
* @public
|
|
42
41
|
* @korean 공격이동설정
|
|
43
42
|
*/
|
|
44
43
|
export interface AttackMovementConfig {
|
|
@@ -58,7 +57,6 @@ export interface AttackMovementConfig {
|
|
|
58
57
|
*
|
|
59
58
|
* Contains displacement vector and timing for attack lunge.
|
|
60
59
|
*
|
|
61
|
-
* @public
|
|
62
60
|
* @korean 공격이동결과
|
|
63
61
|
*/
|
|
64
62
|
export interface AttackMovementResult {
|
|
@@ -98,7 +96,6 @@ export interface AttackMovementResult {
|
|
|
98
96
|
* // recoveryDuration: 0.24s (50% of animation)
|
|
99
97
|
* ```
|
|
100
98
|
*
|
|
101
|
-
* @public
|
|
102
99
|
* @korean 공격이동물리
|
|
103
100
|
*/
|
|
104
101
|
export declare class AttackMovementPhysics {
|
|
@@ -136,7 +133,6 @@ export declare class AttackMovementPhysics {
|
|
|
136
133
|
* // Result: ~0.24m forward (0.3m * 0.8 Gan modifier)
|
|
137
134
|
* ```
|
|
138
135
|
*
|
|
139
|
-
* @public
|
|
140
136
|
* @korean 공격이동계산
|
|
141
137
|
*/
|
|
142
138
|
calculateAttackMovement(config: AttackMovementConfig): AttackMovementResult;
|
|
@@ -220,7 +216,6 @@ export declare class AttackMovementPhysics {
|
|
|
220
216
|
* }
|
|
221
217
|
* ```
|
|
222
218
|
*
|
|
223
|
-
* @public
|
|
224
219
|
* @korean 공격이동적용
|
|
225
220
|
*/
|
|
226
221
|
applyAttackMovement(basePosition: THREE.Vector3, result: AttackMovementResult, elapsedTime: number, isRecoveryPhase: boolean): THREE.Vector3;
|
|
@@ -233,7 +228,6 @@ export declare class AttackMovementPhysics {
|
|
|
233
228
|
* @param lungeDuration - Total lunge phase duration
|
|
234
229
|
* @returns True if in forward lunge phase
|
|
235
230
|
*
|
|
236
|
-
* @public
|
|
237
231
|
* @korean 돌진상태확인
|
|
238
232
|
*/
|
|
239
233
|
isInLungePhase(elapsedTime: number, lungeDuration: number): boolean;
|
|
@@ -246,7 +240,6 @@ export declare class AttackMovementPhysics {
|
|
|
246
240
|
* @param result - Attack movement result with timing
|
|
247
241
|
* @returns True if in recovery return phase
|
|
248
242
|
*
|
|
249
|
-
* @public
|
|
250
243
|
* @korean 회복상태확인
|
|
251
244
|
*/
|
|
252
245
|
isInRecoveryPhase(elapsedTime: number, result: AttackMovementResult): boolean;
|
|
@@ -257,7 +250,6 @@ export declare class AttackMovementPhysics {
|
|
|
257
250
|
*
|
|
258
251
|
* @returns Korean and English phase names
|
|
259
252
|
*
|
|
260
|
-
* @public
|
|
261
253
|
* @korean 돌진단계이름
|
|
262
254
|
*/
|
|
263
255
|
getLungePhaseName(): {
|
|
@@ -271,7 +263,6 @@ export declare class AttackMovementPhysics {
|
|
|
271
263
|
*
|
|
272
264
|
* @returns Korean and English phase names
|
|
273
265
|
*
|
|
274
|
-
* @public
|
|
275
266
|
* @korean 복귀단계이름
|
|
276
267
|
*/
|
|
277
268
|
getRecoveryPhaseName(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttackMovementPhysics.d.ts","sourceRoot":"","sources":["../../../src/systems/physics/AttackMovementPhysics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"AttackMovementPhysics.d.ts","sourceRoot":"","sources":["../../../src/systems/physics/AttackMovementPhysics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,6BAA6B;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;IACrC,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,qBAAqB;IAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,uBAAuB,CACrB,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB;IAuBvB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,uBAAuB;IAqJ/B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,mBAAmB,CACjB,YAAY,EAAE,KAAK,CAAC,OAAO,EAC3B,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,OAAO,GACvB,KAAK,CAAC,OAAO;IAmChB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAInE;;;;;;;;;;OAUG;IACH,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,oBAAoB,GAC3B,OAAO;IAOV;;;;;;;;OAQG;IACH,iBAAiB,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOxD;;;;;;;;OAQG;IACH,oBAAoB,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAM5D;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -28,7 +28,6 @@ import { AnimationType } from "../animation/builders/MartialArtsConstants.js";
|
|
|
28
28
|
* // recoveryDuration: 0.24s (50% of animation)
|
|
29
29
|
* ```
|
|
30
30
|
*
|
|
31
|
-
* @public
|
|
32
31
|
* @korean 공격이동물리
|
|
33
32
|
*/
|
|
34
33
|
var AttackMovementPhysics = class {
|
|
@@ -66,7 +65,6 @@ var AttackMovementPhysics = class {
|
|
|
66
65
|
* // Result: ~0.24m forward (0.3m * 0.8 Gan modifier)
|
|
67
66
|
* ```
|
|
68
67
|
*
|
|
69
|
-
* @public
|
|
70
68
|
* @korean 공격이동계산
|
|
71
69
|
*/
|
|
72
70
|
calculateAttackMovement(config) {
|
|
@@ -184,7 +182,6 @@ var AttackMovementPhysics = class {
|
|
|
184
182
|
* }
|
|
185
183
|
* ```
|
|
186
184
|
*
|
|
187
|
-
* @public
|
|
188
185
|
* @korean 공격이동적용
|
|
189
186
|
*/
|
|
190
187
|
applyAttackMovement(basePosition, result, elapsedTime, isRecoveryPhase) {
|
|
@@ -211,7 +208,6 @@ var AttackMovementPhysics = class {
|
|
|
211
208
|
* @param lungeDuration - Total lunge phase duration
|
|
212
209
|
* @returns True if in forward lunge phase
|
|
213
210
|
*
|
|
214
|
-
* @public
|
|
215
211
|
* @korean 돌진상태확인
|
|
216
212
|
*/
|
|
217
213
|
isInLungePhase(elapsedTime, lungeDuration) {
|
|
@@ -226,7 +222,6 @@ var AttackMovementPhysics = class {
|
|
|
226
222
|
* @param result - Attack movement result with timing
|
|
227
223
|
* @returns True if in recovery return phase
|
|
228
224
|
*
|
|
229
|
-
* @public
|
|
230
225
|
* @korean 회복상태확인
|
|
231
226
|
*/
|
|
232
227
|
isInRecoveryPhase(elapsedTime, result) {
|
|
@@ -239,7 +234,6 @@ var AttackMovementPhysics = class {
|
|
|
239
234
|
*
|
|
240
235
|
* @returns Korean and English phase names
|
|
241
236
|
*
|
|
242
|
-
* @public
|
|
243
237
|
* @korean 돌진단계이름
|
|
244
238
|
*/
|
|
245
239
|
getLungePhaseName() {
|
|
@@ -255,7 +249,6 @@ var AttackMovementPhysics = class {
|
|
|
255
249
|
*
|
|
256
250
|
* @returns Korean and English phase names
|
|
257
251
|
*
|
|
258
|
-
* @public
|
|
259
252
|
* @korean 복귀단계이름
|
|
260
253
|
*/
|
|
261
254
|
getRecoveryPhaseName() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttackMovementPhysics.js","names":[],"sources":["../../../src/systems/physics/AttackMovementPhysics.ts"],"sourcesContent":["/**\n * Attack Movement Physics System for realistic forward momentum during attacks.\n *\n * **Korean**: 공격 이동 물리 시스템 (Attack Movement Physics System)\n *\n * Implements realistic forward movement physics when fighters execute attacks.\n * Kicks naturally extend the body forward, punches lunge with body weight,\n * and spinning techniques carry rotational momentum.\n *\n * ## Attack Movement Mechanics\n *\n * Forward movement distance is determined by:\n * - Animation type (kicks > punches > elbows/knees)\n * - Stance modifiers (8 trigram stances affect aggression)\n * - Animation phase timing (extension → peak → recovery)\n *\n * ## Movement Integration\n *\n * - Extension phase (frames 3-6): Forward lunge with ease-out\n * - Peak phase (frame 6): Maximum extension reached\n * - Recovery phase (frames 7-10): Return to original stance\n * - Arena bounds: Automatically clamp movement to valid zone\n *\n * ## Performance\n *\n * Optimized for 60fps with efficient vector calculations and\n * smooth easing curves for realistic attack momentum feel.\n *\n * @module systems/physics/AttackMovementPhysics\n * @category Physics System\n * @korean 공격이동물리\n */\n\nimport * as THREE from \"three\";\nimport { TrigramStance } from \"@/types/common\";\nimport { AnimationType } from \"@/systems/animation\";\n\n/**\n * Configuration for attack movement calculation.\n *\n * **Korean**: 공격 이동 설정 (Attack Movement Configuration)\n *\n * @public\n * @korean 공격이동설정\n */\nexport interface AttackMovementConfig {\n /** Animation type being executed */\n readonly animationType: AnimationType;\n /** Current trigram stance */\n readonly currentStance: TrigramStance;\n /** Normalized attack direction vector (attacker → target) */\n readonly direction: THREE.Vector3;\n /** Total attack animation duration in seconds */\n readonly animationDuration: number;\n}\n\n/**\n * Result of attack movement calculation.\n *\n * **Korean**: 공격 이동 결과 (Attack Movement Result)\n *\n * Contains displacement vector and timing for attack lunge.\n *\n * @public\n * @korean 공격이동결과\n */\nexport interface AttackMovementResult {\n /** Total forward displacement vector in world space */\n readonly displacement: THREE.Vector3;\n /** Duration of forward lunge phase in seconds */\n readonly lungeDuration: number;\n /** Duration of recovery return phase in seconds */\n readonly recoveryDuration: number;\n /** Total movement cycle duration in seconds */\n readonly totalDuration: number;\n}\n\n/**\n * Attack Movement Physics Engine.\n *\n * **Korean**: 공격 이동 물리 엔진\n *\n * Calculates realistic forward movement during attack animations\n * based on technique type, stance modifiers, and animation timing.\n * Provides smooth lunge and recovery phases for authentic martial arts feel.\n *\n * @example\n * ```typescript\n * const physics = new AttackMovementPhysics();\n *\n * // Calculate movement for roundhouse kick\n * const config: AttackMovementConfig = {\n * animationType: AnimationType.ROUNDHOUSE_KICK,\n * currentStance: TrigramStance.LI, // Fire stance (aggressive)\n * direction: new THREE.Vector3(1, 0, 0).normalize(),\n * animationDuration: 0.48, // 480ms kick animation\n * };\n *\n * const result = physics.calculateAttackMovement(config);\n * // Result: 1.0m base * 1.3 (Fire bonus) = ~1.3m forward lunge\n * // lungeDuration: 0.24s (50% of animation)\n * // recoveryDuration: 0.24s (50% of animation)\n * ```\n *\n * @public\n * @korean 공격이동물리\n */\nexport class AttackMovementPhysics {\n /**\n * Calculates attack movement displacement and timing.\n *\n * **Korean**: 공격 이동 계산 (Calculate Attack Movement)\n *\n * Determines forward lunge distance and recovery timing based on:\n * 1. Base movement from animation type\n * 2. Stance movement modifier (8 trigram effects)\n * 3. Animation phase durations (lunge vs recovery)\n *\n * @param config - Attack movement configuration\n * @returns Attack movement result with displacement and timing\n *\n * @example\n * ```typescript\n * // Front kick with Heaven stance\n * const kick = physics.calculateAttackMovement({\n * animationType: AnimationType.FRONT_KICK,\n * currentStance: TrigramStance.GEON,\n * direction: attackVector,\n * animationDuration: 0.4,\n * });\n * // Result: ~0.88m forward (0.8m * 1.1 Geon modifier)\n *\n * // Jab with Mountain stance\n * const jab = physics.calculateAttackMovement({\n * animationType: AnimationType.JAB,\n * currentStance: TrigramStance.GAN,\n * direction: attackVector,\n * animationDuration: 0.25,\n * });\n * // Result: ~0.24m forward (0.3m * 0.8 Gan modifier)\n * ```\n *\n * @public\n * @korean 공격이동계산\n */\n calculateAttackMovement(\n config: AttackMovementConfig\n ): AttackMovementResult {\n // 1. Get base movement distance for animation type\n const baseDistance = this.getBaseMovementDistance(config.animationType);\n\n // 2. Apply stance movement modifier\n const stanceModifier = this.getStanceMovementModifier(config.currentStance);\n const finalDistance = baseDistance * stanceModifier;\n\n // 3. Calculate displacement vector\n const displacement = config.direction.clone().multiplyScalar(finalDistance);\n\n // 4. Calculate phase durations (lunge + recovery)\n const lungeDuration = config.animationDuration * 0.5; // First 50% = forward\n const recoveryDuration = config.animationDuration * 0.5; // Last 50% = return\n\n return {\n displacement,\n lungeDuration,\n recoveryDuration,\n totalDuration: config.animationDuration,\n };\n }\n\n /**\n * Gets base forward movement distance for animation type.\n *\n * **Korean**: 기본 이동 거리 (Base Movement Distance)\n *\n * Movement distances by technique category:\n * - Kicks: 0.8-1.2m (leg extension, longest reach)\n * - Punches: 0.3-0.5m (arm extension, body lunge)\n * - Elbows/Knees: 0.2-0.3m (close range techniques)\n * - Spinning: 0.5-0.8m (rotation carries momentum)\n *\n * @param animationType - Type of attack animation\n * @returns Base movement distance in meters\n *\n * @private\n * @korean 기본이동거리\n */\n private getBaseMovementDistance(animationType: AnimationType): number {\n // Kicks - highest forward movement (leg extension)\n if (\n animationType === AnimationType.ROUNDHOUSE_KICK ||\n animationType === AnimationType.SIDE_KICK ||\n animationType === AnimationType.BACK_KICK\n ) {\n return 1.0; // 1.0m forward lunge\n }\n\n if (\n animationType === AnimationType.FRONT_KICK ||\n animationType === AnimationType.PUSH_KICK\n ) {\n return 0.8; // 0.8m forward lunge\n }\n\n if (\n animationType === AnimationType.AXE_KICK ||\n animationType === AnimationType.CRESCENT_KICK ||\n animationType === AnimationType.LOW_KICK\n ) {\n return 0.9; // 0.9m forward lunge\n }\n\n // Spinning kicks - momentum carries body forward\n if (\n animationType === AnimationType.SPINNING_HOOK ||\n animationType === AnimationType.SPINNING_HEEL_KICK ||\n animationType === AnimationType.TORNADO_KICK\n ) {\n return 0.8; // 0.8m with rotation\n }\n\n // Jumping/flying kicks - aerial momentum\n if (\n animationType === AnimationType.FLYING_KICK ||\n animationType === AnimationType.JUMPING_KICK\n ) {\n return 1.2; // 1.2m maximum extension\n }\n\n // Punches - moderate forward movement (arm + body lunge)\n if (\n animationType === AnimationType.CROSS ||\n animationType === AnimationType.OVERHAND ||\n animationType === AnimationType.HOOK\n ) {\n return 0.5; // 0.5m forward lunge\n }\n\n if (\n animationType === AnimationType.JAB ||\n animationType === AnimationType.BACKFIST\n ) {\n return 0.3; // 0.3m forward lunge\n }\n\n if (\n animationType === AnimationType.UPPERCUT ||\n animationType === AnimationType.HAMMER_FIST ||\n animationType === AnimationType.PALM_STRIKE\n ) {\n return 0.4; // 0.4m forward lunge\n }\n\n // Elbow/Knee - minimal movement (close range)\n if (\n animationType === AnimationType.ELBOW_STRIKE ||\n animationType === AnimationType.KNEE_STRIKE ||\n animationType === AnimationType.KNEE_KICK ||\n animationType === AnimationType.ELBOW_UPPERCUT ||\n animationType === AnimationType.FLYING_KNEE ||\n animationType === AnimationType.CLINCH_KNEE ||\n animationType === AnimationType.SPINNING_ELBOW ||\n animationType === AnimationType.TEMPLE_ELBOW ||\n animationType === AnimationType.SPINNING_BACK_ELBOW ||\n animationType === AnimationType.SPINAL_ELBOW ||\n animationType === AnimationType.BRACHIAL_ELBOW ||\n animationType === AnimationType.KIDNEY_KNEE ||\n animationType === AnimationType.FEMORAL_KNEE\n ) {\n return 0.2; // 0.2m forward lunge\n }\n\n // Specialized jab variants - similar to jab (quick extension)\n if (\n animationType === AnimationType.SPEAR_HAND_STRIKE ||\n animationType === AnimationType.NERVE_STRIKE ||\n animationType === AnimationType.PRESSURE_POINT_STRIKE ||\n animationType === AnimationType.LIGHTNING_STRIKE ||\n animationType === AnimationType.RAPID_BARRAGE ||\n animationType === AnimationType.RHYTHMIC_STRIKES ||\n animationType === AnimationType.NERVE_PARALYSIS ||\n animationType === AnimationType.THROAT_STRIKE ||\n animationType === AnimationType.EYE_GOUGE\n ) {\n return 0.3; // 0.3m forward lunge (jab-like)\n }\n\n // Specialized cross variants - similar to cross (body weight transfer)\n if (\n animationType === AnimationType.HEAVEN_STRIKE ||\n animationType === AnimationType.FLOWING_CROSS\n ) {\n return 0.5; // 0.5m forward lunge (cross-like)\n }\n\n // Specialized palm strikes - similar to palm strike\n if (\n animationType === AnimationType.SOLAR_PLEXUS_STRIKE ||\n animationType === AnimationType.FLOWING_PUSH ||\n animationType === AnimationType.LIVER_DISRUPTION ||\n animationType === AnimationType.EAR_STRIKE\n ) {\n return 0.4; // 0.4m forward lunge (palm-like)\n }\n\n // Grappling - minimal forward movement (rotation/off-balancing in place)\n if (\n animationType === AnimationType.THROW ||\n animationType === AnimationType.JOINT_LOCK ||\n animationType === AnimationType.TAKEDOWN ||\n animationType === AnimationType.SWEEP ||\n animationType === AnimationType.CLINCH ||\n animationType === AnimationType.GRAPPLE ||\n animationType === AnimationType.SLAM ||\n animationType === AnimationType.WRIST_LOCK ||\n animationType === AnimationType.ARM_BAR ||\n animationType === AnimationType.SHOULDER_LOCK ||\n animationType === AnimationType.HIP_THROW ||\n animationType === AnimationType.LEG_REAP ||\n animationType === AnimationType.SMALL_CIRCLE_LOCK ||\n animationType === AnimationType.FINGER_LOCK ||\n animationType === AnimationType.ELBOW_LOCK ||\n animationType === AnimationType.SHOULDER_MANIPULATION ||\n animationType === AnimationType.MOUNTAIN_LOCK ||\n animationType === AnimationType.EARTH_EMBRACE ||\n animationType === AnimationType.CAROTID_CHOKE\n ) {\n return 0.05; // 0.05m forward movement for grappling entries\n }\n\n // Default - conservative minimal movement for any unmapped types\n // Additional AnimationType values can be grouped with the closest category above\n // to fine-tune their forward displacement without changing overall behavior\n return 0.2;\n }\n\n /**\n * Gets stance movement modifier for attack lunge.\n *\n * **Korean**: 자세 이동 배율 (Stance Movement Modifier)\n *\n * Trigram stance movement modifiers based on combat philosophy:\n * - ☰ 건 (Geon/Heaven): +30% movement (aggressive, drives forward with pure yang)\n * - ☳ 진 (Jin/Thunder): +20% movement (explosive power, shocking force)\n * - ☴ 손 (Son/Wind): +15% movement (continuous flow, mobile)\n * - ☲ 리 (Li/Fire): +10% movement (precision strikes, controlled aggression)\n * - ☱ 태 (Tae/Lake): 0% (neutral, fluid and adaptive)\n * - ☵ 감 (Gam/Water): 0% (neutral, flowing and flexible)\n * - ☷ 곤 (Gon/Earth): -10% movement (grounded, stable techniques)\n * - ☶ 간 (Gan/Mountain): -20% movement (defensive mastery, minimal advance)\n *\n * @param stance - Current trigram stance\n * @returns Movement multiplier (0.8 to 1.3)\n *\n * @private\n * @korean 자세이동배율\n */\n private getStanceMovementModifier(stance: TrigramStance): number {\n const modifiers: Record<TrigramStance, number> = {\n [TrigramStance.GEON]: 1.3, // Heaven: +30% aggressive forward pressure (pure yang drives forward)\n [TrigramStance.JIN]: 1.2, // Thunder: +20% explosive movement\n [TrigramStance.SON]: 1.15, // Wind: +15% flowing movement\n [TrigramStance.LI]: 1.1, // Fire: +10% precision strikes with controlled forward movement\n [TrigramStance.TAE]: 1.0, // Lake: neutral movement\n [TrigramStance.GAM]: 1.0, // Water: neutral movement\n [TrigramStance.GON]: 0.9, // Earth: -10% grounded movement\n [TrigramStance.GAN]: 0.8, // Mountain: -20% defensive movement\n };\n return modifiers[stance];\n }\n\n /**\n * Applies attack movement force to attacker position over time.\n *\n * **Korean**: 공격 이동 적용 (Apply Attack Movement)\n *\n * Uses smooth ease-out cubic curve for realistic lunge feel:\n * - Fast initial forward movement (attack commitment)\n * - Gradual deceleration at peak extension\n * - Smooth return during recovery phase\n *\n * @param basePosition - Original stance position (does not change during attack)\n * @param result - Attack movement result with displacement\n * @param elapsedTime - Time elapsed since attack started\n * @param isRecoveryPhase - Whether in recovery (return) phase\n * @returns New position with attack displacement applied\n *\n * @example\n * ```typescript\n * // In animation update loop (60fps)\n * const basePos = new THREE.Vector3(0, 0, 0); // Original stance position\n * \n * if (elapsedTime < result.lungeDuration) {\n * // Lunge forward phase\n * const newPosition = physics.applyAttackMovement(\n * basePos,\n * result,\n * elapsedTime,\n * false\n * );\n * } else if (elapsedTime < result.totalDuration) {\n * // Recovery return phase\n * const newPosition = physics.applyAttackMovement(\n * basePos,\n * result,\n * elapsedTime,\n * true\n * );\n * }\n * ```\n *\n * @public\n * @korean 공격이동적용\n */\n applyAttackMovement(\n basePosition: THREE.Vector3,\n result: AttackMovementResult,\n elapsedTime: number,\n isRecoveryPhase: boolean\n ): THREE.Vector3 {\n let progress: number;\n\n if (!isRecoveryPhase) {\n // Lunge forward phase\n progress = Math.min(1.0, elapsedTime / result.lungeDuration);\n\n // Smooth forward lunge curve (ease-out cubic)\n // Fast initial commitment, gradual deceleration at peak\n const easedProgress = 1 - Math.pow(1 - progress, 3);\n\n // Calculate position along forward path\n const currentDisplacement = result.displacement\n .clone()\n .multiplyScalar(easedProgress);\n\n return basePosition.clone().add(currentDisplacement);\n } else {\n // Recovery return phase\n const recoveryTime = elapsedTime - result.lungeDuration;\n progress = Math.min(1.0, recoveryTime / result.recoveryDuration);\n\n // Smooth return curve (ease-in cubic)\n // Gradual start, faster finish back to stance\n const easedProgress = Math.pow(progress, 3);\n\n // Calculate return position (from peak back to origin)\n const returnDisplacement = result.displacement\n .clone()\n .multiplyScalar(1.0 - easedProgress);\n\n return basePosition.clone().add(returnDisplacement);\n }\n }\n\n /**\n * Checks if attacker is currently in lunge phase.\n *\n * **Korean**: 돌진 상태 확인 (Check Lunge State)\n *\n * @param elapsedTime - Time elapsed since attack started\n * @param lungeDuration - Total lunge phase duration\n * @returns True if in forward lunge phase\n *\n * @public\n * @korean 돌진상태확인\n */\n isInLungePhase(elapsedTime: number, lungeDuration: number): boolean {\n return elapsedTime < lungeDuration;\n }\n\n /**\n * Checks if attacker is in recovery return phase.\n *\n * **Korean**: 회복 상태 확인 (Check Recovery State)\n *\n * @param elapsedTime - Time elapsed since attack started\n * @param result - Attack movement result with timing\n * @returns True if in recovery return phase\n *\n * @public\n * @korean 회복상태확인\n */\n isInRecoveryPhase(\n elapsedTime: number,\n result: AttackMovementResult\n ): boolean {\n return (\n elapsedTime >= result.lungeDuration &&\n elapsedTime < result.totalDuration\n );\n }\n\n /**\n * Gets bilingual Korean-English name for lunge phase.\n *\n * **Korean**: 돌진 단계 이름 (Lunge Phase Name)\n *\n * @returns Korean and English phase names\n *\n * @public\n * @korean 돌진단계이름\n */\n getLungePhaseName(): { korean: string; english: string } {\n return {\n korean: \"돌진\",\n english: \"Lunge\",\n };\n }\n\n /**\n * Gets bilingual Korean-English name for recovery phase.\n *\n * **Korean**: 복귀 단계 이름 (Recovery Phase Name)\n *\n * @returns Korean and English phase names\n *\n * @public\n * @korean 복귀단계이름\n */\n getRecoveryPhaseName(): { korean: string; english: string } {\n return {\n korean: \"복귀\",\n english: \"Recovery\",\n };\n }\n}\n\nexport default AttackMovementPhysics;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AttackMovementPhysics.js","names":[],"sources":["../../../src/systems/physics/AttackMovementPhysics.ts"],"sourcesContent":["/**\n * Attack Movement Physics System for realistic forward momentum during attacks.\n *\n * **Korean**: 공격 이동 물리 시스템 (Attack Movement Physics System)\n *\n * Implements realistic forward movement physics when fighters execute attacks.\n * Kicks naturally extend the body forward, punches lunge with body weight,\n * and spinning techniques carry rotational momentum.\n *\n * ## Attack Movement Mechanics\n *\n * Forward movement distance is determined by:\n * - Animation type (kicks > punches > elbows/knees)\n * - Stance modifiers (8 trigram stances affect aggression)\n * - Animation phase timing (extension → peak → recovery)\n *\n * ## Movement Integration\n *\n * - Extension phase (frames 3-6): Forward lunge with ease-out\n * - Peak phase (frame 6): Maximum extension reached\n * - Recovery phase (frames 7-10): Return to original stance\n * - Arena bounds: Automatically clamp movement to valid zone\n *\n * ## Performance\n *\n * Optimized for 60fps with efficient vector calculations and\n * smooth easing curves for realistic attack momentum feel.\n *\n * @module systems/physics/AttackMovementPhysics\n * @category Physics System\n * @korean 공격이동물리\n */\n\nimport * as THREE from \"three\";\nimport { TrigramStance } from \"@/types/common\";\nimport { AnimationType } from \"@/systems/animation\";\n\n/**\n * Configuration for attack movement calculation.\n *\n * **Korean**: 공격 이동 설정 (Attack Movement Configuration)\n *\n * @korean 공격이동설정\n */\nexport interface AttackMovementConfig {\n /** Animation type being executed */\n readonly animationType: AnimationType;\n /** Current trigram stance */\n readonly currentStance: TrigramStance;\n /** Normalized attack direction vector (attacker → target) */\n readonly direction: THREE.Vector3;\n /** Total attack animation duration in seconds */\n readonly animationDuration: number;\n}\n\n/**\n * Result of attack movement calculation.\n *\n * **Korean**: 공격 이동 결과 (Attack Movement Result)\n *\n * Contains displacement vector and timing for attack lunge.\n *\n * @korean 공격이동결과\n */\nexport interface AttackMovementResult {\n /** Total forward displacement vector in world space */\n readonly displacement: THREE.Vector3;\n /** Duration of forward lunge phase in seconds */\n readonly lungeDuration: number;\n /** Duration of recovery return phase in seconds */\n readonly recoveryDuration: number;\n /** Total movement cycle duration in seconds */\n readonly totalDuration: number;\n}\n\n/**\n * Attack Movement Physics Engine.\n *\n * **Korean**: 공격 이동 물리 엔진\n *\n * Calculates realistic forward movement during attack animations\n * based on technique type, stance modifiers, and animation timing.\n * Provides smooth lunge and recovery phases for authentic martial arts feel.\n *\n * @example\n * ```typescript\n * const physics = new AttackMovementPhysics();\n *\n * // Calculate movement for roundhouse kick\n * const config: AttackMovementConfig = {\n * animationType: AnimationType.ROUNDHOUSE_KICK,\n * currentStance: TrigramStance.LI, // Fire stance (aggressive)\n * direction: new THREE.Vector3(1, 0, 0).normalize(),\n * animationDuration: 0.48, // 480ms kick animation\n * };\n *\n * const result = physics.calculateAttackMovement(config);\n * // Result: 1.0m base * 1.3 (Fire bonus) = ~1.3m forward lunge\n * // lungeDuration: 0.24s (50% of animation)\n * // recoveryDuration: 0.24s (50% of animation)\n * ```\n *\n * @korean 공격이동물리\n */\nexport class AttackMovementPhysics {\n /**\n * Calculates attack movement displacement and timing.\n *\n * **Korean**: 공격 이동 계산 (Calculate Attack Movement)\n *\n * Determines forward lunge distance and recovery timing based on:\n * 1. Base movement from animation type\n * 2. Stance movement modifier (8 trigram effects)\n * 3. Animation phase durations (lunge vs recovery)\n *\n * @param config - Attack movement configuration\n * @returns Attack movement result with displacement and timing\n *\n * @example\n * ```typescript\n * // Front kick with Heaven stance\n * const kick = physics.calculateAttackMovement({\n * animationType: AnimationType.FRONT_KICK,\n * currentStance: TrigramStance.GEON,\n * direction: attackVector,\n * animationDuration: 0.4,\n * });\n * // Result: ~0.88m forward (0.8m * 1.1 Geon modifier)\n *\n * // Jab with Mountain stance\n * const jab = physics.calculateAttackMovement({\n * animationType: AnimationType.JAB,\n * currentStance: TrigramStance.GAN,\n * direction: attackVector,\n * animationDuration: 0.25,\n * });\n * // Result: ~0.24m forward (0.3m * 0.8 Gan modifier)\n * ```\n *\n * @korean 공격이동계산\n */\n calculateAttackMovement(\n config: AttackMovementConfig\n ): AttackMovementResult {\n // 1. Get base movement distance for animation type\n const baseDistance = this.getBaseMovementDistance(config.animationType);\n\n // 2. Apply stance movement modifier\n const stanceModifier = this.getStanceMovementModifier(config.currentStance);\n const finalDistance = baseDistance * stanceModifier;\n\n // 3. Calculate displacement vector\n const displacement = config.direction.clone().multiplyScalar(finalDistance);\n\n // 4. Calculate phase durations (lunge + recovery)\n const lungeDuration = config.animationDuration * 0.5; // First 50% = forward\n const recoveryDuration = config.animationDuration * 0.5; // Last 50% = return\n\n return {\n displacement,\n lungeDuration,\n recoveryDuration,\n totalDuration: config.animationDuration,\n };\n }\n\n /**\n * Gets base forward movement distance for animation type.\n *\n * **Korean**: 기본 이동 거리 (Base Movement Distance)\n *\n * Movement distances by technique category:\n * - Kicks: 0.8-1.2m (leg extension, longest reach)\n * - Punches: 0.3-0.5m (arm extension, body lunge)\n * - Elbows/Knees: 0.2-0.3m (close range techniques)\n * - Spinning: 0.5-0.8m (rotation carries momentum)\n *\n * @param animationType - Type of attack animation\n * @returns Base movement distance in meters\n *\n * @private\n * @korean 기본이동거리\n */\n private getBaseMovementDistance(animationType: AnimationType): number {\n // Kicks - highest forward movement (leg extension)\n if (\n animationType === AnimationType.ROUNDHOUSE_KICK ||\n animationType === AnimationType.SIDE_KICK ||\n animationType === AnimationType.BACK_KICK\n ) {\n return 1.0; // 1.0m forward lunge\n }\n\n if (\n animationType === AnimationType.FRONT_KICK ||\n animationType === AnimationType.PUSH_KICK\n ) {\n return 0.8; // 0.8m forward lunge\n }\n\n if (\n animationType === AnimationType.AXE_KICK ||\n animationType === AnimationType.CRESCENT_KICK ||\n animationType === AnimationType.LOW_KICK\n ) {\n return 0.9; // 0.9m forward lunge\n }\n\n // Spinning kicks - momentum carries body forward\n if (\n animationType === AnimationType.SPINNING_HOOK ||\n animationType === AnimationType.SPINNING_HEEL_KICK ||\n animationType === AnimationType.TORNADO_KICK\n ) {\n return 0.8; // 0.8m with rotation\n }\n\n // Jumping/flying kicks - aerial momentum\n if (\n animationType === AnimationType.FLYING_KICK ||\n animationType === AnimationType.JUMPING_KICK\n ) {\n return 1.2; // 1.2m maximum extension\n }\n\n // Punches - moderate forward movement (arm + body lunge)\n if (\n animationType === AnimationType.CROSS ||\n animationType === AnimationType.OVERHAND ||\n animationType === AnimationType.HOOK\n ) {\n return 0.5; // 0.5m forward lunge\n }\n\n if (\n animationType === AnimationType.JAB ||\n animationType === AnimationType.BACKFIST\n ) {\n return 0.3; // 0.3m forward lunge\n }\n\n if (\n animationType === AnimationType.UPPERCUT ||\n animationType === AnimationType.HAMMER_FIST ||\n animationType === AnimationType.PALM_STRIKE\n ) {\n return 0.4; // 0.4m forward lunge\n }\n\n // Elbow/Knee - minimal movement (close range)\n if (\n animationType === AnimationType.ELBOW_STRIKE ||\n animationType === AnimationType.KNEE_STRIKE ||\n animationType === AnimationType.KNEE_KICK ||\n animationType === AnimationType.ELBOW_UPPERCUT ||\n animationType === AnimationType.FLYING_KNEE ||\n animationType === AnimationType.CLINCH_KNEE ||\n animationType === AnimationType.SPINNING_ELBOW ||\n animationType === AnimationType.TEMPLE_ELBOW ||\n animationType === AnimationType.SPINNING_BACK_ELBOW ||\n animationType === AnimationType.SPINAL_ELBOW ||\n animationType === AnimationType.BRACHIAL_ELBOW ||\n animationType === AnimationType.KIDNEY_KNEE ||\n animationType === AnimationType.FEMORAL_KNEE\n ) {\n return 0.2; // 0.2m forward lunge\n }\n\n // Specialized jab variants - similar to jab (quick extension)\n if (\n animationType === AnimationType.SPEAR_HAND_STRIKE ||\n animationType === AnimationType.NERVE_STRIKE ||\n animationType === AnimationType.PRESSURE_POINT_STRIKE ||\n animationType === AnimationType.LIGHTNING_STRIKE ||\n animationType === AnimationType.RAPID_BARRAGE ||\n animationType === AnimationType.RHYTHMIC_STRIKES ||\n animationType === AnimationType.NERVE_PARALYSIS ||\n animationType === AnimationType.THROAT_STRIKE ||\n animationType === AnimationType.EYE_GOUGE\n ) {\n return 0.3; // 0.3m forward lunge (jab-like)\n }\n\n // Specialized cross variants - similar to cross (body weight transfer)\n if (\n animationType === AnimationType.HEAVEN_STRIKE ||\n animationType === AnimationType.FLOWING_CROSS\n ) {\n return 0.5; // 0.5m forward lunge (cross-like)\n }\n\n // Specialized palm strikes - similar to palm strike\n if (\n animationType === AnimationType.SOLAR_PLEXUS_STRIKE ||\n animationType === AnimationType.FLOWING_PUSH ||\n animationType === AnimationType.LIVER_DISRUPTION ||\n animationType === AnimationType.EAR_STRIKE\n ) {\n return 0.4; // 0.4m forward lunge (palm-like)\n }\n\n // Grappling - minimal forward movement (rotation/off-balancing in place)\n if (\n animationType === AnimationType.THROW ||\n animationType === AnimationType.JOINT_LOCK ||\n animationType === AnimationType.TAKEDOWN ||\n animationType === AnimationType.SWEEP ||\n animationType === AnimationType.CLINCH ||\n animationType === AnimationType.GRAPPLE ||\n animationType === AnimationType.SLAM ||\n animationType === AnimationType.WRIST_LOCK ||\n animationType === AnimationType.ARM_BAR ||\n animationType === AnimationType.SHOULDER_LOCK ||\n animationType === AnimationType.HIP_THROW ||\n animationType === AnimationType.LEG_REAP ||\n animationType === AnimationType.SMALL_CIRCLE_LOCK ||\n animationType === AnimationType.FINGER_LOCK ||\n animationType === AnimationType.ELBOW_LOCK ||\n animationType === AnimationType.SHOULDER_MANIPULATION ||\n animationType === AnimationType.MOUNTAIN_LOCK ||\n animationType === AnimationType.EARTH_EMBRACE ||\n animationType === AnimationType.CAROTID_CHOKE\n ) {\n return 0.05; // 0.05m forward movement for grappling entries\n }\n\n // Default - conservative minimal movement for any unmapped types\n // Additional AnimationType values can be grouped with the closest category above\n // to fine-tune their forward displacement without changing overall behavior\n return 0.2;\n }\n\n /**\n * Gets stance movement modifier for attack lunge.\n *\n * **Korean**: 자세 이동 배율 (Stance Movement Modifier)\n *\n * Trigram stance movement modifiers based on combat philosophy:\n * - ☰ 건 (Geon/Heaven): +30% movement (aggressive, drives forward with pure yang)\n * - ☳ 진 (Jin/Thunder): +20% movement (explosive power, shocking force)\n * - ☴ 손 (Son/Wind): +15% movement (continuous flow, mobile)\n * - ☲ 리 (Li/Fire): +10% movement (precision strikes, controlled aggression)\n * - ☱ 태 (Tae/Lake): 0% (neutral, fluid and adaptive)\n * - ☵ 감 (Gam/Water): 0% (neutral, flowing and flexible)\n * - ☷ 곤 (Gon/Earth): -10% movement (grounded, stable techniques)\n * - ☶ 간 (Gan/Mountain): -20% movement (defensive mastery, minimal advance)\n *\n * @param stance - Current trigram stance\n * @returns Movement multiplier (0.8 to 1.3)\n *\n * @private\n * @korean 자세이동배율\n */\n private getStanceMovementModifier(stance: TrigramStance): number {\n const modifiers: Record<TrigramStance, number> = {\n [TrigramStance.GEON]: 1.3, // Heaven: +30% aggressive forward pressure (pure yang drives forward)\n [TrigramStance.JIN]: 1.2, // Thunder: +20% explosive movement\n [TrigramStance.SON]: 1.15, // Wind: +15% flowing movement\n [TrigramStance.LI]: 1.1, // Fire: +10% precision strikes with controlled forward movement\n [TrigramStance.TAE]: 1.0, // Lake: neutral movement\n [TrigramStance.GAM]: 1.0, // Water: neutral movement\n [TrigramStance.GON]: 0.9, // Earth: -10% grounded movement\n [TrigramStance.GAN]: 0.8, // Mountain: -20% defensive movement\n };\n return modifiers[stance];\n }\n\n /**\n * Applies attack movement force to attacker position over time.\n *\n * **Korean**: 공격 이동 적용 (Apply Attack Movement)\n *\n * Uses smooth ease-out cubic curve for realistic lunge feel:\n * - Fast initial forward movement (attack commitment)\n * - Gradual deceleration at peak extension\n * - Smooth return during recovery phase\n *\n * @param basePosition - Original stance position (does not change during attack)\n * @param result - Attack movement result with displacement\n * @param elapsedTime - Time elapsed since attack started\n * @param isRecoveryPhase - Whether in recovery (return) phase\n * @returns New position with attack displacement applied\n *\n * @example\n * ```typescript\n * // In animation update loop (60fps)\n * const basePos = new THREE.Vector3(0, 0, 0); // Original stance position\n * \n * if (elapsedTime < result.lungeDuration) {\n * // Lunge forward phase\n * const newPosition = physics.applyAttackMovement(\n * basePos,\n * result,\n * elapsedTime,\n * false\n * );\n * } else if (elapsedTime < result.totalDuration) {\n * // Recovery return phase\n * const newPosition = physics.applyAttackMovement(\n * basePos,\n * result,\n * elapsedTime,\n * true\n * );\n * }\n * ```\n *\n * @korean 공격이동적용\n */\n applyAttackMovement(\n basePosition: THREE.Vector3,\n result: AttackMovementResult,\n elapsedTime: number,\n isRecoveryPhase: boolean\n ): THREE.Vector3 {\n let progress: number;\n\n if (!isRecoveryPhase) {\n // Lunge forward phase\n progress = Math.min(1.0, elapsedTime / result.lungeDuration);\n\n // Smooth forward lunge curve (ease-out cubic)\n // Fast initial commitment, gradual deceleration at peak\n const easedProgress = 1 - Math.pow(1 - progress, 3);\n\n // Calculate position along forward path\n const currentDisplacement = result.displacement\n .clone()\n .multiplyScalar(easedProgress);\n\n return basePosition.clone().add(currentDisplacement);\n } else {\n // Recovery return phase\n const recoveryTime = elapsedTime - result.lungeDuration;\n progress = Math.min(1.0, recoveryTime / result.recoveryDuration);\n\n // Smooth return curve (ease-in cubic)\n // Gradual start, faster finish back to stance\n const easedProgress = Math.pow(progress, 3);\n\n // Calculate return position (from peak back to origin)\n const returnDisplacement = result.displacement\n .clone()\n .multiplyScalar(1.0 - easedProgress);\n\n return basePosition.clone().add(returnDisplacement);\n }\n }\n\n /**\n * Checks if attacker is currently in lunge phase.\n *\n * **Korean**: 돌진 상태 확인 (Check Lunge State)\n *\n * @param elapsedTime - Time elapsed since attack started\n * @param lungeDuration - Total lunge phase duration\n * @returns True if in forward lunge phase\n *\n * @korean 돌진상태확인\n */\n isInLungePhase(elapsedTime: number, lungeDuration: number): boolean {\n return elapsedTime < lungeDuration;\n }\n\n /**\n * Checks if attacker is in recovery return phase.\n *\n * **Korean**: 회복 상태 확인 (Check Recovery State)\n *\n * @param elapsedTime - Time elapsed since attack started\n * @param result - Attack movement result with timing\n * @returns True if in recovery return phase\n *\n * @korean 회복상태확인\n */\n isInRecoveryPhase(\n elapsedTime: number,\n result: AttackMovementResult\n ): boolean {\n return (\n elapsedTime >= result.lungeDuration &&\n elapsedTime < result.totalDuration\n );\n }\n\n /**\n * Gets bilingual Korean-English name for lunge phase.\n *\n * **Korean**: 돌진 단계 이름 (Lunge Phase Name)\n *\n * @returns Korean and English phase names\n *\n * @korean 돌진단계이름\n */\n getLungePhaseName(): { korean: string; english: string } {\n return {\n korean: \"돌진\",\n english: \"Lunge\",\n };\n }\n\n /**\n * Gets bilingual Korean-English name for recovery phase.\n *\n * **Korean**: 복귀 단계 이름 (Recovery Phase Name)\n *\n * @returns Korean and English phase names\n *\n * @korean 복귀단계이름\n */\n getRecoveryPhaseName(): { korean: string; english: string } {\n return {\n korean: \"복귀\",\n english: \"Recovery\",\n };\n }\n}\n\nexport default AttackMovementPhysics;\n"],"mappings":"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"}
|
|
@@ -57,7 +57,6 @@ import type { VitalPoint } from "../vitalpoint/types";
|
|
|
57
57
|
* Provides efficient collision detection for combat using bounding boxes and raycasting.
|
|
58
58
|
* Optimized for 60fps performance with multiple simultaneous collision checks.
|
|
59
59
|
*
|
|
60
|
-
* @public
|
|
61
60
|
* @category Combat Systems
|
|
62
61
|
* @korean 충돌감지엔진
|
|
63
62
|
*/
|
|
@@ -82,7 +81,6 @@ export declare class CollisionDetection {
|
|
|
82
81
|
* Disposes of cached geometries and releases memory to prevent leaks.
|
|
83
82
|
* Should be called when the CollisionDetection instance is no longer needed.
|
|
84
83
|
*
|
|
85
|
-
* @public
|
|
86
84
|
* @korean 자원정리
|
|
87
85
|
*/
|
|
88
86
|
dispose(): void;
|
|
@@ -115,7 +113,6 @@ export declare class CollisionDetection {
|
|
|
115
113
|
* );
|
|
116
114
|
* ```
|
|
117
115
|
*
|
|
118
|
-
* @public
|
|
119
116
|
* @korean 공격타격확인
|
|
120
117
|
*/
|
|
121
118
|
checkAttackHit(attackerPosition: Position3D, defenderPosition: Position3D, technique: {
|
|
@@ -295,7 +292,6 @@ export declare class CollisionDetection {
|
|
|
295
292
|
* @param region - Anatomical region
|
|
296
293
|
* @returns Bounding box or undefined if not found
|
|
297
294
|
*
|
|
298
|
-
* @public
|
|
299
295
|
* @korean 경계상자조회
|
|
300
296
|
*/
|
|
301
297
|
getBoundingBox(region: AnatomicalRegionPhysics): BoundingBox | undefined;
|
|
@@ -304,7 +300,6 @@ export declare class CollisionDetection {
|
|
|
304
300
|
*
|
|
305
301
|
* @returns Map of all bounding boxes by region
|
|
306
302
|
*
|
|
307
|
-
* @public
|
|
308
303
|
* @korean 모든경계상자조회
|
|
309
304
|
*/
|
|
310
305
|
getAllBoundingBoxes(): ReadonlyMap<AnatomicalRegionPhysics, BoundingBox>;
|
|
@@ -314,7 +309,6 @@ export declare class CollisionDetection {
|
|
|
314
309
|
* @param region - Anatomical region
|
|
315
310
|
* @returns Array of vital points in that region
|
|
316
311
|
*
|
|
317
|
-
* @public
|
|
318
312
|
* @korean 영역별급소조회
|
|
319
313
|
*/
|
|
320
314
|
getVitalPointsInRegion(region: AnatomicalRegionPhysics): readonly VitalPoint[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollisionDetection.d.ts","sourceRoot":"","sources":["../../../src/systems/physics/CollisionDetection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,UAAU,EAGX,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD
|
|
1
|
+
{"version":3,"file":"CollisionDetection.d.ts","sourceRoot":"","sources":["../../../src/systems/physics/CollisionDetection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,UAAU,EAGX,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD;;;;;;;;;;GAUG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAClB;IACZ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,mBAAmB,CACf;IAGZ,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgD;IAG9E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD;;;;;OAKG;;IAQH;;;;;;;;;OASG;IACI,OAAO,IAAI,IAAI;IAQtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,cAAc,CACZ,gBAAgB,EAAE,UAAU,EAC5B,gBAAgB,EAAE,UAAU,EAE5B,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAChD,cAAc,EAAE,aAAa,EAC7B,YAAY,EAAE,uBAAuB,GACpC,eAAe;IA4FlB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,kBAAkB;IAwD1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IA8D/B;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,2BAA2B;IAmDnC;;;;;;;OAOG;IACH,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,GAAG,SAAS;IAIxE;;;;;;OAMG;IACH,mBAAmB,IAAI,WAAW,CAAC,uBAAuB,EAAE,WAAW,CAAC;IAIxE;;;;;;;OAOG;IACH,sBAAsB,CACpB,MAAM,EAAE,uBAAuB,GAC9B,SAAS,UAAU,EAAE;CAGzB;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -60,7 +60,6 @@ import * as THREE from "three";
|
|
|
60
60
|
* Provides efficient collision detection for combat using bounding boxes and raycasting.
|
|
61
61
|
* Optimized for 60fps performance with multiple simultaneous collision checks.
|
|
62
62
|
*
|
|
63
|
-
* @public
|
|
64
63
|
* @category Combat Systems
|
|
65
64
|
* @korean 충돌감지엔진
|
|
66
65
|
*/
|
|
@@ -90,7 +89,6 @@ var CollisionDetection = class {
|
|
|
90
89
|
* Disposes of cached geometries and releases memory to prevent leaks.
|
|
91
90
|
* Should be called when the CollisionDetection instance is no longer needed.
|
|
92
91
|
*
|
|
93
|
-
* @public
|
|
94
92
|
* @korean 자원정리
|
|
95
93
|
*/
|
|
96
94
|
dispose() {
|
|
@@ -126,7 +124,6 @@ var CollisionDetection = class {
|
|
|
126
124
|
* );
|
|
127
125
|
* ```
|
|
128
126
|
*
|
|
129
|
-
* @public
|
|
130
127
|
* @korean 공격타격확인
|
|
131
128
|
*/
|
|
132
129
|
checkAttackHit(attackerPosition, defenderPosition, technique, attackerStance, targetRegion) {
|
|
@@ -507,7 +504,6 @@ var CollisionDetection = class {
|
|
|
507
504
|
* @param region - Anatomical region
|
|
508
505
|
* @returns Bounding box or undefined if not found
|
|
509
506
|
*
|
|
510
|
-
* @public
|
|
511
507
|
* @korean 경계상자조회
|
|
512
508
|
*/
|
|
513
509
|
getBoundingBox(region) {
|
|
@@ -518,7 +514,6 @@ var CollisionDetection = class {
|
|
|
518
514
|
*
|
|
519
515
|
* @returns Map of all bounding boxes by region
|
|
520
516
|
*
|
|
521
|
-
* @public
|
|
522
517
|
* @korean 모든경계상자조회
|
|
523
518
|
*/
|
|
524
519
|
getAllBoundingBoxes() {
|
|
@@ -530,7 +525,6 @@ var CollisionDetection = class {
|
|
|
530
525
|
* @param region - Anatomical region
|
|
531
526
|
* @returns Array of vital points in that region
|
|
532
527
|
*
|
|
533
|
-
* @public
|
|
534
528
|
* @korean 영역별급소조회
|
|
535
529
|
*/
|
|
536
530
|
getVitalPointsInRegion(region) {
|