blacktrigram 0.7.44 → 0.7.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyPartDamageIntegration.d.ts","sourceRoot":"","sources":["../../../src/systems/bodypart/BodyPartDamageIntegration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAY,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAChD;AAED
|
|
1
|
+
{"version":3,"file":"BodyPartDamageIntegration.d.ts","sourceRoot":"","sources":["../../../src/systems/bodypart/BodyPartDamageIntegration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAY,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAChD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,UAAU,GACrB,UAAU,CAoGZ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,oBAAoB,EACnE,MAAM,EAAE,CAAC,EACT,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,CAAC,CA0BH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,CAAC,SAAS,oBAAoB,EAC9B,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,CAG3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,qCAiBpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAMT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iCAAiC,CAC/C,CAAC,SAAS,oBAAoB,EAC9B,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAE,MAAY,GAAG,CAAC,CAiB9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,oBAAoB,EACxE,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,MAAM,GACtB,CAAC,CA+CH"}
|
|
@@ -25,7 +25,6 @@ import { bodyPartHealthSystem } from "./BodyPartHealthSystem.js";
|
|
|
25
25
|
* @param vitalPoint - Vital point that was struck
|
|
26
26
|
* @returns Corresponding body region
|
|
27
27
|
*
|
|
28
|
-
* @public
|
|
29
28
|
*/
|
|
30
29
|
function getBodyRegionFromVitalPoint(vitalPoint) {
|
|
31
30
|
const pointId = vitalPoint.id.toLowerCase();
|
|
@@ -56,7 +55,6 @@ function getBodyRegionFromVitalPoint(vitalPoint) {
|
|
|
56
55
|
* @param bodyRegion - Body region that was hit
|
|
57
56
|
* @returns Updated player state with body part damage applied
|
|
58
57
|
*
|
|
59
|
-
* @public
|
|
60
58
|
*/
|
|
61
59
|
function applyDamageToBodyParts(player, totalDamage, bodyRegion) {
|
|
62
60
|
const bodyPartHealth = player.bodyPartHealth ?? bodyPartHealthSystem.createDefaultBodyPartHealth();
|
|
@@ -83,7 +81,6 @@ function applyDamageToBodyParts(player, totalDamage, bodyRegion) {
|
|
|
83
81
|
* @param vitalPoint - Vital point that was struck
|
|
84
82
|
* @returns Updated player state with vital point damage applied
|
|
85
83
|
*
|
|
86
|
-
* @public
|
|
87
84
|
*/
|
|
88
85
|
function applyVitalPointDamageToBodyParts(player, totalDamage, vitalPoint) {
|
|
89
86
|
return applyDamageToBodyParts(player, totalDamage, getBodyRegionFromVitalPoint(vitalPoint));
|
|
@@ -112,7 +109,6 @@ function applyVitalPointDamageToBodyParts(player, totalDamage, vitalPoint) {
|
|
|
112
109
|
* const actualSpeed = baseSpeed * effects.movementSpeedModifier;
|
|
113
110
|
* ```
|
|
114
111
|
*
|
|
115
|
-
* @public
|
|
116
112
|
*/
|
|
117
113
|
function getBodyPartCombatEffects(player) {
|
|
118
114
|
if (!player.bodyPartHealth) return {
|
|
@@ -139,7 +135,6 @@ function getBodyPartCombatEffects(player) {
|
|
|
139
135
|
* @param player - Player state to check
|
|
140
136
|
* @returns Whether player is incapacitated
|
|
141
137
|
*
|
|
142
|
-
* @public
|
|
143
138
|
*/
|
|
144
139
|
function isPlayerIncapacitatedByBodyDamage(player) {
|
|
145
140
|
if (!player.bodyPartHealth) return false;
|
|
@@ -157,7 +152,6 @@ function isPlayerIncapacitatedByBodyDamage(player) {
|
|
|
157
152
|
* @param maxHealthPerPart - Optional custom max health per part
|
|
158
153
|
* @returns Player state with body part health initialized
|
|
159
154
|
*
|
|
160
|
-
* @public
|
|
161
155
|
*/
|
|
162
156
|
function initializeBodyPartHealthForPlayer(player, maxHealthPerPart = 100) {
|
|
163
157
|
if (player.bodyPartHealth && player.bodyPartMaxHealth) return player;
|
|
@@ -182,7 +176,6 @@ function initializeBodyPartHealthForPlayer(player, maxHealthPerPart = 100) {
|
|
|
182
176
|
* @param totalHealAmount - Total healing to distribute
|
|
183
177
|
* @returns Updated player state with healing applied
|
|
184
178
|
*
|
|
185
|
-
* @public
|
|
186
179
|
*/
|
|
187
180
|
function healBodyPartsProportionally(player, totalHealAmount) {
|
|
188
181
|
if (!player.bodyPartHealth || !player.bodyPartMaxHealth) return player;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyPartDamageIntegration.js","names":[],"sources":["../../../src/systems/bodypart/BodyPartDamageIntegration.ts"],"sourcesContent":["/**\n * Body Part Damage Integration for Combat System\n *\n * **Korean**: 신체부위 피해 통합\n *\n * Extends the damage calculation system to apply damage to specific body parts\n * based on vital point hits and attack locations. Integrates with the existing\n * VitalPointSystem and DamageCalculator.\n *\n * @module systems/bodypart/BodyPartDamageIntegration\n * @category Body Part System\n * @korean 신체부위피해통합\n */\n\nimport { BodyRegion } from \"@/types\";\nimport type { VitalPoint } from \"../vitalpoint/types\";\nimport { bodyPartHealthSystem } from \"./BodyPartHealthSystem\";\nimport { BodyPart, BodyPartHealth, BodyPartMaxHealth } from \"./types\";\n\n/**\n * Minimal player view needed for body part damage operations.\n */\nexport interface BodyPartDamageTarget {\n readonly health: number;\n readonly bodyPartHealth?: BodyPartHealth;\n readonly bodyPartMaxHealth?: BodyPartMaxHealth;\n}\n\n/**\n * Map vital point to its corresponding body region.\n *\n * **Korean**: 급소에서 신체 영역 매핑\n *\n * Analyzes a vital point's location and category to determine which\n * BodyRegion it belongs to, enabling proper damage distribution.\n *\n * @param vitalPoint - Vital point that was struck\n * @returns Corresponding body region\n *\n * @public\n */\nexport function getBodyRegionFromVitalPoint(\n vitalPoint: VitalPoint\n): BodyRegion {\n const pointId = vitalPoint.id.toLowerCase();\n\n // Head region vital points\n if (\n pointId.includes(\"head_\") ||\n pointId.includes(\"temple\") ||\n pointId.includes(\"jaw\") ||\n pointId.includes(\"crown\") ||\n pointId.includes(\"forehead\") ||\n pointId.includes(\"eye\") ||\n pointId.includes(\"nose\") ||\n pointId.includes(\"ear\") ||\n pointId.includes(\"skull\")\n ) {\n return BodyRegion.HEAD;\n }\n\n // Neck region vital points\n if (\n pointId.includes(\"neck\") ||\n pointId.includes(\"throat\") ||\n pointId.includes(\"carotid\") ||\n pointId.includes(\"cervical\")\n ) {\n return BodyRegion.NECK;\n }\n\n // Torso region vital points\n if (\n pointId.includes(\"torso_\") ||\n pointId.includes(\"chest\") ||\n pointId.includes(\"solar_plexus\") ||\n pointId.includes(\"ribs\") ||\n pointId.includes(\"sternum\") ||\n pointId.includes(\"heart\") ||\n pointId.includes(\"lung\") ||\n pointId.includes(\"abdomen\")\n ) {\n return BodyRegion.TORSO;\n }\n\n // Core region vital points\n if (\n pointId.includes(\"core\") ||\n pointId.includes(\"dantian\") ||\n pointId.includes(\"kidney\") ||\n pointId.includes(\"liver\") ||\n pointId.includes(\"spleen\") ||\n pointId.includes(\"bladder\")\n ) {\n return BodyRegion.CORE;\n }\n\n // Left arm vital points\n if (\n pointId.includes(\"arm_left\") ||\n pointId.includes(\"left_shoulder\") ||\n pointId.includes(\"left_elbow\") ||\n pointId.includes(\"left_wrist\") ||\n pointId.includes(\"left_hand\")\n ) {\n return BodyRegion.LEFT_ARM;\n }\n\n // Right arm vital points\n if (\n pointId.includes(\"arm_right\") ||\n pointId.includes(\"right_shoulder\") ||\n pointId.includes(\"right_elbow\") ||\n pointId.includes(\"right_wrist\") ||\n pointId.includes(\"right_hand\")\n ) {\n return BodyRegion.RIGHT_ARM;\n }\n\n // Left leg vital points\n if (\n pointId.includes(\"leg_left\") ||\n pointId.includes(\"left_knee\") ||\n pointId.includes(\"left_ankle\") ||\n pointId.includes(\"left_foot\") ||\n pointId.includes(\"left_thigh\")\n ) {\n return BodyRegion.LEFT_LEG;\n }\n\n // Right leg vital points\n if (\n pointId.includes(\"leg_right\") ||\n pointId.includes(\"right_knee\") ||\n pointId.includes(\"right_ankle\") ||\n pointId.includes(\"right_foot\") ||\n pointId.includes(\"right_thigh\")\n ) {\n return BodyRegion.RIGHT_LEG;\n }\n\n // Default to torso for unmatched points\n return BodyRegion.TORSO;\n}\n\n/**\n * Apply damage to player's body parts based on hit location.\n *\n * **Korean**: 타격 위치 기반 신체부위 피해 적용\n *\n * Takes total damage and distributes it across body parts according to\n * the hit location. Updates both aggregate health and body part health.\n *\n * For combat compatibility, the aggregate health is directly reduced by\n * the damage amount (traditional behavior), while body part health is\n * updated proportionally for visualization purposes.\n *\n * @param player - Player receiving damage\n * @param totalDamage - Total damage amount\n * @param bodyRegion - Body region that was hit\n * @returns Updated player state with body part damage applied\n *\n * @public\n */\nexport function applyDamageToBodyParts<T extends BodyPartDamageTarget>(\n player: T,\n totalDamage: number,\n bodyRegion: BodyRegion\n): T {\n // If body part health not initialized, initialize it\n const bodyPartHealth =\n player.bodyPartHealth ?? bodyPartHealthSystem.createDefaultBodyPartHealth();\n const bodyPartMaxHealth =\n player.bodyPartMaxHealth ?? bodyPartHealthSystem.createDefaultMaxHealth();\n\n // Apply distributed damage to body parts for visualization\n const updatedBodyPartHealth = bodyPartHealthSystem.applyDistributedDamage(\n bodyPartHealth,\n bodyRegion,\n totalDamage,\n bodyPartMaxHealth\n );\n\n // Calculate new aggregate health directly: traditional damage reduction\n // This ensures combat damage calculations remain consistent\n const newAggregateHealth = Math.max(0, player.health - totalDamage);\n\n // Update player state with new body part health and aggregate health\n return {\n ...player,\n bodyPartHealth: updatedBodyPartHealth,\n bodyPartMaxHealth,\n health: newAggregateHealth,\n };\n}\n\n/**\n * Apply damage from a vital point hit to appropriate body parts.\n *\n * **Korean**: 급소 타격 신체부위 피해 적용\n *\n * Specialized damage application for vital point strikes. Maps the vital\n * point to its body region and applies damage with appropriate distribution.\n *\n * @param player - Player receiving damage\n * @param totalDamage - Total damage amount\n * @param vitalPoint - Vital point that was struck\n * @returns Updated player state with vital point damage applied\n *\n * @public\n */\nexport function applyVitalPointDamageToBodyParts<\n T extends BodyPartDamageTarget\n>(player: T, totalDamage: number, vitalPoint: VitalPoint): T {\n const bodyRegion = getBodyRegionFromVitalPoint(vitalPoint);\n return applyDamageToBodyParts(player, totalDamage, bodyRegion);\n}\n\n/**\n * Get combat capability modifiers from body part health.\n *\n * **Korean**: 신체부위 전투 능력 수정치 조회\n *\n * Calculates how body part damage affects combat capabilities.\n * Returns modifiers that should be applied to:\n * - Consciousness (awareness, reaction time)\n * - Stamina regeneration\n * - Attack damage output\n * - Movement speed\n * - Balance and stability\n * - Technique accuracy\n *\n * @param player - Player state to analyze\n * @returns Combat capability effect multipliers (0.0-1.0)\n *\n * @example\n * ```typescript\n * const effects = getBodyPartCombatEffects(player);\n * const actualDamage = baseDamage * effects.attackDamageModifier;\n * const actualSpeed = baseSpeed * effects.movementSpeedModifier;\n * ```\n *\n * @public\n */\nexport function getBodyPartCombatEffects(player: BodyPartDamageTarget) {\n // If no body part health, return no effects\n if (!player.bodyPartHealth) {\n return {\n consciousnessModifier: 1.0,\n staminaRegenModifier: 1.0,\n attackDamageModifier: 1.0,\n movementSpeedModifier: 1.0,\n balanceModifier: 1.0,\n techniqueAccuracyModifier: 1.0,\n };\n }\n\n return bodyPartHealthSystem.calculateBodyPartEffects(\n player.bodyPartHealth,\n player.bodyPartMaxHealth\n );\n}\n\n/**\n * Check if player is incapacitated by body part damage.\n *\n * **Korean**: 신체부위 무력화 확인\n *\n * Determines if the player can continue fighting based on body part health.\n * Player is incapacitated if:\n * - Head is at 0 HP (unconscious)\n * - Both legs are at 0 HP (cannot stand)\n * - Aggregate health is below 10%\n *\n * @param player - Player state to check\n * @returns Whether player is incapacitated\n *\n * @public\n */\nexport function isPlayerIncapacitatedByBodyDamage(\n player: BodyPartDamageTarget\n): boolean {\n if (!player.bodyPartHealth) {\n return false; // No body part system = use aggregate health only\n }\n\n return bodyPartHealthSystem.isIncapacitated(player.bodyPartHealth);\n}\n\n/**\n * Initialize body part health for a player.\n *\n * **Korean**: 플레이어 신체부위 체력 초기화\n *\n * Sets up body part health and max health for a player if not already present.\n * Uses the provided max health or defaults to 100 per part.\n *\n * @param player - Player state to initialize\n * @param maxHealthPerPart - Optional custom max health per part\n * @returns Player state with body part health initialized\n *\n * @public\n */\nexport function initializeBodyPartHealthForPlayer<\n T extends BodyPartDamageTarget\n>(player: T, maxHealthPerPart: number = 100): T {\n // Skip if already initialized\n if (player.bodyPartHealth && player.bodyPartMaxHealth) {\n return player;\n }\n\n const bodyPartHealth =\n bodyPartHealthSystem.createDefaultBodyPartHealth(maxHealthPerPart);\n const bodyPartMaxHealth =\n bodyPartHealthSystem.createDefaultMaxHealth(maxHealthPerPart);\n\n return {\n ...player,\n bodyPartHealth,\n bodyPartMaxHealth,\n health: bodyPartHealthSystem.calculateAggregateHealth(bodyPartHealth),\n };\n}\n\n/**\n * Heal body parts proportionally based on total healing amount.\n *\n * **Korean**: 신체부위 비례 치유\n *\n * Distributes healing across all damaged body parts proportionally to\n * their damage level. Most damaged parts receive more healing.\n *\n * @param player - Player state to heal\n * @param totalHealAmount - Total healing to distribute\n * @returns Updated player state with healing applied\n *\n * @public\n */\nexport function healBodyPartsProportionally<T extends BodyPartDamageTarget>(\n player: T,\n totalHealAmount: number\n): T {\n if (!player.bodyPartHealth || !player.bodyPartMaxHealth) {\n return player; // No body part system active\n }\n\n const bodyPartHealth = player.bodyPartHealth;\n const bodyPartMaxHealth = player.bodyPartMaxHealth;\n\n // Calculate total missing health across all parts\n const missingHealth = (Object.keys(bodyPartHealth) as BodyPart[]).reduce(\n (sum, part) => {\n return sum + (bodyPartMaxHealth[part] - bodyPartHealth[part]);\n },\n 0\n );\n\n // If no damage, return unchanged\n if (missingHealth <= 0) {\n return player;\n }\n\n // Heal each part proportionally to its damage\n let updatedHealth = { ...bodyPartHealth };\n\n (Object.keys(bodyPartHealth) as BodyPart[]).forEach((part) => {\n const partMissingHealth = bodyPartMaxHealth[part] - bodyPartHealth[part];\n if (partMissingHealth > 0) {\n const proportion = partMissingHealth / missingHealth;\n const healForThisPart = totalHealAmount * proportion;\n updatedHealth = bodyPartHealthSystem.healBodyPart(\n updatedHealth,\n part,\n healForThisPart,\n bodyPartMaxHealth\n );\n }\n });\n\n // Calculate new aggregate health\n const newAggregateHealth =\n bodyPartHealthSystem.calculateAggregateHealth(updatedHealth);\n\n return {\n ...player,\n bodyPartHealth: updatedHealth,\n health: newAggregateHealth,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BodyPartDamageIntegration.js","names":[],"sources":["../../../src/systems/bodypart/BodyPartDamageIntegration.ts"],"sourcesContent":["/**\n * Body Part Damage Integration for Combat System\n *\n * **Korean**: 신체부위 피해 통합\n *\n * Extends the damage calculation system to apply damage to specific body parts\n * based on vital point hits and attack locations. Integrates with the existing\n * VitalPointSystem and DamageCalculator.\n *\n * @module systems/bodypart/BodyPartDamageIntegration\n * @category Body Part System\n * @korean 신체부위피해통합\n */\n\nimport { BodyRegion } from \"@/types\";\nimport type { VitalPoint } from \"../vitalpoint/types\";\nimport { bodyPartHealthSystem } from \"./BodyPartHealthSystem\";\nimport { BodyPart, BodyPartHealth, BodyPartMaxHealth } from \"./types\";\n\n/**\n * Minimal player view needed for body part damage operations.\n */\nexport interface BodyPartDamageTarget {\n readonly health: number;\n readonly bodyPartHealth?: BodyPartHealth;\n readonly bodyPartMaxHealth?: BodyPartMaxHealth;\n}\n\n/**\n * Map vital point to its corresponding body region.\n *\n * **Korean**: 급소에서 신체 영역 매핑\n *\n * Analyzes a vital point's location and category to determine which\n * BodyRegion it belongs to, enabling proper damage distribution.\n *\n * @param vitalPoint - Vital point that was struck\n * @returns Corresponding body region\n *\n */\nexport function getBodyRegionFromVitalPoint(\n vitalPoint: VitalPoint\n): BodyRegion {\n const pointId = vitalPoint.id.toLowerCase();\n\n // Head region vital points\n if (\n pointId.includes(\"head_\") ||\n pointId.includes(\"temple\") ||\n pointId.includes(\"jaw\") ||\n pointId.includes(\"crown\") ||\n pointId.includes(\"forehead\") ||\n pointId.includes(\"eye\") ||\n pointId.includes(\"nose\") ||\n pointId.includes(\"ear\") ||\n pointId.includes(\"skull\")\n ) {\n return BodyRegion.HEAD;\n }\n\n // Neck region vital points\n if (\n pointId.includes(\"neck\") ||\n pointId.includes(\"throat\") ||\n pointId.includes(\"carotid\") ||\n pointId.includes(\"cervical\")\n ) {\n return BodyRegion.NECK;\n }\n\n // Torso region vital points\n if (\n pointId.includes(\"torso_\") ||\n pointId.includes(\"chest\") ||\n pointId.includes(\"solar_plexus\") ||\n pointId.includes(\"ribs\") ||\n pointId.includes(\"sternum\") ||\n pointId.includes(\"heart\") ||\n pointId.includes(\"lung\") ||\n pointId.includes(\"abdomen\")\n ) {\n return BodyRegion.TORSO;\n }\n\n // Core region vital points\n if (\n pointId.includes(\"core\") ||\n pointId.includes(\"dantian\") ||\n pointId.includes(\"kidney\") ||\n pointId.includes(\"liver\") ||\n pointId.includes(\"spleen\") ||\n pointId.includes(\"bladder\")\n ) {\n return BodyRegion.CORE;\n }\n\n // Left arm vital points\n if (\n pointId.includes(\"arm_left\") ||\n pointId.includes(\"left_shoulder\") ||\n pointId.includes(\"left_elbow\") ||\n pointId.includes(\"left_wrist\") ||\n pointId.includes(\"left_hand\")\n ) {\n return BodyRegion.LEFT_ARM;\n }\n\n // Right arm vital points\n if (\n pointId.includes(\"arm_right\") ||\n pointId.includes(\"right_shoulder\") ||\n pointId.includes(\"right_elbow\") ||\n pointId.includes(\"right_wrist\") ||\n pointId.includes(\"right_hand\")\n ) {\n return BodyRegion.RIGHT_ARM;\n }\n\n // Left leg vital points\n if (\n pointId.includes(\"leg_left\") ||\n pointId.includes(\"left_knee\") ||\n pointId.includes(\"left_ankle\") ||\n pointId.includes(\"left_foot\") ||\n pointId.includes(\"left_thigh\")\n ) {\n return BodyRegion.LEFT_LEG;\n }\n\n // Right leg vital points\n if (\n pointId.includes(\"leg_right\") ||\n pointId.includes(\"right_knee\") ||\n pointId.includes(\"right_ankle\") ||\n pointId.includes(\"right_foot\") ||\n pointId.includes(\"right_thigh\")\n ) {\n return BodyRegion.RIGHT_LEG;\n }\n\n // Default to torso for unmatched points\n return BodyRegion.TORSO;\n}\n\n/**\n * Apply damage to player's body parts based on hit location.\n *\n * **Korean**: 타격 위치 기반 신체부위 피해 적용\n *\n * Takes total damage and distributes it across body parts according to\n * the hit location. Updates both aggregate health and body part health.\n *\n * For combat compatibility, the aggregate health is directly reduced by\n * the damage amount (traditional behavior), while body part health is\n * updated proportionally for visualization purposes.\n *\n * @param player - Player receiving damage\n * @param totalDamage - Total damage amount\n * @param bodyRegion - Body region that was hit\n * @returns Updated player state with body part damage applied\n *\n */\nexport function applyDamageToBodyParts<T extends BodyPartDamageTarget>(\n player: T,\n totalDamage: number,\n bodyRegion: BodyRegion\n): T {\n // If body part health not initialized, initialize it\n const bodyPartHealth =\n player.bodyPartHealth ?? bodyPartHealthSystem.createDefaultBodyPartHealth();\n const bodyPartMaxHealth =\n player.bodyPartMaxHealth ?? bodyPartHealthSystem.createDefaultMaxHealth();\n\n // Apply distributed damage to body parts for visualization\n const updatedBodyPartHealth = bodyPartHealthSystem.applyDistributedDamage(\n bodyPartHealth,\n bodyRegion,\n totalDamage,\n bodyPartMaxHealth\n );\n\n // Calculate new aggregate health directly: traditional damage reduction\n // This ensures combat damage calculations remain consistent\n const newAggregateHealth = Math.max(0, player.health - totalDamage);\n\n // Update player state with new body part health and aggregate health\n return {\n ...player,\n bodyPartHealth: updatedBodyPartHealth,\n bodyPartMaxHealth,\n health: newAggregateHealth,\n };\n}\n\n/**\n * Apply damage from a vital point hit to appropriate body parts.\n *\n * **Korean**: 급소 타격 신체부위 피해 적용\n *\n * Specialized damage application for vital point strikes. Maps the vital\n * point to its body region and applies damage with appropriate distribution.\n *\n * @param player - Player receiving damage\n * @param totalDamage - Total damage amount\n * @param vitalPoint - Vital point that was struck\n * @returns Updated player state with vital point damage applied\n *\n */\nexport function applyVitalPointDamageToBodyParts<\n T extends BodyPartDamageTarget\n>(player: T, totalDamage: number, vitalPoint: VitalPoint): T {\n const bodyRegion = getBodyRegionFromVitalPoint(vitalPoint);\n return applyDamageToBodyParts(player, totalDamage, bodyRegion);\n}\n\n/**\n * Get combat capability modifiers from body part health.\n *\n * **Korean**: 신체부위 전투 능력 수정치 조회\n *\n * Calculates how body part damage affects combat capabilities.\n * Returns modifiers that should be applied to:\n * - Consciousness (awareness, reaction time)\n * - Stamina regeneration\n * - Attack damage output\n * - Movement speed\n * - Balance and stability\n * - Technique accuracy\n *\n * @param player - Player state to analyze\n * @returns Combat capability effect multipliers (0.0-1.0)\n *\n * @example\n * ```typescript\n * const effects = getBodyPartCombatEffects(player);\n * const actualDamage = baseDamage * effects.attackDamageModifier;\n * const actualSpeed = baseSpeed * effects.movementSpeedModifier;\n * ```\n *\n */\nexport function getBodyPartCombatEffects(player: BodyPartDamageTarget) {\n // If no body part health, return no effects\n if (!player.bodyPartHealth) {\n return {\n consciousnessModifier: 1.0,\n staminaRegenModifier: 1.0,\n attackDamageModifier: 1.0,\n movementSpeedModifier: 1.0,\n balanceModifier: 1.0,\n techniqueAccuracyModifier: 1.0,\n };\n }\n\n return bodyPartHealthSystem.calculateBodyPartEffects(\n player.bodyPartHealth,\n player.bodyPartMaxHealth\n );\n}\n\n/**\n * Check if player is incapacitated by body part damage.\n *\n * **Korean**: 신체부위 무력화 확인\n *\n * Determines if the player can continue fighting based on body part health.\n * Player is incapacitated if:\n * - Head is at 0 HP (unconscious)\n * - Both legs are at 0 HP (cannot stand)\n * - Aggregate health is below 10%\n *\n * @param player - Player state to check\n * @returns Whether player is incapacitated\n *\n */\nexport function isPlayerIncapacitatedByBodyDamage(\n player: BodyPartDamageTarget\n): boolean {\n if (!player.bodyPartHealth) {\n return false; // No body part system = use aggregate health only\n }\n\n return bodyPartHealthSystem.isIncapacitated(player.bodyPartHealth);\n}\n\n/**\n * Initialize body part health for a player.\n *\n * **Korean**: 플레이어 신체부위 체력 초기화\n *\n * Sets up body part health and max health for a player if not already present.\n * Uses the provided max health or defaults to 100 per part.\n *\n * @param player - Player state to initialize\n * @param maxHealthPerPart - Optional custom max health per part\n * @returns Player state with body part health initialized\n *\n */\nexport function initializeBodyPartHealthForPlayer<\n T extends BodyPartDamageTarget\n>(player: T, maxHealthPerPart: number = 100): T {\n // Skip if already initialized\n if (player.bodyPartHealth && player.bodyPartMaxHealth) {\n return player;\n }\n\n const bodyPartHealth =\n bodyPartHealthSystem.createDefaultBodyPartHealth(maxHealthPerPart);\n const bodyPartMaxHealth =\n bodyPartHealthSystem.createDefaultMaxHealth(maxHealthPerPart);\n\n return {\n ...player,\n bodyPartHealth,\n bodyPartMaxHealth,\n health: bodyPartHealthSystem.calculateAggregateHealth(bodyPartHealth),\n };\n}\n\n/**\n * Heal body parts proportionally based on total healing amount.\n *\n * **Korean**: 신체부위 비례 치유\n *\n * Distributes healing across all damaged body parts proportionally to\n * their damage level. Most damaged parts receive more healing.\n *\n * @param player - Player state to heal\n * @param totalHealAmount - Total healing to distribute\n * @returns Updated player state with healing applied\n *\n */\nexport function healBodyPartsProportionally<T extends BodyPartDamageTarget>(\n player: T,\n totalHealAmount: number\n): T {\n if (!player.bodyPartHealth || !player.bodyPartMaxHealth) {\n return player; // No body part system active\n }\n\n const bodyPartHealth = player.bodyPartHealth;\n const bodyPartMaxHealth = player.bodyPartMaxHealth;\n\n // Calculate total missing health across all parts\n const missingHealth = (Object.keys(bodyPartHealth) as BodyPart[]).reduce(\n (sum, part) => {\n return sum + (bodyPartMaxHealth[part] - bodyPartHealth[part]);\n },\n 0\n );\n\n // If no damage, return unchanged\n if (missingHealth <= 0) {\n return player;\n }\n\n // Heal each part proportionally to its damage\n let updatedHealth = { ...bodyPartHealth };\n\n (Object.keys(bodyPartHealth) as BodyPart[]).forEach((part) => {\n const partMissingHealth = bodyPartMaxHealth[part] - bodyPartHealth[part];\n if (partMissingHealth > 0) {\n const proportion = partMissingHealth / missingHealth;\n const healForThisPart = totalHealAmount * proportion;\n updatedHealth = bodyPartHealthSystem.healBodyPart(\n updatedHealth,\n part,\n healForThisPart,\n bodyPartMaxHealth\n );\n }\n });\n\n // Calculate new aggregate health\n const newAggregateHealth =\n bodyPartHealthSystem.calculateAggregateHealth(updatedHealth);\n\n return {\n ...player,\n bodyPartHealth: updatedHealth,\n health: newAggregateHealth,\n };\n}\n"],"mappings":"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"}
|
|
@@ -47,7 +47,6 @@ import { BodyPart, BodyPartDamageDistribution, BodyPartEffects, BodyPartHealth,
|
|
|
47
47
|
* const effects = system.calculateBodyPartEffects(damaged);
|
|
48
48
|
* ```
|
|
49
49
|
*
|
|
50
|
-
* @public
|
|
51
50
|
* @category Body Part System
|
|
52
51
|
*/
|
|
53
52
|
export declare class BodyPartHealthSystem {
|
|
@@ -61,7 +60,6 @@ export declare class BodyPartHealthSystem {
|
|
|
61
60
|
* @param maxHealth - Optional custom max health per part (default: 100)
|
|
62
61
|
* @returns Body part health structure with all parts at max HP
|
|
63
62
|
*
|
|
64
|
-
* @public
|
|
65
63
|
*/
|
|
66
64
|
createDefaultBodyPartHealth(maxHealth?: number): BodyPartHealth;
|
|
67
65
|
/**
|
|
@@ -72,7 +70,6 @@ export declare class BodyPartHealthSystem {
|
|
|
72
70
|
* @param baseMaxHealth - Base maximum health per part
|
|
73
71
|
* @returns Maximum health structure
|
|
74
72
|
*
|
|
75
|
-
* @public
|
|
76
73
|
*/
|
|
77
74
|
createDefaultMaxHealth(baseMaxHealth?: number): BodyPartMaxHealth;
|
|
78
75
|
/**
|
|
@@ -89,7 +86,6 @@ export declare class BodyPartHealthSystem {
|
|
|
89
86
|
* @param maxHealth - Optional maximum health limits
|
|
90
87
|
* @returns Updated body part health
|
|
91
88
|
*
|
|
92
|
-
* @public
|
|
93
89
|
*/
|
|
94
90
|
applyDamageToBodyPart(current: BodyPartHealth, bodyPart: BodyPart, damage: number, maxHealth?: BodyPartMaxHealth): BodyPartHealth;
|
|
95
91
|
/**
|
|
@@ -103,7 +99,6 @@ export declare class BodyPartHealthSystem {
|
|
|
103
99
|
* @param bodyRegion - Hit location
|
|
104
100
|
* @returns Damage distribution configuration
|
|
105
101
|
*
|
|
106
|
-
* @public
|
|
107
102
|
*/
|
|
108
103
|
getDamageDistribution(bodyRegion: BodyRegion): BodyPartDamageDistribution;
|
|
109
104
|
/**
|
|
@@ -120,7 +115,6 @@ export declare class BodyPartHealthSystem {
|
|
|
120
115
|
* @param maxHealth - Optional maximum health limits
|
|
121
116
|
* @returns Updated body part health
|
|
122
117
|
*
|
|
123
|
-
* @public
|
|
124
118
|
*/
|
|
125
119
|
applyDistributedDamage(current: BodyPartHealth, bodyRegion: BodyRegion, totalDamage: number, maxHealth?: BodyPartMaxHealth): BodyPartHealth;
|
|
126
120
|
/**
|
|
@@ -139,7 +133,6 @@ export declare class BodyPartHealthSystem {
|
|
|
139
133
|
* @param maxHealth - Maximum health values
|
|
140
134
|
* @returns Combat capability effect multipliers
|
|
141
135
|
*
|
|
142
|
-
* @public
|
|
143
136
|
*/
|
|
144
137
|
calculateBodyPartEffects(health: BodyPartHealth, maxHealth?: BodyPartMaxHealth): BodyPartEffects;
|
|
145
138
|
/**
|
|
@@ -153,7 +146,6 @@ export declare class BodyPartHealthSystem {
|
|
|
153
146
|
* @param health - Body part health
|
|
154
147
|
* @returns Aggregate health value (0-100)
|
|
155
148
|
*
|
|
156
|
-
* @public
|
|
157
149
|
*/
|
|
158
150
|
calculateAggregateHealth(health: BodyPartHealth): number;
|
|
159
151
|
/**
|
|
@@ -169,7 +161,6 @@ export declare class BodyPartHealthSystem {
|
|
|
169
161
|
* @param part - Body part to query
|
|
170
162
|
* @returns Status information for display
|
|
171
163
|
*
|
|
172
|
-
* @public
|
|
173
164
|
*/
|
|
174
165
|
getBodyPartStatus(health: BodyPartHealth, maxHealth: BodyPartMaxHealth, part: BodyPart): BodyPartStatus;
|
|
175
166
|
/**
|
|
@@ -183,7 +174,6 @@ export declare class BodyPartHealthSystem {
|
|
|
183
174
|
* @param maxHealth - Maximum health values
|
|
184
175
|
* @returns Array of status information for all parts
|
|
185
176
|
*
|
|
186
|
-
* @public
|
|
187
177
|
*/
|
|
188
178
|
getAllBodyPartStatuses(health: BodyPartHealth, maxHealth: BodyPartMaxHealth): BodyPartStatus[];
|
|
189
179
|
/**
|
|
@@ -200,7 +190,6 @@ export declare class BodyPartHealthSystem {
|
|
|
200
190
|
* @param maxHealth - Optional maximum health limits
|
|
201
191
|
* @returns Updated body part health
|
|
202
192
|
*
|
|
203
|
-
* @public
|
|
204
193
|
*/
|
|
205
194
|
healBodyPart(current: BodyPartHealth, bodyPart: BodyPart, healAmount: number, maxHealth?: BodyPartMaxHealth): BodyPartHealth;
|
|
206
195
|
/**
|
|
@@ -216,7 +205,6 @@ export declare class BodyPartHealthSystem {
|
|
|
216
205
|
* @param health - Current body part health
|
|
217
206
|
* @returns Whether player is incapacitated
|
|
218
207
|
*
|
|
219
|
-
* @public
|
|
220
208
|
*/
|
|
221
209
|
isIncapacitated(health: BodyPartHealth): boolean;
|
|
222
210
|
}
|
|
@@ -227,7 +215,6 @@ export declare class BodyPartHealthSystem {
|
|
|
227
215
|
*
|
|
228
216
|
* Provides global access to the body part health system throughout the game.
|
|
229
217
|
*
|
|
230
|
-
* @public
|
|
231
218
|
*/
|
|
232
219
|
export declare const bodyPartHealthSystem: BodyPartHealthSystem;
|
|
233
220
|
//# sourceMappingURL=BodyPartHealthSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyPartHealthSystem.d.ts","sourceRoot":"","sources":["../../../src/systems/bodypart/BodyPartHealthSystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAA6B,MAAM,SAAS,CAAC;AAChE,OAAO,EACL,QAAQ,EACR,0BAA0B,EAC1B,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAGf,MAAM,SAAS,CAAC;AAEjB
|
|
1
|
+
{"version":3,"file":"BodyPartHealthSystem.d.ts","sourceRoot":"","sources":["../../../src/systems/bodypart/BodyPartHealthSystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAA6B,MAAM,SAAS,CAAC;AAChE,OAAO,EACL,QAAQ,EACR,0BAA0B,EAC1B,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAGf,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,GAAE,oBAA+C;IAInE;;;;;;;;OAQG;IACH,2BAA2B,CAAC,SAAS,GAAE,MAAY,GAAG,cAAc;IAapE;;;;;;;;OAQG;IACH,sBAAsB,CAAC,aAAa,GAAE,MAAY,GAAG,iBAAiB;IAatE;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,CACnB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,iBAAiB,GAC5B,cAAc;IAYjB;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,0BAA0B;IA8DzE;;;;;;;;;;;;;;OAcG;IACH,sBAAsB,CACpB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,iBAAiB,GAC5B,cAAc;IAyBjB;;;;;;;;;;;;;;;;OAgBG;IACH,wBAAwB,CACtB,MAAM,EAAE,cAAc,EACtB,SAAS,CAAC,EAAE,iBAAiB,GAC5B,eAAe;IA2DlB;;;;;;;;;;;OAWG;IACH,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAcxD;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAE,QAAQ,GACb,cAAc;IAuDjB;;;;;;;;;;;OAWG;IACH,sBAAsB,CACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,iBAAiB,GAC3B,cAAc,EAAE;IAMnB;;;;;;;;;;;;;;OAcG;IACH,YAAY,CACV,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,iBAAiB,GAC5B,cAAc;IAUjB;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;CAajD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -49,7 +49,6 @@ import { BODY_PART_EFFECT_CONSTANTS, BodyPart, DEFAULT_BODY_PART_CONFIG } from "
|
|
|
49
49
|
* const effects = system.calculateBodyPartEffects(damaged);
|
|
50
50
|
* ```
|
|
51
51
|
*
|
|
52
|
-
* @public
|
|
53
52
|
* @category Body Part System
|
|
54
53
|
*/
|
|
55
54
|
var BodyPartHealthSystem = class {
|
|
@@ -65,7 +64,6 @@ var BodyPartHealthSystem = class {
|
|
|
65
64
|
* @param maxHealth - Optional custom max health per part (default: 100)
|
|
66
65
|
* @returns Body part health structure with all parts at max HP
|
|
67
66
|
*
|
|
68
|
-
* @public
|
|
69
67
|
*/
|
|
70
68
|
createDefaultBodyPartHealth(maxHealth = 100) {
|
|
71
69
|
return {
|
|
@@ -87,7 +85,6 @@ var BodyPartHealthSystem = class {
|
|
|
87
85
|
* @param baseMaxHealth - Base maximum health per part
|
|
88
86
|
* @returns Maximum health structure
|
|
89
87
|
*
|
|
90
|
-
* @public
|
|
91
88
|
*/
|
|
92
89
|
createDefaultMaxHealth(baseMaxHealth = 100) {
|
|
93
90
|
return {
|
|
@@ -115,7 +112,6 @@ var BodyPartHealthSystem = class {
|
|
|
115
112
|
* @param maxHealth - Optional maximum health limits
|
|
116
113
|
* @returns Updated body part health
|
|
117
114
|
*
|
|
118
|
-
* @public
|
|
119
115
|
*/
|
|
120
116
|
applyDamageToBodyPart(current, bodyPart, damage, maxHealth) {
|
|
121
117
|
const newHealth = Math.max(0, current[bodyPart] - damage);
|
|
@@ -136,7 +132,6 @@ var BodyPartHealthSystem = class {
|
|
|
136
132
|
* @param bodyRegion - Hit location
|
|
137
133
|
* @returns Damage distribution configuration
|
|
138
134
|
*
|
|
139
|
-
* @public
|
|
140
135
|
*/
|
|
141
136
|
getDamageDistribution(bodyRegion) {
|
|
142
137
|
switch (bodyRegion) {
|
|
@@ -246,7 +241,6 @@ var BodyPartHealthSystem = class {
|
|
|
246
241
|
* @param maxHealth - Optional maximum health limits
|
|
247
242
|
* @returns Updated body part health
|
|
248
243
|
*
|
|
249
|
-
* @public
|
|
250
244
|
*/
|
|
251
245
|
applyDistributedDamage(current, bodyRegion, totalDamage, maxHealth) {
|
|
252
246
|
const distribution = this.getDamageDistribution(bodyRegion);
|
|
@@ -271,7 +265,6 @@ var BodyPartHealthSystem = class {
|
|
|
271
265
|
* @param maxHealth - Maximum health values
|
|
272
266
|
* @returns Combat capability effect multipliers
|
|
273
267
|
*
|
|
274
|
-
* @public
|
|
275
268
|
*/
|
|
276
269
|
calculateBodyPartEffects(health, maxHealth) {
|
|
277
270
|
const max = maxHealth ?? this.createDefaultMaxHealth();
|
|
@@ -309,7 +302,6 @@ var BodyPartHealthSystem = class {
|
|
|
309
302
|
* @param health - Body part health
|
|
310
303
|
* @returns Aggregate health value (0-100)
|
|
311
304
|
*
|
|
312
|
-
* @public
|
|
313
305
|
*/
|
|
314
306
|
calculateAggregateHealth(health) {
|
|
315
307
|
return (health.head + health.neck + health.torsoUpper + health.torsoLower + health.armLeft + health.armRight + health.legLeft + health.legRight) / 8;
|
|
@@ -327,7 +319,6 @@ var BodyPartHealthSystem = class {
|
|
|
327
319
|
* @param part - Body part to query
|
|
328
320
|
* @returns Status information for display
|
|
329
321
|
*
|
|
330
|
-
* @public
|
|
331
322
|
*/
|
|
332
323
|
getBodyPartStatus(health, maxHealth, part) {
|
|
333
324
|
const current = health[part];
|
|
@@ -408,7 +399,6 @@ var BodyPartHealthSystem = class {
|
|
|
408
399
|
* @param maxHealth - Maximum health values
|
|
409
400
|
* @returns Array of status information for all parts
|
|
410
401
|
*
|
|
411
|
-
* @public
|
|
412
402
|
*/
|
|
413
403
|
getAllBodyPartStatuses(health, maxHealth) {
|
|
414
404
|
return Object.values(BodyPart).map((part) => this.getBodyPartStatus(health, maxHealth, part));
|
|
@@ -427,7 +417,6 @@ var BodyPartHealthSystem = class {
|
|
|
427
417
|
* @param maxHealth - Optional maximum health limits
|
|
428
418
|
* @returns Updated body part health
|
|
429
419
|
*
|
|
430
|
-
* @public
|
|
431
420
|
*/
|
|
432
421
|
healBodyPart(current, bodyPart, healAmount, maxHealth) {
|
|
433
422
|
const max = maxHealth ?? this.createDefaultMaxHealth();
|
|
@@ -450,7 +439,6 @@ var BodyPartHealthSystem = class {
|
|
|
450
439
|
* @param health - Current body part health
|
|
451
440
|
* @returns Whether player is incapacitated
|
|
452
441
|
*
|
|
453
|
-
* @public
|
|
454
442
|
*/
|
|
455
443
|
isIncapacitated(health) {
|
|
456
444
|
if (health.head <= 0) return true;
|
|
@@ -466,7 +454,6 @@ var BodyPartHealthSystem = class {
|
|
|
466
454
|
*
|
|
467
455
|
* Provides global access to the body part health system throughout the game.
|
|
468
456
|
*
|
|
469
|
-
* @public
|
|
470
457
|
*/
|
|
471
458
|
var bodyPartHealthSystem = new BodyPartHealthSystem();
|
|
472
459
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyPartHealthSystem.js","names":[],"sources":["../../../src/systems/bodypart/BodyPartHealthSystem.ts"],"sourcesContent":["/**\n * Body Part Health System\n * \n * **Korean**: 신체부위 체력 시스템\n * \n * Manages body part-specific health tracking, damage distribution, and combat\n * capability effects. Implements realistic localized damage mechanics based on\n * Korean martial arts vital point targeting principles.\n * \n * ## System Features\n * \n * - Independent health tracking for 8 body parts\n * - Automatic combat capability penalties based on damage\n * - Damage distribution from hit locations to body parts\n * - UI-friendly status information generation\n * - Performance-optimized calculations\n * \n * @module systems/bodypart/BodyPartHealthSystem\n * @category Body Part System\n * @korean 신체부위체력시스템\n */\n\nimport { BodyRegion, KOREAN_COLORS, KoreanText } from \"@/types\";\nimport {\n BodyPart,\n BodyPartDamageDistribution,\n BodyPartEffects,\n BodyPartHealth,\n BodyPartHealthConfig,\n BodyPartMaxHealth,\n BodyPartStatus,\n BODY_PART_EFFECT_CONSTANTS,\n DEFAULT_BODY_PART_CONFIG,\n} from \"./types\";\n\n/**\n * Body Part Health System class.\n * \n * **Korean**: 신체부위 체력 시스템 클래스\n * \n * Provides methods for managing body part health, calculating effects,\n * and distributing damage based on hit locations.\n * \n * @example\n * ```typescript\n * const system = new BodyPartHealthSystem();\n * \n * // Create initial body part health\n * const health = system.createDefaultBodyPartHealth();\n * \n * // Apply damage to head\n * const damaged = system.applyDamageToBodyPart(\n * health,\n * BodyPart.HEAD,\n * 25\n * );\n * \n * // Calculate combat effects\n * const effects = system.calculateBodyPartEffects(damaged);\n * ```\n * \n * @public\n * @category Body Part System\n */\nexport class BodyPartHealthSystem {\n private config: BodyPartHealthConfig;\n\n constructor(config: BodyPartHealthConfig = DEFAULT_BODY_PART_CONFIG) {\n this.config = config;\n }\n\n /**\n * Create default body part health with all parts at maximum.\n * \n * **Korean**: 기본 신체부위 체력 생성\n * \n * @param maxHealth - Optional custom max health per part (default: 100)\n * @returns Body part health structure with all parts at max HP\n * \n * @public\n */\n createDefaultBodyPartHealth(maxHealth: number = 100): BodyPartHealth {\n return {\n head: maxHealth,\n neck: maxHealth,\n torsoUpper: maxHealth,\n torsoLower: maxHealth,\n armLeft: maxHealth,\n armRight: maxHealth,\n legLeft: maxHealth,\n legRight: maxHealth,\n };\n }\n\n /**\n * Create default maximum health values for body parts.\n * \n * **Korean**: 기본 최대 체력 생성\n * \n * @param baseMaxHealth - Base maximum health per part\n * @returns Maximum health structure\n * \n * @public\n */\n createDefaultMaxHealth(baseMaxHealth: number = 100): BodyPartMaxHealth {\n return {\n head: baseMaxHealth,\n neck: baseMaxHealth,\n torsoUpper: baseMaxHealth,\n torsoLower: baseMaxHealth,\n armLeft: baseMaxHealth,\n armRight: baseMaxHealth,\n legLeft: baseMaxHealth,\n legRight: baseMaxHealth,\n };\n }\n\n /**\n * Apply damage to a specific body part.\n * \n * **Korean**: 신체부위 피해 적용\n * \n * Reduces health of the specified body part by the damage amount.\n * Health is clamped to 0-maxHealth range.\n * \n * @param current - Current body part health\n * @param bodyPart - Body part to damage\n * @param damage - Damage amount to apply\n * @param maxHealth - Optional maximum health limits\n * @returns Updated body part health\n * \n * @public\n */\n applyDamageToBodyPart(\n current: BodyPartHealth,\n bodyPart: BodyPart,\n damage: number,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartHealth {\n const newHealth = Math.max(0, current[bodyPart] - damage);\n const clampedHealth = maxHealth\n ? Math.min(newHealth, maxHealth[bodyPart])\n : newHealth;\n\n return {\n ...current,\n [bodyPart]: clampedHealth,\n };\n }\n\n /**\n * Distribute damage across body parts based on hit location.\n * \n * **Korean**: 피해 분배\n * \n * Maps a BodyRegion hit location to primary and secondary body parts,\n * distributing damage according to impact mechanics.\n * \n * @param bodyRegion - Hit location\n * @returns Damage distribution configuration\n * \n * @public\n */\n getDamageDistribution(bodyRegion: BodyRegion): BodyPartDamageDistribution {\n switch (bodyRegion) {\n case BodyRegion.HEAD:\n return {\n primary: { part: BodyPart.HEAD, percentage: 0.9 },\n secondary: [{ part: BodyPart.NECK, percentage: 0.1 }],\n };\n\n case BodyRegion.NECK:\n return {\n primary: { part: BodyPart.NECK, percentage: 0.8 },\n secondary: [\n { part: BodyPart.HEAD, percentage: 0.1 },\n { part: BodyPart.TORSO_UPPER, percentage: 0.1 },\n ],\n };\n\n case BodyRegion.TORSO:\n return {\n primary: { part: BodyPart.TORSO_UPPER, percentage: 0.6 },\n secondary: [{ part: BodyPart.TORSO_LOWER, percentage: 0.4 }],\n };\n\n case BodyRegion.CORE:\n return {\n primary: { part: BodyPart.TORSO_LOWER, percentage: 0.7 },\n secondary: [{ part: BodyPart.TORSO_UPPER, percentage: 0.3 }],\n };\n\n case BodyRegion.LEFT_ARM:\n return {\n primary: { part: BodyPart.ARM_LEFT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_UPPER, percentage: 0.1 }],\n };\n\n case BodyRegion.RIGHT_ARM:\n return {\n primary: { part: BodyPart.ARM_RIGHT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_UPPER, percentage: 0.1 }],\n };\n\n case BodyRegion.LEFT_LEG:\n return {\n primary: { part: BodyPart.LEG_LEFT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_LOWER, percentage: 0.1 }],\n };\n\n case BodyRegion.RIGHT_LEG:\n return {\n primary: { part: BodyPart.LEG_RIGHT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_LOWER, percentage: 0.1 }],\n };\n\n default:\n // Default to torso upper for unknown regions\n return {\n primary: { part: BodyPart.TORSO_UPPER, percentage: 1.0 },\n secondary: [],\n };\n }\n }\n\n /**\n * Apply distributed damage to body parts from a hit.\n * \n * **Korean**: 분산 피해 적용\n * \n * Takes total damage and distributes it across primary and secondary\n * body parts based on the hit location.\n * \n * @param current - Current body part health\n * @param bodyRegion - Hit location\n * @param totalDamage - Total damage to distribute\n * @param maxHealth - Optional maximum health limits\n * @returns Updated body part health\n * \n * @public\n */\n applyDistributedDamage(\n current: BodyPartHealth,\n bodyRegion: BodyRegion,\n totalDamage: number,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartHealth {\n const distribution = this.getDamageDistribution(bodyRegion);\n let updated = { ...current };\n\n // Apply primary damage\n updated = this.applyDamageToBodyPart(\n updated,\n distribution.primary.part,\n totalDamage * distribution.primary.percentage,\n maxHealth\n );\n\n // Apply secondary damage\n for (const secondary of distribution.secondary) {\n updated = this.applyDamageToBodyPart(\n updated,\n secondary.part,\n totalDamage * secondary.percentage,\n maxHealth\n );\n }\n\n return updated;\n }\n\n /**\n * Calculate combat capability effects from body part damage.\n * \n * **Korean**: 전투 능력 효과 계산\n * \n * Analyzes body part health and returns multipliers for various combat\n * capabilities. Implements acceptance criteria:\n * - Head <50%: Consciousness penalties\n * - Torso <50%: Stamina regen -50%\n * - Arms <50%: Attack damage -30%\n * - Legs <50%: Movement speed -40%\n * \n * @param health - Current body part health\n * @param maxHealth - Maximum health values\n * @returns Combat capability effect multipliers\n * \n * @public\n */\n calculateBodyPartEffects(\n health: BodyPartHealth,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartEffects {\n const max = maxHealth ?? this.createDefaultMaxHealth();\n\n // Calculate head/neck effects on consciousness\n const headPercentage = health.head / max.head;\n const neckPercentage = health.neck / max.neck;\n const minHeadNeck = Math.min(headPercentage, neckPercentage);\n \n let consciousnessModifier = 1.0;\n if (minHeadNeck < BODY_PART_EFFECT_CONSTANTS.HEAD.CRITICAL_THRESHOLD) {\n consciousnessModifier = BODY_PART_EFFECT_CONSTANTS.HEAD.CONSCIOUSNESS_PENALTY_AT_50;\n }\n\n // Calculate torso effects on stamina regeneration\n const torsoUpperPercentage = health.torsoUpper / max.torsoUpper;\n const torsoLowerPercentage = health.torsoLower / max.torsoLower;\n const avgTorso = (torsoUpperPercentage + torsoLowerPercentage) / 2;\n \n let staminaRegenModifier = 1.0;\n if (avgTorso < BODY_PART_EFFECT_CONSTANTS.TORSO.CRITICAL_THRESHOLD) {\n staminaRegenModifier = BODY_PART_EFFECT_CONSTANTS.TORSO.STAMINA_REGEN_PENALTY_AT_50;\n }\n\n // Calculate arm effects on attack damage\n const armLeftPercentage = health.armLeft / max.armLeft;\n const armRightPercentage = health.armRight / max.armRight;\n const avgArms = (armLeftPercentage + armRightPercentage) / 2;\n \n let attackDamageModifier = 1.0;\n if (avgArms < BODY_PART_EFFECT_CONSTANTS.ARMS.CRITICAL_THRESHOLD) {\n attackDamageModifier = BODY_PART_EFFECT_CONSTANTS.ARMS.ATTACK_DAMAGE_PENALTY_AT_50;\n }\n\n // Calculate leg effects on movement speed\n const legLeftPercentage = health.legLeft / max.legLeft;\n const legRightPercentage = health.legRight / max.legRight;\n const avgLegs = (legLeftPercentage + legRightPercentage) / 2;\n \n let movementSpeedModifier = 1.0;\n if (avgLegs < BODY_PART_EFFECT_CONSTANTS.LEGS.CRITICAL_THRESHOLD) {\n movementSpeedModifier = BODY_PART_EFFECT_CONSTANTS.LEGS.MOVEMENT_SPEED_PENALTY_AT_50;\n }\n\n // Balance affected by torso and legs\n const balanceModifier = Math.min(avgTorso, avgLegs);\n\n // Technique accuracy affected by head and arms\n const techniqueAccuracyModifier = Math.min(headPercentage, avgArms);\n\n return {\n consciousnessModifier,\n staminaRegenModifier,\n attackDamageModifier,\n movementSpeedModifier,\n balanceModifier,\n techniqueAccuracyModifier,\n };\n }\n\n /**\n * Calculate aggregate health from body parts.\n * \n * **Korean**: 종합 체력 계산\n * \n * Computes overall health as average of all body part health values.\n * This maintains backwards compatibility with single health bar systems.\n * \n * @param health - Body part health\n * @returns Aggregate health value (0-100)\n * \n * @public\n */\n calculateAggregateHealth(health: BodyPartHealth): number {\n const sum =\n health.head +\n health.neck +\n health.torsoUpper +\n health.torsoLower +\n health.armLeft +\n health.armRight +\n health.legLeft +\n health.legRight;\n\n return sum / 8;\n }\n\n /**\n * Get body part status for UI display.\n * \n * **Korean**: 신체부위 상태 조회\n * \n * Provides UI-friendly status information including color coding,\n * status text, and critical/disabled flags.\n * \n * @param health - Current body part health\n * @param maxHealth - Maximum health values\n * @param part - Body part to query\n * @returns Status information for display\n * \n * @public\n */\n getBodyPartStatus(\n health: BodyPartHealth,\n maxHealth: BodyPartMaxHealth,\n part: BodyPart\n ): BodyPartStatus {\n const current = health[part];\n const max = maxHealth[part];\n const percentage = current / max;\n\n // Determine status and color\n let status: KoreanText;\n let color: number;\n let critical: boolean;\n let disabled: boolean;\n\n if (percentage === 0) {\n status = { korean: \"무력화\", english: \"Disabled\" };\n color = KOREAN_COLORS.NEGATIVE_RED;\n critical = true;\n disabled = true;\n } else if (percentage < this.config.criticalThreshold) {\n status = { korean: \"치명적\", english: \"Critical\" };\n color = KOREAN_COLORS.NEGATIVE_RED;\n critical = true;\n disabled = false;\n } else if (percentage < this.config.severePenaltyThreshold) {\n status = { korean: \"심각\", english: \"Severe\" };\n color = KOREAN_COLORS.WARNING_ORANGE;\n critical = false;\n disabled = false;\n } else if (percentage < this.config.majorPenaltyThreshold) {\n status = { korean: \"중상\", english: \"Major\" };\n color = KOREAN_COLORS.WARNING_YELLOW;\n critical = false;\n disabled = false;\n } else if (percentage < this.config.minorPenaltyThreshold) {\n status = { korean: \"경상\", english: \"Minor\" };\n color = KOREAN_COLORS.HEALTH_FULL;\n critical = false;\n disabled = false;\n } else {\n status = { korean: \"정상\", english: \"Normal\" };\n color = KOREAN_COLORS.HEALTH_FULL;\n critical = false;\n disabled = false;\n }\n\n return {\n part,\n health: current,\n maxHealth: max,\n percentage,\n status,\n color,\n critical,\n disabled,\n };\n }\n\n /**\n * Get all body part statuses for UI.\n * \n * **Korean**: 모든 신체부위 상태 조회\n * \n * Returns status information for all body parts in a single call.\n * \n * @param health - Current body part health\n * @param maxHealth - Maximum health values\n * @returns Array of status information for all parts\n * \n * @public\n */\n getAllBodyPartStatuses(\n health: BodyPartHealth,\n maxHealth: BodyPartMaxHealth\n ): BodyPartStatus[] {\n return Object.values(BodyPart).map((part) =>\n this.getBodyPartStatus(health, maxHealth, part)\n );\n }\n\n /**\n * Heal a specific body part.\n * \n * **Korean**: 신체부위 치유\n * \n * Increases health of the specified body part by the heal amount.\n * Health is clamped to 0-maxHealth range.\n * \n * @param current - Current body part health\n * @param bodyPart - Body part to heal\n * @param healAmount - Amount of health to restore\n * @param maxHealth - Optional maximum health limits\n * @returns Updated body part health\n * \n * @public\n */\n healBodyPart(\n current: BodyPartHealth,\n bodyPart: BodyPart,\n healAmount: number,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartHealth {\n const max = maxHealth ?? this.createDefaultMaxHealth();\n const newHealth = Math.min(max[bodyPart], current[bodyPart] + healAmount);\n\n return {\n ...current,\n [bodyPart]: newHealth,\n };\n }\n\n /**\n * Check if player is incapacitated based on body part health.\n * \n * **Korean**: 무력화 상태 확인\n * \n * Player is incapacitated if:\n * - Head is at 0 HP (unconscious)\n * - Both legs are at 0 HP (cannot move)\n * - Aggregate health below 10%\n * \n * @param health - Current body part health\n * @returns Whether player is incapacitated\n * \n * @public\n */\n isIncapacitated(health: BodyPartHealth): boolean {\n // Unconscious from head damage\n if (health.head <= 0) return true;\n\n // Cannot move from leg damage\n if (health.legLeft <= 0 && health.legRight <= 0) return true;\n\n // Aggregate health critical\n const aggregate = this.calculateAggregateHealth(health);\n if (aggregate < 10) return true;\n\n return false;\n }\n}\n\n/**\n * Singleton instance of Body Part Health System.\n * \n * **Korean**: 신체부위 체력 시스템 싱글톤\n * \n * Provides global access to the body part health system throughout the game.\n * \n * @public\n */\nexport const bodyPartHealthSystem = new BodyPartHealthSystem();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BodyPartHealthSystem.js","names":[],"sources":["../../../src/systems/bodypart/BodyPartHealthSystem.ts"],"sourcesContent":["/**\n * Body Part Health System\n * \n * **Korean**: 신체부위 체력 시스템\n * \n * Manages body part-specific health tracking, damage distribution, and combat\n * capability effects. Implements realistic localized damage mechanics based on\n * Korean martial arts vital point targeting principles.\n * \n * ## System Features\n * \n * - Independent health tracking for 8 body parts\n * - Automatic combat capability penalties based on damage\n * - Damage distribution from hit locations to body parts\n * - UI-friendly status information generation\n * - Performance-optimized calculations\n * \n * @module systems/bodypart/BodyPartHealthSystem\n * @category Body Part System\n * @korean 신체부위체력시스템\n */\n\nimport { BodyRegion, KOREAN_COLORS, KoreanText } from \"@/types\";\nimport {\n BodyPart,\n BodyPartDamageDistribution,\n BodyPartEffects,\n BodyPartHealth,\n BodyPartHealthConfig,\n BodyPartMaxHealth,\n BodyPartStatus,\n BODY_PART_EFFECT_CONSTANTS,\n DEFAULT_BODY_PART_CONFIG,\n} from \"./types\";\n\n/**\n * Body Part Health System class.\n * \n * **Korean**: 신체부위 체력 시스템 클래스\n * \n * Provides methods for managing body part health, calculating effects,\n * and distributing damage based on hit locations.\n * \n * @example\n * ```typescript\n * const system = new BodyPartHealthSystem();\n * \n * // Create initial body part health\n * const health = system.createDefaultBodyPartHealth();\n * \n * // Apply damage to head\n * const damaged = system.applyDamageToBodyPart(\n * health,\n * BodyPart.HEAD,\n * 25\n * );\n * \n * // Calculate combat effects\n * const effects = system.calculateBodyPartEffects(damaged);\n * ```\n * \n * @category Body Part System\n */\nexport class BodyPartHealthSystem {\n private config: BodyPartHealthConfig;\n\n constructor(config: BodyPartHealthConfig = DEFAULT_BODY_PART_CONFIG) {\n this.config = config;\n }\n\n /**\n * Create default body part health with all parts at maximum.\n * \n * **Korean**: 기본 신체부위 체력 생성\n * \n * @param maxHealth - Optional custom max health per part (default: 100)\n * @returns Body part health structure with all parts at max HP\n * \n */\n createDefaultBodyPartHealth(maxHealth: number = 100): BodyPartHealth {\n return {\n head: maxHealth,\n neck: maxHealth,\n torsoUpper: maxHealth,\n torsoLower: maxHealth,\n armLeft: maxHealth,\n armRight: maxHealth,\n legLeft: maxHealth,\n legRight: maxHealth,\n };\n }\n\n /**\n * Create default maximum health values for body parts.\n * \n * **Korean**: 기본 최대 체력 생성\n * \n * @param baseMaxHealth - Base maximum health per part\n * @returns Maximum health structure\n * \n */\n createDefaultMaxHealth(baseMaxHealth: number = 100): BodyPartMaxHealth {\n return {\n head: baseMaxHealth,\n neck: baseMaxHealth,\n torsoUpper: baseMaxHealth,\n torsoLower: baseMaxHealth,\n armLeft: baseMaxHealth,\n armRight: baseMaxHealth,\n legLeft: baseMaxHealth,\n legRight: baseMaxHealth,\n };\n }\n\n /**\n * Apply damage to a specific body part.\n * \n * **Korean**: 신체부위 피해 적용\n * \n * Reduces health of the specified body part by the damage amount.\n * Health is clamped to 0-maxHealth range.\n * \n * @param current - Current body part health\n * @param bodyPart - Body part to damage\n * @param damage - Damage amount to apply\n * @param maxHealth - Optional maximum health limits\n * @returns Updated body part health\n * \n */\n applyDamageToBodyPart(\n current: BodyPartHealth,\n bodyPart: BodyPart,\n damage: number,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartHealth {\n const newHealth = Math.max(0, current[bodyPart] - damage);\n const clampedHealth = maxHealth\n ? Math.min(newHealth, maxHealth[bodyPart])\n : newHealth;\n\n return {\n ...current,\n [bodyPart]: clampedHealth,\n };\n }\n\n /**\n * Distribute damage across body parts based on hit location.\n * \n * **Korean**: 피해 분배\n * \n * Maps a BodyRegion hit location to primary and secondary body parts,\n * distributing damage according to impact mechanics.\n * \n * @param bodyRegion - Hit location\n * @returns Damage distribution configuration\n * \n */\n getDamageDistribution(bodyRegion: BodyRegion): BodyPartDamageDistribution {\n switch (bodyRegion) {\n case BodyRegion.HEAD:\n return {\n primary: { part: BodyPart.HEAD, percentage: 0.9 },\n secondary: [{ part: BodyPart.NECK, percentage: 0.1 }],\n };\n\n case BodyRegion.NECK:\n return {\n primary: { part: BodyPart.NECK, percentage: 0.8 },\n secondary: [\n { part: BodyPart.HEAD, percentage: 0.1 },\n { part: BodyPart.TORSO_UPPER, percentage: 0.1 },\n ],\n };\n\n case BodyRegion.TORSO:\n return {\n primary: { part: BodyPart.TORSO_UPPER, percentage: 0.6 },\n secondary: [{ part: BodyPart.TORSO_LOWER, percentage: 0.4 }],\n };\n\n case BodyRegion.CORE:\n return {\n primary: { part: BodyPart.TORSO_LOWER, percentage: 0.7 },\n secondary: [{ part: BodyPart.TORSO_UPPER, percentage: 0.3 }],\n };\n\n case BodyRegion.LEFT_ARM:\n return {\n primary: { part: BodyPart.ARM_LEFT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_UPPER, percentage: 0.1 }],\n };\n\n case BodyRegion.RIGHT_ARM:\n return {\n primary: { part: BodyPart.ARM_RIGHT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_UPPER, percentage: 0.1 }],\n };\n\n case BodyRegion.LEFT_LEG:\n return {\n primary: { part: BodyPart.LEG_LEFT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_LOWER, percentage: 0.1 }],\n };\n\n case BodyRegion.RIGHT_LEG:\n return {\n primary: { part: BodyPart.LEG_RIGHT, percentage: 0.9 },\n secondary: [{ part: BodyPart.TORSO_LOWER, percentage: 0.1 }],\n };\n\n default:\n // Default to torso upper for unknown regions\n return {\n primary: { part: BodyPart.TORSO_UPPER, percentage: 1.0 },\n secondary: [],\n };\n }\n }\n\n /**\n * Apply distributed damage to body parts from a hit.\n * \n * **Korean**: 분산 피해 적용\n * \n * Takes total damage and distributes it across primary and secondary\n * body parts based on the hit location.\n * \n * @param current - Current body part health\n * @param bodyRegion - Hit location\n * @param totalDamage - Total damage to distribute\n * @param maxHealth - Optional maximum health limits\n * @returns Updated body part health\n * \n */\n applyDistributedDamage(\n current: BodyPartHealth,\n bodyRegion: BodyRegion,\n totalDamage: number,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartHealth {\n const distribution = this.getDamageDistribution(bodyRegion);\n let updated = { ...current };\n\n // Apply primary damage\n updated = this.applyDamageToBodyPart(\n updated,\n distribution.primary.part,\n totalDamage * distribution.primary.percentage,\n maxHealth\n );\n\n // Apply secondary damage\n for (const secondary of distribution.secondary) {\n updated = this.applyDamageToBodyPart(\n updated,\n secondary.part,\n totalDamage * secondary.percentage,\n maxHealth\n );\n }\n\n return updated;\n }\n\n /**\n * Calculate combat capability effects from body part damage.\n * \n * **Korean**: 전투 능력 효과 계산\n * \n * Analyzes body part health and returns multipliers for various combat\n * capabilities. Implements acceptance criteria:\n * - Head <50%: Consciousness penalties\n * - Torso <50%: Stamina regen -50%\n * - Arms <50%: Attack damage -30%\n * - Legs <50%: Movement speed -40%\n * \n * @param health - Current body part health\n * @param maxHealth - Maximum health values\n * @returns Combat capability effect multipliers\n * \n */\n calculateBodyPartEffects(\n health: BodyPartHealth,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartEffects {\n const max = maxHealth ?? this.createDefaultMaxHealth();\n\n // Calculate head/neck effects on consciousness\n const headPercentage = health.head / max.head;\n const neckPercentage = health.neck / max.neck;\n const minHeadNeck = Math.min(headPercentage, neckPercentage);\n \n let consciousnessModifier = 1.0;\n if (minHeadNeck < BODY_PART_EFFECT_CONSTANTS.HEAD.CRITICAL_THRESHOLD) {\n consciousnessModifier = BODY_PART_EFFECT_CONSTANTS.HEAD.CONSCIOUSNESS_PENALTY_AT_50;\n }\n\n // Calculate torso effects on stamina regeneration\n const torsoUpperPercentage = health.torsoUpper / max.torsoUpper;\n const torsoLowerPercentage = health.torsoLower / max.torsoLower;\n const avgTorso = (torsoUpperPercentage + torsoLowerPercentage) / 2;\n \n let staminaRegenModifier = 1.0;\n if (avgTorso < BODY_PART_EFFECT_CONSTANTS.TORSO.CRITICAL_THRESHOLD) {\n staminaRegenModifier = BODY_PART_EFFECT_CONSTANTS.TORSO.STAMINA_REGEN_PENALTY_AT_50;\n }\n\n // Calculate arm effects on attack damage\n const armLeftPercentage = health.armLeft / max.armLeft;\n const armRightPercentage = health.armRight / max.armRight;\n const avgArms = (armLeftPercentage + armRightPercentage) / 2;\n \n let attackDamageModifier = 1.0;\n if (avgArms < BODY_PART_EFFECT_CONSTANTS.ARMS.CRITICAL_THRESHOLD) {\n attackDamageModifier = BODY_PART_EFFECT_CONSTANTS.ARMS.ATTACK_DAMAGE_PENALTY_AT_50;\n }\n\n // Calculate leg effects on movement speed\n const legLeftPercentage = health.legLeft / max.legLeft;\n const legRightPercentage = health.legRight / max.legRight;\n const avgLegs = (legLeftPercentage + legRightPercentage) / 2;\n \n let movementSpeedModifier = 1.0;\n if (avgLegs < BODY_PART_EFFECT_CONSTANTS.LEGS.CRITICAL_THRESHOLD) {\n movementSpeedModifier = BODY_PART_EFFECT_CONSTANTS.LEGS.MOVEMENT_SPEED_PENALTY_AT_50;\n }\n\n // Balance affected by torso and legs\n const balanceModifier = Math.min(avgTorso, avgLegs);\n\n // Technique accuracy affected by head and arms\n const techniqueAccuracyModifier = Math.min(headPercentage, avgArms);\n\n return {\n consciousnessModifier,\n staminaRegenModifier,\n attackDamageModifier,\n movementSpeedModifier,\n balanceModifier,\n techniqueAccuracyModifier,\n };\n }\n\n /**\n * Calculate aggregate health from body parts.\n * \n * **Korean**: 종합 체력 계산\n * \n * Computes overall health as average of all body part health values.\n * This maintains backwards compatibility with single health bar systems.\n * \n * @param health - Body part health\n * @returns Aggregate health value (0-100)\n * \n */\n calculateAggregateHealth(health: BodyPartHealth): number {\n const sum =\n health.head +\n health.neck +\n health.torsoUpper +\n health.torsoLower +\n health.armLeft +\n health.armRight +\n health.legLeft +\n health.legRight;\n\n return sum / 8;\n }\n\n /**\n * Get body part status for UI display.\n * \n * **Korean**: 신체부위 상태 조회\n * \n * Provides UI-friendly status information including color coding,\n * status text, and critical/disabled flags.\n * \n * @param health - Current body part health\n * @param maxHealth - Maximum health values\n * @param part - Body part to query\n * @returns Status information for display\n * \n */\n getBodyPartStatus(\n health: BodyPartHealth,\n maxHealth: BodyPartMaxHealth,\n part: BodyPart\n ): BodyPartStatus {\n const current = health[part];\n const max = maxHealth[part];\n const percentage = current / max;\n\n // Determine status and color\n let status: KoreanText;\n let color: number;\n let critical: boolean;\n let disabled: boolean;\n\n if (percentage === 0) {\n status = { korean: \"무력화\", english: \"Disabled\" };\n color = KOREAN_COLORS.NEGATIVE_RED;\n critical = true;\n disabled = true;\n } else if (percentage < this.config.criticalThreshold) {\n status = { korean: \"치명적\", english: \"Critical\" };\n color = KOREAN_COLORS.NEGATIVE_RED;\n critical = true;\n disabled = false;\n } else if (percentage < this.config.severePenaltyThreshold) {\n status = { korean: \"심각\", english: \"Severe\" };\n color = KOREAN_COLORS.WARNING_ORANGE;\n critical = false;\n disabled = false;\n } else if (percentage < this.config.majorPenaltyThreshold) {\n status = { korean: \"중상\", english: \"Major\" };\n color = KOREAN_COLORS.WARNING_YELLOW;\n critical = false;\n disabled = false;\n } else if (percentage < this.config.minorPenaltyThreshold) {\n status = { korean: \"경상\", english: \"Minor\" };\n color = KOREAN_COLORS.HEALTH_FULL;\n critical = false;\n disabled = false;\n } else {\n status = { korean: \"정상\", english: \"Normal\" };\n color = KOREAN_COLORS.HEALTH_FULL;\n critical = false;\n disabled = false;\n }\n\n return {\n part,\n health: current,\n maxHealth: max,\n percentage,\n status,\n color,\n critical,\n disabled,\n };\n }\n\n /**\n * Get all body part statuses for UI.\n * \n * **Korean**: 모든 신체부위 상태 조회\n * \n * Returns status information for all body parts in a single call.\n * \n * @param health - Current body part health\n * @param maxHealth - Maximum health values\n * @returns Array of status information for all parts\n * \n */\n getAllBodyPartStatuses(\n health: BodyPartHealth,\n maxHealth: BodyPartMaxHealth\n ): BodyPartStatus[] {\n return Object.values(BodyPart).map((part) =>\n this.getBodyPartStatus(health, maxHealth, part)\n );\n }\n\n /**\n * Heal a specific body part.\n * \n * **Korean**: 신체부위 치유\n * \n * Increases health of the specified body part by the heal amount.\n * Health is clamped to 0-maxHealth range.\n * \n * @param current - Current body part health\n * @param bodyPart - Body part to heal\n * @param healAmount - Amount of health to restore\n * @param maxHealth - Optional maximum health limits\n * @returns Updated body part health\n * \n */\n healBodyPart(\n current: BodyPartHealth,\n bodyPart: BodyPart,\n healAmount: number,\n maxHealth?: BodyPartMaxHealth\n ): BodyPartHealth {\n const max = maxHealth ?? this.createDefaultMaxHealth();\n const newHealth = Math.min(max[bodyPart], current[bodyPart] + healAmount);\n\n return {\n ...current,\n [bodyPart]: newHealth,\n };\n }\n\n /**\n * Check if player is incapacitated based on body part health.\n * \n * **Korean**: 무력화 상태 확인\n * \n * Player is incapacitated if:\n * - Head is at 0 HP (unconscious)\n * - Both legs are at 0 HP (cannot move)\n * - Aggregate health below 10%\n * \n * @param health - Current body part health\n * @returns Whether player is incapacitated\n * \n */\n isIncapacitated(health: BodyPartHealth): boolean {\n // Unconscious from head damage\n if (health.head <= 0) return true;\n\n // Cannot move from leg damage\n if (health.legLeft <= 0 && health.legRight <= 0) return true;\n\n // Aggregate health critical\n const aggregate = this.calculateAggregateHealth(health);\n if (aggregate < 10) return true;\n\n return false;\n }\n}\n\n/**\n * Singleton instance of Body Part Health System.\n * \n * **Korean**: 신체부위 체력 시스템 싱글톤\n * \n * Provides global access to the body part health system throughout the game.\n * \n */\nexport const bodyPartHealthSystem = new BodyPartHealthSystem();\n"],"mappings":"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"}
|
|
@@ -45,7 +45,6 @@ export declare const CHARACTER_DIMENSIONS: {
|
|
|
45
45
|
* @param bodyPart - Body part to get position for
|
|
46
46
|
* @returns 3D position vector
|
|
47
47
|
*
|
|
48
|
-
* @public
|
|
49
48
|
*/
|
|
50
49
|
export declare function getBodyPartPosition(bodyPart: BodyPart): THREE.Vector3;
|
|
51
50
|
/**
|
|
@@ -56,7 +55,6 @@ export declare function getBodyPartPosition(bodyPart: BodyPart): THREE.Vector3;
|
|
|
56
55
|
* @param bodyRegion - Body region to get position for
|
|
57
56
|
* @returns 3D position vector
|
|
58
57
|
*
|
|
59
|
-
* @public
|
|
60
58
|
*/
|
|
61
59
|
export declare function getBodyRegionPosition(bodyRegion: BodyRegion): THREE.Vector3;
|
|
62
60
|
/**
|
|
@@ -67,7 +65,6 @@ export declare function getBodyRegionPosition(bodyRegion: BodyRegion): THREE.Vec
|
|
|
67
65
|
* @param bodyRegion - Body region to map
|
|
68
66
|
* @returns Corresponding body part
|
|
69
67
|
*
|
|
70
|
-
* @public
|
|
71
68
|
*/
|
|
72
69
|
export declare function mapBodyRegionToBodyPart(bodyRegion: BodyRegion): BodyPart;
|
|
73
70
|
/**
|
|
@@ -82,7 +79,6 @@ export declare function mapBodyRegionToBodyPart(bodyRegion: BodyRegion): BodyPar
|
|
|
82
79
|
* @param maxOffset - Maximum offset in any direction (default: 0.1)
|
|
83
80
|
* @returns New position with random offset
|
|
84
81
|
*
|
|
85
|
-
* @public
|
|
86
82
|
*/
|
|
87
83
|
export declare function addRandomOffset(basePosition: THREE.Vector3, maxOffset?: number): THREE.Vector3;
|
|
88
84
|
/**
|
|
@@ -97,7 +93,6 @@ export declare function addRandomOffset(basePosition: THREE.Vector3, maxOffset?:
|
|
|
97
93
|
* @param maxOffset - Maximum offset for randomization
|
|
98
94
|
* @returns Position with random offset
|
|
99
95
|
*
|
|
100
|
-
* @public
|
|
101
96
|
*/
|
|
102
97
|
export declare function getInjuryPositionWithOffset(bodyRegion: BodyRegion, maxOffset?: number): THREE.Vector3;
|
|
103
98
|
/**
|
|
@@ -110,7 +105,6 @@ export declare function getInjuryPositionWithOffset(bodyRegion: BodyRegion, maxO
|
|
|
110
105
|
* @param tolerance - Distance tolerance (default: 0.3)
|
|
111
106
|
* @returns Whether position is within body part bounds
|
|
112
107
|
*
|
|
113
|
-
* @public
|
|
114
108
|
*/
|
|
115
109
|
export declare function isPositionInBodyPart(position: THREE.Vector3, bodyPart: BodyPart, tolerance?: number): boolean;
|
|
116
110
|
//# sourceMappingURL=BodyPartPositionMapping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyPartPositionMapping.d.ts","sourceRoot":"","sources":["../../../src/systems/bodypart/BodyPartPositionMapping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;IAC/B,qCAAqC;;IAErC,yBAAyB;;IAEzB,mBAAmB;;IAEnB,iBAAiB;;IAEjB,iBAAiB;;IAEjB,kBAAkB;;CAEV,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"BodyPartPositionMapping.d.ts","sourceRoot":"","sources":["../../../src/systems/bodypart/BodyPartPositionMapping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;IAC/B,qCAAqC;;IAErC,yBAAyB;;IAEzB,mBAAmB;;IAEnB,iBAAiB;;IAEjB,iBAAiB;;IAEjB,kBAAkB;;CAEV,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC,OAAO,CAsCrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,OAAO,CAwC3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CA8BxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,KAAK,CAAC,OAAO,EAC3B,SAAS,GAAE,MAAY,GACtB,KAAK,CAAC,OAAO,CAQf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,UAAU,EACtB,SAAS,GAAE,MAAY,GACtB,KAAK,CAAC,OAAO,CAGf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,KAAK,CAAC,OAAO,EACvB,QAAQ,EAAE,QAAQ,EAClB,SAAS,GAAE,MAAY,GACtB,OAAO,CAIT"}
|
|
@@ -46,7 +46,6 @@ var CHARACTER_DIMENSIONS = {
|
|
|
46
46
|
* @param bodyPart - Body part to get position for
|
|
47
47
|
* @returns 3D position vector
|
|
48
48
|
*
|
|
49
|
-
* @public
|
|
50
49
|
*/
|
|
51
50
|
function getBodyPartPosition(bodyPart) {
|
|
52
51
|
const headY = CHARACTER_DIMENSIONS.HEIGHT - CHARACTER_DIMENSIONS.HEAD_HEIGHT / 2;
|
|
@@ -75,7 +74,6 @@ function getBodyPartPosition(bodyPart) {
|
|
|
75
74
|
* @param bodyRegion - Body region to get position for
|
|
76
75
|
* @returns 3D position vector
|
|
77
76
|
*
|
|
78
|
-
* @public
|
|
79
77
|
*/
|
|
80
78
|
function getBodyRegionPosition(bodyRegion) {
|
|
81
79
|
const { HEIGHT, LEG_LENGTH, SHOULDER_WIDTH } = CHARACTER_DIMENSIONS;
|
|
@@ -105,7 +103,6 @@ function getBodyRegionPosition(bodyRegion) {
|
|
|
105
103
|
* @param bodyRegion - Body region to map
|
|
106
104
|
* @returns Corresponding body part
|
|
107
105
|
*
|
|
108
|
-
* @public
|
|
109
106
|
*/
|
|
110
107
|
function mapBodyRegionToBodyPart(bodyRegion) {
|
|
111
108
|
switch (bodyRegion) {
|
|
@@ -132,7 +129,6 @@ function mapBodyRegionToBodyPart(bodyRegion) {
|
|
|
132
129
|
* @param maxOffset - Maximum offset in any direction (default: 0.1)
|
|
133
130
|
* @returns New position with random offset
|
|
134
131
|
*
|
|
135
|
-
* @public
|
|
136
132
|
*/
|
|
137
133
|
function addRandomOffset(basePosition, maxOffset = .1) {
|
|
138
134
|
const offset = new THREE.Vector3((Math.random() - .5) * maxOffset * 2, (Math.random() - .5) * maxOffset * 2, (Math.random() - .5) * maxOffset * 2);
|
|
@@ -150,7 +146,6 @@ function addRandomOffset(basePosition, maxOffset = .1) {
|
|
|
150
146
|
* @param maxOffset - Maximum offset for randomization
|
|
151
147
|
* @returns Position with random offset
|
|
152
148
|
*
|
|
153
|
-
* @public
|
|
154
149
|
*/
|
|
155
150
|
function getInjuryPositionWithOffset(bodyRegion, maxOffset = .1) {
|
|
156
151
|
return addRandomOffset(getBodyRegionPosition(bodyRegion), maxOffset);
|
|
@@ -165,7 +160,6 @@ function getInjuryPositionWithOffset(bodyRegion, maxOffset = .1) {
|
|
|
165
160
|
* @param tolerance - Distance tolerance (default: 0.3)
|
|
166
161
|
* @returns Whether position is within body part bounds
|
|
167
162
|
*
|
|
168
|
-
* @public
|
|
169
163
|
*/
|
|
170
164
|
function isPositionInBodyPart(position, bodyPart, tolerance = .3) {
|
|
171
165
|
const partPosition = getBodyPartPosition(bodyPart);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyPartPositionMapping.js","names":[],"sources":["../../../src/systems/bodypart/BodyPartPositionMapping.ts"],"sourcesContent":["/**\n * Body Part Position Mapping Utilities\n * \n * **Korean**: 신체 부위 위치 매핑 유틸리티\n * \n * Maps body regions and body parts to 3D positions on character models\n * for accurate trauma visualization placement.\n * \n * @module systems/bodypart/BodyPartPositionMapping\n * @category Body Part System\n * @korean 신체부위위치매핑\n */\n\nimport * as THREE from \"three\";\nimport { BodyPart } from \"./types\";\nimport { BodyRegion } from \"../../types/common\";\n\n/**\n * Standard character model dimensions.\n * \n * Based on average human proportions scaled for game character.\n * Character center is at [0, 0, 0], standing upright.\n */\nexport const CHARACTER_DIMENSIONS = {\n /** Total height from feet to head */\n HEIGHT: 2.0,\n /** Width at shoulders */\n SHOULDER_WIDTH: 0.6,\n /** Torso height */\n TORSO_HEIGHT: 0.8,\n /** Leg length */\n LEG_LENGTH: 1.0,\n /** Arm length */\n ARM_LENGTH: 0.7,\n /** Head height */\n HEAD_HEIGHT: 0.3,\n} as const;\n\n/**\n * Get 3D position for a body part on character model.\n * \n * **Korean**: 신체 부위 3D 위치 가져오기\n * \n * Returns center position of the body part relative to character origin.\n * Character is centered at [0, 0, 0] standing upright.\n * Positions are calculated from CHARACTER_DIMENSIONS for consistency.\n * \n * @param bodyPart - Body part to get position for\n * @returns 3D position vector\n * \n
|
|
1
|
+
{"version":3,"file":"BodyPartPositionMapping.js","names":[],"sources":["../../../src/systems/bodypart/BodyPartPositionMapping.ts"],"sourcesContent":["/**\n * Body Part Position Mapping Utilities\n * \n * **Korean**: 신체 부위 위치 매핑 유틸리티\n * \n * Maps body regions and body parts to 3D positions on character models\n * for accurate trauma visualization placement.\n * \n * @module systems/bodypart/BodyPartPositionMapping\n * @category Body Part System\n * @korean 신체부위위치매핑\n */\n\nimport * as THREE from \"three\";\nimport { BodyPart } from \"./types\";\nimport { BodyRegion } from \"../../types/common\";\n\n/**\n * Standard character model dimensions.\n * \n * Based on average human proportions scaled for game character.\n * Character center is at [0, 0, 0], standing upright.\n */\nexport const CHARACTER_DIMENSIONS = {\n /** Total height from feet to head */\n HEIGHT: 2.0,\n /** Width at shoulders */\n SHOULDER_WIDTH: 0.6,\n /** Torso height */\n TORSO_HEIGHT: 0.8,\n /** Leg length */\n LEG_LENGTH: 1.0,\n /** Arm length */\n ARM_LENGTH: 0.7,\n /** Head height */\n HEAD_HEIGHT: 0.3,\n} as const;\n\n/**\n * Get 3D position for a body part on character model.\n * \n * **Korean**: 신체 부위 3D 위치 가져오기\n * \n * Returns center position of the body part relative to character origin.\n * Character is centered at [0, 0, 0] standing upright.\n * Positions are calculated from CHARACTER_DIMENSIONS for consistency.\n * \n * @param bodyPart - Body part to get position for\n * @returns 3D position vector\n * \n */\nexport function getBodyPartPosition(bodyPart: BodyPart): THREE.Vector3 {\n // Calculate positions from CHARACTER_DIMENSIONS\n const headY = CHARACTER_DIMENSIONS.HEIGHT - CHARACTER_DIMENSIONS.HEAD_HEIGHT / 2;\n const neckY = CHARACTER_DIMENSIONS.HEIGHT - CHARACTER_DIMENSIONS.HEAD_HEIGHT;\n const torsoTop = neckY - CHARACTER_DIMENSIONS.TORSO_HEIGHT / 3;\n const torsoBottom = neckY - (2 * CHARACTER_DIMENSIONS.TORSO_HEIGHT) / 3;\n const armY = neckY - CHARACTER_DIMENSIONS.TORSO_HEIGHT / 3;\n const legY = CHARACTER_DIMENSIONS.LEG_LENGTH / 2;\n \n switch (bodyPart) {\n case BodyPart.HEAD:\n return new THREE.Vector3(0, headY, 0);\n\n case BodyPart.NECK:\n return new THREE.Vector3(0, neckY, 0);\n\n case BodyPart.TORSO_UPPER:\n return new THREE.Vector3(0, torsoTop, 0);\n\n case BodyPart.TORSO_LOWER:\n return new THREE.Vector3(0, torsoBottom, 0);\n\n case BodyPart.ARM_LEFT:\n return new THREE.Vector3(-CHARACTER_DIMENSIONS.SHOULDER_WIDTH / 2, armY, 0);\n\n case BodyPart.ARM_RIGHT:\n return new THREE.Vector3(CHARACTER_DIMENSIONS.SHOULDER_WIDTH / 2, armY, 0);\n\n case BodyPart.LEG_LEFT:\n return new THREE.Vector3(-CHARACTER_DIMENSIONS.SHOULDER_WIDTH / 4, legY, 0);\n\n case BodyPart.LEG_RIGHT:\n return new THREE.Vector3(CHARACTER_DIMENSIONS.SHOULDER_WIDTH / 4, legY, 0);\n\n default:\n // Default to torso center\n return new THREE.Vector3(0, CHARACTER_DIMENSIONS.HEIGHT / 2, 0);\n }\n}\n\n/**\n * Get 3D position for a body region on character model.\n * \n * **Korean**: 신체 영역 3D 위치 가져오기\n * \n * @param bodyRegion - Body region to get position for\n * @returns 3D position vector\n * \n */\nexport function getBodyRegionPosition(bodyRegion: BodyRegion): THREE.Vector3 {\n // Calculate positions based on CHARACTER_DIMENSIONS for single source of truth\n const { HEIGHT, LEG_LENGTH, SHOULDER_WIDTH } = CHARACTER_DIMENSIONS;\n \n const headY = HEIGHT * 0.9; // 1.8 for HEIGHT 2.0\n const neckY = HEIGHT * 0.8; // 1.6 for HEIGHT 2.0\n const torsoY = HEIGHT * 0.6; // 1.2 for HEIGHT 2.0\n const coreY = HEIGHT * 0.45; // 0.9 for HEIGHT 2.0\n const armY = torsoY; // Arms at torso level\n const legY = LEG_LENGTH * 0.4; // 0.4 for LEG_LENGTH 1.0\n\n switch (bodyRegion) {\n case BodyRegion.HEAD:\n return new THREE.Vector3(0, headY, 0);\n\n case BodyRegion.NECK:\n return new THREE.Vector3(0, neckY, 0);\n\n case BodyRegion.TORSO:\n return new THREE.Vector3(0, torsoY, 0);\n\n case BodyRegion.CORE:\n return new THREE.Vector3(0, coreY, 0);\n\n case BodyRegion.LEFT_ARM:\n return new THREE.Vector3(-SHOULDER_WIDTH / 2, armY, 0);\n\n case BodyRegion.RIGHT_ARM:\n return new THREE.Vector3(SHOULDER_WIDTH / 2, armY, 0);\n\n case BodyRegion.LEFT_LEG:\n return new THREE.Vector3(-SHOULDER_WIDTH * 0.25, legY, 0);\n\n case BodyRegion.RIGHT_LEG:\n return new THREE.Vector3(SHOULDER_WIDTH * 0.25, legY, 0);\n\n default:\n // Default to torso center\n return new THREE.Vector3(0, torsoY, 0);\n }\n}\n\n/**\n * Map BodyRegion to corresponding BodyPart.\n * \n * **Korean**: 신체 영역을 신체 부위로 매핑\n * \n * @param bodyRegion - Body region to map\n * @returns Corresponding body part\n * \n */\nexport function mapBodyRegionToBodyPart(bodyRegion: BodyRegion): BodyPart {\n switch (bodyRegion) {\n case BodyRegion.HEAD:\n return BodyPart.HEAD;\n\n case BodyRegion.NECK:\n return BodyPart.NECK;\n\n case BodyRegion.TORSO:\n return BodyPart.TORSO_UPPER;\n\n case BodyRegion.CORE:\n return BodyPart.TORSO_LOWER;\n\n case BodyRegion.LEFT_ARM:\n return BodyPart.ARM_LEFT;\n\n case BodyRegion.RIGHT_ARM:\n return BodyPart.ARM_RIGHT;\n\n case BodyRegion.LEFT_LEG:\n return BodyPart.LEG_LEFT;\n\n case BodyRegion.RIGHT_LEG:\n return BodyPart.LEG_RIGHT;\n\n default:\n // Default to upper torso\n return BodyPart.TORSO_UPPER;\n }\n}\n\n/**\n * Add random offset to position for varied injury placement.\n * \n * **Korean**: 부상 위치에 무작위 오프셋 추가\n * \n * Adds slight randomness to injury positions to avoid exact overlap\n * and create more realistic trauma distribution.\n * \n * @param basePosition - Base position to offset from\n * @param maxOffset - Maximum offset in any direction (default: 0.1)\n * @returns New position with random offset\n * \n */\nexport function addRandomOffset(\n basePosition: THREE.Vector3,\n maxOffset: number = 0.1\n): THREE.Vector3 {\n const offset = new THREE.Vector3(\n (Math.random() - 0.5) * maxOffset * 2,\n (Math.random() - 0.5) * maxOffset * 2,\n (Math.random() - 0.5) * maxOffset * 2\n );\n\n return basePosition.clone().add(offset);\n}\n\n/**\n * Get injury position with slight randomization.\n * \n * **Korean**: 무작위 오프셋이 포함된 부상 위치 가져오기\n * \n * Convenience function that combines region-to-position mapping\n * with random offset for natural injury placement.\n * \n * @param bodyRegion - Body region that was hit\n * @param maxOffset - Maximum offset for randomization\n * @returns Position with random offset\n * \n */\nexport function getInjuryPositionWithOffset(\n bodyRegion: BodyRegion,\n maxOffset: number = 0.1\n): THREE.Vector3 {\n const basePosition = getBodyRegionPosition(bodyRegion);\n return addRandomOffset(basePosition, maxOffset);\n}\n\n/**\n * Check if position is within body part bounds.\n * \n * **Korean**: 위치가 신체 부위 경계 내에 있는지 확인\n * \n * @param position - Position to check\n * @param bodyPart - Body part to check against\n * @param tolerance - Distance tolerance (default: 0.3)\n * @returns Whether position is within body part bounds\n * \n */\nexport function isPositionInBodyPart(\n position: THREE.Vector3,\n bodyPart: BodyPart,\n tolerance: number = 0.3\n): boolean {\n const partPosition = getBodyPartPosition(bodyPart);\n const distance = position.distanceTo(partPosition);\n return distance <= tolerance;\n}\n"],"mappings":"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"}
|