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 );
}