Exemple #1
0
 public static IEnumerable <ILegacyStarMapObject> CreateStarSystem(
     Random random,
     Matrix worldTransform,
     Kerberos.Sots.Data.StarMapFramework.StarSystem systemParams,
     LegacyTerrain parentTerrain)
 {
     return((IEnumerable <ILegacyStarMapObject>) new ILegacyStarMapObject[1]
     {
         (ILegacyStarMapObject)StarSystemHelper.CreateStarSystem(random, worldTransform, systemParams, parentTerrain)
     });
 }
Exemple #2
0
 internal void AssignEmptyPlanetParameters(Random random)
 {
     foreach (Kerberos.Sots.StarSystem starSystem in this.Objects.OfType <Kerberos.Sots.StarSystem>())
     {
         foreach (IStellarEntity stellarEntity in starSystem.Objects)
         {
             if (stellarEntity.Params is PlanetOrbit)
             {
                 PlanetOrbit planetOrbit = stellarEntity.Params as PlanetOrbit;
                 if (!planetOrbit.Suitability.HasValue)
                 {
                     planetOrbit.Suitability = new float?(StarSystemHelper.ChoosePlanetSuitability(random));
                 }
                 if (!planetOrbit.Resources.HasValue)
                 {
                     planetOrbit.Resources = new int?((int)StarSystemHelper.ChoosePlanetResources(random));
                 }
                 if (!planetOrbit.Biosphere.HasValue)
                 {
                     planetOrbit.Biosphere = new int?((int)StarSystemHelper.ChoosePlanetBiosphere(random));
                 }
                 if (!planetOrbit.Size.HasValue)
                 {
                     planetOrbit.Size = stellarEntity.Orbit == null || stellarEntity.Orbit.Parent != starSystem.Star.Params ? new int?(random.NextInclusive(StarSystemVars.Instance.HabitalMoonMinSize, StarSystemVars.Instance.HabitalMoonMaxSize)) : new int?((int)StarSystemHelper.ChooseSize(random, StarSystemVars.Instance.PlanetMinRadius, StarSystemVars.Instance.PlanetMaxRadius));
                 }
             }
             else if (stellarEntity.Params is GasGiantSmallOrbit)
             {
                 GasGiantSmallOrbit gasGiantSmallOrbit = stellarEntity.Params as GasGiantSmallOrbit;
                 if (!gasGiantSmallOrbit.Size.HasValue)
                 {
                     gasGiantSmallOrbit.Size = new float?(StarSystemHelper.ChooseSize(random, StarSystemVars.Instance.GasGiantMinRadiusSmall, StarSystemVars.Instance.GasGiantMaxRadiusSmall));
                 }
             }
             else if (stellarEntity.Params is GasGiantLargeOrbit)
             {
                 GasGiantLargeOrbit gasGiantLargeOrbit = stellarEntity.Params as GasGiantLargeOrbit;
                 if (!gasGiantLargeOrbit.Size.HasValue)
                 {
                     gasGiantLargeOrbit.Size = new float?(StarSystemHelper.ChooseSize(random, StarSystemVars.Instance.GasGiantMinRadiusLarge, StarSystemVars.Instance.GasGiantMaxRadiusLarge));
                 }
             }
             else if (stellarEntity.Params is MoonOrbit)
             {
                 MoonOrbit moonOrbit = stellarEntity.Params as MoonOrbit;
                 if (!moonOrbit.Size.HasValue)
                 {
                     moonOrbit.Size = new float?(StarSystemHelper.ChooseSize(random, StarSystemVars.Instance.MoonMinRadius, StarSystemVars.Instance.MoonMaxRadius));
                 }
             }
         }
     }
 }
Exemple #3
0
        private void AddProteanSystemInstance(GameDatabase gamedb, AssetDatabase assetdb, int SystemId)
        {
            GardenerInfo gi = new GardenerInfo();

            gi.SystemId = SystemId;
            List <PlanetInfo> list                = ((IEnumerable <PlanetInfo>)gamedb.GetStarSystemPlanetInfos(SystemId)).ToList <PlanetInfo>();
            int                num1               = 0;
            int                num2               = 0;
            float              num3               = gamedb.GetFactions().Average <FactionInfo>((Func <FactionInfo, float>)(x => x.IdealSuitability));
            Random             safeRandom         = App.GetSafeRandom();
            GardenerGlobalData globalGardenerData = assetdb.GlobalGardenerData;

            foreach (PlanetInfo planet in list)
            {
                if (!gamedb.GetOrbitalObjectInfo(planet.ID).ParentID.HasValue&& planet.Type != "barren" && planet.Type != "gaseous")
                {
                    planet.Biosphere   = safeRandom.Next(globalGardenerData.MinBiosphere, globalGardenerData.MaxBiosphere);
                    planet.Suitability = num3;
                    ++num1;
                    gamedb.UpdatePlanet(planet);
                }
            }
            if (num1 < globalGardenerData.MinPlanets)
            {
                int num4 = globalGardenerData.MinPlanets - num1;
                int num5 = gamedb.GetStarSystemOrbitalObjectInfos(SystemId).Where <OrbitalObjectInfo>((Func <OrbitalObjectInfo, bool>)(x => !x.ParentID.HasValue)).Count <OrbitalObjectInfo>() + 1;
                for (int index = 0; index < num4; ++index)
                {
                    PlanetOrbit planetOrbit = new PlanetOrbit();
                    planetOrbit.OrbitNumber = num5 + index;
                    planetOrbit.Biosphere   = new int?(safeRandom.Next(globalGardenerData.MinBiosphere, globalGardenerData.MaxBiosphere));
                    planetOrbit.Suitability = new float?(num3);
                    PlanetInfo pi = StarSystemHelper.InferPlanetInfo((Kerberos.Sots.Data.StarMapFramework.Orbit)planetOrbit);
                    gamedb.AddPlanetToSystem(SystemId, new int?(), null, pi, new int?(num5 + index));
                }
            }
            List <PlanetInfo> planetInfoList = new List <PlanetInfo>();

            foreach (PlanetInfo planetInfo in list)
            {
                if (planetInfo.Type != "barren" && planetInfo.Type != "gaseous")
                {
                    num2 += (int)planetInfo.Size;
                    planetInfoList.Add(planetInfo);
                }
            }
            int fleetID = gamedb.InsertFleet(this.PlayerId, 0, SystemId, SystemId, "Protean Pod", FleetType.FL_NORMAL);

            gi.FleetId = fleetID;
            gamedb.InsertGardenerInfo(gi);
            int encounterIdAtSystem = gamedb.GetEncounterIDAtSystem(EasterEgg.EE_GARDENERS, gi.SystemId);

            for (int index = 0; index < num2; ++index)
            {
                int shipId = gamedb.InsertShip(fleetID, this._proteanDesignId, null, (ShipParams)0, new int?(), 0);
                int num4   = 0;
                foreach (PlanetInfo planetInfo in planetInfoList)
                {
                    num4 += (int)planetInfo.Size;
                    if (index < num4)
                    {
                        gamedb.InsertProteanShipOrbitMap(encounterIdAtSystem, shipId, planetInfo.ID);
                        break;
                    }
                }
            }
        }
Exemple #4
0
        private static void GenerateIndependentRace(
            Random random,
            StarSystemInfo system,
            OrbitalObjectInfo orbit,
            GameDatabase gamedb,
            AssetDatabase assetdb)
        {
            List <Faction>    list    = assetdb.Factions.Where <Faction>((Func <Faction, bool>)(x => x.IsIndependent())).ToList <Faction>();
            List <PlayerInfo> players = gamedb.GetPlayerInfos().ToList <PlayerInfo>();

            players.RemoveAll((Predicate <PlayerInfo>)(x =>
            {
                if (!x.isStandardPlayer)
                {
                    return(!x.includeInDiplomacy);
                }
                return(true);
            }));
            list.RemoveAll((Predicate <Faction>)(x =>
            {
                if (x.IndyDescrition != null)
                {
                    return(players.Any <PlayerInfo>((Func <PlayerInfo, bool>)(y => y.Name == x.Name)));
                }
                return(true);
            }));
            if (list.Count == 0)
            {
                return;
            }
            Faction     faction1       = random.Choose <Faction>((IList <Faction>)list);
            IndyDesc    indyDescrition = faction1.IndyDescrition;
            double      num1           = indyDescrition.TechLevel != 1 ? (indyDescrition.TechLevel != 2 ? (indyDescrition.TechLevel != 3 ? (double)random.NextInclusive(1750, 10000) * (double)indyDescrition.BasePopulationMod * 1000000.0 : (double)random.NextInclusive(750, 2000) * (double)indyDescrition.BasePopulationMod * 1000000.0) : (double)random.NextInclusive(1, 750) * (double)indyDescrition.BasePopulationMod * 1000000.0) : (double)random.NextInclusive(30, 200) * (double)indyDescrition.BasePopulationMod * 1000.0;
            FactionInfo factionInfo    = gamedb.GetFactionInfo(faction1.ID);

            factionInfo.IdealSuitability = gamedb.GetFactionSuitability(indyDescrition.BaseFactionSuitability) + random.NextInclusive(-indyDescrition.Suitability, indyDescrition.Suitability);
            gamedb.UpdateFaction(factionInfo);
            gamedb.RemoveOrbitalObject(orbit.ID);
            PlanetOrbit planetOrbit = new PlanetOrbit();

            if (indyDescrition.MinPlanetSize != 0 && indyDescrition.MaxPlanetSize != 0)
            {
                planetOrbit.Size = new int?(random.NextInclusive(indyDescrition.MinPlanetSize, indyDescrition.MaxPlanetSize));
            }
            PlanetInfo pi1 = StarSystemHelper.InferPlanetInfo((Kerberos.Sots.Data.StarMapFramework.Orbit)planetOrbit);

            pi1.Suitability = factionInfo.IdealSuitability;
            pi1.Biosphere   = (int)((double)pi1.Biosphere * (double)indyDescrition.BiosphereMod);
            pi1.ID          = gamedb.InsertPlanet(orbit.ParentID, orbit.StarSystemID, orbit.OrbitalPath, orbit.Name, indyDescrition.StellarBodyType, new int?(), pi1.Suitability, pi1.Biosphere, pi1.Resources, pi1.Size);
            double num2       = Math.Min(num1 + (double)(1000 * pi1.Biosphere), Colony.GetMaxCivilianPop(gamedb, pi1));
            string avatarPath = "";

            if (((IEnumerable <string>)faction1.AvatarTexturePaths).Count <string>() > 0)
            {
                avatarPath = faction1.AvatarTexturePaths[0];
            }
            int insertIndyPlayerId = gamedb.GetOrInsertIndyPlayerId(gamedb, faction1.ID, faction1.Name, avatarPath);

            players = gamedb.GetPlayerInfos().ToList <PlayerInfo>();
            foreach (PlayerInfo playerInfo in players)
            {
                PlayerInfo pi       = playerInfo;
                Faction    faction2 = assetdb.Factions.FirstOrDefault <Faction>((Func <Faction, bool>)(x => x.ID == pi.FactionID));
                gamedb.InsertDiplomaticState(insertIndyPlayerId, pi.ID, pi.isStandardPlayer || pi.includeInDiplomacy ? DiplomacyState.NEUTRAL : DiplomacyState.WAR, faction1.GetDefaultReactionToFaction(faction2), false, true);
            }
            gamedb.InsertColony(pi1.ID, insertIndyPlayerId, num2 / 2.0, 0.5f, 0, 1f, true);
            gamedb.InsertColonyFaction(pi1.ID, faction1.ID, num2 / 2.0, 1f, 0);
            if (indyDescrition.TechLevel < 4)
            {
                return;
            }
            foreach (PlanetInfo systemPlanetInfo in gamedb.GetStarSystemPlanetInfos(system.ID))
            {
                if (systemPlanetInfo.ID != pi1.ID)
                {
                    PlanetInfo planetInfo = gamedb.GetPlanetInfo(systemPlanetInfo.ID);
                    float      num3       = Math.Abs(factionInfo.IdealSuitability - planetInfo.Suitability);
                    if ((double)num3 < 200.0)
                    {
                        double impPop = (double)(random.NextInclusive(100, 200) * 100) * (double)indyDescrition.BasePopulationMod;
                        gamedb.InsertColony(pi1.ID, insertIndyPlayerId, impPop, 0.5f, 0, 1f, true);
                        gamedb.InsertColonyFaction(pi1.ID, faction1.ID, impPop / 2.0, 1f, 0);
                    }
                    else if ((double)num3 < 600.0 && (double)planetInfo.Suitability != 0.0)
                    {
                        float num4 = 100f + (float)random.Next(150);
                        if (random.Next(2) == 0)
                        {
                            num4 *= -1f;
                        }
                        planetInfo.Suitability = factionInfo.IdealSuitability + num4;
                        gamedb.UpdatePlanet(planetInfo);
                        double num5 = (double)(random.NextInclusive(50, 100) * 100) * (double)indyDescrition.BasePopulationMod;
                        gamedb.InsertColony(pi1.ID, insertIndyPlayerId, num5 / 2.0, 0.5f, 0, 1f, true);
                        gamedb.InsertColonyFaction(pi1.ID, faction1.ID, num5 / 2.0, 1f, 0);
                    }
                }
            }
        }