Exemple #1
0
        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]);
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
                        }
                    }
                                                            ))
                        );
                }
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 internal ColonyInfo(Colony colony, ColonyProcessor processor)
 {
     this.Data      = colony;
     this.processor = processor;
     this.Owner     = new PlayerInfo(colony.Owner);
 }