private static void initColonies(Player[] players, ColonyCollection colonies, StartingConditions startingConditions, TemporaryDB derivates, StaticsDB statics) { foreach (Colony colony in colonies) { var colonyProc = new ColonyProcessor(colony); colonyProc.CalculateBaseEffects(statics, derivates.Players.Of[colony.Owner]); derivates.Colonies.Add(colonyProc); } foreach (Player player in players) { var weights = new ChoiceWeights <Colony>(); foreach (Colony colony in colonies.OwnedBy[player]) { weights.Add(colony, derivates.Colonies.Of[colony].Desirability); } var maxPopulation = colonies.OwnedBy[player].Sum(x => derivates.Colonies.Of[x].MaxPopulation); double totalPopulation = Math.Min(startingConditions.Population, maxPopulation); double totalInfrastructure = Math.Min(startingConditions.Infrastructure, maxPopulation); foreach (var colony in colonies.OwnedBy[player]) { colony.Population = weights.Relative(colony) * totalPopulation; derivates.Colonies.Of[colony].CalculateBaseEffects(statics, derivates.Players.Of[player]); } } }
private static void initColonies(MainGame game, StartingConditions startingConditions) { var colonies = game.States.Colonies; foreach (var colony in colonies) { var colonyProc = new ColonyProcessor(colony); colonyProc.CalculateBaseEffects(game.Statics, game.Derivates.Players.Of[colony.Owner]); game.Derivates.Colonies.Add(colonyProc); } foreach (var player in game.MainPlayers) { var weights = new ChoiceWeights <Colony>(); foreach (var colony in colonies.OwnedBy[player]) { weights.Add(colony, game.Derivates.Colonies.Of[colony].Desirability); } Methods.DistributePoints( startingConditions.Population, colonies.OwnedBy[player].Select(colony => new PointReceiver( game.Derivates.Colonies.Of[colony].Desirability, game.Derivates.Colonies.Of[colony].MaxPopulation, x => { colony.Population = x; } )) ); var playerProcessor = game.Derivates[player]; foreach (var building in startingConditions.Buildings) { var project = game.Statics.Constructables.First(x => x.IdCode == building.Id); Methods.DistributePoints( startingConditions.Population, colonies.OwnedBy[player].Select(colony => new PointReceiver( game.Derivates.Colonies.Of[colony].Desirability, project.TurnLimit.Evaluate( game.Derivates[colony]. LocalEffects(game.Statics). UnionWith(playerProcessor.TechLevels).Get ), x => { foreach (var effect in project.Effects) { effect.Apply(game, colony, (long)x); } } )) ); } } }