public async Task <string> Exec( BuildingEventArgs args, TokenCountDictionary tokens, GameState gameState ) { if (!tokens.HasInvaders()) { return("No invaders"); } BuildingEventArgs.BuildType buildType = args.GetBuildType(tokens.Space); this.tokens = tokens; this.buildType = buildType; this.gameState = gameState; if (await StopBuildWithDiseaseBehavior()) { return(tokens.Space.Label + " build stopped by disease"); } // Determine type to build int townCount = tokens.Sum(Invader.Town); int cityCount = tokens.Sum(Invader.City); HealthTokenClass invaderToAdd = townCount > cityCount ? Invader.City : Invader.Town; // check if we should bool shouldBuild = buildType switch { BuildingEventArgs.BuildType.CitiesOnly => invaderToAdd == Invader.City, BuildingEventArgs.BuildType.TownsOnly => invaderToAdd == Invader.Town, _ => true, }; // build it if (shouldBuild) { await tokens.AddDefault(invaderToAdd, 1, AddReason.Build); } return(invaderToAdd.Label); }