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) }); }
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)); } } } } }
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; } } } }
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); } } } }