Наследование: MonoBehaviour
Пример #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Loading...");

            SystemFactory systemFactory = new SystemFactory(true);

            StellarSystem stellarSystem = systemFactory.GetStellarSystem();

            foreach (APhysicalObject star in stellarSystem.Bodies)
            {
                Console.WriteLine(star);
            }

            /*
             * TimeSpan timeOffset = new TimeSpan(365, 0, 0, 0, 0);
             * //Printer<Orbit>.PrintHeader("orbitRecord.csv", stellarSystem.Orbits[0]);
             *
             * List<Orbit> orbitalStates = new List<Orbit>();
             *
             * int max = 3000;
             * for (int i = 0; i < max; i++)
             * {
             *  stellarSystem.Orbits[0].UpdateTime(timeOffset);
             *  orbitalStates.Add((Orbit)stellarSystem.Orbits[0].Clone());
             *  Console.WriteLine($"{i}/{max}");
             * }
             * Printer<Orbit>.PrintTable("orbitRecord.csv", orbitalStates);
             * Console.WriteLine($"{stellarSystem.Orbits[0].OrbitalPeriod / (24 * 60 * 60 * 365)} years");
             */
            Console.WriteLine("Finished...");

            Console.ReadLine();
        }
Пример #2
0
        private void SetSystem(StellarSystem system)
        {
            if (system == null)
            {
                return;
            }
            _system = system;
            _systemMap.SetNewSystem(_system.Planets);
            _planetSelector.Items.Clear();

            foreach (Planet planet in _system.Planets)
            {
                _planetSelector.Items.Add(String.Format("Planet {0}", planet.Position));
            }
            _planetSelector.SelectedIndex = 0;

            var text = PlanetText.GetSystemText(_system.Planets);

            _systemInfo.SetSystem(_system.Planets);
            _orbitMap.SetSystem(_system.Planets);
            _planetInfoGroup.TabSpacing = 160;
            _planetInfoGroup.SetPlanet(_system.Planets[0]);
            _orbitMap.SelectPlanet(0);
            _systemMap.SelectPlanet(0);
        }
Пример #3
0
        public void SetGalaxy(CasualGodComplex.Galaxy galaxy)
        {
            SpacePlanets.SharedModels.GameObjects.Galaxy spGalaxy = new SpacePlanets.SharedModels.GameObjects.Galaxy();
            spGalaxy.Stars = new List <SpacePlanets.SharedModels.GameObjects.Star>();
            foreach (var star in galaxy.Stars)
            {
                SpacePlanets.SharedModels.GameObjects.Star newStar = new SpacePlanets.SharedModels.GameObjects.Star();
                StellarSystem system = StarformCore.Generator.GenerateStellarSystem(star.Name);
                newStar.Id                = star.Id;
                newStar.Name              = star.Name;
                newStar.AgeYears          = system.Star.AgeYears;
                newStar.BinaryMass        = system.Star.BinaryMass;
                newStar.Eccentricity      = system.Star.Eccentricity;
                newStar.EcosphereRadiusAU = system.Star.EcosphereRadiusAU;
                newStar.Luminosity        = system.Star.Luminosity;

                /* According to https://earthsky.org/astronomy-essentials/stellar-luminosity-the-true-brightness-of-stars
                 *
                 * The luminosity of any star is the product of the radius squared times the surface temperature raised to the fourth power.
                 * Given a star whose radius is 3 solar and a surface temperature that’s 2 solar, we can figure that star’s luminosity with the equation below:
                 * whereby L = luminosity, R = radius and T = surface temperature:
                 *  L = R2 x T4
                 */
                newStar.Mass            = system.Star.Mass;
                newStar.SemiMajorAxisAU = system.Star.SemiMajorAxisAU;
                newStar.X = (int)Math.Round(star.Position.X * 10);
                newStar.Y = (int)Math.Round(star.Position.Y * 10);
                newStar.Z = (int)Math.Round(star.Position.Z * 10);
                spGalaxy.Stars.Add(newStar);
            }
            Galaxy = spGalaxy;
        }
Пример #4
0
 public ABody(string name, StellarSystem stellarSystem)
 {
     _name          = name;
     _stellarSystem = stellarSystem;
     _uuid          = Guid.NewGuid();
     _childOrbit    = new List <Orbit>();
 }
        public static StellarSystem Generate(int x, int y)
        {
            var output = new StellarSystem();

            output.X            = x;
            output.Y            = y;
            output.SystemNature = SystemNatureGenerator.Generate();

            //Add Primary
            output.Stars.Add(StarGenerator.Generate(1));

            //Add Secondary Star
            if (output.SystemNature == SystemNature.Binary ||
                output.SystemNature == SystemNature.Trinary)
            {
                output.Stars.Add(StarGenerator.Generate(2));
            }

            //Add Third Star
            if (output.SystemNature == SystemNature.Trinary)
            {
                output.Stars.Add(StarGenerator.Generate(3));
            }



            return(output);
        }
        public StellarSystem Generate(StellarSystem parent, int position)
        {
            var system = new SingleObjectSystem(parent);

            system.CenterObject = GenerateCenter(system, position);
            system.Satellites   = GenerateSatellites(system, position);

            return(system);
        }
Пример #7
0
        private StellarSystem GenerateSingleStarSystem(StellarSystem parent, int position)
        {
            var system = new SingleObjectSystem(parent);

            var star = _starGenerator.Generate(system, position);

            system.CenterObject = star;
            return(system);
        }
Пример #8
0
        public StellarSystem Generate(StellarSystem parent, int position)
        {
            var system = new SingleObjectSystem(parent);

            // Generate the center planets
            system.CenterObject = GenerateCenter(system, position);

            // TODO: Generate sub systems (Satellites)

            return(system);
        }
Пример #9
0
        private StellarSystem GenerateMultiSatelliteSystem(StellarSystem parent, int position, uint countObjects)
        {
            var system = new MultiObjectSystem(parent);

            for (var i = 0; i < countObjects; i++)
            {
                var starSystem = GenerateSingleSatelliteSystem(system, position);

                system.CenterSystems.Add(starSystem);
            }

            return(system);
        }
        public static List <ISystemBody> Generate(StellarSystem stellarSystem, int starToGenerate)
        {
            var star   = stellarSystem.Stars[starToGenerate - 1];
            var orbits = OrbitsGenerator.Generate(stellarSystem, starToGenerate);

            List <ISystemBody> output = new List <ISystemBody>();

            for (int i = 0; i < SystemConstants.MaxOrbits; i++)
            {
                Orbit o = orbits[i];

                switch (o.OrbitType)
                {
                case OrbitTypes.Unavailable:
                    //Remove objects that can't exist due to orbit not being available
                    o.OccupiedType = null;
                    break;

                case OrbitTypes.Inner:
                    if (o.OccupiedType == null)
                    {
                        o.OccupiedType = OccupiedTypes.World;
                    }
                    break;

                case OrbitTypes.Habitable:
                    if (o.OccupiedType == null)
                    {
                        o.OccupiedType = OccupiedTypes.World;
                    }
                    break;

                case OrbitTypes.Outer:
                    if (o.OccupiedType == null)
                    {
                        o.OccupiedType = OccupiedTypes.World;
                    }
                    break;
                }

                if (o.OccupiedType != null)
                {
                    var systemBody = SystemBodyGenerator.Generate((short)i, o.OrbitalDistance, o.OccupiedType, o.OrbitType,
                                                                  star, stellarSystem);

                    star.OrbitingBodies.Add(systemBody.OrbitNumber, systemBody);
                }
            }

            return(output);
        }
Пример #11
0
        public SolarSystem Generate(StellarSystem parent)
        {
            var name = _solarSystemNameGenerator.Generate();

            var solarSystem = new SolarSystem(parent)
            {
                Name = name
            };


            solarSystem.CenterSystems = GenerateCenter(solarSystem, 0);
            solarSystem.Satellites    = GenerateSatellites(solarSystem, 1);

            return(solarSystem);
        }
Пример #12
0
        private StellarSystem GenerateMultiStarSystem(StellarSystem parent, int position)
        {
            var countStars = RandomCalculator.SelectByWeight(_multiStarCountOccurrences);

            var system = new MultiObjectSystem(parent);

            for (var i = 0; i < countStars; i++)
            {
                var starSystem = GenerateSingleStarSystem(system, position);

                system.CenterSystems.Add(starSystem);
            }

            return(system);
        }
Пример #13
0
        private List <StellarSystem> GenerateCenter(StellarSystem parent, int position)
        {
            var center = new List <StellarSystem>();

            var starsToCreate = RandomCalculator.SelectByWeight(_starOccurrences);

            for (var i = 0; i < starsToCreate; i++)
            {
                var isMultiSystem = RandomCalculator.SelectByWeight(_multiStarOccurrences);

                var system = GenerateCenter(parent, position, isMultiSystem);
                center.Add(system);
            }

            return(center);
        }
Пример #14
0
        public Moon Generate(StellarSystem parent, int position)
        {
            var prefab   = GeneratePrefab();
            var scale    = GenerateScale();
            var distance = GenerateDistance();

            var moon = new Moon(parent)
            {
                Id               = Guid.NewGuid(),
                PrefabName       = prefab,
                Scale            = scale,
                DistanceToCenter = distance,
            };

            return(moon);
        }
Пример #15
0
  void Start()
  {
    systemOrigin = GameObject.Find("SystemOrigin");
    SystemCreator systemCreator = systemOrigin.GetComponent<SystemCreator>();

    System = new StellarSystem(systemCreator, systemOrigin);

    for (int i = 0; i < StellarSystem.PlanetQuantity; i++)
    {
      if (System.Planets[i].OrbitalPeriod < 0.01f)
      {
        System.Planets[i].OrbitalPeriod = 0.01f;
      }
      SetPosition(i, System.PlanetProgresses[i]);
    }
  }
Пример #16
0
        private List <StellarSystem> GenerateSatellites(StellarSystem parent, int position)
        {
            var satelliteSystems = new List <StellarSystem>();

            var countSatellites = RandomCalculator.SelectByWeight(_satelliteOccurrences);

            for (var i = position; i <= countSatellites; i++)
            {
                var multiSatelliteCount = RandomCalculator.SelectByWeight(_multiSatelliteCountOccurrences);

                var satelliteSystem = GenerateSatelliteSystem(parent, position, multiSatelliteCount);

                satelliteSystems.Add(satelliteSystem);
            }

            return(satelliteSystems);
        }
        public static StellarSystem Generate(int x, int y)
        {
            var output = new StellarSystem();

            output.X            = x;
            output.Y            = y;
            output.SystemNature = SystemNatureGenerator.Generate();

            //Add Primary
            IStar primary = StarGenerator.Generate(1);

            output.Stars.Add(primary);
            output.CombinedLuminosity = primary.Luminosity;

            //Add Secondary Star
            if (output.SystemNature == SystemNature.Binary ||
                output.SystemNature == SystemNature.Trinary)
            {
                IStar star = StarGenerator.Generate(2, output.Stars[0]);
                output.Stars.Add(star);
            }

            //Add Third Star
            if (output.SystemNature == SystemNature.Trinary)
            {
                output.Stars.Add(StarGenerator.Generate(3, output.Stars[0]));
            }

            //Generate primary star bodies
            SystemBodiesGenerator.Generate(output, 0);

            if (output.Stars.Count > 1)
            {
                SystemBodiesGenerator.Generate(output, 1);
            }

            if (output.Stars.Count > 2)
            {
                SystemBodiesGenerator.Generate(output, starToGenerate: 2);
            }

            return(output);
        }
Пример #18
0
        public static IOrbitingBody Generate(short orbitNumber, Distance orbitalDistance, string occupiedType,
                                             string orbitType, IStar parentStar, StellarSystem stellarSystem)
        {
            switch (occupiedType)
            {
            case OccupiedTypes.GasGiant:
                return(GasGiantGenerator.Generate(orbitalDistance, orbitNumber, occupiedType, orbitType, parentStar, stellarSystem.CombinedLuminosity));

            case OccupiedTypes.CapturedPlanet:
            case OccupiedTypes.World:
                return(WorldGenerator.Generate(orbitalDistance, orbitNumber, occupiedType, orbitType, parentStar, stellarSystem.CombinedLuminosity));

            case OccupiedTypes.Planetoid:
                break;

            case OccupiedTypes.Star:
                //Do nothing for this.  Should already be done
                break;
            }

            return(null);
        }
Пример #19
0
 public Star(StellarSystem parent) : base(parent)
 {
 }
Пример #20
0
 private StellarSystem GenerateSatelliteSystem(StellarSystem parent, int position, uint countObjects)
 {
     return(countObjects == 1
         ? GenerateSingleSatelliteSystem(parent, position)
         : GenerateMultiSatelliteSystem(parent, position, countObjects));
 }
Пример #21
0
 private StellarSystem GenerateSingleSatelliteSystem(StellarSystem parent, int position)
 {
     // TODO: Implement different satellites
     return(_planetSystemGenerator.Generate(parent, position));
 }
Пример #22
0
 public APhysicalObject(string name, StellarSystem stellarSystem)
     : base(name, stellarSystem)
 {
 }
Пример #23
0
 public SolarSystem(StellarSystem parent) : base(parent)
 {
 }
Пример #24
0
 public Moon(StellarSystem parent) : base(parent)
 {
 }
Пример #25
0
 private StellarSystem GenerateCenter(StellarSystem parent, int position, bool isMultiSystem)
 {
     return(isMultiSystem == false
         ? GenerateSingleStarSystem(parent, position)
         : GenerateMultiStarSystem(parent, position));
 }
Пример #26
0
 private Moon GenerateCenter(StellarSystem parent, int position)
 {
     return(_moonGenerator.Generate(parent, position));
 }
Пример #27
0
 public Planet(StellarSystem parent) : base(parent)
 {
 }
Пример #28
0
        public static List <Orbit> Generate(StellarSystem stellarSystem, int starToGenerate = 1)
        {
            Star primaryStar = (Star)stellarSystem.Stars[0];

            CompanionStar secondaryStar = null;

            if (stellarSystem.Stars.Count > 1)
            {
                secondaryStar = (CompanionStar)stellarSystem.Stars[1];
            }

            CompanionStar tertiaryStar = null;

            if (stellarSystem.Stars.Count > 2)
            {
                tertiaryStar = (CompanionStar)stellarSystem.Stars[2];
            }

            IStar currentStar = stellarSystem.Stars[starToGenerate - 1];

            List <Orbit> output = new List <Orbit>();

            int habitableZone = -2;

            for (short i = 0; i < SystemConstants.MaxOrbits; i++)
            {
                Distance orbitalDistance;

                if (currentStar == primaryStar ||
                    currentStar == tertiaryStar)              //All tertiary stars are put at far orbit
                {
                    orbitalDistance = OrbitRangeGenerator.Generate(i);
                }
                else
                {
                    orbitalDistance = CompanionStarOrbitalDistanceGenerator.Generate(primaryStar, secondaryStar, i);
                }

                Orbit o = new Orbit
                {
                    OrbitalDistance = orbitalDistance,
                    OccupiedType    = null,
                    OrbitType       = OrbitTypeGenerator.Generate(orbitalDistance, primaryStar.Luminosity, 0)
                };

                if (o.OrbitType == OrbitTypes.Habitable)
                {
                    habitableZone = i;
                }

                if (o.OrbitType == OrbitTypes.Outer &&
                    habitableZone == -2)
                {
                    habitableZone = i - 1;
                }

                output.Add(o);
            }

            if (habitableZone == -2)
            {
                habitableZone = 10;
            }

            currentStar.HabitableZone = (short)habitableZone;

            int numberOfOrbits = NumberOfOrbitsGenerator.Generate(currentStar.Classification, currentStar.LuminosityClass);

            int emptyOrbits = NumberOfEmptyOrbitsGenerator.Generate(currentStar.Classification);

            RandomOrbitAssignment.Assign(output, emptyOrbits, OccupiedTypes.Empty, -2);

            int capturedPlanets = NumberOfCapturedPlanetsGenerator.Generate(currentStar.Classification);

            RandomOrbitAssignment.Assign(output, capturedPlanets, OccupiedTypes.CapturedPlanet);

            int gasGiants = NumberOfGasGiantsGenerator.Generate(currentStar.Classification);

            RandomOrbitAssignment.Assign(output, gasGiants, OccupiedTypes.GasGiant, -3 + habitableZone);

            int planetoids = NumberOfPlanetoidsGenerator.Generate();

            //Note Slight deviation from source.
            RandomOrbitAssignment.Assign(output, planetoids, OccupiedTypes.Planetoid, -1);

            //Clear out orbits in excess of Number of Orbits, but keep captured planets
            for (int i = 0; i < SystemConstants.MaxOrbits; i++)
            {
                Orbit o = output[i];

                if (i > numberOfOrbits)
                {
                    if (o.OccupiedType != OccupiedTypes.CapturedPlanet)
                    {
                        o.OccupiedType = null;
                    }
                }
                else
                {
                    if (o.OccupiedType == OccupiedTypes.Empty)
                    {
                        o.OccupiedType = null;
                    }
                }
            }

            if (secondaryStar != null &&
                currentStar == primaryStar)
            {
                secondaryStar.OrbitNumber = CompanionStarOrbitGenerator.Generate();

                if (secondaryStar.OrbitNumber < 99)
                {
                    if (secondaryStar.OrbitNumber > 2)
                    {
                        for (int i = secondaryStar.OrbitNumber / 2; i < secondaryStar.OrbitNumber; i++)
                        {
                            Orbit o = output[i];
                            o.OrbitType    = OrbitTypes.Star;
                            o.OccupiedType = null;
                        }
                    }
                    else
                    {
                        Orbit o = output[secondaryStar.OrbitNumber];
                        o.OccupiedType = OccupiedTypes.Star;
                        o.OrbitType    = OrbitTypes.Star;

                        o = output[secondaryStar.OrbitNumber + 1];
                        o.OccupiedType = null;
                        o.OrbitType    = OrbitTypes.Star;
                    }

                    secondaryStar.OrbitalDistance = output[secondaryStar.OrbitNumber].OrbitalDistance;

                    stellarSystem.CombinedLuminosity += SystemConstants.HabitNum /
                                                        Math.Sqrt(secondaryStar.OrbitalDistance.ToAstronomicalUnits().Value);
                }
                else
                {
                    //No impact on luminosity
                    secondaryStar.OrbitalDistance = FarOrbitDistanceGenerator.Generate();
                }

                secondaryStar.OrbitalPeriod     = OrbitalPeriodGenerator.Generate(primaryStar, secondaryStar);
                secondaryStar.OrbitEccentricity = OrbitalEccentricityGenerator.Generate();
                secondaryStar.AxialTilt         = AxialTiltGenerator.Generate();
                secondaryStar.AxialTiltEffect   = TiltEffectGenerator.Generate(secondaryStar.AxialTilt);
            }

            //Third stars a pushed to a far orbit
            //No impact on luminosity
            if (tertiaryStar != null &&
                currentStar == primaryStar)
            {
                if (secondaryStar.OrbitNumber == 99)
                {
                    tertiaryStar.OrbitNumber = 100;
                }
                else
                {
                    tertiaryStar.OrbitNumber = 99;
                }

                tertiaryStar.OrbitalDistance   = FarOrbitDistanceGenerator.Generate();
                tertiaryStar.OrbitalPeriod     = OrbitalPeriodGenerator.Generate(primaryStar, tertiaryStar);
                tertiaryStar.OrbitEccentricity = OrbitalEccentricityGenerator.Generate();
                tertiaryStar.AxialTilt         = AxialTiltGenerator.Generate();
                tertiaryStar.AxialTiltEffect   = TiltEffectGenerator.Generate(tertiaryStar.AxialTilt);
            }

            return(output);
        }
Пример #29
0
 protected StellarObject(StellarSystem parent) : base(parent)
 {
 }
Пример #30
0
        public void BuilderTestFixedWidth()
        {
            var star = new StellarSystem()
            {
                IsBinarySystem = false,
                Name           = "Sol",
                StarType       = "Yellow Dwarf",
                Radius         = 695.700
            };
            var planets = new List <Planet>()
            {
                new Planet()
                {
                    Name = "Mercury", DistanceFromSun = 57.91, OrderFromSun = 1
                },
                new Planet()
                {
                    Name = "Venus", DistanceFromSun = 108.2, OrderFromSun = 2
                },
                new Planet()
                {
                    Name = "Earth", DistanceFromSun = 149.6, OrderFromSun = 3
                },
                new Planet()
                {
                    Name = "Mars", DistanceFromSun = 227.9, OrderFromSun = 4
                },
                new Planet()
                {
                    Name = "Jupiter", DistanceFromSun = 778.5, OrderFromSun = 5
                },
                new Planet()
                {
                    Name = "Saturn", DistanceFromSun = 1429, OrderFromSun = 6
                },
                new Planet()
                {
                    Name = "Uranus", DistanceFromSun = 2877, OrderFromSun = 7
                },
                new Planet()
                {
                    Name = "Neptune", DistanceFromSun = 4498, OrderFromSun = 8
                },
            };
            var serializer = new FixedWidthSerializer();

            File.Delete("estplanetsfixedwithmulti.txt");
            var transport = new LocalFileTransport {
                FilePath = $"testplanetsfixedwithmulti.txt"
            };
            var build = new OutputBuilder()
                        .SetSerializer(serializer)
                        .AddData(star)
                        .AddListData(planets)
                        // .SetSerializer(new DataIntegrationJsonSerializer())
                        .AddData(new Galaxy()
            {
                Name = "Alpha Centauri"
            });

            var integ = new Integrator();

            integ.SendData(build, transport);

            //  var result = a.SendAsyncData(build, transport);
            return;
        }