using Vanguard.Rules.Cards; using Vanguard.Rules.Engine.Abilities; 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 UnitMovedEvent(int Player, int FromSlot, int ToSlot) : GameEvent; public sealed record DriveCheckedEvent(int Player, string PrintingId, TriggerType Trigger) : 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 InterceptedEvent(int Player, int Slot, string PrintingId) : GameEvent; public sealed record InterceptorRetiredEvent(int Player, string PrintingId) : 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 CardSearchedEvent(int Player, string PrintingId) : GameEvent; public sealed record SearchFailedEvent(int Player, string Query) : GameEvent; public sealed record CardRevealedEvent(int Player, string PrintingId) : GameEvent; public sealed record CardReturnedToDeckEvent(int Player, string PrintingId) : GameEvent; public sealed record CardDiscardedEvent(int Player, string PrintingId) : GameEvent; public sealed record UnitReturnedToDeckEvent(int Player, string PrintingId) : GameEvent; public sealed record CardMovedToSoulEvent(int Player, string PrintingId) : GameEvent; public sealed record GameFinishedEvent(int Winner) : GameEvent; public sealed record AbilityTriggeredEvent(int Player, string PrintingId, AbilityTrigger Trigger) : GameEvent; public sealed record AbilityResolvedEvent(int Player, string PrintingId, bool Accepted) : GameEvent;