Exemplo n.º 1
0
    public void MarkAsUsed(GrowthOption option)
    {
        var grp = remaining.First(grp => grp.options.Contains(option));

        grp.options.Remove(option);
        --grp.count;
    }
Exemplo n.º 2
0
    public void Add(GrowthOption option)         // hook for Starlight
    {
        var options = Options.ToList();

        options.Add(option);
        Options = options.ToArray();
    }
Exemplo n.º 3
0
 public void Grow(GrowthOption option)
 {
     foreach (GrowthActionFactory action in option.UserRuns)
     {
         AddActionFactory(action);
     }
 }
Exemplo n.º 4
0
    public virtual async Task DoGrowth(GameState gameState)
    {
        var ctx = Bind(gameState);

        // (1) Pre-Growth Track options
        foreach (ITrackActionFactory action in Presence.RevealedActions)
        {
            if (!action.RunAfterGrowthResult)
            {
                await action.ActivateAsync(ctx);
            }
        }

        // (b) Growth
        IGrowthPhaseInstance inst = Growth.GetInstance();

        GrowthOption[] options;
        while ((options = inst.RemainingOptions(Energy)).Length > 0)
        {
            GrowthOption option = (GrowthOption)await this.Select("Select Growth Option", options, Present.Always);

            inst.MarkAsUsed(option);
            await GrowAndResolve(option, gameState);
        }

        // (c) Post-Growth Track options
        await ApplyRevealedPresenceTracks(ctx);
    }
Exemplo n.º 5
0
    public async Task GrowAndResolve(GrowthOption option, GameState gameState)
    {
        var ctx = Bind(gameState);

        // Auto run the auto-runs.
        foreach (var autoAction in option.AutoRuns)
        {
            await autoAction.ActivateAsync(ctx);
        }

        // If Option has only 1 Action, auto trigger it.
        if (option.UserRuns.Count() == 1)
        {
            await option.UserRuns.First().ActivateAsync(ctx);

            return;
        }

        Grow(option);
        await ResolveActions(ctx);
    }
Exemplo n.º 6
0
    public override async Task ActivateAsync(SelfCtx ctx)
    {
        if (used)
        {
            return;
        }

        if (add1Energy)
        {
            ctx.Self.Energy++;
        }

        if (trackToReceiveElementAssignment != null)
        {
            await AssignElement.AssignNewElementToTrack(ctx, trackToReceiveElementAssignment);
        }

        GrowthOption option = (GrowthOption)await ctx.Self.Select("Select New Growth Option", options, Present.Always);

        ctx.Self.Growth.Groups.Single().Add(option);

        used = true;
    }