blacktrigram 0.7.43 → 0.7.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/audio/AudioManager.d.ts +26 -0
- package/lib/audio/AudioManager.d.ts.map +1 -1
- package/lib/audio/AudioManager.js +26 -0
- package/lib/audio/AudioManager.js.map +1 -1
- package/lib/audio/AudioPool.js +3 -0
- package/lib/audio/AudioPool.js.map +1 -1
- package/lib/audio/index.d.ts.map +1 -1
- package/lib/audio/index.js.map +1 -1
- package/lib/audio/types.d.ts +18 -2
- package/lib/audio/types.d.ts.map +1 -1
- package/lib/audio/types.js +1 -0
- package/lib/audio/types.js.map +1 -1
- package/lib/components/effects/WindParticles3D.d.ts.map +1 -1
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/index.js.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts +0 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js +0 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ArterialSpray3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BoneCrackParticles3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
- package/lib/components/screens/combat/components/effects/DustClouds3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/EarthCrackEffect3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/EarthHealingEffect3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/ImpactSparks3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/LiPrecisionTargetingOverlay.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/NerveStrikeParticles3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/WaterRipple3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/WaterWave3D.d.ts.map +1 -1
- package/lib/components/screens/combat/components/effects/index.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts +0 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js +0 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts +0 -2
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.d.ts.map +1 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js +0 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.d.ts.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAudio.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
- package/lib/components/screens/combat/hooks/useGrapplingAudio.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/usePreloadCombatAudio.d.ts.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.d.ts.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/Key3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/Key3D.js.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.d.ts.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.d.ts.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.d.ts.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/index.d.ts.map +1 -1
- package/lib/components/screens/endscreen/index.d.ts.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.d.ts.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
- package/lib/components/screens/intro/components/AbilityListOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.d.ts.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
- package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/InteractiveTrigramGridOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/PhilosophyNavigationOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/PhilosophySectionOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts +0 -1
- package/lib/components/screens/philosophy/components/PhilosophyTextOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts +0 -1
- package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts.map +1 -1
- package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts +0 -1
- package/lib/components/screens/philosophy/components/TrigramVisualization3D.d.ts.map +1 -1
- package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts +0 -1
- package/lib/components/screens/philosophy/hooks/usePhilosophyState.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
- package/lib/components/screens/training/components/DamageNumber3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingAICharacter3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingArena3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingHitEffects3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
- package/lib/components/screens/training/components/index.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
- package/lib/components/shared/base/AccessibilityProvider.d.ts.map +1 -1
- package/lib/components/shared/base/BaseButton.d.ts.map +1 -1
- package/lib/components/shared/base/BaseButton.js.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.d.ts.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
- package/lib/components/shared/base/BasePanel.d.ts.map +1 -1
- package/lib/components/shared/base/BasePanel.js.map +1 -1
- package/lib/components/shared/base/BaseText.d.ts.map +1 -1
- package/lib/components/shared/base/BaseText.js.map +1 -1
- package/lib/components/shared/base/ResponsiveContainer.d.ts.map +1 -1
- package/lib/components/shared/base/index.d.ts.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.d.ts.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.d.ts.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
- package/lib/components/shared/effects/ScreenFlash.d.ts.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.d.ts.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.js +0 -1
- package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.d.ts +0 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.d.ts.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js +0 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
- package/lib/components/shared/mobile/HapticController.d.ts +0 -13
- package/lib/components/shared/mobile/HapticController.d.ts.map +1 -1
- package/lib/components/shared/mobile/HapticController.js +0 -10
- package/lib/components/shared/mobile/HapticController.js.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.d.ts.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
- package/lib/components/shared/mobile/PerformanceMonitor.d.ts +0 -15
- package/lib/components/shared/mobile/PerformanceMonitor.d.ts.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.d.ts +0 -1
- package/lib/components/shared/mobile/StanceWheelPure.d.ts.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.js +0 -1
- package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.d.ts +0 -4
- package/lib/components/shared/mobile/TouchOptimizer.d.ts.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.js +0 -3
- package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.d.ts.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.js +0 -1
- package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
- package/lib/components/shared/mobile/index.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.d.ts +0 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.d.ts +0 -1
- package/lib/components/shared/three/anatomy/Foot3D.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.d.ts +0 -1
- package/lib/components/shared/three/anatomy/Hand3D.d.ts.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.d.ts.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.d.ts.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
- package/lib/components/shared/three/effects/ExplosiveBurstEffect3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/GrapplingIndicator3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
- package/lib/components/shared/three/effects/LimbExposureIndicator3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/NerveDisruptionEffect3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.d.ts.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.d.ts.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
- package/lib/components/shared/three/effects/ThunderEffect3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.d.ts.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
- package/lib/components/shared/three/index.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts +0 -6
- package/lib/components/shared/three/indicators/ElementalColorSystem.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.js +0 -4
- package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.d.ts +0 -1
- package/lib/components/shared/three/indicators/GuardIndicator.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js +0 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.d.ts +0 -7
- package/lib/components/shared/three/indicators/HapticFeedback.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.js +0 -2
- package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts +0 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.d.ts.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js +0 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts +0 -1
- package/lib/components/shared/three/indicators/TrigramSymbol3D.d.ts.map +1 -1
- package/lib/components/shared/three/models/Player3DWithTransitions.d.ts.map +1 -1
- package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.d.ts.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
- package/lib/components/shared/three/optimization/InstancedGeometry.d.ts.map +1 -1
- package/lib/components/shared/three/optimization/LODSystem.d.ts.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
- package/lib/components/shared/three/scene/DebugCollision.d.ts +0 -2
- package/lib/components/shared/three/scene/DebugCollision.d.ts.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.d.ts.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.d.ts.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.d.ts.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator.d.ts.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.d.ts.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.d.ts.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.d.ts.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.d.ts.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
- package/lib/components/shared/three/ui/MenuList.d.ts.map +1 -1
- package/lib/components/shared/three/ui/MenuList.js.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.d.ts.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts +0 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.d.ts.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js +0 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBarContainer.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.d.ts.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
- package/lib/components/shared/three/ui/VulnerabilityWindowHUD.d.ts.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.d.ts.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
- package/lib/components/shared/ui/CombatTimer.d.ts.map +1 -1
- package/lib/components/shared/ui/CombatTimer.js.map +1 -1
- package/lib/components/shared/ui/ErrorBoundary.d.ts.map +1 -1
- package/lib/components/shared/ui/ErrorModal.d.ts.map +1 -1
- package/lib/components/shared/ui/ErrorModal.js.map +1 -1
- package/lib/components/shared/ui/HUDSection.d.ts.map +1 -1
- package/lib/components/shared/ui/LoadingState.d.ts.map +1 -1
- package/lib/components/shared/ui/LoadingState.js.map +1 -1
- package/lib/components/shared/ui/MobileHUDLayout.d.ts +0 -1
- package/lib/components/shared/ui/MobileHUDLayout.d.ts.map +1 -1
- package/lib/components/shared/ui/ResponsiveContainer.d.ts +0 -1
- package/lib/components/shared/ui/ResponsiveContainer.d.ts.map +1 -1
- package/lib/components/shared/ui/SplashScreen.d.ts.map +1 -1
- package/lib/components/shared/ui/SplashScreen.js +2 -2
- package/lib/components/shared/ui/SplashScreen.js.map +1 -1
- package/lib/components/shared/ui/StyledHUDPanel.d.ts.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.d.ts.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
- package/lib/components/shared/ui/VolumeControl.d.ts.map +1 -1
- package/lib/components/shared/ui/VolumeControl.js.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.d.ts.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
- package/lib/components/test/Hello3D.d.ts.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.d.ts.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
- package/lib/components/ui/combat/ComboCounter.d.ts.map +1 -1
- package/lib/components/ui/combat/PressureMeter.d.ts.map +1 -1
- package/lib/systems/CombatSystem.d.ts +0 -6
- package/lib/systems/CombatSystem.d.ts.map +1 -1
- package/lib/systems/CombatSystem.js +0 -6
- package/lib/systems/CombatSystem.js.map +1 -1
- package/lib/systems/EffectCalculator.d.ts +0 -7
- package/lib/systems/EffectCalculator.d.ts.map +1 -1
- package/lib/systems/EffectCalculator.js +0 -4
- package/lib/systems/EffectCalculator.js.map +1 -1
- package/lib/systems/LayoutSystem.d.ts +0 -1
- package/lib/systems/LayoutSystem.d.ts.map +1 -1
- package/lib/systems/LayoutSystem.js +0 -1
- package/lib/systems/LayoutSystem.js.map +1 -1
- package/lib/systems/PlayerEffectManager.d.ts +0 -10
- package/lib/systems/PlayerEffectManager.d.ts.map +1 -1
- package/lib/systems/PlayerEffectManager.js +0 -3
- package/lib/systems/PlayerEffectManager.js.map +1 -1
- package/lib/systems/ResponsiveScaling.d.ts +0 -12
- package/lib/systems/ResponsiveScaling.d.ts.map +1 -1
- package/lib/systems/ResponsiveScaling.js +0 -12
- package/lib/systems/ResponsiveScaling.js.map +1 -1
- package/lib/systems/TrigramSystem.d.ts +0 -13
- package/lib/systems/TrigramSystem.d.ts.map +1 -1
- package/lib/systems/TrigramSystem.js +0 -13
- package/lib/systems/TrigramSystem.js.map +1 -1
- package/lib/systems/VitalPointSystem.d.ts +0 -10
- package/lib/systems/VitalPointSystem.d.ts.map +1 -1
- package/lib/systems/VitalPointSystem.js +0 -10
- package/lib/systems/VitalPointSystem.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.d.ts +0 -4
- package/lib/systems/animation/builders/KeyframeInterpolation.d.ts.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js +0 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.d.ts +0 -4
- package/lib/systems/animation/builders/SkeletonRig.d.ts.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.js +0 -3
- package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts +0 -5
- package/lib/systems/animation/catalogs/RecoveryAnimations.d.ts.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.js +0 -5
- package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.d.ts +0 -6
- package/lib/systems/animation/core/AnimationHitTiming.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.js +0 -4
- package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
- package/lib/systems/animation/core/AnimationStateMachine.js +1 -0
- package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.d.ts +0 -3
- package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.d.ts +0 -3
- package/lib/systems/animation/core/LateralityTransform.d.ts.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.js +0 -1
- package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts +0 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.d.ts.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts +0 -10
- package/lib/systems/animation/core/TechniqueAnimationMapper.d.ts.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.js +0 -8
- package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
- package/lib/systems/animation/core/TrigramAnimationMapping.d.ts +0 -10
- package/lib/systems/animation/core/TrigramAnimationMapping.d.ts.map +1 -1
- package/lib/systems/animation/core/TrigramStanceTransitions.d.ts +0 -2
- package/lib/systems/animation/core/TrigramStanceTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/types.d.ts +0 -39
- package/lib/systems/animation/core/types.d.ts.map +1 -1
- package/lib/systems/animation/core/types.js +0 -9
- package/lib/systems/animation/core/types.js.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.d.ts +0 -27
- package/lib/systems/animation/systems/AdvancedJointMovements.d.ts.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js +0 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.d.ts +0 -19
- package/lib/systems/animation/systems/BodyFacingSystem.d.ts.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.js +0 -14
- package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.d.ts +0 -10
- package/lib/systems/animation/systems/FacialExpressions.d.ts.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.js +0 -2
- package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.d.ts +0 -4
- package/lib/systems/animation/systems/FallAnimations.d.ts.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.js +0 -2
- package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
- package/lib/systems/animation/systems/HeadMovements.d.ts +0 -10
- package/lib/systems/animation/systems/HeadMovements.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts +0 -7
- package/lib/systems/bodypart/BodyPartDamageIntegration.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.js +0 -7
- package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.d.ts +0 -13
- package/lib/systems/bodypart/BodyPartHealthSystem.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.js +0 -13
- package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.d.ts +0 -6
- package/lib/systems/bodypart/BodyPartPositionMapping.d.ts.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.js +0 -6
- package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.d.ts +0 -10
- package/lib/systems/bodypart/CombatInjuryIntegration.d.ts.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.js +0 -8
- package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.d.ts +0 -2
- package/lib/systems/bodypart/InjuryIntegration.d.ts.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.js +0 -2
- package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.d.ts +0 -14
- package/lib/systems/bodypart/InjuryTracker.d.ts.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.js +0 -12
- package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.d.ts +0 -8
- package/lib/systems/bodypart/MovementPenaltySystem.d.ts.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.js +0 -8
- package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts +0 -8
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.d.ts.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js +0 -8
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
- package/lib/systems/bodypart/types.d.ts +0 -13
- package/lib/systems/bodypart/types.d.ts.map +1 -1
- package/lib/systems/bodypart/types.js +0 -5
- package/lib/systems/bodypart/types.js.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.d.ts +0 -3
- package/lib/systems/breathing/BreathingDisruptionSystem.d.ts.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.js +0 -2
- package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
- package/lib/systems/combat/BalanceSystem.d.ts +0 -25
- package/lib/systems/combat/BalanceSystem.d.ts.map +1 -1
- package/lib/systems/combat/BalanceSystem.js +0 -25
- package/lib/systems/combat/BalanceSystem.js.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.d.ts +0 -4
- package/lib/systems/combat/BreakingStatusEffects.d.ts.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.js +0 -3
- package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
- package/lib/systems/combat/CombatStateSystem.d.ts +0 -9
- package/lib/systems/combat/CombatStateSystem.d.ts.map +1 -1
- package/lib/systems/combat/CombatStateSystem.js +0 -9
- package/lib/systems/combat/CombatStateSystem.js.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.d.ts +0 -16
- package/lib/systems/combat/ConsciousnessSystem.d.ts.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.js +0 -16
- package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
- package/lib/systems/combat/FallIntegration.d.ts +0 -3
- package/lib/systems/combat/FallIntegration.d.ts.map +1 -1
- package/lib/systems/combat/FallIntegration.js +0 -3
- package/lib/systems/combat/FallIntegration.js.map +1 -1
- package/lib/systems/combat/GrappleSystem.d.ts +0 -2
- package/lib/systems/combat/GrappleSystem.d.ts.map +1 -1
- package/lib/systems/combat/GrappleSystem.js +0 -2
- package/lib/systems/combat/GrappleSystem.js.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.d.ts +0 -7
- package/lib/systems/combat/LimbExposureSystem.d.ts.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.js +0 -7
- package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
- package/lib/systems/combat/PainResponseSystem.d.ts +0 -11
- package/lib/systems/combat/PainResponseSystem.d.ts.map +1 -1
- package/lib/systems/combat/PainResponseSystem.js +0 -11
- package/lib/systems/combat/PainResponseSystem.js.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.d.ts +0 -7
- package/lib/systems/combat/painConsciousnessUtils.d.ts.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.js +0 -7
- package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
- package/lib/systems/effects.d.ts +11 -0
- package/lib/systems/effects.d.ts.map +1 -1
- package/lib/systems/effects.js +10 -0
- package/lib/systems/effects.js.map +1 -1
- package/lib/systems/game.d.ts +16 -0
- package/lib/systems/game.d.ts.map +1 -1
- package/lib/systems/game.js +1 -0
- package/lib/systems/game.js.map +1 -1
- package/lib/systems/index.d.ts +5 -1
- package/lib/systems/index.d.ts.map +1 -1
- package/lib/systems/index.js.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.d.ts +0 -10
- package/lib/systems/movement/InjuryMovementModifier.d.ts.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.js +0 -7
- package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
- package/lib/systems/movement/integration.d.ts +0 -3
- package/lib/systems/movement/integration.d.ts.map +1 -1
- package/lib/systems/movement/integration.js +0 -3
- package/lib/systems/movement/integration.js.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.d.ts +0 -9
- package/lib/systems/physics/AttackMovementPhysics.d.ts.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.js +0 -7
- package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
- package/lib/systems/physics/CollisionDetection.d.ts +0 -6
- package/lib/systems/physics/CollisionDetection.d.ts.map +1 -1
- package/lib/systems/physics/CollisionDetection.js +0 -6
- package/lib/systems/physics/CollisionDetection.js.map +1 -1
- package/lib/systems/physics/CoordinateMapper.d.ts +0 -1
- package/lib/systems/physics/CoordinateMapper.d.ts.map +1 -1
- package/lib/systems/physics/CoordinateMapper.js +0 -1
- package/lib/systems/physics/CoordinateMapper.js.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.d.ts +0 -11
- package/lib/systems/physics/KnockbackPhysics.d.ts.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.js +0 -8
- package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
- package/lib/systems/physics/MovementPhysics.d.ts +0 -10
- package/lib/systems/physics/MovementPhysics.d.ts.map +1 -1
- package/lib/systems/physics/MovementPhysics.js +0 -8
- package/lib/systems/physics/MovementPhysics.js.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.d.ts +0 -6
- package/lib/systems/physics/PhysicalReachCalculator.d.ts.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.js +0 -5
- package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.d.ts +0 -5
- package/lib/systems/physics/SpeedModifierSystem.d.ts.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.js +0 -4
- package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
- package/lib/systems/player.d.ts +0 -5
- package/lib/systems/player.d.ts.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.d.ts +0 -1
- package/lib/systems/trigram/TrigramCalculator.d.ts.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.js +0 -1
- package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
- package/lib/systems/trigram/types.d.ts +0 -4
- package/lib/systems/trigram/types.d.ts.map +1 -1
- package/lib/systems/trigram/types.js +0 -2
- package/lib/systems/trigram/types.js.map +1 -1
- package/lib/systems/types.d.ts +7 -2
- package/lib/systems/types.d.ts.map +1 -1
- package/lib/systems/types.js.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.d.ts +0 -3
- package/lib/systems/vitalpoint/DamageCalculator.d.ts.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.js +0 -3
- package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts +0 -8
- package/lib/systems/vitalpoint/KoreanVitalPoints.d.ts.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.js +0 -8
- package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.d.ts +0 -3
- package/lib/systems/vitalpoint/VitalPointsData.d.ts.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.js +0 -1
- package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
- package/lib/types/PhysicsTypes.d.ts +21 -78
- package/lib/types/PhysicsTypes.d.ts.map +1 -1
- package/lib/types/PhysicsTypes.js +17 -63
- package/lib/types/PhysicsTypes.js.map +1 -1
- package/lib/types/clothing.d.ts +0 -9
- package/lib/types/clothing.d.ts.map +1 -1
- package/lib/types/constants/animations.d.ts +35 -1
- package/lib/types/constants/animations.d.ts.map +1 -1
- package/lib/types/constants/animations.js +12 -1
- package/lib/types/constants/animations.js.map +1 -1
- package/lib/types/constants/colors.d.ts +28 -2
- package/lib/types/constants/colors.d.ts.map +1 -1
- package/lib/types/constants/colors.js +30 -4
- package/lib/types/constants/colors.js.map +1 -1
- package/lib/types/constants/index.d.ts +5 -1
- package/lib/types/constants/index.d.ts.map +1 -1
- package/lib/types/constants/index.js.map +1 -1
- package/lib/types/constants/performance.d.ts +0 -2
- package/lib/types/constants/performance.d.ts.map +1 -1
- package/lib/types/constants/performance.js +0 -2
- package/lib/types/constants/performance.js.map +1 -1
- package/lib/types/constants/typography.d.ts +40 -2
- package/lib/types/constants/typography.d.ts.map +1 -1
- package/lib/types/constants/typography.js +40 -2
- package/lib/types/constants/typography.js.map +1 -1
- package/lib/types/constants/ui.d.ts +89 -1
- package/lib/types/constants/ui.d.ts.map +1 -1
- package/lib/types/constants/ui.js +33 -1
- package/lib/types/constants/ui.js.map +1 -1
- package/lib/types/facial.d.ts +0 -15
- package/lib/types/facial.d.ts.map +1 -1
- package/lib/types/facial.js +0 -8
- package/lib/types/facial.js.map +1 -1
- package/lib/types/hand-animation.d.ts +34 -147
- package/lib/types/hand-animation.d.ts.map +1 -1
- package/lib/types/hand-animation.js +0 -2
- package/lib/types/hand-animation.js.map +1 -1
- package/lib/types/injury.d.ts +0 -2
- package/lib/types/injury.d.ts.map +1 -1
- package/lib/types/injury.js +0 -1
- package/lib/types/injury.js.map +1 -1
- package/lib/types/physics.d.ts +0 -21
- package/lib/types/physics.d.ts.map +1 -1
- package/lib/types/physics.js +0 -6
- package/lib/types/physics.js.map +1 -1
- package/lib/types/physicsConstants.d.ts +0 -12
- package/lib/types/physicsConstants.d.ts.map +1 -1
- package/lib/types/physicsConstants.js +0 -12
- package/lib/types/physicsConstants.js.map +1 -1
- package/lib/types/player-visual.d.ts +45 -189
- package/lib/types/player-visual.d.ts.map +1 -1
- package/lib/types/technique.d.ts +1 -5
- package/lib/types/technique.d.ts.map +1 -1
- package/lib/types/techniqueId.d.ts +0 -1
- package/lib/types/techniqueId.d.ts.map +1 -1
- package/lib/types/techniqueId.js +0 -1
- package/lib/types/techniqueId.js.map +1 -1
- package/lib/utils/arenaWorldDimensions.d.ts +0 -11
- package/lib/utils/arenaWorldDimensions.d.ts.map +1 -1
- package/lib/utils/arenaWorldDimensions.js +0 -6
- package/lib/utils/arenaWorldDimensions.js.map +1 -1
- package/lib/utils/controlMapping.d.ts +3 -4
- package/lib/utils/controlMapping.d.ts.map +1 -1
- package/lib/utils/controlMapping.js +1 -2
- package/lib/utils/controlMapping.js.map +1 -1
- package/lib/utils/deviceDetection.d.ts +0 -5
- package/lib/utils/deviceDetection.d.ts.map +1 -1
- package/lib/utils/deviceDetection.js +0 -5
- package/lib/utils/deviceDetection.js.map +1 -1
- package/lib/utils/hapticFeedback.d.ts +23 -95
- package/lib/utils/hapticFeedback.d.ts.map +1 -1
- package/lib/utils/hapticFeedback.js +9 -39
- package/lib/utils/hapticFeedback.js.map +1 -1
- package/lib/utils/haptics.d.ts +0 -3
- package/lib/utils/haptics.d.ts.map +1 -1
- package/lib/utils/haptics.js +0 -1
- package/lib/utils/haptics.js.map +1 -1
- package/lib/utils/math.d.ts +0 -3
- package/lib/utils/math.d.ts.map +1 -1
- package/lib/utils/math.js +0 -2
- package/lib/utils/math.js.map +1 -1
- package/lib/utils/mobileLayoutHelpers.d.ts +0 -3
- package/lib/utils/mobileLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/mobileLayoutHelpers.js +0 -1
- package/lib/utils/mobileLayoutHelpers.js.map +1 -1
- package/lib/utils/mobileUIUtils.d.ts +5 -100
- package/lib/utils/mobileUIUtils.d.ts.map +1 -1
- package/lib/utils/mobileUIUtils.js +0 -9
- package/lib/utils/mobileUIUtils.js.map +1 -1
- package/lib/utils/physicalAttributeValidation.d.ts.map +1 -1
- package/lib/utils/player3DHelpers.d.ts.map +1 -1
- package/lib/utils/player3DHelpers.js.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.d.ts +0 -65
- package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.js +0 -65
- package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
- package/lib/utils/responsiveOrientationConstants.d.ts +0 -7
- package/lib/utils/responsiveOrientationConstants.d.ts.map +1 -1
- package/lib/utils/responsiveOrientationConstants.js +0 -7
- package/lib/utils/responsiveOrientationConstants.js.map +1 -1
- package/lib/utils/safeAreaUtils.d.ts +0 -6
- package/lib/utils/safeAreaUtils.d.ts.map +1 -1
- package/lib/utils/safeAreaUtils.js +0 -2
- package/lib/utils/safeAreaUtils.js.map +1 -1
- package/lib/utils/sharedPhysicsConfig.d.ts +0 -4
- package/lib/utils/sharedPhysicsConfig.d.ts.map +1 -1
- package/lib/utils/sharedPhysicsConfig.js +0 -2
- package/lib/utils/sharedPhysicsConfig.js.map +1 -1
- package/lib/utils/skeletonScaling.d.ts +0 -9
- package/lib/utils/skeletonScaling.d.ts.map +1 -1
- package/lib/utils/skeletonScaling.js +0 -1
- package/lib/utils/skeletonScaling.js.map +1 -1
- package/package.json +11 -11
|
@@ -2,6 +2,24 @@ import { LoadOptions } from "./AudioAssetLoader";
|
|
|
2
2
|
import { AudioFPSImpact, AudioMemoryStats, AudioPerformanceStats, MemoryWarning } from "./AudioMonitor";
|
|
3
3
|
import { PoolStatistics } from "./AudioPool";
|
|
4
4
|
import { AudioAsset, AudioConfig, IAudioManager, MusicTrackId, SoundEffectId } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* Manages audio playback for the Black Trigram combat game.
|
|
7
|
+
*
|
|
8
|
+
* Handles music tracks, sound effects, and Korean martial arts audio
|
|
9
|
+
* including technique sounds, trigram stance audio, and vital point hit
|
|
10
|
+
* feedback. Uses an LRU asset cache, pooled `HTMLAudioElement` instances,
|
|
11
|
+
* and an `AudioMonitor` for performance tracking.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const audio = new AudioManager({ masterVolume: 0.8 });
|
|
16
|
+
* await audio.initialize();
|
|
17
|
+
* await audio.playMusic("dojang_theme");
|
|
18
|
+
* await audio.playSFX("hit_medium");
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @korean 오디오관리자
|
|
22
|
+
*/
|
|
5
23
|
export declare class AudioManager implements IAudioManager {
|
|
6
24
|
private _masterVolume;
|
|
7
25
|
private _musicVolume;
|
|
@@ -12,6 +30,7 @@ export declare class AudioManager implements IAudioManager {
|
|
|
12
30
|
private currentMusic;
|
|
13
31
|
private soundCache;
|
|
14
32
|
private _isInitialized;
|
|
33
|
+
/** Music assets currently being loaded — prevents race conditions on concurrent playMusic calls */
|
|
15
34
|
private loadingMusic;
|
|
16
35
|
private assetLoader;
|
|
17
36
|
private audioPool;
|
|
@@ -25,6 +44,7 @@ export declare class AudioManager implements IAudioManager {
|
|
|
25
44
|
* @param audio - Audio element to release
|
|
26
45
|
*/
|
|
27
46
|
private releasePooledAudio;
|
|
47
|
+
/** @returns Whether the audio system has been initialized */
|
|
28
48
|
get isInitialized(): boolean;
|
|
29
49
|
get fallbackMode(): boolean;
|
|
30
50
|
get currentMusicTrack(): string | null;
|
|
@@ -42,6 +62,11 @@ export declare class AudioManager implements IAudioManager {
|
|
|
42
62
|
*/
|
|
43
63
|
private estimateAudioSize;
|
|
44
64
|
playSoundEffect(id: SoundEffectId): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Alias for {@link playSoundEffect} — preferred for explicit volume control.
|
|
67
|
+
* @param id - Sound effect identifier
|
|
68
|
+
* @param volume - Override volume (defaults to sfxVolume × masterVolume)
|
|
69
|
+
*/
|
|
45
70
|
playSFX(id: SoundEffectId, volume?: number): Promise<void>;
|
|
46
71
|
playMusic(id: MusicTrackId, volume?: number): Promise<void>;
|
|
47
72
|
/**
|
|
@@ -59,6 +84,7 @@ export declare class AudioManager implements IAudioManager {
|
|
|
59
84
|
fadeOut(duration?: number): Promise<void>;
|
|
60
85
|
fadeIn(trackId: MusicTrackId, duration?: number): Promise<void>;
|
|
61
86
|
crossfade(fromTrackId: MusicTrackId, toTrackId: MusicTrackId, duration?: number): Promise<void>;
|
|
87
|
+
/** @returns A snapshot of all currently loaded sound elements */
|
|
62
88
|
getLoadedAssets(): ReadonlyMap<string, HTMLAudioElement>;
|
|
63
89
|
playVoice(id: string): Promise<void>;
|
|
64
90
|
playKoreanTechniqueSound(techniqueId: string, archetype: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../src/audio/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EACL,cAAc,EACd,gBAAgB,EAEhB,qBAAqB,EACrB,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAoB,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACd,MAAM,SAAS,CAAC;AA2BjB,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,cAAc,CAAkB;
|
|
1
|
+
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../src/audio/AudioManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,24 @@ var CRITICAL_AUDIO_ASSETS = [
|
|
|
23
23
|
"attack_light",
|
|
24
24
|
"stance_change"
|
|
25
25
|
];
|
|
26
|
+
/**
|
|
27
|
+
* Manages audio playback for the Black Trigram combat game.
|
|
28
|
+
*
|
|
29
|
+
* Handles music tracks, sound effects, and Korean martial arts audio
|
|
30
|
+
* including technique sounds, trigram stance audio, and vital point hit
|
|
31
|
+
* feedback. Uses an LRU asset cache, pooled `HTMLAudioElement` instances,
|
|
32
|
+
* and an `AudioMonitor` for performance tracking.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const audio = new AudioManager({ masterVolume: 0.8 });
|
|
37
|
+
* await audio.initialize();
|
|
38
|
+
* await audio.playMusic("dojang_theme");
|
|
39
|
+
* await audio.playSFX("hit_medium");
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @korean 오디오관리자
|
|
43
|
+
*/
|
|
26
44
|
var AudioManager = class {
|
|
27
45
|
_masterVolume = 1;
|
|
28
46
|
_musicVolume = .7;
|
|
@@ -33,6 +51,7 @@ var AudioManager = class {
|
|
|
33
51
|
currentMusic = null;
|
|
34
52
|
soundCache = /* @__PURE__ */ new Map();
|
|
35
53
|
_isInitialized = false;
|
|
54
|
+
/** Music assets currently being loaded — prevents race conditions on concurrent playMusic calls */
|
|
36
55
|
loadingMusic = /* @__PURE__ */ new Set();
|
|
37
56
|
assetLoader;
|
|
38
57
|
audioPool;
|
|
@@ -70,6 +89,7 @@ var AudioManager = class {
|
|
|
70
89
|
}, { once: true });
|
|
71
90
|
else this.audioPool.release(id, audio);
|
|
72
91
|
}
|
|
92
|
+
/** @returns Whether the audio system has been initialized */
|
|
73
93
|
get isInitialized() {
|
|
74
94
|
return this._isInitialized;
|
|
75
95
|
}
|
|
@@ -189,6 +209,11 @@ var AudioManager = class {
|
|
|
189
209
|
console.warn(`Failed to play sound effect ${id}:`, error);
|
|
190
210
|
}
|
|
191
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Alias for {@link playSoundEffect} — preferred for explicit volume control.
|
|
214
|
+
* @param id - Sound effect identifier
|
|
215
|
+
* @param volume - Override volume (defaults to sfxVolume × masterVolume)
|
|
216
|
+
*/
|
|
192
217
|
async playSFX(id, volume) {
|
|
193
218
|
if (this._muted) return;
|
|
194
219
|
const playbackStart = performance.now();
|
|
@@ -349,6 +374,7 @@ var AudioManager = class {
|
|
|
349
374
|
await this.fadeIn(toTrackId, duration);
|
|
350
375
|
console.log(`Crossfaded from ${fromTrackId} to ${toTrackId}`);
|
|
351
376
|
}
|
|
377
|
+
/** @returns A snapshot of all currently loaded sound elements */
|
|
352
378
|
getLoadedAssets() {
|
|
353
379
|
return new Map(this.soundCache);
|
|
354
380
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioManager.js","names":[],"sources":["../../src/audio/AudioManager.ts"],"sourcesContent":["import { AudioAssetLoader, LoadOptions } from \"./AudioAssetLoader\";\nimport { AudioCache, AudioCacheConfig } from \"./AudioCache\";\nimport {\n AudioFPSImpact,\n AudioMemoryStats,\n AudioMonitor,\n AudioPerformanceStats,\n MemoryWarning,\n} from \"./AudioMonitor\";\nimport { AudioElementPool, PoolStatistics } from \"./AudioPool\";\nimport {\n AudioAsset,\n AudioConfig,\n IAudioManager,\n MusicTrackId,\n SoundEffectId,\n} from \"./types\";\n\n// Estimated average size per audio asset in MB (based on typical compressed audio file sizes)\nconst ESTIMATED_ASSET_SIZE_MB = 0.5;\n\n/**\n * Critical assets that should never be evicted from cache\n * 캐시에서 절대 제거되지 않아야 하는 중요한 자산\n */\nconst CRITICAL_AUDIO_ASSETS = [\n // Menu sounds - instant playback required\n \"menu_hover\",\n \"menu_select\",\n \"menu_click\",\n \"menu_navigate\",\n \"menu_back\",\n // Common combat sounds - instant playback required\n \"hit_impact\",\n \"hit_light\",\n \"hit_medium\",\n \"hit_heavy\",\n \"guard_block\",\n \"attack_whoosh\",\n \"attack_light\",\n \"stance_change\",\n] as const;\n\nexport class AudioManager implements IAudioManager {\n private _masterVolume: number = 1.0;\n private _musicVolume: number = 0.7;\n private _sfxVolume: number = 0.8;\n private _muted: boolean = false;\n private _currentMusicTrack: string | null = null;\n private _fallbackMode: boolean = false;\n private currentMusic: HTMLAudioElement | null = null;\n private soundCache: Map<string, HTMLAudioElement> = new Map();\n private _isInitialized: boolean = false;\n\n // Track music assets currently being loaded to prevent race conditions\n // 레이스 컨디션 방지를 위해 현재 로드 중인 음악 자산 추적\n private loadingMusic: Set<string> = new Set();\n\n // New optimized components\n private assetLoader: AudioAssetLoader;\n private audioPool: AudioElementPool;\n private monitor: AudioMonitor;\n private audioCache: AudioCache;\n private frequentSounds: Set<string> = new Set([\n \"hit_light\",\n \"attack_light\",\n \"stance_change\",\n ]);\n\n constructor(config?: Partial<AudioConfig>) {\n if (config) {\n this._masterVolume = config.masterVolume ?? 1.0;\n this._musicVolume = config.musicVolume ?? 0.7;\n this._sfxVolume = config.sfxVolume ?? 0.8;\n }\n\n // Initialize new components\n this.assetLoader = new AudioAssetLoader();\n this.audioPool = new AudioElementPool();\n this.monitor = new AudioMonitor();\n\n // Initialize AudioCache with 30MB limit and critical assets\n // 30MB 제한 및 중요 자산으로 AudioCache 초기화\n const cacheConfig: AudioCacheConfig = {\n maxSizeBytes: 30 * 1024 * 1024, // 30MB default\n criticalAssets: [...CRITICAL_AUDIO_ASSETS],\n debug: typeof process !== \"undefined\" && process?.env?.NODE_ENV === \"development\",\n };\n this.audioCache = new AudioCache(cacheConfig);\n }\n\n /**\n * Helper method to release pooled audio back to the pool after playback\n * @param id - Asset ID\n * @param audio - Audio element to release\n */\n private releasePooledAudio(id: string, audio: HTMLAudioElement): void {\n if (!audio.paused) {\n audio.addEventListener(\n \"ended\",\n () => {\n this.audioPool.release(id, audio);\n },\n { once: true }\n );\n } else {\n this.audioPool.release(id, audio);\n }\n }\n\n // Interface getters\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n get fallbackMode(): boolean {\n return this._fallbackMode;\n }\n\n get currentMusicTrack(): string | null {\n return this._currentMusicTrack;\n }\n\n get masterVolume(): number {\n return this._masterVolume;\n }\n\n get sfxVolume(): number {\n return this._sfxVolume;\n }\n\n get musicVolume(): number {\n return this._musicVolume;\n }\n\n get muted(): boolean {\n return this._muted;\n }\n\n async initialize(config?: AudioConfig): Promise<void> {\n try {\n // Create AudioContext using globalThis for cross-platform compatibility\n const AudioContextClass =\n globalThis.AudioContext ||\n (globalThis as unknown as { webkitAudioContext: typeof AudioContext })\n .webkitAudioContext;\n new AudioContextClass();\n this._isInitialized = true;\n this._fallbackMode = false;\n\n if (config) {\n this._masterVolume = config.masterVolume ?? this._masterVolume;\n this._musicVolume = config.musicVolume ?? this._musicVolume;\n this._sfxVolume = config.sfxVolume ?? this._sfxVolume;\n }\n\n // Set memory threshold if configured\n if (config?.maxSimultaneousSounds) {\n const estimatedMemoryMB =\n config.maxSimultaneousSounds * ESTIMATED_ASSET_SIZE_MB;\n this.monitor.setMemoryThreshold(estimatedMemoryMB);\n }\n } catch (error) {\n console.warn(\n \"AudioContext initialization failed, using fallback mode:\",\n error\n );\n this._isInitialized = true;\n this._fallbackMode = true;\n }\n }\n\n async loadAsset(asset: AudioAsset, options?: LoadOptions): Promise<void> {\n const startTime = performance.now();\n\n try {\n // Check cache first - instant playback for cached assets\n // 캐시 먼저 확인 - 캐시된 자산의 즉시 재생\n const cachedAsset = this.audioCache.get(asset.id);\n if (cachedAsset) {\n // Asset already loaded in cache, use it\n const cached = this.soundCache.get(asset.id);\n if (cached) {\n return; // Already loaded and cached\n }\n }\n\n // Use faster timeouts for testing environment\n // Safely check for Node.js environment to avoid runtime errors in browsers\n const isTest =\n typeof process !== \"undefined\" && process?.env?.NODE_ENV === \"test\";\n const loadOptions: LoadOptions = {\n timeout: isTest ? 100 : 10000,\n maxRetries: isTest ? 1 : 3,\n retryDelay: isTest ? 10 : 1000,\n ...options,\n };\n\n // Use AudioAssetLoader with retry and fallback\n const result = await this.assetLoader.loadAsset(asset, loadOptions);\n\n if (result.success && result.audio) {\n result.audio.volume = asset.volume ?? 1.0;\n this.soundCache.set(asset.id, result.audio);\n\n // Estimate size for cache management\n // 캐시 관리를 위한 크기 추정\n const estimatedSize = this.estimateAudioSize(asset);\n\n // Add to LRU cache with size tracking\n // 크기 추적과 함께 LRU 캐시에 추가\n this.audioCache.set(asset.id, asset, estimatedSize);\n\n // Track performance and memory\n const loadTime = performance.now() - startTime;\n this.monitor.recordLoad(asset.id, loadTime, estimatedSize / (1024 * 1024));\n\n // Create pool for frequently used sounds\n if (this.frequentSounds.has(asset.id)) {\n this.audioPool.createPool(asset.id, asset.url, {\n initialSize: 3,\n maxSize: 10,\n autoExpand: true,\n });\n }\n } else {\n // Record failure\n const error = result.error ?? new Error(\"Unknown load error\");\n this.monitor.recordLoadFailure(asset.id, error);\n\n // Still cache the placeholder audio if available\n if (result.audio) {\n this.soundCache.set(asset.id, result.audio);\n\n // Add to cache even if failed (placeholder)\n const estimatedSize = this.estimateAudioSize(asset);\n this.audioCache.set(asset.id, asset, estimatedSize);\n }\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n console.warn(`Failed to load audio asset ${asset.id}:`, err);\n this.monitor.recordLoadFailure(asset.id, err);\n }\n }\n\n /**\n * Estimate audio asset size in bytes\n * 바이트 단위의 오디오 자산 크기 추정\n *\n * @returns Estimated size in bytes\n */\n private estimateAudioSize(_asset: AudioAsset): number {\n // Use ESTIMATED_ASSET_SIZE_MB constant for consistent estimation\n // Conservative estimate: ~0.5MB per audio file (compressed MP3/WebM)\n return ESTIMATED_ASSET_SIZE_MB * 1024 * 1024;\n }\n\n async playSoundEffect(id: SoundEffectId): Promise<void> {\n if (this._muted) return;\n\n const playbackStart = performance.now();\n\n try {\n // Update cache access time for LRU tracking\n // LRU 추적을 위한 캐시 액세스 시간 업데이트\n this.audioCache.get(id);\n\n // Use pool for frequently played sounds\n if (this.frequentSounds.has(id) && this.audioPool.hasPool(id)) {\n const audio = this.audioPool.acquire(id);\n if (audio) {\n audio.volume = this._sfxVolume * this._masterVolume;\n await audio.play();\n\n // Release back to pool after playback (non-blocking)\n this.releasePooledAudio(id, audio);\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n return;\n }\n }\n\n // Fallback to cached audio\n const audio = this.soundCache.get(id);\n if (audio) {\n audio.currentTime = 0;\n audio.volume = this._sfxVolume * this._masterVolume;\n await audio.play();\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n }\n } catch (error) {\n console.warn(`Failed to play sound effect ${id}:`, error);\n }\n }\n\n // Alias for playSoundEffect to match interface\n async playSFX(id: SoundEffectId, volume?: number): Promise<void> {\n if (this._muted) return;\n\n const playbackStart = performance.now();\n\n try {\n // Update cache access time for LRU tracking\n // LRU 추적을 위한 캐시 액세스 시간 업데이트\n this.audioCache.get(id);\n\n // Use pool for frequently played sounds\n if (this.frequentSounds.has(id) && this.audioPool.hasPool(id)) {\n const audio = this.audioPool.acquire(id);\n if (audio) {\n audio.volume = (volume ?? this._sfxVolume) * this._masterVolume;\n await audio.play();\n\n // Release back to pool after playback (non-blocking)\n this.releasePooledAudio(id, audio);\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n return;\n }\n }\n\n // Fallback to cached audio\n const audio = this.soundCache.get(id);\n if (audio) {\n audio.currentTime = 0;\n audio.volume = (volume ?? this._sfxVolume) * this._masterVolume;\n await audio.play();\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n }\n } catch (error) {\n console.warn(`Failed to play sound effect ${id}:`, error);\n }\n }\n\n async playMusic(id: MusicTrackId, volume?: number): Promise<void> {\n if (this._muted) return;\n\n this.stopMusic();\n\n // Update cache access time for LRU tracking\n // LRU 추적을 위한 캐시 액세스 시간 업데이트\n this.audioCache.get(id);\n\n let audio = this.soundCache.get(id);\n \n // On-demand loading: If music not in cache, load it first\n // 온디맨드 로딩: 음악이 캐시에 없으면 먼저 로드\n if (!audio) {\n // Check if this music is already being loaded to prevent race conditions\n // JavaScript's single-threaded nature ensures atomic check-and-add operations\n // 레이스 컨디션 방지를 위해 이미 로드 중인지 확인\n // JavaScript의 싱글 스레드 특성으로 원자적 check-and-add 작업 보장\n if (this.loadingMusic.has(id)) {\n if (import.meta.env.DEV) {\n console.log(`[AudioManager] Music \"${id}\" is already being loaded, waiting...`);\n }\n // Wait for the ongoing load to complete\n // 진행 중인 로드가 완료될 때까지 대기\n await this.waitForMusicLoad(id);\n audio = this.soundCache.get(id);\n } else {\n // Mark as loading before starting the load (atomic operation in single-threaded JS)\n // 로드 시작 전에 로딩 중으로 표시 (싱글 스레드 JS에서 원자적 작업)\n this.loadingMusic.add(id);\n \n if (import.meta.env.DEV) {\n console.log(`[AudioManager] Music \"${id}\" not in cache, loading on-demand...`);\n }\n \n try {\n const { audioAssetRegistry } = await import(\"./AudioAssetRegistry\");\n const musicAsset = audioAssetRegistry.getMusic(id);\n \n if (musicAsset) {\n try {\n await this.loadAsset(musicAsset);\n audio = this.soundCache.get(id);\n \n if (import.meta.env.DEV && audio) {\n console.log(`[AudioManager] Successfully loaded music \"${id}\" on-demand`);\n }\n } catch (error) {\n console.warn(`Failed to load music asset ${id} on-demand:`, error);\n return;\n }\n } else {\n console.warn(`Music asset not found in registry: ${id}`);\n return;\n }\n } finally {\n // Always remove from loading set when done\n // 완료 시 항상 로딩 세트에서 제거\n this.loadingMusic.delete(id);\n }\n }\n }\n\n if (audio) {\n try {\n audio.currentTime = 0;\n audio.volume = (volume ?? this._musicVolume) * this._masterVolume;\n audio.loop = true;\n this.currentMusic = audio;\n this._currentMusicTrack = id;\n await audio.play();\n \n if (import.meta.env.DEV) {\n console.log(`[AudioManager] Playing music: ${id} (volume: ${audio.volume.toFixed(2)})`);\n }\n } catch (error) {\n console.warn(`Failed to play music ${id}:`, error);\n }\n }\n }\n\n /**\n * Wait for a music asset to finish loading\n * 음악 자산 로드가 완료될 때까지 대기\n * @param id - Music track ID\n * @param maxWaitMs - Maximum time to wait in milliseconds\n */\n private async waitForMusicLoad(id: string, maxWaitMs: number = 5000): Promise<void> {\n const startTime = Date.now();\n const checkInterval = 100; // Check every 100ms\n \n while (this.loadingMusic.has(id)) {\n if (Date.now() - startTime > maxWaitMs) {\n console.warn(`[AudioManager] Timeout waiting for music \"${id}\" to load`);\n return;\n }\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n }\n }\n\n stopMusic(): void {\n if (this.currentMusic) {\n this.currentMusic.pause();\n this.currentMusic.currentTime = 0;\n this.currentMusic = null;\n this._currentMusicTrack = null;\n }\n }\n\n stopAll(): void {\n this.stopMusic();\n this.soundCache.forEach((audio) => {\n if (!audio.paused) {\n audio.pause();\n audio.currentTime = 0;\n }\n });\n }\n\n setVolume(type: \"master\" | \"sfx\" | \"music\" | \"voice\", volume: number): void {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n\n switch (type) {\n case \"master\":\n this._masterVolume = clampedVolume;\n break;\n case \"sfx\":\n this._sfxVolume = clampedVolume;\n break;\n case \"music\":\n this._musicVolume = clampedVolume;\n if (this.currentMusic) {\n this.currentMusic.volume = this._musicVolume * this._masterVolume;\n }\n break;\n case \"voice\":\n // Handle voice volume if needed\n break;\n }\n }\n\n mute(): void {\n this._muted = true;\n if (this.currentMusic) {\n this.currentMusic.volume = 0;\n }\n }\n\n unmute(): void {\n this._muted = false;\n if (this.currentMusic) {\n this.currentMusic.volume = this._musicVolume * this._masterVolume;\n }\n }\n\n async fadeOut(duration: number = 1000): Promise<void> {\n if (!this.currentMusic) return;\n\n const musicElement = this.currentMusic;\n return new Promise((resolve) => {\n const startVolume = musicElement.volume;\n const fadeStep = startVolume / (duration / 50);\n\n const fadeInterval = setInterval(() => {\n if (this.currentMusic && this.currentMusic.volume > 0) {\n this.currentMusic.volume = Math.max(\n 0,\n this.currentMusic.volume - fadeStep\n );\n } else {\n clearInterval(fadeInterval);\n this.stopMusic();\n resolve();\n }\n }, 50);\n });\n }\n\n async fadeIn(trackId: MusicTrackId, duration: number = 1000): Promise<void> {\n await this.playMusic(trackId, 0);\n\n if (!this.currentMusic) return;\n\n return new Promise((resolve) => {\n const targetVolume = this._musicVolume * this._masterVolume;\n const fadeStep = targetVolume / (duration / 50);\n\n const fadeInterval = setInterval(() => {\n if (this.currentMusic && this.currentMusic.volume < targetVolume) {\n this.currentMusic.volume = Math.min(\n targetVolume,\n this.currentMusic.volume + fadeStep\n );\n } else {\n clearInterval(fadeInterval);\n resolve();\n }\n }, 50);\n });\n }\n\n async crossfade(\n fromTrackId: MusicTrackId,\n toTrackId: MusicTrackId,\n duration: number = 1000\n ): Promise<void> {\n // Fix: Remove unused fromTrackId parameter or use it properly\n const fadeOutPromise = this.fadeOut(duration);\n await fadeOutPromise;\n await this.fadeIn(toTrackId, duration);\n console.log(`Crossfaded from ${fromTrackId} to ${toTrackId}`);\n }\n\n getLoadedAssets(): ReadonlyMap<string, HTMLAudioElement> {\n return new Map(this.soundCache);\n }\n\n // Additional methods to match interface\n async playVoice(id: string): Promise<void> {\n return this.playSoundEffect(id);\n }\n\n async playKoreanTechniqueSound(\n techniqueId: string,\n archetype: string\n ): Promise<void> {\n const soundId = `${archetype}_${techniqueId}`;\n return this.playSoundEffect(soundId);\n }\n\n async playTrigramStanceSound(stance: string): Promise<void> {\n const soundId = `stance_${stance}`;\n return this.playSoundEffect(soundId);\n }\n\n async playVitalPointHitSound(severity: string): Promise<void> {\n const soundId = `vital_point_${severity}`;\n return this.playSoundEffect(soundId);\n }\n\n async playDojiangAmbience(): Promise<void> {\n return this.playMusic(\"dojang_ambience\");\n }\n\n // Legacy getters for backward compatibility\n getMasterVolume(): number {\n return this._masterVolume;\n }\n\n getMusicVolume(): number {\n return this._musicVolume;\n }\n\n getSfxVolume(): number {\n return this._sfxVolume;\n }\n\n get initialized(): boolean {\n return this._isInitialized;\n }\n\n // New optimized methods\n\n /**\n * Batch load multiple assets with progress tracking\n * @param assets - Array of audio assets to load\n * @param options - Optional load configuration (timeout, retries, etc.)\n * @param onProgress - Optional callback for progress updates with loaded and total counts\n * @returns Promise that resolves when all assets are processed\n */\n async batchLoadAssets(\n assets: readonly AudioAsset[],\n options?: LoadOptions,\n onProgress?: (loaded: number, total: number) => void\n ): Promise<void> {\n const results = await this.assetLoader.batchLoad(\n assets,\n options,\n (progress) => {\n onProgress?.(progress.loaded, progress.total);\n }\n );\n\n // Process results\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const asset = assets[i];\n\n if (result.success && result.audio) {\n result.audio.volume = asset.volume ?? 1.0;\n this.soundCache.set(asset.id, result.audio);\n\n // Create pool for frequently used sounds\n if (this.frequentSounds.has(asset.id)) {\n this.audioPool.createPool(asset.id, asset.url, {\n initialSize: 3,\n maxSize: 10,\n autoExpand: true,\n });\n }\n }\n }\n }\n\n /**\n * Unload an asset to free memory\n * @param assetId - ID of the asset to unload\n * @returns true if asset was unloaded, false if asset was not found\n */\n unloadAsset(assetId: string): boolean {\n // Remove from cache\n const audio = this.soundCache.get(assetId);\n if (audio) {\n audio.pause();\n audio.src = \"\";\n this.soundCache.delete(assetId);\n }\n\n // Remove from AudioCache (LRU cache)\n // LRU 캐시에서 제거\n const removedFromCache = this.audioCache.remove(assetId);\n\n // Remove from loader cache\n const unloaded = this.assetLoader.unloadAsset(assetId);\n\n // Remove pool if exists\n if (this.audioPool.hasPool(assetId)) {\n this.audioPool.removePool(assetId);\n }\n\n // Unregister from monitor\n this.monitor.unregisterAsset(assetId);\n\n return unloaded || audio !== undefined || removedFromCache;\n }\n\n /**\n * Get cache statistics including LRU cache metrics\n * LRU 캐시 메트릭을 포함한 캐시 통계 가져오기\n *\n * @returns Cache statistics\n */\n getCacheStats(): {\n readonly lruCache: {\n readonly totalSize: number;\n readonly assetCount: number;\n readonly criticalCount: number;\n readonly utilizationPercent: number;\n readonly evictionCount: number;\n readonly hitCount: number;\n readonly missCount: number;\n readonly hitRate: number;\n };\n readonly soundCache: number;\n readonly poolStats: Map<string, PoolStatistics>;\n } {\n return {\n lruCache: this.audioCache.getStats(),\n soundCache: this.soundCache.size,\n poolStats: this.audioPool.getAllStatistics(),\n };\n }\n\n /**\n * Get memory statistics including total loaded MB, asset count, and warnings\n * @returns Memory statistics object\n */\n getMemoryStats(): AudioMemoryStats {\n return this.monitor.getMemoryStats();\n }\n\n /**\n * Get performance statistics including load times and playback latency\n * @returns Performance statistics object\n */\n getPerformanceStats(): AudioPerformanceStats {\n return this.monitor.getPerformanceStats();\n }\n\n /**\n * Get FPS impact analysis showing baseline vs current FPS and detected drops\n * @returns FPS impact analysis object\n */\n getFPSImpact(): AudioFPSImpact {\n return this.monitor.getFPSImpact();\n }\n\n /**\n * Update FPS measurement for monitoring\n * @param fps - Current frames per second measurement\n */\n updateFPS(fps: number): void {\n this.monitor.updateFPS(fps);\n }\n\n /**\n * Get comprehensive monitoring report including memory, performance, FPS, and warnings\n * @returns Comprehensive monitoring report object\n */\n getMonitoringReport(): {\n readonly memory: AudioMemoryStats;\n readonly performance: AudioPerformanceStats;\n readonly fps: AudioFPSImpact;\n readonly warnings: readonly MemoryWarning[];\n } {\n return this.monitor.getReport();\n }\n\n /**\n * Get all memory warnings\n * @returns Array of memory warnings\n */\n getMemoryWarnings(): readonly MemoryWarning[] {\n return this.monitor.getWarnings();\n }\n\n /**\n * Clear memory warnings\n */\n clearMemoryWarnings(): void {\n this.monitor.clearWarnings();\n }\n\n /**\n * Get pool statistics for a specific asset or all pools\n * @param assetId - Optional asset ID to get specific pool stats\n * @returns Pool statistics for the specified asset or all pools\n */\n getPoolStatistics(\n assetId?: string\n ): PoolStatistics | Map<string, PoolStatistics> | undefined {\n if (assetId) {\n return this.audioPool.getPoolStatistics(assetId);\n }\n return this.audioPool.getAllStatistics();\n }\n\n /**\n * Get loader statistics including cached assets and loading state\n * @returns Loader statistics object\n */\n getLoaderStatistics(): {\n readonly cached: number;\n readonly loading: number;\n readonly totalAttempts: number;\n } {\n return this.assetLoader.getStatistics();\n }\n}\n\nexport default AudioManager;\n"],"mappings":";;;;;AAmBA,IAAM,0BAA0B;;;;;AAMhC,IAAM,wBAAwB;CAE5B;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,IAAa,eAAb,MAAmD;CACjD,gBAAgC;CAChC,eAA+B;CAC/B,aAA6B;CAC7B,SAA0B;CAC1B,qBAA4C;CAC5C,gBAAiC;CACjC,eAAgD;CAChD,6BAAoD,IAAI,KAAK;CAC7D,iBAAkC;CAIlC,+BAAoC,IAAI,KAAK;CAG7C;CACA;CACA;CACA;CACA,iBAAsC,IAAI,IAAI;EAC5C;EACA;EACA;EACD,CAAC;CAEF,YAAY,QAA+B;EACzC,IAAI,QAAQ;GACV,KAAK,gBAAgB,OAAO,gBAAgB;GAC5C,KAAK,eAAe,OAAO,eAAe;GAC1C,KAAK,aAAa,OAAO,aAAa;;EAIxC,KAAK,cAAc,IAAI,kBAAkB;EACzC,KAAK,YAAY,IAAI,kBAAkB;EACvC,KAAK,UAAU,IAAI,cAAc;EAIjC,MAAM,cAAgC;GACpC,cAAc,KAAK,OAAO;GAC1B,gBAAgB,CAAC,GAAG,sBAAsB;GAC1C,OAAO,OAAO,YAAY,eAAA,QAAA,IAAA,aAA0C;GACrE;EACD,KAAK,aAAa,IAAI,WAAW,YAAY;;;;;;;CAQ/C,mBAA2B,IAAY,OAA+B;EACpE,IAAI,CAAC,MAAM,QACT,MAAM,iBACJ,eACM;GACJ,KAAK,UAAU,QAAQ,IAAI,MAAM;KAEnC,EAAE,MAAM,MAAM,CACf;OAED,KAAK,UAAU,QAAQ,IAAI,MAAM;;CAKrC,IAAI,gBAAyB;EAC3B,OAAO,KAAK;;CAGd,IAAI,eAAwB;EAC1B,OAAO,KAAK;;CAGd,IAAI,oBAAmC;EACrC,OAAO,KAAK;;CAGd,IAAI,eAAuB;EACzB,OAAO,KAAK;;CAGd,IAAI,YAAoB;EACtB,OAAO,KAAK;;CAGd,IAAI,cAAsB;EACxB,OAAO,KAAK;;CAGd,IAAI,QAAiB;EACnB,OAAO,KAAK;;CAGd,MAAM,WAAW,QAAqC;EACpD,IAAI;GAMF,KAHE,WAAW,gBACV,WACE,qBACkB;GACvB,KAAK,iBAAiB;GACtB,KAAK,gBAAgB;GAErB,IAAI,QAAQ;IACV,KAAK,gBAAgB,OAAO,gBAAgB,KAAK;IACjD,KAAK,eAAe,OAAO,eAAe,KAAK;IAC/C,KAAK,aAAa,OAAO,aAAa,KAAK;;GAI7C,IAAI,QAAQ,uBAAuB;IACjC,MAAM,oBACJ,OAAO,wBAAwB;IACjC,KAAK,QAAQ,mBAAmB,kBAAkB;;WAE7C,OAAO;GACd,QAAQ,KACN,4DACA,MACD;GACD,KAAK,iBAAiB;GACtB,KAAK,gBAAgB;;;CAIzB,MAAM,UAAU,OAAmB,SAAsC;EACvE,MAAM,YAAY,YAAY,KAAK;EAEnC,IAAI;GAIF,IADoB,KAAK,WAAW,IAAI,MAAM,GAC1C;QAEa,KAAK,WAAW,IAAI,MAAM,GACrC,EACF;;GAMJ,MAAM,SACJ,OAAO,YAAY,eAAA,QAAA,IAAA,aAA0C;GAC/D,MAAM,cAA2B;IAC/B,SAAS,SAAS,MAAM;IACxB,YAAY,SAAS,IAAI;IACzB,YAAY,SAAS,KAAK;IAC1B,GAAG;IACJ;GAGD,MAAM,SAAS,MAAM,KAAK,YAAY,UAAU,OAAO,YAAY;GAEnE,IAAI,OAAO,WAAW,OAAO,OAAO;IAClC,OAAO,MAAM,SAAS,MAAM,UAAU;IACtC,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,MAAM;IAI3C,MAAM,gBAAgB,KAAK,kBAAkB,MAAM;IAInD,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,cAAc;IAGnD,MAAM,WAAW,YAAY,KAAK,GAAG;IACrC,KAAK,QAAQ,WAAW,MAAM,IAAI,UAAU,iBAAiB,OAAO,MAAM;IAG1E,IAAI,KAAK,eAAe,IAAI,MAAM,GAAG,EACnC,KAAK,UAAU,WAAW,MAAM,IAAI,MAAM,KAAK;KAC7C,aAAa;KACb,SAAS;KACT,YAAY;KACb,CAAC;UAEC;IAEL,MAAM,QAAQ,OAAO,yBAAS,IAAI,MAAM,qBAAqB;IAC7D,KAAK,QAAQ,kBAAkB,MAAM,IAAI,MAAM;IAG/C,IAAI,OAAO,OAAO;KAChB,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,MAAM;KAG3C,MAAM,gBAAgB,KAAK,kBAAkB,MAAM;KACnD,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,cAAc;;;WAGhD,OAAO;GACd,MAAM,MAAM,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;GACrE,QAAQ,KAAK,8BAA8B,MAAM,GAAG,IAAI,IAAI;GAC5D,KAAK,QAAQ,kBAAkB,MAAM,IAAI,IAAI;;;;;;;;;CAUjD,kBAA0B,QAA4B;EAGpD,OAAO,0BAA0B,OAAO;;CAG1C,MAAM,gBAAgB,IAAkC;EACtD,IAAI,KAAK,QAAQ;EAEjB,MAAM,gBAAgB,YAAY,KAAK;EAEvC,IAAI;GAGF,KAAK,WAAW,IAAI,GAAG;GAGvB,IAAI,KAAK,eAAe,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,GAAG,EAAE;IAC7D,MAAM,QAAQ,KAAK,UAAU,QAAQ,GAAG;IACxC,IAAI,OAAO;KACT,MAAM,SAAS,KAAK,aAAa,KAAK;KACtC,MAAM,MAAM,MAAM;KAGlB,KAAK,mBAAmB,IAAI,MAAM;KAElC,MAAM,UAAU,YAAY,KAAK,GAAG;KACpC,KAAK,QAAQ,sBAAsB,QAAQ;KAC3C;;;GAKJ,MAAM,QAAQ,KAAK,WAAW,IAAI,GAAG;GACrC,IAAI,OAAO;IACT,MAAM,cAAc;IACpB,MAAM,SAAS,KAAK,aAAa,KAAK;IACtC,MAAM,MAAM,MAAM;IAElB,MAAM,UAAU,YAAY,KAAK,GAAG;IACpC,KAAK,QAAQ,sBAAsB,QAAQ;;WAEtC,OAAO;GACd,QAAQ,KAAK,+BAA+B,GAAG,IAAI,MAAM;;;CAK7D,MAAM,QAAQ,IAAmB,QAAgC;EAC/D,IAAI,KAAK,QAAQ;EAEjB,MAAM,gBAAgB,YAAY,KAAK;EAEvC,IAAI;GAGF,KAAK,WAAW,IAAI,GAAG;GAGvB,IAAI,KAAK,eAAe,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,GAAG,EAAE;IAC7D,MAAM,QAAQ,KAAK,UAAU,QAAQ,GAAG;IACxC,IAAI,OAAO;KACT,MAAM,UAAU,UAAU,KAAK,cAAc,KAAK;KAClD,MAAM,MAAM,MAAM;KAGlB,KAAK,mBAAmB,IAAI,MAAM;KAElC,MAAM,UAAU,YAAY,KAAK,GAAG;KACpC,KAAK,QAAQ,sBAAsB,QAAQ;KAC3C;;;GAKJ,MAAM,QAAQ,KAAK,WAAW,IAAI,GAAG;GACrC,IAAI,OAAO;IACT,MAAM,cAAc;IACpB,MAAM,UAAU,UAAU,KAAK,cAAc,KAAK;IAClD,MAAM,MAAM,MAAM;IAElB,MAAM,UAAU,YAAY,KAAK,GAAG;IACpC,KAAK,QAAQ,sBAAsB,QAAQ;;WAEtC,OAAO;GACd,QAAQ,KAAK,+BAA+B,GAAG,IAAI,MAAM;;;CAI7D,MAAM,UAAU,IAAkB,QAAgC;EAChE,IAAI,KAAK,QAAQ;EAEjB,KAAK,WAAW;EAIhB,KAAK,WAAW,IAAI,GAAG;EAEvB,IAAI,QAAQ,KAAK,WAAW,IAAI,GAAG;EAInC,IAAI,CAAC,OAKH,IAAI,KAAK,aAAa,IAAI,GAAG,EAAE;GAM7B,MAAM,KAAK,iBAAiB,GAAG;GAC/B,QAAQ,KAAK,WAAW,IAAI,GAAG;SAC1B;GAGL,KAAK,aAAa,IAAI,GAAG;GAMzB,IAAI;IACF,MAAM,EAAE,uBAAuB,MAAM,OAAO;IAC5C,MAAM,aAAa,mBAAmB,SAAS,GAAG;IAElD,IAAI,YACF,IAAI;KACF,MAAM,KAAK,UAAU,WAAW;KAChC,QAAQ,KAAK,WAAW,IAAI,GAAG;aAKxB,OAAO;KACd,QAAQ,KAAK,8BAA8B,GAAG,cAAc,MAAM;KAClE;;SAEG;KACL,QAAQ,KAAK,sCAAsC,KAAK;KACxD;;aAEM;IAGR,KAAK,aAAa,OAAO,GAAG;;;EAKlC,IAAI,OACF,IAAI;GACF,MAAM,cAAc;GACpB,MAAM,UAAU,UAAU,KAAK,gBAAgB,KAAK;GACpD,MAAM,OAAO;GACb,KAAK,eAAe;GACpB,KAAK,qBAAqB;GAC1B,MAAM,MAAM,MAAM;WAKX,OAAO;GACd,QAAQ,KAAK,wBAAwB,GAAG,IAAI,MAAM;;;;;;;;;CAWxD,MAAc,iBAAiB,IAAY,YAAoB,KAAqB;EAClF,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,gBAAgB;EAEtB,OAAO,KAAK,aAAa,IAAI,GAAG,EAAE;GAChC,IAAI,KAAK,KAAK,GAAG,YAAY,WAAW;IACtC,QAAQ,KAAK,6CAA6C,GAAG,WAAW;IACxE;;GAEF,MAAM,IAAI,SAAQ,YAAW,WAAW,SAAS,cAAc,CAAC;;;CAIpE,YAAkB;EAChB,IAAI,KAAK,cAAc;GACrB,KAAK,aAAa,OAAO;GACzB,KAAK,aAAa,cAAc;GAChC,KAAK,eAAe;GACpB,KAAK,qBAAqB;;;CAI9B,UAAgB;EACd,KAAK,WAAW;EAChB,KAAK,WAAW,SAAS,UAAU;GACjC,IAAI,CAAC,MAAM,QAAQ;IACjB,MAAM,OAAO;IACb,MAAM,cAAc;;IAEtB;;CAGJ,UAAU,MAA4C,QAAsB;EAC1E,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC;EAEtD,QAAQ,MAAR;GACE,KAAK;IACH,KAAK,gBAAgB;IACrB;GACF,KAAK;IACH,KAAK,aAAa;IAClB;GACF,KAAK;IACH,KAAK,eAAe;IACpB,IAAI,KAAK,cACP,KAAK,aAAa,SAAS,KAAK,eAAe,KAAK;IAEtD;GACF,KAAK,SAEH;;;CAIN,OAAa;EACX,KAAK,SAAS;EACd,IAAI,KAAK,cACP,KAAK,aAAa,SAAS;;CAI/B,SAAe;EACb,KAAK,SAAS;EACd,IAAI,KAAK,cACP,KAAK,aAAa,SAAS,KAAK,eAAe,KAAK;;CAIxD,MAAM,QAAQ,WAAmB,KAAqB;EACpD,IAAI,CAAC,KAAK,cAAc;EAExB,MAAM,eAAe,KAAK;EAC1B,OAAO,IAAI,SAAS,YAAY;GAE9B,MAAM,WADc,aAAa,UACD,WAAW;GAE3C,MAAM,eAAe,kBAAkB;IACrC,IAAI,KAAK,gBAAgB,KAAK,aAAa,SAAS,GAClD,KAAK,aAAa,SAAS,KAAK,IAC9B,GACA,KAAK,aAAa,SAAS,SAC5B;SACI;KACL,cAAc,aAAa;KAC3B,KAAK,WAAW;KAChB,SAAS;;MAEV,GAAG;IACN;;CAGJ,MAAM,OAAO,SAAuB,WAAmB,KAAqB;EAC1E,MAAM,KAAK,UAAU,SAAS,EAAE;EAEhC,IAAI,CAAC,KAAK,cAAc;EAExB,OAAO,IAAI,SAAS,YAAY;GAC9B,MAAM,eAAe,KAAK,eAAe,KAAK;GAC9C,MAAM,WAAW,gBAAgB,WAAW;GAE5C,MAAM,eAAe,kBAAkB;IACrC,IAAI,KAAK,gBAAgB,KAAK,aAAa,SAAS,cAClD,KAAK,aAAa,SAAS,KAAK,IAC9B,cACA,KAAK,aAAa,SAAS,SAC5B;SACI;KACL,cAAc,aAAa;KAC3B,SAAS;;MAEV,GAAG;IACN;;CAGJ,MAAM,UACJ,aACA,WACA,WAAmB,KACJ;EAGf,MADuB,KAAK,QAAQ,SAC9B;EACN,MAAM,KAAK,OAAO,WAAW,SAAS;EACtC,QAAQ,IAAI,mBAAmB,YAAY,MAAM,YAAY;;CAG/D,kBAAyD;EACvD,OAAO,IAAI,IAAI,KAAK,WAAW;;CAIjC,MAAM,UAAU,IAA2B;EACzC,OAAO,KAAK,gBAAgB,GAAG;;CAGjC,MAAM,yBACJ,aACA,WACe;EACf,MAAM,UAAU,GAAG,UAAU,GAAG;EAChC,OAAO,KAAK,gBAAgB,QAAQ;;CAGtC,MAAM,uBAAuB,QAA+B;EAC1D,MAAM,UAAU,UAAU;EAC1B,OAAO,KAAK,gBAAgB,QAAQ;;CAGtC,MAAM,uBAAuB,UAAiC;EAC5D,MAAM,UAAU,eAAe;EAC/B,OAAO,KAAK,gBAAgB,QAAQ;;CAGtC,MAAM,sBAAqC;EACzC,OAAO,KAAK,UAAU,kBAAkB;;CAI1C,kBAA0B;EACxB,OAAO,KAAK;;CAGd,iBAAyB;EACvB,OAAO,KAAK;;CAGd,eAAuB;EACrB,OAAO,KAAK;;CAGd,IAAI,cAAuB;EACzB,OAAO,KAAK;;;;;;;;;CAYd,MAAM,gBACJ,QACA,SACA,YACe;EACf,MAAM,UAAU,MAAM,KAAK,YAAY,UACrC,QACA,UACC,aAAa;GACZ,aAAa,SAAS,QAAQ,SAAS,MAAM;IAEhD;EAGD,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,MAAM,SAAS,QAAQ;GACvB,MAAM,QAAQ,OAAO;GAErB,IAAI,OAAO,WAAW,OAAO,OAAO;IAClC,OAAO,MAAM,SAAS,MAAM,UAAU;IACtC,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,MAAM;IAG3C,IAAI,KAAK,eAAe,IAAI,MAAM,GAAG,EACnC,KAAK,UAAU,WAAW,MAAM,IAAI,MAAM,KAAK;KAC7C,aAAa;KACb,SAAS;KACT,YAAY;KACb,CAAC;;;;;;;;;CAWV,YAAY,SAA0B;EAEpC,MAAM,QAAQ,KAAK,WAAW,IAAI,QAAQ;EAC1C,IAAI,OAAO;GACT,MAAM,OAAO;GACb,MAAM,MAAM;GACZ,KAAK,WAAW,OAAO,QAAQ;;EAKjC,MAAM,mBAAmB,KAAK,WAAW,OAAO,QAAQ;EAGxD,MAAM,WAAW,KAAK,YAAY,YAAY,QAAQ;EAGtD,IAAI,KAAK,UAAU,QAAQ,QAAQ,EACjC,KAAK,UAAU,WAAW,QAAQ;EAIpC,KAAK,QAAQ,gBAAgB,QAAQ;EAErC,OAAO,YAAY,UAAU,KAAA,KAAa;;;;;;;;CAS5C,gBAaE;EACA,OAAO;GACL,UAAU,KAAK,WAAW,UAAU;GACpC,YAAY,KAAK,WAAW;GAC5B,WAAW,KAAK,UAAU,kBAAkB;GAC7C;;;;;;CAOH,iBAAmC;EACjC,OAAO,KAAK,QAAQ,gBAAgB;;;;;;CAOtC,sBAA6C;EAC3C,OAAO,KAAK,QAAQ,qBAAqB;;;;;;CAO3C,eAA+B;EAC7B,OAAO,KAAK,QAAQ,cAAc;;;;;;CAOpC,UAAU,KAAmB;EAC3B,KAAK,QAAQ,UAAU,IAAI;;;;;;CAO7B,sBAKE;EACA,OAAO,KAAK,QAAQ,WAAW;;;;;;CAOjC,oBAA8C;EAC5C,OAAO,KAAK,QAAQ,aAAa;;;;;CAMnC,sBAA4B;EAC1B,KAAK,QAAQ,eAAe;;;;;;;CAQ9B,kBACE,SAC0D;EAC1D,IAAI,SACF,OAAO,KAAK,UAAU,kBAAkB,QAAQ;EAElD,OAAO,KAAK,UAAU,kBAAkB;;;;;;CAO1C,sBAIE;EACA,OAAO,KAAK,YAAY,eAAe"}
|
|
1
|
+
{"version":3,"file":"AudioManager.js","names":[],"sources":["../../src/audio/AudioManager.ts"],"sourcesContent":["import { AudioAssetLoader, LoadOptions } from \"./AudioAssetLoader\";\nimport { AudioCache, AudioCacheConfig } from \"./AudioCache\";\nimport {\n AudioFPSImpact,\n AudioMemoryStats,\n AudioMonitor,\n AudioPerformanceStats,\n MemoryWarning,\n} from \"./AudioMonitor\";\nimport { AudioElementPool, PoolStatistics } from \"./AudioPool\";\nimport {\n AudioAsset,\n AudioConfig,\n IAudioManager,\n MusicTrackId,\n SoundEffectId,\n} from \"./types\";\n\n// Estimated average size per audio asset in MB (based on typical compressed audio file sizes)\nconst ESTIMATED_ASSET_SIZE_MB = 0.5;\n\n/**\n * Critical assets that should never be evicted from cache\n * 캐시에서 절대 제거되지 않아야 하는 중요한 자산\n */\nconst CRITICAL_AUDIO_ASSETS = [\n // Menu sounds - instant playback required\n \"menu_hover\",\n \"menu_select\",\n \"menu_click\",\n \"menu_navigate\",\n \"menu_back\",\n // Common combat sounds - instant playback required\n \"hit_impact\",\n \"hit_light\",\n \"hit_medium\",\n \"hit_heavy\",\n \"guard_block\",\n \"attack_whoosh\",\n \"attack_light\",\n \"stance_change\",\n] as const;\n\n/**\n * Manages audio playback for the Black Trigram combat game.\n *\n * Handles music tracks, sound effects, and Korean martial arts audio\n * including technique sounds, trigram stance audio, and vital point hit\n * feedback. Uses an LRU asset cache, pooled `HTMLAudioElement` instances,\n * and an `AudioMonitor` for performance tracking.\n *\n * @example\n * ```ts\n * const audio = new AudioManager({ masterVolume: 0.8 });\n * await audio.initialize();\n * await audio.playMusic(\"dojang_theme\");\n * await audio.playSFX(\"hit_medium\");\n * ```\n *\n * @korean 오디오관리자\n */\nexport class AudioManager implements IAudioManager {\n private _masterVolume: number = 1.0;\n private _musicVolume: number = 0.7;\n private _sfxVolume: number = 0.8;\n private _muted: boolean = false;\n private _currentMusicTrack: string | null = null;\n private _fallbackMode: boolean = false;\n private currentMusic: HTMLAudioElement | null = null;\n private soundCache: Map<string, HTMLAudioElement> = new Map();\n private _isInitialized: boolean = false;\n\n /** Music assets currently being loaded — prevents race conditions on concurrent playMusic calls */\n private loadingMusic: Set<string> = new Set();\n\n private assetLoader: AudioAssetLoader;\n private audioPool: AudioElementPool;\n private monitor: AudioMonitor;\n private audioCache: AudioCache;\n private frequentSounds: Set<string> = new Set([\n \"hit_light\",\n \"attack_light\",\n \"stance_change\",\n ]);\n\n constructor(config?: Partial<AudioConfig>) {\n if (config) {\n this._masterVolume = config.masterVolume ?? 1.0;\n this._musicVolume = config.musicVolume ?? 0.7;\n this._sfxVolume = config.sfxVolume ?? 0.8;\n }\n\n this.assetLoader = new AudioAssetLoader();\n this.audioPool = new AudioElementPool();\n this.monitor = new AudioMonitor();\n\n // Initialize AudioCache with 30MB limit and critical assets\n // 30MB 제한 및 중요 자산으로 AudioCache 초기화\n const cacheConfig: AudioCacheConfig = {\n maxSizeBytes: 30 * 1024 * 1024, // 30MB default\n criticalAssets: [...CRITICAL_AUDIO_ASSETS],\n debug: typeof process !== \"undefined\" && process?.env?.NODE_ENV === \"development\",\n };\n this.audioCache = new AudioCache(cacheConfig);\n }\n\n /**\n * Helper method to release pooled audio back to the pool after playback\n * @param id - Asset ID\n * @param audio - Audio element to release\n */\n private releasePooledAudio(id: string, audio: HTMLAudioElement): void {\n if (!audio.paused) {\n audio.addEventListener(\n \"ended\",\n () => {\n this.audioPool.release(id, audio);\n },\n { once: true }\n );\n } else {\n this.audioPool.release(id, audio);\n }\n }\n\n /** @returns Whether the audio system has been initialized */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n get fallbackMode(): boolean {\n return this._fallbackMode;\n }\n\n get currentMusicTrack(): string | null {\n return this._currentMusicTrack;\n }\n\n get masterVolume(): number {\n return this._masterVolume;\n }\n\n get sfxVolume(): number {\n return this._sfxVolume;\n }\n\n get musicVolume(): number {\n return this._musicVolume;\n }\n\n get muted(): boolean {\n return this._muted;\n }\n\n async initialize(config?: AudioConfig): Promise<void> {\n try {\n // Create AudioContext using globalThis for cross-platform compatibility\n const AudioContextClass =\n globalThis.AudioContext ||\n (globalThis as unknown as { webkitAudioContext: typeof AudioContext })\n .webkitAudioContext;\n new AudioContextClass();\n this._isInitialized = true;\n this._fallbackMode = false;\n\n if (config) {\n this._masterVolume = config.masterVolume ?? this._masterVolume;\n this._musicVolume = config.musicVolume ?? this._musicVolume;\n this._sfxVolume = config.sfxVolume ?? this._sfxVolume;\n }\n\n // Set memory threshold if configured\n if (config?.maxSimultaneousSounds) {\n const estimatedMemoryMB =\n config.maxSimultaneousSounds * ESTIMATED_ASSET_SIZE_MB;\n this.monitor.setMemoryThreshold(estimatedMemoryMB);\n }\n } catch (error) {\n console.warn(\n \"AudioContext initialization failed, using fallback mode:\",\n error\n );\n this._isInitialized = true;\n this._fallbackMode = true;\n }\n }\n\n async loadAsset(asset: AudioAsset, options?: LoadOptions): Promise<void> {\n const startTime = performance.now();\n\n try {\n // Check cache first - instant playback for cached assets\n // 캐시 먼저 확인 - 캐시된 자산의 즉시 재생\n const cachedAsset = this.audioCache.get(asset.id);\n if (cachedAsset) {\n // Asset already loaded in cache, use it\n const cached = this.soundCache.get(asset.id);\n if (cached) {\n return; // Already loaded and cached\n }\n }\n\n // Use faster timeouts for testing environment\n // Safely check for Node.js environment to avoid runtime errors in browsers\n const isTest =\n typeof process !== \"undefined\" && process?.env?.NODE_ENV === \"test\";\n const loadOptions: LoadOptions = {\n timeout: isTest ? 100 : 10000,\n maxRetries: isTest ? 1 : 3,\n retryDelay: isTest ? 10 : 1000,\n ...options,\n };\n\n // Use AudioAssetLoader with retry and fallback\n const result = await this.assetLoader.loadAsset(asset, loadOptions);\n\n if (result.success && result.audio) {\n result.audio.volume = asset.volume ?? 1.0;\n this.soundCache.set(asset.id, result.audio);\n\n // Estimate size for cache management\n // 캐시 관리를 위한 크기 추정\n const estimatedSize = this.estimateAudioSize(asset);\n\n // Add to LRU cache with size tracking\n // 크기 추적과 함께 LRU 캐시에 추가\n this.audioCache.set(asset.id, asset, estimatedSize);\n\n // Track performance and memory\n const loadTime = performance.now() - startTime;\n this.monitor.recordLoad(asset.id, loadTime, estimatedSize / (1024 * 1024));\n\n // Create pool for frequently used sounds\n if (this.frequentSounds.has(asset.id)) {\n this.audioPool.createPool(asset.id, asset.url, {\n initialSize: 3,\n maxSize: 10,\n autoExpand: true,\n });\n }\n } else {\n // Record failure\n const error = result.error ?? new Error(\"Unknown load error\");\n this.monitor.recordLoadFailure(asset.id, error);\n\n // Still cache the placeholder audio if available\n if (result.audio) {\n this.soundCache.set(asset.id, result.audio);\n\n // Add to cache even if failed (placeholder)\n const estimatedSize = this.estimateAudioSize(asset);\n this.audioCache.set(asset.id, asset, estimatedSize);\n }\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n console.warn(`Failed to load audio asset ${asset.id}:`, err);\n this.monitor.recordLoadFailure(asset.id, err);\n }\n }\n\n /**\n * Estimate audio asset size in bytes\n * 바이트 단위의 오디오 자산 크기 추정\n *\n * @returns Estimated size in bytes\n */\n private estimateAudioSize(_asset: AudioAsset): number {\n // Use ESTIMATED_ASSET_SIZE_MB constant for consistent estimation\n // Conservative estimate: ~0.5MB per audio file (compressed MP3/WebM)\n return ESTIMATED_ASSET_SIZE_MB * 1024 * 1024;\n }\n\n async playSoundEffect(id: SoundEffectId): Promise<void> {\n if (this._muted) return;\n\n const playbackStart = performance.now();\n\n try {\n // Update cache access time for LRU tracking\n // LRU 추적을 위한 캐시 액세스 시간 업데이트\n this.audioCache.get(id);\n\n // Use pool for frequently played sounds\n if (this.frequentSounds.has(id) && this.audioPool.hasPool(id)) {\n const audio = this.audioPool.acquire(id);\n if (audio) {\n audio.volume = this._sfxVolume * this._masterVolume;\n await audio.play();\n\n // Release back to pool after playback (non-blocking)\n this.releasePooledAudio(id, audio);\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n return;\n }\n }\n\n // Fallback to cached audio\n const audio = this.soundCache.get(id);\n if (audio) {\n audio.currentTime = 0;\n audio.volume = this._sfxVolume * this._masterVolume;\n await audio.play();\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n }\n } catch (error) {\n console.warn(`Failed to play sound effect ${id}:`, error);\n }\n }\n\n /**\n * Alias for {@link playSoundEffect} — preferred for explicit volume control.\n * @param id - Sound effect identifier\n * @param volume - Override volume (defaults to sfxVolume × masterVolume)\n */\n async playSFX(id: SoundEffectId, volume?: number): Promise<void> {\n if (this._muted) return;\n\n const playbackStart = performance.now();\n\n try {\n // Update cache access time for LRU tracking\n // LRU 추적을 위한 캐시 액세스 시간 업데이트\n this.audioCache.get(id);\n\n // Use pool for frequently played sounds\n if (this.frequentSounds.has(id) && this.audioPool.hasPool(id)) {\n const audio = this.audioPool.acquire(id);\n if (audio) {\n audio.volume = (volume ?? this._sfxVolume) * this._masterVolume;\n await audio.play();\n\n // Release back to pool after playback (non-blocking)\n this.releasePooledAudio(id, audio);\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n return;\n }\n }\n\n // Fallback to cached audio\n const audio = this.soundCache.get(id);\n if (audio) {\n audio.currentTime = 0;\n audio.volume = (volume ?? this._sfxVolume) * this._masterVolume;\n await audio.play();\n\n const latency = performance.now() - playbackStart;\n this.monitor.recordPlaybackLatency(latency);\n }\n } catch (error) {\n console.warn(`Failed to play sound effect ${id}:`, error);\n }\n }\n\n async playMusic(id: MusicTrackId, volume?: number): Promise<void> {\n if (this._muted) return;\n\n this.stopMusic();\n\n // Update cache access time for LRU tracking\n // LRU 추적을 위한 캐시 액세스 시간 업데이트\n this.audioCache.get(id);\n\n let audio = this.soundCache.get(id);\n \n // On-demand loading: If music not in cache, load it first\n // 온디맨드 로딩: 음악이 캐시에 없으면 먼저 로드\n if (!audio) {\n // Check if this music is already being loaded to prevent race conditions\n // JavaScript's single-threaded nature ensures atomic check-and-add operations\n // 레이스 컨디션 방지를 위해 이미 로드 중인지 확인\n // JavaScript의 싱글 스레드 특성으로 원자적 check-and-add 작업 보장\n if (this.loadingMusic.has(id)) {\n if (import.meta.env.DEV) {\n console.log(`[AudioManager] Music \"${id}\" is already being loaded, waiting...`);\n }\n // Wait for the ongoing load to complete\n // 진행 중인 로드가 완료될 때까지 대기\n await this.waitForMusicLoad(id);\n audio = this.soundCache.get(id);\n } else {\n // Mark as loading before starting the load (atomic operation in single-threaded JS)\n // 로드 시작 전에 로딩 중으로 표시 (싱글 스레드 JS에서 원자적 작업)\n this.loadingMusic.add(id);\n \n if (import.meta.env.DEV) {\n console.log(`[AudioManager] Music \"${id}\" not in cache, loading on-demand...`);\n }\n \n try {\n const { audioAssetRegistry } = await import(\"./AudioAssetRegistry\");\n const musicAsset = audioAssetRegistry.getMusic(id);\n \n if (musicAsset) {\n try {\n await this.loadAsset(musicAsset);\n audio = this.soundCache.get(id);\n \n if (import.meta.env.DEV && audio) {\n console.log(`[AudioManager] Successfully loaded music \"${id}\" on-demand`);\n }\n } catch (error) {\n console.warn(`Failed to load music asset ${id} on-demand:`, error);\n return;\n }\n } else {\n console.warn(`Music asset not found in registry: ${id}`);\n return;\n }\n } finally {\n // Always remove from loading set when done\n // 완료 시 항상 로딩 세트에서 제거\n this.loadingMusic.delete(id);\n }\n }\n }\n\n if (audio) {\n try {\n audio.currentTime = 0;\n audio.volume = (volume ?? this._musicVolume) * this._masterVolume;\n audio.loop = true;\n this.currentMusic = audio;\n this._currentMusicTrack = id;\n await audio.play();\n \n if (import.meta.env.DEV) {\n console.log(`[AudioManager] Playing music: ${id} (volume: ${audio.volume.toFixed(2)})`);\n }\n } catch (error) {\n console.warn(`Failed to play music ${id}:`, error);\n }\n }\n }\n\n /**\n * Wait for a music asset to finish loading\n * 음악 자산 로드가 완료될 때까지 대기\n * @param id - Music track ID\n * @param maxWaitMs - Maximum time to wait in milliseconds\n */\n private async waitForMusicLoad(id: string, maxWaitMs: number = 5000): Promise<void> {\n const startTime = Date.now();\n const checkInterval = 100; // Check every 100ms\n \n while (this.loadingMusic.has(id)) {\n if (Date.now() - startTime > maxWaitMs) {\n console.warn(`[AudioManager] Timeout waiting for music \"${id}\" to load`);\n return;\n }\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n }\n }\n\n stopMusic(): void {\n if (this.currentMusic) {\n this.currentMusic.pause();\n this.currentMusic.currentTime = 0;\n this.currentMusic = null;\n this._currentMusicTrack = null;\n }\n }\n\n stopAll(): void {\n this.stopMusic();\n this.soundCache.forEach((audio) => {\n if (!audio.paused) {\n audio.pause();\n audio.currentTime = 0;\n }\n });\n }\n\n setVolume(type: \"master\" | \"sfx\" | \"music\" | \"voice\", volume: number): void {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n\n switch (type) {\n case \"master\":\n this._masterVolume = clampedVolume;\n break;\n case \"sfx\":\n this._sfxVolume = clampedVolume;\n break;\n case \"music\":\n this._musicVolume = clampedVolume;\n if (this.currentMusic) {\n this.currentMusic.volume = this._musicVolume * this._masterVolume;\n }\n break;\n case \"voice\":\n break;\n }\n }\n\n mute(): void {\n this._muted = true;\n if (this.currentMusic) {\n this.currentMusic.volume = 0;\n }\n }\n\n unmute(): void {\n this._muted = false;\n if (this.currentMusic) {\n this.currentMusic.volume = this._musicVolume * this._masterVolume;\n }\n }\n\n async fadeOut(duration: number = 1000): Promise<void> {\n if (!this.currentMusic) return;\n\n const musicElement = this.currentMusic;\n return new Promise((resolve) => {\n const startVolume = musicElement.volume;\n const fadeStep = startVolume / (duration / 50);\n\n const fadeInterval = setInterval(() => {\n if (this.currentMusic && this.currentMusic.volume > 0) {\n this.currentMusic.volume = Math.max(\n 0,\n this.currentMusic.volume - fadeStep\n );\n } else {\n clearInterval(fadeInterval);\n this.stopMusic();\n resolve();\n }\n }, 50);\n });\n }\n\n async fadeIn(trackId: MusicTrackId, duration: number = 1000): Promise<void> {\n await this.playMusic(trackId, 0);\n\n if (!this.currentMusic) return;\n\n return new Promise((resolve) => {\n const targetVolume = this._musicVolume * this._masterVolume;\n const fadeStep = targetVolume / (duration / 50);\n\n const fadeInterval = setInterval(() => {\n if (this.currentMusic && this.currentMusic.volume < targetVolume) {\n this.currentMusic.volume = Math.min(\n targetVolume,\n this.currentMusic.volume + fadeStep\n );\n } else {\n clearInterval(fadeInterval);\n resolve();\n }\n }, 50);\n });\n }\n\n async crossfade(\n fromTrackId: MusicTrackId,\n toTrackId: MusicTrackId,\n duration: number = 1000\n ): Promise<void> {\n const fadeOutPromise = this.fadeOut(duration);\n await fadeOutPromise;\n await this.fadeIn(toTrackId, duration);\n console.log(`Crossfaded from ${fromTrackId} to ${toTrackId}`);\n }\n\n /** @returns A snapshot of all currently loaded sound elements */\n getLoadedAssets(): ReadonlyMap<string, HTMLAudioElement> {\n return new Map(this.soundCache);\n }\n\n async playVoice(id: string): Promise<void> {\n return this.playSoundEffect(id);\n }\n\n async playKoreanTechniqueSound(\n techniqueId: string,\n archetype: string\n ): Promise<void> {\n const soundId = `${archetype}_${techniqueId}`;\n return this.playSoundEffect(soundId);\n }\n\n async playTrigramStanceSound(stance: string): Promise<void> {\n const soundId = `stance_${stance}`;\n return this.playSoundEffect(soundId);\n }\n\n async playVitalPointHitSound(severity: string): Promise<void> {\n const soundId = `vital_point_${severity}`;\n return this.playSoundEffect(soundId);\n }\n\n async playDojiangAmbience(): Promise<void> {\n return this.playMusic(\"dojang_ambience\");\n }\n\n // Legacy getters for backward compatibility\n getMasterVolume(): number {\n return this._masterVolume;\n }\n\n getMusicVolume(): number {\n return this._musicVolume;\n }\n\n getSfxVolume(): number {\n return this._sfxVolume;\n }\n\n get initialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Batch load multiple assets with progress tracking\n * @param assets - Array of audio assets to load\n * @param options - Optional load configuration (timeout, retries, etc.)\n * @param onProgress - Optional callback for progress updates with loaded and total counts\n * @returns Promise that resolves when all assets are processed\n */\n async batchLoadAssets(\n assets: readonly AudioAsset[],\n options?: LoadOptions,\n onProgress?: (loaded: number, total: number) => void\n ): Promise<void> {\n const results = await this.assetLoader.batchLoad(\n assets,\n options,\n (progress) => {\n onProgress?.(progress.loaded, progress.total);\n }\n );\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const asset = assets[i];\n\n if (result.success && result.audio) {\n result.audio.volume = asset.volume ?? 1.0;\n this.soundCache.set(asset.id, result.audio);\n\n // Create pool for frequently used sounds\n if (this.frequentSounds.has(asset.id)) {\n this.audioPool.createPool(asset.id, asset.url, {\n initialSize: 3,\n maxSize: 10,\n autoExpand: true,\n });\n }\n }\n }\n }\n\n /**\n * Unload an asset to free memory\n * @param assetId - ID of the asset to unload\n * @returns true if asset was unloaded, false if asset was not found\n */\n unloadAsset(assetId: string): boolean {\n const audio = this.soundCache.get(assetId);\n if (audio) {\n audio.pause();\n audio.src = \"\";\n this.soundCache.delete(assetId);\n }\n\n // LRU 캐시에서 제거\n const removedFromCache = this.audioCache.remove(assetId);\n\n const unloaded = this.assetLoader.unloadAsset(assetId);\n\n if (this.audioPool.hasPool(assetId)) {\n this.audioPool.removePool(assetId);\n }\n\n this.monitor.unregisterAsset(assetId);\n\n return unloaded || audio !== undefined || removedFromCache;\n }\n\n /**\n * Get cache statistics including LRU cache metrics\n * LRU 캐시 메트릭을 포함한 캐시 통계 가져오기\n *\n * @returns Cache statistics\n */\n getCacheStats(): {\n readonly lruCache: {\n readonly totalSize: number;\n readonly assetCount: number;\n readonly criticalCount: number;\n readonly utilizationPercent: number;\n readonly evictionCount: number;\n readonly hitCount: number;\n readonly missCount: number;\n readonly hitRate: number;\n };\n readonly soundCache: number;\n readonly poolStats: Map<string, PoolStatistics>;\n } {\n return {\n lruCache: this.audioCache.getStats(),\n soundCache: this.soundCache.size,\n poolStats: this.audioPool.getAllStatistics(),\n };\n }\n\n /**\n * Get memory statistics including total loaded MB, asset count, and warnings\n * @returns Memory statistics object\n */\n getMemoryStats(): AudioMemoryStats {\n return this.monitor.getMemoryStats();\n }\n\n /**\n * Get performance statistics including load times and playback latency\n * @returns Performance statistics object\n */\n getPerformanceStats(): AudioPerformanceStats {\n return this.monitor.getPerformanceStats();\n }\n\n /**\n * Get FPS impact analysis showing baseline vs current FPS and detected drops\n * @returns FPS impact analysis object\n */\n getFPSImpact(): AudioFPSImpact {\n return this.monitor.getFPSImpact();\n }\n\n /**\n * Update FPS measurement for monitoring\n * @param fps - Current frames per second measurement\n */\n updateFPS(fps: number): void {\n this.monitor.updateFPS(fps);\n }\n\n /**\n * Get comprehensive monitoring report including memory, performance, FPS, and warnings\n * @returns Comprehensive monitoring report object\n */\n getMonitoringReport(): {\n readonly memory: AudioMemoryStats;\n readonly performance: AudioPerformanceStats;\n readonly fps: AudioFPSImpact;\n readonly warnings: readonly MemoryWarning[];\n } {\n return this.monitor.getReport();\n }\n\n /**\n * Get all memory warnings\n * @returns Array of memory warnings\n */\n getMemoryWarnings(): readonly MemoryWarning[] {\n return this.monitor.getWarnings();\n }\n\n /**\n * Clear memory warnings\n */\n clearMemoryWarnings(): void {\n this.monitor.clearWarnings();\n }\n\n /**\n * Get pool statistics for a specific asset or all pools\n * @param assetId - Optional asset ID to get specific pool stats\n * @returns Pool statistics for the specified asset or all pools\n */\n getPoolStatistics(\n assetId?: string\n ): PoolStatistics | Map<string, PoolStatistics> | undefined {\n if (assetId) {\n return this.audioPool.getPoolStatistics(assetId);\n }\n return this.audioPool.getAllStatistics();\n }\n\n /**\n * Get loader statistics including cached assets and loading state\n * @returns Loader statistics object\n */\n getLoaderStatistics(): {\n readonly cached: number;\n readonly loading: number;\n readonly totalAttempts: number;\n } {\n return this.assetLoader.getStatistics();\n }\n}\n\nexport default AudioManager;\n"],"mappings":"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"}
|
package/lib/audio/AudioPool.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioPool.js","names":[],"sources":["../../src/audio/AudioPool.ts"],"sourcesContent":["/**\n * AudioPool - Object pooling for audio instances\n * Reduces memory allocation overhead for frequently played sounds\n */\n\nexport interface PoolStatistics {\n readonly available: number;\n readonly inUse: number;\n readonly total: number;\n readonly acquisitions: number;\n readonly releases: number;\n readonly created: number;\n}\n\nexport interface PoolConfig {\n readonly initialSize?: number;\n readonly maxSize?: number;\n readonly autoExpand?: boolean;\n}\n\n/**\n * Generic object pool implementation\n */\nexport class ObjectPool<T> {\n private available: T[] = [];\n private inUse = new Set<T>();\n private acquisitionCount = 0;\n private releaseCount = 0;\n private createdCount = 0;\n\n constructor(\n private readonly factory: () => T,\n private readonly reset: (obj: T) => void,\n private readonly config: Required<PoolConfig> = {\n initialSize: 10,\n maxSize: 100,\n autoExpand: true,\n }\n ) {\n // Pre-populate pool\n for (let i = 0; i < config.initialSize; i++) {\n this.available.push(this.createObject());\n }\n }\n\n /**\n * Acquire an object from the pool\n */\n acquire(): T | null {\n this.acquisitionCount++;\n\n let obj = this.available.pop();\n\n if (!obj) {\n // Pool is empty\n if (this.config.autoExpand && this.canExpand()) {\n obj = this.createObject();\n } else {\n console.warn(\"Pool exhausted and cannot expand\");\n return null;\n }\n }\n\n this.inUse.add(obj);\n return obj;\n }\n\n /**\n * Release an object back to the pool\n */\n release(obj: T): void {\n if (!this.inUse.has(obj)) {\n console.warn(\"Attempted to release object not in use\");\n return;\n }\n\n this.releaseCount++;\n this.reset(obj);\n this.inUse.delete(obj);\n this.available.push(obj);\n }\n\n /**\n * Release all objects back to the pool\n * Resets all in-use objects and returns them to the available pool\n */\n releaseAll(): void {\n this.inUse.forEach((obj) => {\n this.releaseCount++;\n this.reset(obj);\n this.available.push(obj);\n });\n this.inUse.clear();\n }\n\n /**\n * Get pool statistics\n */\n getStatistics(): PoolStatistics {\n return {\n available: this.available.length,\n inUse: this.inUse.size,\n total: this.available.length + this.inUse.size,\n acquisitions: this.acquisitionCount,\n releases: this.releaseCount,\n created: this.createdCount,\n };\n }\n\n /**\n * Clear the pool and dispose all objects\n */\n clear(): void {\n this.available = [];\n this.inUse.clear();\n }\n\n private createObject(): T {\n this.createdCount++;\n return this.factory();\n }\n\n private canExpand(): boolean {\n const total = this.available.length + this.inUse.size;\n return total < this.config.maxSize;\n }\n}\n\n/**\n * Specialized audio pool for HTMLAudioElement instances\n */\nexport class AudioElementPool {\n private pools: Map<string, ObjectPool<HTMLAudioElement>> = new Map();\n private defaultConfig: Required<PoolConfig> = {\n initialSize: 5,\n maxSize: 20,\n autoExpand: true,\n };\n\n /**\n * Create a pool for a specific audio asset\n */\n createPool(\n assetId: string,\n audioSrc: string,\n config?: PoolConfig\n ): ObjectPool<HTMLAudioElement> {\n const existingPool = this.pools.get(assetId);\n if (existingPool) {\n return existingPool;\n }\n\n const poolConfig = { ...this.defaultConfig, ...config };\n\n const pool = new ObjectPool<HTMLAudioElement>(\n () => {\n const audio = new Audio(audioSrc);\n audio.preload = \"auto\";\n audio.load();\n return audio;\n },\n (audio) => {\n audio.pause();\n audio.currentTime = 0;\n },\n poolConfig\n );\n\n this.pools.set(assetId, pool);\n return pool;\n }\n\n /**\n * Get pool for an asset (creates if doesn't exist)\n */\n getPool(assetId: string): ObjectPool<HTMLAudioElement> | undefined {\n return this.pools.get(assetId);\n }\n\n /**\n * Acquire audio element from pool\n */\n acquire(assetId: string): HTMLAudioElement | null {\n const pool = this.pools.get(assetId);\n if (!pool) {\n console.warn(`No pool exists for asset: ${assetId}`);\n return null;\n }\n return pool.acquire();\n }\n\n /**\n * Release audio element back to pool\n */\n release(assetId: string, audio: HTMLAudioElement): void {\n const pool = this.pools.get(assetId);\n if (!pool) {\n console.warn(`No pool exists for asset: ${assetId}`);\n return;\n }\n pool.release(audio);\n }\n\n /**\n * Release all audio elements in all pools\n */\n releaseAll(): void {\n this.pools.forEach((pool) => pool.releaseAll());\n }\n\n /**\n * Get statistics for a specific pool\n */\n getPoolStatistics(assetId: string): PoolStatistics | undefined {\n const pool = this.pools.get(assetId);\n return pool?.getStatistics();\n }\n\n /**\n * Get statistics for all pools\n */\n getAllStatistics(): Map<string, PoolStatistics> {\n const stats = new Map<string, PoolStatistics>();\n this.pools.forEach((pool, assetId) => {\n stats.set(assetId, pool.getStatistics());\n });\n return stats;\n }\n\n /**\n * Remove a pool and dispose its resources\n * @param assetId - The ID of the asset whose pool should be removed\n * @returns true if the pool existed and was removed, false if no pool was found for the asset\n */\n removePool(assetId: string): boolean {\n const pool = this.pools.get(assetId);\n if (pool) {\n pool.clear();\n this.pools.delete(assetId);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all pools\n */\n clearAll(): void {\n this.pools.forEach((pool) => pool.clear());\n this.pools.clear();\n }\n\n /**\n * Check if pool exists for asset\n */\n hasPool(assetId: string): boolean {\n return this.pools.has(assetId);\n }\n\n /**\n * Get total number of pools\n */\n getPoolCount(): number {\n return this.pools.size;\n }\n}\n"],"mappings":";;;;AAuBA,IAAa,aAAb,MAA2B;
|
|
1
|
+
{"version":3,"file":"AudioPool.js","names":[],"sources":["../../src/audio/AudioPool.ts"],"sourcesContent":["/**\n * AudioPool - Object pooling for audio instances\n * Reduces memory allocation overhead for frequently played sounds\n */\n\nexport interface PoolStatistics {\n readonly available: number;\n readonly inUse: number;\n readonly total: number;\n readonly acquisitions: number;\n readonly releases: number;\n readonly created: number;\n}\n\nexport interface PoolConfig {\n readonly initialSize?: number;\n readonly maxSize?: number;\n readonly autoExpand?: boolean;\n}\n\n/**\n * Generic object pool implementation\n */\nexport class ObjectPool<T> {\n private available: T[] = [];\n private inUse = new Set<T>();\n private acquisitionCount = 0;\n private releaseCount = 0;\n private createdCount = 0;\n\n constructor(\n private readonly factory: () => T,\n private readonly reset: (obj: T) => void,\n private readonly config: Required<PoolConfig> = {\n initialSize: 10,\n maxSize: 100,\n autoExpand: true,\n }\n ) {\n // Pre-populate pool\n for (let i = 0; i < config.initialSize; i++) {\n this.available.push(this.createObject());\n }\n }\n\n /**\n * Acquire an object from the pool\n */\n acquire(): T | null {\n this.acquisitionCount++;\n\n let obj = this.available.pop();\n\n if (!obj) {\n // Pool is empty\n if (this.config.autoExpand && this.canExpand()) {\n obj = this.createObject();\n } else {\n console.warn(\"Pool exhausted and cannot expand\");\n return null;\n }\n }\n\n this.inUse.add(obj);\n return obj;\n }\n\n /**\n * Release an object back to the pool\n */\n release(obj: T): void {\n if (!this.inUse.has(obj)) {\n console.warn(\"Attempted to release object not in use\");\n return;\n }\n\n this.releaseCount++;\n this.reset(obj);\n this.inUse.delete(obj);\n this.available.push(obj);\n }\n\n /**\n * Release all objects back to the pool\n * Resets all in-use objects and returns them to the available pool\n */\n releaseAll(): void {\n this.inUse.forEach((obj) => {\n this.releaseCount++;\n this.reset(obj);\n this.available.push(obj);\n });\n this.inUse.clear();\n }\n\n /**\n * Get pool statistics\n */\n getStatistics(): PoolStatistics {\n return {\n available: this.available.length,\n inUse: this.inUse.size,\n total: this.available.length + this.inUse.size,\n acquisitions: this.acquisitionCount,\n releases: this.releaseCount,\n created: this.createdCount,\n };\n }\n\n /**\n * Clear the pool and dispose all objects\n */\n clear(): void {\n this.available = [];\n this.inUse.clear();\n }\n\n private createObject(): T {\n this.createdCount++;\n return this.factory();\n }\n\n private canExpand(): boolean {\n const total = this.available.length + this.inUse.size;\n return total < this.config.maxSize;\n }\n}\n\n/**\n * Specialized audio pool for HTMLAudioElement instances\n */\nexport class AudioElementPool {\n private pools: Map<string, ObjectPool<HTMLAudioElement>> = new Map();\n private defaultConfig: Required<PoolConfig> = {\n initialSize: 5,\n maxSize: 20,\n autoExpand: true,\n };\n\n /**\n * Create a pool for a specific audio asset\n */\n createPool(\n assetId: string,\n audioSrc: string,\n config?: PoolConfig\n ): ObjectPool<HTMLAudioElement> {\n const existingPool = this.pools.get(assetId);\n if (existingPool) {\n return existingPool;\n }\n\n const poolConfig = { ...this.defaultConfig, ...config };\n\n const pool = new ObjectPool<HTMLAudioElement>(\n () => {\n const audio = new Audio(audioSrc);\n audio.preload = \"auto\";\n audio.load();\n return audio;\n },\n (audio) => {\n audio.pause();\n audio.currentTime = 0;\n },\n poolConfig\n );\n\n this.pools.set(assetId, pool);\n return pool;\n }\n\n /**\n * Get pool for an asset (creates if doesn't exist)\n */\n getPool(assetId: string): ObjectPool<HTMLAudioElement> | undefined {\n return this.pools.get(assetId);\n }\n\n /**\n * Acquire audio element from pool\n */\n acquire(assetId: string): HTMLAudioElement | null {\n const pool = this.pools.get(assetId);\n if (!pool) {\n console.warn(`No pool exists for asset: ${assetId}`);\n return null;\n }\n return pool.acquire();\n }\n\n /**\n * Release audio element back to pool\n */\n release(assetId: string, audio: HTMLAudioElement): void {\n const pool = this.pools.get(assetId);\n if (!pool) {\n console.warn(`No pool exists for asset: ${assetId}`);\n return;\n }\n pool.release(audio);\n }\n\n /**\n * Release all audio elements in all pools\n */\n releaseAll(): void {\n this.pools.forEach((pool) => pool.releaseAll());\n }\n\n /**\n * Get statistics for a specific pool\n */\n getPoolStatistics(assetId: string): PoolStatistics | undefined {\n const pool = this.pools.get(assetId);\n return pool?.getStatistics();\n }\n\n /**\n * Get statistics for all pools\n */\n getAllStatistics(): Map<string, PoolStatistics> {\n const stats = new Map<string, PoolStatistics>();\n this.pools.forEach((pool, assetId) => {\n stats.set(assetId, pool.getStatistics());\n });\n return stats;\n }\n\n /**\n * Remove a pool and dispose its resources\n * @param assetId - The ID of the asset whose pool should be removed\n * @returns true if the pool existed and was removed, false if no pool was found for the asset\n */\n removePool(assetId: string): boolean {\n const pool = this.pools.get(assetId);\n if (pool) {\n pool.clear();\n this.pools.delete(assetId);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all pools\n */\n clearAll(): void {\n this.pools.forEach((pool) => pool.clear());\n this.pools.clear();\n }\n\n /**\n * Check if pool exists for asset\n */\n hasPool(assetId: string): boolean {\n return this.pools.has(assetId);\n }\n\n /**\n * Get total number of pools\n */\n getPoolCount(): number {\n return this.pools.size;\n }\n}\n"],"mappings":";;;;AAuBA,IAAa,aAAb,MAA2B;CAQN;CACA;CACA;CATnB,YAAyB,EAAE;CAC3B,wBAAgB,IAAI,KAAQ;CAC5B,mBAA2B;CAC3B,eAAuB;CACvB,eAAuB;CAEvB,YACE,SACA,OACA,SAAgD;EAC9C,aAAa;EACb,SAAS;EACT,YAAY;EACb,EACD;EAPiB,KAAA,UAAA;EACA,KAAA,QAAA;EACA,KAAA,SAAA;EAOjB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,aAAa,KACtC,KAAK,UAAU,KAAK,KAAK,cAAc,CAAC;;;;;CAO5C,UAAoB;EAClB,KAAK;EAEL,IAAI,MAAM,KAAK,UAAU,KAAK;EAE9B,IAAI,CAAC,KAEH,IAAI,KAAK,OAAO,cAAc,KAAK,WAAW,EAC5C,MAAM,KAAK,cAAc;OACpB;GACL,QAAQ,KAAK,mCAAmC;GAChD,OAAO;;EAIX,KAAK,MAAM,IAAI,IAAI;EACnB,OAAO;;;;;CAMT,QAAQ,KAAc;EACpB,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE;GACxB,QAAQ,KAAK,yCAAyC;GACtD;;EAGF,KAAK;EACL,KAAK,MAAM,IAAI;EACf,KAAK,MAAM,OAAO,IAAI;EACtB,KAAK,UAAU,KAAK,IAAI;;;;;;CAO1B,aAAmB;EACjB,KAAK,MAAM,SAAS,QAAQ;GAC1B,KAAK;GACL,KAAK,MAAM,IAAI;GACf,KAAK,UAAU,KAAK,IAAI;IACxB;EACF,KAAK,MAAM,OAAO;;;;;CAMpB,gBAAgC;EAC9B,OAAO;GACL,WAAW,KAAK,UAAU;GAC1B,OAAO,KAAK,MAAM;GAClB,OAAO,KAAK,UAAU,SAAS,KAAK,MAAM;GAC1C,cAAc,KAAK;GACnB,UAAU,KAAK;GACf,SAAS,KAAK;GACf;;;;;CAMH,QAAc;EACZ,KAAK,YAAY,EAAE;EACnB,KAAK,MAAM,OAAO;;CAGpB,eAA0B;EACxB,KAAK;EACL,OAAO,KAAK,SAAS;;CAGvB,YAA6B;EAE3B,OADc,KAAK,UAAU,SAAS,KAAK,MAAM,OAClC,KAAK,OAAO;;;;;;AAO/B,IAAa,mBAAb,MAA8B;CAC5B,wBAA2D,IAAI,KAAK;CACpE,gBAA8C;EAC5C,aAAa;EACb,SAAS;EACT,YAAY;EACb;;;;CAKD,WACE,SACA,UACA,QAC8B;EAC9B,MAAM,eAAe,KAAK,MAAM,IAAI,QAAQ;EAC5C,IAAI,cACF,OAAO;EAKT,MAAM,OAAO,IAAI,iBACT;GACJ,MAAM,QAAQ,IAAI,MAAM,SAAS;GACjC,MAAM,UAAU;GAChB,MAAM,MAAM;GACZ,OAAO;MAER,UAAU;GACT,MAAM,OAAO;GACb,MAAM,cAAc;KAEtB;GAbmB,GAAG,KAAK;GAAe,GAAG;GAa7C,CACD;EAED,KAAK,MAAM,IAAI,SAAS,KAAK;EAC7B,OAAO;;;;;CAMT,QAAQ,SAA2D;EACjE,OAAO,KAAK,MAAM,IAAI,QAAQ;;;;;CAMhC,QAAQ,SAA0C;EAChD,MAAM,OAAO,KAAK,MAAM,IAAI,QAAQ;EACpC,IAAI,CAAC,MAAM;GACT,QAAQ,KAAK,6BAA6B,UAAU;GACpD,OAAO;;EAET,OAAO,KAAK,SAAS;;;;;CAMvB,QAAQ,SAAiB,OAA+B;EACtD,MAAM,OAAO,KAAK,MAAM,IAAI,QAAQ;EACpC,IAAI,CAAC,MAAM;GACT,QAAQ,KAAK,6BAA6B,UAAU;GACpD;;EAEF,KAAK,QAAQ,MAAM;;;;;CAMrB,aAAmB;EACjB,KAAK,MAAM,SAAS,SAAS,KAAK,YAAY,CAAC;;;;;CAMjD,kBAAkB,SAA6C;EAE7D,OADa,KAAK,MAAM,IAAI,QACrB,EAAM,eAAe;;;;;CAM9B,mBAAgD;EAC9C,MAAM,wBAAQ,IAAI,KAA6B;EAC/C,KAAK,MAAM,SAAS,MAAM,YAAY;GACpC,MAAM,IAAI,SAAS,KAAK,eAAe,CAAC;IACxC;EACF,OAAO;;;;;;;CAQT,WAAW,SAA0B;EACnC,MAAM,OAAO,KAAK,MAAM,IAAI,QAAQ;EACpC,IAAI,MAAM;GACR,KAAK,OAAO;GACZ,KAAK,MAAM,OAAO,QAAQ;GAC1B,OAAO;;EAET,OAAO;;;;;CAMT,WAAiB;EACf,KAAK,MAAM,SAAS,SAAS,KAAK,OAAO,CAAC;EAC1C,KAAK,MAAM,OAAO;;;;;CAMpB,QAAQ,SAA0B;EAChC,OAAO,KAAK,MAAM,IAAI,QAAQ;;;;;CAMhC,eAAuB;EACrB,OAAO,KAAK,MAAM"}
|
package/lib/audio/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAE7B,YAAY,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,MAAM,SAAS,CAAC"}
|
package/lib/audio/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/audio/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/audio/index.ts"],"sourcesContent":["/**\n * @module audio\n * @category Audio System\n */\n\nexport * from \"./AudioAssetRegistry\";\nexport * from \"./AudioManager\";\nexport * from \"./AudioProvider\";\nexport * from \"./AudioUtils\";\nexport * from \"./types\";\nexport * from \"./VariantSelector\";\nexport * from \"./AudioCache\";\n\nexport type {\n AudioAsset,\n AudioCategory,\n AudioPlaybackOptions,\n SoundEffectId,\n} from \"./types\";\n"],"mappings":""}
|
package/lib/audio/types.d.ts
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Type definitions for audio
|
|
3
|
-
*
|
|
2
|
+
* Type definitions for the Black Trigram audio system.
|
|
3
|
+
*
|
|
4
|
+
* Covers audio categories, spatial audio contexts, asset definitions,
|
|
5
|
+
* combat audio mapping, and the manager interface used by all audio
|
|
6
|
+
* subsystems.
|
|
7
|
+
*
|
|
8
|
+
* @module audio/types
|
|
9
|
+
* @category Audio
|
|
10
|
+
* @korean 오디오시스템타입
|
|
4
11
|
*/
|
|
5
12
|
import { KoreanText, PlayerArchetype, TrigramStance } from "../types";
|
|
13
|
+
/** Audio category discriminator for routing to the correct mixer channel */
|
|
6
14
|
export declare enum AudioCategory {
|
|
7
15
|
SFX = "sfx",
|
|
8
16
|
MUSIC = "music",
|
|
9
17
|
VOICE = "voice",
|
|
10
18
|
UI = "ui"
|
|
11
19
|
}
|
|
20
|
+
/** Spatial audio context for 3D positional sound */
|
|
12
21
|
export interface AudioContext3D {
|
|
13
22
|
readonly position: {
|
|
14
23
|
x: number;
|
|
@@ -28,15 +37,21 @@ export interface AudioContext3D {
|
|
|
28
37
|
readonly maxDistance?: number;
|
|
29
38
|
readonly rolloffFactor?: number;
|
|
30
39
|
}
|
|
40
|
+
/** Opaque string identifier for a sound effect */
|
|
31
41
|
export type SoundEffectId = string;
|
|
42
|
+
/** Opaque string identifier for a music track */
|
|
32
43
|
export type MusicTrackId = string;
|
|
44
|
+
/** Opaque string identifier for a voice line */
|
|
33
45
|
export type VoiceLineId = string;
|
|
46
|
+
/** Supported audio MIME types */
|
|
34
47
|
export type AudioFormat = "audio/mp3" | "audio/wav" | "audio/ogg" | "audio/webm";
|
|
48
|
+
/** DSP effect applied to an audio mixer channel */
|
|
35
49
|
export interface AudioEffect {
|
|
36
50
|
readonly type: "reverb" | "delay" | "distortion" | "filter" | "compressor";
|
|
37
51
|
readonly parameters: Record<string, number>;
|
|
38
52
|
readonly enabled: boolean;
|
|
39
53
|
}
|
|
54
|
+
/** A single audio mixer channel with volume, mute, and effect chain */
|
|
40
55
|
export interface AudioChannel {
|
|
41
56
|
readonly id: string;
|
|
42
57
|
readonly category: AudioCategory;
|
|
@@ -45,6 +60,7 @@ export interface AudioChannel {
|
|
|
45
60
|
readonly effects: readonly AudioEffect[];
|
|
46
61
|
readonly connectedSources: readonly string[];
|
|
47
62
|
}
|
|
63
|
+
/** Runtime capabilities detected from the browser's audio engine */
|
|
48
64
|
export interface AudioCapabilities {
|
|
49
65
|
readonly supportsWebAudio: boolean;
|
|
50
66
|
readonly supportsHowler: boolean;
|
package/lib/audio/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audio/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audio/types.ts"],"names":[],"mappings":"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"}
|
package/lib/audio/types.js
CHANGED
package/lib/audio/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/audio/types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/audio/types.ts"],"sourcesContent":["/**\n * Type definitions for the Black Trigram audio system.\n *\n * Covers audio categories, spatial audio contexts, asset definitions,\n * combat audio mapping, and the manager interface used by all audio\n * subsystems.\n *\n * @module audio/types\n * @category Audio\n * @korean 오디오시스템타입\n */\n\nimport { KoreanText, PlayerArchetype, TrigramStance } from \"@/types\";\n\n/** Audio category discriminator for routing to the correct mixer channel */\nexport enum AudioCategory {\n SFX = \"sfx\",\n MUSIC = \"music\",\n VOICE = \"voice\",\n UI = \"ui\",\n}\n\n/** Spatial audio context for 3D positional sound */\nexport interface AudioContext3D {\n readonly position: { x: number; y: number; z?: number };\n readonly velocity?: { x: number; y: number; z?: number };\n readonly orientation?: { x: number; y: number; z?: number };\n readonly maxDistance?: number;\n readonly rolloffFactor?: number;\n}\n\n/** Opaque string identifier for a sound effect */\nexport type SoundEffectId = string;\n/** Opaque string identifier for a music track */\nexport type MusicTrackId = string;\n/** Opaque string identifier for a voice line */\nexport type VoiceLineId = string;\n\n/** Supported audio MIME types */\nexport type AudioFormat =\n | \"audio/mp3\"\n | \"audio/wav\"\n | \"audio/ogg\"\n | \"audio/webm\";\n\n/** DSP effect applied to an audio mixer channel */\nexport interface AudioEffect {\n readonly type: \"reverb\" | \"delay\" | \"distortion\" | \"filter\" | \"compressor\";\n readonly parameters: Record<string, number>;\n readonly enabled: boolean;\n}\n\n/** A single audio mixer channel with volume, mute, and effect chain */\nexport interface AudioChannel {\n readonly id: string;\n readonly category: AudioCategory;\n readonly volume: number;\n readonly muted: boolean;\n readonly effects: readonly AudioEffect[];\n readonly connectedSources: readonly string[];\n}\n\n/** Runtime capabilities detected from the browser's audio engine */\nexport interface AudioCapabilities {\n readonly supportsWebAudio: boolean;\n readonly supportsHowler: boolean;\n readonly maxSources: number;\n readonly formats: readonly string[];\n readonly spatialAudio: boolean;\n readonly realTimeEffects: boolean;\n}\n\nexport interface IAudioManager {\n readonly isInitialized: boolean;\n readonly masterVolume: number;\n readonly sfxVolume: number;\n readonly musicVolume: number;\n readonly muted: boolean;\n\n initialize(config?: AudioConfig): Promise<void>;\n loadAsset(asset: AudioAsset): Promise<void>;\n setVolume(type: \"master\" | \"sfx\" | \"music\" | \"voice\", volume: number): void;\n playMusic(trackId: string): Promise<void>;\n playSoundEffect(soundId: string): Promise<void>;\n playSFX(soundId: string, volume?: number): Promise<void>;\n stopMusic(): void;\n mute(): void;\n unmute(): void;\n fadeIn(trackId: string, duration?: number): Promise<void>;\n fadeOut(duration?: number): Promise<void>;\n playKoreanTechniqueSound(\n techniqueId: string,\n archetype: string\n ): Promise<void>;\n playTrigramStanceSound(stance: string): Promise<void>;\n playVitalPointHitSound(severity: string): Promise<void>;\n playDojiangAmbience(): Promise<void>;\n}\n\nexport interface AudioAsset {\n readonly id: string;\n readonly name?: string;\n readonly type: \"sound\" | \"music\" | \"voice\";\n readonly url: string;\n readonly formats: readonly string[];\n readonly loaded: boolean;\n readonly volume?: number;\n readonly category?: string;\n}\n\nexport interface MusicTrack extends AudioAsset {\n readonly type: \"music\";\n readonly title?: KoreanText;\n readonly artist?: string;\n readonly album?: string;\n readonly bpm?: number;\n readonly loop?: boolean;\n readonly fadeInTime?: number;\n readonly fadeOutTime?: number;\n readonly variations?: readonly string[];\n readonly category: \"music\" | \"voice\";\n}\n\nexport interface SoundEffect extends AudioAsset {\n readonly type: \"sound\";\n readonly pitch?: number;\n readonly variations?: readonly string[];\n readonly category: \"sfx\" | \"ui\";\n}\n\nexport interface VoiceLine extends AudioAsset {\n readonly type: \"voice\";\n readonly text: KoreanText;\n readonly archetype?: PlayerArchetype;\n readonly emotion?:\n | \"neutral\"\n | \"aggressive\"\n | \"defensive\"\n | \"victorious\"\n | \"defeated\";\n category?: AudioCategory;\n volume?: number;\n}\n\nexport interface AudioConfig {\n readonly enableSpatialAudio: boolean;\n readonly maxSimultaneousSounds: number;\n readonly audioFormats: readonly string[];\n readonly fadeTransitionTime: number;\n readonly defaultVolume?: number;\n masterVolume?: number;\n musicVolume?: number;\n sfxVolume?: number;\n}\n\nexport interface AudioEvent {\n readonly type: \"play\" | \"stop\" | \"pause\" | \"resume\" | \"volume\" | \"fade\";\n readonly assetId: string;\n readonly volume?: number;\n readonly delay?: number;\n readonly fadeTime?: number;\n readonly loop?: boolean;\n readonly priority?: number;\n}\n\nexport interface CombatAudioMap {\n readonly attacks: Record<string, SoundEffectId>;\n readonly impacts: Record<string, SoundEffectId>;\n readonly stances: Record<TrigramStance, string>;\n readonly environments: Record<string, SoundEffectId>;\n readonly ui: Record<string, SoundEffectId>;\n}\n\nexport interface AudioState {\n readonly isPlaying: boolean;\n readonly isPaused: boolean;\n readonly currentTime: number;\n readonly duration: number;\n readonly volume: number;\n readonly loop: boolean;\n readonly masterVolume: number;\n readonly sfxVolume: number;\n readonly musicVolume: number;\n readonly muted: boolean;\n readonly currentMusicTrack: string | null;\n readonly isInitialized: boolean;\n readonly fallbackMode: boolean;\n}\n\nexport interface AudioPlaybackOptions {\n readonly volume?: number;\n readonly loop?: boolean;\n readonly fadeIn?: number;\n readonly fadeOut?: number;\n readonly delay?: number;\n readonly startTime?: number;\n readonly endTime?: number;\n readonly rate?: number;\n}\n\nexport interface ProceduralSoundConfig {\n readonly frequency: number;\n readonly duration: number;\n readonly type: \"sine\" | \"square\" | \"sawtooth\" | \"triangle\" | \"noise\";\n readonly attack?: number;\n readonly decay?: number;\n readonly sustain?: number;\n readonly release?: number;\n readonly volume?: number;\n}\n\nexport interface CombatAudioEvent {\n readonly type: \"attack\" | \"hit\" | \"block\" | \"dodge\" | \"stance_change\";\n readonly technique?: string;\n readonly stance?: string;\n readonly damage?: number;\n readonly critical?: boolean;\n}\n\n/**\n * Audio-specific body regions for impact sound mapping\n * Maps to Korean martial arts vital point locations\n */\nexport type AudioBodyRegion =\n | \"head\" // 두부 (Head/Skull): temple, jaw, neck\n | \"torso\" // 몸통 (Torso): ribs, sternum, solar plexus, organs\n | \"arms\" // 팔 (Arms): shoulder, elbow, forearm, wrist\n | \"legs\" // 다리 (Legs): hip, knee, shin, ankle\n | \"soft_tissue\"; // 연조직 (Soft tissue): muscle, flesh, non-bone areas\n\n/**\n * Impact intensity levels for bone/flesh contact\n * Determines audio selection and volume variation\n */\nexport type ImpactIntensity =\n | \"light\" // 경타 (Light): Glancing blows, minimal damage\n | \"medium\" // 중타 (Medium): Solid contact, moderate damage\n | \"heavy\" // 강타 (Heavy): Devastating strikes, severe damage\n | \"critical\" // 급소타 (Critical): Vital point precision strikes\n | \"fracture\"; // 골절 (Fracture): Bone-breaking force, <30% health\n\n/**\n * Bone impact audio event with body region and intensity\n * Used for anatomically accurate combat sound feedback\n */\nexport interface BoneImpactEvent {\n readonly region: AudioBodyRegion;\n readonly intensity: ImpactIntensity;\n readonly vitalPoint?: boolean; // True if hitting a vital point\n readonly remainingHealth?: number; // For fracture detection (<30%)\n}\n\nexport interface AudioLoadingState {\n readonly total: number;\n readonly loaded: number;\n readonly failed: number;\n readonly currentAsset?: string;\n readonly progress: number;\n readonly errors: readonly string[];\n}\nexport interface AudioSystemInterface {\n playSFX: (id: SoundEffectId, options?: AudioPlaybackOptions) => void;\n playMusic: (id: MusicTrackId, options?: AudioPlaybackOptions) => void;\n stopMusic: (id?: MusicTrackId, fadeOutDuration?: number) => void;\n setVolume: (type: \"master\" | \"sfx\" | \"music\", volume: number) => void;\n loadAudioAsset: (asset: AudioAsset) => Promise<void>;\n isMusicPlaying: (id?: MusicTrackId) => boolean;\n}\n\nexport interface AudioManagerInterface extends IAudioManager {}\n"],"mappings":";;AAeA,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,SAAM;CACN,cAAA,WAAQ;CACR,cAAA,WAAQ;CACR,cAAA,QAAK;;KACN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WindParticles3D.d.ts","sourceRoot":"","sources":["../../../src/components/effects/WindParticles3D.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAA+C,MAAM,OAAO,CAAC;AA6CpE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,qCAAqC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"WindParticles3D.d.ts","sourceRoot":"","sources":["../../../src/components/effects/WindParticles3D.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAA+C,MAAM,OAAO,CAAC;AA6CpE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,qCAAqC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAyM1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,IAAI,YAAY,EAC1B,QAAQ,EACR,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/components/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/components/index.ts"],"sourcesContent":["export * from \"./screens/combat\";\nexport { TrainingScreen3D } from \"./screens/training\";\nexport type { TrainingScreen3DProps } from \"./screens/training\";\nexport { EndScreen3D } from \"./screens/endscreen\";\nexport type { EndScreen3DProps } from \"./screens/endscreen\";\nexport { ControlsScreen3D } from \"./screens/controls/ControlsScreen3D\";\nexport type { ControlsScreen3DProps } from \"./screens/controls/ControlsScreen3D\";\nexport { IntroScreen3D } from \"./screens/intro/IntroScreen3D\";\nexport type { IntroScreen3DProps } from \"./screens/intro/IntroScreen3D\";\nexport { PhilosophyScreen3D } from \"./screens/philosophy/PhilosophyScreen3D\";\nexport type { PhilosophyScreen3DProps } from \"./screens/philosophy/PhilosophyScreen3D\";\n\nexport {\n ArchetypeCard,\n KoreanButton,\n KoreanPanel,\n KoreanText as KoreanText3D,\n MenuList,\n ProgressBar,\n} from \"./shared/three\";\nexport type {\n ArchetypeCardProps,\n KoreanButtonProps,\n KoreanPanelProps,\n KoreanTextProps,\n MenuItem,\n MenuListProps,\n ProgressBarProps,\n ProgressBarType,\n} from \"./shared/three\";\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CombatScreen3D.d.ts","sourceRoot":"","sources":["../../../../src/components/screens/combat/CombatScreen3D.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAAa,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB1D,OAAO,EAEL,QAAQ,EAIT,MAAM,gBAAgB,CAAC;AAkFxB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAC1B,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"CombatScreen3D.d.ts","sourceRoot":"","sources":["../../../../src/components/screens/combat/CombatScreen3D.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAAa,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB1D,OAAO,EAEL,QAAQ,EAIT,MAAM,gBAAgB,CAAC;AAkFxB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAC1B,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AA6BD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAskFxD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|