Esempio n. 1
0
            protected override void ExecuteQuery()
            {
                var chosenAttackers = Game.Recorder.LoadDecisionResult();

                if (chosenAttackers is ChosenAttackers)
                {
                    Result = (ChosenAttackers)chosenAttackers;
                }
                else
                {
                    // For backward compatibility reasons
                    // so old savegames can be loaded.
                    Result = new ChosenAttackers((ChosenCards)chosenAttackers);
                }
            }
Esempio n. 2
0
 public MachineHandler()
 {
     Result    = new ChosenAttackers();
     _executor = new MachinePlanExecutor(this);
 }
Esempio n. 3
0
            protected override void ExecuteQuery()
            {
                var result        = new ChosenAttackers();
                var availableMana = D.Controller.GetAvailableManaCount();

                while (true)
                {
                    var attackerSpec = new IsValidTargetBuilder()
                                       .Is.Card(c => c.CanAttack && c.Controller == D.Controller && c.CombatCost <= availableMana)
                                       .On.Battlefield();

                    var attackerTarget = new TargetValidatorParameters(
                        isValidTarget: attackerSpec.IsValidTarget,
                        isValidZone: attackerSpec.IsValidZone)
                    {
                        MinCount         = IsValidAttackerDeclaration(result) ? 0 : 1,
                        MaxCount         = 1,
                        Message          = "Select an attacker.",
                        MustBeTargetable = false
                    };

                    var validator = new TargetValidator(attackerTarget);
                    validator.Initialize(Game, D.Controller);

                    var selectAttacker = Ui.Dialogs.SelectTarget.Create(new SelectTargetParameters
                    {
                        Validator    = validator,
                        CanCancel    = false,
                        Instructions = IsValidAttackerDeclaration(result) ? null : "(Additional attackers required.)"
                    });

                    Ui.Shell.ShowModalDialog(selectAttacker, DialogType.Small, InteractionState.SelectTarget);

                    if (selectAttacker.Selection.Count == 0)
                    {
                        break;
                    }

                    var attacker = (Card)selectAttacker.Selection[0];

                    if (result.Any(a => a.Card == attacker))
                    {
                        availableMana += attacker.CombatCost;

                        Ui.Publisher.Publish(
                            new AttackerUnselected
                        {
                            Attacker = attacker
                        });


                        result.Remove(attacker);
                        continue;
                    }

                    Card planeswalker = null;
                    if (Planeswalkers.Count > 0)
                    {
                        var planeswalkerSpec = new IsValidTargetBuilder()
                                               .Is.Card(c => c.Is().Planeswalker&& c.Controller == D.Controller.Opponent)
                                               .On.Battlefield();

                        var planeswalkerTarget = new TargetValidatorParameters(
                            isValidTarget: planeswalkerSpec.IsValidTarget,
                            isValidZone: planeswalkerSpec.IsValidZone)
                        {
                            MinCount         = 0,
                            MaxCount         = 1,
                            Message          = "Select a planeswalker to attack",
                            MustBeTargetable = false
                        };

                        var planeswalkerValidator = new TargetValidator(planeswalkerTarget);
                        planeswalkerValidator.Initialize(Game, D.Controller);

                        var selectPlaneswalker = Ui.Dialogs.SelectTarget.Create(new SelectTargetParameters
                        {
                            Validator    = planeswalkerValidator,
                            Instructions = "(or press enter to attack the opponent)."
                        });

                        Ui.Shell.ShowModalDialog(selectPlaneswalker, DialogType.Small, InteractionState.SelectTarget);
                        if (selectPlaneswalker.Selection.Count > 0)
                        {
                            planeswalker = (Card)selectPlaneswalker.Selection[0];
                        }
                    }

                    availableMana -= attacker.CombatCost;
                    Ui.Publisher.Publish(
                        new AttackerSelected
                    {
                        Attacker = attacker
                    });

                    result.Add(attacker, planeswalker);
                }

                Result = result;
            }
Esempio n. 4
0
 private bool IsValidAttackerDeclaration(ChosenAttackers attackers)
 {
     return(CreaturesThatMustAttack.All(creature => attackers.Any(x => x.Card == creature)));
 }
Esempio n. 5
0
 public ScenarioHandler()
 {
     Result = new ChosenAttackers();
 }