Exemplo n.º 1
0
		public StellarisProcessor this[StellarisAdmin stellaris]
		{
			get
			{
				return this.Stellarises.Of[stellaris];
			}
		}
Exemplo n.º 2
0
        internal StellarisInfo(StellarisAdmin stellaris, MainGame game)
        {
            this.Stellaris = stellaris;
            this.Owner     = new PlayerInfo(stellaris.Owner);

            this.Population = game.States.Colonies.
                              AtStar[stellaris.Location.Star].
                              Where(x => x.Owner == stellaris.Owner).
                              Sum(x => x.Population);
        }
Exemplo n.º 3
0
        //TODO(v0.8) can unintentionally land non-colony ships like scouts
        private void doColonization()
        {
            foreach (var project in this.game.States.ColonizationProjects)
            {
                var  playerProc   = this.game.Derivates[project.Owner];
                bool colonyExists = this.game.States.Colonies.AtPlanet.Contains(project.Destination);

                var colonizers = this.game.States.Fleets.At[project.Destination.Star.Position].
                                 Where(x => x.Owner == project.Owner && x.Ships.Any(s => s.PopulationTransport > 0));

                var arrivedPopulation    = colonizers.SelectMany(x => x.Ships).Sum(x => x.PopulationTransport);
                var colonizationTreshold = this.game.Statics.ColonyFormulas.ColonizationPopulationThreshold.Evaluate(null);

                if (!colonyExists && arrivedPopulation >= colonizationTreshold)
                {
                    var colony     = new Colony(0, project.Destination, project.Owner);
                    var colonyProc = new ColonyProcessor(colony);
                    colonyProc.CalculateBaseEffects(this.game.Statics, this.game.Derivates.Players.Of[colony.Owner]);

                    foreach (var fleet in colonizers)
                    {
                        foreach (var shipGroup in fleet.Ships)
                        {
                            var shipStats = playerProc.DesignStats[shipGroup.Design];
                            if (shipStats.ColonizerPopulation <= 0)
                            {
                                continue;
                            }

                            var landingLimit = (long)Math.Ceiling((colonizationTreshold - colony.Population) / shipStats.ColonizerPopulation);
                            var shipsLanded  = Math.Min(shipGroup.Quantity, landingLimit);

                            colonyProc.AddPopulation(shipsLanded * shipStats.ColonizerPopulation);

                            foreach (var building in shipStats.ColonizerBuildings)
                            {
                                if (colony.Buildings.ContainsKey(building.Key))
                                {
                                    colony.Buildings[building.Key] += building.Value * shipGroup.Quantity;
                                }
                                else
                                {
                                    colony.Buildings.Add(building.Key, building.Value * shipGroup.Quantity);
                                }
                            }

                            shipGroup.Quantity            -= shipsLanded;
                            shipGroup.PopulationTransport -= shipsLanded * shipStats.ColonizerPopulation;
                            if (shipGroup.Quantity < 1)
                            {
                                fleet.Ships.PendRemove(shipGroup);
                            }
                        }

                        fleet.Ships.ApplyPending();
                        if (fleet.Ships.Count == 0)
                        {
                            game.States.Fleets.PendRemove(fleet);
                        }
                    }
                    game.States.Fleets.ApplyPending();

                    this.game.States.Colonies.Add(colony);
                    this.game.Derivates.Colonies.Add(colonyProc);
                    this.game.Orders[project.Owner].ConstructionPlans[colony]     = new ConstructionOrders(PlayerOrders.DefaultSiteSpendingRatio);
                    this.game.Orders[project.Owner].AutomatedConstruction[colony] = new ConstructionOrders(0);

                    if (this.game.States.Stellarises.At[project.Destination.Star].All(x => x.Owner != project.Owner))
                    {
                        var stellaris = new StellarisAdmin(project.Destination.Star, project.Owner);
                        this.game.States.Stellarises.Add(stellaris);
                        this.game.Derivates.Stellarises.Add(new StellarisProcessor(stellaris));
                        this.game.Orders[project.Owner].Policies[stellaris] = game.Statics.Policies.First();
                        this.game.Orders[project.Owner].AutomatedConstruction[stellaris] = new ConstructionOrders(0);
                    }
                }

                if (colonyExists || arrivedPopulation >= colonizationTreshold)
                {
                    this.game.Orders[project.Owner].ColonizationTargets.Remove(project.Destination);
                    this.game.States.ColonizationProjects.PendRemove(project);
                }
            }

            this.game.States.ColonizationProjects.ApplyPending();
        }
Exemplo n.º 4
0
 internal StellarisAdminController(MainGame game, StellarisAdmin stellaris, bool readOnly, Player player) :
     base(stellaris, readOnly, game, player)
 {
 }
 public StellarisProcessor(StellarisAdmin stellaris) : base()
 {
     this.Stellaris = stellaris;
 }
Exemplo n.º 6
0
        private void doColonization()
        {
            foreach (var project in this.game.States.ColonizationProjects)
            {
                var  playerProc   = this.game.Derivates.Of(project.Owner);
                bool colonyExists = this.game.States.Colonies.AtPlanet.Contains(project.Destination);

                var colonizers = this.game.States.Fleets.At[project.Destination.Star.Position].Where(
                    x =>
                {
                    if (x.Owner != project.Owner || x.Missions.Count == 0)
                    {
                        return(false);
                    }

                    var mission = x.Missions.First.Value as ColonizationMission;
                    return(mission != null && mission.Target == project.Destination);
                });

                var arrivedPopulation    = colonizers.SelectMany(x => x.Ships).Sum(x => playerProc.DesignStats[x.Design].ColonizerPopulation * x.Quantity);
                var colonizationTreshold = this.game.Statics.ColonyFormulas.ColonizationPopulationThreshold.Evaluate(null);

                if (!colonyExists && arrivedPopulation >= colonizationTreshold)
                {
                    var colony     = new Colony(0, project.Destination, project.Owner);
                    var colonyProc = new ColonyProcessor(colony);
                    colonyProc.CalculateBaseEffects(this.game.Statics, this.game.Derivates.Players.Of[colony.Owner]);

                    foreach (var fleet in colonizers)
                    {
                        foreach (var shipGroup in fleet.Ships)
                        {
                            var shipStats       = playerProc.DesignStats[shipGroup.Design];
                            var groupPopulation = shipStats.ColonizerPopulation * shipGroup.Quantity;
                            var landingLimit    = (long)Math.Ceiling((colonizationTreshold - colony.Population) / shipStats.ColonizerPopulation);
                            var shipsLanded     = Math.Min(shipGroup.Quantity, landingLimit);

                            colonyProc.AddPopulation(shipsLanded * shipStats.ColonizerPopulation);

                            foreach (var building in shipStats.ColonizerBuildings)
                            {
                                if (colony.Buildings.ContainsKey(building.Key))
                                {
                                    colony.Buildings[building.Key] += building.Value * shipGroup.Quantity;
                                }
                                else
                                {
                                    colony.Buildings.Add(building.Key, building.Value * shipGroup.Quantity);
                                }
                            }

                            shipGroup.Quantity -= shipsLanded;
                            if (shipGroup.Quantity < 1)
                            {
                                fleet.Ships.PendRemove(shipGroup);
                            }
                        }

                        fleet.Ships.ApplyPending();
                        if (fleet.Ships.Count == 0)
                        {
                            game.States.Fleets.PendRemove(fleet);
                        }
                    }
                    game.States.Fleets.ApplyPending();

                    this.game.States.Colonies.Add(colony);
                    this.game.Derivates.Colonies.Add(colonyProc);

                    if (this.game.States.Stellarises.At[project.Destination.Star].All(x => x.Owner != project.Owner))
                    {
                        var stellaris = new StellarisAdmin(project.Destination.Star, project.Owner);
                        this.game.States.Stellarises.Add(stellaris);
                        this.game.Derivates.Stellarises.Add(new StellarisProcessor(stellaris));
                    }
                }

                if (colonyExists || !colonyExists && arrivedPopulation >= colonizationTreshold)
                {
                    project.Owner.Orders.ColonizationOrders.Remove(project.Destination);
                    this.game.States.ColonizationProjects.PendRemove(project);
                }
            }

            this.game.States.ColonizationProjects.ApplyPending();
        }
Exemplo n.º 7
0
 private StellarisProcessor(StellarisAdmin stellaris, StellarisProcessor original) : base(original)
 {
     this.Stellaris = stellaris;
 }
Exemplo n.º 8
0
        private static Tuple <StatesDB, Player[], Player> loadSaveData(IkonComposite saveData, ObjectDeindexer deindexer, StaticsDB statics)
        {
            var stateData  = saveData[MainGame.StatesKey].To <IkonComposite>();
            var ordersData = saveData[MainGame.OrdersKey].To <IkonArray>();

            var stars = new StarCollection();

            foreach (var rawData in stateData[StatesDB.StarsKey].To <IEnumerable <IkonComposite> >())
            {
                stars.Add(StarData.Load(rawData, deindexer));
            }

            var planets = new PlanetCollection();

            foreach (var rawData in stateData[StatesDB.PlanetsKey].To <IEnumerable <IkonComposite> >())
            {
                planets.Add(Planet.Load(rawData, deindexer));
            }

            var wormholes = new WormholeCollection();

            foreach (var rawData in stateData[StatesDB.WormholesKey].To <IEnumerable <IkonComposite> >())
            {
                wormholes.Add(Wormhole.Load(rawData, deindexer));
            }

            var players = new List <Player>();

            foreach (var rawData in saveData[MainGame.PlayersKey].To <IEnumerable <IkonComposite> >())
            {
                players.Add(Player.Load(rawData, deindexer));
            }

            var organellePlayer = Player.Load(saveData[MainGame.OrganellePlayerKey].To <IkonComposite>(), deindexer);

            var developments = new DevelopmentProgressCollection();

            foreach (var rawData in stateData[StatesDB.DevelopmentAdvancesKey].To <IEnumerable <IkonComposite> >())
            {
                developments.Add(DevelopmentProgress.Load(rawData, deindexer));
            }

            var research = new ResearchProgressCollection();

            foreach (var rawData in stateData[StatesDB.ResearchAdvancesKey].To <IEnumerable <IkonComposite> >())
            {
                research.Add(ResearchProgress.Load(rawData, deindexer));
            }

            var treaties = new TreatyCollection();

            foreach (var rawData in stateData[StatesDB.TreatiesKey].To <IEnumerable <IkonComposite> >())
            {
                treaties.Add(Treaty.Load(rawData, deindexer));
            }

            var reports = new ReportCollection();

            foreach (var rawData in stateData[StatesDB.ReportsKey].To <IEnumerable <IkonComposite> >())
            {
                reports.Add(ReportFactory.Load(rawData, deindexer));
            }

            var designs = new DesignCollection();

            foreach (var rawData in stateData[StatesDB.DesignsKey].To <IEnumerable <IkonComposite> >())
            {
                var design = Design.Load(rawData, deindexer);
                design.CalcHash(statics);
                designs.Add(design);
                deindexer.Add(design.ConstructionProject, design.ConstructionProject.IdCode);
            }

            var colonizations = new ColonizationCollection();

            foreach (var rawData in stateData[StatesDB.ColonizationKey].To <IEnumerable <IkonComposite> >())
            {
                colonizations.Add(ColonizationProject.Load(rawData, deindexer));
            }

            var fleets = new FleetCollection();

            foreach (var rawData in stateData[StatesDB.IdleFleetsKey].To <IEnumerable <IkonComposite> >())
            {
                fleets.Add(Fleet.Load(rawData, deindexer));
            }

            var colonies = new ColonyCollection();

            foreach (var rawData in stateData[StatesDB.ColoniesKey].To <IEnumerable <IkonComposite> >())
            {
                colonies.Add(Colony.Load(rawData, deindexer));
            }

            var stellarises = new StellarisCollection();

            foreach (var rawData in stateData[StatesDB.StellarisesKey].To <IEnumerable <IkonComposite> >())
            {
                stellarises.Add(StellarisAdmin.Load(rawData, deindexer));
            }

            for (int i = 0; i < players.Count; i++)
            {
                players[i].Orders = PlayerOrders.Load(ordersData[i].To <IkonComposite>(), deindexer);
            }
            organellePlayer.Orders = PlayerOrders.Load(saveData[MainGame.OrganelleOrdersKey].To <IkonComposite>(), deindexer);

            return(new Tuple <StatesDB, Player[], Player>(
                       new StatesDB(stars, wormholes, planets, colonies, stellarises, developments, research, treaties, reports, designs, fleets, colonizations),
                       players.ToArray(),
                       organellePlayer
                       ));
        }
Exemplo n.º 9
0
 internal StellarisProcessor Of(StellarisAdmin stellaris)
 {
     return(this.Stellarises.Of[stellaris]);
 }