using Vanguard.Rules.Cards; namespace Vanguard.Rules.Engine; public abstract record GameEvent; public sealed record GameStartedEvent(int FirstPlayer) : GameEvent; public sealed record PhaseChangedEvent(int Player, Phase Phase) : GameEvent; public sealed record MulliganEvent(int Player, int Count) : GameEvent; public sealed record CardDrawnEvent(int Player) : GameEvent; public sealed record UnitRodeEvent(int Player, string PrintingId) : GameEvent; public sealed record UnitCalledEvent(int Player, int Slot, string PrintingId) : GameEvent; public sealed record AttackDeclaredEvent(int Player, int AttackerSlot, int TargetSlot) : GameEvent; public sealed record BoostedEvent(int Player, int BoosterSlot, int AttackerSlot) : GameEvent; public sealed record GuardAddedEvent(int Player, string PrintingId, int Shield) : GameEvent; public sealed record PerfectGuardEvent(int Player, string SentinelPrintingId, string? DiscardedPrintingId) : GameEvent; public sealed record TriggerResolvedEvent(int Player, string PrintingId, TriggerType Trigger) : GameEvent; public sealed record TriggerAppliedEvent(int Player, int PowerTarget, int EffectTarget) : GameEvent; public sealed record BattleResolvedEvent(bool Hit) : GameEvent; public sealed record DamageTakenEvent(int Player, int Amount, int Total) : GameEvent; public sealed record HealedEvent(int Player) : GameEvent; public sealed record UnitRetiredEvent(int Player, int Slot) : GameEvent; public sealed record GameFinishedEvent(int Winner) : GameEvent;