combat/slomo/CombatEvents.cs
using System;
using Sandbox;

public static class CombatEvents
{
    // 1. Actions du joueur pour ralentis & impacts caméra
    public static event Action OnPlayerKickWindup;
    public static event Action OnPlayerKickReleased;
    public static event Action<Weapon, Fighter, DamageContext, bool> OnPlayerWeaponThrowHit;
    public static event Action<Fighter, DamageContext> OnPlayerKnockdownEnemy;
    public static event Action<Fighter, DamageContext, bool> OnPlayerKillEnemy;
    public static event Action<Fighter, Fighter, DamageContext> OnPlayerAirKnockdown;
    public static event Action<Fighter, Fighter, DamageContext> OnPlayerReboundStrike;

    // 2. Événements de suivi pour l'arbitrage (ex: Foe Spared)
    public static event Action<Fighter, DamageContext> OnFighterDamaged;
    public static event Action<Fighter> OnFighterRecoveredFromStaggerOrKnockdown;

    // 3. Événements globaux du monde (Joueur ET Bots)
    public static event Action<Fighter, DamageContext> OnFighterKilled;
    public static event Action<Fighter, DamageContext> OnFighterKnockedDown;

    public static void EmitPlayerKickWindup() => OnPlayerKickWindup?.Invoke();
    public static void EmitPlayerKickReleased() => OnPlayerKickReleased?.Invoke();

    public static void EmitPlayerWeaponThrowHit( Weapon weapon, Fighter victim, DamageContext ctx, bool willImpale ) => 
        OnPlayerWeaponThrowHit?.Invoke( weapon, victim, ctx, willImpale );

    public static void EmitPlayerKnockdownEnemy( Fighter victim, DamageContext ctx ) => 
        OnPlayerKnockdownEnemy?.Invoke( victim, ctx );

    public static void EmitPlayerKillEnemy( Fighter victim, DamageContext ctx, bool victimWasUnarmed ) => 
        OnPlayerKillEnemy?.Invoke( victim, ctx, victimWasUnarmed );

    public static void EmitPlayerAirKnockdown( Fighter player, Fighter victim, DamageContext ctx ) => 
        OnPlayerAirKnockdown?.Invoke( player, victim, ctx );

    public static void EmitPlayerReboundStrike( Fighter player, Fighter victim, DamageContext ctx ) => 
        OnPlayerReboundStrike?.Invoke( player, victim, ctx );

    public static void EmitFighterDamaged( Fighter victim, DamageContext ctx ) => 
        OnFighterDamaged?.Invoke( victim, ctx );

    public static void EmitFighterRecoveredFromStaggerOrKnockdown( Fighter fighter ) => 
        OnFighterRecoveredFromStaggerOrKnockdown?.Invoke( fighter );

    public static void EmitFighterKilled( Fighter victim, DamageContext ctx ) => 
        OnFighterKilled?.Invoke( victim, ctx );

    public static void EmitFighterKnockedDown( Fighter victim, DamageContext ctx ) => 
        OnFighterKnockedDown?.Invoke( victim, ctx );
}