using MessagePack; using OECS; namespace Game.CardWars; // ──────────────────────────────────────────────────────────── // Per-effect pending choice components. // Each is placed on the singleton entity when a card effect // requires player input. Their presence blocks game advancement. // ──────────────────────────────────────────────────────────── /// Mercenary: choose a combatant to give a skull. [MessagePackObject] public record struct PendingMercenary { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; } /// Dancer: choose up to 2 combatants for horn. Step tracks progress. [MessagePackObject] public record struct PendingDancer { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; [Key(2)] public int Step; // 0 = first choice, 1 = second choice } /// Paladin: choose a combatant or banner for horn. [MessagePackObject] public record struct PendingPaladin { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; } /// Nun: choose a field card to discard. [MessagePackObject] public record struct PendingNun { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; } /// Scout: choose an opponent player to scout. [MessagePackObject] public record struct PendingScout { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; } /// Pegasus: choose a field card to return to hand (or null to pass). [MessagePackObject] public record struct PendingPegasus { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; } /// CurseMaster: choose a horn token to turn into skull. [MessagePackObject] public record struct PendingCurseMaster { [Key(0)] public Entity CardEntity; [Key(1)] public Entity Player; } // ──────────────────────────────────────────────────────────── // Helper to detect any pending component on the singleton. // ──────────────────────────────────────────────────────────── public static class PendingChoice { /// Returns true if any pending choice component exists on the singleton. public static bool Any(World world) { return world.HasSingleton() || world.HasSingleton() || world.HasSingleton() || world.HasSingleton() || world.HasSingleton() || world.HasSingleton() || world.HasSingleton(); } }