public void MarkAsUsed(GrowthOption option) { var grp = remaining.First(grp => grp.options.Contains(option)); grp.options.Remove(option); --grp.count; }
public void Add(GrowthOption option) // hook for Starlight { var options = Options.ToList(); options.Add(option); Options = options.ToArray(); }
public void Grow(GrowthOption option) { foreach (GrowthActionFactory action in option.UserRuns) { AddActionFactory(action); } }
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); }
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); }
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; }