protected override IEnumerable<Targets> SelectTargets(TargetingRuleParameters p)
        {
            var sourceTargetCandidates = GetDamageSourceAndDamageTargetCandidates(p);

              if (sourceTargetCandidates.DamageSource.Count == 0 ||
            sourceTargetCandidates.DamageTarget.Count == 0)
              {
            return None<Targets>();
              }

              // for simplicity we consider only 'best' 1 legal assignment
              var damageSource = sourceTargetCandidates.DamageSource[0];
              var damageTarget = sourceTargetCandidates.DamageTarget[0];

              // cost should not be paid with damage target
              var cost = p.Candidates<Card>(selector: trgs => trgs.Cost)
            .OrderBy(x => x.Score)
            .Where(x => x != damageTarget)
            .FirstOrDefault();

              if (cost == null)
              {
            return None<Targets>();
              }

              var targets = new Targets();
              targets.AddCost(cost);
              targets.AddEffect(damageSource);
              targets.AddEffect(damageTarget);

              return new[] {targets};
        }
        protected override IEnumerable <Targets> SelectTargets(TargetingRuleParameters p)
        {
            var sourceTargetCandidates = GetDamageSourceAndDamageTargetCandidates(p);

            if (sourceTargetCandidates.DamageSource.Count == 0 ||
                sourceTargetCandidates.DamageTarget.Count == 0)
            {
                return(None <Targets>());
            }

            // for simplicity we consider only 'best' 1 legal assignment
            var damageSource = sourceTargetCandidates.DamageSource[0];
            var damageTarget = sourceTargetCandidates.DamageTarget[0];

            // cost should not be paid with damage target
            var cost = p.Candidates <Card>(selector: trgs => trgs.Cost)
                       .OrderBy(x => x.Score)
                       .Where(x => x != damageTarget)
                       .FirstOrDefault();

            if (cost == null)
            {
                return(None <Targets>());
            }

            var targets = new Targets();

            targets.AddCost(cost);
            targets.AddEffect(damageSource);
            targets.AddEffect(damageTarget);

            return(new[] { targets });
        }
예제 #3
0
            protected override void ExecuteQuery()
            {
                var targets = new Targets();

                foreach (var validator in D._p.TargetSelector.Effect)
                {
                    if (NoValidTargets(validator))
                    {
                        continue;
                    }

                    var selectTargetParameters = new SelectTargetParameters
                    {
                        Validator      = validator,
                        CanCancel      = false,
                        TriggerMessage = D._p.Effect.TriggerMessage <object>()
                    };

                    var dialog = Ui.Dialogs.SelectTarget.Create(selectTargetParameters);
                    Ui.Shell.ShowModalDialog(dialog, DialogType.Small, InteractionState.SelectTarget);

                    foreach (var target in dialog.Selection)
                    {
                        targets.AddEffect(target);
                    }
                }

                if (D._p.DistributeAmount > 0)
                {
                    targets.Distribution = DistributeAmount(targets.Effect, D._p.DistributeAmount);
                }

                Result = new ChosenTargets(targets);
            }
예제 #4
0
 public void Targets(params ITarget[] effectTargets)
 {
     foreach (var effectTarget in effectTargets)
     {
         if (effectTarget != null)
         {
             _targets.AddEffect(effectTarget);
         }
     }
 }
예제 #5
0
        protected IList <Targets> Group(IList <ITarget> candidates, List <int> damageDistribution)
        {
            var result = new Targets();

            foreach (var candidate in candidates)
            {
                result.AddEffect(candidate);
            }

            result.Distribution = damageDistribution;
            return(new[] { result });
        }