blacktrigram 0.7.47 → 0.7.49
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/App2.js.map +1 -1
- package/lib/audio/AudioAssetLoader.js.map +1 -1
- package/lib/audio/AudioAssetRegistry.js.map +1 -1
- package/lib/audio/AudioCache.js.map +1 -1
- package/lib/audio/AudioManager.js.map +1 -1
- package/lib/audio/AudioMonitor.js.map +1 -1
- package/lib/audio/AudioPool.js.map +1 -1
- package/lib/audio/AudioProvider.js.map +1 -1
- package/lib/audio/AudioUtils.js.map +1 -1
- package/lib/audio/BoneImpactAudioMap.js.map +1 -1
- package/lib/audio/VariantSelector.js.map +1 -1
- package/lib/audio/types.js.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.js +29 -25
- package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatButtons.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.js.map +1 -1
- package/lib/components/screens/combat/components/controls/ControlsGuide.js.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenuButton.js.map +1 -1
- package/lib/components/screens/combat/components/controls/QuickSettings.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundDisplayStatus.js.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 +2 -2
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.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 +2 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
- package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -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 +4 -2
- package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.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 +11 -5
- package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/ControlCategoryTabsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/Key3D.js.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/MatchStatisticsDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.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.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.js +3 -11
- package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.js.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 +2 -2
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts +1 -0
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.js +6 -4
- 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 +11 -5
- package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
- package/lib/components/shared/base/BaseButton.js.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
- package/lib/components/shared/base/BasePanel.js.map +1 -1
- package/lib/components/shared/base/BaseText.js.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
- package/lib/components/shared/mobile/HapticController.js.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js.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 +7 -5
- package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
- package/lib/components/shared/three/ui/MenuList.js.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
- package/lib/components/shared/ui/BackButton.js.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
- package/lib/components/shared/ui/CombatTimer.js.map +1 -1
- package/lib/components/shared/ui/ErrorModal.js.map +1 -1
- package/lib/components/shared/ui/LoadingState.js.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/VitalPointOverlayControlsPure.js.map +1 -1
- package/lib/components/shared/ui/VolumeControl.js.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
- package/lib/constants/bodyDimensions.js.map +1 -1
- package/lib/constants/bodyRenderingConstants.js.map +1 -1
- package/lib/data/archetypeClothing.js.map +1 -1
- package/lib/data/archetypePhysicalAttributes.js.map +1 -1
- package/lib/data/techniqueMappings.js.map +1 -1
- package/lib/data/techniques.js.map +1 -1
- package/lib/hooks/useActionFeedback.js.map +1 -1
- package/lib/hooks/useBalanceAnimations.js.map +1 -1
- package/lib/hooks/useCombatTimer.js.map +1 -1
- package/lib/hooks/useDebounce.js.map +1 -1
- package/lib/hooks/useHUDLayout.d.ts.map +1 -1
- package/lib/hooks/useHUDLayout.js +3 -2
- package/lib/hooks/useHUDLayout.js.map +1 -1
- package/lib/hooks/useHandPoseTransitions.js.map +1 -1
- package/lib/hooks/useKeyboardControls.js.map +1 -1
- package/lib/hooks/useMatchCountdown.js.map +1 -1
- package/lib/hooks/useMuscleActivation.js.map +1 -1
- package/lib/hooks/usePauseMenu.js.map +1 -1
- package/lib/hooks/usePlayerAnimation.js.map +1 -1
- package/lib/hooks/useResponsiveLayout.js.map +1 -1
- package/lib/hooks/useRoundTransition.js.map +1 -1
- package/lib/hooks/useSkeletalAnimation.d.ts.map +1 -1
- package/lib/hooks/useSkeletalAnimation.js +1 -1
- package/lib/hooks/useSkeletalAnimation.js.map +1 -1
- package/lib/hooks/useTechniqueSelection.js.map +1 -1
- package/lib/hooks/useThrottle.js.map +1 -1
- package/lib/hooks/useTouchControls.js.map +1 -1
- package/lib/hooks/useWebGLContextLossHandler.js.map +1 -1
- package/lib/hooks/useWindowSize.js.map +1 -1
- package/lib/systems/CombatSystem.js.map +1 -1
- package/lib/systems/EffectCalculator.js.map +1 -1
- package/lib/systems/LayoutSystem.js.map +1 -1
- package/lib/systems/PlayerEffectManager.js.map +1 -1
- package/lib/systems/ResponsiveScaling.js.map +1 -1
- package/lib/systems/TrigramSystem.js.map +1 -1
- package/lib/systems/VitalPointSystem.js.map +1 -1
- package/lib/systems/ai/AIPersonality.js.map +1 -1
- package/lib/systems/ai/AdaptiveDifficulty.js +16 -16
- package/lib/systems/ai/AdaptiveDifficulty.js.map +1 -1
- package/lib/systems/ai/ArchetypeEnforcer.js.map +1 -1
- package/lib/systems/ai/ComboSystem.js.map +1 -1
- package/lib/systems/ai/DecisionTree.js.map +1 -1
- package/lib/systems/ai/TrainingAI.js.map +1 -1
- package/lib/systems/ai/types.js.map +1 -1
- package/lib/systems/animation/builders/AnimationBuilder.js.map +1 -1
- package/lib/systems/animation/builders/HandPoseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/HandPoses.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeConfig.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.d.ts +6 -0
- package/lib/systems/animation/builders/KickPhaseApplicator.d.ts.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.js +16 -9
- package/lib/systems/animation/builders/KickPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/KoreanGuardPositions.d.ts +4 -4
- package/lib/systems/animation/builders/KoreanGuardPositions.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js +5 -5
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsConstants.d.ts +112 -71
- package/lib/systems/animation/builders/MartialArtsConstants.d.ts.map +1 -1
- package/lib/systems/animation/builders/MartialArtsConstants.js +113 -72
- package/lib/systems/animation/builders/MartialArtsConstants.js.map +1 -1
- package/lib/systems/animation/builders/MartialPoseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/PunchPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
- package/lib/systems/animation/builders/TrigramGuardApplicator.js.map +1 -1
- package/lib/systems/animation/catalogs/AttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/BasicAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/ComboAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/DarkOpsAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/DefensiveAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/ElbowKneeAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/EnhancedAttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/EnhancedElbowKneeAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/FootworkSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GamRedirectionAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GamStanceAnimations.js +21 -0
- package/lib/systems/animation/catalogs/GamStanceAnimations.js.map +1 -0
- package/lib/systems/animation/catalogs/GamTechniqueAnimations.js +34 -2
- package/lib/systems/animation/catalogs/GamTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GanStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GanTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GeonStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts +9 -0
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts.map +1 -1
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.js +288 -0
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.js.map +1 -0
- package/lib/systems/animation/catalogs/GrapplingAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/JinStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/JinTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/KickAnimations.d.ts +2 -2
- package/lib/systems/animation/catalogs/KickAnimations.js +2 -2
- package/lib/systems/animation/catalogs/KickAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/LiStanceAnimations.js +14 -1
- package/lib/systems/animation/catalogs/LiStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/LiTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/MovementAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.d.ts +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.js +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SonStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SonTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SpecializedPunchAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceAttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceGuardPoses.d.ts +6 -6
- package/lib/systems/animation/catalogs/StanceGuardPoses.js +36 -36
- package/lib/systems/animation/catalogs/StanceGuardPoses.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceIdleAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceLocomotionAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StepSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/TaeJointLockAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/TaeStanceAnimations.js.map +1 -1
- package/lib/systems/animation/constants/AnatomicalLimits.js.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
- package/lib/systems/animation/core/AnimationOptimizations.js.map +1 -1
- package/lib/systems/animation/core/AnimationPriority.js +15 -15
- package/lib/systems/animation/core/AnimationPriority.js.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.d.ts +30 -0
- package/lib/systems/animation/core/AnimationRegistry.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.js +74 -12
- package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
- package/lib/systems/animation/core/AnimationStateMachine.js +16 -16
- package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.js +34 -0
- package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapping.js.map +1 -1
- package/lib/systems/animation/core/index.d.ts +1 -1
- package/lib/systems/animation/core/index.d.ts.map +1 -1
- package/lib/systems/animation/core/types.d.ts +24 -0
- package/lib/systems/animation/core/types.d.ts.map +1 -1
- package/lib/systems/animation/core/types.js +27 -11
- package/lib/systems/animation/core/types.js.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
- package/lib/systems/animation/systems/MuscleActivation.js.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
- package/lib/systems/bodypart/types.js.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.js +19 -19
- package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
- package/lib/systems/breathing/feedback.js.map +1 -1
- package/lib/systems/breathing/integration.js.map +1 -1
- package/lib/systems/combat/BalanceSystem.js +19 -19
- package/lib/systems/combat/BalanceSystem.js.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
- package/lib/systems/combat/CombatStateSystem.js +17 -17
- package/lib/systems/combat/CombatStateSystem.js.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.js +24 -24
- package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
- package/lib/systems/combat/FallIntegration.js.map +1 -1
- package/lib/systems/combat/GrappleSystem.js.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
- package/lib/systems/combat/PainResponseSystem.js +21 -21
- package/lib/systems/combat/PainResponseSystem.js.map +1 -1
- package/lib/systems/combat/TrainingCombatSystem.js.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
- package/lib/systems/combat/typeGuards.js.map +1 -1
- package/lib/systems/effects.js.map +1 -1
- package/lib/systems/game.js.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
- package/lib/systems/movement/helpers/AccelerationUpdater.js.map +1 -1
- package/lib/systems/movement/helpers/accelerationUtils.js.map +1 -1
- package/lib/systems/movement/integration.js.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
- package/lib/systems/physics/CollisionDetection.js.map +1 -1
- package/lib/systems/physics/CoordinateMapper.js.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
- package/lib/systems/physics/MovementPhysics.js.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.js +6 -6
- package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
- package/lib/systems/trigram/KoreanCulture.js.map +1 -1
- package/lib/systems/trigram/KoreanTechniques.js.map +1 -1
- package/lib/systems/trigram/StanceManager.js.map +1 -1
- package/lib/systems/trigram/TransitionCalculator.js.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
- package/lib/systems/trigram/techniques/DarkOpsTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GamTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GanTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GeonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/JinTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/LiTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/SonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/TaeTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/TechniqueConfig.js.map +1 -1
- package/lib/systems/trigram/techniques/index.js.map +1 -1
- package/lib/systems/trigram/types/GonTechniqueExtensions.js.map +1 -1
- package/lib/systems/trigram/types.js.map +1 -1
- package/lib/systems/types.js.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
- package/lib/systems/vitalpoint/HitDetection.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanAnatomy.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
- package/lib/systems/vitalpoint/MeridianVitalPointMapping.js.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
- package/lib/types/AccessibilityTypes.js.map +1 -1
- package/lib/types/LayoutTypes.js.map +1 -1
- package/lib/types/PhysicsTypes.js.map +1 -1
- package/lib/types/common.js.map +1 -1
- package/lib/types/constants/animations.js.map +1 -1
- package/lib/types/constants/colors.js.map +1 -1
- package/lib/types/constants/designSystem.js.map +1 -1
- package/lib/types/constants/index.js.map +1 -1
- package/lib/types/constants/layout.d.ts +21 -0
- package/lib/types/constants/layout.d.ts.map +1 -1
- package/lib/types/constants/layout.js +22 -1
- package/lib/types/constants/layout.js.map +1 -1
- package/lib/types/constants/performance.js.map +1 -1
- package/lib/types/constants/typography.js.map +1 -1
- package/lib/types/constants/ui.js.map +1 -1
- package/lib/types/facial.js +19 -19
- package/lib/types/facial.js.map +1 -1
- package/lib/types/hand-animation.js.map +1 -1
- package/lib/types/injury.js.map +1 -1
- package/lib/types/muscle.js.map +1 -1
- package/lib/types/physics.js.map +1 -1
- package/lib/types/physicsConstants.js.map +1 -1
- package/lib/types/player-visual.d.ts +1 -1
- package/lib/types/player-visual.d.ts.map +1 -1
- package/lib/types/skeletal.js.map +1 -1
- package/lib/types/techniqueId.js.map +1 -1
- package/lib/utils/accessibility.js.map +1 -1
- package/lib/utils/arenaWorldDimensions.js.map +1 -1
- package/lib/utils/assetConfig.js.map +1 -1
- package/lib/utils/characterScaling.js.map +1 -1
- package/lib/utils/colorHelpers.js.map +1 -1
- package/lib/utils/colorUtils.js.map +1 -1
- package/lib/utils/combatReadiness.js.map +1 -1
- package/lib/utils/controlMapping.js.map +1 -1
- package/lib/utils/deviceDetection.js +6 -7
- package/lib/utils/deviceDetection.js.map +1 -1
- package/lib/utils/effectUtils.js.map +1 -1
- package/lib/utils/fabricTextures.js.map +1 -1
- package/lib/utils/hapticFeedback.js.map +1 -1
- package/lib/utils/haptics.js.map +1 -1
- package/lib/utils/htmlOverlayHelpers.js.map +1 -1
- package/lib/utils/inputSystem.js.map +1 -1
- package/lib/utils/koreanThemeHelpers.js.map +1 -1
- package/lib/utils/math.js.map +1 -1
- package/lib/utils/mobileLayoutHelpers.js.map +1 -1
- package/lib/utils/mobileUIUtils.js.map +1 -1
- package/lib/utils/performance/PerformanceMonitor.js.map +1 -1
- package/lib/utils/performance/PerformanceOverlay3D.js.map +1 -1
- package/lib/utils/performance/usePerformanceMonitor.js.map +1 -1
- package/lib/utils/performanceOptimization.js.map +1 -1
- package/lib/utils/player3DHelpers.js.map +1 -1
- package/lib/utils/playerUtils.js.map +1 -1
- package/lib/utils/responsiveLayout.js.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.d.ts +7 -0
- package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.js +16 -2
- package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
- package/lib/utils/responsiveOrientationConstants.js.map +1 -1
- package/lib/utils/safeAreaUtils.js.map +1 -1
- package/lib/utils/sharedPhysicsConfig.js.map +1 -1
- package/lib/utils/skeletonScaling.js.map +1 -1
- package/lib/utils/stanceHelpers.js.map +1 -1
- package/lib/utils/threeObjectPool.js.map +1 -1
- package/lib/utils/visualEffects.js.map +1 -1
- package/package.json +7 -7
package/lib/types/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":[],"sources":["../../src/types/common.ts"],"sourcesContent":["/**\n * Common utility types for Korean martial arts game.\n *\n * This module provides foundational types used throughout the Black Trigram (흑괘) game,\n * including geometric types, Korean text support, and utility type helpers.\n *\n * @module types/common\n * @category Type Definitions\n * @korean 공통타입\n */\n\n/**\n * Represents a position in 2D space.\n *\n * **Unit Handling**: The coordinate units depend on the system using this type:\n * - **Combat System**: Coordinates are in **meters** (physics-first architecture)\n * - **Rendering System**: Coordinates are in **pixels** (screen rendering)\n * - **Legacy Systems**: May use pixels or other units\n *\n * When working with combat/physics, positions are in meters relative to arena center (0, 0).\n * Arena boundaries extend from ±worldWidthMeters/2 in X and ±worldDepthMeters/2 in Z (mapped to y).\n *\n * @example\n * ```typescript\n * // Combat position (meters, centered at origin)\n * const playerPos: Position = { x: 2.5, y: -1.0 }; // 2.5m right, 1m back from center\n *\n * // Rendering position (pixels, top-left origin)\n * const screenPos: Position = { x: 640, y: 480 }; // 640px right, 480px down\n * ```\n *\n * @public\n * @category Core Types\n */\nexport interface Position {\n /** X coordinate (meters in combat, pixels in rendering) */\n x: number;\n /** Y coordinate (meters in combat, pixels in rendering) */\n y: number;\n}\n\n/**\n * Represents size dimensions for game objects.\n *\n * @public\n * @category Core Types\n */\nexport interface Size {\n /** Width in pixels */\n readonly width: number;\n /** Height in pixels */\n readonly height: number;\n}\n\n/**\n * Represents rectangle bounds combining position and size.\n *\n * @public\n * @category Core Types\n */\nexport interface Bounds extends Position, Size {}\n\n/**\n * Color represented as a hexadecimal number (e.g., 0xFF0000 for red).\n *\n * @example\n * ```typescript\n * const primaryCyan: Color = 0x00FFFF;\n * const accentGold: Color = 0xFFAA00;\n * ```\n *\n * @public\n * @category Core Types\n */\nexport type Color = number;\n\n/**\n * Time duration in milliseconds.\n *\n * @public\n * @category Core Types\n */\nexport type Duration = number;\n\n/**\n * Percentage value represented as a decimal (0.0 to 1.0).\n *\n * @example\n * ```typescript\n * const halfHealth: Percentage = 0.5;\n * const fullAccuracy: Percentage = 1.0;\n * ```\n *\n * @public\n * @category Core Types\n */\nexport type Percentage = number;\n\n/**\n * Unique identifier string.\n *\n * @public\n * @category Core Types\n */\nexport type ID = string;\n\n/**\n * Generic callback function type.\n *\n * @typeParam T - Return type of the callback, defaults to void\n *\n * @public\n * @category Core Types\n */\nexport type Callback<T = void> = () => T;\n\n/**\n * Event handler function type.\n *\n * @typeParam T - Type of event data, defaults to any\n *\n * @public\n * @category Core Types\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic default allows flexible event handling\nexport type EventHandler<T = any> = (event: T) => void;\n\n/**\n * Utility type to make specific properties optional.\n *\n * @typeParam T - The base type\n * @typeParam K - Keys of T to make optional\n *\n * @public\n * @category Utility Types\n */\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/**\n * Utility type to make specific properties required.\n *\n * @typeParam T - The base type\n * @typeParam K - Keys of T to make required\n *\n * @public\n * @category Utility Types\n */\nexport type Required<T, K extends keyof T> = T & { [P in K]-?: T[P] };\n\n/**\n * Utility type to make all properties deeply readonly.\n *\n * @typeParam T - The type to make deeply readonly\n *\n * @public\n * @category Utility Types\n */\nexport type DeepReadonly<T> = {\n readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];\n};\n\n/**\n * Represents bilingual Korean-English text content.\n *\n * Used throughout the game to provide authentic Korean terminology with English translations,\n * supporting the cultural authenticity of the Korean martial arts theme.\n *\n * @example\n * ```typescript\n * const techniqueName: KoreanText = {\n * korean: \"천둥벽력\",\n * english: \"Thunder Strike\",\n * romanized: \"cheondu byeokryeok\"\n * };\n * ```\n *\n * @public\n * @category Korean Martial Arts\n * @korean 한글텍스트\n */\nexport interface KoreanText {\n /** Korean text in Hangul */\n readonly korean: string;\n /** English translation */\n readonly english: string;\n /** Optional romanized Korean pronunciation */\n readonly romanized?: string;\n}\n\n/**\n * Base entity interface with Korean naming support.\n *\n * Provides a foundation for game entities with bilingual identification.\n *\n * @public\n * @category Korean Martial Arts\n * @korean 한글개체\n */\nexport interface KoreanEntity {\n /** Unique identifier */\n readonly id: ID;\n /** Bilingual name */\n readonly name: KoreanText;\n /** Optional bilingual description */\n readonly description?: KoreanText;\n}\n\n/**\n * Font sizes for Korean text rendering.\n *\n * Provides consistent typography sizing across the game interface.\n *\n * @public\n * @category UI\n * @korean 글자크기\n */\nexport enum KoreanTextSize {\n /** Extra small: 10px */\n XSMALL = \"xsmall\",\n /** Tiny: 12px */\n TINY = \"tiny\",\n /** Small: 14px */\n SMALL = \"small\",\n /** Medium: 16px */\n MEDIUM = \"medium\",\n /** Large: 18px */\n LARGE = \"large\",\n /** Extra large: 20px */\n XLARGE = \"xlarge\",\n /** Double extra large: 24px */\n XXLARGE = \"xxlarge\",\n /** Huge: 32px */\n HUGE = \"huge\",\n /** Title: 48px */\n TITLE = \"title\",\n}\n\n/**\n * Font weights for Korean text rendering.\n *\n * Provides consistent typography weights for Korean Hangul characters.\n *\n * @public\n * @category UI\n * @korean 글자무게\n */\nexport enum KoreanTextWeight {\n /** Light weight: 300 */\n LIGHT = \"light\",\n /** Normal weight: 400 */\n NORMAL = \"normal\",\n /** Regular weight: 400 (alias for NORMAL) */\n REGULAR = \"regular\",\n /** Medium weight: 500 */\n MEDIUM = \"medium\",\n /** Semi-bold weight: 600 */\n SEMIBOLD = \"semibold\",\n /** Bold weight: 700 */\n BOLD = \"bold\",\n /** Heavy weight: 900 */\n HEAVY = \"heavy\",\n}\n\n/**\n * Text alignment options for Korean text.\n *\n * @public\n * @category UI\n */\nexport type KoreanTextAlignment = \"left\" | \"center\" | \"right\";\n\n/**\n * Styling configuration for Korean text rendering.\n *\n * @public\n * @category UI\n * @korean 글자스타일\n */\nexport interface KoreanTextStyle {\n /** Text size */\n readonly size: KoreanTextSize;\n /** Font weight */\n readonly weight: KoreanTextWeight;\n /** Text color as hex number */\n readonly color: number;\n /** Horizontal alignment */\n readonly alignment: KoreanTextAlignment;\n}\n\n/**\n * Represents a range of damage values for combat calculations.\n *\n * Used for techniques and vital point strikes to define variable damage output.\n *\n * @public\n * @category Combat\n * @korean 피해범위\n */\nexport interface DamageRange {\n /** Minimum damage value */\n readonly min: number;\n /** Maximum damage value */\n readonly max: number;\n /** Type of damage dealt */\n readonly type?: DamageType;\n /** Pre-calculated average damage */\n readonly average?: number;\n}\n\n/**\n * Game settings configuration interface for UI controls.\n *\n * Manages volume, graphics quality, control schemes, and language preferences.\n *\n * @public\n * @category UI\n * @korean 게임설정\n */\nexport interface UIGameSettings {\n /** Audio volume settings */\n readonly volume: {\n /** Master volume (0.0 - 1.0) */\n readonly master: number;\n /** Music volume (0.0 - 1.0) */\n readonly music: number;\n /** Sound effects volume (0.0 - 1.0) */\n readonly sfx: number;\n };\n /** Graphics settings */\n readonly graphics: {\n /** Graphics quality preset */\n readonly quality: \"low\" | \"medium\" | \"high\";\n /** Fullscreen mode enabled */\n readonly fullscreen: boolean;\n /** Vertical sync enabled */\n readonly vsync: boolean;\n };\n /** Control settings */\n readonly controls: {\n /** Keyboard layout preference */\n readonly keyboardLayout: \"qwerty\" | \"dvorak\" | \"colemak\";\n /** Mouse sensitivity multiplier */\n readonly mouseSensitivity: number;\n };\n /** Language preference */\n readonly language: \"korean\" | \"english\" | \"both\";\n}\n\n/**\n * Duration tracking for status effects.\n *\n * Tracks when an effect started, when it ends, and its total duration.\n *\n * @public\n * @category Combat\n * @korean 효과지속시간\n */\nexport interface EffectDuration {\n /** Effect start timestamp (milliseconds) */\n readonly startTime: number;\n /** Effect end timestamp (milliseconds) */\n readonly endTime: number;\n /** Total duration (milliseconds) */\n readonly duration: number;\n}\n\n/**\n * Generic game entity with positioning and visibility.\n *\n * Extends {@link KoreanEntity} with spatial and state properties.\n *\n * @public\n * @category Core Types\n * @korean 게임개체\n */\nexport interface GameEntity extends KoreanEntity {\n /** Position in game world */\n readonly position?: Position;\n /** Size dimensions */\n readonly size?: Size;\n /** Whether entity is active */\n readonly active?: boolean;\n /** Whether entity is visible */\n readonly visible?: boolean;\n}\n\n/**\n * Animation transition configuration.\n *\n * Defines how to transition between two states with timing and easing.\n *\n * @public\n * @category UI\n * @korean 전환\n */\nexport interface Transition {\n /** Starting state identifier */\n readonly from: string;\n /** Target state identifier */\n readonly to: string;\n /** Transition duration in milliseconds */\n readonly duration: Duration;\n /** Optional easing function name */\n readonly easing?: string;\n}\n\n/**\n * Theme color configuration.\n *\n * Defines primary colors used throughout the game UI.\n *\n * @public\n * @category UI\n * @korean 테마\n */\nexport interface Theme {\n /** Primary color */\n readonly primary: Color;\n /** Secondary color */\n readonly secondary: Color;\n /** Accent color */\n readonly accent?: Color;\n /** Background color */\n readonly background?: Color;\n /** Text color */\n readonly text?: Color;\n}\n\n/**\n * Generic configuration object.\n *\n * @public\n * @category Core Types\n */\nexport interface Config {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Config values can be of various types\n readonly [key: string]: any;\n}\n\n/**\n * Generic result wrapper for operations that may succeed or fail.\n *\n * @typeParam T - Type of successful result data\n * @typeParam E - Type of error, defaults to Error\n *\n * @example\n * ```typescript\n * const result: Result<PlayerState> = {\n * success: true,\n * data: playerState\n * };\n * ```\n *\n * @public\n * @category Core Types\n */\nexport interface Result<T, E = Error> {\n /** Whether operation succeeded */\n readonly success: boolean;\n /** Result data if successful */\n readonly data?: T;\n /** Error if operation failed */\n readonly error?: E;\n /** Optional message */\n readonly message?: string;\n}\n\n/**\n * Validation result with errors and warnings.\n *\n * @public\n * @category Core Types\n */\nexport interface ValidationResult {\n /** Whether validation passed */\n readonly valid: boolean;\n /** List of validation errors */\n readonly errors: readonly string[];\n /** Optional list of warnings */\n readonly warnings?: readonly string[];\n}\n\n/**\n * Game modes available in Black Trigram.\n *\n * Each mode offers different gameplay experiences and training opportunities.\n *\n * @public\n * @category Game Systems\n * @korean 게임모드\n */\nexport enum GameMode {\n /** Versus mode: Player vs AI or Player vs Player */\n VERSUS = \"versus\",\n /** Training mode: Practice techniques against training dummy */\n TRAINING = \"training\",\n /** Tutorial mode: Learn game mechanics and controls */\n TUTORIAL = \"tutorial\",\n /** Practice mode: Free form combat practice */\n PRACTICE = \"practice\",\n /** Story mode: Campaign with narrative */\n STORY = \"story\",\n /** Arcade mode: Progressive difficulty challenges */\n ARCADE = \"arcade\",\n /** Controls screen: View and customize controls */\n CONTROLS = \"controls\",\n /** Philosophy screen: Learn about Korean martial arts philosophy */\n PHILOSOPHY = \"philosophy\",\n}\n\n/**\n * Game phases representing the current state of the game.\n *\n * Controls which screen is displayed and what game logic is active.\n *\n * @public\n * @category Game Systems\n * @korean 게임단계\n */\nexport enum GamePhase {\n /** Intro/splash screen */\n INTRO = \"intro\",\n /** Main menu */\n MENU = \"menu\",\n /** Character selection screen */\n CHARACTER_SELECT = \"character_select\",\n /** Active combat */\n COMBAT = \"combat\",\n /** Training mode */\n TRAINING = \"training\",\n /** Victory screen */\n VICTORY = \"victory\",\n /** Defeat screen */\n DEFEAT = \"defeat\",\n /** Game paused */\n PAUSED = \"paused\",\n /** Game over screen */\n GAME_OVER = \"game_over\",\n /** Loading screen */\n LOADING = \"loading\",\n}\n\n/**\n * Player archetypes representing Korean martial arts combat specialists.\n *\n * **Korean**: 플레이어 원형 (Player Archetypes)\n *\n * Each archetype has unique combat styles, favored stances, and philosophical approaches\n * rooted in Korean martial arts traditions and modern cyberpunk adaptation.\n *\n * @example\n * ```typescript\n * const player = createPlayer({\n * archetype: PlayerArchetype.MUSA,\n * name: { korean: \"이순신\", english: \"Yi Sun-sin\" }\n * });\n * ```\n *\n * @public\n * @category Player & Archetypes\n * @korean 플레이어원형\n */\nexport enum PlayerArchetype {\n /**\n * 무사 (Musa) - Traditional Warrior\n *\n * Honor-bound martial artist following traditional Korean warrior codes.\n * Favors direct confrontation and disciplined techniques.\n */\n MUSA = \"musa\",\n\n /**\n * 암살자 (Amsalja) - Shadow Assassin\n *\n * Precision striker focused on vital point targeting and silent elimination.\n * Specializes in nerve strikes and pressure point techniques.\n */\n AMSALJA = \"amsalja\",\n\n /**\n * 해커 (Hacker) - Cyber Warrior\n *\n * Technology-enhanced combatant blending modern cybernetics with traditional techniques.\n * Uses augmented reflexes and data-driven combat analysis.\n */\n HACKER = \"hacker\",\n\n /**\n * 정보요원 (Jeongbo Yowon) - Intelligence Operative\n *\n * Strategic analyst who uses combat intelligence and tactical advantage.\n * Excels at reading opponent patterns and exploiting weaknesses.\n */\n JEONGBO_YOWON = \"jeongbo_yowon\",\n\n /**\n * 조직폭력배 (Jojik Pokryeokbae) - Organized Crime\n *\n * Ruthless pragmatist who ignores traditional honor codes.\n * Uses brutal, efficient techniques with no concern for ethics.\n */\n JOJIK_POKRYEOKBAE = \"jojik_pokryeokbae\",\n}\n\n/**\n * Physical attributes representing realistic body dimensions and composition.\n *\n * **Korean**: 신체 속성 (Body Attributes)\n *\n * These attributes affect combat calculations including reach, movement speed,\n * damage output, defense capability, and stamina. Based on realistic human\n * physiology and Korean martial arts biomechanics.\n *\n * ## Combat Impact\n *\n * - **Weight**: Affects movement speed, knockback resistance, and throw effectiveness\n * - **Leg Length**: Determines kick range and movement speed base\n * - **Arm Length**: Determines punch/strike range and grappling reach\n * - **Muscle Mass**: Affects base damage output and stamina pool\n * - **Fat Mass**: Affects defense absorption and stamina drain rate\n * - **Age**: Affects stamina recovery speed and Ki regeneration\n *\n * @example\n * ```typescript\n * const musaPhysical: PhysicalAttributes = {\n * weight: 75, // kg - balanced warrior\n * legLength: 95, // cm - average leg reach\n * armLength: 75, // cm - average arm reach\n * muscleMass: 38, // kg - high muscle for power\n * fatMass: 12, // kg - low fat for mobility\n * age: 32, // years - prime combat age\n * };\n * ```\n *\n * @public\n * @category Player & Archetypes\n * @korean 신체속성\n */\nexport interface PhysicalAttributes {\n /**\n * Body weight in kilograms.\n *\n * **Korean**: 체중 (Body Weight)\n *\n * Typical Range: 55-95 kg for combatants\n * - Affects movement speed (inversely)\n * - Affects knockback resistance (positively)\n * - Affects throw effectiveness (positively)\n * - Affects ground control (positively)\n */\n readonly weight: number;\n\n /**\n * Leg length in centimeters (hip to ankle).\n *\n * **Korean**: 다리 길이 (Leg Length)\n *\n * Typical Range: 85-105 cm\n * - Determines kick technique maximum range\n * - Affects base movement speed\n * - Affects sweep technique effectiveness\n * - Affects jumping attack height\n */\n readonly legLength: number;\n\n /**\n * Arm length in centimeters (shoulder to wrist).\n *\n * **Korean**: 팔 길이 (Arm Length)\n *\n * Typical Range: 65-85 cm\n * - Determines punch/strike technique range\n * - Affects grappling and throw range\n * - Affects block coverage area\n * - Affects elbow strike effectiveness\n */\n readonly armLength: number;\n\n /**\n * Muscle mass in kilograms.\n *\n * **Korean**: 근육량 (Muscle Mass)\n *\n * Typical Range: 25-45 kg\n * - Affects base damage output (positively)\n * - Affects maximum stamina pool (positively)\n * - Affects grappling and throw power\n * - Affects movement acceleration\n */\n readonly muscleMass: number;\n\n /**\n * Fat mass in kilograms.\n *\n * **Korean**: 지방량 (Fat Mass)\n *\n * Typical Range: 8-20 kg for combatants\n * - Affects blunt damage absorption (positively)\n * - Affects stamina drain rate (negatively)\n * - Affects movement speed (negatively)\n * - Affects recovery time between actions\n */\n readonly fatMass: number;\n\n /**\n * Age in years.\n *\n * **Korean**: 나이 (Age)\n *\n * Typical Range: 22-45 years for peak combatants\n * - Affects stamina recovery speed (optimal 25-35)\n * - Affects Ki regeneration rate (wisdom with age)\n * - Affects injury recovery time (slower with age)\n * - Affects technique execution speed (prime 28-35)\n */\n readonly age: number;\n\n /**\n * Total body height in centimeters.\n *\n * **Korean**: 키 (Height)\n *\n * Typical Range: 160-195 cm\n * - Scales entire skeleton proportionally\n * - Affects reach calculations (combined with limb ratios)\n * - Affects center of gravity positioning\n * - Determines visual body model scaling\n * - Influences balance and stability in stances\n */\n readonly totalHeight: number;\n\n /**\n * Torso length in centimeters (pelvis to shoulders).\n *\n * **Korean**: 몸통 길이 (Torso Length)\n *\n * Typical Range: 50-65 cm\n * - Affects core hitbox size and vital point positioning\n * - Influences breath control and stamina capacity\n * - Affects spinal rotation range in techniques\n * - Determines torso vital point target area\n * - Impacts center of mass calculations\n */\n readonly torsoLength: number;\n\n /**\n * Head size (diameter) in centimeters.\n *\n * **Korean**: 머리 크기 (Head Size)\n *\n * Typical Range: 20-24 cm\n * - Affects head vital point targeting precision\n * - Determines head hitbox size for strikes\n * - Influences helmet/headgear fit (if applicable)\n * - Affects visual skull scaling in 3D model\n * - Impacts consciousness vulnerability to head trauma\n */\n readonly headSize: number;\n\n /**\n * Neck length in centimeters (skull base to shoulders).\n *\n * **Korean**: 목 길이 (Neck Length)\n *\n * Typical Range: 8-12 cm\n * - Affects vulnerability to chokes and strangles\n * - Determines neck vital point target area\n * - Influences blood choke effectiveness\n * - Affects guillotine and rear naked choke mechanics\n * - Impacts head mobility and evasion capability\n */\n readonly neckLength: number;\n\n /**\n * Shoulder width in centimeters (shoulder to shoulder).\n *\n * **Korean**: 어깨 너비 (Shoulder Width)\n *\n * Typical Range: 38-48 cm\n * - Affects defense coverage area (blocking)\n * - Determines upper body strike zone width\n * - Influences grappling control positions\n * - Affects visual upper body model scaling\n * - Impacts balance and stability in wide stances\n */\n readonly shoulderWidth: number;\n\n /**\n * Base walking speed in meters per second.\n *\n * **Korean**: 걷기 속도 (Walk Speed)\n *\n * Typical Range: 5.0-6.5 m/s for combat movement\n * - Determines tactical repositioning speed\n * - Affected by weight and leg length\n * - Base speed for defensive movement\n * - Modified by stance and combat state\n */\n readonly walkSpeed: number;\n\n /**\n * Base running speed in meters per second.\n *\n * **Korean**: 달리기 속도 (Run Speed)\n *\n * Typical Range: 8.0-11.0 m/s for sprint movement\n * - Determines rapid repositioning speed\n * - Affected by muscle mass and conditioning\n * - Base speed for aggressive approach\n * - Consumes stamina during use\n */\n readonly runSpeed: number;\n\n /**\n * Base acceleration in meters per second squared.\n *\n * **Korean**: 가속도 (Acceleration)\n *\n * Typical Range: 9.0-15.0 m/s² for combat movement\n * - Determines how quickly fighter reaches max speed\n * - Based on muscle-to-weight ratio (explosiveness)\n * - Higher = more explosive starts and direction changes\n * - Affects combat responsiveness and evasion\n */\n readonly acceleration: number;\n}\n\n/**\n * Eight Trigram stances (팔괘) representing fundamental combat principles.\n *\n * **Korean**: 팔괘 자세 (Eight Trigram Stances)\n * **Origin**: I Ching (易經 / Yijing) divination system adapted for Korean martial arts\n *\n * The Eight Trigrams (Bagua / 八卦) form the foundation of the combat system.\n * Each trigram represents a natural element and combat philosophy, influencing\n * available techniques, movement patterns, and strategic advantages.\n *\n * ## Trigram Philosophy\n *\n * - **☰ 건 (Geon)** - Heaven: Yang energy, direct aggression, overwhelming force\n * - **☱ 태 (Tae)** - Lake: Joy and fluidity, joint locks and flow techniques\n * - **☲ 리 (Li)** - Fire: Precision and speed, nerve strikes and rapid attacks\n * - **☳ 진 (Jin)** - Thunder: Explosive power, shocking techniques\n * - **☴ 손 (Son)** - Wind: Continuous pressure, evasion and mobility\n * - **☵ 감 (Gam)** - Water: Adaptive flow, counters and redirection\n * - **☶ 간 (Gan)** - Mountain: Immovable defense, endurance and patience\n * - **☷ 곤 (Gon)** - Earth: Grounding techniques, takedowns and throws\n *\n * @example\n * ```typescript\n * // Change to Heaven stance for aggressive attack\n * player.currentStance = TrigramStance.GEON;\n *\n * // Execute heaven-aligned technique\n * const technique = getTrigramTechniques(TrigramStance.GEON)[0];\n * executeTechnique(player, opponent, technique);\n * ```\n *\n * @see {@link https://en.wikipedia.org/wiki/Bagua | Bagua (Eight Trigrams) - Wikipedia}\n * @see {@link https://en.wikipedia.org/wiki/I_Ching | I Ching - Wikipedia}\n *\n * @public\n * @category Trigram System\n * @category Korean Martial Arts\n * @korean 팔괘\n */\nexport enum TrigramStance {\n /**\n * ☰ 건 (Geon) - Heaven Stance\n *\n * **Element**: Heaven / Sky (天)\n * **Nature**: Yang, creative, strong\n * **Combat Style**: Direct force, aggressive techniques, overwhelming power\n * **Philosophy**: \"The creative principle - pure yang energy that drives forward\"\n *\n * Techniques emphasize straight attacks, powerful strikes, and dominant positioning.\n */\n GEON = \"geon\",\n\n /**\n * ☱ 태 (Tae) - Lake Stance\n *\n * **Element**: Lake / Marsh (澤)\n * **Nature**: Yin exterior, Yang interior - joyful movement\n * **Combat Style**: Fluid joint manipulation, flowing techniques, adaptable responses\n * **Philosophy**: \"The joyful - water above earth, freedom of movement\"\n *\n * Techniques focus on joint locks, throws, and using opponent's momentum.\n */\n TAE = \"tae\",\n\n /**\n * ☲ 리 (Li) - Fire Stance\n *\n * **Element**: Fire / Flame (火)\n * **Nature**: Yang exterior, Yin interior - bright and precise\n * **Combat Style**: Precise nerve strikes, rapid attacks, speed techniques\n * **Philosophy**: \"The clinging - illuminating and consuming\"\n *\n * Techniques emphasize vital point targeting, quick combinations, and precision.\n */\n LI = \"li\",\n\n /**\n * ☳ 진 (Jin) - Thunder Stance\n *\n * **Element**: Thunder / Arousing (雷)\n * **Nature**: Yang moving, sudden and shocking\n * **Combat Style**: Explosive power, shocking techniques, sudden movements\n * **Philosophy**: \"The arousing - thunder brings shock and awakening\"\n *\n * Techniques feature explosive bursts, stunning strikes, and overwhelming force.\n */\n JIN = \"jin\",\n\n /**\n * ☴ 손 (Son) - Wind Stance\n *\n * **Element**: Wind / Wood (風)\n * **Nature**: Yin, gentle but penetrating\n * **Combat Style**: Continuous pressure, evasion techniques, mobility\n * **Philosophy**: \"The gentle - penetrating like wind, persistent like wood\"\n *\n * Techniques emphasize movement, pressure point chains, and wearing down opponents.\n */\n SON = \"son\",\n\n /**\n * ☵ 감 (Gam) - Water Stance\n *\n * **Element**: Water / Abyss (水)\n * **Nature**: Yang surrounded by Yin - dangerous depths\n * **Combat Style**: Flow and adaptation, counter techniques, redirection\n * **Philosophy**: \"The abysmal - water flows around obstacles and fills voids\"\n *\n * Techniques focus on counters, deflections, and adaptive responses.\n */\n GAM = \"gam\",\n\n /**\n * ☶ 간 (Gan) - Mountain Stance\n *\n * **Element**: Mountain / Stillness (山)\n * **Nature**: Yang above Yin - firm and unyielding\n * **Combat Style**: Defensive mastery, immovable stance, endurance\n * **Philosophy**: \"The keeping still - mountains are firm and unmoving\"\n *\n * Techniques emphasize blocks, parries, and defensive positioning.\n */\n GAN = \"gan\",\n\n /**\n * ☷ 곤 (Gon) - Earth Stance\n *\n * **Element**: Earth / Receptive (地)\n * **Nature**: Pure Yin - receptive and yielding\n * **Combat Style**: Grounding techniques, takedowns, throws\n * **Philosophy**: \"The receptive - earth receives and supports all\"\n *\n * Techniques focus on sweeps, trips, takedowns, and ground control.\n */\n GON = \"gon\",\n}\n\n/**\n * Combat attack types available in the game.\n *\n * Defines the mechanical type of attack being performed, which affects\n * damage calculation, vital point targeting, and defensive options.\n *\n * @public\n * @category Combat System\n * @korean 공격타입\n */\nexport enum CombatAttackType {\n /** Standard striking attack */\n STRIKE = \"strike\",\n /** Thrusting attack with focused force */\n THRUST = \"thrust\",\n /** Defensive blocking action */\n BLOCK = \"block\",\n /** Counter-attack performed after successful defense */\n COUNTER_ATTACK = \"counter_attack\",\n /** Throwing technique to off-balance opponent */\n THROW = \"throw\",\n /** Grappling and joint control technique */\n GRAPPLE = \"grapple\",\n /** Precise pressure point strike */\n PRESSURE_POINT = \"pressure_point\",\n /** Nerve disruption strike */\n NERVE_STRIKE = \"nerve_strike\",\n /** Closed fist punch */\n PUNCH = \"punch\",\n /** Leg kick attack */\n KICK = \"kick\",\n /** Elbow strike */\n ELBOW = \"elbow\",\n /** Knee strike */\n KNEE = \"knee\",\n}\n\n/**\n * Damage types representing different methods of inflicting harm.\n *\n * Each damage type interacts differently with vital points and defensive techniques.\n * Some types are more effective against specific body regions or defense styles.\n *\n * @public\n * @category Combat System\n * @korean 피해타입\n */\nexport enum DamageType {\n /** Blunt force trauma */\n BLUNT = \"blunt\",\n /** Piercing damage penetrating tissue */\n PIERCING = \"piercing\",\n /** Slashing cuts */\n SLASHING = \"slashing\",\n /** Pressure point manipulation */\n PRESSURE = \"pressure\",\n /** Nerve disruption */\n NERVE = \"nerve\",\n /** Joint manipulation and locks */\n JOINT = \"joint\",\n /** Internal organ damage */\n INTERNAL = \"internal\",\n /** Impact shock */\n IMPACT = \"impact\",\n /** Crushing force */\n CRUSHING = \"crushing\",\n /** Sharp edge damage */\n SHARP = \"sharp\",\n /** Electric shock */\n ELECTRIC = \"electric\",\n /** Fire/heat damage */\n FIRE = \"fire\",\n /** Cold/freeze damage */\n ICE = \"ice\",\n /** Poison/toxin damage */\n POISON = \"poison\",\n /** Psychic/mental damage */\n PSYCHIC = \"psychic\",\n /** Blood loss damage */\n BLOOD = \"blood\",\n}\n\n/**\n * Vital point categories representing anatomical targeting systems.\n *\n * **Korean**: 급소 범주 (Vital Point Categories)\n *\n * The game features 70 Korean vital points (급소) based on traditional martial arts\n * knowledge and modern anatomical understanding. Each category represents different\n * physiological systems that can be targeted for combat effectiveness.\n *\n * @example\n * ```typescript\n * const vitalPoint: VitalPoint = {\n * id: \"GB-20\",\n * category: VitalPointCategory.NEUROLOGICAL,\n * severity: VitalPointSeverity.CRITICAL,\n * name: { korean: \"풍지\", english: \"Wind Pool\" }\n * };\n * ```\n *\n * @public\n * @category Vital Point System\n * @korean 급소범주\n */\nexport enum VitalPointCategory {\n /** Neurological system - nerve clusters and neural pathways */\n NEUROLOGICAL = \"neurological\",\n /** Vascular system - major blood vessels and circulation */\n VASCULAR = \"vascular\",\n /** Respiratory system - airways and breathing mechanisms */\n RESPIRATORY = \"respiratory\",\n /** Muscular system - muscle groups and tendons */\n MUSCULAR = \"muscular\",\n /** Skeletal system - bones and structural supports */\n SKELETAL = \"skeletal\",\n /** Organ system - internal organs */\n ORGAN = \"organ\",\n /** Circulatory system - heart and blood flow */\n CIRCULATORY = \"circulatory\",\n /** Lymphatic system - lymph nodes and immune response */\n LYMPHATIC = \"lymphatic\",\n /** Endocrine system - hormonal glands */\n ENDOCRINE = \"endocrine\",\n /** Joint system - articulation points */\n JOINT = \"joint\",\n /** Nerve system - peripheral nerves */\n NERVE = \"nerve\",\n /** Pressure system - pressure-sensitive areas */\n PRESSURE = \"pressure\",\n}\n\n/**\n * Vital point severity levels indicating potential impact.\n *\n * Determines the damage multiplier and status effects applied when\n * a vital point is successfully struck.\n *\n * ## Severity Guidelines\n *\n * - **MINOR**: 1.1-1.3x damage, temporary discomfort\n * - **MODERATE**: 1.5-2.0x damage, brief incapacitation\n * - **MAJOR**: 2.5-3.5x damage, significant impairment\n * - **CRITICAL**: 4.0-5.0x damage, severe trauma\n * - **LETHAL**: 6.0-10.0x damage, immediate incapacitation\n *\n * @public\n * @category Vital Point System\n * @korean 급소심각도\n */\nexport enum VitalPointSeverity {\n /** Minor impact - temporary pain or discomfort */\n MINOR = \"minor\",\n /** Moderate impact - brief stunning or reduced effectiveness */\n MODERATE = \"moderate\",\n /** Major impact - significant damage and impairment */\n MAJOR = \"major\",\n /** Critical impact - severe trauma requiring immediate response */\n CRITICAL = \"critical\",\n /** Lethal impact - immediate incapacitation or death */\n LETHAL = \"lethal\",\n}\n\n/**\n * Status effects that can result from vital point strikes.\n *\n * Each effect type represents a physiological response to targeting\n * specific anatomical structures. Effects stack and interact with\n * combat mechanics.\n *\n * @public\n * @category Vital Point System\n * @korean 급소효과\n */\nexport enum VitalPointEffectType {\n /** Loss of consciousness */\n UNCONSCIOUSNESS = \"unconsciousness\",\n /** Inability to breathe properly */\n BREATHLESSNESS = \"breathlessness\",\n /** Intense pain reducing combat effectiveness */\n PAIN = \"pain\",\n /** Temporary or permanent paralysis */\n PARALYSIS = \"paralysis\",\n /** Brief stunning preventing action */\n STUN = \"stun\",\n /** Reduced strength and effectiveness */\n WEAKNESS = \"weakness\",\n /** Confusion and impaired targeting */\n DISORIENTATION = \"disorientation\",\n /** Restricted blood flow to area */\n BLOOD_FLOW_RESTRICTION = \"blood_flow_restriction\",\n /** Nerve pathway interruption */\n NERVE_DISRUPTION = \"nerve_disruption\",\n /** Internal organ malfunction */\n ORGAN_DISRUPTION = \"organ_disruption\",\n}\n\n/**\n * Combat states representing the current action phase of a fighter.\n *\n * Determines available actions, defensive capabilities, and animation states.\n * State transitions follow combat flow logic and timing windows.\n *\n * @public\n * @category Combat System\n * @korean 전투상태\n */\nexport enum CombatState {\n /** Neutral state, all actions available */\n IDLE = \"idle\",\n /** Executing an attack, vulnerable to counters */\n ATTACKING = \"attacking\",\n /** In defensive stance, reduced offensive capability */\n DEFENDING = \"defending\",\n /** Temporarily incapacitated, cannot act */\n STUNNED = \"stunned\",\n /** Recovering from action, limited options */\n RECOVERING = \"recovering\",\n /** Executing a counter-attack */\n COUNTERING = \"countering\",\n /** Transitioning between stances */\n TRANSITIONING = \"transitioning\",\n /** Grappling/controlling opponent */\n GRAPPLING = \"grappling\",\n /** Being grappled/controlled */\n GRAPPLED = \"grappled\",\n}\n\n/**\n * Body regions for anatomical targeting in combat.\n *\n * Each region contains multiple vital points and has different\n * defensive properties and vulnerability profiles.\n *\n * @public\n * @category Combat System\n * @korean 신체부위\n */\nexport enum BodyRegion {\n /** Head region - contains critical neurological targets */\n HEAD = \"head\",\n /** Neck region - contains vascular and respiratory targets */\n NECK = \"neck\",\n /** Torso region - contains organ targets */\n TORSO = \"torso\",\n /** Left arm region - contains nerve and joint targets */\n LEFT_ARM = \"left_arm\",\n /** Right arm region - contains nerve and joint targets */\n RIGHT_ARM = \"right_arm\",\n /** Left leg region - contains structural and mobility targets */\n LEFT_LEG = \"left_leg\",\n /** Right leg region - contains structural and mobility targets */\n RIGHT_LEG = \"right_leg\",\n /** Core/center region - contains balance and power centers */\n CORE = \"core\",\n}\n\n/**\n * Grappling state representing control and hold status.\n *\n * **Korean**: 잡기 상태 (Grapple State)\n *\n * Tracks the current phase of a grappling exchange based on Hapkido\n * and Ssireum techniques. State transitions follow realistic grappling\n * flow where control must be established before manipulation.\n *\n * @public\n * @category Combat System\n * @korean 잡기상태\n */\nexport enum GrappleState {\n /** Not in grapple - normal combat */\n NONE = \"none\",\n /** Initiating grab attempt */\n GRABBING = \"grabbing\",\n /** Successfully controlling opponent */\n CONTROLLING = \"controlling\",\n /** Attempting to escape control */\n ESCAPING = \"escaping\",\n /** Transitioning to throw or takedown */\n THROWING = \"throwing\",\n /** Applying joint lock technique */\n LOCKING = \"locking\",\n}\n\n/**\n * Target for grappling techniques.\n *\n * **Korean**: 잡기 목표 (Grapple Target)\n *\n * Specifies which body part is being controlled in a grapple.\n * Different targets allow different follow-up techniques and\n * have different escape difficulties.\n *\n * @public\n * @category Combat System\n * @korean 잡기목표\n */\nexport enum GrappleTarget {\n /** Hand/wrist control - 손목잡기 */\n HAND = \"hand\",\n /** Arm control - 팔잡기 */\n ARM = \"arm\",\n /** Leg control - 다리잡기 */\n LEG = \"leg\",\n /** Torso/body control - 몸통잡기 */\n TORSO = \"torso\",\n /** Neck control - 목잡기 */\n NECK = \"neck\",\n /** Both arms control - 양팔잡기 */\n BOTH_ARMS = \"both_arms\",\n}\n\n/**\n * Grappling control information.\n *\n * **Korean**: 잡기 제어 (Grapple Control)\n *\n * Tracks active grappling state between combatants, including\n * control duration, grip strength, and target limb.\n *\n * @public\n * @category Combat System\n * @korean 잡기제어\n */\nexport interface GrappleControl {\n /** Current grapple state */\n readonly state: GrappleState;\n /** Body part being controlled */\n readonly target: GrappleTarget;\n /** ID of controlling player */\n readonly controllerId: string;\n /** ID of controlled player */\n readonly targetId: string;\n /** Grip strength (0-100) affecting escape difficulty */\n readonly gripStrength: number;\n /** Duration of control in milliseconds */\n readonly duration: number;\n /** Timestamp when grapple was initiated */\n readonly startTime: number;\n /** Whether control can be broken this frame */\n readonly canEscape: boolean;\n /** Stamina cost per second to maintain control */\n readonly staminaCostPerSecond: number;\n}\n\nexport default {};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common.js","names":[],"sources":["../../src/types/common.ts"],"sourcesContent":["/**\n * Common utility types for Korean martial arts game.\n *\n * This module provides foundational types used throughout the Black Trigram (흑괘) game,\n * including geometric types, Korean text support, and utility type helpers.\n *\n * @module types/common\n * @category Type Definitions\n * @korean 공통타입\n */\n\n/**\n * Represents a position in 2D space.\n *\n * **Unit Handling**: The coordinate units depend on the system using this type:\n * - **Combat System**: Coordinates are in **meters** (physics-first architecture)\n * - **Rendering System**: Coordinates are in **pixels** (screen rendering)\n * - **Legacy Systems**: May use pixels or other units\n *\n * When working with combat/physics, positions are in meters relative to arena center (0, 0).\n * Arena boundaries extend from ±worldWidthMeters/2 in X and ±worldDepthMeters/2 in Z (mapped to y).\n *\n * @example\n * ```typescript\n * // Combat position (meters, centered at origin)\n * const playerPos: Position = { x: 2.5, y: -1.0 }; // 2.5m right, 1m back from center\n *\n * // Rendering position (pixels, top-left origin)\n * const screenPos: Position = { x: 640, y: 480 }; // 640px right, 480px down\n * ```\n *\n * @public\n * @category Core Types\n */\nexport interface Position {\n /** X coordinate (meters in combat, pixels in rendering) */\n x: number;\n /** Y coordinate (meters in combat, pixels in rendering) */\n y: number;\n}\n\n/**\n * Represents size dimensions for game objects.\n *\n * @public\n * @category Core Types\n */\nexport interface Size {\n /** Width in pixels */\n readonly width: number;\n /** Height in pixels */\n readonly height: number;\n}\n\n/**\n * Represents rectangle bounds combining position and size.\n *\n * @public\n * @category Core Types\n */\nexport interface Bounds extends Position, Size {}\n\n/**\n * Color represented as a hexadecimal number (e.g., 0xFF0000 for red).\n *\n * @example\n * ```typescript\n * const primaryCyan: Color = 0x00FFFF;\n * const accentGold: Color = 0xFFAA00;\n * ```\n *\n * @public\n * @category Core Types\n */\nexport type Color = number;\n\n/**\n * Time duration in milliseconds.\n *\n * @public\n * @category Core Types\n */\nexport type Duration = number;\n\n/**\n * Percentage value represented as a decimal (0.0 to 1.0).\n *\n * @example\n * ```typescript\n * const halfHealth: Percentage = 0.5;\n * const fullAccuracy: Percentage = 1.0;\n * ```\n *\n * @public\n * @category Core Types\n */\nexport type Percentage = number;\n\n/**\n * Unique identifier string.\n *\n * @public\n * @category Core Types\n */\nexport type ID = string;\n\n/**\n * Generic callback function type.\n *\n * @typeParam T - Return type of the callback, defaults to void\n *\n * @public\n * @category Core Types\n */\nexport type Callback<T = void> = () => T;\n\n/**\n * Event handler function type.\n *\n * @typeParam T - Type of event data, defaults to any\n *\n * @public\n * @category Core Types\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic default allows flexible event handling\nexport type EventHandler<T = any> = (event: T) => void;\n\n/**\n * Utility type to make specific properties optional.\n *\n * @typeParam T - The base type\n * @typeParam K - Keys of T to make optional\n *\n * @public\n * @category Utility Types\n */\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/**\n * Utility type to make specific properties required.\n *\n * @typeParam T - The base type\n * @typeParam K - Keys of T to make required\n *\n * @public\n * @category Utility Types\n */\nexport type Required<T, K extends keyof T> = T & { [P in K]-?: T[P] };\n\n/**\n * Utility type to make all properties deeply readonly.\n *\n * @typeParam T - The type to make deeply readonly\n *\n * @public\n * @category Utility Types\n */\nexport type DeepReadonly<T> = {\n readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];\n};\n\n/**\n * Represents bilingual Korean-English text content.\n *\n * Used throughout the game to provide authentic Korean terminology with English translations,\n * supporting the cultural authenticity of the Korean martial arts theme.\n *\n * @example\n * ```typescript\n * const techniqueName: KoreanText = {\n * korean: \"천둥벽력\",\n * english: \"Thunder Strike\",\n * romanized: \"cheondu byeokryeok\"\n * };\n * ```\n *\n * @public\n * @category Korean Martial Arts\n * @korean 한글텍스트\n */\nexport interface KoreanText {\n /** Korean text in Hangul */\n readonly korean: string;\n /** English translation */\n readonly english: string;\n /** Optional romanized Korean pronunciation */\n readonly romanized?: string;\n}\n\n/**\n * Base entity interface with Korean naming support.\n *\n * Provides a foundation for game entities with bilingual identification.\n *\n * @public\n * @category Korean Martial Arts\n * @korean 한글개체\n */\nexport interface KoreanEntity {\n /** Unique identifier */\n readonly id: ID;\n /** Bilingual name */\n readonly name: KoreanText;\n /** Optional bilingual description */\n readonly description?: KoreanText;\n}\n\n/**\n * Font sizes for Korean text rendering.\n *\n * Provides consistent typography sizing across the game interface.\n *\n * @public\n * @category UI\n * @korean 글자크기\n */\nexport enum KoreanTextSize {\n /** Extra small: 10px */\n XSMALL = \"xsmall\",\n /** Tiny: 12px */\n TINY = \"tiny\",\n /** Small: 14px */\n SMALL = \"small\",\n /** Medium: 16px */\n MEDIUM = \"medium\",\n /** Large: 18px */\n LARGE = \"large\",\n /** Extra large: 20px */\n XLARGE = \"xlarge\",\n /** Double extra large: 24px */\n XXLARGE = \"xxlarge\",\n /** Huge: 32px */\n HUGE = \"huge\",\n /** Title: 48px */\n TITLE = \"title\",\n}\n\n/**\n * Font weights for Korean text rendering.\n *\n * Provides consistent typography weights for Korean Hangul characters.\n *\n * @public\n * @category UI\n * @korean 글자무게\n */\nexport enum KoreanTextWeight {\n /** Light weight: 300 */\n LIGHT = \"light\",\n /** Normal weight: 400 */\n NORMAL = \"normal\",\n /** Regular weight: 400 (alias for NORMAL) */\n REGULAR = \"regular\",\n /** Medium weight: 500 */\n MEDIUM = \"medium\",\n /** Semi-bold weight: 600 */\n SEMIBOLD = \"semibold\",\n /** Bold weight: 700 */\n BOLD = \"bold\",\n /** Heavy weight: 900 */\n HEAVY = \"heavy\",\n}\n\n/**\n * Text alignment options for Korean text.\n *\n * @public\n * @category UI\n */\nexport type KoreanTextAlignment = \"left\" | \"center\" | \"right\";\n\n/**\n * Styling configuration for Korean text rendering.\n *\n * @public\n * @category UI\n * @korean 글자스타일\n */\nexport interface KoreanTextStyle {\n /** Text size */\n readonly size: KoreanTextSize;\n /** Font weight */\n readonly weight: KoreanTextWeight;\n /** Text color as hex number */\n readonly color: number;\n /** Horizontal alignment */\n readonly alignment: KoreanTextAlignment;\n}\n\n/**\n * Represents a range of damage values for combat calculations.\n *\n * Used for techniques and vital point strikes to define variable damage output.\n *\n * @public\n * @category Combat\n * @korean 피해범위\n */\nexport interface DamageRange {\n /** Minimum damage value */\n readonly min: number;\n /** Maximum damage value */\n readonly max: number;\n /** Type of damage dealt */\n readonly type?: DamageType;\n /** Pre-calculated average damage */\n readonly average?: number;\n}\n\n/**\n * Game settings configuration interface for UI controls.\n *\n * Manages volume, graphics quality, control schemes, and language preferences.\n *\n * @public\n * @category UI\n * @korean 게임설정\n */\nexport interface UIGameSettings {\n /** Audio volume settings */\n readonly volume: {\n /** Master volume (0.0 - 1.0) */\n readonly master: number;\n /** Music volume (0.0 - 1.0) */\n readonly music: number;\n /** Sound effects volume (0.0 - 1.0) */\n readonly sfx: number;\n };\n /** Graphics settings */\n readonly graphics: {\n /** Graphics quality preset */\n readonly quality: \"low\" | \"medium\" | \"high\";\n /** Fullscreen mode enabled */\n readonly fullscreen: boolean;\n /** Vertical sync enabled */\n readonly vsync: boolean;\n };\n /** Control settings */\n readonly controls: {\n /** Keyboard layout preference */\n readonly keyboardLayout: \"qwerty\" | \"dvorak\" | \"colemak\";\n /** Mouse sensitivity multiplier */\n readonly mouseSensitivity: number;\n };\n /** Language preference */\n readonly language: \"korean\" | \"english\" | \"both\";\n}\n\n/**\n * Duration tracking for status effects.\n *\n * Tracks when an effect started, when it ends, and its total duration.\n *\n * @public\n * @category Combat\n * @korean 효과지속시간\n */\nexport interface EffectDuration {\n /** Effect start timestamp (milliseconds) */\n readonly startTime: number;\n /** Effect end timestamp (milliseconds) */\n readonly endTime: number;\n /** Total duration (milliseconds) */\n readonly duration: number;\n}\n\n/**\n * Generic game entity with positioning and visibility.\n *\n * Extends {@link KoreanEntity} with spatial and state properties.\n *\n * @public\n * @category Core Types\n * @korean 게임개체\n */\nexport interface GameEntity extends KoreanEntity {\n /** Position in game world */\n readonly position?: Position;\n /** Size dimensions */\n readonly size?: Size;\n /** Whether entity is active */\n readonly active?: boolean;\n /** Whether entity is visible */\n readonly visible?: boolean;\n}\n\n/**\n * Animation transition configuration.\n *\n * Defines how to transition between two states with timing and easing.\n *\n * @public\n * @category UI\n * @korean 전환\n */\nexport interface Transition {\n /** Starting state identifier */\n readonly from: string;\n /** Target state identifier */\n readonly to: string;\n /** Transition duration in milliseconds */\n readonly duration: Duration;\n /** Optional easing function name */\n readonly easing?: string;\n}\n\n/**\n * Theme color configuration.\n *\n * Defines primary colors used throughout the game UI.\n *\n * @public\n * @category UI\n * @korean 테마\n */\nexport interface Theme {\n /** Primary color */\n readonly primary: Color;\n /** Secondary color */\n readonly secondary: Color;\n /** Accent color */\n readonly accent?: Color;\n /** Background color */\n readonly background?: Color;\n /** Text color */\n readonly text?: Color;\n}\n\n/**\n * Generic configuration object.\n *\n * @public\n * @category Core Types\n */\nexport interface Config {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Config values can be of various types\n readonly [key: string]: any;\n}\n\n/**\n * Generic result wrapper for operations that may succeed or fail.\n *\n * @typeParam T - Type of successful result data\n * @typeParam E - Type of error, defaults to Error\n *\n * @example\n * ```typescript\n * const result: Result<PlayerState> = {\n * success: true,\n * data: playerState\n * };\n * ```\n *\n * @public\n * @category Core Types\n */\nexport interface Result<T, E = Error> {\n /** Whether operation succeeded */\n readonly success: boolean;\n /** Result data if successful */\n readonly data?: T;\n /** Error if operation failed */\n readonly error?: E;\n /** Optional message */\n readonly message?: string;\n}\n\n/**\n * Validation result with errors and warnings.\n *\n * @public\n * @category Core Types\n */\nexport interface ValidationResult {\n /** Whether validation passed */\n readonly valid: boolean;\n /** List of validation errors */\n readonly errors: readonly string[];\n /** Optional list of warnings */\n readonly warnings?: readonly string[];\n}\n\n/**\n * Game modes available in Black Trigram.\n *\n * Each mode offers different gameplay experiences and training opportunities.\n *\n * @public\n * @category Game Systems\n * @korean 게임모드\n */\nexport enum GameMode {\n /** Versus mode: Player vs AI or Player vs Player */\n VERSUS = \"versus\",\n /** Training mode: Practice techniques against training dummy */\n TRAINING = \"training\",\n /** Tutorial mode: Learn game mechanics and controls */\n TUTORIAL = \"tutorial\",\n /** Practice mode: Free form combat practice */\n PRACTICE = \"practice\",\n /** Story mode: Campaign with narrative */\n STORY = \"story\",\n /** Arcade mode: Progressive difficulty challenges */\n ARCADE = \"arcade\",\n /** Controls screen: View and customize controls */\n CONTROLS = \"controls\",\n /** Philosophy screen: Learn about Korean martial arts philosophy */\n PHILOSOPHY = \"philosophy\",\n}\n\n/**\n * Game phases representing the current state of the game.\n *\n * Controls which screen is displayed and what game logic is active.\n *\n * @public\n * @category Game Systems\n * @korean 게임단계\n */\nexport enum GamePhase {\n /** Intro/splash screen */\n INTRO = \"intro\",\n /** Main menu */\n MENU = \"menu\",\n /** Character selection screen */\n CHARACTER_SELECT = \"character_select\",\n /** Active combat */\n COMBAT = \"combat\",\n /** Training mode */\n TRAINING = \"training\",\n /** Victory screen */\n VICTORY = \"victory\",\n /** Defeat screen */\n DEFEAT = \"defeat\",\n /** Game paused */\n PAUSED = \"paused\",\n /** Game over screen */\n GAME_OVER = \"game_over\",\n /** Loading screen */\n LOADING = \"loading\",\n}\n\n/**\n * Player archetypes representing Korean martial arts combat specialists.\n *\n * **Korean**: 플레이어 원형 (Player Archetypes)\n *\n * Each archetype has unique combat styles, favored stances, and philosophical approaches\n * rooted in Korean martial arts traditions and modern cyberpunk adaptation.\n *\n * @example\n * ```typescript\n * const player = createPlayer({\n * archetype: PlayerArchetype.MUSA,\n * name: { korean: \"이순신\", english: \"Yi Sun-sin\" }\n * });\n * ```\n *\n * @public\n * @category Player & Archetypes\n * @korean 플레이어원형\n */\nexport enum PlayerArchetype {\n /**\n * 무사 (Musa) - Traditional Warrior\n *\n * Honor-bound martial artist following traditional Korean warrior codes.\n * Favors direct confrontation and disciplined techniques.\n */\n MUSA = \"musa\",\n\n /**\n * 암살자 (Amsalja) - Shadow Assassin\n *\n * Precision striker focused on vital point targeting and silent elimination.\n * Specializes in nerve strikes and pressure point techniques.\n */\n AMSALJA = \"amsalja\",\n\n /**\n * 해커 (Hacker) - Cyber Warrior\n *\n * Technology-enhanced combatant blending modern cybernetics with traditional techniques.\n * Uses augmented reflexes and data-driven combat analysis.\n */\n HACKER = \"hacker\",\n\n /**\n * 정보요원 (Jeongbo Yowon) - Intelligence Operative\n *\n * Strategic analyst who uses combat intelligence and tactical advantage.\n * Excels at reading opponent patterns and exploiting weaknesses.\n */\n JEONGBO_YOWON = \"jeongbo_yowon\",\n\n /**\n * 조직폭력배 (Jojik Pokryeokbae) - Organized Crime\n *\n * Ruthless pragmatist who ignores traditional honor codes.\n * Uses brutal, efficient techniques with no concern for ethics.\n */\n JOJIK_POKRYEOKBAE = \"jojik_pokryeokbae\",\n}\n\n/**\n * Physical attributes representing realistic body dimensions and composition.\n *\n * **Korean**: 신체 속성 (Body Attributes)\n *\n * These attributes affect combat calculations including reach, movement speed,\n * damage output, defense capability, and stamina. Based on realistic human\n * physiology and Korean martial arts biomechanics.\n *\n * ## Combat Impact\n *\n * - **Weight**: Affects movement speed, knockback resistance, and throw effectiveness\n * - **Leg Length**: Determines kick range and movement speed base\n * - **Arm Length**: Determines punch/strike range and grappling reach\n * - **Muscle Mass**: Affects base damage output and stamina pool\n * - **Fat Mass**: Affects defense absorption and stamina drain rate\n * - **Age**: Affects stamina recovery speed and Ki regeneration\n *\n * @example\n * ```typescript\n * const musaPhysical: PhysicalAttributes = {\n * weight: 75, // kg - balanced warrior\n * legLength: 95, // cm - average leg reach\n * armLength: 75, // cm - average arm reach\n * muscleMass: 38, // kg - high muscle for power\n * fatMass: 12, // kg - low fat for mobility\n * age: 32, // years - prime combat age\n * };\n * ```\n *\n * @public\n * @category Player & Archetypes\n * @korean 신체속성\n */\nexport interface PhysicalAttributes {\n /**\n * Body weight in kilograms.\n *\n * **Korean**: 체중 (Body Weight)\n *\n * Typical Range: 55-95 kg for combatants\n * - Affects movement speed (inversely)\n * - Affects knockback resistance (positively)\n * - Affects throw effectiveness (positively)\n * - Affects ground control (positively)\n */\n readonly weight: number;\n\n /**\n * Leg length in centimeters (hip to ankle).\n *\n * **Korean**: 다리 길이 (Leg Length)\n *\n * Typical Range: 85-105 cm\n * - Determines kick technique maximum range\n * - Affects base movement speed\n * - Affects sweep technique effectiveness\n * - Affects jumping attack height\n */\n readonly legLength: number;\n\n /**\n * Arm length in centimeters (shoulder to wrist).\n *\n * **Korean**: 팔 길이 (Arm Length)\n *\n * Typical Range: 65-85 cm\n * - Determines punch/strike technique range\n * - Affects grappling and throw range\n * - Affects block coverage area\n * - Affects elbow strike effectiveness\n */\n readonly armLength: number;\n\n /**\n * Muscle mass in kilograms.\n *\n * **Korean**: 근육량 (Muscle Mass)\n *\n * Typical Range: 25-45 kg\n * - Affects base damage output (positively)\n * - Affects maximum stamina pool (positively)\n * - Affects grappling and throw power\n * - Affects movement acceleration\n */\n readonly muscleMass: number;\n\n /**\n * Fat mass in kilograms.\n *\n * **Korean**: 지방량 (Fat Mass)\n *\n * Typical Range: 8-20 kg for combatants\n * - Affects blunt damage absorption (positively)\n * - Affects stamina drain rate (negatively)\n * - Affects movement speed (negatively)\n * - Affects recovery time between actions\n */\n readonly fatMass: number;\n\n /**\n * Age in years.\n *\n * **Korean**: 나이 (Age)\n *\n * Typical Range: 22-45 years for peak combatants\n * - Affects stamina recovery speed (optimal 25-35)\n * - Affects Ki regeneration rate (wisdom with age)\n * - Affects injury recovery time (slower with age)\n * - Affects technique execution speed (prime 28-35)\n */\n readonly age: number;\n\n /**\n * Total body height in centimeters.\n *\n * **Korean**: 키 (Height)\n *\n * Typical Range: 160-195 cm\n * - Scales entire skeleton proportionally\n * - Affects reach calculations (combined with limb ratios)\n * - Affects center of gravity positioning\n * - Determines visual body model scaling\n * - Influences balance and stability in stances\n */\n readonly totalHeight: number;\n\n /**\n * Torso length in centimeters (pelvis to shoulders).\n *\n * **Korean**: 몸통 길이 (Torso Length)\n *\n * Typical Range: 50-65 cm\n * - Affects core hitbox size and vital point positioning\n * - Influences breath control and stamina capacity\n * - Affects spinal rotation range in techniques\n * - Determines torso vital point target area\n * - Impacts center of mass calculations\n */\n readonly torsoLength: number;\n\n /**\n * Head size (diameter) in centimeters.\n *\n * **Korean**: 머리 크기 (Head Size)\n *\n * Typical Range: 20-24 cm\n * - Affects head vital point targeting precision\n * - Determines head hitbox size for strikes\n * - Influences helmet/headgear fit (if applicable)\n * - Affects visual skull scaling in 3D model\n * - Impacts consciousness vulnerability to head trauma\n */\n readonly headSize: number;\n\n /**\n * Neck length in centimeters (skull base to shoulders).\n *\n * **Korean**: 목 길이 (Neck Length)\n *\n * Typical Range: 8-12 cm\n * - Affects vulnerability to chokes and strangles\n * - Determines neck vital point target area\n * - Influences blood choke effectiveness\n * - Affects guillotine and rear naked choke mechanics\n * - Impacts head mobility and evasion capability\n */\n readonly neckLength: number;\n\n /**\n * Shoulder width in centimeters (shoulder to shoulder).\n *\n * **Korean**: 어깨 너비 (Shoulder Width)\n *\n * Typical Range: 38-48 cm\n * - Affects defense coverage area (blocking)\n * - Determines upper body strike zone width\n * - Influences grappling control positions\n * - Affects visual upper body model scaling\n * - Impacts balance and stability in wide stances\n */\n readonly shoulderWidth: number;\n\n /**\n * Base walking speed in meters per second.\n *\n * **Korean**: 걷기 속도 (Walk Speed)\n *\n * Typical Range: 5.0-6.5 m/s for combat movement\n * - Determines tactical repositioning speed\n * - Affected by weight and leg length\n * - Base speed for defensive movement\n * - Modified by stance and combat state\n */\n readonly walkSpeed: number;\n\n /**\n * Base running speed in meters per second.\n *\n * **Korean**: 달리기 속도 (Run Speed)\n *\n * Typical Range: 8.0-11.0 m/s for sprint movement\n * - Determines rapid repositioning speed\n * - Affected by muscle mass and conditioning\n * - Base speed for aggressive approach\n * - Consumes stamina during use\n */\n readonly runSpeed: number;\n\n /**\n * Base acceleration in meters per second squared.\n *\n * **Korean**: 가속도 (Acceleration)\n *\n * Typical Range: 9.0-15.0 m/s² for combat movement\n * - Determines how quickly fighter reaches max speed\n * - Based on muscle-to-weight ratio (explosiveness)\n * - Higher = more explosive starts and direction changes\n * - Affects combat responsiveness and evasion\n */\n readonly acceleration: number;\n}\n\n/**\n * Eight Trigram stances (팔괘) representing fundamental combat principles.\n *\n * **Korean**: 팔괘 자세 (Eight Trigram Stances)\n * **Origin**: I Ching (易經 / Yijing) divination system adapted for Korean martial arts\n *\n * The Eight Trigrams (Bagua / 八卦) form the foundation of the combat system.\n * Each trigram represents a natural element and combat philosophy, influencing\n * available techniques, movement patterns, and strategic advantages.\n *\n * ## Trigram Philosophy\n *\n * - **☰ 건 (Geon)** - Heaven: Yang energy, direct aggression, overwhelming force\n * - **☱ 태 (Tae)** - Lake: Joy and fluidity, joint locks and flow techniques\n * - **☲ 리 (Li)** - Fire: Precision and speed, nerve strikes and rapid attacks\n * - **☳ 진 (Jin)** - Thunder: Explosive power, shocking techniques\n * - **☴ 손 (Son)** - Wind: Continuous pressure, evasion and mobility\n * - **☵ 감 (Gam)** - Water: Adaptive flow, counters and redirection\n * - **☶ 간 (Gan)** - Mountain: Immovable defense, endurance and patience\n * - **☷ 곤 (Gon)** - Earth: Grounding techniques, takedowns and throws\n *\n * @example\n * ```typescript\n * // Change to Heaven stance for aggressive attack\n * player.currentStance = TrigramStance.GEON;\n *\n * // Execute heaven-aligned technique\n * const technique = getTrigramTechniques(TrigramStance.GEON)[0];\n * executeTechnique(player, opponent, technique);\n * ```\n *\n * @see {@link https://en.wikipedia.org/wiki/Bagua | Bagua (Eight Trigrams) - Wikipedia}\n * @see {@link https://en.wikipedia.org/wiki/I_Ching | I Ching - Wikipedia}\n *\n * @public\n * @category Trigram System\n * @category Korean Martial Arts\n * @korean 팔괘\n */\nexport enum TrigramStance {\n /**\n * ☰ 건 (Geon) - Heaven Stance\n *\n * **Element**: Heaven / Sky (天)\n * **Nature**: Yang, creative, strong\n * **Combat Style**: Direct force, aggressive techniques, overwhelming power\n * **Philosophy**: \"The creative principle - pure yang energy that drives forward\"\n *\n * Techniques emphasize straight attacks, powerful strikes, and dominant positioning.\n */\n GEON = \"geon\",\n\n /**\n * ☱ 태 (Tae) - Lake Stance\n *\n * **Element**: Lake / Marsh (澤)\n * **Nature**: Yin exterior, Yang interior - joyful movement\n * **Combat Style**: Fluid joint manipulation, flowing techniques, adaptable responses\n * **Philosophy**: \"The joyful - water above earth, freedom of movement\"\n *\n * Techniques focus on joint locks, throws, and using opponent's momentum.\n */\n TAE = \"tae\",\n\n /**\n * ☲ 리 (Li) - Fire Stance\n *\n * **Element**: Fire / Flame (火)\n * **Nature**: Yang exterior, Yin interior - bright and precise\n * **Combat Style**: Precise nerve strikes, rapid attacks, speed techniques\n * **Philosophy**: \"The clinging - illuminating and consuming\"\n *\n * Techniques emphasize vital point targeting, quick combinations, and precision.\n */\n LI = \"li\",\n\n /**\n * ☳ 진 (Jin) - Thunder Stance\n *\n * **Element**: Thunder / Arousing (雷)\n * **Nature**: Yang moving, sudden and shocking\n * **Combat Style**: Explosive power, shocking techniques, sudden movements\n * **Philosophy**: \"The arousing - thunder brings shock and awakening\"\n *\n * Techniques feature explosive bursts, stunning strikes, and overwhelming force.\n */\n JIN = \"jin\",\n\n /**\n * ☴ 손 (Son) - Wind Stance\n *\n * **Element**: Wind / Wood (風)\n * **Nature**: Yin, gentle but penetrating\n * **Combat Style**: Continuous pressure, evasion techniques, mobility\n * **Philosophy**: \"The gentle - penetrating like wind, persistent like wood\"\n *\n * Techniques emphasize movement, pressure point chains, and wearing down opponents.\n */\n SON = \"son\",\n\n /**\n * ☵ 감 (Gam) - Water Stance\n *\n * **Element**: Water / Abyss (水)\n * **Nature**: Yang surrounded by Yin - dangerous depths\n * **Combat Style**: Flow and adaptation, counter techniques, redirection\n * **Philosophy**: \"The abysmal - water flows around obstacles and fills voids\"\n *\n * Techniques focus on counters, deflections, and adaptive responses.\n */\n GAM = \"gam\",\n\n /**\n * ☶ 간 (Gan) - Mountain Stance\n *\n * **Element**: Mountain / Stillness (山)\n * **Nature**: Yang above Yin - firm and unyielding\n * **Combat Style**: Defensive mastery, immovable stance, endurance\n * **Philosophy**: \"The keeping still - mountains are firm and unmoving\"\n *\n * Techniques emphasize blocks, parries, and defensive positioning.\n */\n GAN = \"gan\",\n\n /**\n * ☷ 곤 (Gon) - Earth Stance\n *\n * **Element**: Earth / Receptive (地)\n * **Nature**: Pure Yin - receptive and yielding\n * **Combat Style**: Grounding techniques, takedowns, throws\n * **Philosophy**: \"The receptive - earth receives and supports all\"\n *\n * Techniques focus on sweeps, trips, takedowns, and ground control.\n */\n GON = \"gon\",\n}\n\n/**\n * Combat attack types available in the game.\n *\n * Defines the mechanical type of attack being performed, which affects\n * damage calculation, vital point targeting, and defensive options.\n *\n * @public\n * @category Combat System\n * @korean 공격타입\n */\nexport enum CombatAttackType {\n /** Standard striking attack */\n STRIKE = \"strike\",\n /** Thrusting attack with focused force */\n THRUST = \"thrust\",\n /** Defensive blocking action */\n BLOCK = \"block\",\n /** Counter-attack performed after successful defense */\n COUNTER_ATTACK = \"counter_attack\",\n /** Throwing technique to off-balance opponent */\n THROW = \"throw\",\n /** Grappling and joint control technique */\n GRAPPLE = \"grapple\",\n /** Precise pressure point strike */\n PRESSURE_POINT = \"pressure_point\",\n /** Nerve disruption strike */\n NERVE_STRIKE = \"nerve_strike\",\n /** Closed fist punch */\n PUNCH = \"punch\",\n /** Leg kick attack */\n KICK = \"kick\",\n /** Elbow strike */\n ELBOW = \"elbow\",\n /** Knee strike */\n KNEE = \"knee\",\n}\n\n/**\n * Damage types representing different methods of inflicting harm.\n *\n * Each damage type interacts differently with vital points and defensive techniques.\n * Some types are more effective against specific body regions or defense styles.\n *\n * @public\n * @category Combat System\n * @korean 피해타입\n */\nexport enum DamageType {\n /** Blunt force trauma */\n BLUNT = \"blunt\",\n /** Piercing damage penetrating tissue */\n PIERCING = \"piercing\",\n /** Slashing cuts */\n SLASHING = \"slashing\",\n /** Pressure point manipulation */\n PRESSURE = \"pressure\",\n /** Nerve disruption */\n NERVE = \"nerve\",\n /** Joint manipulation and locks */\n JOINT = \"joint\",\n /** Internal organ damage */\n INTERNAL = \"internal\",\n /** Impact shock */\n IMPACT = \"impact\",\n /** Crushing force */\n CRUSHING = \"crushing\",\n /** Sharp edge damage */\n SHARP = \"sharp\",\n /** Electric shock */\n ELECTRIC = \"electric\",\n /** Fire/heat damage */\n FIRE = \"fire\",\n /** Cold/freeze damage */\n ICE = \"ice\",\n /** Poison/toxin damage */\n POISON = \"poison\",\n /** Psychic/mental damage */\n PSYCHIC = \"psychic\",\n /** Blood loss damage */\n BLOOD = \"blood\",\n}\n\n/**\n * Vital point categories representing anatomical targeting systems.\n *\n * **Korean**: 급소 범주 (Vital Point Categories)\n *\n * The game features 70 Korean vital points (급소) based on traditional martial arts\n * knowledge and modern anatomical understanding. Each category represents different\n * physiological systems that can be targeted for combat effectiveness.\n *\n * @example\n * ```typescript\n * const vitalPoint: VitalPoint = {\n * id: \"GB-20\",\n * category: VitalPointCategory.NEUROLOGICAL,\n * severity: VitalPointSeverity.CRITICAL,\n * name: { korean: \"풍지\", english: \"Wind Pool\" }\n * };\n * ```\n *\n * @public\n * @category Vital Point System\n * @korean 급소범주\n */\nexport enum VitalPointCategory {\n /** Neurological system - nerve clusters and neural pathways */\n NEUROLOGICAL = \"neurological\",\n /** Vascular system - major blood vessels and circulation */\n VASCULAR = \"vascular\",\n /** Respiratory system - airways and breathing mechanisms */\n RESPIRATORY = \"respiratory\",\n /** Muscular system - muscle groups and tendons */\n MUSCULAR = \"muscular\",\n /** Skeletal system - bones and structural supports */\n SKELETAL = \"skeletal\",\n /** Organ system - internal organs */\n ORGAN = \"organ\",\n /** Circulatory system - heart and blood flow */\n CIRCULATORY = \"circulatory\",\n /** Lymphatic system - lymph nodes and immune response */\n LYMPHATIC = \"lymphatic\",\n /** Endocrine system - hormonal glands */\n ENDOCRINE = \"endocrine\",\n /** Joint system - articulation points */\n JOINT = \"joint\",\n /** Nerve system - peripheral nerves */\n NERVE = \"nerve\",\n /** Pressure system - pressure-sensitive areas */\n PRESSURE = \"pressure\",\n}\n\n/**\n * Vital point severity levels indicating potential impact.\n *\n * Determines the damage multiplier and status effects applied when\n * a vital point is successfully struck.\n *\n * ## Severity Guidelines\n *\n * - **MINOR**: 1.1-1.3x damage, temporary discomfort\n * - **MODERATE**: 1.5-2.0x damage, brief incapacitation\n * - **MAJOR**: 2.5-3.5x damage, significant impairment\n * - **CRITICAL**: 4.0-5.0x damage, severe trauma\n * - **LETHAL**: 6.0-10.0x damage, immediate incapacitation\n *\n * @public\n * @category Vital Point System\n * @korean 급소심각도\n */\nexport enum VitalPointSeverity {\n /** Minor impact - temporary pain or discomfort */\n MINOR = \"minor\",\n /** Moderate impact - brief stunning or reduced effectiveness */\n MODERATE = \"moderate\",\n /** Major impact - significant damage and impairment */\n MAJOR = \"major\",\n /** Critical impact - severe trauma requiring immediate response */\n CRITICAL = \"critical\",\n /** Lethal impact - immediate incapacitation or death */\n LETHAL = \"lethal\",\n}\n\n/**\n * Status effects that can result from vital point strikes.\n *\n * Each effect type represents a physiological response to targeting\n * specific anatomical structures. Effects stack and interact with\n * combat mechanics.\n *\n * @public\n * @category Vital Point System\n * @korean 급소효과\n */\nexport enum VitalPointEffectType {\n /** Loss of consciousness */\n UNCONSCIOUSNESS = \"unconsciousness\",\n /** Inability to breathe properly */\n BREATHLESSNESS = \"breathlessness\",\n /** Intense pain reducing combat effectiveness */\n PAIN = \"pain\",\n /** Temporary or permanent paralysis */\n PARALYSIS = \"paralysis\",\n /** Brief stunning preventing action */\n STUN = \"stun\",\n /** Reduced strength and effectiveness */\n WEAKNESS = \"weakness\",\n /** Confusion and impaired targeting */\n DISORIENTATION = \"disorientation\",\n /** Restricted blood flow to area */\n BLOOD_FLOW_RESTRICTION = \"blood_flow_restriction\",\n /** Nerve pathway interruption */\n NERVE_DISRUPTION = \"nerve_disruption\",\n /** Internal organ malfunction */\n ORGAN_DISRUPTION = \"organ_disruption\",\n}\n\n/**\n * Combat states representing the current action phase of a fighter.\n *\n * Determines available actions, defensive capabilities, and animation states.\n * State transitions follow combat flow logic and timing windows.\n *\n * @public\n * @category Combat System\n * @korean 전투상태\n */\nexport enum CombatState {\n /** Neutral state, all actions available */\n IDLE = \"idle\",\n /** Executing an attack, vulnerable to counters */\n ATTACKING = \"attacking\",\n /** In defensive stance, reduced offensive capability */\n DEFENDING = \"defending\",\n /** Temporarily incapacitated, cannot act */\n STUNNED = \"stunned\",\n /** Recovering from action, limited options */\n RECOVERING = \"recovering\",\n /** Executing a counter-attack */\n COUNTERING = \"countering\",\n /** Transitioning between stances */\n TRANSITIONING = \"transitioning\",\n /** Grappling/controlling opponent */\n GRAPPLING = \"grappling\",\n /** Being grappled/controlled */\n GRAPPLED = \"grappled\",\n}\n\n/**\n * Body regions for anatomical targeting in combat.\n *\n * Each region contains multiple vital points and has different\n * defensive properties and vulnerability profiles.\n *\n * @public\n * @category Combat System\n * @korean 신체부위\n */\nexport enum BodyRegion {\n /** Head region - contains critical neurological targets */\n HEAD = \"head\",\n /** Neck region - contains vascular and respiratory targets */\n NECK = \"neck\",\n /** Torso region - contains organ targets */\n TORSO = \"torso\",\n /** Left arm region - contains nerve and joint targets */\n LEFT_ARM = \"left_arm\",\n /** Right arm region - contains nerve and joint targets */\n RIGHT_ARM = \"right_arm\",\n /** Left leg region - contains structural and mobility targets */\n LEFT_LEG = \"left_leg\",\n /** Right leg region - contains structural and mobility targets */\n RIGHT_LEG = \"right_leg\",\n /** Core/center region - contains balance and power centers */\n CORE = \"core\",\n}\n\n/**\n * Grappling state representing control and hold status.\n *\n * **Korean**: 잡기 상태 (Grapple State)\n *\n * Tracks the current phase of a grappling exchange based on Hapkido\n * and Ssireum techniques. State transitions follow realistic grappling\n * flow where control must be established before manipulation.\n *\n * @public\n * @category Combat System\n * @korean 잡기상태\n */\nexport enum GrappleState {\n /** Not in grapple - normal combat */\n NONE = \"none\",\n /** Initiating grab attempt */\n GRABBING = \"grabbing\",\n /** Successfully controlling opponent */\n CONTROLLING = \"controlling\",\n /** Attempting to escape control */\n ESCAPING = \"escaping\",\n /** Transitioning to throw or takedown */\n THROWING = \"throwing\",\n /** Applying joint lock technique */\n LOCKING = \"locking\",\n}\n\n/**\n * Target for grappling techniques.\n *\n * **Korean**: 잡기 목표 (Grapple Target)\n *\n * Specifies which body part is being controlled in a grapple.\n * Different targets allow different follow-up techniques and\n * have different escape difficulties.\n *\n * @public\n * @category Combat System\n * @korean 잡기목표\n */\nexport enum GrappleTarget {\n /** Hand/wrist control - 손목잡기 */\n HAND = \"hand\",\n /** Arm control - 팔잡기 */\n ARM = \"arm\",\n /** Leg control - 다리잡기 */\n LEG = \"leg\",\n /** Torso/body control - 몸통잡기 */\n TORSO = \"torso\",\n /** Neck control - 목잡기 */\n NECK = \"neck\",\n /** Both arms control - 양팔잡기 */\n BOTH_ARMS = \"both_arms\",\n}\n\n/**\n * Grappling control information.\n *\n * **Korean**: 잡기 제어 (Grapple Control)\n *\n * Tracks active grappling state between combatants, including\n * control duration, grip strength, and target limb.\n *\n * @public\n * @category Combat System\n * @korean 잡기제어\n */\nexport interface GrappleControl {\n /** Current grapple state */\n readonly state: GrappleState;\n /** Body part being controlled */\n readonly target: GrappleTarget;\n /** ID of controlling player */\n readonly controllerId: string;\n /** ID of controlled player */\n readonly targetId: string;\n /** Grip strength (0-100) affecting escape difficulty */\n readonly gripStrength: number;\n /** Duration of control in milliseconds */\n readonly duration: number;\n /** Timestamp when grapple was initiated */\n readonly startTime: number;\n /** Whether control can be broken this frame */\n readonly canEscape: boolean;\n /** Stamina cost per second to maintain control */\n readonly staminaCostPerSecond: number;\n}\n\nexport default {};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animations.js","names":[],"sources":["../../../src/types/constants/animations.ts"],"sourcesContent":["/**\n * Animation constants for Black Trigram Korean martial arts.\n *\n * @module types/constants/animations\n * @category Animation Constants\n * @korean 애니메이션상수\n */\n\n/**\n * Animation durations in milliseconds for UI and combat animations.\n *\n * @constant\n * @category Animation Constants\n * @korean 애니메이션지속시간\n */\nexport const ANIMATION_DURATIONS = {\n // UI animations\n BUTTON_HOVER: 150,\n BUTTON_PRESS: 100,\n MODAL_FADE: 300,\n SCREEN_TRANSITION: 500,\n\n // Combat animations\n BASIC_ATTACK: 400,\n HEAVY_ATTACK: 600,\n BLOCK: 200,\n DODGE: 300,\n STANCE_CHANGE: 500,\n\n // Effect animations\n HIT_FLASH: 100,\n DAMAGE_NUMBER: 1000,\n STATUS_EFFECT: 2000,\n PARTICLE_LIFE: 800,\n\n // Korean martial arts specific\n TRIGRAM_TRANSITION: 600,\n VITAL_POINT_HIGHLIGHT: 300,\n KI_FLOW_PULSE: 1200,\n} as const;\n\n/**\n * Animation easing curve definitions.\n *\n * @constant\n * @category Animation Constants\n * @korean 애니메이션이징곡선\n */\nexport const ANIMATION_EASING = {\n LINEAR: \"linear\",\n EASE_IN: \"ease-in\",\n EASE_OUT: \"ease-out\",\n EASE_IN_OUT: \"ease-in-out\",\n BOUNCE: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n ELASTIC: \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\",\n BACK: \"cubic-bezier(0.6, -0.28, 0.735, 0.045)\",\n} as const;\n\n/**\n * Animation frame configurations for common animation states.\n *\n * @constant\n * @category Animation Constants\n * @korean 애니메이션프레임설정\n */\nexport const FRAME_CONFIGS = {\n IDLE: {\n frames: 4,\n duration: 1000,\n loop: true,\n },\n WALK: {\n frames: 6,\n duration: 600,\n loop: true,\n },\n ATTACK: {\n frames: 8,\n duration: 400,\n loop: false,\n },\n BLOCK: {\n frames: 3,\n duration: 200,\n loop: false,\n },\n HIT: {\n frames: 4,\n duration: 300,\n loop: false,\n },\n} as const;\n\n/**\n * Korean martial arts specific animation sequences.\n *\n * Defines stance transitions and technique animations for the Eight Trigram system.\n *\n * @constant\n * @category Animation Constants\n * @korean 한국무술애니메이션순서\n */\nexport const KOREAN_MARTIAL_ANIMATIONS = {\n STANCE_TRANSITIONS: {\n GEON_TO_TAE: { frames: 12, duration: 500 },\n TAE_TO_LI: { frames: 10, duration: 450 },\n LI_TO_JIN: { frames: 14, duration: 550 },\n // ... other transitions\n },\n\n TECHNIQUE_ANIMATIONS: {\n PALM_STRIKE: { frames: 8, duration: 400 },\n FLYING_KICK: { frames: 12, duration: 600 },\n PRESSURE_POINT: { frames: 6, duration: 300 },\n VITAL_POINT_STRIKE: { frames: 10, duration: 500 },\n },\n} as const;\n\nexport default ANIMATION_DURATIONS;\n"],"mappings":";;;;;;;;;;;;;;;AAeA,IAAa,sBAAsB;CAEjC,cAAc;CACd,cAAc;CACd,YAAY;CACZ,mBAAmB;CAGnB,cAAc;CACd,cAAc;CACd,OAAO;CACP,OAAO;CACP,eAAe;CAGf,WAAW;CACX,eAAe;CACf,eAAe;CACf,eAAe;CAGf,oBAAoB;CACpB,uBAAuB;CACvB,eAAe;
|
|
1
|
+
{"version":3,"file":"animations.js","names":[],"sources":["../../../src/types/constants/animations.ts"],"sourcesContent":["/**\n * Animation constants for Black Trigram Korean martial arts.\n *\n * @module types/constants/animations\n * @category Animation Constants\n * @korean 애니메이션상수\n */\n\n/**\n * Animation durations in milliseconds for UI and combat animations.\n *\n * @constant\n * @category Animation Constants\n * @korean 애니메이션지속시간\n */\nexport const ANIMATION_DURATIONS = {\n // UI animations\n BUTTON_HOVER: 150,\n BUTTON_PRESS: 100,\n MODAL_FADE: 300,\n SCREEN_TRANSITION: 500,\n\n // Combat animations\n BASIC_ATTACK: 400,\n HEAVY_ATTACK: 600,\n BLOCK: 200,\n DODGE: 300,\n STANCE_CHANGE: 500,\n\n // Effect animations\n HIT_FLASH: 100,\n DAMAGE_NUMBER: 1000,\n STATUS_EFFECT: 2000,\n PARTICLE_LIFE: 800,\n\n // Korean martial arts specific\n TRIGRAM_TRANSITION: 600,\n VITAL_POINT_HIGHLIGHT: 300,\n KI_FLOW_PULSE: 1200,\n} as const;\n\n/**\n * Animation easing curve definitions.\n *\n * @constant\n * @category Animation Constants\n * @korean 애니메이션이징곡선\n */\nexport const ANIMATION_EASING = {\n LINEAR: \"linear\",\n EASE_IN: \"ease-in\",\n EASE_OUT: \"ease-out\",\n EASE_IN_OUT: \"ease-in-out\",\n BOUNCE: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n ELASTIC: \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\",\n BACK: \"cubic-bezier(0.6, -0.28, 0.735, 0.045)\",\n} as const;\n\n/**\n * Animation frame configurations for common animation states.\n *\n * @constant\n * @category Animation Constants\n * @korean 애니메이션프레임설정\n */\nexport const FRAME_CONFIGS = {\n IDLE: {\n frames: 4,\n duration: 1000,\n loop: true,\n },\n WALK: {\n frames: 6,\n duration: 600,\n loop: true,\n },\n ATTACK: {\n frames: 8,\n duration: 400,\n loop: false,\n },\n BLOCK: {\n frames: 3,\n duration: 200,\n loop: false,\n },\n HIT: {\n frames: 4,\n duration: 300,\n loop: false,\n },\n} as const;\n\n/**\n * Korean martial arts specific animation sequences.\n *\n * Defines stance transitions and technique animations for the Eight Trigram system.\n *\n * @constant\n * @category Animation Constants\n * @korean 한국무술애니메이션순서\n */\nexport const KOREAN_MARTIAL_ANIMATIONS = {\n STANCE_TRANSITIONS: {\n GEON_TO_TAE: { frames: 12, duration: 500 },\n TAE_TO_LI: { frames: 10, duration: 450 },\n LI_TO_JIN: { frames: 14, duration: 550 },\n // ... other transitions\n },\n\n TECHNIQUE_ANIMATIONS: {\n PALM_STRIKE: { frames: 8, duration: 400 },\n FLYING_KICK: { frames: 12, duration: 600 },\n PRESSURE_POINT: { frames: 6, duration: 300 },\n VITAL_POINT_STRIKE: { frames: 10, duration: 500 },\n },\n} as const;\n\nexport default ANIMATION_DURATIONS;\n"],"mappings":";;;;;;;;;;;;;;;AAeA,IAAa,sBAAsB;CAEjC,cAAc;CACd,cAAc;CACd,YAAY;CACZ,mBAAmB;CAGnB,cAAc;CACd,cAAc;CACd,OAAO;CACP,OAAO;CACP,eAAe;CAGf,WAAW;CACX,eAAe;CACf,eAAe;CACf,eAAe;CAGf,oBAAoB;CACpB,uBAAuB;CACvB,eAAe;AACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","names":[],"sources":["../../../src/types/constants/colors.ts"],"sourcesContent":["/**\n * Color palette for Black Trigram Korean martial arts game.\n *\n * Cyberpunk aesthetic with Korean traditional influences.\n *\n * WCAG 2.1 Level AA Compliance:\n * - Text colors meet 4.5:1 contrast ratio on dark backgrounds\n * - UI elements meet 3:1 contrast ratio\n * - Focus indicators use 2px borders with high contrast\n *\n * @see https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html\n *\n * @module types/constants/colors\n * @category Color Constants\n * @korean 색상팔레트\n */\n\n/**\n * Primary Korean cyberpunk color palette with WCAG 2.1 AA compliance.\n *\n * @constant\n * @category Color Constants\n * @korean 한국색상\n */\nexport const KOREAN_COLORS = {\n // Primary colors (Cyberpunk neon) - WCAG AA compliant on dark backgrounds\n PRIMARY_CYAN: 0x00e6e6, // Increased brightness for better contrast (was 0x00ffff)\n PRIMARY_BLUE: 0x0066ff,\n PRIMARY_BLUE_DARK: 0x003399,\n\n // Fix: Add missing PRIMARY_RED color\n PRIMARY_RED: 0xff4444, // Increased brightness for contrast (was 0xff3333)\n\n // Secondary colors - WCAG AA compliant\n SECONDARY_MAGENTA: 0xff33ff, // Increased brightness\n SECONDARY_PURPLE: 0xaa44ff, // Increased brightness (was 0x9900ff)\n SECONDARY_YELLOW: 0xffff33, // Slightly reduced for better visibility\n SECONDARY_ORANGE: 0xff7733, // Increased brightness (was 0xff6600)\n SECONDARY_BROWN_DARK: 0x8b4513,\n\n // Accent colors - WCAG AA compliant\n ACCENT_GOLD: 0xffc400, // Increased brightness for contrast (was 0xffd700)\n ACCENT_RED: 0xff4444, // Increased brightness (was 0xff3333)\n ACCENT_GREEN: 0x44ff44, // Increased brightness (was 0x00ff33)\n ACCENT_PRIMARY: 0x00d4ff,\n ACCENT_YELLOW: 0xffff33, // Slightly reduced for visibility (was 0xffff00)\n ACCENT_PURPLE: 0xaa44ff, // Increased brightness (was 0x9900ff)\n ACCENT_CYAN: 0x00e6e6, // Increased brightness (was 0x00ffff)\n ACCENT_ORANGE: 0xff8833,\n ACCENT_BLUE: 0x3399ff,\n\n // Korean traditional colors\n KOREAN_RED: 0xc8102e,\n KOREAN_BLUE: 0x003478,\n KOREAN_WHITE: 0xffffff,\n KOREAN_BLACK: 0x000000,\n\n // Text colors - WCAG AA compliant (4.5:1 on dark backgrounds)\n TEXT_PRIMARY: 0xffffff, // White text - maximum contrast (20.3:1 on 0x0a0a0a)\n TEXT_SECONDARY: 0xcccccc, // Light gray - 3:1 contrast for large text (13.1:1 on 0x0a0a0a)\n TEXT_TERTIARY: 0xaaaaaa, // Medium gray - increased brightness (8.5:1 on 0x0a0a0a)\n TEXT_ACCENT: 0x00e6e6, // Bright cyan for emphasis (15.8:1 on 0x0a0a0a)\n TEXT_WARNING: 0xffbb00, // Increased brightness (13.4:1 on 0x0a0a0a)\n TEXT_ERROR: 0xff4444, // Increased brightness (8.2:1 on 0x0a0a0a)\n TEXT_BRIGHT: 0xffffff,\n\n // UI background colors - Very dark for maximum contrast with bright text\n UI_BACKGROUND_DARK: 0x0a0a0a, // Very dark background for WCAG AA (was 0x1a1a2e)\n UI_BACKGROUND_MEDIUM: 0x1a1a1a, // Dark gray for panels (was 0x16213e)\n UI_BACKGROUND_LIGHT: 0x2a2a2a, // Medium dark for cards (was 0x0f0f23)\n UI_STEEL_GRAY: 0x5a6578, // Increased brightness for borders (was 0x4a5568)\n UI_STEEL_GRAY_DARK: 0x3d4758, // Increased brightness (was 0x2d3748)\n UI_BORDER: 0x5a6578, // Increased brightness for 3:1 contrast (was 0x4a5568)\n UI_BORDER_LIGHT: 0x6a6a8a, // Increased brightness (was 0x4a4a6a)\n UI_GRAY: 0x909090, // Increased brightness for disabled states (was 0x808080)\n UI_DISABLED_FILL: 0x3d4758, // Increased brightness (was 0x2d3748)\n UI_DISABLED_BORDER: 0x2a2a3e, // Increased brightness (was 0x1a1a2e)\n UI_DISABLED_BG: 0x444444, // Increased brightness (was 0x333333)\n UI_DISABLED_TEXT: 0x777777, // Increased brightness for readability (was 0x666666)\n\n // Combat effect colors - High contrast for visibility\n CRITICAL_HIT: 0xff4444, // Bright red for critical hits (was 0xff0000)\n BLOCKED_ATTACK: 0x909090, // Increased brightness for blocked attacks (was 0x808080)\n PERFECT_STRIKE: 0xffc400, // Bright gold for perfect strikes (was 0xffd700)\n VITAL_POINT_HIT: 0xff33ff, // Bright magenta for vital points (was 0xff00ff)\n\n // Warning colors - WCAG AA compliant\n WARNING_ORANGE: 0xff7733, // Increased brightness (was 0xff6600)\n WARNING_YELLOW: 0xffff33, // Slightly reduced for visibility (was 0xffff00)\n\n // Additional UI colors - Focus and active states\n ACTIVE_BORDER: 0x00e6e6, // Bright cyan for active states (was 0x00ffff)\n\n // Stance-specific colors (Trigram colors)\n TRIGRAM_GEON_PRIMARY: 0xffd700, // Heaven - White\n TRIGRAM_TAE_PRIMARY: 0x87ceeb, // Lake - Sky Blue\n TRIGRAM_LI_PRIMARY: 0xff4500, // Fire - Orange Red\n TRIGRAM_JIN_PRIMARY: 0x9370db, // Thunder - Yellow\n TRIGRAM_SON_PRIMARY: 0x32cd32, // Wind - Light Green\n TRIGRAM_GAM_PRIMARY: 0x1e90ff, // Water - Blue\n TRIGRAM_GAN_PRIMARY: 0x8b4513, // Mountain - Brown\n TRIGRAM_GON_PRIMARY: 0x2f4f4f, // Earth - Dark Khaki\n\n // Status colors\n POSITIVE_GREEN: 0x00ff00,\n POSITIVE_GREEN_DARK: 0x006600,\n NEGATIVE_RED: 0xff0000,\n NEGATIVE_RED_DARK: 0x990000,\n NEGATIVE_RED_LIGHT: 0xff4444, // Fix: Add missing NEGATIVE_RED_LIGHT\n NEUTRAL_GRAY: 0x808080,\n\n // Solid colors\n WHITE_SOLID: 0xffffff,\n BLACK_SOLID: 0x000000,\n BLACK: 0x000000, // Fix: Add missing BLACK\n TRANSPARENT: 0x000000, // With alpha 0\n\n // Health bar colors\n HEALTH_FULL: 0x00ff00,\n HEALTH_MEDIUM: 0xffff00,\n HEALTH_LOW: 0xff6600,\n HEALTH_CRITICAL: 0xff0000,\n\n // Ki/Energy colors\n KI_FULL: 0x00ffff,\n KI_MEDIUM: 0x0099cc,\n KI_LOW: 0x006699,\n KI_EMPTY: 0x003366,\n\n // Stamina colors\n STAMINA_FULL: 0xffff00,\n STAMINA_MEDIUM: 0xffcc00,\n STAMINA_LOW: 0xff9900,\n STAMINA_EMPTY: 0xff6600,\n\n // Consciousness colors\n CONSCIOUSNESS_PURPLE: 0x9370db,\n \n // Pain indicator colors\n PAIN_INDICATOR: 0xff6b6b,\n \n // Blood loss colors\n BLOODLOSS_INDICATOR: 0xcc0000,\n\n // Muscle system colors (근육 시스템 색상)\n MUSCLE_TONE: 0xd4a373, // Base muscle tone - tan/brown\n MUSCLE_FLEXED: 0xe8b896, // Flexed muscle - lighter tan\n MUSCLE_EXHAUSTED: 0xa67856, // Exhausted muscle - darker brown\n SKIN_TONE: 0xf5d7b1, // Skin/fat layer - light peachy tone\n\n // Fix: Add missing color constants for game components\n ARENA_BACKGROUND: 0x1a1a2e,\n PLAYER_1_COLOR: 0x00ccff, // Cyan for player 1\n PLAYER_2_COLOR: 0xff6b35, // Orange for player 2\n SECONDARY_BLUE: 0x3366cc,\n SECONDARY_BLUE_LIGHT: 0x5588ee,\n SECONDARY_BLUE_DARK: 0x1144aa,\n\n // Cyberpunk neon colors (add for NEON_CYAN and others)\n NEON_CYAN: 0x00ffff, // Neon cyan for cyberpunk UI\n NEON_PURPLE: 0xff00ff,\n NEON_GREEN: 0x00ff00,\n NEON_PINK: 0xff1493,\n} as const;\n\n/**\n * Cyberpunk-themed color palette for UI elements and effects.\n *\n * @constant\n * @category Color Constants\n * @korean 사이버팡크색상\n */\nexport const CYBERPUNK_COLORS = {\n // Primary neon colors - 사이버팡크 네온 색상\n NEON_CYAN: 0x00ffff, // 네온 시안 - Primary UI\n NEON_PURPLE: 0xff00ff, // 네온 보라 - Secondary accents\n NEON_GREEN: 0x00ff00, // 네온 초록 - Success states\n NEON_PINK: 0xff1493, // 네온 핑크 - Special effects\n\n // Accent colors - 강조 색상\n ACCENT_BLUE: 0x0080ff, // 강조 파랑 - Interactive elements\n ACCENT_ORANGE: 0xff8000, // 강조 주황 - Warning/action\n ACCENT_YELLOW: 0xffff00, // 강조 노랑 - Highlights\n\n // Status colors - 상태 색상\n WARNING_RED: 0xff4444, // 경고 빨강 - Danger/error\n SUCCESS_GREEN: 0x44ff44, // 성공 초록 - Positive feedback\n INFO_BLUE: 0x4444ff, // 정보 파랑 - Information\n\n // Text colors - 텍스트 색상\n TEXT_PRIMARY: 0xffffff, // 주요 텍스트 - High contrast\n TEXT_SECONDARY: 0xcccccc, // 보조 텍스트 - Medium contrast\n TEXT_MUTED: 0x888888, // 음소거 텍스트 - Low contrast\n\n // Background colors - 배경 색상\n BG_DARK: 0x0a0a0a, // 어두운 배경 - Main background\n BG_DARKER: 0x050505, // 더 어두운 배경 - Deep background\n BG_PANEL: 0x1a1a1a, // 패널 배경 - UI panels\n\n // Neutral colors - 중성 색상\n NEUTRAL_GRAY: 0x666666, // 중성 회색 - Disabled states\n NEUTRAL_LIGHT: 0x999999, // 밝은 회색 - Borders\n NEUTRAL_DARK: 0x333333, // 어두운 회색 - Separators\n\n // Special effects - 특수 효과\n SHADOW: 0x000000, // 그림자 - Drop shadows\n GLOW: 0xffffff, // 글로우 - Glow effects\n HIGHLIGHT: 0xffff80, // 하이라이트 - Selection highlight\n} as const;\n\n/**\n * Color utility functions for hex color manipulation.\n *\n * @constant\n * @category Color Constants\n * @korean 색상유틸리티\n */\nexport const colorUtils = {\n /**\n * Convert hex color to RGB components\n */\n hexToRgb: (hex: number) => ({\n r: (hex >> 16) & 255,\n g: (hex >> 8) & 255,\n b: hex & 255,\n }),\n\n /**\n * Convert RGB to hex color\n */\n rgbToHex: (r: number, g: number, b: number) => {\n return (r << 16) | (g << 8) | b;\n },\n\n /**\n * Blend two colors\n */\n blend: (color1: number, color2: number, factor: number) => {\n const rgb1 = colorUtils.hexToRgb(color1);\n const rgb2 = colorUtils.hexToRgb(color2);\n\n const r = Math.round(rgb1.r + (rgb2.r - rgb1.r) * factor);\n const g = Math.round(rgb1.g + (rgb2.g - rgb1.g) * factor);\n const b = Math.round(rgb1.b + (rgb2.b - rgb1.b) * factor);\n\n return colorUtils.rgbToHex(r, g, b);\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAa,gBAAgB;CAE3B,cAAc;CACd,cAAc;CACd,mBAAmB;CAGnB,aAAa;CAGb,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,sBAAsB;CAGtB,aAAa;CACb,YAAY;CACZ,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,eAAe;CACf,aAAa;CACb,eAAe;CACf,aAAa;CAGb,YAAY;CACZ,aAAa;CACb,cAAc;CACd,cAAc;CAGd,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,aAAa;CACb,cAAc;CACd,YAAY;CACZ,aAAa;CAGb,oBAAoB;CACpB,sBAAsB;CACtB,qBAAqB;CACrB,eAAe;CACf,oBAAoB;CACpB,WAAW;CACX,iBAAiB;CACjB,SAAS;CACT,kBAAkB;CAClB,oBAAoB;CACpB,gBAAgB;CAChB,kBAAkB;CAGlB,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CAGjB,gBAAgB;CAChB,gBAAgB;CAGhB,eAAe;CAGf,sBAAsB;CACtB,qBAAqB;CACrB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CAGrB,gBAAgB;CAChB,qBAAqB;CACrB,cAAc;CACd,mBAAmB;CACnB,oBAAoB;CACpB,cAAc;CAGd,aAAa;CACb,aAAa;CACb,OAAO;CACP,aAAa;CAGb,aAAa;CACb,eAAe;CACf,YAAY;CACZ,iBAAiB;CAGjB,SAAS;CACT,WAAW;CACX,QAAQ;CACR,UAAU;CAGV,cAAc;CACd,gBAAgB;CAChB,aAAa;CACb,eAAe;CAGf,sBAAsB;CAGtB,gBAAgB;CAGhB,qBAAqB;CAGrB,aAAa;CACb,eAAe;CACf,kBAAkB;CAClB,WAAW;CAGX,kBAAkB;CAClB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,sBAAsB;CACtB,qBAAqB;CAGrB,WAAW;CACX,aAAa;CACb,YAAY;CACZ,WAAW;CACZ;;;;;;;;AASD,IAAa,mBAAmB;CAE9B,WAAW;CACX,aAAa;CACb,YAAY;CACZ,WAAW;CAGX,aAAa;CACb,eAAe;CACf,eAAe;CAGf,aAAa;CACb,eAAe;CACf,WAAW;CAGX,cAAc;CACd,gBAAgB;CAChB,YAAY;CAGZ,SAAS;CACT,WAAW;CACX,UAAU;CAGV,cAAc;CACd,eAAe;CACf,cAAc;CAGd,QAAQ;CACR,MAAM;CACN,WAAW;CACZ;;;;;;;;AASD,IAAa,aAAa;;;;CAIxB,WAAW,SAAiB;EAC1B,GAAI,OAAO,KAAM;EACjB,GAAI,OAAO,IAAK;EAChB,GAAG,MAAM;EACV;;;;CAKD,WAAW,GAAW,GAAW,MAAc;EAC7C,OAAQ,KAAK,KAAO,KAAK,IAAK;;;;;CAMhC,QAAQ,QAAgB,QAAgB,WAAmB;EACzD,MAAM,OAAO,WAAW,SAAS,OAAO;EACxC,MAAM,OAAO,WAAW,SAAS,OAAO;EAExC,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO;EACzD,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO;EACzD,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO;EAEzD,OAAO,WAAW,SAAS,GAAG,GAAG,EAAE;;CAEtC"}
|
|
1
|
+
{"version":3,"file":"colors.js","names":[],"sources":["../../../src/types/constants/colors.ts"],"sourcesContent":["/**\n * Color palette for Black Trigram Korean martial arts game.\n *\n * Cyberpunk aesthetic with Korean traditional influences.\n *\n * WCAG 2.1 Level AA Compliance:\n * - Text colors meet 4.5:1 contrast ratio on dark backgrounds\n * - UI elements meet 3:1 contrast ratio\n * - Focus indicators use 2px borders with high contrast\n *\n * @see https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html\n *\n * @module types/constants/colors\n * @category Color Constants\n * @korean 색상팔레트\n */\n\n/**\n * Primary Korean cyberpunk color palette with WCAG 2.1 AA compliance.\n *\n * @constant\n * @category Color Constants\n * @korean 한국색상\n */\nexport const KOREAN_COLORS = {\n // Primary colors (Cyberpunk neon) - WCAG AA compliant on dark backgrounds\n PRIMARY_CYAN: 0x00e6e6, // Increased brightness for better contrast (was 0x00ffff)\n PRIMARY_BLUE: 0x0066ff,\n PRIMARY_BLUE_DARK: 0x003399,\n\n // Fix: Add missing PRIMARY_RED color\n PRIMARY_RED: 0xff4444, // Increased brightness for contrast (was 0xff3333)\n\n // Secondary colors - WCAG AA compliant\n SECONDARY_MAGENTA: 0xff33ff, // Increased brightness\n SECONDARY_PURPLE: 0xaa44ff, // Increased brightness (was 0x9900ff)\n SECONDARY_YELLOW: 0xffff33, // Slightly reduced for better visibility\n SECONDARY_ORANGE: 0xff7733, // Increased brightness (was 0xff6600)\n SECONDARY_BROWN_DARK: 0x8b4513,\n\n // Accent colors - WCAG AA compliant\n ACCENT_GOLD: 0xffc400, // Increased brightness for contrast (was 0xffd700)\n ACCENT_RED: 0xff4444, // Increased brightness (was 0xff3333)\n ACCENT_GREEN: 0x44ff44, // Increased brightness (was 0x00ff33)\n ACCENT_PRIMARY: 0x00d4ff,\n ACCENT_YELLOW: 0xffff33, // Slightly reduced for visibility (was 0xffff00)\n ACCENT_PURPLE: 0xaa44ff, // Increased brightness (was 0x9900ff)\n ACCENT_CYAN: 0x00e6e6, // Increased brightness (was 0x00ffff)\n ACCENT_ORANGE: 0xff8833,\n ACCENT_BLUE: 0x3399ff,\n\n // Korean traditional colors\n KOREAN_RED: 0xc8102e,\n KOREAN_BLUE: 0x003478,\n KOREAN_WHITE: 0xffffff,\n KOREAN_BLACK: 0x000000,\n\n // Text colors - WCAG AA compliant (4.5:1 on dark backgrounds)\n TEXT_PRIMARY: 0xffffff, // White text - maximum contrast (20.3:1 on 0x0a0a0a)\n TEXT_SECONDARY: 0xcccccc, // Light gray - 3:1 contrast for large text (13.1:1 on 0x0a0a0a)\n TEXT_TERTIARY: 0xaaaaaa, // Medium gray - increased brightness (8.5:1 on 0x0a0a0a)\n TEXT_ACCENT: 0x00e6e6, // Bright cyan for emphasis (15.8:1 on 0x0a0a0a)\n TEXT_WARNING: 0xffbb00, // Increased brightness (13.4:1 on 0x0a0a0a)\n TEXT_ERROR: 0xff4444, // Increased brightness (8.2:1 on 0x0a0a0a)\n TEXT_BRIGHT: 0xffffff,\n\n // UI background colors - Very dark for maximum contrast with bright text\n UI_BACKGROUND_DARK: 0x0a0a0a, // Very dark background for WCAG AA (was 0x1a1a2e)\n UI_BACKGROUND_MEDIUM: 0x1a1a1a, // Dark gray for panels (was 0x16213e)\n UI_BACKGROUND_LIGHT: 0x2a2a2a, // Medium dark for cards (was 0x0f0f23)\n UI_STEEL_GRAY: 0x5a6578, // Increased brightness for borders (was 0x4a5568)\n UI_STEEL_GRAY_DARK: 0x3d4758, // Increased brightness (was 0x2d3748)\n UI_BORDER: 0x5a6578, // Increased brightness for 3:1 contrast (was 0x4a5568)\n UI_BORDER_LIGHT: 0x6a6a8a, // Increased brightness (was 0x4a4a6a)\n UI_GRAY: 0x909090, // Increased brightness for disabled states (was 0x808080)\n UI_DISABLED_FILL: 0x3d4758, // Increased brightness (was 0x2d3748)\n UI_DISABLED_BORDER: 0x2a2a3e, // Increased brightness (was 0x1a1a2e)\n UI_DISABLED_BG: 0x444444, // Increased brightness (was 0x333333)\n UI_DISABLED_TEXT: 0x777777, // Increased brightness for readability (was 0x666666)\n\n // Combat effect colors - High contrast for visibility\n CRITICAL_HIT: 0xff4444, // Bright red for critical hits (was 0xff0000)\n BLOCKED_ATTACK: 0x909090, // Increased brightness for blocked attacks (was 0x808080)\n PERFECT_STRIKE: 0xffc400, // Bright gold for perfect strikes (was 0xffd700)\n VITAL_POINT_HIT: 0xff33ff, // Bright magenta for vital points (was 0xff00ff)\n\n // Warning colors - WCAG AA compliant\n WARNING_ORANGE: 0xff7733, // Increased brightness (was 0xff6600)\n WARNING_YELLOW: 0xffff33, // Slightly reduced for visibility (was 0xffff00)\n\n // Additional UI colors - Focus and active states\n ACTIVE_BORDER: 0x00e6e6, // Bright cyan for active states (was 0x00ffff)\n\n // Stance-specific colors (Trigram colors)\n TRIGRAM_GEON_PRIMARY: 0xffd700, // Heaven - White\n TRIGRAM_TAE_PRIMARY: 0x87ceeb, // Lake - Sky Blue\n TRIGRAM_LI_PRIMARY: 0xff4500, // Fire - Orange Red\n TRIGRAM_JIN_PRIMARY: 0x9370db, // Thunder - Yellow\n TRIGRAM_SON_PRIMARY: 0x32cd32, // Wind - Light Green\n TRIGRAM_GAM_PRIMARY: 0x1e90ff, // Water - Blue\n TRIGRAM_GAN_PRIMARY: 0x8b4513, // Mountain - Brown\n TRIGRAM_GON_PRIMARY: 0x2f4f4f, // Earth - Dark Khaki\n\n // Status colors\n POSITIVE_GREEN: 0x00ff00,\n POSITIVE_GREEN_DARK: 0x006600,\n NEGATIVE_RED: 0xff0000,\n NEGATIVE_RED_DARK: 0x990000,\n NEGATIVE_RED_LIGHT: 0xff4444, // Fix: Add missing NEGATIVE_RED_LIGHT\n NEUTRAL_GRAY: 0x808080,\n\n // Solid colors\n WHITE_SOLID: 0xffffff,\n BLACK_SOLID: 0x000000,\n BLACK: 0x000000, // Fix: Add missing BLACK\n TRANSPARENT: 0x000000, // With alpha 0\n\n // Health bar colors\n HEALTH_FULL: 0x00ff00,\n HEALTH_MEDIUM: 0xffff00,\n HEALTH_LOW: 0xff6600,\n HEALTH_CRITICAL: 0xff0000,\n\n // Ki/Energy colors\n KI_FULL: 0x00ffff,\n KI_MEDIUM: 0x0099cc,\n KI_LOW: 0x006699,\n KI_EMPTY: 0x003366,\n\n // Stamina colors\n STAMINA_FULL: 0xffff00,\n STAMINA_MEDIUM: 0xffcc00,\n STAMINA_LOW: 0xff9900,\n STAMINA_EMPTY: 0xff6600,\n\n // Consciousness colors\n CONSCIOUSNESS_PURPLE: 0x9370db,\n \n // Pain indicator colors\n PAIN_INDICATOR: 0xff6b6b,\n \n // Blood loss colors\n BLOODLOSS_INDICATOR: 0xcc0000,\n\n // Muscle system colors (근육 시스템 색상)\n MUSCLE_TONE: 0xd4a373, // Base muscle tone - tan/brown\n MUSCLE_FLEXED: 0xe8b896, // Flexed muscle - lighter tan\n MUSCLE_EXHAUSTED: 0xa67856, // Exhausted muscle - darker brown\n SKIN_TONE: 0xf5d7b1, // Skin/fat layer - light peachy tone\n\n // Fix: Add missing color constants for game components\n ARENA_BACKGROUND: 0x1a1a2e,\n PLAYER_1_COLOR: 0x00ccff, // Cyan for player 1\n PLAYER_2_COLOR: 0xff6b35, // Orange for player 2\n SECONDARY_BLUE: 0x3366cc,\n SECONDARY_BLUE_LIGHT: 0x5588ee,\n SECONDARY_BLUE_DARK: 0x1144aa,\n\n // Cyberpunk neon colors (add for NEON_CYAN and others)\n NEON_CYAN: 0x00ffff, // Neon cyan for cyberpunk UI\n NEON_PURPLE: 0xff00ff,\n NEON_GREEN: 0x00ff00,\n NEON_PINK: 0xff1493,\n} as const;\n\n/**\n * Cyberpunk-themed color palette for UI elements and effects.\n *\n * @constant\n * @category Color Constants\n * @korean 사이버팡크색상\n */\nexport const CYBERPUNK_COLORS = {\n // Primary neon colors - 사이버팡크 네온 색상\n NEON_CYAN: 0x00ffff, // 네온 시안 - Primary UI\n NEON_PURPLE: 0xff00ff, // 네온 보라 - Secondary accents\n NEON_GREEN: 0x00ff00, // 네온 초록 - Success states\n NEON_PINK: 0xff1493, // 네온 핑크 - Special effects\n\n // Accent colors - 강조 색상\n ACCENT_BLUE: 0x0080ff, // 강조 파랑 - Interactive elements\n ACCENT_ORANGE: 0xff8000, // 강조 주황 - Warning/action\n ACCENT_YELLOW: 0xffff00, // 강조 노랑 - Highlights\n\n // Status colors - 상태 색상\n WARNING_RED: 0xff4444, // 경고 빨강 - Danger/error\n SUCCESS_GREEN: 0x44ff44, // 성공 초록 - Positive feedback\n INFO_BLUE: 0x4444ff, // 정보 파랑 - Information\n\n // Text colors - 텍스트 색상\n TEXT_PRIMARY: 0xffffff, // 주요 텍스트 - High contrast\n TEXT_SECONDARY: 0xcccccc, // 보조 텍스트 - Medium contrast\n TEXT_MUTED: 0x888888, // 음소거 텍스트 - Low contrast\n\n // Background colors - 배경 색상\n BG_DARK: 0x0a0a0a, // 어두운 배경 - Main background\n BG_DARKER: 0x050505, // 더 어두운 배경 - Deep background\n BG_PANEL: 0x1a1a1a, // 패널 배경 - UI panels\n\n // Neutral colors - 중성 색상\n NEUTRAL_GRAY: 0x666666, // 중성 회색 - Disabled states\n NEUTRAL_LIGHT: 0x999999, // 밝은 회색 - Borders\n NEUTRAL_DARK: 0x333333, // 어두운 회색 - Separators\n\n // Special effects - 특수 효과\n SHADOW: 0x000000, // 그림자 - Drop shadows\n GLOW: 0xffffff, // 글로우 - Glow effects\n HIGHLIGHT: 0xffff80, // 하이라이트 - Selection highlight\n} as const;\n\n/**\n * Color utility functions for hex color manipulation.\n *\n * @constant\n * @category Color Constants\n * @korean 색상유틸리티\n */\nexport const colorUtils = {\n /**\n * Convert hex color to RGB components\n */\n hexToRgb: (hex: number) => ({\n r: (hex >> 16) & 255,\n g: (hex >> 8) & 255,\n b: hex & 255,\n }),\n\n /**\n * Convert RGB to hex color\n */\n rgbToHex: (r: number, g: number, b: number) => {\n return (r << 16) | (g << 8) | b;\n },\n\n /**\n * Blend two colors\n */\n blend: (color1: number, color2: number, factor: number) => {\n const rgb1 = colorUtils.hexToRgb(color1);\n const rgb2 = colorUtils.hexToRgb(color2);\n\n const r = Math.round(rgb1.r + (rgb2.r - rgb1.r) * factor);\n const g = Math.round(rgb1.g + (rgb2.g - rgb1.g) * factor);\n const b = Math.round(rgb1.b + (rgb2.b - rgb1.b) * factor);\n\n return colorUtils.rgbToHex(r, g, b);\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAa,gBAAgB;CAE3B,cAAc;CACd,cAAc;CACd,mBAAmB;CAGnB,aAAa;CAGb,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,sBAAsB;CAGtB,aAAa;CACb,YAAY;CACZ,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,eAAe;CACf,aAAa;CACb,eAAe;CACf,aAAa;CAGb,YAAY;CACZ,aAAa;CACb,cAAc;CACd,cAAc;CAGd,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,aAAa;CACb,cAAc;CACd,YAAY;CACZ,aAAa;CAGb,oBAAoB;CACpB,sBAAsB;CACtB,qBAAqB;CACrB,eAAe;CACf,oBAAoB;CACpB,WAAW;CACX,iBAAiB;CACjB,SAAS;CACT,kBAAkB;CAClB,oBAAoB;CACpB,gBAAgB;CAChB,kBAAkB;CAGlB,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CAGjB,gBAAgB;CAChB,gBAAgB;CAGhB,eAAe;CAGf,sBAAsB;CACtB,qBAAqB;CACrB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CAGrB,gBAAgB;CAChB,qBAAqB;CACrB,cAAc;CACd,mBAAmB;CACnB,oBAAoB;CACpB,cAAc;CAGd,aAAa;CACb,aAAa;CACb,OAAO;CACP,aAAa;CAGb,aAAa;CACb,eAAe;CACf,YAAY;CACZ,iBAAiB;CAGjB,SAAS;CACT,WAAW;CACX,QAAQ;CACR,UAAU;CAGV,cAAc;CACd,gBAAgB;CAChB,aAAa;CACb,eAAe;CAGf,sBAAsB;CAGtB,gBAAgB;CAGhB,qBAAqB;CAGrB,aAAa;CACb,eAAe;CACf,kBAAkB;CAClB,WAAW;CAGX,kBAAkB;CAClB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,sBAAsB;CACtB,qBAAqB;CAGrB,WAAW;CACX,aAAa;CACb,YAAY;CACZ,WAAW;AACb;;;;;;;;AASA,IAAa,mBAAmB;CAE9B,WAAW;CACX,aAAa;CACb,YAAY;CACZ,WAAW;CAGX,aAAa;CACb,eAAe;CACf,eAAe;CAGf,aAAa;CACb,eAAe;CACf,WAAW;CAGX,cAAc;CACd,gBAAgB;CAChB,YAAY;CAGZ,SAAS;CACT,WAAW;CACX,UAAU;CAGV,cAAc;CACd,eAAe;CACf,cAAc;CAGd,QAAQ;CACR,MAAM;CACN,WAAW;AACb;;;;;;;;AASA,IAAa,aAAa;;;;CAIxB,WAAW,SAAiB;EAC1B,GAAI,OAAO,KAAM;EACjB,GAAI,OAAO,IAAK;EAChB,GAAG,MAAM;CACX;;;;CAKA,WAAW,GAAW,GAAW,MAAc;EAC7C,OAAQ,KAAK,KAAO,KAAK,IAAK;CAChC;;;;CAKA,QAAQ,QAAgB,QAAgB,WAAmB;EACzD,MAAM,OAAO,WAAW,SAAS,MAAM;EACvC,MAAM,OAAO,WAAW,SAAS,MAAM;EAEvC,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM;EACxD,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM;EACxD,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM;EAExD,OAAO,WAAW,SAAS,GAAG,GAAG,CAAC;CACpC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"designSystem.js","names":[],"sources":["../../../src/types/constants/designSystem.ts"],"sourcesContent":["/**\n * Design System for Black Trigram HUD Components\n * \n * Provides a unified visual language for cyberpunk Korean-themed interfaces\n * All values based on KOREAN_COLORS and FONT_FAMILY constants\n * \n * Key Principles:\n * - 4px base spacing scale for consistent rhythm\n * - Typography scale optimized for Korean text readability\n * - WCAG AA compliant color hierarchies\n * - Consistent HUD styling with cyberpunk aesthetic\n * \n * @korean 흑괘 HUD 디자인 시스템\n * @module DesignSystem\n */\n\nimport { KOREAN_COLORS } from './colors';\nimport { FONT_FAMILY } from './typography';\n\n/**\n * Convert hex color to RGB string\n * @param hex - Hex color value (e.g., 0x00e6e6)\n * @returns RGB string (e.g., \"0, 230, 230\")\n */\nfunction hexToRgbString(hex: number): string {\n const r = (hex >> 16) & 255;\n const g = (hex >> 8) & 255;\n const b = hex & 255;\n return `${r}, ${g}, ${b}`;\n}\n\n/**\n * Convert hex color to RGB color string\n * @param hex - Hex color value (e.g., 0x00e6e6)\n * @returns RGB color string (e.g., \"rgb(0, 230, 230)\")\n */\nfunction hexToRgb(hex: number): string {\n return `rgb(${hexToRgbString(hex)})`;\n}\n\n/**\n * Typography Scale\n * \n * Optimized for Korean text with proper line-heights and font weights.\n * All sizes include fontFamily to ensure consistent Korean rendering.\n * \n * @korean 타이포그래피 척도\n */\nexport const TYPOGRAPHY = {\n /** Heading 1 - Main titles (24px) */\n heading1: {\n fontSize: '24px',\n fontWeight: 700,\n lineHeight: 1.2,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Heading 2 - Section titles (20px) */\n heading2: {\n fontSize: '20px',\n fontWeight: 600,\n lineHeight: 1.3,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Heading 3 - Subsection titles (16px) */\n heading3: {\n fontSize: '16px',\n fontWeight: 600,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Body - Regular content (14px) */\n body: {\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: 1.5,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Body Small - Secondary content (12px) */\n bodySmall: {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: 1.5,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Button - Button text (14px, semibold) */\n button: {\n fontSize: '14px',\n fontWeight: 600,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Caption - Labels and hints (10px) */\n caption: {\n fontSize: '10px',\n fontWeight: 400,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Micro - Very small text (9px) - for dense information */\n micro: {\n fontSize: '9px',\n fontWeight: 400,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Nano - Smallest text (8px) - for status indicators */\n nano: {\n fontSize: '8px',\n fontWeight: 400,\n lineHeight: 1.3,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n} as const;\n\n/**\n * Pre-parsed Numeric Typography Values\n * \n * Performance optimization: Numeric font sizes parsed once at module load\n * instead of repeated parseInt calls in component useMemo hooks.\n * \n * @korean 사전 파싱된 타이포그래피 숫자 값\n */\nexport const TYPOGRAPHY_NUMERIC = {\n heading1: 24,\n heading2: 20,\n heading3: 16,\n body: 14,\n bodySmall: 12,\n button: 14,\n caption: 10,\n micro: 9,\n nano: 8,\n} as const;\n\n/**\n * Spacing Scale (4px base)\n * \n * Consistent spacing system for margins, padding, and gaps.\n * Based on 4px increments for visual rhythm.\n * \n * @korean 간격 척도\n */\nexport const SPACING = {\n /** Extra Extra Small - 4px */\n xxs: '4px',\n /** Extra Small - 8px */\n xs: '8px',\n /** Small - 12px */\n sm: '12px',\n /** Medium - 16px */\n md: '16px',\n /** Large - 24px */\n lg: '24px',\n /** Extra Large - 32px */\n xl: '32px',\n /** Extra Extra Large - 48px */\n xxl: '48px',\n} as const;\n\n/**\n * Spacing Adjustments\n * \n * Fine-tuned spacing values for specific layout requirements.\n * Use when standard SPACING scale doesn't provide exact needed value.\n * \n * @korean 간격 조정\n */\nexport const SPACING_ADJUSTMENTS = {\n /** Extra small with minor adjustment - 10px (xs + 2px) */\n xsPlus: '10px',\n /** Small with minor adjustment - 14px (sm + 2px) */\n smPlus: '14px',\n /** Medium with minor adjustment - 18px (md + 2px) */\n mdPlus: '18px',\n /** Small gap for compact layouts - 6px */\n compact: '6px',\n /** \n * Horizontal emphasis - 24px\n * Aliases SPACING.lg for semantic use in wider horizontal padding\n * Defined as 1.5x SPACING.md to emphasize horizontal breathing room\n */\n horizontalEmphasis: '24px',\n /** Micro gap - 3px (for very tight layouts) */\n micro: '3px',\n /** Tiny margin - 2px (for subtle spacing) */\n tiny: '2px',\n} as const;\n\n/**\n * Pre-parsed Numeric Spacing Values\n * \n * Performance optimization: Numeric spacing values parsed once at module load.\n * Eliminates repeated parseInt calls in component calculations.\n * \n * @korean 사전 파싱된 간격 숫자 값\n */\nexport const SPACING_NUMERIC = {\n xxs: 4,\n xs: 8,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n // Adjustments\n xsPlus: 10,\n smPlus: 14,\n mdPlus: 18,\n compact: 6,\n horizontalEmphasis: 24,\n micro: 3,\n tiny: 2,\n} as const;\n\n/**\n * Font Size Multipliers\n * \n * Scaling factors for responsive font size calculations.\n * Used to maintain consistent proportions across different screen sizes.\n * \n * @korean 글꼴 크기 배율\n */\nexport const FONT_SIZE_MULTIPLIERS = {\n /** Small title scaling - 60% of base */\n titleSmall: 0.6,\n /** Small message scaling - 75% of base */\n messageSmall: 0.75,\n /** Body small scaling - 87.5% of base */\n bodySmall: 0.875,\n /** Title large scaling - 112.5% of base */\n titleLarge: 1.125,\n} as const;\n\n/**\n * Layout Multipliers\n * \n * Scaling factors for layout calculations.\n * Used to maintain consistent spacing relationships.\n * \n * @korean 레이아웃 배율\n */\nexport const LAYOUT_MULTIPLIERS = {\n /** Gap to padding ratio - 120% */\n gapToPadding: 1.2,\n} as const;\n\n\n\n/**\n * Border Radius Scale\n * \n * Consistent border radius values for UI elements.\n * Provides semantic naming for rounded corners.\n * \n * @korean 테두리 반경 척도\n */\nexport const BORDER_RADIUS = {\n /** None - 0px (sharp corners) */\n none: '0px',\n /** Small - 4px */\n sm: '4px',\n /** Medium - 6px */\n md: '6px',\n /** Large - 8px */\n lg: '8px',\n /** Extra Large - 12px */\n xl: '12px',\n /** Full - 9999px (pill shape) */\n full: '9999px',\n} as const;\n\n/**\n * HUD Style Constants\n * \n * Unified styling for all HUD panels with cyberpunk Korean aesthetic.\n * Includes backgrounds, borders, shadows, and interactive states.\n * \n * @korean HUD 스타일 상수\n */\nexport const HUD_STYLE = {\n /** Background - Dark with 85% opacity */\n background: `rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, 0.85)`,\n /** Background RGB for gradient stops */\n backgroundRgb: hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK),\n /** Border - 2px solid cyan */\n border: `2px solid ${hexToRgb(KOREAN_COLORS.PRIMARY_CYAN)}`,\n /** Border radius - 8px for smooth corners (from BORDER_RADIUS.lg) */\n borderRadius: BORDER_RADIUS.lg,\n /** Box shadow - Subtle depth */\n shadow: `0 4px 12px rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, 0.6)`,\n /** Hover shadow - Increased depth on interaction */\n shadowHover: `0 6px 20px rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.3)`,\n /** Backdrop filter - Blur for glassmorphism */\n backdropFilter: 'blur(8px)',\n /** Accent glow - For important elements */\n accentGlow: `0 0 10px rgba(${hexToRgbString(KOREAN_COLORS.ACCENT_GOLD)}, 0.5)`,\n /** Cyan glow - For primary highlights */\n cyanGlow: `0 0 10px rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.5)`,\n} as const;\n\n/**\n * Color Hierarchy for Text and UI Elements\n * \n * WCAG AA compliant color system for different levels of visual emphasis.\n * All colors formatted as RGB strings for easy opacity manipulation.\n * \n * @korean 색상 계층\n */\nexport const HIERARCHY = {\n /** Primary - Main content (White - highest contrast) */\n primary: {\n color: hexToRgb(KOREAN_COLORS.TEXT_PRIMARY),\n hex: KOREAN_COLORS.TEXT_PRIMARY,\n },\n /** Secondary - Supporting content (Light gray) */\n secondary: {\n color: hexToRgb(KOREAN_COLORS.TEXT_SECONDARY),\n hex: KOREAN_COLORS.TEXT_SECONDARY,\n },\n /** Tertiary - Subtle content (Medium gray) */\n tertiary: {\n color: hexToRgb(KOREAN_COLORS.TEXT_TERTIARY),\n hex: KOREAN_COLORS.TEXT_TERTIARY,\n },\n /** Muted - Disabled or inactive (Dark gray) */\n muted: {\n color: hexToRgb(KOREAN_COLORS.UI_DISABLED_TEXT),\n hex: KOREAN_COLORS.UI_DISABLED_TEXT,\n },\n /** Accent - Emphasis and highlights (Cyan) */\n accent: {\n color: hexToRgb(KOREAN_COLORS.PRIMARY_CYAN),\n hex: KOREAN_COLORS.PRIMARY_CYAN,\n },\n /** Gold - Special emphasis (Gold) */\n gold: {\n color: hexToRgb(KOREAN_COLORS.ACCENT_GOLD),\n hex: KOREAN_COLORS.ACCENT_GOLD,\n },\n /** Accent with 70% opacity - For subtle emphasis */\n accent70: {\n color: `rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.7)`,\n hex: KOREAN_COLORS.PRIMARY_CYAN,\n },\n /** Accent with 50% opacity - For backgrounds */\n accent50: {\n color: `rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.5)`,\n hex: KOREAN_COLORS.PRIMARY_CYAN,\n },\n /** Primary with 80% opacity - For hover states */\n primary80: {\n color: `rgba(${hexToRgbString(KOREAN_COLORS.TEXT_PRIMARY)}, 0.8)`,\n hex: KOREAN_COLORS.TEXT_PRIMARY,\n },\n} as const;\n\n/**\n * Border Styles for Different UI States\n * \n * @korean 테두리 스타일\n */\nexport const BORDERS = {\n /** Default border - Cyan 40% opacity */\n default: `2px solid rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.4)`,\n /** Accent border - Gold for emphasis */\n accent: `2px solid rgba(${hexToRgbString(KOREAN_COLORS.ACCENT_GOLD)}, 0.6)`,\n /** Muted border - Gray for subtle separation */\n muted: `1px solid rgba(${hexToRgbString(KOREAN_COLORS.UI_STEEL_GRAY)}, 0.3)`,\n /** Active border - Full cyan for interaction */\n active: `2px solid rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 1.0)`,\n} as const;\n\n/**\n * Gradient Backgrounds\n * \n * Cyberpunk-inspired gradients for panels and overlays.\n * \n * @korean 그라디언트 배경\n */\nexport const GRADIENTS = {\n /** Vertical fade - Top to bottom */\n vertical: (opacity: number = 0.85) =>\n `linear-gradient(180deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.7}) 100%)`,\n /** Vertical fade (reverse) - Bottom to top */\n verticalReverse: (opacity: number = 0.85) =>\n `linear-gradient(0deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.7}) 100%)`,\n /** Horizontal fade - Left to right */\n horizontal: (opacity: number = 0.85) =>\n `linear-gradient(90deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.4}) 100%)`,\n /** Horizontal fade (reverse) - Right to left */\n horizontalReverse: (opacity: number = 0.85) =>\n `linear-gradient(270deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.4}) 100%)`,\n /** Radial fade - Center outward */\n radial: (opacity: number = 0.85) =>\n `radial-gradient(circle, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.5}) 100%)`,\n} as const;\n\n/**\n * Transition Timings\n * \n * Consistent animation durations for smooth interactions.\n * \n * @korean 전환 타이밍\n */\nexport const TRANSITIONS = {\n /** Fast - Quick interactions (150ms) */\n fast: '150ms ease-in-out',\n /** Normal - Standard interactions (250ms) */\n normal: '250ms ease-in-out',\n /** Slow - Emphasis animations (400ms) */\n slow: '400ms ease-in-out',\n} as const;\n\n/**\n * Opacity Constants\n * \n * Standard opacity values for consistent transparency effects.\n * \n * @korean 투명도 상수\n */\nexport const OPACITY = {\n /** Base opacity for layered elements */\n base: 0.7,\n /** Opacity increment for stacking */\n increment: 0.1,\n /** High transparency */\n light: 0.3,\n /** Medium transparency */\n medium: 0.5,\n /** Low transparency */\n heavy: 0.8,\n} as const;\n\n/**\n * Combat UI Dimensions\n * \n * Common width and size constraints for combat UI elements.\n * \n * @korean 전투 UI 크기\n */\nexport const COMBAT_UI_DIMENSIONS = {\n /** Combat log minimum width - mobile */\n combatLogMinMobile: '200px',\n /** Combat log minimum width - desktop */\n combatLogMinDesktop: '280px',\n /** Combat log maximum width - mobile (percentage) */\n combatLogMaxMobile: '90%',\n /** Combat log maximum width - desktop */\n combatLogMaxDesktop: '500px',\n /** Combat log maximum width percentage (mobile) - 90% as decimal */\n combatLogMaxWidthPercentMobile: 0.9,\n /** Technique bar width - mobile (full width) */\n techniqueBarWidthMobile: '100%',\n /** Technique bar width - desktop (70% width) */\n techniqueBarWidthDesktop: '70%',\n} as const;\n\n/**\n * Pre-parsed Numeric Combat UI Dimensions\n * \n * Performance optimization: Numeric dimension values parsed once at module load.\n * Eliminates repeated parseInt calls for combat UI dimensions.\n * \n * @korean 사전 파싱된 전투 UI 크기 숫자 값\n */\nexport const COMBAT_UI_DIMENSIONS_NUMERIC = {\n combatLogMinMobile: 200,\n combatLogMinDesktop: 280,\n combatLogMaxDesktop: 500,\n} as const;\n\n/**\n * Text Effects\n * \n * Reusable text shadow effects for emphasis and readability.\n * \n * @korean 텍스트 효과\n */\nexport const TEXT_EFFECTS = {\n /** Dark shadow for contrast on bright backgrounds */\n darkShadow: '0 0 4px rgba(0,0,0,0.8)',\n /** Light glow for emphasis */\n lightGlow: '0 0 8px rgba(255,255,255,0.5)',\n} as const;\n\n/**\n * Get responsive spacing based on screen size\n * \n * Note: This helper function uses parseInt internally for flexibility\n * in returning pixel-suffixed strings. For performance-critical useMemo\n * calculations, prefer using SPACING_NUMERIC constants directly.\n * \n * @param baseSpacing - Base spacing value from SPACING scale\n * @param isMobile - Whether mobile layout is active\n * @param positionScale - Position scale multiplier (for 4K displays)\n * @returns Calculated spacing in pixels\n */\nexport function getResponsiveSpacing(\n baseSpacing: keyof typeof SPACING,\n isMobile: boolean,\n positionScale: number = 1.0\n): string {\n const baseValue = parseInt(SPACING[baseSpacing], 10);\n const scaledValue = isMobile ? baseValue : baseValue * positionScale;\n return `${scaledValue}px`;\n}\n\n/**\n * Get responsive font size based on typography scale\n * \n * Note: This helper function uses parseInt internally for flexibility\n * in returning pixel-suffixed strings. For performance-critical useMemo\n * calculations, prefer using TYPOGRAPHY_NUMERIC constants directly.\n * \n * @param typographyLevel - Typography level from TYPOGRAPHY\n * @param isMobile - Whether mobile layout is active\n * @param positionScale - Position scale multiplier (for 4K displays)\n * @returns Calculated font size in pixels\n */\nexport function getResponsiveFontSize(\n typographyLevel: keyof typeof TYPOGRAPHY,\n isMobile: boolean,\n positionScale: number = 1.0\n): string {\n const baseSize = parseInt(TYPOGRAPHY[typographyLevel].fontSize, 10);\n const scaledSize = isMobile ? baseSize : baseSize * positionScale;\n return `${scaledSize}px`;\n}\n\n/**\n * Type definitions for design system usage\n */\nexport type TypographyLevel = keyof typeof TYPOGRAPHY;\nexport type SpacingLevel = keyof typeof SPACING;\nexport type BorderRadiusLevel = keyof typeof BORDER_RADIUS;\nexport type HierarchyLevel = keyof typeof HIERARCHY;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"designSystem.js","names":[],"sources":["../../../src/types/constants/designSystem.ts"],"sourcesContent":["/**\n * Design System for Black Trigram HUD Components\n * \n * Provides a unified visual language for cyberpunk Korean-themed interfaces\n * All values based on KOREAN_COLORS and FONT_FAMILY constants\n * \n * Key Principles:\n * - 4px base spacing scale for consistent rhythm\n * - Typography scale optimized for Korean text readability\n * - WCAG AA compliant color hierarchies\n * - Consistent HUD styling with cyberpunk aesthetic\n * \n * @korean 흑괘 HUD 디자인 시스템\n * @module DesignSystem\n */\n\nimport { KOREAN_COLORS } from './colors';\nimport { FONT_FAMILY } from './typography';\n\n/**\n * Convert hex color to RGB string\n * @param hex - Hex color value (e.g., 0x00e6e6)\n * @returns RGB string (e.g., \"0, 230, 230\")\n */\nfunction hexToRgbString(hex: number): string {\n const r = (hex >> 16) & 255;\n const g = (hex >> 8) & 255;\n const b = hex & 255;\n return `${r}, ${g}, ${b}`;\n}\n\n/**\n * Convert hex color to RGB color string\n * @param hex - Hex color value (e.g., 0x00e6e6)\n * @returns RGB color string (e.g., \"rgb(0, 230, 230)\")\n */\nfunction hexToRgb(hex: number): string {\n return `rgb(${hexToRgbString(hex)})`;\n}\n\n/**\n * Typography Scale\n * \n * Optimized for Korean text with proper line-heights and font weights.\n * All sizes include fontFamily to ensure consistent Korean rendering.\n * \n * @korean 타이포그래피 척도\n */\nexport const TYPOGRAPHY = {\n /** Heading 1 - Main titles (24px) */\n heading1: {\n fontSize: '24px',\n fontWeight: 700,\n lineHeight: 1.2,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Heading 2 - Section titles (20px) */\n heading2: {\n fontSize: '20px',\n fontWeight: 600,\n lineHeight: 1.3,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Heading 3 - Subsection titles (16px) */\n heading3: {\n fontSize: '16px',\n fontWeight: 600,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Body - Regular content (14px) */\n body: {\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: 1.5,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Body Small - Secondary content (12px) */\n bodySmall: {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: 1.5,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Button - Button text (14px, semibold) */\n button: {\n fontSize: '14px',\n fontWeight: 600,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Caption - Labels and hints (10px) */\n caption: {\n fontSize: '10px',\n fontWeight: 400,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Micro - Very small text (9px) - for dense information */\n micro: {\n fontSize: '9px',\n fontWeight: 400,\n lineHeight: 1.4,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n /** Nano - Smallest text (8px) - for status indicators */\n nano: {\n fontSize: '8px',\n fontWeight: 400,\n lineHeight: 1.3,\n fontFamily: FONT_FAMILY.KOREAN,\n },\n} as const;\n\n/**\n * Pre-parsed Numeric Typography Values\n * \n * Performance optimization: Numeric font sizes parsed once at module load\n * instead of repeated parseInt calls in component useMemo hooks.\n * \n * @korean 사전 파싱된 타이포그래피 숫자 값\n */\nexport const TYPOGRAPHY_NUMERIC = {\n heading1: 24,\n heading2: 20,\n heading3: 16,\n body: 14,\n bodySmall: 12,\n button: 14,\n caption: 10,\n micro: 9,\n nano: 8,\n} as const;\n\n/**\n * Spacing Scale (4px base)\n * \n * Consistent spacing system for margins, padding, and gaps.\n * Based on 4px increments for visual rhythm.\n * \n * @korean 간격 척도\n */\nexport const SPACING = {\n /** Extra Extra Small - 4px */\n xxs: '4px',\n /** Extra Small - 8px */\n xs: '8px',\n /** Small - 12px */\n sm: '12px',\n /** Medium - 16px */\n md: '16px',\n /** Large - 24px */\n lg: '24px',\n /** Extra Large - 32px */\n xl: '32px',\n /** Extra Extra Large - 48px */\n xxl: '48px',\n} as const;\n\n/**\n * Spacing Adjustments\n * \n * Fine-tuned spacing values for specific layout requirements.\n * Use when standard SPACING scale doesn't provide exact needed value.\n * \n * @korean 간격 조정\n */\nexport const SPACING_ADJUSTMENTS = {\n /** Extra small with minor adjustment - 10px (xs + 2px) */\n xsPlus: '10px',\n /** Small with minor adjustment - 14px (sm + 2px) */\n smPlus: '14px',\n /** Medium with minor adjustment - 18px (md + 2px) */\n mdPlus: '18px',\n /** Small gap for compact layouts - 6px */\n compact: '6px',\n /** \n * Horizontal emphasis - 24px\n * Aliases SPACING.lg for semantic use in wider horizontal padding\n * Defined as 1.5x SPACING.md to emphasize horizontal breathing room\n */\n horizontalEmphasis: '24px',\n /** Micro gap - 3px (for very tight layouts) */\n micro: '3px',\n /** Tiny margin - 2px (for subtle spacing) */\n tiny: '2px',\n} as const;\n\n/**\n * Pre-parsed Numeric Spacing Values\n * \n * Performance optimization: Numeric spacing values parsed once at module load.\n * Eliminates repeated parseInt calls in component calculations.\n * \n * @korean 사전 파싱된 간격 숫자 값\n */\nexport const SPACING_NUMERIC = {\n xxs: 4,\n xs: 8,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n // Adjustments\n xsPlus: 10,\n smPlus: 14,\n mdPlus: 18,\n compact: 6,\n horizontalEmphasis: 24,\n micro: 3,\n tiny: 2,\n} as const;\n\n/**\n * Font Size Multipliers\n * \n * Scaling factors for responsive font size calculations.\n * Used to maintain consistent proportions across different screen sizes.\n * \n * @korean 글꼴 크기 배율\n */\nexport const FONT_SIZE_MULTIPLIERS = {\n /** Small title scaling - 60% of base */\n titleSmall: 0.6,\n /** Small message scaling - 75% of base */\n messageSmall: 0.75,\n /** Body small scaling - 87.5% of base */\n bodySmall: 0.875,\n /** Title large scaling - 112.5% of base */\n titleLarge: 1.125,\n} as const;\n\n/**\n * Layout Multipliers\n * \n * Scaling factors for layout calculations.\n * Used to maintain consistent spacing relationships.\n * \n * @korean 레이아웃 배율\n */\nexport const LAYOUT_MULTIPLIERS = {\n /** Gap to padding ratio - 120% */\n gapToPadding: 1.2,\n} as const;\n\n\n\n/**\n * Border Radius Scale\n * \n * Consistent border radius values for UI elements.\n * Provides semantic naming for rounded corners.\n * \n * @korean 테두리 반경 척도\n */\nexport const BORDER_RADIUS = {\n /** None - 0px (sharp corners) */\n none: '0px',\n /** Small - 4px */\n sm: '4px',\n /** Medium - 6px */\n md: '6px',\n /** Large - 8px */\n lg: '8px',\n /** Extra Large - 12px */\n xl: '12px',\n /** Full - 9999px (pill shape) */\n full: '9999px',\n} as const;\n\n/**\n * HUD Style Constants\n * \n * Unified styling for all HUD panels with cyberpunk Korean aesthetic.\n * Includes backgrounds, borders, shadows, and interactive states.\n * \n * @korean HUD 스타일 상수\n */\nexport const HUD_STYLE = {\n /** Background - Dark with 85% opacity */\n background: `rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, 0.85)`,\n /** Background RGB for gradient stops */\n backgroundRgb: hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK),\n /** Border - 2px solid cyan */\n border: `2px solid ${hexToRgb(KOREAN_COLORS.PRIMARY_CYAN)}`,\n /** Border radius - 8px for smooth corners (from BORDER_RADIUS.lg) */\n borderRadius: BORDER_RADIUS.lg,\n /** Box shadow - Subtle depth */\n shadow: `0 4px 12px rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, 0.6)`,\n /** Hover shadow - Increased depth on interaction */\n shadowHover: `0 6px 20px rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.3)`,\n /** Backdrop filter - Blur for glassmorphism */\n backdropFilter: 'blur(8px)',\n /** Accent glow - For important elements */\n accentGlow: `0 0 10px rgba(${hexToRgbString(KOREAN_COLORS.ACCENT_GOLD)}, 0.5)`,\n /** Cyan glow - For primary highlights */\n cyanGlow: `0 0 10px rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.5)`,\n} as const;\n\n/**\n * Color Hierarchy for Text and UI Elements\n * \n * WCAG AA compliant color system for different levels of visual emphasis.\n * All colors formatted as RGB strings for easy opacity manipulation.\n * \n * @korean 색상 계층\n */\nexport const HIERARCHY = {\n /** Primary - Main content (White - highest contrast) */\n primary: {\n color: hexToRgb(KOREAN_COLORS.TEXT_PRIMARY),\n hex: KOREAN_COLORS.TEXT_PRIMARY,\n },\n /** Secondary - Supporting content (Light gray) */\n secondary: {\n color: hexToRgb(KOREAN_COLORS.TEXT_SECONDARY),\n hex: KOREAN_COLORS.TEXT_SECONDARY,\n },\n /** Tertiary - Subtle content (Medium gray) */\n tertiary: {\n color: hexToRgb(KOREAN_COLORS.TEXT_TERTIARY),\n hex: KOREAN_COLORS.TEXT_TERTIARY,\n },\n /** Muted - Disabled or inactive (Dark gray) */\n muted: {\n color: hexToRgb(KOREAN_COLORS.UI_DISABLED_TEXT),\n hex: KOREAN_COLORS.UI_DISABLED_TEXT,\n },\n /** Accent - Emphasis and highlights (Cyan) */\n accent: {\n color: hexToRgb(KOREAN_COLORS.PRIMARY_CYAN),\n hex: KOREAN_COLORS.PRIMARY_CYAN,\n },\n /** Gold - Special emphasis (Gold) */\n gold: {\n color: hexToRgb(KOREAN_COLORS.ACCENT_GOLD),\n hex: KOREAN_COLORS.ACCENT_GOLD,\n },\n /** Accent with 70% opacity - For subtle emphasis */\n accent70: {\n color: `rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.7)`,\n hex: KOREAN_COLORS.PRIMARY_CYAN,\n },\n /** Accent with 50% opacity - For backgrounds */\n accent50: {\n color: `rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.5)`,\n hex: KOREAN_COLORS.PRIMARY_CYAN,\n },\n /** Primary with 80% opacity - For hover states */\n primary80: {\n color: `rgba(${hexToRgbString(KOREAN_COLORS.TEXT_PRIMARY)}, 0.8)`,\n hex: KOREAN_COLORS.TEXT_PRIMARY,\n },\n} as const;\n\n/**\n * Border Styles for Different UI States\n * \n * @korean 테두리 스타일\n */\nexport const BORDERS = {\n /** Default border - Cyan 40% opacity */\n default: `2px solid rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 0.4)`,\n /** Accent border - Gold for emphasis */\n accent: `2px solid rgba(${hexToRgbString(KOREAN_COLORS.ACCENT_GOLD)}, 0.6)`,\n /** Muted border - Gray for subtle separation */\n muted: `1px solid rgba(${hexToRgbString(KOREAN_COLORS.UI_STEEL_GRAY)}, 0.3)`,\n /** Active border - Full cyan for interaction */\n active: `2px solid rgba(${hexToRgbString(KOREAN_COLORS.PRIMARY_CYAN)}, 1.0)`,\n} as const;\n\n/**\n * Gradient Backgrounds\n * \n * Cyberpunk-inspired gradients for panels and overlays.\n * \n * @korean 그라디언트 배경\n */\nexport const GRADIENTS = {\n /** Vertical fade - Top to bottom */\n vertical: (opacity: number = 0.85) =>\n `linear-gradient(180deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.7}) 100%)`,\n /** Vertical fade (reverse) - Bottom to top */\n verticalReverse: (opacity: number = 0.85) =>\n `linear-gradient(0deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.7}) 100%)`,\n /** Horizontal fade - Left to right */\n horizontal: (opacity: number = 0.85) =>\n `linear-gradient(90deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.4}) 100%)`,\n /** Horizontal fade (reverse) - Right to left */\n horizontalReverse: (opacity: number = 0.85) =>\n `linear-gradient(270deg, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.4}) 100%)`,\n /** Radial fade - Center outward */\n radial: (opacity: number = 0.85) =>\n `radial-gradient(circle, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity}) 0%, rgba(${hexToRgbString(KOREAN_COLORS.UI_BACKGROUND_DARK)}, ${opacity * 0.5}) 100%)`,\n} as const;\n\n/**\n * Transition Timings\n * \n * Consistent animation durations for smooth interactions.\n * \n * @korean 전환 타이밍\n */\nexport const TRANSITIONS = {\n /** Fast - Quick interactions (150ms) */\n fast: '150ms ease-in-out',\n /** Normal - Standard interactions (250ms) */\n normal: '250ms ease-in-out',\n /** Slow - Emphasis animations (400ms) */\n slow: '400ms ease-in-out',\n} as const;\n\n/**\n * Opacity Constants\n * \n * Standard opacity values for consistent transparency effects.\n * \n * @korean 투명도 상수\n */\nexport const OPACITY = {\n /** Base opacity for layered elements */\n base: 0.7,\n /** Opacity increment for stacking */\n increment: 0.1,\n /** High transparency */\n light: 0.3,\n /** Medium transparency */\n medium: 0.5,\n /** Low transparency */\n heavy: 0.8,\n} as const;\n\n/**\n * Combat UI Dimensions\n * \n * Common width and size constraints for combat UI elements.\n * \n * @korean 전투 UI 크기\n */\nexport const COMBAT_UI_DIMENSIONS = {\n /** Combat log minimum width - mobile */\n combatLogMinMobile: '200px',\n /** Combat log minimum width - desktop */\n combatLogMinDesktop: '280px',\n /** Combat log maximum width - mobile (percentage) */\n combatLogMaxMobile: '90%',\n /** Combat log maximum width - desktop */\n combatLogMaxDesktop: '500px',\n /** Combat log maximum width percentage (mobile) - 90% as decimal */\n combatLogMaxWidthPercentMobile: 0.9,\n /** Technique bar width - mobile (full width) */\n techniqueBarWidthMobile: '100%',\n /** Technique bar width - desktop (70% width) */\n techniqueBarWidthDesktop: '70%',\n} as const;\n\n/**\n * Pre-parsed Numeric Combat UI Dimensions\n * \n * Performance optimization: Numeric dimension values parsed once at module load.\n * Eliminates repeated parseInt calls for combat UI dimensions.\n * \n * @korean 사전 파싱된 전투 UI 크기 숫자 값\n */\nexport const COMBAT_UI_DIMENSIONS_NUMERIC = {\n combatLogMinMobile: 200,\n combatLogMinDesktop: 280,\n combatLogMaxDesktop: 500,\n} as const;\n\n/**\n * Text Effects\n * \n * Reusable text shadow effects for emphasis and readability.\n * \n * @korean 텍스트 효과\n */\nexport const TEXT_EFFECTS = {\n /** Dark shadow for contrast on bright backgrounds */\n darkShadow: '0 0 4px rgba(0,0,0,0.8)',\n /** Light glow for emphasis */\n lightGlow: '0 0 8px rgba(255,255,255,0.5)',\n} as const;\n\n/**\n * Get responsive spacing based on screen size\n * \n * Note: This helper function uses parseInt internally for flexibility\n * in returning pixel-suffixed strings. For performance-critical useMemo\n * calculations, prefer using SPACING_NUMERIC constants directly.\n * \n * @param baseSpacing - Base spacing value from SPACING scale\n * @param isMobile - Whether mobile layout is active\n * @param positionScale - Position scale multiplier (for 4K displays)\n * @returns Calculated spacing in pixels\n */\nexport function getResponsiveSpacing(\n baseSpacing: keyof typeof SPACING,\n isMobile: boolean,\n positionScale: number = 1.0\n): string {\n const baseValue = parseInt(SPACING[baseSpacing], 10);\n const scaledValue = isMobile ? baseValue : baseValue * positionScale;\n return `${scaledValue}px`;\n}\n\n/**\n * Get responsive font size based on typography scale\n * \n * Note: This helper function uses parseInt internally for flexibility\n * in returning pixel-suffixed strings. For performance-critical useMemo\n * calculations, prefer using TYPOGRAPHY_NUMERIC constants directly.\n * \n * @param typographyLevel - Typography level from TYPOGRAPHY\n * @param isMobile - Whether mobile layout is active\n * @param positionScale - Position scale multiplier (for 4K displays)\n * @returns Calculated font size in pixels\n */\nexport function getResponsiveFontSize(\n typographyLevel: keyof typeof TYPOGRAPHY,\n isMobile: boolean,\n positionScale: number = 1.0\n): string {\n const baseSize = parseInt(TYPOGRAPHY[typographyLevel].fontSize, 10);\n const scaledSize = isMobile ? baseSize : baseSize * positionScale;\n return `${scaledSize}px`;\n}\n\n/**\n * Type definitions for design system usage\n */\nexport type TypographyLevel = keyof typeof TYPOGRAPHY;\nexport type SpacingLevel = keyof typeof SPACING;\nexport type BorderRadiusLevel = keyof typeof BORDER_RADIUS;\nexport type HierarchyLevel = keyof typeof HIERARCHY;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAS,eAAe,KAAqB;CAI3C,OAAO,GAHI,OAAO,KAAM,IAGZ,IAFD,OAAO,IAAK,IAEL,IADR,MAAM;AAElB;;;;;;AAOA,SAAS,SAAS,KAAqB;CACrC,OAAO,OAAO,eAAe,GAAG,EAAE;AACpC;;;;;;;;;AAUA,IAAa,aAAa;;CAExB,UAAU;EACR,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,UAAU;EACR,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,UAAU;EACR,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,MAAM;EACJ,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,WAAW;EACT,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,QAAQ;EACN,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,SAAS;EACP,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,OAAO;EACL,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;;CAEA,MAAM;EACJ,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY,YAAY;CAC1B;AACF;;;;;;;;;AAUA,IAAa,qBAAqB;CAChC,UAAU;CACV,UAAU;CACV,UAAU;CACV,MAAM;CACN,WAAW;CACX,QAAQ;CACR,SAAS;CACT,OAAO;CACP,MAAM;AACR;;;;;;;;;AAUA,IAAa,UAAU;;CAErB,KAAK;;CAEL,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,KAAK;AACP;;;;;;;;;AAUA,IAAa,sBAAsB;;CAEjC,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAER,SAAS;;;;;;CAMT,oBAAoB;;CAEpB,OAAO;;CAEP,MAAM;AACR;;;;;;;;;AAUA,IAAa,kBAAkB;CAC7B,KAAK;CACL,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,KAAK;CAEL,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,oBAAoB;CACpB,OAAO;CACP,MAAM;AACR;;;;;;;;;AAUA,IAAa,wBAAwB;;CAEnC,YAAY;;CAEZ,cAAc;;CAEd,WAAW;;CAEX,YAAY;AACd;;;;;;;;;AAUA,IAAa,qBAAqB;;AAEhC,cAAc,IAChB;;;;;;;;;AAYA,IAAa,gBAAgB;;CAE3B,MAAM;;CAEN,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,IAAI;;CAEJ,MAAM;AACR;;;;;;;;;AAUA,IAAa,YAAY;;CAEvB,YAAY,QAAQ,eAAe,cAAc,kBAAkB,EAAE;;CAErE,eAAe,eAAe,cAAc,kBAAkB;;CAE9D,QAAQ,aAAa,SAAS,cAAc,YAAY;;CAExD,cAAc,cAAc;;CAE5B,QAAQ,mBAAmB,eAAe,cAAc,kBAAkB,EAAE;;CAE5E,aAAa,mBAAmB,eAAe,cAAc,YAAY,EAAE;;CAE3E,gBAAgB;;CAEhB,YAAY,iBAAiB,eAAe,cAAc,WAAW,EAAE;;CAEvE,UAAU,iBAAiB,eAAe,cAAc,YAAY,EAAE;AACxE;;;;;;;;;AAUA,IAAa,YAAY;;CAEvB,SAAS;EACP,OAAO,SAAS,cAAc,YAAY;EAC1C,KAAK,cAAc;CACrB;;CAEA,WAAW;EACT,OAAO,SAAS,cAAc,cAAc;EAC5C,KAAK,cAAc;CACrB;;CAEA,UAAU;EACR,OAAO,SAAS,cAAc,aAAa;EAC3C,KAAK,cAAc;CACrB;;CAEA,OAAO;EACL,OAAO,SAAS,cAAc,gBAAgB;EAC9C,KAAK,cAAc;CACrB;;CAEA,QAAQ;EACN,OAAO,SAAS,cAAc,YAAY;EAC1C,KAAK,cAAc;CACrB;;CAEA,MAAM;EACJ,OAAO,SAAS,cAAc,WAAW;EACzC,KAAK,cAAc;CACrB;;CAEA,UAAU;EACR,OAAO,QAAQ,eAAe,cAAc,YAAY,EAAE;EAC1D,KAAK,cAAc;CACrB;;CAEA,UAAU;EACR,OAAO,QAAQ,eAAe,cAAc,YAAY,EAAE;EAC1D,KAAK,cAAc;CACrB;;CAEA,WAAW;EACT,OAAO,QAAQ,eAAe,cAAc,YAAY,EAAE;EAC1D,KAAK,cAAc;CACrB;AACF;;;;;;AAOA,IAAa,UAAU;;CAErB,SAAS,kBAAkB,eAAe,cAAc,YAAY,EAAE;;CAEtE,QAAQ,kBAAkB,eAAe,cAAc,WAAW,EAAE;;CAEpE,OAAO,kBAAkB,eAAe,cAAc,aAAa,EAAE;;CAErE,QAAQ,kBAAkB,eAAe,cAAc,YAAY,EAAE;AACvE;;;;;;;;AASA,IAAa,YAAY;;CAEvB,WAAW,UAAkB,QAC3B,gCAAgC,eAAe,cAAc,kBAAkB,EAAE,IAAI,QAAQ,aAAa,eAAe,cAAc,kBAAkB,EAAE,IAAI,UAAU,GAAI;;CAE/K,kBAAkB,UAAkB,QAClC,8BAA8B,eAAe,cAAc,kBAAkB,EAAE,IAAI,QAAQ,aAAa,eAAe,cAAc,kBAAkB,EAAE,IAAI,UAAU,GAAI;;CAE7K,aAAa,UAAkB,QAC7B,+BAA+B,eAAe,cAAc,kBAAkB,EAAE,IAAI,QAAQ,aAAa,eAAe,cAAc,kBAAkB,EAAE,IAAI,UAAU,GAAI;;CAE9K,oBAAoB,UAAkB,QACpC,gCAAgC,eAAe,cAAc,kBAAkB,EAAE,IAAI,QAAQ,aAAa,eAAe,cAAc,kBAAkB,EAAE,IAAI,UAAU,GAAI;;CAE/K,SAAS,UAAkB,QACzB,gCAAgC,eAAe,cAAc,kBAAkB,EAAE,IAAI,QAAQ,aAAa,eAAe,cAAc,kBAAkB,EAAE,IAAI,UAAU,GAAI;AACjL;;;;;;;;AASA,IAAa,cAAc;;CAEzB,MAAM;;CAEN,QAAQ;;CAER,MAAM;AACR;;;;;;;;AASA,IAAa,UAAU;;CAErB,MAAM;;CAEN,WAAW;;CAEX,OAAO;;CAEP,QAAQ;;CAER,OAAO;AACT;;;;;;;;AASA,IAAa,uBAAuB;;CAElC,oBAAoB;;CAEpB,qBAAqB;;CAErB,oBAAoB;;CAEpB,qBAAqB;;CAErB,gCAAgC;;CAEhC,yBAAyB;;CAEzB,0BAA0B;AAC5B;;;;;;;;;AAUA,IAAa,+BAA+B;CAC1C,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;AACvB;;;;;;;;AASA,IAAa,eAAe;;CAE1B,YAAY;;CAEZ,WAAW;AACb;;;;;;;;;;;;;AAcA,SAAgB,qBACd,aACA,UACA,gBAAwB,GAChB;CACR,MAAM,YAAY,SAAS,QAAQ,cAAc,EAAE;CAEnD,OAAO,GADa,WAAW,YAAY,YAAY,cACjC;AACxB;;;;;;;;;;;;;AAcA,SAAgB,sBACd,iBACA,UACA,gBAAwB,GAChB;CACR,MAAM,WAAW,SAAS,WAAW,iBAAiB,UAAU,EAAE;CAElE,OAAO,GADY,WAAW,WAAW,WAAW,cAC/B;AACvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/types/constants/index.ts"],"sourcesContent":["/**\n * Main constants barrel export for Black Trigram Korean martial arts system.\n *\n * @module types/constants\n * @category Constants\n * @korean 상수배럴익스포트\n */\n\nexport { CYBERPUNK_COLORS, KOREAN_COLORS } from \"./colors\";\nexport {\n FONT_FAMILY,\n FONT_SIZES,\n FONT_WEIGHTS,\n KOREAN_FONT_WEIGHTS,\n KOREAN_TEXT_SIZES,\n KOREAN_MOBILE_FONT_SIZES,\n getKoreanFontSize,\n} from \"./typography\";\nexport { HEALTH_COLORS, UI_CONSTANTS, UI_DIMENSIONS } from \"./ui\";\n\n// Design System exports\nexport {\n TYPOGRAPHY,\n TYPOGRAPHY_NUMERIC,\n SPACING,\n SPACING_NUMERIC,\n SPACING_ADJUSTMENTS,\n BORDER_RADIUS,\n HUD_STYLE,\n HIERARCHY,\n BORDERS,\n GRADIENTS,\n TRANSITIONS,\n OPACITY,\n COMBAT_UI_DIMENSIONS,\n COMBAT_UI_DIMENSIONS_NUMERIC,\n TEXT_EFFECTS,\n FONT_SIZE_MULTIPLIERS,\n LAYOUT_MULTIPLIERS,\n getResponsiveSpacing,\n getResponsiveFontSize,\n type TypographyLevel,\n type SpacingLevel,\n type BorderRadiusLevel,\n type HierarchyLevel,\n} from \"./designSystem\";\n\n// Performance constants\nexport {\n PERFORMANCE_SETTINGS_BY_TIER,\n FRAME_TIME_BUDGET,\n getPerformanceTier,\n getPerformanceSettings,\n type PerformanceTier,\n type PerformanceSettings,\n} from \"./performance\";\n\n// Responsive scaling system exports\nexport {\n RESPONSIVE_BREAKPOINTS,\n FONT_SCALE_MAP,\n SPACING_SCALE_MAP,\n FONT_SIZE_CONSTRAINTS,\n DEFAULT_RESIZE_TRANSITION,\n getScreenSize,\n calculateFontSize,\n calculateSpacing,\n getFontScale,\n getSpacingScale,\n createTransitionString,\n createResponsiveConfig,\n calculateResponsiveValues,\n testScreenSize,\n isMobileSize,\n isTabletSize,\n isDesktopSize,\n // Use qualified name for ScreenSize to avoid conflict with LayoutTypes.ScreenSize\n type ScreenSize as ResponsiveScreenSize,\n type ResponsiveBreakpoints,\n type FontScaleMap,\n type SpacingScaleMap,\n type ResponsiveScaleConfig,\n type ResizeTransitionConfig,\n type ResponsiveValues,\n type ScreenSizeTestResult,\n} from \"../../systems/ResponsiveScaling\";\n\nexport { KOREAN_COLORS as default } from \"./colors\";\n\nexport { ANIMATION_DURATIONS } from \"./animations\";\n\n/**\n * Archetype-specific technique damage bonuses\n * Maps archetype to technique ID to bonus multiplier\n * \n * @category Combat System\n * @korean 원형별 기술 보너스\n */\nexport const ARCHETYPE_TECHNIQUE_BONUSES: Record<\n string,\n Record<string, number>\n> = {\n // Define bonuses for each archetype\n};\n\n/**\n * Maximum ki cost for stance transitions\n * @category Combat System\n * @korean 최대 기 전환 비용\n */\nexport const MAX_TRANSITION_COST_KI = 50;\n\n/**\n * Maximum stamina cost for stance transitions\n * @category Combat System\n * @korean 최대 체력 전환 비용\n */\nexport const MAX_TRANSITION_COST_STAMINA = 30;\n\n/**\n * Maximum time allowed for stance transitions in milliseconds\n * @category Combat System\n * @korean 최대 전환 시간\n */\nexport const MAX_TRANSITION_TIME_MILLISECONDS = 1000;\n\n/**\n * Performance rating thresholds for match results\n * Calculated based on combat effectiveness metrics\n * \n * @category Combat Performance\n * @korean 전투 성능 등급\n */\nexport const PERFORMANCE_RATING_THRESHOLDS = {\n S: {\n minScore: 90,\n korean: \"S급\",\n english: \"S Rank\",\n description: {\n korean: \"완벽한 전투\",\n english: \"Perfect Combat\",\n },\n color: 0xffd700, // KOREAN_COLORS.ACCENT_GOLD\n },\n A: {\n minScore: 75,\n korean: \"A급\",\n english: \"A Rank\",\n description: {\n korean: \"우수한 전투\",\n english: \"Excellent Combat\",\n },\n color: 0x00ffff, // KOREAN_COLORS.PRIMARY_CYAN\n },\n B: {\n minScore: 60,\n korean: \"B급\",\n english: \"B Rank\",\n description: {\n korean: \"양호한 전투\",\n english: \"Good Combat\",\n },\n color: 0x3399ff, // KOREAN_COLORS.ACCENT_BLUE\n },\n C: {\n minScore: 0,\n korean: \"C급\",\n english: \"C Rank\",\n description: {\n korean: \"보통 전투\",\n english: \"Average Combat\",\n },\n color: 0xcccccc, // KOREAN_COLORS.TEXT_SECONDARY\n },\n} as const;\n\n/**\n * Archetype asset mapping for visual and audio integration\n * Maps each player archetype to its visual assets, theme music, and metadata\n * \n * @category Player Archetypes\n * @korean 플레이어 원형 에셋\n */\nexport const ARCHETYPE_ASSETS = {\n musa: {\n id: \"musa\",\n image: \"/assets/visual/archetypes/musa.png\",\n theme: \"/assets/audio/music/archetype_themes/musa_warrior.mp3\",\n themeId: \"musa_warrior_theme\",\n name_korean: \"무사\",\n name_english: \"Traditional Warrior\",\n textureKey: \"musa\",\n },\n amsalja: {\n id: \"amsalja\",\n image: \"/assets/visual/archetypes/amsalja.png\",\n theme: \"/assets/audio/music/archetype_themes/amsalja_shadow.mp3\",\n themeId: \"amsalja_shadow_theme\",\n name_korean: \"암살자\",\n name_english: \"Shadow Assassin\",\n textureKey: \"amsalja\",\n },\n hacker: {\n id: \"hacker\",\n image: \"/assets/visual/archetypes/hacker.png\",\n theme: \"/assets/audio/music/archetype_themes/hacker_cyber.mp3\",\n themeId: \"hacker_cyber_theme\",\n name_korean: \"해커\",\n name_english: \"Cyber Warrior\",\n textureKey: \"hacker\",\n },\n jeongbo_yowon: {\n id: \"jeongbo_yowon\",\n image: \"/assets/visual/archetypes/jeongbo_yowon.png\",\n theme: \"/assets/audio/music/archetype_themes/jeongbo_intel.mp3\",\n themeId: \"jeongbo_intel_theme\",\n name_korean: \"정보요원\",\n name_english: \"Intelligence Operative\",\n textureKey: \"jeongbo_yowon\",\n },\n jojik_pokryeokbae: {\n id: \"jojik_pokryeokbae\",\n image: \"/assets/visual/archetypes/jojik_pokryeokbae.png\",\n theme: \"/assets/audio/music/archetype_themes/jojik_street.mp3\",\n themeId: \"jojik_street_theme\",\n name_korean: \"조직폭력배\",\n name_english: \"Organized Crime\",\n textureKey: \"jojik_pokryeokbae\",\n },\n} as const;\n\n/**\n * Background images for archetype-related screens\n * \n * Note: Directory name \"archetyples\" is intentionally spelled this way to match\n * the actual directory structure in /public/assets/visual/bg/\n * \n * @category Visual Assets\n * @korean 원형 배경 이미지\n */\nexport const ARCHETYPE_BACKGROUNDS = {\n overview: \"/assets/visual/bg/archetyples/PlayerArchetypesOverview.png\",\n explained: \"/assets/visual/bg/archetyples/PlayerArchetypesExplained.png\",\n teamDynamics: \"/assets/visual/bg/archetyples/CyberpunkTeamDynamics.png\",\n} as const;\n\n/**\n * Fallback image path for when archetype images fail to load\n * \n * @category Visual Assets\n * @korean 대체 이미지 경로\n */\nexport const FALLBACK_ARCHETYPE_IMAGE = \"/assets/visual/logo/black-trigram-256.png\" as const;\n\n/**\n * Round announcement timing constants\n * Controls the display duration and transitions for round announcements\n * \n * @category Combat UI\n * @korean 라운드 발표 타이밍\n */\nexport const ROUND_ANNOUNCEMENT_TIMINGS = {\n /** Duration to display announcement before countdown (seconds) */\n ANNOUNCEMENT_DURATION: 2,\n /** Duration of countdown to next round (seconds) */\n COUNTDOWN_DURATION: 3,\n /** Brief transition duration before next round starts (milliseconds) */\n TRANSITION_DURATION: 500,\n /** Fade in animation duration (milliseconds) */\n FADE_IN_DURATION: 300,\n /** Fade out animation duration (milliseconds) */\n FADE_OUT_DURATION: 300,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAkGA,IAAa,8BAGT,
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/types/constants/index.ts"],"sourcesContent":["/**\n * Main constants barrel export for Black Trigram Korean martial arts system.\n *\n * @module types/constants\n * @category Constants\n * @korean 상수배럴익스포트\n */\n\nexport { CYBERPUNK_COLORS, KOREAN_COLORS } from \"./colors\";\nexport {\n FONT_FAMILY,\n FONT_SIZES,\n FONT_WEIGHTS,\n KOREAN_FONT_WEIGHTS,\n KOREAN_TEXT_SIZES,\n KOREAN_MOBILE_FONT_SIZES,\n getKoreanFontSize,\n} from \"./typography\";\nexport { HEALTH_COLORS, UI_CONSTANTS, UI_DIMENSIONS } from \"./ui\";\n\n// Design System exports\nexport {\n TYPOGRAPHY,\n TYPOGRAPHY_NUMERIC,\n SPACING,\n SPACING_NUMERIC,\n SPACING_ADJUSTMENTS,\n BORDER_RADIUS,\n HUD_STYLE,\n HIERARCHY,\n BORDERS,\n GRADIENTS,\n TRANSITIONS,\n OPACITY,\n COMBAT_UI_DIMENSIONS,\n COMBAT_UI_DIMENSIONS_NUMERIC,\n TEXT_EFFECTS,\n FONT_SIZE_MULTIPLIERS,\n LAYOUT_MULTIPLIERS,\n getResponsiveSpacing,\n getResponsiveFontSize,\n type TypographyLevel,\n type SpacingLevel,\n type BorderRadiusLevel,\n type HierarchyLevel,\n} from \"./designSystem\";\n\n// Performance constants\nexport {\n PERFORMANCE_SETTINGS_BY_TIER,\n FRAME_TIME_BUDGET,\n getPerformanceTier,\n getPerformanceSettings,\n type PerformanceTier,\n type PerformanceSettings,\n} from \"./performance\";\n\n// Responsive scaling system exports\nexport {\n RESPONSIVE_BREAKPOINTS,\n FONT_SCALE_MAP,\n SPACING_SCALE_MAP,\n FONT_SIZE_CONSTRAINTS,\n DEFAULT_RESIZE_TRANSITION,\n getScreenSize,\n calculateFontSize,\n calculateSpacing,\n getFontScale,\n getSpacingScale,\n createTransitionString,\n createResponsiveConfig,\n calculateResponsiveValues,\n testScreenSize,\n isMobileSize,\n isTabletSize,\n isDesktopSize,\n // Use qualified name for ScreenSize to avoid conflict with LayoutTypes.ScreenSize\n type ScreenSize as ResponsiveScreenSize,\n type ResponsiveBreakpoints,\n type FontScaleMap,\n type SpacingScaleMap,\n type ResponsiveScaleConfig,\n type ResizeTransitionConfig,\n type ResponsiveValues,\n type ScreenSizeTestResult,\n} from \"../../systems/ResponsiveScaling\";\n\nexport { KOREAN_COLORS as default } from \"./colors\";\n\nexport { ANIMATION_DURATIONS } from \"./animations\";\n\n/**\n * Archetype-specific technique damage bonuses\n * Maps archetype to technique ID to bonus multiplier\n * \n * @category Combat System\n * @korean 원형별 기술 보너스\n */\nexport const ARCHETYPE_TECHNIQUE_BONUSES: Record<\n string,\n Record<string, number>\n> = {\n // Define bonuses for each archetype\n};\n\n/**\n * Maximum ki cost for stance transitions\n * @category Combat System\n * @korean 최대 기 전환 비용\n */\nexport const MAX_TRANSITION_COST_KI = 50;\n\n/**\n * Maximum stamina cost for stance transitions\n * @category Combat System\n * @korean 최대 체력 전환 비용\n */\nexport const MAX_TRANSITION_COST_STAMINA = 30;\n\n/**\n * Maximum time allowed for stance transitions in milliseconds\n * @category Combat System\n * @korean 최대 전환 시간\n */\nexport const MAX_TRANSITION_TIME_MILLISECONDS = 1000;\n\n/**\n * Performance rating thresholds for match results\n * Calculated based on combat effectiveness metrics\n * \n * @category Combat Performance\n * @korean 전투 성능 등급\n */\nexport const PERFORMANCE_RATING_THRESHOLDS = {\n S: {\n minScore: 90,\n korean: \"S급\",\n english: \"S Rank\",\n description: {\n korean: \"완벽한 전투\",\n english: \"Perfect Combat\",\n },\n color: 0xffd700, // KOREAN_COLORS.ACCENT_GOLD\n },\n A: {\n minScore: 75,\n korean: \"A급\",\n english: \"A Rank\",\n description: {\n korean: \"우수한 전투\",\n english: \"Excellent Combat\",\n },\n color: 0x00ffff, // KOREAN_COLORS.PRIMARY_CYAN\n },\n B: {\n minScore: 60,\n korean: \"B급\",\n english: \"B Rank\",\n description: {\n korean: \"양호한 전투\",\n english: \"Good Combat\",\n },\n color: 0x3399ff, // KOREAN_COLORS.ACCENT_BLUE\n },\n C: {\n minScore: 0,\n korean: \"C급\",\n english: \"C Rank\",\n description: {\n korean: \"보통 전투\",\n english: \"Average Combat\",\n },\n color: 0xcccccc, // KOREAN_COLORS.TEXT_SECONDARY\n },\n} as const;\n\n/**\n * Archetype asset mapping for visual and audio integration\n * Maps each player archetype to its visual assets, theme music, and metadata\n * \n * @category Player Archetypes\n * @korean 플레이어 원형 에셋\n */\nexport const ARCHETYPE_ASSETS = {\n musa: {\n id: \"musa\",\n image: \"/assets/visual/archetypes/musa.png\",\n theme: \"/assets/audio/music/archetype_themes/musa_warrior.mp3\",\n themeId: \"musa_warrior_theme\",\n name_korean: \"무사\",\n name_english: \"Traditional Warrior\",\n textureKey: \"musa\",\n },\n amsalja: {\n id: \"amsalja\",\n image: \"/assets/visual/archetypes/amsalja.png\",\n theme: \"/assets/audio/music/archetype_themes/amsalja_shadow.mp3\",\n themeId: \"amsalja_shadow_theme\",\n name_korean: \"암살자\",\n name_english: \"Shadow Assassin\",\n textureKey: \"amsalja\",\n },\n hacker: {\n id: \"hacker\",\n image: \"/assets/visual/archetypes/hacker.png\",\n theme: \"/assets/audio/music/archetype_themes/hacker_cyber.mp3\",\n themeId: \"hacker_cyber_theme\",\n name_korean: \"해커\",\n name_english: \"Cyber Warrior\",\n textureKey: \"hacker\",\n },\n jeongbo_yowon: {\n id: \"jeongbo_yowon\",\n image: \"/assets/visual/archetypes/jeongbo_yowon.png\",\n theme: \"/assets/audio/music/archetype_themes/jeongbo_intel.mp3\",\n themeId: \"jeongbo_intel_theme\",\n name_korean: \"정보요원\",\n name_english: \"Intelligence Operative\",\n textureKey: \"jeongbo_yowon\",\n },\n jojik_pokryeokbae: {\n id: \"jojik_pokryeokbae\",\n image: \"/assets/visual/archetypes/jojik_pokryeokbae.png\",\n theme: \"/assets/audio/music/archetype_themes/jojik_street.mp3\",\n themeId: \"jojik_street_theme\",\n name_korean: \"조직폭력배\",\n name_english: \"Organized Crime\",\n textureKey: \"jojik_pokryeokbae\",\n },\n} as const;\n\n/**\n * Background images for archetype-related screens\n * \n * Note: Directory name \"archetyples\" is intentionally spelled this way to match\n * the actual directory structure in /public/assets/visual/bg/\n * \n * @category Visual Assets\n * @korean 원형 배경 이미지\n */\nexport const ARCHETYPE_BACKGROUNDS = {\n overview: \"/assets/visual/bg/archetyples/PlayerArchetypesOverview.png\",\n explained: \"/assets/visual/bg/archetyples/PlayerArchetypesExplained.png\",\n teamDynamics: \"/assets/visual/bg/archetyples/CyberpunkTeamDynamics.png\",\n} as const;\n\n/**\n * Fallback image path for when archetype images fail to load\n * \n * @category Visual Assets\n * @korean 대체 이미지 경로\n */\nexport const FALLBACK_ARCHETYPE_IMAGE = \"/assets/visual/logo/black-trigram-256.png\" as const;\n\n/**\n * Round announcement timing constants\n * Controls the display duration and transitions for round announcements\n * \n * @category Combat UI\n * @korean 라운드 발표 타이밍\n */\nexport const ROUND_ANNOUNCEMENT_TIMINGS = {\n /** Duration to display announcement before countdown (seconds) */\n ANNOUNCEMENT_DURATION: 2,\n /** Duration of countdown to next round (seconds) */\n COUNTDOWN_DURATION: 3,\n /** Brief transition duration before next round starts (milliseconds) */\n TRANSITION_DURATION: 500,\n /** Fade in animation duration (milliseconds) */\n FADE_IN_DURATION: 300,\n /** Fade out animation duration (milliseconds) */\n FADE_OUT_DURATION: 300,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAkGA,IAAa,8BAGT,CAEJ;;;;;;AAOA,IAAa,yBAAyB;;;;;;AAOtC,IAAa,8BAA8B;;;;;;AAO3C,IAAa,mCAAmC;;;;;;;;AAShD,IAAa,gCAAgC;CAC3C,GAAG;EACD,UAAU;EACV,QAAQ;EACR,SAAS;EACT,aAAa;GACX,QAAQ;GACR,SAAS;EACX;EACA,OAAO;CACT;CACA,GAAG;EACD,UAAU;EACV,QAAQ;EACR,SAAS;EACT,aAAa;GACX,QAAQ;GACR,SAAS;EACX;EACA,OAAO;CACT;CACA,GAAG;EACD,UAAU;EACV,QAAQ;EACR,SAAS;EACT,aAAa;GACX,QAAQ;GACR,SAAS;EACX;EACA,OAAO;CACT;CACA,GAAG;EACD,UAAU;EACV,QAAQ;EACR,SAAS;EACT,aAAa;GACX,QAAQ;GACR,SAAS;EACX;EACA,OAAO;CACT;AACF;;;;;;;;AASA,IAAa,mBAAmB;CAC9B,MAAM;EACJ,IAAI;EACJ,OAAO;EACP,OAAO;EACP,SAAS;EACT,aAAa;EACb,cAAc;EACd,YAAY;CACd;CACA,SAAS;EACP,IAAI;EACJ,OAAO;EACP,OAAO;EACP,SAAS;EACT,aAAa;EACb,cAAc;EACd,YAAY;CACd;CACA,QAAQ;EACN,IAAI;EACJ,OAAO;EACP,OAAO;EACP,SAAS;EACT,aAAa;EACb,cAAc;EACd,YAAY;CACd;CACA,eAAe;EACb,IAAI;EACJ,OAAO;EACP,OAAO;EACP,SAAS;EACT,aAAa;EACb,cAAc;EACd,YAAY;CACd;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,OAAO;EACP,SAAS;EACT,aAAa;EACb,cAAc;EACd,YAAY;CACd;AACF;;;;;;;;;;AAWA,IAAa,wBAAwB;CACnC,UAAU;CACV,WAAW;CACX,cAAc;AAChB;;;;;;;AAQA,IAAa,2BAA2B;;;;;;;;AASxC,IAAa,6BAA6B;;CAExC,uBAAuB;;CAEvB,oBAAoB;;CAEpB,qBAAqB;;CAErB,kBAAkB;;CAElB,mBAAmB;AACrB"}
|
|
@@ -77,6 +77,27 @@ export declare const TECHNIQUE_BAR_MIN_READABLE_SCALE = 0.7;
|
|
|
77
77
|
* top HUD and side HUDs align without overlap across responsive breakpoints.
|
|
78
78
|
*/
|
|
79
79
|
export declare const TRAINING_TOP_HUD_HEIGHT_PERCENT = 0.06;
|
|
80
|
+
/**
|
|
81
|
+
* Combat top HUD height ratio.
|
|
82
|
+
*
|
|
83
|
+
* Shared by CombatTopHUD, side HUD offsets, and arena layout reservations so
|
|
84
|
+
* the 3D combat area starts immediately below the visible top bar.
|
|
85
|
+
*/
|
|
86
|
+
export declare const COMBAT_TOP_HUD_HEIGHT_PERCENT = 0.06;
|
|
87
|
+
/**
|
|
88
|
+
* Combat bottom HUD height ratio.
|
|
89
|
+
*
|
|
90
|
+
* Shared by CombatBottomHUD, side HUD offsets, and arena layout reservations so
|
|
91
|
+
* technique controls fit without over-reserving vertical arena space.
|
|
92
|
+
*/
|
|
93
|
+
export declare const COMBAT_BOTTOM_HUD_HEIGHT_PERCENT = 0.1;
|
|
94
|
+
/**
|
|
95
|
+
* Training bottom HUD height ratio.
|
|
96
|
+
*
|
|
97
|
+
* Shared by TrainingBottomHUD, side HUD offsets, and training area layout
|
|
98
|
+
* reservations so the dojang content is framed consistently.
|
|
99
|
+
*/
|
|
100
|
+
export declare const TRAINING_BOTTOM_HUD_HEIGHT_PERCENT = 0.11;
|
|
80
101
|
/**
|
|
81
102
|
* Top positioning for UI elements (in pixels)
|
|
82
103
|
* Used for elements positioned from the top of the screen
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/types/constants/layout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB;IAClC,0FAA0F;;IAG1F,gFAAgF;;;;;IAMhF,+DAA+D;;CAEvD,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB;;;;;;IAMpC,wFAAwF;;CAEhF,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;IACpC,oEAAoE;;IAGpE,oEAAoE;;IAGpE,uEAAuE;;IAGvE,yEAAyE;;CAEjE,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,kDAAkD;;;;;IAMlD,2CAA2C;;CAEnC,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAI/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BvE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,UAAQ,GAAG,MAAM,CAQ/E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/types/constants/layout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB;IAClC,0FAA0F;;IAG1F,gFAAgF;;;;;IAMhF,+DAA+D;;CAEvD,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB;;;;;;IAMpC,wFAAwF;;CAEhF,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;IACpC,oEAAoE;;IAGpE,oEAAoE;;IAGpE,uEAAuE;;IAGvE,yEAAyE;;CAEjE,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,OAAO,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,kDAAkD;;;;;IAMlD,2CAA2C;;CAEnC,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAI/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BvE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,UAAQ,GAAG,MAAM,CAQ/E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC"}
|
|
@@ -79,6 +79,27 @@ var TECHNIQUE_BAR_MIN_READABLE_SCALE = .7;
|
|
|
79
79
|
*/
|
|
80
80
|
var TRAINING_TOP_HUD_HEIGHT_PERCENT = .06;
|
|
81
81
|
/**
|
|
82
|
+
* Combat top HUD height ratio.
|
|
83
|
+
*
|
|
84
|
+
* Shared by CombatTopHUD, side HUD offsets, and arena layout reservations so
|
|
85
|
+
* the 3D combat area starts immediately below the visible top bar.
|
|
86
|
+
*/
|
|
87
|
+
var COMBAT_TOP_HUD_HEIGHT_PERCENT = .06;
|
|
88
|
+
/**
|
|
89
|
+
* Combat bottom HUD height ratio.
|
|
90
|
+
*
|
|
91
|
+
* Shared by CombatBottomHUD, side HUD offsets, and arena layout reservations so
|
|
92
|
+
* technique controls fit without over-reserving vertical arena space.
|
|
93
|
+
*/
|
|
94
|
+
var COMBAT_BOTTOM_HUD_HEIGHT_PERCENT = .1;
|
|
95
|
+
/**
|
|
96
|
+
* Training bottom HUD height ratio.
|
|
97
|
+
*
|
|
98
|
+
* Shared by TrainingBottomHUD, side HUD offsets, and training area layout
|
|
99
|
+
* reservations so the dojang content is framed consistently.
|
|
100
|
+
*/
|
|
101
|
+
var TRAINING_BOTTOM_HUD_HEIGHT_PERCENT = .11;
|
|
102
|
+
/**
|
|
82
103
|
* Get mobile controls bottom position.
|
|
83
104
|
*
|
|
84
105
|
* Returns a viewport-responsive band for comfortable D-Pad / ActionButton
|
|
@@ -98,6 +119,6 @@ function getMobileControlsBottom(viewportHeight) {
|
|
|
98
119
|
return Math.round(Math.max(MOBILE_CONTROLS_PLACEMENT.TALL_MIN, Math.min(MOBILE_CONTROLS_PLACEMENT.TALL_MAX, viewportHeight * MOBILE_CONTROLS_PLACEMENT.TALL_VIEWPORT_RATIO)));
|
|
99
120
|
}
|
|
100
121
|
//#endregion
|
|
101
|
-
export { HUD_SIDE_CONTROL_RESERVES, TECHNIQUE_BAR_MIN_READABLE_SCALE, TRAINING_TOP_HUD_HEIGHT_PERCENT, getMobileControlsBottom };
|
|
122
|
+
export { COMBAT_BOTTOM_HUD_HEIGHT_PERCENT, COMBAT_TOP_HUD_HEIGHT_PERCENT, HUD_SIDE_CONTROL_RESERVES, TECHNIQUE_BAR_MIN_READABLE_SCALE, TRAINING_BOTTOM_HUD_HEIGHT_PERCENT, TRAINING_TOP_HUD_HEIGHT_PERCENT, getMobileControlsBottom };
|
|
102
123
|
|
|
103
124
|
//# sourceMappingURL=layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","names":[],"sources":["../../../src/types/constants/layout.ts"],"sourcesContent":["/**\n * Layout positioning constants for combat and training screens\n * Centralized to prevent magic numbers and ensure consistency\n * \n * @category UI Constants\n * @korean 레이아웃위치상수\n */\n\n/**\n * Bottom positioning for UI elements (in pixels)\n * Values designed to prevent overlap and prioritize gameplay visibility:\n * - Mobile controls at 200px for ergonomic touch access\n * - TechniqueBar lowered to 20px (mobile) / 30px (desktop) to minimize arena obstruction\n * - Back button moved to top-right corner (off-center) for accessibility\n * \n * PRIORITY: Combat arena visibility > TechniqueBar > Mobile controls > Back button\n */\nexport const LAYOUT_BOTTOM_POSITIONS = {\n /** Mobile controls (VirtualDPad, ActionButtons) - must stay at 200px for accessibility */\n MOBILE_CONTROLS: 200,\n \n /** TechniqueBar container - lowered to bottom to prioritize arena visibility */\n TECHNIQUE_BAR: {\n MOBILE: 20, // Near bottom of screen to minimize arena obstruction\n DESKTOP: 30, // Slightly higher on desktop for better visibility\n },\n \n /** TechniqueBar container height (for overlap calculations) */\n TECHNIQUE_BAR_HEIGHT: 180,\n} as const;\n\n/**\n * Mobile touch controls placement ratios:\n * - 24% on short landscape viewports, clamped to 96–120 px, keeps controls\n * below the arena center while preserving thumb reach.\n * - 17% on tall portrait viewports, clamped to 128–200 px, lowers controls\n * toward the nav/home area without colliding with the bottom HUD or browser\n * safe area.\n */\nexport const MOBILE_CONTROLS_PLACEMENT = {\n SHORT_VIEWPORT_RATIO: 0.24,\n TALL_VIEWPORT_RATIO: 0.17,\n SHORT_MIN: 96,\n SHORT_MAX: 120,\n TALL_MIN: 128,\n /** 200 px upper bound intentionally matches LAYOUT_BOTTOM_POSITIONS.MOBILE_CONTROLS. */\n TALL_MAX: LAYOUT_BOTTOM_POSITIONS.MOBILE_CONTROLS,\n} as const;\n\n/**\n * Shared horizontal reservations for HUD side controls.\n *\n * These values keep centered technique cards readable while preserving space\n * for absolutely positioned controls such as the compact volume control and\n * mobile archetype selector.\n */\nexport const HUD_SIDE_CONTROL_RESERVES = {\n /** Compact volume control width (162px) plus interaction margin. */\n VOLUME_CONTROL: 180,\n\n /** Mobile archetype selector reserve in the training bottom HUD. */\n ARCHETYPE_SELECTOR: 180,\n\n /** Embedded mobile technique bar side reserve for compact controls. */\n TECHNIQUE_BAR_MOBILE: 96,\n\n /** Embedded desktop technique bar side reserve for side HUD controls. */\n TECHNIQUE_BAR_DESKTOP: 190,\n} as const;\n\n/**\n * Minimum visual scale before technique cards become unreadable.\n *\n * The 70% threshold preserves readable Korean/English labels and keyboard\n * hints on compact HUDs. Below this value, embedded bars switch to horizontal\n * scrolling instead of shrinking so touch targets and text remain usable.\n *\n * Used by TechniqueBar when calculating whether embedded cards should scale\n * down or remain full size with horizontal scroll.\n */\nexport const TECHNIQUE_BAR_MIN_READABLE_SCALE = 0.7;\n\n/**\n * Training top HUD height ratio.\n *\n * Must match the training context top offset used by useHUDLayout so the\n * top HUD and side HUDs align without overlap across responsive breakpoints.\n */\nexport const TRAINING_TOP_HUD_HEIGHT_PERCENT = 0.06;\n\n/**\n * Top positioning for UI elements (in pixels)\n * Used for elements positioned from the top of the screen\n */\nexport const LAYOUT_TOP_POSITIONS = {\n /** Back to Menu button positioned at top-right */\n BACK_BUTTON: {\n MOBILE: 10, // 10px from top on mobile\n DESKTOP: 20, // 20px from top on desktop\n },\n \n /** Safe area offset for notched devices */\n SAFE_AREA_TOP: 44, // iPhone notch height\n} as const;\n\n/**\n * Helper function to get technique bar bottom position\n * NOTE: positionScale NOT applied to prevent layout bugs on 4K displays\n * \n * @param isMobile - Whether device is mobile (<768px)\n * @returns Bottom position in pixels\n */\nexport function getTechniqueBarBottom(isMobile: boolean): number {\n return isMobile \n ? LAYOUT_BOTTOM_POSITIONS.TECHNIQUE_BAR.MOBILE\n : LAYOUT_BOTTOM_POSITIONS.TECHNIQUE_BAR.DESKTOP;\n}\n\n/**\n * Get mobile controls bottom position.\n *\n * Returns a viewport-responsive band for comfortable D-Pad / ActionButton\n * reach without pushing controls into the arena center. Short landscape\n * viewports use a 96–120 px clamped band, while tall numeric viewports use a\n * 128–200 px clamped band.\n *\n * @param viewportHeight - Optional current viewport height in pixels.\n * When omitted or NaN, returns the 200 px default.\n * Numeric heights >= 500 use the tall viewport ratio\n * clamped to 128–200 px.\n * @returns Bottom position in pixels\n */\nexport function getMobileControlsBottom(viewportHeight?: number): number {\n if (typeof viewportHeight !== \"number\" || Number.isNaN(viewportHeight)) {\n return LAYOUT_BOTTOM_POSITIONS.MOBILE_CONTROLS;\n }\n\n if (viewportHeight < 500) {\n return Math.round(\n Math.max(\n MOBILE_CONTROLS_PLACEMENT.SHORT_MIN,\n Math.min(\n MOBILE_CONTROLS_PLACEMENT.SHORT_MAX,\n viewportHeight * MOBILE_CONTROLS_PLACEMENT.SHORT_VIEWPORT_RATIO,\n ),\n ),\n );\n }\n\n return Math.round(\n Math.max(\n MOBILE_CONTROLS_PLACEMENT.TALL_MIN,\n Math.min(\n MOBILE_CONTROLS_PLACEMENT.TALL_MAX,\n viewportHeight * MOBILE_CONTROLS_PLACEMENT.TALL_VIEWPORT_RATIO,\n ),\n ),\n );\n}\n\n/**\n * Get back button top position for top-right corner placement\n * Includes safe area offset for notched devices\n * \n * @param isMobile - Whether device is mobile (<768px)\n * @param hasSafeArea - Whether device has notch/safe area (default: false)\n * @returns Top position in pixels\n */\nexport function getBackButtonTop(isMobile: boolean, hasSafeArea = false): number {\n const baseTop = isMobile \n ? LAYOUT_TOP_POSITIONS.BACK_BUTTON.MOBILE\n : LAYOUT_TOP_POSITIONS.BACK_BUTTON.DESKTOP;\n \n return hasSafeArea \n ? baseTop + LAYOUT_TOP_POSITIONS.SAFE_AREA_TOP\n : baseTop;\n}\n\n/**\n * Get back button right position for top-right corner placement\n * \n * @param isMobile - Whether device is mobile (<768px)\n * @returns Right position in pixels\n */\nexport function getBackButtonRight(isMobile: boolean): number {\n return isMobile ? 10 : 20;\n}\n\n/**\n * Type for layout position values\n */\nexport type LayoutBottomPosition = number;\nexport type LayoutTopPosition = number;\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,IAAa,0BAA0B;;CAErC,iBAAiB;;CAGjB,eAAe;EACb,QAAQ;EACR,SAAS;
|
|
1
|
+
{"version":3,"file":"layout.js","names":[],"sources":["../../../src/types/constants/layout.ts"],"sourcesContent":["/**\n * Layout positioning constants for combat and training screens\n * Centralized to prevent magic numbers and ensure consistency\n * \n * @category UI Constants\n * @korean 레이아웃위치상수\n */\n\n/**\n * Bottom positioning for UI elements (in pixels)\n * Values designed to prevent overlap and prioritize gameplay visibility:\n * - Mobile controls at 200px for ergonomic touch access\n * - TechniqueBar lowered to 20px (mobile) / 30px (desktop) to minimize arena obstruction\n * - Back button moved to top-right corner (off-center) for accessibility\n * \n * PRIORITY: Combat arena visibility > TechniqueBar > Mobile controls > Back button\n */\nexport const LAYOUT_BOTTOM_POSITIONS = {\n /** Mobile controls (VirtualDPad, ActionButtons) - must stay at 200px for accessibility */\n MOBILE_CONTROLS: 200,\n \n /** TechniqueBar container - lowered to bottom to prioritize arena visibility */\n TECHNIQUE_BAR: {\n MOBILE: 20, // Near bottom of screen to minimize arena obstruction\n DESKTOP: 30, // Slightly higher on desktop for better visibility\n },\n \n /** TechniqueBar container height (for overlap calculations) */\n TECHNIQUE_BAR_HEIGHT: 180,\n} as const;\n\n/**\n * Mobile touch controls placement ratios:\n * - 24% on short landscape viewports, clamped to 96–120 px, keeps controls\n * below the arena center while preserving thumb reach.\n * - 17% on tall portrait viewports, clamped to 128–200 px, lowers controls\n * toward the nav/home area without colliding with the bottom HUD or browser\n * safe area.\n */\nexport const MOBILE_CONTROLS_PLACEMENT = {\n SHORT_VIEWPORT_RATIO: 0.24,\n TALL_VIEWPORT_RATIO: 0.17,\n SHORT_MIN: 96,\n SHORT_MAX: 120,\n TALL_MIN: 128,\n /** 200 px upper bound intentionally matches LAYOUT_BOTTOM_POSITIONS.MOBILE_CONTROLS. */\n TALL_MAX: LAYOUT_BOTTOM_POSITIONS.MOBILE_CONTROLS,\n} as const;\n\n/**\n * Shared horizontal reservations for HUD side controls.\n *\n * These values keep centered technique cards readable while preserving space\n * for absolutely positioned controls such as the compact volume control and\n * mobile archetype selector.\n */\nexport const HUD_SIDE_CONTROL_RESERVES = {\n /** Compact volume control width (162px) plus interaction margin. */\n VOLUME_CONTROL: 180,\n\n /** Mobile archetype selector reserve in the training bottom HUD. */\n ARCHETYPE_SELECTOR: 180,\n\n /** Embedded mobile technique bar side reserve for compact controls. */\n TECHNIQUE_BAR_MOBILE: 96,\n\n /** Embedded desktop technique bar side reserve for side HUD controls. */\n TECHNIQUE_BAR_DESKTOP: 190,\n} as const;\n\n/**\n * Minimum visual scale before technique cards become unreadable.\n *\n * The 70% threshold preserves readable Korean/English labels and keyboard\n * hints on compact HUDs. Below this value, embedded bars switch to horizontal\n * scrolling instead of shrinking so touch targets and text remain usable.\n *\n * Used by TechniqueBar when calculating whether embedded cards should scale\n * down or remain full size with horizontal scroll.\n */\nexport const TECHNIQUE_BAR_MIN_READABLE_SCALE = 0.7;\n\n/**\n * Training top HUD height ratio.\n *\n * Must match the training context top offset used by useHUDLayout so the\n * top HUD and side HUDs align without overlap across responsive breakpoints.\n */\nexport const TRAINING_TOP_HUD_HEIGHT_PERCENT = 0.06;\n\n/**\n * Combat top HUD height ratio.\n *\n * Shared by CombatTopHUD, side HUD offsets, and arena layout reservations so\n * the 3D combat area starts immediately below the visible top bar.\n */\nexport const COMBAT_TOP_HUD_HEIGHT_PERCENT = 0.06;\n\n/**\n * Combat bottom HUD height ratio.\n *\n * Shared by CombatBottomHUD, side HUD offsets, and arena layout reservations so\n * technique controls fit without over-reserving vertical arena space.\n */\nexport const COMBAT_BOTTOM_HUD_HEIGHT_PERCENT = 0.1;\n\n/**\n * Training bottom HUD height ratio.\n *\n * Shared by TrainingBottomHUD, side HUD offsets, and training area layout\n * reservations so the dojang content is framed consistently.\n */\nexport const TRAINING_BOTTOM_HUD_HEIGHT_PERCENT = 0.11;\n\n/**\n * Top positioning for UI elements (in pixels)\n * Used for elements positioned from the top of the screen\n */\nexport const LAYOUT_TOP_POSITIONS = {\n /** Back to Menu button positioned at top-right */\n BACK_BUTTON: {\n MOBILE: 10, // 10px from top on mobile\n DESKTOP: 20, // 20px from top on desktop\n },\n \n /** Safe area offset for notched devices */\n SAFE_AREA_TOP: 44, // iPhone notch height\n} as const;\n\n/**\n * Helper function to get technique bar bottom position\n * NOTE: positionScale NOT applied to prevent layout bugs on 4K displays\n * \n * @param isMobile - Whether device is mobile (<768px)\n * @returns Bottom position in pixels\n */\nexport function getTechniqueBarBottom(isMobile: boolean): number {\n return isMobile \n ? LAYOUT_BOTTOM_POSITIONS.TECHNIQUE_BAR.MOBILE\n : LAYOUT_BOTTOM_POSITIONS.TECHNIQUE_BAR.DESKTOP;\n}\n\n/**\n * Get mobile controls bottom position.\n *\n * Returns a viewport-responsive band for comfortable D-Pad / ActionButton\n * reach without pushing controls into the arena center. Short landscape\n * viewports use a 96–120 px clamped band, while tall numeric viewports use a\n * 128–200 px clamped band.\n *\n * @param viewportHeight - Optional current viewport height in pixels.\n * When omitted or NaN, returns the 200 px default.\n * Numeric heights >= 500 use the tall viewport ratio\n * clamped to 128–200 px.\n * @returns Bottom position in pixels\n */\nexport function getMobileControlsBottom(viewportHeight?: number): number {\n if (typeof viewportHeight !== \"number\" || Number.isNaN(viewportHeight)) {\n return LAYOUT_BOTTOM_POSITIONS.MOBILE_CONTROLS;\n }\n\n if (viewportHeight < 500) {\n return Math.round(\n Math.max(\n MOBILE_CONTROLS_PLACEMENT.SHORT_MIN,\n Math.min(\n MOBILE_CONTROLS_PLACEMENT.SHORT_MAX,\n viewportHeight * MOBILE_CONTROLS_PLACEMENT.SHORT_VIEWPORT_RATIO,\n ),\n ),\n );\n }\n\n return Math.round(\n Math.max(\n MOBILE_CONTROLS_PLACEMENT.TALL_MIN,\n Math.min(\n MOBILE_CONTROLS_PLACEMENT.TALL_MAX,\n viewportHeight * MOBILE_CONTROLS_PLACEMENT.TALL_VIEWPORT_RATIO,\n ),\n ),\n );\n}\n\n/**\n * Get back button top position for top-right corner placement\n * Includes safe area offset for notched devices\n * \n * @param isMobile - Whether device is mobile (<768px)\n * @param hasSafeArea - Whether device has notch/safe area (default: false)\n * @returns Top position in pixels\n */\nexport function getBackButtonTop(isMobile: boolean, hasSafeArea = false): number {\n const baseTop = isMobile \n ? LAYOUT_TOP_POSITIONS.BACK_BUTTON.MOBILE\n : LAYOUT_TOP_POSITIONS.BACK_BUTTON.DESKTOP;\n \n return hasSafeArea \n ? baseTop + LAYOUT_TOP_POSITIONS.SAFE_AREA_TOP\n : baseTop;\n}\n\n/**\n * Get back button right position for top-right corner placement\n * \n * @param isMobile - Whether device is mobile (<768px)\n * @returns Right position in pixels\n */\nexport function getBackButtonRight(isMobile: boolean): number {\n return isMobile ? 10 : 20;\n}\n\n/**\n * Type for layout position values\n */\nexport type LayoutBottomPosition = number;\nexport type LayoutTopPosition = number;\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,IAAa,0BAA0B;;CAErC,iBAAiB;;CAGjB,eAAe;EACb,QAAQ;EACR,SAAS;CACX;;CAGA,sBAAsB;AACxB;;;;;;;;;AAUA,IAAa,4BAA4B;CACvC,sBAAsB;CACtB,qBAAqB;CACrB,WAAW;CACX,WAAW;CACX,UAAU;;CAEV,UAAU,wBAAwB;AACpC;;;;;;;;AASA,IAAa,4BAA4B;;CAEvC,gBAAgB;;CAGhB,oBAAoB;;CAGpB,sBAAsB;;CAGtB,uBAAuB;AACzB;;;;;;;;;;;AAYA,IAAa,mCAAmC;;;;;;;AAQhD,IAAa,kCAAkC;;;;;;;AAQ/C,IAAa,gCAAgC;;;;;;;AAQ7C,IAAa,mCAAmC;;;;;;;AAQhD,IAAa,qCAAqC;;;;;;;;;;;;;;;AA4ClD,SAAgB,wBAAwB,gBAAiC;CACvE,IAAI,OAAO,mBAAmB,YAAY,OAAO,MAAM,cAAc,GACnE,OAAO,wBAAwB;CAGjC,IAAI,iBAAiB,KACnB,OAAO,KAAK,MACV,KAAK,IACH,0BAA0B,WAC1B,KAAK,IACH,0BAA0B,WAC1B,iBAAiB,0BAA0B,oBAC7C,CACF,CACF;CAGF,OAAO,KAAK,MACV,KAAK,IACH,0BAA0B,UAC1B,KAAK,IACH,0BAA0B,UAC1B,iBAAiB,0BAA0B,mBAC7C,CACF,CACF;AACF"}
|