async Task BringerPushNInvaders(Space source, int countToPush, params TokenClass[] healthyInvaders)
    {
        // We can't track which original invader is was killed, so let the user choose.

//		TokenCountDictionary tokens = ctx.Target(source).Tokens;
        TokenCountDictionary tokens = ctx.GameState.Tokens[source];

        Token[] CalcInvaderTypes() => tokens.OfAnyType(healthyInvaders);

        var invaders = CalcInvaderTypes();

        while (0 < countToPush && 0 < invaders.Length)
        {
            var invader = await ctx.Decision(Select.TokenFrom1Space.TokenToPush(source, countToPush, invaders, Present.Always));

            if (invader == null)
            {
                break;
            }

            var destination = await ctx.Decision(new Select.Space(
                                                     "Push " + invader.ToString() + " to",
                                                     source.Adjacent.Where(s => ctx.Target(s).IsInPlay(Invader.Explorer))
                                                     , Present.Always
                                                     ));

            await tokens.MoveTo(invader, destination);

            --countToPush;
            invaders = CalcInvaderTypes();
        }
    }
Exemplo n.º 2
0
 static public int SumAny(this TokenCountDictionary counts, params TokenClass[] healthyInvaders)
 => counts.OfAnyType(healthyInvaders).Sum(k => counts[k]);
Exemplo n.º 3
0
 static public bool HasAny(this TokenCountDictionary counts, params TokenClass[] healthyInvaders)
 => counts.OfAnyType(healthyInvaders).Any();
Exemplo n.º 4
0
 public static TokenFrom1Space ForStrife(TokenCountDictionary tokens, params TokenClass[] groups)
 => new TokenFrom1Space("Add Strife",
                        tokens.Space,
                        (groups != null && groups.Length > 0) ? tokens.OfAnyType(groups) : tokens.Invaders(),
                        Present.Always
                        );