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 }); }
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); }
public void Targets(params ITarget[] effectTargets) { foreach (var effectTarget in effectTargets) { if (effectTarget != null) { _targets.AddEffect(effectTarget); } } }
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 }); }