public Planet(LehmerPRNG lehmer, double distanceFromStar) { this.lehmer = lehmer; DistanceFromStar = distanceFromStar; HasRings = lehmer.NextBool(RING_CHANCE); var candidates = planetTypes.Where(pt => pt.MaxDistance >= distanceFromStar && pt.MinDistance <= distanceFromStar); var planetType = lehmer.NextChoice(candidates); Type = planetType.Type; Radius = lehmer.NextDouble(planetType.MinRadius, planetType.MaxRadius); var hasMoons = lehmer.NextBool(MOON_CHANCE); if (!hasMoons) { return; } Moons = new List <Moon>(); var numMoons = lehmer.NextInt(1, 4); var currentDisanceInPU = lehmer.NextDouble(0.5, 4); for (int i = 0; i < numMoons; i++) { Moons.Add(new Moon(lehmer, currentDisanceInPU, Radius)); currentDisanceInPU += lehmer.NextDouble(0.5, 1.5) * (i + 1) * 0.5; } }
public Star(LehmerPRNG lehmer) { this.lehmer = lehmer; this.Name = GenerateName(); var type = lehmer.NextChoice(starTypes, starTypes.Select(st => st.Prevalence)); this.TypeOfStar = type.Type; this.Radius = lehmer.NextDouble(type.MinRadius, type.MaxRadius); var hasPlanets = lehmer.NextBool(CHANCE_OF_PLANETS); if (!hasPlanets) { return; } Planets = new List <Planet>(); var numPlanets = lehmer.NextInt(1, 10); var currentDisanceInAU = lehmer.NextDouble(0.5, 4); for (int i = 0; i < numPlanets; i++) { Planets.Add(new Planet(lehmer, currentDisanceInAU)); currentDisanceInAU += lehmer.NextDouble(0.5, 1.5) * (i + 1) * 0.5; } }
public Moon(LehmerPRNG lehmer, double distanceFromPlanet, double planetRadius) { this.lehmer = lehmer; DistanceFromPlanet = distanceFromPlanet; Radius = lehmer.NextDouble(planetRadius / 8, planetRadius / 4); }