示例#1
0
        /// <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
            }));
        }
示例#2
0
        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;
        }
示例#3
0
 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();
 }
示例#4
0
        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);
        }
示例#6
0
        /// <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);
        }
示例#7
0
        /// <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);
        }
示例#8
0
        /// <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));
        }
示例#9
0
文件: Star.cs 项目: vind113/4X
 /// <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;
 }