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 ColonyCollection createColonies(Player[] players, IList <StarSystemBuilder> starSystems, IList <int> homeSystemIndices, StartingConditions startingConditions, StaticsDB statics) { var colonies = new ColonyCollection(); for (int playerI = 0; playerI < players.Length; playerI++) { var planets = starSystems[homeSystemIndices[playerI]].Planets; var fitness = planets. ToDictionary(x => x, x => ColonyProcessor.DesirabilityOf(x, statics)); for (int i = 0; i < Math.Min(startingConditions.Colonies, planets.Count); i++) { var planet = Methods.FindBest(planets, x => fitness[x]); colonies.Add(new Colony( 0, planet, players[playerI] )); fitness[planet] = double.NegativeInfinity; } } return(colonies); }
private static TemporaryDB initDerivates(StaticsDB statics, Player[] players, Player organellePlayer, StatesDB states) { var derivates = new TemporaryDB(players, organellePlayer, statics.DevelopmentTopics); foreach (var colony in states.Colonies) { var colonyProc = new ColonyProcessor(colony); colonyProc.CalculateBaseEffects(statics, derivates.Players.Of[colony.Owner]); derivates.Colonies.Add(colonyProc); } foreach (var stellaris in states.Stellarises) { var stellarisProc = new StellarisProcessor(stellaris); stellarisProc.CalculateBaseEffects(); derivates.Stellarises.Add(stellarisProc); } foreach (var player in players) { var playerProc = derivates.Players.Of[player]; playerProc.Initialize(statics, states); foreach (var design in states.Designs.OwnedBy[player]) { playerProc.Analyze(design, statics); } } derivates.Natives.Initialize(states, statics, derivates); return(derivates); }
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); } } )) ); } } }
private static ColonyCollection createColonies(Player[] players, IList <StarSystemBuilder> starSystems, IList <int> homeSystemIndices, StartingConditions startingConditions, StaticsDB statics) { var colonies = new ColonyCollection(); for (int playerI = 0; playerI < players.Length; playerI++) { var planets = new HashSet <Planet>(starSystems[homeSystemIndices[playerI]].Planets); var fitness = planets. ToDictionary(x => x, x => ColonyProcessor.DesirabilityOf(x, statics)); while (planets.Count > startingConditions.Colonies) { planets.Remove(Methods.FindWorst(planets, x => fitness[x])); } foreach (var planet in planets) { colonies.Add(new Colony(0, planet, players[playerI])); } } return(colonies); }
internal ColonyInfo(Colony colony, ColonyProcessor processor) { this.Data = colony; this.processor = processor; this.Owner = new PlayerInfo(colony.Owner); }