blacktrigram 0.7.47 → 0.7.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App2.js.map +1 -1
- package/lib/audio/AudioAssetLoader.js.map +1 -1
- package/lib/audio/AudioAssetRegistry.js.map +1 -1
- package/lib/audio/AudioCache.js.map +1 -1
- package/lib/audio/AudioManager.js.map +1 -1
- package/lib/audio/AudioMonitor.js.map +1 -1
- package/lib/audio/AudioPool.js.map +1 -1
- package/lib/audio/AudioProvider.js.map +1 -1
- package/lib/audio/AudioUtils.js.map +1 -1
- package/lib/audio/BoneImpactAudioMap.js.map +1 -1
- package/lib/audio/VariantSelector.js.map +1 -1
- package/lib/audio/types.js.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.js +29 -25
- package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatButtons.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.js.map +1 -1
- package/lib/components/screens/combat/components/controls/ControlsGuide.js.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenuButton.js.map +1 -1
- package/lib/components/screens/combat/components/controls/QuickSettings.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundDisplayStatus.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js +2 -2
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js +2 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
- package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.js +4 -2
- package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.js +11 -5
- package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/ControlCategoryTabsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/Key3D.js.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/MatchStatisticsDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
- package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.js +3 -11
- package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js +2 -2
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts +1 -0
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.js +6 -4
- package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.js +11 -5
- package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
- package/lib/components/shared/base/BaseButton.js.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
- package/lib/components/shared/base/BasePanel.js.map +1 -1
- package/lib/components/shared/base/BaseText.js.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
- package/lib/components/shared/mobile/HapticController.js.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
- package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.js +7 -5
- package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
- package/lib/components/shared/three/ui/MenuList.js.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
- package/lib/components/shared/ui/BackButton.js.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
- package/lib/components/shared/ui/CombatTimer.js.map +1 -1
- package/lib/components/shared/ui/ErrorModal.js.map +1 -1
- package/lib/components/shared/ui/LoadingState.js.map +1 -1
- package/lib/components/shared/ui/SplashScreen.js +2 -2
- package/lib/components/shared/ui/SplashScreen.js.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
- package/lib/components/shared/ui/VolumeControl.js.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
- package/lib/constants/bodyDimensions.js.map +1 -1
- package/lib/constants/bodyRenderingConstants.js.map +1 -1
- package/lib/data/archetypeClothing.js.map +1 -1
- package/lib/data/archetypePhysicalAttributes.js.map +1 -1
- package/lib/data/techniqueMappings.js.map +1 -1
- package/lib/data/techniques.js.map +1 -1
- package/lib/hooks/useActionFeedback.js.map +1 -1
- package/lib/hooks/useBalanceAnimations.js.map +1 -1
- package/lib/hooks/useCombatTimer.js.map +1 -1
- package/lib/hooks/useDebounce.js.map +1 -1
- package/lib/hooks/useHUDLayout.d.ts.map +1 -1
- package/lib/hooks/useHUDLayout.js +3 -2
- package/lib/hooks/useHUDLayout.js.map +1 -1
- package/lib/hooks/useHandPoseTransitions.js.map +1 -1
- package/lib/hooks/useKeyboardControls.js.map +1 -1
- package/lib/hooks/useMatchCountdown.js.map +1 -1
- package/lib/hooks/useMuscleActivation.js.map +1 -1
- package/lib/hooks/usePauseMenu.js.map +1 -1
- package/lib/hooks/usePlayerAnimation.js.map +1 -1
- package/lib/hooks/useResponsiveLayout.js.map +1 -1
- package/lib/hooks/useRoundTransition.js.map +1 -1
- package/lib/hooks/useSkeletalAnimation.d.ts.map +1 -1
- package/lib/hooks/useSkeletalAnimation.js +1 -1
- package/lib/hooks/useSkeletalAnimation.js.map +1 -1
- package/lib/hooks/useTechniqueSelection.js.map +1 -1
- package/lib/hooks/useThrottle.js.map +1 -1
- package/lib/hooks/useTouchControls.js.map +1 -1
- package/lib/hooks/useWebGLContextLossHandler.js.map +1 -1
- package/lib/hooks/useWindowSize.js.map +1 -1
- package/lib/systems/CombatSystem.js.map +1 -1
- package/lib/systems/EffectCalculator.js.map +1 -1
- package/lib/systems/LayoutSystem.js.map +1 -1
- package/lib/systems/PlayerEffectManager.js.map +1 -1
- package/lib/systems/ResponsiveScaling.js.map +1 -1
- package/lib/systems/TrigramSystem.js.map +1 -1
- package/lib/systems/VitalPointSystem.js.map +1 -1
- package/lib/systems/ai/AIPersonality.js.map +1 -1
- package/lib/systems/ai/AdaptiveDifficulty.js +16 -16
- package/lib/systems/ai/AdaptiveDifficulty.js.map +1 -1
- package/lib/systems/ai/ArchetypeEnforcer.js.map +1 -1
- package/lib/systems/ai/ComboSystem.js.map +1 -1
- package/lib/systems/ai/DecisionTree.js.map +1 -1
- package/lib/systems/ai/TrainingAI.js.map +1 -1
- package/lib/systems/ai/types.js.map +1 -1
- package/lib/systems/animation/builders/AnimationBuilder.js.map +1 -1
- package/lib/systems/animation/builders/HandPoseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/HandPoses.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeConfig.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.d.ts +6 -0
- package/lib/systems/animation/builders/KickPhaseApplicator.d.ts.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.js +16 -9
- package/lib/systems/animation/builders/KickPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/KoreanGuardPositions.d.ts +4 -4
- package/lib/systems/animation/builders/KoreanGuardPositions.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js +5 -5
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsConstants.d.ts +112 -71
- package/lib/systems/animation/builders/MartialArtsConstants.d.ts.map +1 -1
- package/lib/systems/animation/builders/MartialArtsConstants.js +113 -72
- package/lib/systems/animation/builders/MartialArtsConstants.js.map +1 -1
- package/lib/systems/animation/builders/MartialPoseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/PunchPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
- package/lib/systems/animation/builders/TrigramGuardApplicator.js.map +1 -1
- package/lib/systems/animation/catalogs/AttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/BasicAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/ComboAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/DarkOpsAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/DefensiveAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/ElbowKneeAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/EnhancedAttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/EnhancedElbowKneeAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/FootworkSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GamRedirectionAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GamStanceAnimations.js +21 -0
- package/lib/systems/animation/catalogs/GamStanceAnimations.js.map +1 -0
- package/lib/systems/animation/catalogs/GamTechniqueAnimations.js +34 -2
- package/lib/systems/animation/catalogs/GamTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GanStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GanTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GeonStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts +9 -0
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts.map +1 -1
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.js +288 -0
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.js.map +1 -0
- package/lib/systems/animation/catalogs/GrapplingAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/JinStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/JinTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/KickAnimations.d.ts +2 -2
- package/lib/systems/animation/catalogs/KickAnimations.js +2 -2
- package/lib/systems/animation/catalogs/KickAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/LiStanceAnimations.js +14 -1
- package/lib/systems/animation/catalogs/LiStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/LiTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/MovementAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.d.ts +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.js +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SonStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SonTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SpecializedPunchAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceAttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceGuardPoses.d.ts +6 -6
- package/lib/systems/animation/catalogs/StanceGuardPoses.js +36 -36
- package/lib/systems/animation/catalogs/StanceGuardPoses.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceIdleAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceLocomotionAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StepSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/TaeJointLockAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/TaeStanceAnimations.js.map +1 -1
- package/lib/systems/animation/constants/AnatomicalLimits.js.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
- package/lib/systems/animation/core/AnimationOptimizations.js.map +1 -1
- package/lib/systems/animation/core/AnimationPriority.js +15 -15
- package/lib/systems/animation/core/AnimationPriority.js.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.d.ts +30 -0
- package/lib/systems/animation/core/AnimationRegistry.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.js +74 -12
- package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
- package/lib/systems/animation/core/AnimationStateMachine.js +16 -16
- package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.js +34 -0
- package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapping.js.map +1 -1
- package/lib/systems/animation/core/index.d.ts +1 -1
- package/lib/systems/animation/core/index.d.ts.map +1 -1
- package/lib/systems/animation/core/types.d.ts +24 -0
- package/lib/systems/animation/core/types.d.ts.map +1 -1
- package/lib/systems/animation/core/types.js +27 -11
- package/lib/systems/animation/core/types.js.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
- package/lib/systems/animation/systems/MuscleActivation.js.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
- package/lib/systems/bodypart/types.js.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.js +19 -19
- package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
- package/lib/systems/breathing/feedback.js.map +1 -1
- package/lib/systems/breathing/integration.js.map +1 -1
- package/lib/systems/combat/BalanceSystem.js +19 -19
- package/lib/systems/combat/BalanceSystem.js.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
- package/lib/systems/combat/CombatStateSystem.js +17 -17
- package/lib/systems/combat/CombatStateSystem.js.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.js +24 -24
- package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
- package/lib/systems/combat/FallIntegration.js.map +1 -1
- package/lib/systems/combat/GrappleSystem.js.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
- package/lib/systems/combat/PainResponseSystem.js +21 -21
- package/lib/systems/combat/PainResponseSystem.js.map +1 -1
- package/lib/systems/combat/TrainingCombatSystem.js.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
- package/lib/systems/combat/typeGuards.js.map +1 -1
- package/lib/systems/effects.js.map +1 -1
- package/lib/systems/game.js.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
- package/lib/systems/movement/helpers/AccelerationUpdater.js.map +1 -1
- package/lib/systems/movement/helpers/accelerationUtils.js.map +1 -1
- package/lib/systems/movement/integration.js.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
- package/lib/systems/physics/CollisionDetection.js.map +1 -1
- package/lib/systems/physics/CoordinateMapper.js.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
- package/lib/systems/physics/MovementPhysics.js.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.js +6 -6
- package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
- package/lib/systems/trigram/KoreanCulture.js.map +1 -1
- package/lib/systems/trigram/KoreanTechniques.js.map +1 -1
- package/lib/systems/trigram/StanceManager.js.map +1 -1
- package/lib/systems/trigram/TransitionCalculator.js.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
- package/lib/systems/trigram/techniques/DarkOpsTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GamTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GanTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GeonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/JinTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/LiTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/SonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/TaeTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/TechniqueConfig.js.map +1 -1
- package/lib/systems/trigram/techniques/index.js.map +1 -1
- package/lib/systems/trigram/types/GonTechniqueExtensions.js.map +1 -1
- package/lib/systems/trigram/types.js.map +1 -1
- package/lib/systems/types.js.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
- package/lib/systems/vitalpoint/HitDetection.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanAnatomy.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
- package/lib/systems/vitalpoint/MeridianVitalPointMapping.js.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
- package/lib/types/AccessibilityTypes.js.map +1 -1
- package/lib/types/LayoutTypes.js.map +1 -1
- package/lib/types/PhysicsTypes.js.map +1 -1
- package/lib/types/common.js.map +1 -1
- package/lib/types/constants/animations.js.map +1 -1
- package/lib/types/constants/colors.js.map +1 -1
- package/lib/types/constants/designSystem.js.map +1 -1
- package/lib/types/constants/index.js.map +1 -1
- package/lib/types/constants/layout.d.ts +21 -0
- package/lib/types/constants/layout.d.ts.map +1 -1
- package/lib/types/constants/layout.js +22 -1
- package/lib/types/constants/layout.js.map +1 -1
- package/lib/types/constants/performance.js.map +1 -1
- package/lib/types/constants/typography.js.map +1 -1
- package/lib/types/constants/ui.js.map +1 -1
- package/lib/types/facial.js +19 -19
- package/lib/types/facial.js.map +1 -1
- package/lib/types/hand-animation.js.map +1 -1
- package/lib/types/injury.js.map +1 -1
- package/lib/types/muscle.js.map +1 -1
- package/lib/types/physics.js.map +1 -1
- package/lib/types/physicsConstants.js.map +1 -1
- package/lib/types/player-visual.d.ts +1 -1
- package/lib/types/player-visual.d.ts.map +1 -1
- package/lib/types/skeletal.js.map +1 -1
- package/lib/types/techniqueId.js.map +1 -1
- package/lib/utils/accessibility.js.map +1 -1
- package/lib/utils/arenaWorldDimensions.js.map +1 -1
- package/lib/utils/assetConfig.js.map +1 -1
- package/lib/utils/characterScaling.js.map +1 -1
- package/lib/utils/colorHelpers.js.map +1 -1
- package/lib/utils/colorUtils.js.map +1 -1
- package/lib/utils/combatReadiness.js.map +1 -1
- package/lib/utils/controlMapping.js.map +1 -1
- package/lib/utils/deviceDetection.js +6 -7
- package/lib/utils/deviceDetection.js.map +1 -1
- package/lib/utils/effectUtils.js.map +1 -1
- package/lib/utils/fabricTextures.js.map +1 -1
- package/lib/utils/hapticFeedback.js.map +1 -1
- package/lib/utils/haptics.js.map +1 -1
- package/lib/utils/htmlOverlayHelpers.js.map +1 -1
- package/lib/utils/inputSystem.js.map +1 -1
- package/lib/utils/koreanThemeHelpers.js.map +1 -1
- package/lib/utils/math.js.map +1 -1
- package/lib/utils/mobileLayoutHelpers.js.map +1 -1
- package/lib/utils/mobileUIUtils.js.map +1 -1
- package/lib/utils/performance/PerformanceMonitor.js.map +1 -1
- package/lib/utils/performance/PerformanceOverlay3D.js.map +1 -1
- package/lib/utils/performance/usePerformanceMonitor.js.map +1 -1
- package/lib/utils/performanceOptimization.js.map +1 -1
- package/lib/utils/player3DHelpers.js.map +1 -1
- package/lib/utils/playerUtils.js.map +1 -1
- package/lib/utils/responsiveLayout.js.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.d.ts +7 -0
- package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.js +16 -2
- package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
- package/lib/utils/responsiveOrientationConstants.js.map +1 -1
- package/lib/utils/safeAreaUtils.js.map +1 -1
- package/lib/utils/sharedPhysicsConfig.js.map +1 -1
- package/lib/utils/skeletonScaling.js.map +1 -1
- package/lib/utils/stanceHelpers.js.map +1 -1
- package/lib/utils/threeObjectPool.js.map +1 -1
- package/lib/utils/visualEffects.js.map +1 -1
- package/package.json +7 -7
|
@@ -13,6 +13,11 @@ import { KICK_PHASES } from "./MartialArtsConstants";
|
|
|
13
13
|
/**
|
|
14
14
|
* Interface for basic kick phases (CHAMBER, EXTENSION, HIGH_PEAK)
|
|
15
15
|
* These phases have pelvis as a tuple [x, y, z]
|
|
16
|
+
*
|
|
17
|
+
* Optional `pelvisY` overrides `pelvis[1]` when present and is used by
|
|
18
|
+
* EXTENSION-type phases to express the support-leg hip-pivot torque
|
|
19
|
+
* (축발회전 / Chukbal Hoejeon) independently from the lateral tilt
|
|
20
|
+
* encoded in `pelvis[0]` (forward) and `pelvis[2]` (lateral).
|
|
16
21
|
*/
|
|
17
22
|
interface BasicKickPhase {
|
|
18
23
|
readonly hip: readonly [number, number, number];
|
|
@@ -20,6 +25,7 @@ interface BasicKickPhase {
|
|
|
20
25
|
readonly ankle?: readonly [number, number, number];
|
|
21
26
|
readonly supportKnee?: readonly [number, number, number];
|
|
22
27
|
readonly pelvis?: readonly [number, number, number];
|
|
28
|
+
readonly pelvisY?: number;
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
31
|
* Interface for rotational kick phases (ROUNDHOUSE_CHAMBER, SIDE_CHAMBER)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KickPhaseApplicator.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/builders/KickPhaseApplicator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"KickPhaseApplicator.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/builders/KickPhaseApplicator.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,12 +35,13 @@ function applyKickPhaseToConfig(kf, phase, options = {}) {
|
|
|
35
35
|
const kneeBone = side === "right" ? BoneName.KNEE_R : BoneName.KNEE_L;
|
|
36
36
|
const footBone = side === "right" ? BoneName.FOOT_R : BoneName.FOOT_L;
|
|
37
37
|
const supportKneeBone = side === "right" ? BoneName.KNEE_L : BoneName.KNEE_R;
|
|
38
|
+
const sideMirror = side === "right" ? 1 : -1;
|
|
38
39
|
kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);
|
|
39
40
|
kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);
|
|
40
41
|
if (phase.supportKnee) kf.rotate(supportKneeBone, phase.supportKnee[0], phase.supportKnee[1], phase.supportKnee[2]);
|
|
41
42
|
if (includePelvis && phase.pelvis) {
|
|
42
|
-
const
|
|
43
|
-
kf.rotate(BoneName.PELVIS, phase.pelvis[0],
|
|
43
|
+
const pelvisYRaw = typeof phase.pelvisY === "number" ? phase.pelvisY : phase.pelvis[1];
|
|
44
|
+
kf.rotate(BoneName.PELVIS, phase.pelvis[0], pelvisYRaw * sideMirror, phase.pelvis[2] * sideMirror);
|
|
44
45
|
}
|
|
45
46
|
if (includeAnkle && phase.ankle) kf.rotate(footBone, phase.ankle[0], phase.ankle[1], phase.ankle[2]);
|
|
46
47
|
if (resetFoot) kf.rotate(footBone, 0, 0, 0);
|
|
@@ -60,10 +61,11 @@ function applyRoundhousePhaseToConfig(kf, phase, options = {}) {
|
|
|
60
61
|
const { side = "right", highlightKickingFoot = false } = options;
|
|
61
62
|
const hipBone = side === "right" ? BoneName.HIP_R : BoneName.HIP_L;
|
|
62
63
|
const kneeBone = side === "right" ? BoneName.KNEE_R : BoneName.KNEE_L;
|
|
64
|
+
const sideMirror = side === "right" ? 1 : -1;
|
|
63
65
|
kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);
|
|
64
66
|
kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);
|
|
65
|
-
if (phase.pelvisY !== void 0) kf.rotate(BoneName.PELVIS, 0, phase.pelvisY, 0);
|
|
66
|
-
if (phase.spineY !== void 0) kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY, 0);
|
|
67
|
+
if (phase.pelvisY !== void 0) kf.rotate(BoneName.PELVIS, 0, phase.pelvisY * sideMirror, 0);
|
|
68
|
+
if (phase.spineY !== void 0) kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY * sideMirror, 0);
|
|
67
69
|
if (highlightKickingFoot) kf.setFootHighlight(side, true);
|
|
68
70
|
}
|
|
69
71
|
/**
|
|
@@ -80,13 +82,14 @@ function applySideKickPhaseToConfig(kf, phase, options = {}) {
|
|
|
80
82
|
const { side = "right", highlightKickingFoot = false } = options;
|
|
81
83
|
const hipBone = side === "right" ? BoneName.HIP_R : BoneName.HIP_L;
|
|
82
84
|
const kneeBone = side === "right" ? BoneName.KNEE_R : BoneName.KNEE_L;
|
|
85
|
+
const sideMirror = side === "right" ? 1 : -1;
|
|
83
86
|
kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);
|
|
84
87
|
kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);
|
|
85
|
-
if (phase.pelvisY !== void 0) kf.rotate(BoneName.PELVIS, 0, phase.pelvisY, 0);
|
|
88
|
+
if (phase.pelvisY !== void 0) kf.rotate(BoneName.PELVIS, 0, phase.pelvisY * sideMirror, 0);
|
|
86
89
|
if (phase.spineY !== void 0) {
|
|
87
|
-
const lean = phase.spineLean ?? 0;
|
|
88
|
-
kf.rotate(BoneName.SPINE_LOWER, 0, phase.spineY, 0);
|
|
89
|
-
kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY, lean);
|
|
90
|
+
const lean = (phase.spineLean ?? 0) * sideMirror;
|
|
91
|
+
kf.rotate(BoneName.SPINE_LOWER, 0, phase.spineY * sideMirror, 0);
|
|
92
|
+
kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY * sideMirror, lean);
|
|
90
93
|
}
|
|
91
94
|
if (highlightKickingFoot) kf.setFootHighlight(side, true);
|
|
92
95
|
}
|
|
@@ -106,11 +109,15 @@ function applyHighPeakPhaseToConfig(kf, phase, options = {}) {
|
|
|
106
109
|
const kneeBone = side === "right" ? BoneName.KNEE_R : BoneName.KNEE_L;
|
|
107
110
|
const footBone = side === "right" ? BoneName.FOOT_R : BoneName.FOOT_L;
|
|
108
111
|
const supportKneeBone = side === "right" ? BoneName.KNEE_L : BoneName.KNEE_R;
|
|
112
|
+
const sideMirror = side === "right" ? 1 : -1;
|
|
109
113
|
kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);
|
|
110
114
|
kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);
|
|
111
115
|
if (phase.ankle) kf.rotate(footBone, phase.ankle[0], phase.ankle[1], phase.ankle[2]);
|
|
112
116
|
if (phase.supportKnee) kf.rotate(supportKneeBone, phase.supportKnee[0], phase.supportKnee[1], phase.supportKnee[2]);
|
|
113
|
-
if (phase.pelvis)
|
|
117
|
+
if (phase.pelvis) {
|
|
118
|
+
const pelvisYRaw = typeof phase.pelvisY === "number" ? phase.pelvisY : phase.pelvis[1];
|
|
119
|
+
kf.rotate(BoneName.PELVIS, phase.pelvis[0], pelvisYRaw * sideMirror, phase.pelvis[2] * sideMirror);
|
|
120
|
+
}
|
|
114
121
|
if (highlightKickingFoot) kf.setFootHighlight(side, true);
|
|
115
122
|
}
|
|
116
123
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KickPhaseApplicator.js","names":[],"sources":["../../../../src/systems/animation/builders/KickPhaseApplicator.ts"],"sourcesContent":["/**\n * Kick Phase Application Utilities\n *\n * Utilities for applying kick phase poses to keyframes with integrated\n * anatomy awareness (foot highlighting for kicks).\n * 발차기 단계 적용 유틸리티 (해부학 통합)\n *\n * @module systems/animation/KickPhaseApplicator\n * @korean 발차기단계적용기\n */\n\nimport { BoneName } from \"@/types/skeletal\";\nimport type { KeyframeConfig } from \"./KeyframeConfig\";\nimport { KICK_PHASES } from \"./MartialArtsConstants\";\n\n/**\n * Interface for basic kick phases (CHAMBER, EXTENSION, HIGH_PEAK)\n * These phases have pelvis as a tuple [x, y, z]\n */\ninterface BasicKickPhase {\n readonly hip: readonly [number, number, number];\n readonly knee: readonly [number, number, number];\n readonly ankle?: readonly [number, number, number];\n readonly supportKnee?: readonly [number, number, number];\n readonly pelvis?: readonly [number, number, number];\n}\n\n/**\n * Interface for rotational kick phases (ROUNDHOUSE_CHAMBER, SIDE_CHAMBER)\n * These phases have pelvisY as a single Y-axis value\n */\ninterface RotationalKickPhase {\n readonly hip: readonly [number, number, number];\n readonly knee: readonly [number, number, number];\n readonly pelvisY?: number;\n readonly spineY?: number;\n readonly spineLean?: number;\n}\n\n/** Phase name keys */\nexport type KickPhaseName = keyof typeof KICK_PHASES;\n\n/** Kick side for left/right leg distinction */\nexport type KickSide = \"left\" | \"right\";\n\n/**\n * Apply basic kick phase to a KeyframeConfig with anatomy integration\n * Handles common kick phase bones: hip, knee, supportKnee, pelvis, ankle\n * Now includes automatic foot highlighting for kick visualization\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Basic kick phase data (CHAMBER, EXTENSION, HIGH_PEAK)\n * @param options - Configuration including anatomy options\n *\n * @example\n * ```typescript\n * // Apply kick with automatic foot highlight\n * applyKickPhaseToConfig(kf, KICK_PHASES.EXTENSION, {\n * highlightKickingFoot: true\n * });\n * ```\n *\n * @korean KeyframeConfig에발차기단계적용\n */\nexport function applyKickPhaseToConfig(\n kf: KeyframeConfig,\n phase: BasicKickPhase,\n options: {\n readonly includeAnkle?: boolean;\n readonly includePelvis?: boolean;\n readonly resetFoot?: boolean;\n // Anatomy integration\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const {\n includeAnkle = false,\n includePelvis = true,\n resetFoot = false,\n side = \"right\",\n highlightKickingFoot = false,\n } = options;\n\n // Select bones based on kicking leg\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n const footBone = side === \"right\" ? BoneName.FOOT_R : BoneName.FOOT_L;\n const supportKneeBone = side === \"right\" ? BoneName.KNEE_L : BoneName.KNEE_R;\n\n // Required bones for all kick phases\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n if (phase.supportKnee) {\n kf.rotate(\n supportKneeBone,\n phase.supportKnee[0],\n phase.supportKnee[1],\n phase.supportKnee[2],\n );\n }\n\n // Optional pelvis - includes both tilt (X) and rotation (Y)\n if (includePelvis && phase.pelvis) {\n // Use pelvisY if defined (for hip rotation power), otherwise pelvis[1]\n const pelvisYRotation =\n \"pelvisY\" in phase && typeof phase.pelvisY === \"number\"\n ? phase.pelvisY\n : phase.pelvis[1];\n kf.rotate(\n BoneName.PELVIS,\n phase.pelvis[0],\n pelvisYRotation,\n phase.pelvis[2],\n );\n }\n\n // Optional ankle\n if (includeAnkle && phase.ankle) {\n kf.rotate(footBone, phase.ankle[0], phase.ankle[1], phase.ankle[2]);\n }\n\n // Reset foot position\n if (resetFoot) {\n kf.rotate(footBone, 0, 0, 0);\n }\n\n // Anatomy integration: Highlight kicking foot\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/**\n * Apply roundhouse-specific kick phase with anatomy integration\n * Includes pelvisY and spineY single-axis rotations\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Rotational kick phase data (ROUNDHOUSE_CHAMBER)\n * @param options - Configuration including anatomy options\n *\n * @korean 돌려차기단계적용\n */\nexport function applyRoundhousePhaseToConfig(\n kf: KeyframeConfig,\n phase: RotationalKickPhase,\n options: {\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const { side = \"right\", highlightKickingFoot = false } = options;\n\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n // Y-axis only rotations for roundhouse\n if (phase.pelvisY !== undefined) {\n kf.rotate(BoneName.PELVIS, 0, phase.pelvisY, 0);\n }\n if (phase.spineY !== undefined) {\n kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY, 0);\n }\n\n // Anatomy integration\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/**\n * Apply side kick phase with anatomy integration\n * Includes pelvisY, spineY, and spineLean\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Rotational kick phase data (SIDE_CHAMBER)\n * @param options - Configuration including anatomy options\n *\n * @korean 옆차기단계적용\n */\nexport function applySideKickPhaseToConfig(\n kf: KeyframeConfig,\n phase: RotationalKickPhase,\n options: {\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const { side = \"right\", highlightKickingFoot = false } = options;\n\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n // Side kick specific rotations\n if (phase.pelvisY !== undefined) {\n kf.rotate(BoneName.PELVIS, 0, phase.pelvisY, 0);\n }\n if (phase.spineY !== undefined) {\n const lean = phase.spineLean ?? 0;\n kf.rotate(BoneName.SPINE_LOWER, 0, phase.spineY, 0);\n kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY, lean);\n }\n\n // Anatomy integration\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/**\n * Apply high peak phase (axe kick rise) with anatomy integration\n * Includes full pelvis tuple and support knee\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Basic kick phase data (HIGH_PEAK)\n * @param options - Configuration including anatomy options\n *\n * @korean 높이올리기단계적용\n */\nexport function applyHighPeakPhaseToConfig(\n kf: KeyframeConfig,\n phase: BasicKickPhase,\n options: {\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const { side = \"right\", highlightKickingFoot = false } = options;\n\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n const footBone = side === \"right\" ? BoneName.FOOT_R : BoneName.FOOT_L;\n const supportKneeBone = side === \"right\" ? BoneName.KNEE_L : BoneName.KNEE_R;\n\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n if (phase.ankle) {\n kf.rotate(footBone, phase.ankle[0], phase.ankle[1], phase.ankle[2]);\n }\n if (phase.supportKnee) {\n kf.rotate(\n supportKneeBone,\n phase.supportKnee[0],\n phase.supportKnee[1],\n phase.supportKnee[2],\n );\n }\n if (phase.pelvis) {\n kf.rotate(\n BoneName.PELVIS,\n phase.pelvis[0],\n phase.pelvis[1],\n phase.pelvis[2],\n );\n }\n\n // Anatomy integration\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/** Union type for any kick phase from KICK_PHASES */\nexport type KickPhase = (typeof KICK_PHASES)[keyof typeof KICK_PHASES];\n\n/**\n * Get a kick phase by name\n *\n * @param phaseName - Name of the phase from KICK_PHASES\n * @returns The kick phase data\n *\n * @korean 발차기단계가져오기\n */\nexport function getKickPhase(phaseName: KickPhaseName): KickPhase {\n return KICK_PHASES[phaseName];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KickPhaseApplicator.js","names":[],"sources":["../../../../src/systems/animation/builders/KickPhaseApplicator.ts"],"sourcesContent":["/**\n * Kick Phase Application Utilities\n *\n * Utilities for applying kick phase poses to keyframes with integrated\n * anatomy awareness (foot highlighting for kicks).\n * 발차기 단계 적용 유틸리티 (해부학 통합)\n *\n * @module systems/animation/KickPhaseApplicator\n * @korean 발차기단계적용기\n */\n\nimport { BoneName } from \"@/types/skeletal\";\nimport type { KeyframeConfig } from \"./KeyframeConfig\";\nimport { KICK_PHASES } from \"./MartialArtsConstants\";\n\n/**\n * Interface for basic kick phases (CHAMBER, EXTENSION, HIGH_PEAK)\n * These phases have pelvis as a tuple [x, y, z]\n *\n * Optional `pelvisY` overrides `pelvis[1]` when present and is used by\n * EXTENSION-type phases to express the support-leg hip-pivot torque\n * (축발회전 / Chukbal Hoejeon) independently from the lateral tilt\n * encoded in `pelvis[0]` (forward) and `pelvis[2]` (lateral).\n */\ninterface BasicKickPhase {\n readonly hip: readonly [number, number, number];\n readonly knee: readonly [number, number, number];\n readonly ankle?: readonly [number, number, number];\n readonly supportKnee?: readonly [number, number, number];\n readonly pelvis?: readonly [number, number, number];\n readonly pelvisY?: number;\n}\n\n/**\n * Interface for rotational kick phases (ROUNDHOUSE_CHAMBER, SIDE_CHAMBER)\n * These phases have pelvisY as a single Y-axis value\n */\ninterface RotationalKickPhase {\n readonly hip: readonly [number, number, number];\n readonly knee: readonly [number, number, number];\n readonly pelvisY?: number;\n readonly spineY?: number;\n readonly spineLean?: number;\n}\n\n/** Phase name keys */\nexport type KickPhaseName = keyof typeof KICK_PHASES;\n\n/** Kick side for left/right leg distinction */\nexport type KickSide = \"left\" | \"right\";\n\n/**\n * Apply basic kick phase to a KeyframeConfig with anatomy integration\n * Handles common kick phase bones: hip, knee, supportKnee, pelvis, ankle\n * Now includes automatic foot highlighting for kick visualization\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Basic kick phase data (CHAMBER, EXTENSION, HIGH_PEAK)\n * @param options - Configuration including anatomy options\n *\n * @example\n * ```typescript\n * // Apply kick with automatic foot highlight\n * applyKickPhaseToConfig(kf, KICK_PHASES.EXTENSION, {\n * highlightKickingFoot: true\n * });\n * ```\n *\n * @korean KeyframeConfig에발차기단계적용\n */\nexport function applyKickPhaseToConfig(\n kf: KeyframeConfig,\n phase: BasicKickPhase,\n options: {\n readonly includeAnkle?: boolean;\n readonly includePelvis?: boolean;\n readonly resetFoot?: boolean;\n // Anatomy integration\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const {\n includeAnkle = false,\n includePelvis = true,\n resetFoot = false,\n side = \"right\",\n highlightKickingFoot = false,\n } = options;\n\n // Select bones based on kicking leg\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n const footBone = side === \"right\" ? BoneName.FOOT_R : BoneName.FOOT_L;\n const supportKneeBone = side === \"right\" ? BoneName.KNEE_L : BoneName.KNEE_R;\n\n // 축발회전 (Chukbal Hoejeon) — support-foot pivot direction reverses with\n // kicking leg: a right kick rotates the support hip CW (negative Y),\n // a left kick rotates it CCW (positive Y). The lateral pelvis tilt\n // (pelvis[2]) and counter-spine-lean are likewise mirrored.\n const sideMirror = side === \"right\" ? 1 : -1;\n\n // Required bones for all kick phases\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n if (phase.supportKnee) {\n kf.rotate(\n supportKneeBone,\n phase.supportKnee[0],\n phase.supportKnee[1],\n phase.supportKnee[2],\n );\n }\n\n // Optional pelvis - includes both tilt (X) and rotation (Y)\n if (includePelvis && phase.pelvis) {\n // Use pelvisY if defined (for hip rotation power), otherwise pelvis[1].\n // Y rotation and lateral tilt (Z) mirror with kicking leg.\n const pelvisYRaw =\n typeof phase.pelvisY === \"number\" ? phase.pelvisY : phase.pelvis[1];\n kf.rotate(\n BoneName.PELVIS,\n phase.pelvis[0],\n pelvisYRaw * sideMirror,\n phase.pelvis[2] * sideMirror,\n );\n }\n\n // Optional ankle\n if (includeAnkle && phase.ankle) {\n kf.rotate(footBone, phase.ankle[0], phase.ankle[1], phase.ankle[2]);\n }\n\n // Reset foot position\n if (resetFoot) {\n kf.rotate(footBone, 0, 0, 0);\n }\n\n // Anatomy integration: Highlight kicking foot\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/**\n * Apply roundhouse-specific kick phase with anatomy integration\n * Includes pelvisY and spineY single-axis rotations\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Rotational kick phase data (ROUNDHOUSE_CHAMBER)\n * @param options - Configuration including anatomy options\n *\n * @korean 돌려차기단계적용\n */\nexport function applyRoundhousePhaseToConfig(\n kf: KeyframeConfig,\n phase: RotationalKickPhase,\n options: {\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const { side = \"right\", highlightKickingFoot = false } = options;\n\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n // 호선 (Hoseon) — circular arc of the roundhouse mirrors with the\n // kicking leg: support-foot pivot and torso counter-rotation reverse.\n const sideMirror = side === \"right\" ? 1 : -1;\n\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n // Y-axis only rotations for roundhouse\n if (phase.pelvisY !== undefined) {\n kf.rotate(BoneName.PELVIS, 0, phase.pelvisY * sideMirror, 0);\n }\n if (phase.spineY !== undefined) {\n kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY * sideMirror, 0);\n }\n\n // Anatomy integration\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/**\n * Apply side kick phase with anatomy integration\n * Includes pelvisY, spineY, and spineLean\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Rotational kick phase data (SIDE_CHAMBER)\n * @param options - Configuration including anatomy options\n *\n * @korean 옆차기단계적용\n */\nexport function applySideKickPhaseToConfig(\n kf: KeyframeConfig,\n phase: RotationalKickPhase,\n options: {\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const { side = \"right\", highlightKickingFoot = false } = options;\n\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n // 옆차기 (Yeop Chagi) lean direction reverses with kicking leg —\n // a right side-kick leans the torso to the right (away from kicking\n // leg's path), a left side-kick leans to the left.\n const sideMirror = side === \"right\" ? 1 : -1;\n\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n // Side kick specific rotations (mirrored by kicking leg)\n if (phase.pelvisY !== undefined) {\n kf.rotate(BoneName.PELVIS, 0, phase.pelvisY * sideMirror, 0);\n }\n if (phase.spineY !== undefined) {\n const lean = (phase.spineLean ?? 0) * sideMirror;\n kf.rotate(BoneName.SPINE_LOWER, 0, phase.spineY * sideMirror, 0);\n kf.rotate(BoneName.SPINE_UPPER, 0, phase.spineY * sideMirror, lean);\n }\n\n // Anatomy integration\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/**\n * Apply high peak phase (axe kick rise) with anatomy integration\n * Includes full pelvis tuple and support knee\n *\n * @param kf - KeyframeConfig to apply phase to\n * @param phase - Basic kick phase data (HIGH_PEAK)\n * @param options - Configuration including anatomy options\n *\n * @korean 높이올리기단계적용\n */\nexport function applyHighPeakPhaseToConfig(\n kf: KeyframeConfig,\n phase: BasicKickPhase,\n options: {\n readonly side?: KickSide;\n readonly highlightKickingFoot?: boolean;\n } = {},\n): void {\n const { side = \"right\", highlightKickingFoot = false } = options;\n\n const hipBone = side === \"right\" ? BoneName.HIP_R : BoneName.HIP_L;\n const kneeBone = side === \"right\" ? BoneName.KNEE_R : BoneName.KNEE_L;\n const footBone = side === \"right\" ? BoneName.FOOT_R : BoneName.FOOT_L;\n const supportKneeBone = side === \"right\" ? BoneName.KNEE_L : BoneName.KNEE_R;\n // High-peak axe-kick rise: pelvis lateral tilt and support-hip pivot\n // mirror with kicking leg for biomechanical correctness.\n const sideMirror = side === \"right\" ? 1 : -1;\n\n kf.rotate(hipBone, phase.hip[0], phase.hip[1], phase.hip[2]);\n kf.rotate(kneeBone, phase.knee[0], phase.knee[1], phase.knee[2]);\n\n if (phase.ankle) {\n kf.rotate(footBone, phase.ankle[0], phase.ankle[1], phase.ankle[2]);\n }\n if (phase.supportKnee) {\n kf.rotate(\n supportKneeBone,\n phase.supportKnee[0],\n phase.supportKnee[1],\n phase.supportKnee[2],\n );\n }\n if (phase.pelvis) {\n const pelvisYRaw =\n typeof phase.pelvisY === \"number\" ? phase.pelvisY : phase.pelvis[1];\n kf.rotate(\n BoneName.PELVIS,\n phase.pelvis[0],\n pelvisYRaw * sideMirror,\n phase.pelvis[2] * sideMirror,\n );\n }\n\n // Anatomy integration\n if (highlightKickingFoot) {\n kf.setFootHighlight(side, true);\n }\n}\n\n/** Union type for any kick phase from KICK_PHASES */\nexport type KickPhase = (typeof KICK_PHASES)[keyof typeof KICK_PHASES];\n\n/**\n * Get a kick phase by name\n *\n * @param phaseName - Name of the phase from KICK_PHASES\n * @returns The kick phase data\n *\n * @korean 발차기단계가져오기\n */\nexport function getKickPhase(phaseName: KickPhaseName): KickPhase {\n return KICK_PHASES[phaseName];\n}\n"],"mappings":"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"}
|
|
@@ -91,7 +91,7 @@ export interface GuardPosition {
|
|
|
91
91
|
*
|
|
92
92
|
* Biomechanics:
|
|
93
93
|
* - Shoulders raised (~15° abduction)
|
|
94
|
-
* - Elbows bent ~
|
|
94
|
+
* - Elbows bent ~120° (tight guard)
|
|
95
95
|
* - Fists at temple level
|
|
96
96
|
* - Forearms vertical for deflection
|
|
97
97
|
*
|
|
@@ -118,7 +118,7 @@ export declare const HIGH_GUARD: GuardPosition;
|
|
|
118
118
|
*
|
|
119
119
|
* Biomechanics:
|
|
120
120
|
* - Shoulders neutral (~10° forward)
|
|
121
|
-
* - Elbows bent ~
|
|
121
|
+
* - Elbows bent ~100° (classic guard)
|
|
122
122
|
* - Fists at chest/chin level
|
|
123
123
|
* - Ready to attack or defend
|
|
124
124
|
*
|
|
@@ -144,8 +144,8 @@ export declare const MIDDLE_GUARD: GuardPosition;
|
|
|
144
144
|
* - Defense against low attacks
|
|
145
145
|
*
|
|
146
146
|
* Biomechanics:
|
|
147
|
-
* - Shoulders forward (~
|
|
148
|
-
* - Elbows bent ~
|
|
147
|
+
* - Shoulders forward (~15° flexion)
|
|
148
|
+
* - Elbows bent ~75° (wider guard)
|
|
149
149
|
* - Fists at abdomen/hip level
|
|
150
150
|
* - Ready to sprawl or clinch
|
|
151
151
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KoreanGuardPositions.js","names":[],"sources":["../../../../src/systems/animation/builders/KoreanGuardPositions.ts"],"sourcesContent":["import { BoneName } from \"@/types/skeletal\";\n\n// Minimal contract to apply guard rotations without depending on KeyframeConfig\ninterface GuardRotatable {\n rotate: (bone: BoneName, x: number, y: number, z: number) => unknown;\n}\n\n/**\n * Korean Guard Positions (막기자세)\n *\n * Defines authentic Korean martial arts guard positions for all animations.\n * Guards protect vital areas and provide optimal positioning for techniques.\n *\n * Korean martial arts emphasize three primary guard levels:\n * - 상단막기 (Sangdan Makgi) - High guard protecting head\n * - 중단막기 (Jungdan Makgi) - Middle guard protecting torso\n * - 하단막기 (Hadan Makgi) - Low guard protecting lower body\n *\n * Each guard position includes:\n * - Proper shoulder and elbow angles\n * - Hand pose (주먹쥐기 - fist formation)\n * - Guard height description\n * - Korean/English terminology\n *\n * @module systems/animation/KoreanGuardPositions\n * @category Animation System\n * @korean 막기자세시스템\n */\n\n/**\n * Guard position for a single arm\n * @korean 팔방어위치\n */\nexport interface GuardArmPosition {\n /** Shoulder rotation in radians (x, y, z) */\n readonly shoulder: readonly [number, number, number];\n /** Elbow rotation in radians (x, y, z) */\n readonly elbow: readonly [number, number, number];\n /** Wrist rotation in radians (x, y, z) */\n readonly wrist: readonly [number, number, number];\n}\n\n/**\n * Complete guard position configuration\n * @korean 방어자세설정\n */\nexport interface GuardPosition {\n /** Korean name */\n readonly korean: string;\n /** English name */\n readonly english: string;\n /** Romanization */\n readonly romanized: string;\n /** Description of guard purpose and application */\n readonly description: {\n readonly korean: string;\n readonly english: string;\n };\n /** Left arm guard position */\n readonly left: GuardArmPosition;\n /** Right arm guard position */\n readonly right: GuardArmPosition;\n /** Height level of guard */\n readonly height: \"temple_level\" | \"chest_level\" | \"abdomen_level\";\n /**\n * Default hand pose description for this guard.\n *\n * NOTE: This field is documentation/metadata only and is not wired into the\n * hand pose system or the HandPoseType enum. Actual hand poses are applied\n * directly in animation code (e.g., via HAND_POSES.FIST). Do not use these\n * string literal values for programmatic logic.\n *\n * @see HandPoseType for the actual hand pose enum values\n * @see HAND_POSES for applying hand poses in animations\n */\n readonly handPose: \"fist_vertical\" | \"fist_horizontal\" | \"open_hand\";\n /** Vital areas protected by this guard */\n readonly protects: readonly string[];\n}\n\n/**\n * Helper to convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns Angle in radians\n * @korean 도를라디안으로\n */\nconst toRadians = (degrees: number): number => (degrees * Math.PI) / 180;\n\n/**\n * 상단막기 (Sangdan Makgi) - High Guard\n *\n * Traditional Taekwondo high block position protecting head and face.\n * Both hands at temple/forehead level with elbows bent tight.\n * Fists vertical (thumb-side up) for maximum protection.\n *\n * Protects against:\n * - High strikes to head (머리 공격)\n * - Overhead attacks (위쪽 공격)\n * - Face punches (얼굴 주먹)\n *\n * Application:\n * - Default guard for Geon (Heaven) stance\n * - Used in high kicking techniques\n * - Transitional guard for head-level attacks\n *\n * Biomechanics:\n * - Shoulders raised (~15° abduction)\n * - Elbows bent ~110° (tight guard)\n * - Fists at temple level\n * - Forearms vertical for deflection\n *\n * @korean 상단막기자세\n */\nexport const HIGH_GUARD: GuardPosition = {\n korean: \"상단막기\",\n english: \"High Guard\",\n romanized: \"Sangdan Makgi\",\n description: {\n korean:\n \"머리와 얼굴을 보호하는 높은 방어 자세. 주먹을 관자놀이 높이에 두고 팔꿈치를 단단히 구부림.\",\n english:\n \"High guard protecting head and face. Fists at temple level with elbows bent tight.\",\n },\n left: {\n shoulder: [toRadians(-30), toRadians(-25), toRadians(10)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(-120)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n right: {\n shoulder: [toRadians(-30), toRadians(25), toRadians(-10)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(120)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n height: \"temple_level\",\n handPose: \"fist_vertical\",\n protects: [\"head\", \"temple\", \"forehead\", \"eyes\", \"nose\", \"jaw\"] as const,\n};\n\n/**\n * 중단막기 (Jungdan Makgi) - Middle Guard\n *\n * Standard Korean martial arts guard at chest/solar plexus level.\n * Most versatile guard position, used in most fighting stances.\n * Elbows at 90° protecting ribs and torso.\n *\n * Protects against:\n * - Body punches (몸통 주먹)\n * - Solar plexus strikes (명치 공격)\n * - Rib attacks (갈비뼈 공격)\n * - Liver strikes (간 공격)\n *\n * Application:\n * - Default guard for most stances\n * - Starting position for most techniques\n * - Balanced offensive/defensive posture\n *\n * Biomechanics:\n * - Shoulders neutral (~10° forward)\n * - Elbows bent ~90° (classic guard)\n * - Fists at chest/chin level\n * - Ready to attack or defend\n *\n * @korean 중단막기자세\n */\nexport const MIDDLE_GUARD: GuardPosition = {\n korean: \"중단막기\",\n english: \"Middle Guard\",\n romanized: \"Jungdan Makgi\",\n description: {\n korean:\n \"가슴과 명치를 보호하는 중간 방어 자세. 팔꿈치를 90도 구부려 몸통을 보호함.\",\n english:\n \"Middle guard protecting chest and solar plexus. Elbows bent at 90° protecting torso.\",\n },\n left: {\n shoulder: [toRadians(-20), toRadians(-20), toRadians(8)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(-100)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n right: {\n shoulder: [toRadians(-20), toRadians(20), toRadians(-8)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(100)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n height: \"chest_level\",\n handPose: \"fist_vertical\",\n protects: [\n \"chest\",\n \"solar_plexus\",\n \"ribs\",\n \"liver\",\n \"spleen\",\n \"heart\",\n ] as const,\n};\n\n/**\n * 하단막기 (Hadan Makgi) - Low Guard\n *\n * Low guard position protecting lower body and groin.\n * Used in grappling and ground-fighting scenarios.\n * Hands at abdomen/hip level ready for low attacks.\n *\n * Protects against:\n * - Low kicks (낮은 발차기)\n * - Body kicks (몸통 발차기)\n * - Groin attacks (낭심 공격)\n * - Takedown attempts (넘어뜨리기)\n *\n * Application:\n * - Default for Gon (Earth) stance\n * - Grappling and clinch range\n * - Defense against low attacks\n *\n * Biomechanics:\n * - Shoulders forward (~20° flexion)\n * - Elbows bent ~70° (wider guard)\n * - Fists at abdomen/hip level\n * - Ready to sprawl or clinch\n *\n * @korean 하단막기자세\n */\nexport const LOW_GUARD: GuardPosition = {\n korean: \"하단막기\",\n english: \"Low Guard\",\n romanized: \"Hadan Makgi\",\n description: {\n korean:\n \"하복부와 낭심을 보호하는 낮은 방어 자세. 손을 배 높이에 두고 낮은 공격에 대비함.\",\n english:\n \"Low guard protecting lower body and groin. Hands at abdomen level ready for low attacks.\",\n },\n left: {\n shoulder: [toRadians(15), toRadians(-10), toRadians(12)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(-75)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n right: {\n shoulder: [toRadians(15), toRadians(10), toRadians(-12)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(75)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n height: \"abdomen_level\",\n handPose: \"fist_vertical\",\n protects: [\"abdomen\", \"groin\", \"hip\", \"thigh\", \"lower_ribs\"] as const,\n};\n\n/**\n * All Korean guard positions indexed by name\n * @korean 모든방어자세\n */\nexport const KOREAN_GUARD_POSITIONS = {\n HIGH_GUARD,\n MIDDLE_GUARD,\n LOW_GUARD,\n} as const;\n\n/**\n * Guard position type\n * @korean 방어자세타입\n */\nexport type GuardPositionType = keyof typeof KOREAN_GUARD_POSITIONS;\n\n/**\n * Get guard position by type\n *\n * @param type - Guard position type\n * @returns Guard position configuration\n * @korean 방어자세가져오기\n */\nexport const getGuardPosition = (type: GuardPositionType): GuardPosition => {\n return KOREAN_GUARD_POSITIONS[type];\n};\n\n/**\n * Get appropriate guard for stance height\n *\n * Determines which guard position is most appropriate based on\n * the stance configuration and fighting context.\n *\n * @param stanceType - Type of stance (\"high\" | \"middle\" | \"low\")\n * @returns Recommended guard position\n * @korean 자세높이에맞는방어자세\n */\nexport const getGuardForStanceHeight = (\n stanceType: \"high\" | \"middle\" | \"low\",\n): GuardPosition => {\n switch (stanceType) {\n case \"high\":\n return HIGH_GUARD;\n case \"low\":\n return LOW_GUARD;\n case \"middle\":\n default:\n return MIDDLE_GUARD;\n }\n};\n\n/**\n * Apply guard position to KeyframeConfig\n *\n * Applies a Korean martial arts guard position to a keyframe configuration.\n * Can apply to one hand (for techniques where one hand strikes) or both hands.\n *\n * Usage:\n * ```typescript\n * const kf = new KeyframeConfig(0.0);\n * applyGuardPositionToConfig(kf, MIDDLE_GUARD, \"both\"); // Both hands in guard\n * applyGuardPositionToConfig(kf, MIDDLE_GUARD, \"left\"); // Only left hand guards\n * ```\n *\n * @param config - KeyframeConfig to apply guard to\n * @param guardPosition - Guard position configuration\n * @param hand - Which hand(s) to apply (\"left\" | \"right\" | \"both\")\n * @korean KeyframeConfig에방어자세적용\n */\nexport const applyGuardPositionToConfig = (\n config: GuardRotatable,\n guardPosition: GuardPosition,\n hand: \"left\" | \"right\" | \"both\" = \"both\",\n): void => {\n // Apply left hand guard\n if (hand === \"left\" || hand === \"both\") {\n config.rotate(\n BoneName.SHOULDER_L,\n guardPosition.left.shoulder[0],\n guardPosition.left.shoulder[1],\n guardPosition.left.shoulder[2],\n );\n config.rotate(\n BoneName.ELBOW_L,\n guardPosition.left.elbow[0],\n guardPosition.left.elbow[1],\n guardPosition.left.elbow[2],\n );\n config.rotate(\n BoneName.WRIST_L,\n guardPosition.left.wrist[0],\n guardPosition.left.wrist[1],\n guardPosition.left.wrist[2],\n );\n }\n\n // Apply right hand guard\n if (hand === \"right\" || hand === \"both\") {\n config.rotate(\n BoneName.SHOULDER_R,\n guardPosition.right.shoulder[0],\n guardPosition.right.shoulder[1],\n guardPosition.right.shoulder[2],\n );\n config.rotate(\n BoneName.ELBOW_R,\n guardPosition.right.elbow[0],\n guardPosition.right.elbow[1],\n guardPosition.right.elbow[2],\n );\n config.rotate(\n BoneName.WRIST_R,\n guardPosition.right.wrist[0],\n guardPosition.right.wrist[1],\n guardPosition.right.wrist[2],\n );\n }\n};\n"],"mappings":";;;;;;;AAsFA,IAAM,aAAa,YAA6B,UAAU,KAAK,KAAM;;;;;AAqKrE,IAAa,yBAAyB;CACpC;EA1IA,QAAQ;EACR,SAAS;EACT,WAAW;EACX,aAAa;GACX,QACE;GACF,SACE;GACH;EACD,MAAM;GACJ,UAAU;IAAC,UAAU,IAAI;IAAE,UAAU,IAAI;IAAE,UAAU,GAAG;IAAC;GACzD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,KAAK;IAAC;GACpD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,EAAE;IAAC;GAClD;EACD,OAAO;GACL,UAAU;IAAC,UAAU,IAAI;IAAE,UAAU,GAAG;IAAE,UAAU,IAAI;IAAC;GACzD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,IAAI;IAAC;GACnD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,EAAE;IAAC;GAClD;EACD,QAAQ;EACR,UAAU;EACV,UAAU;GAAC;GAAQ;GAAU;GAAY;GAAQ;GAAQ;GAAM;EAqH/D;CACA;EAxFA,QAAQ;EACR,SAAS;EACT,WAAW;EACX,aAAa;GACX,QACE;GACF,SACE;GACH;EACD,MAAM;GACJ,UAAU;IAAC,UAAU,IAAI;IAAE,UAAU,IAAI;IAAE,UAAU,EAAE;IAAC;GACxD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,KAAK;IAAC;GACpD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,EAAE;IAAC;GAClD;EACD,OAAO;GACL,UAAU;IAAC,UAAU,IAAI;IAAE,UAAU,GAAG;IAAE,UAAU,GAAG;IAAC;GACxD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,IAAI;IAAC;GACnD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,EAAE;IAAC;GAClD;EACD,QAAQ;EACR,UAAU;EACV,UAAU;GACR;GACA;GACA;GACA;GACA;GACA;GACD;EA4DD;CACA;EA/BA,QAAQ;EACR,SAAS;EACT,WAAW;EACX,aAAa;GACX,QACE;GACF,SACE;GACH;EACD,MAAM;GACJ,UAAU;IAAC,UAAU,GAAG;IAAE,UAAU,IAAI;IAAE,UAAU,GAAG;IAAC;GACxD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,IAAI;IAAC;GACnD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,EAAE;IAAC;GAClD;EACD,OAAO;GACL,UAAU;IAAC,UAAU,GAAG;IAAE,UAAU,GAAG;IAAE,UAAU,IAAI;IAAC;GACxD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,GAAG;IAAC;GAClD,OAAO;IAAC,UAAU,EAAE;IAAE,UAAU,EAAE;IAAE,UAAU,EAAE;IAAC;GAClD;EACD,QAAQ;EACR,UAAU;EACV,UAAU;GAAC;GAAW;GAAS;GAAO;GAAS;GAAa;EAU5D;CACD;;;;;;;;AAeD,IAAa,oBAAoB,SAA2C;CAC1E,OAAO,uBAAuB"}
|
|
1
|
+
{"version":3,"file":"KoreanGuardPositions.js","names":[],"sources":["../../../../src/systems/animation/builders/KoreanGuardPositions.ts"],"sourcesContent":["import { BoneName } from \"@/types/skeletal\";\n\n// Minimal contract to apply guard rotations without depending on KeyframeConfig\ninterface GuardRotatable {\n rotate: (bone: BoneName, x: number, y: number, z: number) => unknown;\n}\n\n/**\n * Korean Guard Positions (막기자세)\n *\n * Defines authentic Korean martial arts guard positions for all animations.\n * Guards protect vital areas and provide optimal positioning for techniques.\n *\n * Korean martial arts emphasize three primary guard levels:\n * - 상단막기 (Sangdan Makgi) - High guard protecting head\n * - 중단막기 (Jungdan Makgi) - Middle guard protecting torso\n * - 하단막기 (Hadan Makgi) - Low guard protecting lower body\n *\n * Each guard position includes:\n * - Proper shoulder and elbow angles\n * - Hand pose (주먹쥐기 - fist formation)\n * - Guard height description\n * - Korean/English terminology\n *\n * @module systems/animation/KoreanGuardPositions\n * @category Animation System\n * @korean 막기자세시스템\n */\n\n/**\n * Guard position for a single arm\n * @korean 팔방어위치\n */\nexport interface GuardArmPosition {\n /** Shoulder rotation in radians (x, y, z) */\n readonly shoulder: readonly [number, number, number];\n /** Elbow rotation in radians (x, y, z) */\n readonly elbow: readonly [number, number, number];\n /** Wrist rotation in radians (x, y, z) */\n readonly wrist: readonly [number, number, number];\n}\n\n/**\n * Complete guard position configuration\n * @korean 방어자세설정\n */\nexport interface GuardPosition {\n /** Korean name */\n readonly korean: string;\n /** English name */\n readonly english: string;\n /** Romanization */\n readonly romanized: string;\n /** Description of guard purpose and application */\n readonly description: {\n readonly korean: string;\n readonly english: string;\n };\n /** Left arm guard position */\n readonly left: GuardArmPosition;\n /** Right arm guard position */\n readonly right: GuardArmPosition;\n /** Height level of guard */\n readonly height: \"temple_level\" | \"chest_level\" | \"abdomen_level\";\n /**\n * Default hand pose description for this guard.\n *\n * NOTE: This field is documentation/metadata only and is not wired into the\n * hand pose system or the HandPoseType enum. Actual hand poses are applied\n * directly in animation code (e.g., via HAND_POSES.FIST). Do not use these\n * string literal values for programmatic logic.\n *\n * @see HandPoseType for the actual hand pose enum values\n * @see HAND_POSES for applying hand poses in animations\n */\n readonly handPose: \"fist_vertical\" | \"fist_horizontal\" | \"open_hand\";\n /** Vital areas protected by this guard */\n readonly protects: readonly string[];\n}\n\n/**\n * Helper to convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns Angle in radians\n * @korean 도를라디안으로\n */\nconst toRadians = (degrees: number): number => (degrees * Math.PI) / 180;\n\n/**\n * 상단막기 (Sangdan Makgi) - High Guard\n *\n * Traditional Taekwondo high block position protecting head and face.\n * Both hands at temple/forehead level with elbows bent tight.\n * Fists vertical (thumb-side up) for maximum protection.\n *\n * Protects against:\n * - High strikes to head (머리 공격)\n * - Overhead attacks (위쪽 공격)\n * - Face punches (얼굴 주먹)\n *\n * Application:\n * - Default guard for Geon (Heaven) stance\n * - Used in high kicking techniques\n * - Transitional guard for head-level attacks\n *\n * Biomechanics:\n * - Shoulders raised (~15° abduction)\n * - Elbows bent ~120° (tight guard)\n * - Fists at temple level\n * - Forearms vertical for deflection\n *\n * @korean 상단막기자세\n */\nexport const HIGH_GUARD: GuardPosition = {\n korean: \"상단막기\",\n english: \"High Guard\",\n romanized: \"Sangdan Makgi\",\n description: {\n korean:\n \"머리와 얼굴을 보호하는 높은 방어 자세. 주먹을 관자놀이 높이에 두고 팔꿈치를 단단히 구부림.\",\n english:\n \"High guard protecting head and face. Fists at temple level with elbows bent tight.\",\n },\n left: {\n shoulder: [toRadians(-30), toRadians(-25), toRadians(10)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(-120)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n right: {\n shoulder: [toRadians(-30), toRadians(25), toRadians(-10)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(120)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n height: \"temple_level\",\n handPose: \"fist_vertical\",\n protects: [\"head\", \"temple\", \"forehead\", \"eyes\", \"nose\", \"jaw\"] as const,\n};\n\n/**\n * 중단막기 (Jungdan Makgi) - Middle Guard\n *\n * Standard Korean martial arts guard at chest/solar plexus level.\n * Most versatile guard position, used in most fighting stances.\n * Elbows at 90° protecting ribs and torso.\n *\n * Protects against:\n * - Body punches (몸통 주먹)\n * - Solar plexus strikes (명치 공격)\n * - Rib attacks (갈비뼈 공격)\n * - Liver strikes (간 공격)\n *\n * Application:\n * - Default guard for most stances\n * - Starting position for most techniques\n * - Balanced offensive/defensive posture\n *\n * Biomechanics:\n * - Shoulders neutral (~10° forward)\n * - Elbows bent ~100° (classic guard)\n * - Fists at chest/chin level\n * - Ready to attack or defend\n *\n * @korean 중단막기자세\n */\nexport const MIDDLE_GUARD: GuardPosition = {\n korean: \"중단막기\",\n english: \"Middle Guard\",\n romanized: \"Jungdan Makgi\",\n description: {\n korean:\n \"가슴과 명치를 보호하는 중간 방어 자세. 팔꿈치를 90도 구부려 몸통을 보호함.\",\n english:\n \"Middle guard protecting chest and solar plexus. Elbows bent at 90° protecting torso.\",\n },\n left: {\n shoulder: [toRadians(-20), toRadians(-20), toRadians(8)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(-100)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n right: {\n shoulder: [toRadians(-20), toRadians(20), toRadians(-8)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(100)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n height: \"chest_level\",\n handPose: \"fist_vertical\",\n protects: [\n \"chest\",\n \"solar_plexus\",\n \"ribs\",\n \"liver\",\n \"spleen\",\n \"heart\",\n ] as const,\n};\n\n/**\n * 하단막기 (Hadan Makgi) - Low Guard\n *\n * Low guard position protecting lower body and groin.\n * Used in grappling and ground-fighting scenarios.\n * Hands at abdomen/hip level ready for low attacks.\n *\n * Protects against:\n * - Low kicks (낮은 발차기)\n * - Body kicks (몸통 발차기)\n * - Groin attacks (낭심 공격)\n * - Takedown attempts (넘어뜨리기)\n *\n * Application:\n * - Default for Gon (Earth) stance\n * - Grappling and clinch range\n * - Defense against low attacks\n *\n * Biomechanics:\n * - Shoulders forward (~15° flexion)\n * - Elbows bent ~75° (wider guard)\n * - Fists at abdomen/hip level\n * - Ready to sprawl or clinch\n *\n * @korean 하단막기자세\n */\nexport const LOW_GUARD: GuardPosition = {\n korean: \"하단막기\",\n english: \"Low Guard\",\n romanized: \"Hadan Makgi\",\n description: {\n korean:\n \"하복부와 낭심을 보호하는 낮은 방어 자세. 손을 배 높이에 두고 낮은 공격에 대비함.\",\n english:\n \"Low guard protecting lower body and groin. Hands at abdomen level ready for low attacks.\",\n },\n left: {\n shoulder: [toRadians(15), toRadians(-10), toRadians(12)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(-75)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n right: {\n shoulder: [toRadians(15), toRadians(10), toRadians(-12)] as const,\n elbow: [toRadians(0), toRadians(0), toRadians(75)] as const,\n wrist: [toRadians(0), toRadians(0), toRadians(0)] as const,\n },\n height: \"abdomen_level\",\n handPose: \"fist_vertical\",\n protects: [\"abdomen\", \"groin\", \"hip\", \"thigh\", \"lower_ribs\"] as const,\n};\n\n/**\n * All Korean guard positions indexed by name\n * @korean 모든방어자세\n */\nexport const KOREAN_GUARD_POSITIONS = {\n HIGH_GUARD,\n MIDDLE_GUARD,\n LOW_GUARD,\n} as const;\n\n/**\n * Guard position type\n * @korean 방어자세타입\n */\nexport type GuardPositionType = keyof typeof KOREAN_GUARD_POSITIONS;\n\n/**\n * Get guard position by type\n *\n * @param type - Guard position type\n * @returns Guard position configuration\n * @korean 방어자세가져오기\n */\nexport const getGuardPosition = (type: GuardPositionType): GuardPosition => {\n return KOREAN_GUARD_POSITIONS[type];\n};\n\n/**\n * Get appropriate guard for stance height\n *\n * Determines which guard position is most appropriate based on\n * the stance configuration and fighting context.\n *\n * @param stanceType - Type of stance (\"high\" | \"middle\" | \"low\")\n * @returns Recommended guard position\n * @korean 자세높이에맞는방어자세\n */\nexport const getGuardForStanceHeight = (\n stanceType: \"high\" | \"middle\" | \"low\",\n): GuardPosition => {\n switch (stanceType) {\n case \"high\":\n return HIGH_GUARD;\n case \"low\":\n return LOW_GUARD;\n case \"middle\":\n default:\n return MIDDLE_GUARD;\n }\n};\n\n/**\n * Apply guard position to KeyframeConfig\n *\n * Applies a Korean martial arts guard position to a keyframe configuration.\n * Can apply to one hand (for techniques where one hand strikes) or both hands.\n *\n * Usage:\n * ```typescript\n * const kf = new KeyframeConfig(0.0);\n * applyGuardPositionToConfig(kf, MIDDLE_GUARD, \"both\"); // Both hands in guard\n * applyGuardPositionToConfig(kf, MIDDLE_GUARD, \"left\"); // Only left hand guards\n * ```\n *\n * @param config - KeyframeConfig to apply guard to\n * @param guardPosition - Guard position configuration\n * @param hand - Which hand(s) to apply (\"left\" | \"right\" | \"both\")\n * @korean KeyframeConfig에방어자세적용\n */\nexport const applyGuardPositionToConfig = (\n config: GuardRotatable,\n guardPosition: GuardPosition,\n hand: \"left\" | \"right\" | \"both\" = \"both\",\n): void => {\n // Apply left hand guard\n if (hand === \"left\" || hand === \"both\") {\n config.rotate(\n BoneName.SHOULDER_L,\n guardPosition.left.shoulder[0],\n guardPosition.left.shoulder[1],\n guardPosition.left.shoulder[2],\n );\n config.rotate(\n BoneName.ELBOW_L,\n guardPosition.left.elbow[0],\n guardPosition.left.elbow[1],\n guardPosition.left.elbow[2],\n );\n config.rotate(\n BoneName.WRIST_L,\n guardPosition.left.wrist[0],\n guardPosition.left.wrist[1],\n guardPosition.left.wrist[2],\n );\n }\n\n // Apply right hand guard\n if (hand === \"right\" || hand === \"both\") {\n config.rotate(\n BoneName.SHOULDER_R,\n guardPosition.right.shoulder[0],\n guardPosition.right.shoulder[1],\n guardPosition.right.shoulder[2],\n );\n config.rotate(\n BoneName.ELBOW_R,\n guardPosition.right.elbow[0],\n guardPosition.right.elbow[1],\n guardPosition.right.elbow[2],\n );\n config.rotate(\n BoneName.WRIST_R,\n guardPosition.right.wrist[0],\n guardPosition.right.wrist[1],\n guardPosition.right.wrist[2],\n );\n }\n};\n"],"mappings":";;;;;;;AAsFA,IAAM,aAAa,YAA6B,UAAU,KAAK,KAAM;;;;;AAqKrE,IAAa,yBAAyB;CACpC;EA1IA,QAAQ;EACR,SAAS;EACT,WAAW;EACX,aAAa;GACX,QACE;GACF,SACE;EACJ;EACA,MAAM;GACJ,UAAU;IAAC,UAAU,GAAG;IAAG,UAAU,GAAG;IAAG,UAAU,EAAE;GAAC;GACxD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,IAAI;GAAC;GACnD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,CAAC;GAAC;EAClD;EACA,OAAO;GACL,UAAU;IAAC,UAAU,GAAG;IAAG,UAAU,EAAE;IAAG,UAAU,GAAG;GAAC;GACxD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,GAAG;GAAC;GAClD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,CAAC;GAAC;EAClD;EACA,QAAQ;EACR,UAAU;EACV,UAAU;GAAC;GAAQ;GAAU;GAAY;GAAQ;GAAQ;EAAK;CAqH9D;CACA;EAxFA,QAAQ;EACR,SAAS;EACT,WAAW;EACX,aAAa;GACX,QACE;GACF,SACE;EACJ;EACA,MAAM;GACJ,UAAU;IAAC,UAAU,GAAG;IAAG,UAAU,GAAG;IAAG,UAAU,CAAC;GAAC;GACvD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,IAAI;GAAC;GACnD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,CAAC;GAAC;EAClD;EACA,OAAO;GACL,UAAU;IAAC,UAAU,GAAG;IAAG,UAAU,EAAE;IAAG,UAAU,EAAE;GAAC;GACvD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,GAAG;GAAC;GAClD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,CAAC;GAAC;EAClD;EACA,QAAQ;EACR,UAAU;EACV,UAAU;GACR;GACA;GACA;GACA;GACA;GACA;EACF;CA4DA;CACA;EA/BA,QAAQ;EACR,SAAS;EACT,WAAW;EACX,aAAa;GACX,QACE;GACF,SACE;EACJ;EACA,MAAM;GACJ,UAAU;IAAC,UAAU,EAAE;IAAG,UAAU,GAAG;IAAG,UAAU,EAAE;GAAC;GACvD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,GAAG;GAAC;GAClD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,CAAC;GAAC;EAClD;EACA,OAAO;GACL,UAAU;IAAC,UAAU,EAAE;IAAG,UAAU,EAAE;IAAG,UAAU,GAAG;GAAC;GACvD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,EAAE;GAAC;GACjD,OAAO;IAAC,UAAU,CAAC;IAAG,UAAU,CAAC;IAAG,UAAU,CAAC;GAAC;EAClD;EACA,QAAQ;EACR,UAAU;EACV,UAAU;GAAC;GAAW;GAAS;GAAO;GAAS;EAAY;CAU3D;AACF;;;;;;;;AAeA,IAAa,oBAAoB,SAA2C;CAC1E,OAAO,uBAAuB;AAChC"}
|
|
@@ -422,7 +422,7 @@ export declare class MartialArtsAnimationBuilder {
|
|
|
422
422
|
* - Body completes 180° rotation (pelvis -3.14 rad = π)
|
|
423
423
|
* - Hip extends backward (0.5 rad flex maintained)
|
|
424
424
|
* - Knee extends fully (-0.2 rad) driving heel back
|
|
425
|
-
* - Foot dorsiflexes (
|
|
425
|
+
* - Foot dorsiflexes (+0.4 rad) presenting heel
|
|
426
426
|
* - Foot position extends backward (0 forward, 0 up, -0.8 back)
|
|
427
427
|
* - Head maintains target visual (1.0 rad look-back)
|
|
428
428
|
* - Spine fully rotated with body
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MartialArtsAnimationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/builders/MartialArtsAnimationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK7E,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EAEb,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA0BlD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AAM/E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;IASH;;;;OAIG;;;;;;;;;CASK,CAAC;AAMX;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,IAAI,CACD;IACX,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAa;IAEhC,OAAO;IAKP;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,2BAA2B;IAQ5E;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMjC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI;IAO/D;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,GAAG,IAAI;IAO1D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI;IAW7D;;;;;;;OAOG;IACH,MAAM,IAAI,IAAI;IAuCd;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAsBpE;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAyBnE;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IA6BpE;;;OAGG;IACH,OAAO,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAWnE;;;;;;;;;;;;;;;OAeG;IACH,iBAAiB,CACf,UAAU,GAAE,MAAY,EACxB,MAAM,GAAE,MAAmB,GAC1B,IAAI;IA2BP;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,gBAAgB,CACd,UAAU,GAAE,MAAa,EACzB,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAgDP;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAuB5E;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IA+BzE;;;;;OAKG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA4BzE;;;;;OAKG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IA2BvE;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA+BzE;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiC3E;;;OAGG;IACH,cAAc,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAW5E;;;OAGG;IACH,YAAY,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAazE;;;OAGG;IACH,mBAAmB,CACjB,UAAU,GAAE,MAAY,EACxB,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAWP;;;OAGG;IACH,eAAe,CACb,UAAU,GAAE,MAAa,EACzB,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAaP;;;;;OAKG;IACH,eAAe,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAwB5E;;;;;OAKG;IACH,cAAc,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA0B3E;;;;;OAKG;IACH,gBAAgB,CACd,UAAU,GAAE,MAAa,EACzB,MAAM,GAAE,MAAmB,GAC1B,IAAI;IA4BP;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAgC5E;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAgCzE;;;;;;;;;;OAUG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,GAAG,IAAI;IAmD3C;;;;;;;OAOG;IACH,YAAY,CACV,UAAU,GAAE,MAAY,EACxB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAcP;;;;;;OAMG;IACH,WAAW,CACT,UAAU,GAAE,MAAa,EACzB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAiB,GACxB,IAAI;IAYP;;;;;;;;;;;;;OAaG;IACH,WAAW,CACT,UAAU,GAAE,MAAa,EACzB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAiBP;;;;;;;;;;;;OAYG;IACH,SAAS,CACP,UAAU,GAAE,MAAa,EACzB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAiB,GACxB,IAAI;IAiBP;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAmBxE;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAgBvE;;;;;;;;;;;;;OAaG;IACH,SAAS,CACP,UAAU,GAAE,MAAY,EACxB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAsCP;;;;;;;OAOG;IACH,UAAU,CACR,UAAU,GAAE,MAAa,EACzB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAiB,GACxB,IAAI;IA6BP;;;;;;;OAOG;IACH,aAAa,CACX,UAAU,GAAE,MAAY,EACxB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAmB,GAC1B,IAAI;IAmCP;;;;;;;OAOG;IACH,cAAc,CACZ,UAAU,GAAE,MAAa,EACzB,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,MAAM,GAAE,MAAiB,GACxB,IAAI;IA+BP;;;OAGG;IACH,aAAa,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAmB3E;;;OAGG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IAcxE;;;OAGG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IAiBvE;;;OAGG;IACH,aAAa,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiB1E;;;;;OAKG;IACH,UAAU,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiCvE;;;;OAIG;IACH,aAAa,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiB3E;;;;OAIG;IACH,aAAa,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IAiBzE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAiBvE;;;;OAIG;IACH,cAAc,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA4B5E;;;;OAIG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA8BxE;;;;OAIG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA4BxE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiCxE;;;;OAIG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAuB1E;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAwBxE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAuBzE;;;;OAIG;IACH,aAAa,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAuB3E;;;;OAIG;IACH,eAAe,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAwB5E;;;;OAIG;IACH,SAAS,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAyBtE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAuBtE;;;;OAIG;IACH,iBAAiB,CACf,UAAU,GAAE,MAAY,EACxB,MAAM,GAAE,MAAmB,GAC1B,IAAI;IA0BP;;;;OAIG;IACH,SAAS,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAwBtE;;;;OAIG;IACH,YAAY,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAwBzE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAwBxE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IA4BzE;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAkBxE;;;OAGG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAgB1E;;;OAGG;IACH,SAAS,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAkBtE;;;OAGG;IACH,SAAS,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAgBtE;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAkBvE;;;OAGG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAezE;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAoBtE;;;OAGG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAkBrE;;;OAGG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAuBrE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAuBtE;;;;OAIG;IACH,aAAa,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAyB3E;;;;OAIG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAwBzE;;;;OAIG;IACH,cAAc,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAyB3E;;;;OAIG;IACH,iBAAiB,CACf,UAAU,GAAE,MAAY,EACxB,MAAM,GAAE,MAAkB,GACzB,IAAI;IAuBP;;;;OAIG;IACH,eAAe,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAsB5E;;;;OAIG;IACH,SAAS,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IA0BtE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAyBxE;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiBxE;;;OAGG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAe1E;;;OAGG;IACH,aAAa,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAe3E;;;OAGG;IACH,KAAK,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAcnE;;;OAGG;IACH,KAAK,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAgBlE;;;OAGG;IACH,SAAS,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IActE;;;OAGG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAerE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAiBxE;;;;OAIG;IACH,cAAc,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAyB3E;;;OAGG;IACH,IAAI,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAWlE;;;;OAIG;IACH,WAAW,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAmBzE;;;;OAIG;IACH,YAAY,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAmB1E;;;;OAIG;IACH,YAAY,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAkBzE;;;;OAIG;IACH,aAAa,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAkB1E;;;OAGG;IACH,KAAK,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAWnE;;;OAGG;IACH,MAAM,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAWpE;;;OAGG;IACH,IAAI,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAWjE;;;OAGG;IACH,QAAQ,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAWtE;;;OAGG;IACH,IAAI,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAYlE;;;OAGG;IACH,IAAI,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAYjE;;;OAGG;IACH,IAAI,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAWjE;;;OAGG;IACH,GAAG,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAYjE;;;OAGG;IACH,KAAK,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAYlE;;;OAGG;IACH,UAAU,CAAC,UAAU,GAAE,MAAa,EAAE,MAAM,GAAE,MAAmB,GAAG,IAAI;IAaxE;;;OAGG;IACH,OAAO,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IAgBnE;;;OAGG;IACH,SAAS,IAAI,IAAI;IAUjB;;;OAGG;IACH,aAAa,IAAI,IAAI;IAQrB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAInE;;;;;;;;;OASG;IACH,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAIrE;;;;;;;;;OASG;IACH,kBAAkB,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAIlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAiB5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG;QAChD,IAAI,EAAE;YACJ,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC,CAAC;QACF,KAAK,EAAE;YACL,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC,CAAC;KACH;IAID;;;OAGG;IACH,UAAU,IAAI,IAAI;IAYlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;OAIG;IACH,YAAY,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAQ5D;;;;OAIG;IACH,aAAa,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAQ7D;;;;OAIG;IACH,YAAY,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAQ5D;;;;OAIG;IACH,QAAQ,CAAC,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GAAG,IAAI;IAQxD;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;;;OAKG;IACH,mBAAmB,CACjB,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,MAAM,OAAO,UAAU,EAC7B,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,MAAe,GACvC,IAAI;IAQP;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,qBAAqB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA2BzE;;;;;;;;OAQG;IACH,wBAAwB,CACtB,EAAE,EAAE,cAAc,EAClB,qBAAqB,EAAE,MAAM,EAC7B,aAAa,EAAE,MAAM,GACpB,IAAI;IAeP;;;;OAIG;IACH,OAAO,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IA2BnE;;;OAGG;IACH,WAAW,CAAC,UAAU,GAAE,MAAY,EAAE,MAAM,GAAE,MAAkB,GAAG,IAAI;IA2BvE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,uBAAuB;IAqC/B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiB,GAAG,cAAc;IAM3D;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAIzC;;;;;OAKG;IACH,KAAK,IAAI,iBAAiB;CA0B3B"}
|
|
1
|
+
{"version":3,"file":"MartialArtsAnimationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/systems/animation/builders/MartialArtsAnimationBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -466,7 +466,7 @@ var MartialArtsAnimationBuilder = class MartialArtsAnimationBuilder {
|
|
|
466
466
|
this.addKeyframe(this.currentTime + timeOffset, easing, (kf) => {
|
|
467
467
|
kf.rotate(BoneName.HIP_R, 1.2, 0, 1.6);
|
|
468
468
|
kf.rotate(BoneName.KNEE_R, -.1, 0, 0);
|
|
469
|
-
kf.rotate(BoneName.FOOT_R,
|
|
469
|
+
kf.rotate(BoneName.FOOT_R, -.3, 0, .3);
|
|
470
470
|
kf.rotate(BoneName.PELVIS, 0, -1.5, 0);
|
|
471
471
|
this.applyKickTorsoLean(kf, "right", 12);
|
|
472
472
|
const upperSpineRot = kf.rotations.get(BoneName.SPINE_UPPER);
|
|
@@ -647,7 +647,7 @@ var MartialArtsAnimationBuilder = class MartialArtsAnimationBuilder {
|
|
|
647
647
|
* - Body completes 180° rotation (pelvis -3.14 rad = π)
|
|
648
648
|
* - Hip extends backward (0.5 rad flex maintained)
|
|
649
649
|
* - Knee extends fully (-0.2 rad) driving heel back
|
|
650
|
-
* - Foot dorsiflexes (
|
|
650
|
+
* - Foot dorsiflexes (+0.4 rad) presenting heel
|
|
651
651
|
* - Foot position extends backward (0 forward, 0 up, -0.8 back)
|
|
652
652
|
* - Head maintains target visual (1.0 rad look-back)
|
|
653
653
|
* - Spine fully rotated with body
|
|
@@ -667,7 +667,7 @@ var MartialArtsAnimationBuilder = class MartialArtsAnimationBuilder {
|
|
|
667
667
|
kf.rotate(BoneName.HEAD, 0, 1, 0);
|
|
668
668
|
kf.rotate(BoneName.HIP_R, .5, 0, 0);
|
|
669
669
|
kf.rotate(BoneName.KNEE_R, -.2, 0, 0);
|
|
670
|
-
kf.rotate(BoneName.FOOT_R,
|
|
670
|
+
kf.rotate(BoneName.FOOT_R, .4, 0, 0);
|
|
671
671
|
kf.position(BoneName.FOOT_R, 0, 0, -.8);
|
|
672
672
|
kf.rotate(BoneName.HIP_L, 0, -.3, 0);
|
|
673
673
|
kf.rotate(BoneName.KNEE_L, -.5, 0, 0);
|
|
@@ -1129,8 +1129,8 @@ var MartialArtsAnimationBuilder = class MartialArtsAnimationBuilder {
|
|
|
1129
1129
|
kf.rotate(elbowBone, 0, 0, isRight ? 1.2 : -1.2);
|
|
1130
1130
|
kf.rotate(oppositeShoulder, -.2, 0, isRight ? -.3 : .3);
|
|
1131
1131
|
kf.rotate(oppositeElbow, 0, 0, isRight ? -1.1 : 1.1);
|
|
1132
|
-
kf.rotate(BoneName.KNEE_L,
|
|
1133
|
-
kf.rotate(BoneName.KNEE_R,
|
|
1132
|
+
kf.rotate(BoneName.KNEE_L, -.05, 0, 0);
|
|
1133
|
+
kf.rotate(BoneName.KNEE_R, -.05, 0, 0);
|
|
1134
1134
|
kf.rotate(BoneName.HIP_L, -.1, 0, 0);
|
|
1135
1135
|
kf.rotate(BoneName.HIP_R, -.1, 0, 0);
|
|
1136
1136
|
kf.rotate(BoneName.PELVIS, -.25, isRight ? .2 : -.2, 0);
|