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
package/lib/utils/haptics.d.ts
CHANGED
|
@@ -51,7 +51,6 @@ export declare function isHapticSupported(): boolean;
|
|
|
51
51
|
* triggerHaptic('heavy');
|
|
52
52
|
* ```
|
|
53
53
|
*
|
|
54
|
-
* @public
|
|
55
54
|
*/
|
|
56
55
|
export declare function triggerHaptic(intensity: HapticIntensity): void;
|
|
57
56
|
/**
|
|
@@ -70,7 +69,6 @@ export declare function triggerHaptic(intensity: HapticIntensity): void;
|
|
|
70
69
|
* triggerCustomHaptic([200]);
|
|
71
70
|
* ```
|
|
72
71
|
*
|
|
73
|
-
* @public
|
|
74
72
|
*/
|
|
75
73
|
export declare function triggerCustomHaptic(pattern: number[]): void;
|
|
76
74
|
/**
|
|
@@ -85,7 +83,6 @@ export declare function triggerCustomHaptic(pattern: number[]): void;
|
|
|
85
83
|
* stopHaptic();
|
|
86
84
|
* ```
|
|
87
85
|
*
|
|
88
|
-
* @public
|
|
89
86
|
*/
|
|
90
87
|
export declare function stopHaptic(): void;
|
|
91
88
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"haptics.d.ts","sourceRoot":"","sources":["../../src/utils/haptics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAgB3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED
|
|
1
|
+
{"version":3,"file":"haptics.d.ts","sourceRoot":"","sources":["../../src/utils/haptics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAgB3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAO9D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAM3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAMjC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa;IACxB;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;CAEK,CAAC"}
|
package/lib/utils/haptics.js
CHANGED
package/lib/utils/haptics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"haptics.js","names":[],"sources":["../../src/utils/haptics.ts"],"sourcesContent":["/**\n * Haptic Feedback Utility\n * \n * Provides tactile feedback for mobile touch interactions\n * Uses Vibration API for physical response on button presses and combat hits\n * \n * @module utils/haptics\n * @category Mobile Controls\n * @korean 햅틱 피드백 유틸리티\n */\n\n/**\n * Haptic intensity levels for different interactions\n */\nexport type HapticIntensity = 'light' | 'medium' | 'heavy';\n\n/**\n * Vibration patterns for different haptic intensities\n * - light: Quick tap (10ms) - UI interactions\n * - medium: Moderate pulse (50ms) - Combat actions\n * - heavy: Strong pulse (100ms) - Critical hits\n * \n * @korean 햅틱 강도 패턴\n */\nconst HAPTIC_PATTERNS: Record<HapticIntensity, number[]> = {\n light: [10],\n medium: [50],\n heavy: [100],\n} as const;\n\n/**\n * Check if haptic feedback is supported by the device\n * \n * @returns True if Vibration API is available\n * @korean 햅틱 지원 확인\n * \n * @example\n * ```typescript\n * if (isHapticSupported()) {\n * triggerHaptic('medium');\n * }\n * ```\n */\nexport function isHapticSupported(): boolean {\n return typeof navigator !== 'undefined' && 'vibrate' in navigator;\n}\n\n/**\n * Trigger haptic feedback with specified intensity\n * \n * Provides tactile response for:\n * - Light: Menu selections, button taps\n * - Medium: Attack actions, stance changes\n * - Heavy: Critical hits, successful vital point strikes\n * \n * Falls back gracefully if Vibration API is not supported\n * \n * @param intensity - Haptic intensity level\n * @korean 햅틱 피드백 실행\n * \n * @example\n * ```typescript\n * // Light feedback for UI interaction\n * triggerHaptic('light');\n * \n * // Medium feedback for combat action\n * triggerHaptic('medium');\n * \n * // Heavy feedback for critical hit\n * triggerHaptic('heavy');\n * ```\n * \n
|
|
1
|
+
{"version":3,"file":"haptics.js","names":[],"sources":["../../src/utils/haptics.ts"],"sourcesContent":["/**\n * Haptic Feedback Utility\n * \n * Provides tactile feedback for mobile touch interactions\n * Uses Vibration API for physical response on button presses and combat hits\n * \n * @module utils/haptics\n * @category Mobile Controls\n * @korean 햅틱 피드백 유틸리티\n */\n\n/**\n * Haptic intensity levels for different interactions\n */\nexport type HapticIntensity = 'light' | 'medium' | 'heavy';\n\n/**\n * Vibration patterns for different haptic intensities\n * - light: Quick tap (10ms) - UI interactions\n * - medium: Moderate pulse (50ms) - Combat actions\n * - heavy: Strong pulse (100ms) - Critical hits\n * \n * @korean 햅틱 강도 패턴\n */\nconst HAPTIC_PATTERNS: Record<HapticIntensity, number[]> = {\n light: [10],\n medium: [50],\n heavy: [100],\n} as const;\n\n/**\n * Check if haptic feedback is supported by the device\n * \n * @returns True if Vibration API is available\n * @korean 햅틱 지원 확인\n * \n * @example\n * ```typescript\n * if (isHapticSupported()) {\n * triggerHaptic('medium');\n * }\n * ```\n */\nexport function isHapticSupported(): boolean {\n return typeof navigator !== 'undefined' && 'vibrate' in navigator;\n}\n\n/**\n * Trigger haptic feedback with specified intensity\n * \n * Provides tactile response for:\n * - Light: Menu selections, button taps\n * - Medium: Attack actions, stance changes\n * - Heavy: Critical hits, successful vital point strikes\n * \n * Falls back gracefully if Vibration API is not supported\n * \n * @param intensity - Haptic intensity level\n * @korean 햅틱 피드백 실행\n * \n * @example\n * ```typescript\n * // Light feedback for UI interaction\n * triggerHaptic('light');\n * \n * // Medium feedback for combat action\n * triggerHaptic('medium');\n * \n * // Heavy feedback for critical hit\n * triggerHaptic('heavy');\n * ```\n * \n */\nexport function triggerHaptic(intensity: HapticIntensity): void {\n if (!isHapticSupported()) {\n return;\n }\n\n const pattern = HAPTIC_PATTERNS[intensity];\n navigator.vibrate(pattern);\n}\n\n/**\n * Custom haptic pattern for specific game events\n * Allows creating complex vibration sequences\n * \n * @param pattern - Array of vibration durations in milliseconds\n * @korean 커스텀 햅틱 패턴\n * \n * @example\n * ```typescript\n * // Combo hit feedback: buzz, pause, buzz\n * triggerCustomHaptic([30, 20, 30]);\n * \n * // Critical vital point strike: long buzz\n * triggerCustomHaptic([200]);\n * ```\n * \n */\nexport function triggerCustomHaptic(pattern: number[]): void {\n if (!isHapticSupported()) {\n return;\n }\n\n navigator.vibrate(pattern);\n}\n\n/**\n * Stop any ongoing haptic feedback\n * Useful for interrupting long vibrations\n * \n * @korean 햅틱 피드백 중지\n * \n * @example\n * ```typescript\n * // Cancel ongoing vibration\n * stopHaptic();\n * ```\n * \n */\nexport function stopHaptic(): void {\n if (!isHapticSupported()) {\n return;\n }\n\n navigator.vibrate(0);\n}\n\n/**\n * Combat-specific haptic feedback patterns\n * Pre-configured patterns for common combat scenarios\n * \n * @korean 전투 햅틱 패턴\n */\nexport const CombatHaptics = {\n /**\n * Standard attack hit feedback\n * @korean 일반 공격\n */\n attack: () => triggerHaptic('medium'),\n\n /**\n * Block successful feedback\n * @korean 방어 성공\n */\n block: () => triggerHaptic('light'),\n\n /**\n * Critical hit feedback with double pulse\n * @korean 크리티컬 히트\n */\n criticalHit: () => triggerCustomHaptic([50, 30, 100]),\n\n /**\n * Vital point strike feedback\n * @korean 급소 타격\n */\n vitalPointStrike: () => triggerHaptic('heavy'),\n\n /**\n * Stance change feedback\n * @korean 자세 변경\n */\n stanceChange: () => triggerHaptic('light'),\n\n /**\n * Combo counter increment\n * @korean 콤보 카운터\n */\n comboIncrement: () => triggerHaptic('light'),\n\n /**\n * Player KO feedback with extended pattern\n * @korean 플레이어 KO\n */\n knockout: () => triggerCustomHaptic([100, 50, 100, 50, 200]),\n\n /**\n * Error or invalid action feedback\n * @korean 오류 피드백\n */\n error: () => triggerCustomHaptic([20, 10, 20]),\n} as const;\n"],"mappings":";;;;;;;;;AAwBA,IAAM,kBAAqD;CACzD,OAAO,CAAC,GAAG;CACX,QAAQ,CAAC,GAAG;CACZ,OAAO,CAAC,IAAI;CACb;;;;;;;;;;;;;;AAeD,SAAgB,oBAA6B;CAC3C,OAAO,OAAO,cAAc,eAAe,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6B1D,SAAgB,cAAc,WAAkC;CAC9D,IAAI,CAAC,mBAAmB,EACtB;CAGF,MAAM,UAAU,gBAAgB;CAChC,UAAU,QAAQ,QAAQ"}
|
package/lib/utils/math.d.ts
CHANGED
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
* const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);
|
|
27
27
|
* // Returns: 5.0 (3-4-5 triangle)
|
|
28
28
|
*
|
|
29
|
-
* @public
|
|
30
29
|
* @category Math Utilities
|
|
31
30
|
* @korean 3D거리계산
|
|
32
31
|
*/
|
|
@@ -47,7 +46,6 @@ export declare function calculateDistance3D(pos1: [number, number, number], pos2
|
|
|
47
46
|
* const distSq = calculateDistance3DSquared([0, 0, 0], [3, 4, 0]);
|
|
48
47
|
* // Returns: 25.0
|
|
49
48
|
*
|
|
50
|
-
* @public
|
|
51
49
|
* @category Math Utilities
|
|
52
50
|
* @korean 3D거리제곱계산
|
|
53
51
|
*/
|
|
@@ -72,7 +70,6 @@ export declare function calculateDistance3DSquared(pos1: [number, number, number
|
|
|
72
70
|
* const straightAngle = toRadians(180);
|
|
73
71
|
* // Returns: approximately 3.1416 (π)
|
|
74
72
|
*
|
|
75
|
-
* @public
|
|
76
73
|
* @category Math Utilities
|
|
77
74
|
* @korean 각도변환
|
|
78
75
|
*/
|
package/lib/utils/math.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
package/lib/utils/math.js
CHANGED
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
* const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);
|
|
28
28
|
* // Returns: 5.0 (3-4-5 triangle)
|
|
29
29
|
*
|
|
30
|
-
* @public
|
|
31
30
|
* @category Math Utilities
|
|
32
31
|
* @korean 3D거리계산
|
|
33
32
|
*/
|
|
@@ -57,7 +56,6 @@ function calculateDistance3D(pos1, pos2) {
|
|
|
57
56
|
* const straightAngle = toRadians(180);
|
|
58
57
|
* // Returns: approximately 3.1416 (π)
|
|
59
58
|
*
|
|
60
|
-
* @public
|
|
61
59
|
* @category Math Utilities
|
|
62
60
|
* @korean 각도변환
|
|
63
61
|
*/
|
package/lib/utils/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","names":[],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\n * Mathematical utility functions for Black Trigram\n * \n * Provides shared mathematical operations used across combat, training,\n * and physics systems to ensure consistency and follow DRY principles.\n * \n * **Korean**: 수학 유틸리티 함수\n * \n * @module utils/math\n * @korean 수학유틸리티\n */\n\n/**\n * Calculate 3D Euclidean distance between two positions\n * \n * Uses the standard 3D distance formula: √(dx² + dy² + dz²)\n * This is used throughout the combat and training systems to calculate\n * distance between combatants, ensuring consistent distance calculations.\n * \n * **Korean**: 3D 유클리드 거리 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The 3D Euclidean distance in meters\n * \n * @example\n * const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);\n * // Returns: 5.0 (3-4-5 triangle)\n * \n * @
|
|
1
|
+
{"version":3,"file":"math.js","names":[],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\n * Mathematical utility functions for Black Trigram\n * \n * Provides shared mathematical operations used across combat, training,\n * and physics systems to ensure consistency and follow DRY principles.\n * \n * **Korean**: 수학 유틸리티 함수\n * \n * @module utils/math\n * @korean 수학유틸리티\n */\n\n/**\n * Calculate 3D Euclidean distance between two positions\n * \n * Uses the standard 3D distance formula: √(dx² + dy² + dz²)\n * This is used throughout the combat and training systems to calculate\n * distance between combatants, ensuring consistent distance calculations.\n * \n * **Korean**: 3D 유클리드 거리 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The 3D Euclidean distance in meters\n * \n * @example\n * const distance = calculateDistance3D([0, 0, 0], [3, 4, 0]);\n * // Returns: 5.0 (3-4-5 triangle)\n * \n * @category Math Utilities\n * @korean 3D거리계산\n */\nexport function calculateDistance3D(\n pos1: [number, number, number],\n pos2: [number, number, number]\n): number {\n const dx = pos1[0] - pos2[0];\n const dy = pos1[1] - pos2[1];\n const dz = pos1[2] - pos2[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/**\n * Calculate squared 3D distance between two positions\n * \n * Optimized version that avoids the expensive square root operation.\n * Useful when comparing distances (A > B) where the square root is unnecessary.\n * \n * **Korean**: 3D 거리 제곱 계산\n * \n * @param pos1 - First position as [x, y, z] tuple\n * @param pos2 - Second position as [x, y, z] tuple\n * @returns The squared 3D distance in meters²\n * \n * @example\n * const distSq = calculateDistance3DSquared([0, 0, 0], [3, 4, 0]);\n * // Returns: 25.0\n * \n * @category Math Utilities\n * @korean 3D거리제곱계산\n */\nexport function calculateDistance3DSquared(\n pos1: [number, number, number],\n pos2: [number, number, number]\n): number {\n const dx = pos1[0] - pos2[0];\n const dy = pos1[1] - pos2[1];\n const dz = pos1[2] - pos2[2];\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * Convert degrees to radians\n * \n * Used throughout animation systems for bone rotations where angles are\n * specified in degrees for readability but need to be converted to radians\n * for Three.js rendering.\n * \n * **Korean**: 각도를 라디안으로 변환\n * \n * @param degrees - Angle in degrees (0-360)\n * @returns Angle in radians (0-2π)\n * \n * @example\n * const rightAngle = toRadians(90);\n * // Returns: approximately 1.5708 (π/2)\n * \n * @example\n * const straightAngle = toRadians(180);\n * // Returns: approximately 3.1416 (π)\n * \n * @category Math Utilities\n * @korean 각도변환\n */\nexport function toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,SAAgB,oBACd,MACA,MACQ;CACR,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,MAAM,KAAK,KAAK,KAAK,KAAK;CAC1B,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;AAuD/C,SAAgB,UAAU,SAAyB;CACjD,OAAO,WAAW,KAAK,KAAK"}
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
/**
|
|
12
12
|
* Mobile area bounds with world dimensions.
|
|
13
13
|
*
|
|
14
|
-
* @public
|
|
15
14
|
*/
|
|
16
15
|
export interface MobileAreaBounds {
|
|
17
16
|
readonly x: number;
|
|
@@ -31,7 +30,6 @@ export interface MobileAreaBounds {
|
|
|
31
30
|
* so both fighters plus the horizontal breathing-room between them fit
|
|
32
31
|
* inside a narrow viewport without being occluded by the bottom HUD.
|
|
33
32
|
*
|
|
34
|
-
* @public
|
|
35
33
|
*/
|
|
36
34
|
export type MobileOrientation = "portrait" | "landscape";
|
|
37
35
|
/**
|
|
@@ -63,7 +61,6 @@ export type MobileOrientation = "portrait" | "landscape";
|
|
|
63
61
|
* const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, "portrait");
|
|
64
62
|
* ```
|
|
65
63
|
*
|
|
66
|
-
* @public
|
|
67
64
|
* @korean 모바일영역경계계산
|
|
68
65
|
*/
|
|
69
66
|
export declare function calculateMobileAreaBounds(width: number, height: number, topClearance: number, bottomClearance: number, yOffset: number, orientation?: MobileOrientation): MobileAreaBounds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileLayoutHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/mobileLayoutHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH
|
|
1
|
+
{"version":3,"file":"mobileLayoutHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/mobileLayoutHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,iBAA+B,GAC3C,gBAAgB,CAgGlB"}
|
|
@@ -39,7 +39,6 @@ import { calculateArenaWorldDimensions } from "./arenaWorldDimensions.js";
|
|
|
39
39
|
* const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, "portrait");
|
|
40
40
|
* ```
|
|
41
41
|
*
|
|
42
|
-
* @public
|
|
43
42
|
* @korean 모바일영역경계계산
|
|
44
43
|
*/
|
|
45
44
|
function calculateMobileAreaBounds(width, height, topClearance, bottomClearance, yOffset, orientation = "landscape") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileLayoutHelpers.js","names":[],"sources":["../../src/utils/mobileLayoutHelpers.ts"],"sourcesContent":["/**\n * Mobile Layout Helpers\n *\n * Shared utilities for calculating mobile area bounds with consistent aspect ratios\n * and device-specific sizing. Used by both combat and training layout hooks.\n *\n * @module utils/mobileLayoutHelpers\n * @category Layout\n * @korean 모바일레이아웃도우미\n */\n\nimport { calculateArenaWorldDimensions } from \"./arenaWorldDimensions\";\n\n/**\n * Mobile area bounds with world dimensions.\n *\n
|
|
1
|
+
{"version":3,"file":"mobileLayoutHelpers.js","names":[],"sources":["../../src/utils/mobileLayoutHelpers.ts"],"sourcesContent":["/**\n * Mobile Layout Helpers\n *\n * Shared utilities for calculating mobile area bounds with consistent aspect ratios\n * and device-specific sizing. Used by both combat and training layout hooks.\n *\n * @module utils/mobileLayoutHelpers\n * @category Layout\n * @korean 모바일레이아웃도우미\n */\n\nimport { calculateArenaWorldDimensions } from \"./arenaWorldDimensions\";\n\n/**\n * Mobile area bounds with world dimensions.\n *\n */\nexport interface MobileAreaBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n readonly worldWidthMeters: number;\n readonly worldDepthMeters: number;\n}\n\n/**\n * Device orientation for mobile area calculation.\n *\n * - `landscape`: width > height, the arena is rendered in 4:3 (wider than tall)\n * so both fighters remain visible from a side view.\n * - `portrait`: height ≥ width, the arena is rendered in 3:4 (taller than wide)\n * so both fighters plus the horizontal breathing-room between them fit\n * inside a narrow viewport without being occluded by the bottom HUD.\n *\n */\nexport type MobileOrientation = \"portrait\" | \"landscape\";\n\n/**\n * Calculate mobile area bounds, orientation-aware.\n *\n * Implements consistent mobile area sizing logic shared between combat and training screens.\n * Adapts to different device resolutions while maintaining an orientation-appropriate\n * aspect ratio (4:3 in landscape, 3:4 in portrait).\n *\n * The caller is responsible for passing `bottomClearance` that already includes\n * the bottom HUD (technique bar), the mobile controls (D-Pad / action buttons)\n * and any safe-area insets. This function will never let the arena overflow\n * `height - topClearance - bottomClearance`.\n *\n * @param width - Screen width in pixels\n * @param height - Screen height in pixels\n * @param topClearance - Minimum space to reserve at top (for HUD/header + safe area)\n * @param bottomClearance - Minimum space to reserve at bottom (controls + footer + safe area)\n * @param yOffset - Y position offset (typically header height + padding)\n * @param orientation - `\"portrait\"` for tall-narrow viewports, otherwise `\"landscape\"` (default)\n * @returns Mobile area bounds with position, dimensions, scale, and world dimensions\n *\n * @example\n * ```typescript\n * // Landscape phone: 4:3 arena\n * const landscape = calculateMobileAreaBounds(667, 375, 60, 120, 70, \"landscape\");\n *\n * // Portrait phone: 3:4 arena (taller than wide)\n * const portrait = calculateMobileAreaBounds(375, 667, 80, 220, 90, \"portrait\");\n * ```\n *\n * @korean 모바일영역경계계산\n */\nexport function calculateMobileAreaBounds(\n width: number,\n height: number,\n topClearance: number,\n bottomClearance: number,\n yOffset: number,\n orientation: MobileOrientation = \"landscape\",\n): MobileAreaBounds {\n const isPortrait = orientation === \"portrait\";\n\n // Calculate available space for the area.\n // Extra-small devices (<380px) use tighter margins for more screen real estate.\n //\n // Height reservation: the arena starts at `yOffset`, so the available\n // vertical space is bounded by `height - yOffset - bottomClearance`.\n // Falling back to `height - topClearance - bottomClearance` when a caller\n // passes `yOffset < topClearance` keeps the legacy behaviour, but we must\n // never let the arena overflow when `yOffset > topClearance` (which is the\n // case for the updated combat/training layout hooks).\n const horizontalMargin = width < 380 ? 30 : 40; // 15px vs 20px per side\n const effectiveTopReservation = Math.max(topClearance, yOffset);\n const availableHeight = Math.max(\n 0,\n height - effectiveTopReservation - bottomClearance,\n );\n const availableWidth = Math.max(0, width - horizontalMargin);\n\n // Determine max width based on device resolution\n // Device-specific sizing with extra-small support:\n // - 4K mobile landscape (≥2160px): up to 1100px\n // - QHD+/4K portrait (≥1440px): up to 960px\n // - 2K (1200-1439px): up to 760px\n // - Large phones/tablets (768-1199px): up to 560px\n // - Standard phones (380-767px): up to 400px\n // - Extra-small phones (<380px): up to 320px\n let maxMobileWidth: number;\n if (width >= 2160) {\n maxMobileWidth = Math.min(availableWidth, 1100);\n } else if (width >= 1440) {\n maxMobileWidth = Math.min(availableWidth, 960);\n } else if (width >= 1200) {\n maxMobileWidth = Math.min(availableWidth, 760);\n } else if (width >= 768) {\n maxMobileWidth = Math.min(availableWidth, 560);\n } else if (width >= 380) {\n maxMobileWidth = Math.min(availableWidth, 400);\n } else {\n // Extra-small devices (iPhone SE, old Android, budget phones)\n maxMobileWidth = Math.min(availableWidth, 320);\n }\n\n // In portrait we want the arena to consume more vertical real estate,\n // so the per-device max-height cap only applies in landscape.\n const maxMobileHeight = isPortrait\n ? availableHeight\n : Math.min(availableHeight, width < 380 ? 240 : 800);\n\n // Aspect ratio depends on orientation:\n // landscape → 4:3 (height = width × 3/4)\n // portrait → 3:4 (height = width × 4/3)\n // In portrait, width is constrained by height × 3/4 (not height × 4/3).\n const widthFromHeight = isPortrait\n ? maxMobileHeight * (3 / 4)\n : maxMobileHeight * (4 / 3);\n\n // Minimum arena width so the 3D scene stays legible, but never above\n // what the viewport can actually host:\n // - `availableWidth` caps absolute width of the arena element\n // - in portrait, `availableHeight × 3/4` caps arena width so the arena\n // height never exceeds `availableHeight` (preventing the arena from\n // being drawn behind the bottom HUD / D-Pad).\n // - in landscape, `availableHeight × 4/3` caps arena width so the 4:3\n // arena height never exceeds `availableHeight` on short mobile screens.\n const hardWidthCap = isPortrait\n ? Math.min(availableWidth, availableHeight * (3 / 4))\n : Math.min(availableWidth, availableHeight * (4 / 3));\n const minArenaWidth = Math.min(280, hardWidthCap);\n\n const areaWidth = Math.max(\n Math.min(maxMobileWidth, widthFromHeight, hardWidthCap),\n Math.max(0, minArenaWidth),\n );\n const areaHeight = isPortrait ? areaWidth * (4 / 3) : areaWidth * (3 / 4);\n\n // Calculate world dimensions based on RENDERED arena width (not screen width)\n // This ensures correct pixels-per-meter ratio for the actual visible arena\n const worldDimensions = calculateArenaWorldDimensions(areaWidth);\n\n // Calculate 3D scale factor based on reference arena\n // Reference: 10m arena at 1000px = 100 px/m\n const pixelsPerMeter = areaWidth / worldDimensions.widthMeters;\n const referencePixelsPerMeter = 100;\n const scale = pixelsPerMeter / referencePixelsPerMeter;\n\n return {\n x: (width - areaWidth) / 2, // Centered horizontally\n y: yOffset,\n width: areaWidth,\n height: areaHeight,\n scale,\n worldWidthMeters: worldDimensions.widthMeters,\n worldDepthMeters: worldDimensions.depthMeters,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,SAAgB,0BACd,OACA,QACA,cACA,iBACA,SACA,cAAiC,aACf;CAClB,MAAM,aAAa,gBAAgB;CAWnC,MAAM,mBAAmB,QAAQ,MAAM,KAAK;CAE5C,MAAM,kBAAkB,KAAK,IAC3B,GACA,SAH8B,KAAK,IAAI,cAAc,QAG5C,GAA0B,gBACpC;CACD,MAAM,iBAAiB,KAAK,IAAI,GAAG,QAAQ,iBAAiB;CAU5D,IAAI;CACJ,IAAI,SAAS,MACX,iBAAiB,KAAK,IAAI,gBAAgB,KAAK;MAC1C,IAAI,SAAS,MAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,MAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,KAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MACzC,IAAI,SAAS,KAClB,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;MAG9C,iBAAiB,KAAK,IAAI,gBAAgB,IAAI;CAKhD,MAAM,kBAAkB,aACpB,kBACA,KAAK,IAAI,iBAAiB,QAAQ,MAAM,MAAM,IAAI;CAMtD,MAAM,kBAAkB,aACpB,mBAAmB,IAAI,KACvB,mBAAmB,IAAI;CAU3B,MAAM,eAAe,aACjB,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,GAAG,GACnD,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,GAAG;CAGvD,MAAM,YAAY,KAAK,IACrB,KAAK,IAAI,gBAAgB,iBAAiB,aAAa,EACvD,KAAK,IAAI,GAJW,KAAK,IAAI,KAAK,aAItB,CAAc,CAC3B;CACD,MAAM,aAAa,aAAa,aAAa,IAAI,KAAK,aAAa,IAAI;CAIvE,MAAM,kBAAkB,8BAA8B,UAAU;CAMhE,MAAM,QAFiB,YAAY,gBAAgB,cAEpB;CAE/B,OAAO;EACL,IAAI,QAAQ,aAAa;EACzB,GAAG;EACH,OAAO;EACP,QAAQ;EACR;EACA,kBAAkB,gBAAgB;EAClC,kBAAkB,gBAAgB;EACnC"}
|
|
@@ -47,15 +47,6 @@ export interface TouchTargetSize {
|
|
|
47
47
|
* @param width - Viewport width in pixels
|
|
48
48
|
* @returns Viewport size category
|
|
49
49
|
*
|
|
50
|
-
* @example
|
|
51
|
-
* ```typescript
|
|
52
|
-
* getViewportSize(375); // 'xs' (iPhone SE)
|
|
53
|
-
* getViewportSize(768); // 'sm' (Standard phones, high-end mobiles start here)
|
|
54
|
-
* getViewportSize(2712); // 'md' (Motorola Edge 60 Pro Super HD)
|
|
55
|
-
* getViewportSize(1200); // 'lg' (Desktop)
|
|
56
|
-
* ```
|
|
57
|
-
*
|
|
58
|
-
* @public
|
|
59
50
|
* @korean 뷰포트크기얻기
|
|
60
51
|
*/
|
|
61
52
|
export declare function getViewportSize(width: number): ViewportSize;
|
|
@@ -70,16 +61,6 @@ export declare function getViewportSize(width: number): ViewportSize;
|
|
|
70
61
|
* @param viewportWidth - Optional viewport width for fine-tuning
|
|
71
62
|
* @returns Touch target size configuration
|
|
72
63
|
*
|
|
73
|
-
* @example
|
|
74
|
-
* ```typescript
|
|
75
|
-
* const buttonSize = getTouchTargetSize(true, 375);
|
|
76
|
-
* // { minWidth: 48, minHeight: 48, padding: 12, spacing: 8 }
|
|
77
|
-
*
|
|
78
|
-
* const superHDButtonSize = getTouchTargetSize(true, 2712);
|
|
79
|
-
* // { minWidth: 56, minHeight: 56, padding: 16, spacing: 12 }
|
|
80
|
-
* ```
|
|
81
|
-
*
|
|
82
|
-
* @public
|
|
83
64
|
* @korean 터치타겟크기얻기
|
|
84
65
|
*/
|
|
85
66
|
export declare function getTouchTargetSize(isMobile: boolean, viewportWidth?: number): TouchTargetSize;
|
|
@@ -93,15 +74,6 @@ export declare function getTouchTargetSize(isMobile: boolean, viewportWidth?: nu
|
|
|
93
74
|
* @param viewportWidth - Viewport width in pixels
|
|
94
75
|
* @returns Font size in pixels
|
|
95
76
|
*
|
|
96
|
-
* @example
|
|
97
|
-
* ```typescript
|
|
98
|
-
* getMobileKoreanFontSize('SMALL', 375); // 16
|
|
99
|
-
* getMobileKoreanFontSize('MEDIUM', 410); // 18
|
|
100
|
-
* getMobileKoreanFontSize('MEDIUM', 2712); // 20 (Super HD enhanced)
|
|
101
|
-
* getMobileKoreanFontSize('LARGE', 768); // 24
|
|
102
|
-
* ```
|
|
103
|
-
*
|
|
104
|
-
* @public
|
|
105
77
|
* @korean 모바일한글글꼴크기얻기
|
|
106
78
|
*/
|
|
107
79
|
export declare function getMobileKoreanFontSize(size: keyof typeof KOREAN_MOBILE_FONT_SIZES, viewportWidth: number): number;
|
|
@@ -113,13 +85,6 @@ export declare function getMobileKoreanFontSize(size: keyof typeof KOREAN_MOBILE
|
|
|
113
85
|
* @param isMobile - Whether on mobile device
|
|
114
86
|
* @returns Scaled spacing in pixels
|
|
115
87
|
*
|
|
116
|
-
* @example
|
|
117
|
-
* ```typescript
|
|
118
|
-
* getResponsiveSpacing(SPACING.MD, true); // 12 (COMPACT on mobile)
|
|
119
|
-
* getResponsiveSpacing(SPACING.MD, false); // 16 (original)
|
|
120
|
-
* ```
|
|
121
|
-
*
|
|
122
|
-
* @public
|
|
123
88
|
* @korean 반응형간격얻기
|
|
124
89
|
*/
|
|
125
90
|
export declare function getResponsiveSpacing(baseSpacing: number, isMobile: boolean): number;
|
|
@@ -132,13 +97,6 @@ export declare function getResponsiveSpacing(baseSpacing: number, isMobile: bool
|
|
|
132
97
|
* @param minMargin - Minimum margin on each side (default: 20px)
|
|
133
98
|
* @returns Panel width in pixels
|
|
134
99
|
*
|
|
135
|
-
* @example
|
|
136
|
-
* ```typescript
|
|
137
|
-
* getResponsivePanelWidth(375, true); // ~335px (375 - 40 margin)
|
|
138
|
-
* getResponsivePanelWidth(1200, false); // ~400px (max width applied)
|
|
139
|
-
* ```
|
|
140
|
-
*
|
|
141
|
-
* @public
|
|
142
100
|
* @korean 반응형패널폭얻기
|
|
143
101
|
*/
|
|
144
102
|
export declare function getResponsivePanelWidth(viewportWidth: number, isMobile: boolean, minMargin?: number): number;
|
|
@@ -149,13 +107,6 @@ export declare function getResponsivePanelWidth(viewportWidth: number, isMobile:
|
|
|
149
107
|
* @param viewportHeight - Viewport height in pixels
|
|
150
108
|
* @returns Whether in landscape orientation
|
|
151
109
|
*
|
|
152
|
-
* @example
|
|
153
|
-
* ```typescript
|
|
154
|
-
* isLandscape(812, 375); // true (iPhone X landscape)
|
|
155
|
-
* isLandscape(375, 812); // false (iPhone X portrait)
|
|
156
|
-
* ```
|
|
157
|
-
*
|
|
158
|
-
* @public
|
|
159
110
|
* @korean 가로모드여부
|
|
160
111
|
*/
|
|
161
112
|
export declare function isLandscape(viewportWidth: number, viewportHeight: number): boolean;
|
|
@@ -166,19 +117,6 @@ export declare function isLandscape(viewportWidth: number, viewportHeight: numbe
|
|
|
166
117
|
* @param viewportWidth - Optional viewport width
|
|
167
118
|
* @returns CSS properties for button
|
|
168
119
|
*
|
|
169
|
-
* @example
|
|
170
|
-
* ```typescript
|
|
171
|
-
* const buttonStyles = getResponsiveButtonStyles(true, 375);
|
|
172
|
-
* // {
|
|
173
|
-
* // minWidth: '48px',
|
|
174
|
-
* // minHeight: '48px',
|
|
175
|
-
* // padding: '12px',
|
|
176
|
-
* // fontSize: '16px',
|
|
177
|
-
* // ...
|
|
178
|
-
* // }
|
|
179
|
-
* ```
|
|
180
|
-
*
|
|
181
|
-
* @public
|
|
182
120
|
* @korean 반응형버튼스타일얻기
|
|
183
121
|
*/
|
|
184
122
|
export declare function getResponsiveButtonStyles(isMobile: boolean, viewportWidth?: number): React.CSSProperties;
|
|
@@ -190,17 +128,6 @@ export declare function getResponsiveButtonStyles(isMobile: boolean, viewportWid
|
|
|
190
128
|
* @param viewportWidth - Viewport width in pixels
|
|
191
129
|
* @returns CSS properties for text
|
|
192
130
|
*
|
|
193
|
-
* @example
|
|
194
|
-
* ```typescript
|
|
195
|
-
* const textStyles = getResponsiveTextStyles('MEDIUM', true, 375);
|
|
196
|
-
* // {
|
|
197
|
-
* // fontSize: '18px',
|
|
198
|
-
* // lineHeight: '1.5',
|
|
199
|
-
* // letterSpacing: '0.02em',
|
|
200
|
-
* // }
|
|
201
|
-
* ```
|
|
202
|
-
*
|
|
203
|
-
* @public
|
|
204
131
|
* @korean 반응형텍스트스타일얻기
|
|
205
132
|
*/
|
|
206
133
|
export declare function getResponsiveTextStyles(size: keyof typeof KOREAN_MOBILE_FONT_SIZES, isMobile: boolean, viewportWidth: number): React.CSSProperties;
|
|
@@ -211,13 +138,6 @@ export declare function getResponsiveTextStyles(size: keyof typeof KOREAN_MOBILE
|
|
|
211
138
|
* @param isMobile - Whether on mobile device
|
|
212
139
|
* @returns Minimum spacing in pixels
|
|
213
140
|
*
|
|
214
|
-
* @example
|
|
215
|
-
* ```typescript
|
|
216
|
-
* getMinimumInteractiveSpacing(true); // 8px (mobile)
|
|
217
|
-
* getMinimumInteractiveSpacing(false); // 12px (desktop)
|
|
218
|
-
* ```
|
|
219
|
-
*
|
|
220
|
-
* @public
|
|
221
141
|
* @korean 최소상호작용간격얻기
|
|
222
142
|
*/
|
|
223
143
|
export declare function getMinimumInteractiveSpacing(isMobile: boolean): number;
|
|
@@ -230,15 +150,9 @@ export declare function getMinimumInteractiveSpacing(isMobile: boolean): number;
|
|
|
230
150
|
* @korean 뷰포트감지
|
|
231
151
|
*/
|
|
232
152
|
export declare const ViewportDetection: {
|
|
233
|
-
/**
|
|
234
|
-
* Check if iPhone SE or similar small device
|
|
235
|
-
* @korean iPhone SE여부
|
|
236
|
-
*/
|
|
153
|
+
/** Check if iPhone SE or similar small device @korean iPhone SE여부 */
|
|
237
154
|
readonly isSmallMobile: (width: number) => boolean;
|
|
238
|
-
/**
|
|
239
|
-
* Check if standard mobile device (excluding high-end)
|
|
240
|
-
* @korean 표준모바일여부
|
|
241
|
-
*/
|
|
155
|
+
/** Check if standard mobile device (excluding high-end) @korean 표준모바일여부 */
|
|
242
156
|
readonly isMobile: (width: number) => boolean;
|
|
243
157
|
/**
|
|
244
158
|
* Check if high-end mobile device (Super HD, 2K+)
|
|
@@ -247,20 +161,11 @@ export declare const ViewportDetection: {
|
|
|
247
161
|
* @korean 고급모바일여부
|
|
248
162
|
*/
|
|
249
163
|
readonly isSuperHDMobile: (width: number, height?: number) => boolean;
|
|
250
|
-
/**
|
|
251
|
-
* Check if tablet device
|
|
252
|
-
* @korean 태블릿여부
|
|
253
|
-
*/
|
|
164
|
+
/** Check if tablet device @korean 태블릿여부 */
|
|
254
165
|
readonly isTablet: (width: number) => boolean;
|
|
255
|
-
/**
|
|
256
|
-
* Check if desktop device
|
|
257
|
-
* @korean 데스크톱여부
|
|
258
|
-
*/
|
|
166
|
+
/** Check if desktop device @korean 데스크톱여부 */
|
|
259
167
|
readonly isDesktop: (width: number) => boolean;
|
|
260
|
-
/**
|
|
261
|
-
* Check if device has notch (iPhone X+)
|
|
262
|
-
* @korean 노치여부
|
|
263
|
-
*/
|
|
168
|
+
/** Check if device has notch (iPhone X+) @korean 노치여부 */
|
|
264
169
|
readonly hasNotch: (width: number, height: number) => boolean;
|
|
265
170
|
};
|
|
266
171
|
//# sourceMappingURL=mobileUIUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileUIUtils.d.ts","sourceRoot":"","sources":["../../src/utils/mobileUIUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,wBAAwB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED
|
|
1
|
+
{"version":3,"file":"mobileUIUtils.d.ts","sourceRoot":"","sources":["../../src/utils/mobileUIUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,wBAAwB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAM3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CA8BjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,OAAO,wBAAwB,EAC3C,aAAa,EAAE,MAAM,GACpB,MAAM,CAUR;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAChB,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,EACjB,SAAS,SAAK,GACb,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAET;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,KAAK,CAAC,aAAa,CAgBrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,OAAO,wBAAwB,EAC3C,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,MAAM,GACpB,KAAK,CAAC,aAAa,CAUrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAItE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;IAC5B,qEAAqE;oCAC9C,MAAM;IAE7B,2EAA2E;+BACzD,MAAM;IAExB;;;;;OAKG;sCACsB,MAAM,WAAU,MAAM;IAO/C,2CAA2C;+BACzB,MAAM;IAExB,6CAA6C;gCAC1B,MAAM;IAEzB,yDAAyD;+BACvC,MAAM,UAAU,MAAM;CAMhC,CAAC"}
|
|
@@ -10,15 +10,6 @@ import { getKoreanFontSize } from "../types/constants/typography.js";
|
|
|
10
10
|
* @param viewportWidth - Viewport width in pixels
|
|
11
11
|
* @returns Font size in pixels
|
|
12
12
|
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* getMobileKoreanFontSize('SMALL', 375); // 16
|
|
16
|
-
* getMobileKoreanFontSize('MEDIUM', 410); // 18
|
|
17
|
-
* getMobileKoreanFontSize('MEDIUM', 2712); // 20 (Super HD enhanced)
|
|
18
|
-
* getMobileKoreanFontSize('LARGE', 768); // 24
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @public
|
|
22
13
|
* @korean 모바일한글글꼴크기얻기
|
|
23
14
|
*/
|
|
24
15
|
function getMobileKoreanFontSize(size, viewportWidth) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileUIUtils.js","names":[],"sources":["../../src/utils/mobileUIUtils.ts"],"sourcesContent":["/**\n * Mobile UI utilities for responsive touch-optimized interfaces\n * \n * Provides helpers for touch target sizing, responsive font scaling,\n * and mobile-specific layout calculations following iOS/Android guidelines.\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are top priority and get:\n * - Enhanced touch targets (56px vs 48px)\n * - Larger Korean fonts (+10% for better readability)\n * - Optimized spacing and layout\n * - Full feature parity with desktop\n * \n * Supported Devices (Priority Order):\n * 1. Super HD Mobile (≥768px): Motorola Edge 60 Pro, Galaxy S-series\n * 2. Standard Mobile (375-767px): iPhone 12/13/14, standard Android\n * 3. Small Mobile (<375px): iPhone SE, budget devices\n * \n * @module utils/mobileUIUtils\n * @category Mobile Utilities\n * @korean 모바일UI유틸리티\n */\n\nimport { UI_DIMENSIONS, SPACING } from \"../types/constants/ui\";\nimport {\n KOREAN_MOBILE_FONT_SIZES,\n getKoreanFontSize,\n} from \"../types/constants/typography\";\n\n/**\n * Viewport size category for responsive design\n * \n * @category Mobile UI\n * @korean 뷰포트크기범주\n */\nexport type ViewportSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n/**\n * Touch target size configuration\n * \n * @category Mobile UI\n * @korean 터치타겟크기설정\n */\nexport interface TouchTargetSize {\n readonly minWidth: number;\n readonly minHeight: number;\n readonly padding: number;\n readonly spacing: number;\n}\n\n/**\n * Get viewport size category from width\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are treated as 'md' for optimal layout\n * \n * @param width - Viewport width in pixels\n * @returns Viewport size category\n * \n * @example\n * ```typescript\n * getViewportSize(375); // 'xs' (iPhone SE)\n * getViewportSize(768); // 'sm' (Standard phones, high-end mobiles start here)\n * getViewportSize(2712); // 'md' (Motorola Edge 60 Pro Super HD)\n * getViewportSize(1200); // 'lg' (Desktop)\n * ```\n * \n * @public\n * @korean 뷰포트크기얻기\n */\nexport function getViewportSize(width: number): ViewportSize {\n if (width < 375) return \"xs\"; // Extra small phones\n if (width < 768) return \"sm\"; // Standard phones\n if (width < 1024) return \"md\"; // High-end mobile (Super HD), tablets\n if (width < 1440) return \"lg\"; // Small desktop\n return \"xl\"; // Large desktop\n}\n\n/**\n * Get touch-optimized button size configuration\n * Ensures minimum 48px touch targets per iOS/Android guidelines\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) get enhanced touch targets (56px)\n * for better precision on high-resolution displays\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width for fine-tuning\n * @returns Touch target size configuration\n * \n * @example\n * ```typescript\n * const buttonSize = getTouchTargetSize(true, 375);\n * // { minWidth: 48, minHeight: 48, padding: 12, spacing: 8 }\n * \n * const superHDButtonSize = getTouchTargetSize(true, 2712);\n * // { minWidth: 56, minHeight: 56, padding: 16, spacing: 12 }\n * ```\n * \n * @public\n * @korean 터치타겟크기얻기\n */\nexport function getTouchTargetSize(\n isMobile: boolean,\n viewportWidth?: number\n): TouchTargetSize {\n if (!isMobile) {\n return {\n minWidth: 120,\n minHeight: 44,\n padding: SPACING.MD,\n spacing: SPACING.MD,\n };\n }\n\n const width = viewportWidth ?? 375;\n const isExtraSmall = width < 360;\n const isSuperHD = width >= 768; // High-end mobile (Motorola Edge 60 Pro, etc.)\n\n // Super HD devices get enhanced touch targets for better precision\n if (isSuperHD) {\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n padding: SPACING.MD,\n spacing: SPACING.COMPACT,\n };\n }\n\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n padding: isExtraSmall ? SPACING.SM : SPACING.COMPACT,\n spacing: UI_DIMENSIONS.TOUCH_TARGET_SPACING,\n };\n}\n\n/**\n * Get responsive Korean font size for mobile\n * Ensures minimum 16px for body text on mobile\n * \n * PRIORITY: High-end mobile (Super HD, 2K+) get enhanced font sizes for better readability\n * \n * @param size - Size category ('SMALL', 'MEDIUM', 'LARGE')\n * @param viewportWidth - Viewport width in pixels\n * @returns Font size in pixels\n * \n * @example\n * ```typescript\n * getMobileKoreanFontSize('SMALL', 375); // 16\n * getMobileKoreanFontSize('MEDIUM', 410); // 18\n * getMobileKoreanFontSize('MEDIUM', 2712); // 20 (Super HD enhanced)\n * getMobileKoreanFontSize('LARGE', 768); // 24\n * ```\n * \n * @public\n * @korean 모바일한글글꼴크기얻기\n */\nexport function getMobileKoreanFontSize(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n viewportWidth: number\n): number {\n const fontSize = getKoreanFontSize(size, viewportWidth);\n \n // Super HD mobile devices (≥768px) get enhanced font sizes\n // for better readability on high-resolution displays\n if (viewportWidth >= 768) {\n return Math.ceil(fontSize * 1.1); // 10% larger for Super HD\n }\n \n return fontSize;\n}\n\n/**\n * Get responsive spacing value\n * Scales spacing based on viewport size\n * \n * @param baseSpacing - Base spacing value from SPACING constant\n * @param isMobile - Whether on mobile device\n * @returns Scaled spacing in pixels\n * \n * @example\n * ```typescript\n * getResponsiveSpacing(SPACING.MD, true); // 12 (COMPACT on mobile)\n * getResponsiveSpacing(SPACING.MD, false); // 16 (original)\n * ```\n * \n * @public\n * @korean 반응형간격얻기\n */\nexport function getResponsiveSpacing(\n baseSpacing: number,\n isMobile: boolean\n): number {\n return isMobile ? Math.max(SPACING.SM, baseSpacing * 0.75) : baseSpacing;\n}\n\n/**\n * Calculate responsive panel width\n * Ensures panels fit within viewport with proper margins\n * \n * @param viewportWidth - Viewport width in pixels\n * @param isMobile - Whether on mobile device\n * @param minMargin - Minimum margin on each side (default: 20px)\n * @returns Panel width in pixels\n * \n * @example\n * ```typescript\n * getResponsivePanelWidth(375, true); // ~335px (375 - 40 margin)\n * getResponsivePanelWidth(1200, false); // ~400px (max width applied)\n * ```\n * \n * @public\n * @korean 반응형패널폭얻기\n */\nexport function getResponsivePanelWidth(\n viewportWidth: number,\n isMobile: boolean,\n minMargin = 20\n): number {\n if (!isMobile) {\n return Math.min(400, viewportWidth - minMargin * 2);\n }\n\n // Mobile: use most of screen width\n return Math.min(viewportWidth - minMargin * 2, 360);\n}\n\n/**\n * Check if viewport is in landscape orientation\n * \n * @param viewportWidth - Viewport width in pixels\n * @param viewportHeight - Viewport height in pixels\n * @returns Whether in landscape orientation\n * \n * @example\n * ```typescript\n * isLandscape(812, 375); // true (iPhone X landscape)\n * isLandscape(375, 812); // false (iPhone X portrait)\n * ```\n * \n * @public\n * @korean 가로모드여부\n */\nexport function isLandscape(\n viewportWidth: number,\n viewportHeight: number\n): boolean {\n return viewportWidth > viewportHeight;\n}\n\n/**\n * Get responsive button styles for touch optimization\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width\n * @returns CSS properties for button\n * \n * @example\n * ```typescript\n * const buttonStyles = getResponsiveButtonStyles(true, 375);\n * // {\n * // minWidth: '48px',\n * // minHeight: '48px',\n * // padding: '12px',\n * // fontSize: '16px',\n * // ...\n * // }\n * ```\n * \n * @public\n * @korean 반응형버튼스타일얻기\n */\nexport function getResponsiveButtonStyles(\n isMobile: boolean,\n viewportWidth?: number\n): React.CSSProperties {\n const touchTarget = getTouchTargetSize(isMobile, viewportWidth);\n const fontSize = isMobile\n ? getMobileKoreanFontSize(\"SMALL\", viewportWidth ?? 375)\n : 16;\n\n return {\n minWidth: `${touchTarget.minWidth}px`,\n minHeight: `${touchTarget.minHeight}px`,\n padding: `${touchTarget.padding}px`,\n fontSize: `${fontSize}px`,\n lineHeight: \"1.4\",\n cursor: \"pointer\",\n userSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n };\n}\n\n/**\n * Get responsive text styles with proper Korean font sizing\n * \n * @param size - Font size category\n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Viewport width in pixels\n * @returns CSS properties for text\n * \n * @example\n * ```typescript\n * const textStyles = getResponsiveTextStyles('MEDIUM', true, 375);\n * // {\n * // fontSize: '18px',\n * // lineHeight: '1.5',\n * // letterSpacing: '0.02em',\n * // }\n * ```\n * \n * @public\n * @korean 반응형텍스트스타일얻기\n */\nexport function getResponsiveTextStyles(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n isMobile: boolean,\n viewportWidth: number\n): React.CSSProperties {\n const fontSize = isMobile\n ? getMobileKoreanFontSize(size, viewportWidth)\n : KOREAN_MOBILE_FONT_SIZES[size].regular;\n\n return {\n fontSize: `${fontSize}px`,\n lineHeight: isMobile ? \"1.5\" : \"1.4\",\n letterSpacing: \"0.02em\",\n };\n}\n\n/**\n * Calculate minimum spacing between interactive elements\n * Ensures adequate spacing for touch accuracy\n * \n * @param isMobile - Whether on mobile device\n * @returns Minimum spacing in pixels\n * \n * @example\n * ```typescript\n * getMinimumInteractiveSpacing(true); // 8px (mobile)\n * getMinimumInteractiveSpacing(false); // 12px (desktop)\n * ```\n * \n * @public\n * @korean 최소상호작용간격얻기\n */\nexport function getMinimumInteractiveSpacing(isMobile: boolean): number {\n return isMobile\n ? UI_DIMENSIONS.TOUCH_TARGET_SPACING\n : SPACING.COMPACT;\n}\n\n/**\n * Viewport detection utilities\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are explicitly supported\n * \n * @category Mobile UI\n * @korean 뷰포트감지\n */\nexport const ViewportDetection = {\n /**\n * Check if iPhone SE or similar small device\n * @korean iPhone SE여부\n */\n isSmallMobile: (width: number) => width <= 375,\n\n /**\n * Check if standard mobile device (excluding high-end)\n * @korean 표준모바일여부\n */\n isMobile: (width: number) => width < 768,\n\n /**\n * Check if high-end mobile device (Super HD, 2K+)\n * Uses height + DPR to distinguish phones from tablets\n * High-end phones: short side 400-600px, long side >=800px, DPR >=2\n * @korean 고급모바일여부\n */\n isSuperHDMobile: (width: number, height: number = window.innerHeight) => {\n const shortSide = Math.min(width, height);\n const longSide = Math.max(width, height);\n const dpr = window.devicePixelRatio || 1;\n return shortSide >= 400 && shortSide <= 600 && longSide >= 800 && dpr >= 2;\n },\n\n /**\n * Check if tablet device\n * @korean 태블릿여부\n */\n isTablet: (width: number) => width >= 768 && width < 1024,\n\n /**\n * Check if desktop device\n * @korean 데스크톱여부\n */\n isDesktop: (width: number) => width >= 1024,\n\n /**\n * Check if device has notch (iPhone X+)\n * @korean 노치여부\n */\n hasNotch: (width: number, height: number) =>\n (width === 375 && height === 812) || // iPhone X, XS, 11 Pro\n (width === 414 && height === 896) || // iPhone XR, XS Max, 11, 11 Pro Max\n (width === 390 && height === 844) || // iPhone 12, 12 Pro, 13, 13 Pro, 14\n (width === 393 && height === 852) || // iPhone 14 Pro\n (width === 428 && height === 926), // iPhone 12/13/14 Pro Max\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2JA,SAAgB,wBACd,MACA,eACQ;CACR,MAAM,WAAW,kBAAkB,MAAM,cAAc;CAIvD,IAAI,iBAAiB,KACnB,OAAO,KAAK,KAAK,WAAW,IAAI;CAGlC,OAAO"}
|
|
1
|
+
{"version":3,"file":"mobileUIUtils.js","names":[],"sources":["../../src/utils/mobileUIUtils.ts"],"sourcesContent":["/**\n * Mobile UI utilities for responsive touch-optimized interfaces\n * \n * Provides helpers for touch target sizing, responsive font scaling,\n * and mobile-specific layout calculations following iOS/Android guidelines.\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are top priority and get:\n * - Enhanced touch targets (56px vs 48px)\n * - Larger Korean fonts (+10% for better readability)\n * - Optimized spacing and layout\n * - Full feature parity with desktop\n * \n * Supported Devices (Priority Order):\n * 1. Super HD Mobile (≥768px): Motorola Edge 60 Pro, Galaxy S-series\n * 2. Standard Mobile (375-767px): iPhone 12/13/14, standard Android\n * 3. Small Mobile (<375px): iPhone SE, budget devices\n * \n * @module utils/mobileUIUtils\n * @category Mobile Utilities\n * @korean 모바일UI유틸리티\n */\n\nimport { UI_DIMENSIONS, SPACING } from \"../types/constants/ui\";\nimport {\n KOREAN_MOBILE_FONT_SIZES,\n getKoreanFontSize,\n} from \"../types/constants/typography\";\n\n/**\n * Viewport size category for responsive design\n * \n * @category Mobile UI\n * @korean 뷰포트크기범주\n */\nexport type ViewportSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n/**\n * Touch target size configuration\n * \n * @category Mobile UI\n * @korean 터치타겟크기설정\n */\nexport interface TouchTargetSize {\n readonly minWidth: number;\n readonly minHeight: number;\n readonly padding: number;\n readonly spacing: number;\n}\n\n/**\n * Get viewport size category from width\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are treated as 'md' for optimal layout\n * \n * @param width - Viewport width in pixels\n * @returns Viewport size category\n * \n * @korean 뷰포트크기얻기\n */\nexport function getViewportSize(width: number): ViewportSize {\n if (width < 375) return \"xs\"; // Extra small phones\n if (width < 768) return \"sm\"; // Standard phones\n if (width < 1024) return \"md\"; // High-end mobile (Super HD), tablets\n if (width < 1440) return \"lg\"; // Small desktop\n return \"xl\"; // Large desktop\n}\n\n/**\n * Get touch-optimized button size configuration\n * Ensures minimum 48px touch targets per iOS/Android guidelines\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) get enhanced touch targets (56px)\n * for better precision on high-resolution displays\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width for fine-tuning\n * @returns Touch target size configuration\n * \n * @korean 터치타겟크기얻기\n */\nexport function getTouchTargetSize(\n isMobile: boolean,\n viewportWidth?: number\n): TouchTargetSize {\n if (!isMobile) {\n return {\n minWidth: 120,\n minHeight: 44,\n padding: SPACING.MD,\n spacing: SPACING.MD,\n };\n }\n\n const width = viewportWidth ?? 375;\n const isExtraSmall = width < 360;\n const isSuperHD = width >= 768; // High-end mobile (Motorola Edge 60 Pro, etc.)\n\n // Super HD devices get enhanced touch targets for better precision\n if (isSuperHD) {\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_COMFORTABLE,\n padding: SPACING.MD,\n spacing: SPACING.COMPACT,\n };\n }\n\n return {\n minWidth: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n minHeight: UI_DIMENSIONS.TOUCH_TARGET_MIN,\n padding: isExtraSmall ? SPACING.SM : SPACING.COMPACT,\n spacing: UI_DIMENSIONS.TOUCH_TARGET_SPACING,\n };\n}\n\n/**\n * Get responsive Korean font size for mobile\n * Ensures minimum 16px for body text on mobile\n * \n * PRIORITY: High-end mobile (Super HD, 2K+) get enhanced font sizes for better readability\n * \n * @param size - Size category ('SMALL', 'MEDIUM', 'LARGE')\n * @param viewportWidth - Viewport width in pixels\n * @returns Font size in pixels\n * \n * @korean 모바일한글글꼴크기얻기\n */\nexport function getMobileKoreanFontSize(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n viewportWidth: number\n): number {\n const fontSize = getKoreanFontSize(size, viewportWidth);\n \n // Super HD mobile devices (≥768px) get enhanced font sizes\n // for better readability on high-resolution displays\n if (viewportWidth >= 768) {\n return Math.ceil(fontSize * 1.1); // 10% larger for Super HD\n }\n \n return fontSize;\n}\n\n/**\n * Get responsive spacing value\n * Scales spacing based on viewport size\n * \n * @param baseSpacing - Base spacing value from SPACING constant\n * @param isMobile - Whether on mobile device\n * @returns Scaled spacing in pixels\n * \n * @korean 반응형간격얻기\n */\nexport function getResponsiveSpacing(\n baseSpacing: number,\n isMobile: boolean\n): number {\n return isMobile ? Math.max(SPACING.SM, baseSpacing * 0.75) : baseSpacing;\n}\n\n/**\n * Calculate responsive panel width\n * Ensures panels fit within viewport with proper margins\n * \n * @param viewportWidth - Viewport width in pixels\n * @param isMobile - Whether on mobile device\n * @param minMargin - Minimum margin on each side (default: 20px)\n * @returns Panel width in pixels\n * \n * @korean 반응형패널폭얻기\n */\nexport function getResponsivePanelWidth(\n viewportWidth: number,\n isMobile: boolean,\n minMargin = 20\n): number {\n if (!isMobile) {\n return Math.min(400, viewportWidth - minMargin * 2);\n }\n\n // Mobile: use most of screen width\n return Math.min(viewportWidth - minMargin * 2, 360);\n}\n\n/**\n * Check if viewport is in landscape orientation\n * \n * @param viewportWidth - Viewport width in pixels\n * @param viewportHeight - Viewport height in pixels\n * @returns Whether in landscape orientation\n * \n * @korean 가로모드여부\n */\nexport function isLandscape(\n viewportWidth: number,\n viewportHeight: number\n): boolean {\n return viewportWidth > viewportHeight;\n}\n\n/**\n * Get responsive button styles for touch optimization\n * \n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Optional viewport width\n * @returns CSS properties for button\n * \n * @korean 반응형버튼스타일얻기\n */\nexport function getResponsiveButtonStyles(\n isMobile: boolean,\n viewportWidth?: number\n): React.CSSProperties {\n const touchTarget = getTouchTargetSize(isMobile, viewportWidth);\n const fontSize = isMobile\n ? getMobileKoreanFontSize(\"SMALL\", viewportWidth ?? 375)\n : 16;\n\n return {\n minWidth: `${touchTarget.minWidth}px`,\n minHeight: `${touchTarget.minHeight}px`,\n padding: `${touchTarget.padding}px`,\n fontSize: `${fontSize}px`,\n lineHeight: \"1.4\",\n cursor: \"pointer\",\n userSelect: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n };\n}\n\n/**\n * Get responsive text styles with proper Korean font sizing\n * \n * @param size - Font size category\n * @param isMobile - Whether on mobile device\n * @param viewportWidth - Viewport width in pixels\n * @returns CSS properties for text\n * \n * @korean 반응형텍스트스타일얻기\n */\nexport function getResponsiveTextStyles(\n size: keyof typeof KOREAN_MOBILE_FONT_SIZES,\n isMobile: boolean,\n viewportWidth: number\n): React.CSSProperties {\n const fontSize = isMobile\n ? getMobileKoreanFontSize(size, viewportWidth)\n : KOREAN_MOBILE_FONT_SIZES[size].regular;\n\n return {\n fontSize: `${fontSize}px`,\n lineHeight: isMobile ? \"1.5\" : \"1.4\",\n letterSpacing: \"0.02em\",\n };\n}\n\n/**\n * Calculate minimum spacing between interactive elements\n * Ensures adequate spacing for touch accuracy\n * \n * @param isMobile - Whether on mobile device\n * @returns Minimum spacing in pixels\n * \n * @korean 최소상호작용간격얻기\n */\nexport function getMinimumInteractiveSpacing(isMobile: boolean): number {\n return isMobile\n ? UI_DIMENSIONS.TOUCH_TARGET_SPACING\n : SPACING.COMPACT;\n}\n\n/**\n * Viewport detection utilities\n * \n * PRIORITY: High-end mobile devices (Super HD, 2K+) are explicitly supported\n * \n * @category Mobile UI\n * @korean 뷰포트감지\n */\nexport const ViewportDetection = {\n /** Check if iPhone SE or similar small device @korean iPhone SE여부 */\n isSmallMobile: (width: number) => width <= 375,\n\n /** Check if standard mobile device (excluding high-end) @korean 표준모바일여부 */\n isMobile: (width: number) => width < 768,\n\n /**\n * Check if high-end mobile device (Super HD, 2K+)\n * Uses height + DPR to distinguish phones from tablets\n * High-end phones: short side 400-600px, long side >=800px, DPR >=2\n * @korean 고급모바일여부\n */\n isSuperHDMobile: (width: number, height: number = window.innerHeight) => {\n const shortSide = Math.min(width, height);\n const longSide = Math.max(width, height);\n const dpr = window.devicePixelRatio || 1;\n return shortSide >= 400 && shortSide <= 600 && longSide >= 800 && dpr >= 2;\n },\n\n /** Check if tablet device @korean 태블릿여부 */\n isTablet: (width: number) => width >= 768 && width < 1024,\n\n /** Check if desktop device @korean 데스크톱여부 */\n isDesktop: (width: number) => width >= 1024,\n\n /** Check if device has notch (iPhone X+) @korean 노치여부 */\n hasNotch: (width: number, height: number) =>\n (width === 375 && height === 812) || // iPhone X, XS, 11 Pro\n (width === 414 && height === 896) || // iPhone XR, XS Max, 11, 11 Pro Max\n (width === 390 && height === 844) || // iPhone 12, 12 Pro, 13, 13 Pro, 14\n (width === 393 && height === 852) || // iPhone 14 Pro\n (width === 428 && height === 926), // iPhone 12/13/14 Pro Max\n} as const;\n"],"mappings":";;;;;;;;;;;;;;AA+HA,SAAgB,wBACd,MACA,eACQ;CACR,MAAM,WAAW,kBAAkB,MAAM,cAAc;CAIvD,IAAI,iBAAiB,KACnB,OAAO,KAAK,KAAK,WAAW,IAAI;CAGlC,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physicalAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/physicalAttributeValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBpB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnE;AAoCD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"physicalAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/physicalAttributeValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBpB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnE;AAoCD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,gBAAgB,CA8HlB;AAUD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,kBAAkB,GACxB,IAAI,CA2BN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player3DHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/player3DHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAgFhC;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,cAAc,GACxB,eAAe,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAK7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"player3DHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/player3DHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAgFhC;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,cAAc,GACxB,eAAe,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAK7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CAiBvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,GACL,oBAAoB,CAoCtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player3DHelpers.js","names":[],"sources":["../../src/utils/player3DHelpers.ts"],"sourcesContent":["/**\n * Utility functions for Player3D component integration\n *\n * Converts PlayerState from combat system to Player3DUnifiedProps for rendering\n * with SkeletalPlayer3D (28-bone articulated body model).\n *\n * @module utils/player3DHelpers\n * @category Utilities\n * @korean 플레이어3D도우미\n */\n\nimport type { PlayerState } from \"../systems\";\nimport type { AnimationState } from \"../systems/animation/core/types\";\nimport type {\n BalanceState,\n Player3DUnifiedProps,\n PlayerAnimation,\n} from \"../types/player-visual\";\n\n/**\n * Static mapping from AnimationState to PlayerAnimation\n *\n * Stance guard animations map to \"idle\" since SkeletalPlayer3D\n * will handle the stance-specific guard rendering.\n * Tactical steps now use dedicated step animations with guard maintenance.\n *\n * @korean 애니메이션상태맵\n */\nconst ANIMATION_STATE_MAP: Record<AnimationState, PlayerAnimation> = {\n idle: \"idle\",\n walk: \"walk\",\n run: \"run\", // Now uses dedicated RUN_ANIMATION from BasicAnimations\n attack: \"attack\",\n defend: \"defend\",\n // Defensive animations (방어 애니메이션) - map to defend with variations handled by skeletal system\n defend_block_success: \"defend\",\n defend_parry: \"defend\",\n defend_guard_break: \"defend\",\n defend_recovery: \"defend\",\n hit: \"hit\",\n stance_change: \"stance_change\",\n stance_side_switch: \"stance_change\", // Map to stance_change animation (mirroring guard)\n ko: \"death\", // Map ko to death\n // Stance guard animations map to stance-specific idle animations with proper biomechanics\n stance_guard_geon: \"stance_geon\",\n stance_guard_tae: \"stance_tae\",\n stance_guard_li: \"stance_li\",\n stance_guard_jin: \"stance_jin\",\n stance_guard_son: \"stance_son\",\n stance_guard_gam: \"stance_gam\",\n stance_guard_gan: \"stance_gan\",\n stance_guard_gon: \"stance_gon\",\n // Tactical step animations now map to dedicated step animations\n step_forward: \"step_forward\",\n step_back: \"step_back\",\n step_left: \"step_left\",\n step_right: \"step_right\",\n step_forward_left: \"step_forward_left\",\n step_forward_right: \"step_forward_right\",\n step_back_left: \"step_back_left\",\n step_back_right: \"step_back_right\",\n // Fall animations: Now using dedicated FALL_*_ANIMATION from BasicAnimations\n fall_forward: \"fall_forward\",\n fall_backward: \"fall_backward\",\n fall_side_left: \"fall_side_left\",\n fall_side_right: \"fall_side_right\",\n // Ground states map to idle with minimal movement\n ground_prone: \"idle\",\n ground_supine: \"idle\",\n ground_side_left: \"idle\",\n ground_side_right: \"idle\",\n // 180-degree turn animations map to stance_change (body pivot animation)\n turn_left: \"stance_change\",\n turn_right: \"stance_change\",\n // Footwork patterns (보법) - Korean martial arts specialized footwork\n footwork_circular_left: \"walk\", // Lateral movement\n footwork_circular_right: \"walk\",\n footwork_pivot_left: \"walk\", // Rotation movement\n footwork_pivot_right: \"walk\",\n footwork_slide_forward: \"walk\", // Sliding movement\n footwork_slide_back: \"walk\",\n footwork_slide_left: \"walk\",\n footwork_slide_right: \"walk\",\n footwork_shuffle: \"walk\", // Quick adjustment\n // Recovery animations (기상 애니메이션) - Getting up from ground states\n // Map to idle for now, custom 3D recovery animations will be added in future\n recovery_prone_standup: \"idle\",\n recovery_supine_standup: \"idle\",\n recovery_roll: \"walk\", // Rolling motion approximated by walk\n recovery_defensive: \"defend\", // Guarded getup approximated by defend\n // Grappling animations (잡기 애니메이션) - map to attack/defend based on action\n grapple_entry: \"attack\", // Initiating grab uses attack animation\n grapple_control: \"defend\", // Maintaining control uses defensive stance\n grapple_struggle: \"hit\", // Struggling escape uses hit reaction\n grapple_escape: \"attack\", // Successful escape uses attack burst\n};\n\n/**\n * Convert AnimationState to PlayerAnimation\n *\n * Maps the animation system's state types to SkeletalPlayer3D's animation types.\n *\n * @param animState - Animation state from the animation system\n * @returns Corresponding PlayerAnimation type\n * @korean 애니메이션상태변환\n */\nexport function animationStateToPlayerAnimation(\n animState: AnimationState\n): PlayerAnimation {\n return ANIMATION_STATE_MAP[animState];\n}\n\n/**\n * Convert balance number (0-100) to BalanceState enum\n *\n * @param balance - Balance value from PlayerState (0-100)\n * @returns BalanceState enum value\n * @korean 균형상태변환\n */\nexport function getBalanceState(balance: number): BalanceState {\n if (balance >= 80) return \"READY\";\n if (balance >= 50) return \"SHAKEN\";\n if (balance >= 20) return \"VULNERABLE\";\n return \"HELPLESS\";\n}\n\n/**\n * Get current animation state from PlayerState\n *\n * Returns stance-specific idle animations when player is in idle/recovering state.\n * This ensures each trigram stance displays the correct guard pose with proper\n * leg positioning and breathing animation.\n *\n * @param player - Current player state\n * @returns PlayerAnimation enum value (stance-specific for idle states)\n * @korean 애니메이션상태가져오기\n */\nexport function getPlayerAnimation(player: PlayerState): PlayerAnimation {\n if (player.isStunned) return \"hit\";\n if (player.isBlocking) return \"defend\";\n if (player.isCountering) return \"counter\";\n\n // Check combat state (CombatState enum values are lowercase strings)\n switch (player.combatState) {\n case \"attacking\":\n return \"attack\";\n case \"defending\":\n return \"defend\";\n case \"stunned\":\n return \"hit\";\n case \"recovering\":\n case \"idle\":\n default:\n // Use stance-specific idle animation for proper guard pose\n // This ensures correct leg positioning for each trigram stance\n return `stance_${player.currentStance}` as PlayerAnimation;\n }\n}\n\n/**\n * Converts PlayerState to Player3DUnifiedProps for visual rendering.\n *\n * Note: This function converts base PlayerState properties used in combat.\n * Training-specific stats (misses, accuracy, comboCount) are optional in PlayerState\n * and handled separately in training contexts.\n *\n * @param player - The player state to convert\n * @param position - 3D position [x, y, z]\n * @param rotation - Rotation in radians\n * @param options - Display and behavior options\n * @returns Props for SkeletalPlayer3D component (28-bone articulated body model)\n * @korean 플레이어상태변환\n *\n * @example\n * ```tsx\n * const playerProps = convertPlayerStateToProps(\n * playerState,\n * [-3, 0, 0],\n * 0,\n * { isMobile: false, showVitalPoints: false }\n * );\n *\n * <SkeletalPlayer3D {...playerProps} />\n * ```\n */\nexport function convertPlayerStateToProps(\n player: PlayerState,\n position: [number, number, number],\n rotation: number,\n options: {\n readonly isMobile?: boolean;\n readonly facing?: \"left\" | \"right\";\n readonly scale?: number;\n readonly showDetails?: boolean;\n readonly showHealthBar?: boolean;\n readonly showStanceIndicator?: boolean;\n readonly onAnimationComplete?: () => void;\n // Facial expression options - 얼굴 표정 옵션\n readonly enableFacialExpressions?: boolean;\n readonly enableEyeTracking?: boolean;\n readonly opponentPosition?: [number, number, number];\n } = {}\n): Player3DUnifiedProps {\n return {\n playerId: player.id,\n archetype: player.archetype,\n stance: player.currentStance,\n position,\n rotation,\n\n // Health and resources\n health: player.health,\n maxHealth: player.maxHealth,\n stamina: player.stamina,\n ki: player.ki,\n\n // Combat states\n pain: player.pain,\n balance: getBalanceState(player.balance),\n consciousness: player.consciousness,\n\n // Combat flags\n isBlocking: player.isBlocking,\n isStunned: player.isStunned,\n isCountering: player.isCountering,\n\n // Animation (derived from combat state)\n currentAnimation: getPlayerAnimation(player),\n\n // Display options\n name: player.name,\n isMobile: options.isMobile ?? false,\n facing: options.facing ?? \"right\",\n scale: options.scale ?? 1,\n showDetails: options.showDetails,\n showHealthBar: options.showHealthBar,\n showStanceIndicator: options.showStanceIndicator,\n onAnimationComplete: options.onAnimationComplete,\n\n // Facial expression options - 얼굴 표정 옵션\n enableFacialExpressions: options.enableFacialExpressions ?? false,\n enableEyeTracking: options.enableEyeTracking ?? true,\n opponentPosition: options.opponentPosition,\n };\n}\n"],"mappings":";;;;;;;;;;AA4BA,IAAM,sBAA+D;CACnE,MAAM;CACN,MAAM;CACN,KAAK;CACL,QAAQ;CACR,QAAQ;CAER,sBAAsB;CACtB,cAAc;CACd,oBAAoB;CACpB,iBAAiB;CACjB,KAAK;CACL,eAAe;CACf,oBAAoB;CACpB,IAAI;CAEJ,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAElB,cAAc;CACd,WAAW;CACX,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CAEnB,WAAW;CACX,YAAY;CAEZ,wBAAwB;CACxB,yBAAyB;CACzB,qBAAqB;CACrB,sBAAsB;CACtB,wBAAwB;CACxB,qBAAqB;CACrB,qBAAqB;CACrB,sBAAsB;CACtB,kBAAkB;CAGlB,wBAAwB;CACxB,yBAAyB;CACzB,eAAe;CACf,oBAAoB;CAEpB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CACjB;;;;;;;;;;AAWD,SAAgB,gCACd,WACiB;CACjB,OAAO,oBAAoB;;;;;;;;;AAU7B,SAAgB,gBAAgB,SAA+B;CAC7D,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,OAAO;;;;;;;;;;;;;AAcT,SAAgB,mBAAmB,QAAsC;CACvE,IAAI,OAAO,WAAW,OAAO;CAC7B,IAAI,OAAO,YAAY,OAAO;CAC9B,IAAI,OAAO,cAAc,OAAO;CAGhC,QAAQ,OAAO,aAAf;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EAGT,SAGE,OAAO,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B9B,SAAgB,0BACd,QACA,UACA,UACA,UAYI,EAAE,EACgB;CACtB,OAAO;EACL,UAAU,OAAO;EACjB,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf;EACA;EAGA,QAAQ,OAAO;EACf,WAAW,OAAO;EAClB,SAAS,OAAO;EAChB,IAAI,OAAO;EAGX,MAAM,OAAO;EACb,SAAS,gBAAgB,OAAO,QAAQ;EACxC,eAAe,OAAO;EAGtB,YAAY,OAAO;EACnB,WAAW,OAAO;EAClB,cAAc,OAAO;EAGrB,kBAAkB,mBAAmB,OAAO;EAG5C,MAAM,OAAO;EACb,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ,UAAU;EAC1B,OAAO,QAAQ,SAAS;EACxB,aAAa,QAAQ;EACrB,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B,qBAAqB,QAAQ;EAG7B,yBAAyB,QAAQ,2BAA2B;EAC5D,mBAAmB,QAAQ,qBAAqB;EAChD,kBAAkB,QAAQ;EAC3B"}
|
|
1
|
+
{"version":3,"file":"player3DHelpers.js","names":[],"sources":["../../src/utils/player3DHelpers.ts"],"sourcesContent":["/**\n * Utility functions for Player3D component integration\n *\n * Converts PlayerState from combat system to Player3DUnifiedProps for rendering\n * with SkeletalPlayer3D (28-bone articulated body model).\n *\n * @module utils/player3DHelpers\n * @category Utilities\n * @korean 플레이어3D도우미\n */\n\nimport type { PlayerState } from \"../systems\";\nimport type { AnimationState } from \"../systems/animation/core/types\";\nimport type {\n BalanceState,\n Player3DUnifiedProps,\n PlayerAnimation,\n} from \"../types/player-visual\";\n\n/**\n * Static mapping from AnimationState to PlayerAnimation\n *\n * Stance guard animations map to \"idle\" since SkeletalPlayer3D\n * will handle the stance-specific guard rendering.\n * Tactical steps now use dedicated step animations with guard maintenance.\n *\n * @korean 애니메이션상태맵\n */\nconst ANIMATION_STATE_MAP: Record<AnimationState, PlayerAnimation> = {\n idle: \"idle\",\n walk: \"walk\",\n run: \"run\", // Now uses dedicated RUN_ANIMATION from BasicAnimations\n attack: \"attack\",\n defend: \"defend\",\n // Defensive animations (방어 애니메이션) - map to defend with variations handled by skeletal system\n defend_block_success: \"defend\",\n defend_parry: \"defend\",\n defend_guard_break: \"defend\",\n defend_recovery: \"defend\",\n hit: \"hit\",\n stance_change: \"stance_change\",\n stance_side_switch: \"stance_change\", // Map to stance_change animation (mirroring guard)\n ko: \"death\", // Map ko to death\n // Stance guard animations map to stance-specific idle animations with proper biomechanics\n stance_guard_geon: \"stance_geon\",\n stance_guard_tae: \"stance_tae\",\n stance_guard_li: \"stance_li\",\n stance_guard_jin: \"stance_jin\",\n stance_guard_son: \"stance_son\",\n stance_guard_gam: \"stance_gam\",\n stance_guard_gan: \"stance_gan\",\n stance_guard_gon: \"stance_gon\",\n // Tactical step animations now map to dedicated step animations\n step_forward: \"step_forward\",\n step_back: \"step_back\",\n step_left: \"step_left\",\n step_right: \"step_right\",\n step_forward_left: \"step_forward_left\",\n step_forward_right: \"step_forward_right\",\n step_back_left: \"step_back_left\",\n step_back_right: \"step_back_right\",\n // Fall animations: Now using dedicated FALL_*_ANIMATION from BasicAnimations\n fall_forward: \"fall_forward\",\n fall_backward: \"fall_backward\",\n fall_side_left: \"fall_side_left\",\n fall_side_right: \"fall_side_right\",\n // Ground states map to idle with minimal movement\n ground_prone: \"idle\",\n ground_supine: \"idle\",\n ground_side_left: \"idle\",\n ground_side_right: \"idle\",\n // 180-degree turn animations map to stance_change (body pivot animation)\n turn_left: \"stance_change\",\n turn_right: \"stance_change\",\n // Footwork patterns (보법) - Korean martial arts specialized footwork\n footwork_circular_left: \"walk\", // Lateral movement\n footwork_circular_right: \"walk\",\n footwork_pivot_left: \"walk\", // Rotation movement\n footwork_pivot_right: \"walk\",\n footwork_slide_forward: \"walk\", // Sliding movement\n footwork_slide_back: \"walk\",\n footwork_slide_left: \"walk\",\n footwork_slide_right: \"walk\",\n footwork_shuffle: \"walk\", // Quick adjustment\n // Recovery animations (기상 애니메이션) - Getting up from ground states\n // Map to idle for now, custom 3D recovery animations will be added in future\n recovery_prone_standup: \"idle\",\n recovery_supine_standup: \"idle\",\n recovery_roll: \"walk\", // Rolling motion approximated by walk\n recovery_defensive: \"defend\", // Guarded getup approximated by defend\n // Grappling animations (잡기 애니메이션) - map to attack/defend based on action\n grapple_entry: \"attack\", // Initiating grab uses attack animation\n grapple_control: \"defend\", // Maintaining control uses defensive stance\n grapple_struggle: \"hit\", // Struggling escape uses hit reaction\n grapple_escape: \"attack\", // Successful escape uses attack burst\n};\n\n/**\n * Convert AnimationState to PlayerAnimation\n *\n * Maps the animation system's state types to SkeletalPlayer3D's animation types.\n *\n * @param animState - Animation state from the animation system\n * @returns Corresponding PlayerAnimation type\n * @korean 애니메이션상태변환\n */\nexport function animationStateToPlayerAnimation(\n animState: AnimationState\n): PlayerAnimation {\n return ANIMATION_STATE_MAP[animState];\n}\n\n/**\n * Convert balance number (0-100) to BalanceState enum\n *\n * @param balance - Balance value from PlayerState (0-100)\n * @returns BalanceState enum value\n * @korean 균형상태변환\n */\nexport function getBalanceState(balance: number): BalanceState {\n if (balance >= 80) return \"READY\";\n if (balance >= 50) return \"SHAKEN\";\n if (balance >= 20) return \"VULNERABLE\";\n return \"HELPLESS\";\n}\n\n/**\n * Get current animation state from PlayerState\n *\n * Returns stance-specific idle animations when player is in idle/recovering state.\n * This ensures each trigram stance displays the correct guard pose with proper\n * leg positioning and breathing animation.\n *\n * @param player - Current player state\n * @returns PlayerAnimation enum value (stance-specific for idle states)\n * @korean 애니메이션상태가져오기\n */\nexport function getPlayerAnimation(player: PlayerState): PlayerAnimation {\n if (player.isStunned) return \"hit\";\n if (player.isBlocking) return \"defend\";\n if (player.isCountering) return \"counter\";\n\n switch (player.combatState) {\n case \"attacking\":\n return \"attack\";\n case \"defending\":\n return \"defend\";\n case \"stunned\":\n return \"hit\";\n case \"recovering\":\n case \"idle\":\n default:\n return `stance_${player.currentStance}` as PlayerAnimation;\n }\n}\n\n/**\n * Converts PlayerState to Player3DUnifiedProps for visual rendering.\n *\n * Note: This function converts base PlayerState properties used in combat.\n * Training-specific stats (misses, accuracy, comboCount) are optional in PlayerState\n * and handled separately in training contexts.\n *\n * @param player - The player state to convert\n * @param position - 3D position [x, y, z]\n * @param rotation - Rotation in radians\n * @param options - Display and behavior options\n * @returns Props for SkeletalPlayer3D component (28-bone articulated body model)\n * @korean 플레이어상태변환\n *\n * @example\n * ```tsx\n * const playerProps = convertPlayerStateToProps(\n * playerState,\n * [-3, 0, 0],\n * 0,\n * { isMobile: false, showVitalPoints: false }\n * );\n *\n * <SkeletalPlayer3D {...playerProps} />\n * ```\n */\nexport function convertPlayerStateToProps(\n player: PlayerState,\n position: [number, number, number],\n rotation: number,\n options: {\n readonly isMobile?: boolean;\n readonly facing?: \"left\" | \"right\";\n readonly scale?: number;\n readonly showDetails?: boolean;\n readonly showHealthBar?: boolean;\n readonly showStanceIndicator?: boolean;\n readonly onAnimationComplete?: () => void;\n // Facial expression options - 얼굴 표정 옵션\n readonly enableFacialExpressions?: boolean;\n readonly enableEyeTracking?: boolean;\n readonly opponentPosition?: [number, number, number];\n } = {}\n): Player3DUnifiedProps {\n return {\n playerId: player.id,\n archetype: player.archetype,\n stance: player.currentStance,\n position,\n rotation,\n\n health: player.health,\n maxHealth: player.maxHealth,\n stamina: player.stamina,\n ki: player.ki,\n\n pain: player.pain,\n balance: getBalanceState(player.balance),\n consciousness: player.consciousness,\n\n isBlocking: player.isBlocking,\n isStunned: player.isStunned,\n isCountering: player.isCountering,\n\n currentAnimation: getPlayerAnimation(player),\n\n name: player.name,\n isMobile: options.isMobile ?? false,\n facing: options.facing ?? \"right\",\n scale: options.scale ?? 1,\n showDetails: options.showDetails,\n showHealthBar: options.showHealthBar,\n showStanceIndicator: options.showStanceIndicator,\n onAnimationComplete: options.onAnimationComplete,\n\n enableFacialExpressions: options.enableFacialExpressions ?? false,\n enableEyeTracking: options.enableEyeTracking ?? true,\n opponentPosition: options.opponentPosition,\n };\n}\n"],"mappings":";;;;;;;;;;AA4BA,IAAM,sBAA+D;CACnE,MAAM;CACN,MAAM;CACN,KAAK;CACL,QAAQ;CACR,QAAQ;CAER,sBAAsB;CACtB,cAAc;CACd,oBAAoB;CACpB,iBAAiB;CACjB,KAAK;CACL,eAAe;CACf,oBAAoB;CACpB,IAAI;CAEJ,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAElB,cAAc;CACd,WAAW;CACX,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CAEjB,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CAEnB,WAAW;CACX,YAAY;CAEZ,wBAAwB;CACxB,yBAAyB;CACzB,qBAAqB;CACrB,sBAAsB;CACtB,wBAAwB;CACxB,qBAAqB;CACrB,qBAAqB;CACrB,sBAAsB;CACtB,kBAAkB;CAGlB,wBAAwB;CACxB,yBAAyB;CACzB,eAAe;CACf,oBAAoB;CAEpB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CACjB;;;;;;;;;;AAWD,SAAgB,gCACd,WACiB;CACjB,OAAO,oBAAoB;;;;;;;;;AAU7B,SAAgB,gBAAgB,SAA+B;CAC7D,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,IAAI,WAAW,IAAI,OAAO;CAC1B,OAAO;;;;;;;;;;;;;AAcT,SAAgB,mBAAmB,QAAsC;CACvE,IAAI,OAAO,WAAW,OAAO;CAC7B,IAAI,OAAO,YAAY,OAAO;CAC9B,IAAI,OAAO,cAAc,OAAO;CAEhC,QAAQ,OAAO,aAAf;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EAGT,SACE,OAAO,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B9B,SAAgB,0BACd,QACA,UACA,UACA,UAYI,EAAE,EACgB;CACtB,OAAO;EACL,UAAU,OAAO;EACjB,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf;EACA;EAEA,QAAQ,OAAO;EACf,WAAW,OAAO;EAClB,SAAS,OAAO;EAChB,IAAI,OAAO;EAEX,MAAM,OAAO;EACb,SAAS,gBAAgB,OAAO,QAAQ;EACxC,eAAe,OAAO;EAEtB,YAAY,OAAO;EACnB,WAAW,OAAO;EAClB,cAAc,OAAO;EAErB,kBAAkB,mBAAmB,OAAO;EAE5C,MAAM,OAAO;EACb,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ,UAAU;EAC1B,OAAO,QAAQ,SAAS;EACxB,aAAa,QAAQ;EACrB,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B,qBAAqB,QAAQ;EAE7B,yBAAyB,QAAQ,2BAA2B;EAC5D,mBAAmB,QAAQ,qBAAqB;EAChD,kBAAkB,QAAQ;EAC3B"}
|