All files / systems/animation/catalogs GamRedirectionAnimations.ts

100% Statements 5/5
100% Branches 0/0
100% Functions 0/0
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102                                                  53x                                   53x                                       53x                                 53x                               53x          
import type { SkeletalAnimation } from "@/types/skeletal";
import { MartialArtsAnimationBuilder } from "../builders/MartialArtsAnimationBuilder";
 
// ═══════════════════════════════════════════════════════════════════════════
// GAM TRIGRAM (감) - WATER: REDIRECTION & FLOW (유수/방향전환)
// ═══════════════════════════════════════════════════════════════════════════
 
/**
 * Flowing River Strike - 유수타격
 *
 * Signature Gam technique that flows like water around defenses.
 * Unlike direct strikes, this follows a curved path to bypass guards.
 *
 * Target: Face/Neck via curved trajectory
 * Principle: Flow (Yu)
 *
 * Phases:
 * 1. Flow Entry (유입): Circular wind-up
 * 2. Curve (곡선): Arcing strike path
 * 3. Impact (타격): Fluid impact
 * 4. Continue (지속): Follow-through like flowing water
 *
 * @korean 유수타격애니메이션
 */
export const GAM_FLOWING_RIVER_STRIKE: SkeletalAnimation =
  MartialArtsAnimationBuilder.create("flowing_river_strike", "유수타격")
    .asAttack(0.7)
    .parry(0.2) // Initial defensive flow
    .hookPunch(0.3) // Curved strike execution (using hook primitive for curve)
    .recover(0.2) // Flow back
    .build();
 
/**
 * Redirection Counter - 방향전환반격
 *
 * Using the opponent's momentum against them.
 * Catching an attack and redirecting it while striking.
 *
 * Principle: Redirection (Banghyang Jeonhwan)
 *
 * @korean 방향전환반격애니메이션
 */
export const GAM_REDIRECTION_COUNTER: SkeletalAnimation =
  MartialArtsAnimationBuilder.create("redirection_counter", "방향전환반격")
    .asDefense(0.6)
    .parry(0.15) // Catch/Deflect
    .wristTwist(0.15) // Redirect vector
    .palmStrike(0.15) // Simultaneous counter
    .recover(0.15)
    .build();
 
/**
 * Tidal Wave Palm - 해일장
 *
 * A heavy, crashing palm strike that mimics a tidal wave.
 * Builds energy from the ground up through a fluid body wave.
 *
 * Target: Chest/Solar Plexus
 * Principle: Heavy Flow (Jungrryu)
 *
 * @korean 해일장애니메이션
 */
export const GAM_TIDAL_WAVE_PALM: SkeletalAnimation =
  MartialArtsAnimationBuilder.create("tidal_wave_palm", "해일장")
    .asAttack(0.8)
    .chamber(0.25) // Deep gathering like drawing water
    .palmStrike(0.3) // Heavy crashing extension
    .recover(0.25)
    .build();
 
/**
 * Whirlpool Counter - 소용돌이반격
 *
 * Circular defensive movement that traps the opponent's limb.
 *
 * Principle: Vortex (Soyongdori)
 *
 * @korean 소용돌이반격애니메이션
 */
export const GAM_WHIRLPOOL_COUNTER: SkeletalAnimation =
  MartialArtsAnimationBuilder.create("whirlpool_counter", "소용돌이반격")
    .asDefense(0.7)
    .parry(0.15) // Outer deflection
    .wristTwist(0.2) // Circular trap
    .jointLock(0.2) // Lock in the center
    .recover(0.15)
    .build();
 
/**
 * Flowing Block - 유수막기
 *
 * Soft blocking technique that absorbs and redirects force rather than meeting it.
 *
 * @korean 유수막기애니메이션
 */
export const GAM_FLOWING_BLOCK: SkeletalAnimation =
  MartialArtsAnimationBuilder.create("flowing_block", "유수막기")
    .asDefense(0.5)
    .parry(0.25) // Long, fluid parry motion
    .recover(0.25)
    .build();