/// <summary> /// Creates a star entity in the system. /// Does not initialize an orbit. /// </summary> public Entity CreateStar(StarSystem system, double mass, double radius, double age, string starClass, double temperature, float luminosity, SpectralType spectralType, string starName = null) { double tempRange = temperature / _galaxyGen.Settings.StarTemperatureBySpectralType[spectralType].Max; // temp range from 0 to 1. ushort subDivision = (ushort)Math.Round((1 - tempRange) * 10); LuminosityClass luminosityClass = LuminosityClass.V; if (starName == null) { starName = system.NameDB.DefaultName; } int starIndex = system.GetAllEntitiesWithDataBlob <StarInfoDB>().Count; starName += " " + (char)('A' + starIndex) + " " + spectralType + subDivision + luminosityClass; MassVolumeDB starMassVolumeDB = MassVolumeDB.NewFromMassAndRadius(mass, radius); StarInfoDB starInfoDB = new StarInfoDB { Age = age, Class = starClass, Luminosity = luminosity, SpectralType = spectralType, Temperature = temperature, LuminosityClass = luminosityClass, SpectralSubDivision = subDivision }; PositionDB starPositionDB = new PositionDB(new Vector3(0, 0, 0), system.Guid); NameDB starNameDB = new NameDB(starName); OrbitDB starOrbitDB = new OrbitDB(); SensorProfileDB emmisionSignature = SensorProcessorTools.SetStarEmmisionSig(starInfoDB, starMassVolumeDB); return(new Entity(system, new List <BaseDataBlob> { starOrbitDB, starMassVolumeDB, starInfoDB, starNameDB, starPositionDB, emmisionSignature })); }
public StarInfoDB(StarInfoDB starInfoDB) { Age = starInfoDB.Age; Temperature = starInfoDB.Temperature; Luminosity = starInfoDB.Luminosity; Class = starInfoDB.Class; SpectralType = starInfoDB.SpectralType; SpectralSubDivision = starInfoDB.SpectralSubDivision; LuminosityClass = starInfoDB.LuminosityClass; }
public void Initialization() { if (Random.Range(0f, 100f) > 99.9999f) { isBlackHole = true; luminosity = 0; temperature = 0; options.Radius = 120; options.Mass = 4000000; return; } if (Random.Range(0, 100) > 10) { luminosityClass = (LuminosityClass)Random.Range(7, 9); int sc = Random.Range(0, 10) < 2 ? Random.Range(2, 9) : Random.Range(4, 7); spectralClass = (SpectralClass)sc; } else { if (Random.Range(0, 100) > 10) { luminosityClass = (LuminosityClass)Random.Range(4, 6); int sc = Random.Range(0, 10) < 2 ? Random.Range(2, 9) : Random.Range(5, 9); spectralClass = (SpectralClass)sc; } else if (Random.Range(0, 100) > 30) { luminosityClass = (LuminosityClass)Random.Range(2, 4); spectralClass = (SpectralClass)Random.Range(1, 9); } else if (Random.Range(0, 100) > 20) { luminosityClass = (LuminosityClass)Random.Range(7, 10); if (luminosityClass == LuminosityClass.VII) { spectralClass = (SpectralClass)Random.Range(1, 5); } else { spectralClass = (SpectralClass)Random.Range(7, 11); } } else { luminosityClass = (LuminosityClass)Random.Range(0, 2); spectralClass = (SpectralClass)Random.Range(2, 8); } } luminosity = SetLuminosityByClass(); temperature = SetTemperatureByClass(); options.Radius = (float)Math.Sqrt(luminosity / (4 * Math.PI * sigma * Math.Pow(temperature, 4))); options.Mass = GetMassFromLum(); }
void Update(StarInfoDB db, SensorInfoDB sensorInfo) { Random rng = new Random(); float accuracy = sensorInfo.HighestDetectionQuality.SignalQuality; Age = SensorProcessorTools.RndSigmoid(db.Age, accuracy, rng); Temperature = SensorProcessorTools.RndSigmoid(db.Temperature, accuracy, rng); Luminosity = SensorProcessorTools.RndSigmoid(db.Luminosity, accuracy, rng); Class = db.Class; SpectralType = db.SpectralType; SpectralSubDivision = db.SpectralSubDivision; LuminosityClass = db.LuminosityClass; }
/// <summary> /// Initializes a new instance of the <see cref="StellarType"/> class. /// </summary> /// <param name="sc">The SpectralClass of the StellarBody.</param> /// <param name="lc">The LuminosityClass of the StellarBody.</param> /// <param name="subType">Type subtype of the StellarBody.</param> public StellarType(SpectralClass sc, LuminosityClass lc, int subType = 0) { SpectralClass = sc; LuminosityClass = lc; SubType = subType; var str = Enum.GetName(typeof(SpectralClass), sc) + SubType.ToString() + (lc != LuminosityClass.O ? Enum.GetName(typeof(LuminosityClass), lc) : ""); var data = (from row in _types where row.Type == str select new { row.Temperature, row.Mass, row.Radius, row.Luminosity, row.ColorRGB }).FirstOrDefault(); Temperature = Temperature.FromKelvins(data.Temperature); Mass = Mass.FromSolarMasses(data.Mass); Luminosity = Luminosity.FromSolarLuminosities(data.Luminosity); Radius = Length.FromKilometers(data.Radius * GlobalConstants.KM_SUN_RADIUS); Color = ConvertColor(data.ColorRGB); }
/// <summary> /// Генерирует безжизненные планеты системы /// </summary> /// <param name="nameTemplate"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> /// <param name="planetCount"> /// Счетчик планет системы /// </param> /// <param name="stars"> /// Коллекция <see cref="Star"/> системы /// </param> private static List <Planet> GetBarrenPlanets(string systemName, ref int planetCount, List <Star> stars) { int barrenCount = HelperRandomFunctions.GetRandomInt(minBarrenCount, maxBarrenCount + 1); LuminosityClass systemStarClass = stars[0].LumClass; List <Planet> planets = new List <Planet>(); TemperatureClass planetTemperature; if (systemStarClass == LuminosityClass.M || systemStarClass == LuminosityClass.K) { planetTemperature = TemperatureClass.Warm; } else { planetTemperature = TemperatureClass.Hot; } if (HelperRandomFunctions.PercentProbableBool(20) && barrenCount >= 1) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(planetTemperature, VolatilesClass.Airless, SubstancesClass.Ferria))); planetCount++; barrenCount--; if (HelperRandomFunctions.PercentProbableBool(20) && barrenCount >= 1) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(planetTemperature, VolatilesClass.Airless, SubstancesClass.Ferria))); planetCount++; barrenCount--; } } for (int index = 0; index < barrenCount; index++) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(planetTemperature, VolatilesClass.Airless, SubstancesClass.Terra))); planetCount++; } return(planets); }
/// <summary> /// Генерирует обитаемые планеты системы /// </summary> /// <param name="systemName"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> /// <param name="planetCount"> /// Счетчик планет системы /// </param> /// <param name="stars"> /// Коллекция <see cref="Star"/> системы /// </param> private static List <Planet> GetHabitablePlanets(string systemName, ref int planetCount, List <Star> stars) { LuminosityClass systemStarClass = stars[0].LumClass; List <Planet> planets = new List <Planet>(); if (systemStarClass == LuminosityClass.G || systemStarClass == LuminosityClass.K || systemStarClass == LuminosityClass.F) { int habitablePlanetCount = HelperRandomFunctions.GetRandomInt(minHabitableCount, maxHabitableCount + 1); for (int index = 0; index < habitablePlanetCount; index++) { planets.Add(GetHabitablePlanet(GetPlanetName(systemName, planetCount), planetCount, systemStarClass)); planetCount++; } } return(planets); }
/// <summary> /// Генерирует одну обитаемую планету /// </summary> /// <param name="systemName"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> private static HabitablePlanet GetHabitablePlanet(string planetName, int planetCount, LuminosityClass mainStarClass) { int probabilityIndex = HelperRandomFunctions.GetRandomInt(1, maxPercents + 1); PlanetType planetType; if (probabilityIndex >= 80) { planetType = new PlanetType(TemperatureClass.Temperate, VolatilesClass.Marine, SubstancesClass.Terra); } else if (probabilityIndex >= 60) { planetType = new PlanetType(TemperatureClass.Cool, VolatilesClass.Marine, SubstancesClass.Terra); } else { planetType = new PlanetType(TemperatureClass.Cool, VolatilesClass.Desertic, SubstancesClass.Terra); } return(PlanetFactory.GetHabitablePlanet(planetName, planetType)); }
/// <summary> /// Инициализирует экземпляр класса звезды /// </summary> /// <param name="name"> /// Имя звезды /// </param> /// <param name="radius"> /// Радиус звезды /// </param> /// <param name="luminosityClass"> /// Класс светимости звезды /// </param> public Star(string name, double radius, LuminosityClass luminosityClass) : base(name, radius) { this.LumClass = luminosityClass; }