/// <summary> /// Determines RVM, and geologic values for a satelite /// </summary> /// <param name="s">The satelite</param> /// <param name="ourBag">Ddice object</param> /// <param name="sysAge">System Age</param> /// <param name="isGasGiantMoon">Is this a moon of a gas giant?</param> private static void DetermineGeologicValues( Satellite s, Dice ourBag, double sysAge, bool isGasGiantMoon ) { //volcanic set first. var addVal = s.Gravity / sysAge * 40; if (s.MajorMoons.Count == 1) { addVal = addVal + 5; } if (s.MajorMoons.Count == 2) { addVal = addVal + 10; } if (s.SatelliteType == Satellite.SubtypeSulfur) { addVal = addVal + 60; } if (isGasGiantMoon) { addVal = addVal + 5; } var roll = ourBag.GurpsRoll(); addVal = addVal + roll; if (addVal <= 16.5) { s.VolActivity = Satellite.GeologicNone; } if (addVal > 16.5 && addVal <= 20.5) { s.VolActivity = Satellite.GeologicLight; } if (addVal > 20.5 && addVal <= 26.5) { s.VolActivity = Satellite.GeologicModerate; } if (addVal > 26.5 && addVal <= 70.5) { s.VolActivity = Satellite.GeologicHeavy; } if (addVal > 70.5) { s.VolActivity = Satellite.GeologicExtreme; } roll = ourBag.GurpsRoll(); if (s.VolActivity == Satellite.GeologicHeavy && s.SatelliteType == Satellite.SubtypeGarden && roll <= 8) { roll = ourBag.Rng(6); if (roll <= 3) { s.AddAtmCategory(Satellite.AtmMargPollutants); } if (roll >= 4) { s.AddAtmCategory(Satellite.AtmMargSulfur); } } roll = ourBag.GurpsRoll(); if (s.VolActivity == Satellite.GeologicExtreme && s.SatelliteType == Satellite.SubtypeGarden && roll <= 14) { roll = ourBag.Rng(6); if (roll <= 3) { s.AddAtmCategory(Satellite.AtmMargPollutants); } if (roll >= 4) { s.AddAtmCategory(Satellite.AtmMargSulfur); } } //tectonic next roll = ourBag.GurpsRoll(); //negative mods if (Math.Abs(s.HydCoverage) < 0) { roll = roll - 4; } if (s.HydCoverage > 0 && s.HydCoverage < .5) { roll = roll - 2; } if (s.VolActivity == Satellite.GeologicNone) { roll = roll - 8; } if (s.VolActivity == Satellite.GeologicLight) { roll = roll - 4; } //postive mods if (s.VolActivity == Satellite.GeologicHeavy) { roll = roll + 4; } if (s.VolActivity == Satellite.GeologicExtreme) { roll = roll + 8; } if (s.MajorMoons.Count == 1) { roll = roll + 2; } if (s.MajorMoons.Count > 1) { roll = roll + 4; } //nullers. if (s.SatelliteSize == Satellite.SizeTiny) { roll = 0; } if (s.SatelliteSize == Satellite.SizeSmall) { roll = 0; } if (roll <= 6.5) { s.TecActivity = Satellite.GeologicNone; } if (roll > 6.5 && roll <= 10.5) { s.TecActivity = Satellite.GeologicLight; } if (roll > 10.5 && roll <= 14.5) { s.TecActivity = Satellite.GeologicModerate; } if (roll > 14.5 && roll <= 18.5) { s.TecActivity = Satellite.GeologicHeavy; } if (roll > 18.5) { s.TecActivity = Satellite.GeologicExtreme; } //update RVM if ((bool) !OptionCont.HighRvmVal) { roll = ourBag.GurpsRoll(); } if (OptionCont.HighRvmVal != null && (bool) OptionCont.HighRvmVal) { roll = ourBag.Rng(1, 6, 10); } if (s.VolActivity == Satellite.GeologicNone) { roll = roll - 2; } if (s.VolActivity == Satellite.GeologicLight) { roll = roll - 1; } if (s.VolActivity == Satellite.GeologicHeavy) { roll = roll + 1; } if (s.VolActivity == Satellite.GeologicExtreme) { roll = roll + 2; } if (s.BaseType == Satellite.BasetypeAsteroidbelt) { if (s.SatelliteSize == Satellite.SizeTiny) { roll = roll - 1; } if (s.SatelliteSize == Satellite.SizeMedium) { roll = roll + 2; } if (s.SatelliteSize == Satellite.SizeLarge) { roll = roll + 4; } } //set stable activity here: if (OptionCont.StableActivity != null && ( (bool) OptionCont.StableActivity && s.SatelliteSize >= Satellite.SizeSmall && ( s.BaseType == Satellite.BasetypeMoon || s.BaseType == Satellite.BasetypeTerrestial ) )) { s.VolActivity = Satellite.GeologicModerate; s.TecActivity = Satellite.GeologicModerate; } s.PopulateRvm(roll); }
/// <summary> /// Updates a satellite for tidal lock /// </summary> /// <param name="s">The satelite </param> /// <param name="ourBag">Our Ddice object</param> private static void UpdateTidalLock( Satellite s, Dice ourBag ) { var atmDesc = s.GetAtmCategory(); if (atmDesc == Satellite.AtmPresNone || atmDesc == Satellite.AtmPresTrace) { s.UpdateAtmPres(0.00); s.HydCoverage = 0.0; s.DayFaceMod = 1.2; s.NightFaceMod = .1; } if (atmDesc == Satellite.AtmPresVerythin) { s.UpdateAtmPres(0.01); s.HydCoverage = 0.0; s.DayFaceMod = 1.2; s.NightFaceMod = .1; } if (atmDesc == Satellite.AtmPresThin) { s.UpdateAtmPres(ourBag.RollRange(.01, .49)); s.HydCoverage = s.HydCoverage - .5; if (s.HydCoverage < 0) { s.HydCoverage = 0.0; } s.DayFaceMod = 1.16; s.NightFaceMod = .67; } if (atmDesc == Satellite.AtmPresStandard) { s.HydCoverage = s.HydCoverage - .25; if (s.HydCoverage < 0) { s.HydCoverage = 0.0; } s.DayFaceMod = 1.12; s.NightFaceMod = .80; } if (atmDesc == Satellite.AtmPresDense) { s.HydCoverage = s.HydCoverage - .1; if (s.HydCoverage < 0) { s.HydCoverage = 0.0; } s.DayFaceMod = 1.09; s.NightFaceMod = .88; } if (atmDesc == Satellite.AtmPresVerydense) { s.DayFaceMod = 1.05; s.NightFaceMod = .95; } if (atmDesc != Satellite.AtmPresSuperdense) { return; } s.DayFaceMod = 1.0; s.NightFaceMod = 1.0; }
/// <summary> /// Rolls the gas giant size and updates it. /// </summary> /// <param name="s">The gas gaint we are editing</param> /// <param name="roll">The Ddice roll</param> public static void UpdateGasGiantSize( Satellite s, int roll ) { if (roll <= 10) { s.UpdateSize(Satellite.SizeSmall); } if (roll >= 11 && roll <= 16) { s.UpdateSize(Satellite.SizeMedium); } if (roll >= 17) { s.UpdateSize(Satellite.SizeLarge); } }
public StarSystem CreateNewSystem() { OurSystem.SysName = LibStarGen.GenRandomSysName(OptionCont.SysNamePrefix, VelvetBag); OurSystem.SysAge = LibStarGen.GenSystemAge(VelvetBag); LibStarGen.CreateStars(VelvetBag, OurSystem); //--------------------- //generate the planets! var totalOrbCount = 0; //total orbital count //first off, master loop. foreach (var star in OurSystem.SysStars) { //draw up forbidden zones. if (!star.TestInitlizationZones()) { star.InitalizeZonesOfInterest(); } for (var i = 1; i < OurSystem.SysStars.Count; i++) { Range temp; if (OurSystem.SysStars[i].ParentId == star.SelfId) { temp = new Range(OurSystem.SysStars[i].GetInnerForbiddenZone(), OurSystem.SysStars[i].GetOuterForbiddenZone()); star.CreateForbiddenZone(temp, star.SelfId, OurSystem.SysStars[i].SelfId); } if (OurSystem.SysStars[i].SelfId != star.SelfId) { continue; } temp = new Range(OurSystem.SysStars[i].GetInnerForbiddenZone(), OurSystem.SysStars[i].GetOuterForbiddenZone()); star.CreateForbiddenZone(temp, star.ParentId, star.SelfId); } star.SortForbidden(); star.CreateCleanZones(); //gas giant flag // LibStarGen.gasGiantFlag(this.OurSystem.sysStars[currStar], VelvetBag.gurpsRoll()); var placeHolder = new Satellite(0, 0, 0, 0); int ownership; if (star.GasGiantFlag != Star.GasgiantNone) { double rangeAvail = 0, lowerBound = 0, diffRange = 0; var spawnRange = new Range(0, 1); //get range availability and spawn range //CONVENTIONAL if (star.GasGiantFlag == Star.GasgiantConventional) { rangeAvail = star.CheckConRange(); lowerBound = Star.SnowLine(star.InitLumin) * 1; diffRange = Star.SnowLine(star.InitLumin) * 1.5 - lowerBound; spawnRange = star.GetConventionalRange(); } //ECCENTRIC if (star.GasGiantFlag == Star.GasgiantEccentric) { rangeAvail = star.CheckEccRange(); lowerBound = Star.SnowLine(star.InitLumin) * .125; diffRange = Star.SnowLine(star.InitLumin) * .75 - lowerBound; spawnRange = star.GetEccentricRange(); } //EPISTELLAR if (star.GasGiantFlag == Star.GasgiantEpistellar) { rangeAvail = star.CheckEpiRange(); lowerBound = Star.InnerRadius(star.InitLumin, star.InitMass) * .1; diffRange = Star.InnerRadius(star.InitLumin, star.InitMass) * 1.8 - lowerBound; spawnRange = star.GetEpistellarRange(); } int roll; double orbit; if (rangeAvail >= .25) { do { orbit = VelvetBag.RollRange(lowerBound, diffRange); } while (!star.VerifyCleanOrbit(orbit)); ownership = star.GetOwnership(orbit); if (star.GasGiantFlag == Star.GasgiantEpistellar) { ownership = star.SelfId; } placeHolder = new Satellite(ownership, 0, orbit, 0, Satellite.BasetypeGasgiant); roll = VelvetBag.GurpsRoll() + 4; LibStarGen.UpdateGasGiantSize(placeHolder, roll); } if (rangeAvail >= .005 && rangeAvail < .25) { orbit = star.PickInRange(spawnRange); ownership = star.GetOwnership(orbit); if (star.GasGiantFlag == Star.GasgiantEpistellar) { ownership = star.SelfId; } placeHolder = new Satellite(ownership, 0, orbit, 0, Satellite.BasetypeGasgiant); roll = VelvetBag.GurpsRoll() + 4; LibStarGen.UpdateGasGiantSize(placeHolder, roll); } } //now we've determined our placeholdr, let's start working on our orbitals. double currOrbit = Star.InnerRadius(star.InitLumin, star.InitMass), nextOrbit; const double distance = .15; //now we have our placeholder. if (Math.Abs(placeHolder.OrbitalRadius) > 0) { star.AddSatellite(placeHolder); currOrbit = placeHolder.OrbitalRadius; } if (star.GasGiantFlag != Star.GasgiantEpistellar && Math.Abs(placeHolder.OrbitalRadius) > 0) { //we're moving left. //LEFT RIGHT LEFT //.. sorry about that var innerRadius = Star.InnerRadius(star.InitLumin, star.InitMass); do { //as we're moving left, divide. nextOrbit = currOrbit / LibStarGen.GetOrbitalRatio(VelvetBag); if (nextOrbit > currOrbit - distance) { nextOrbit = currOrbit - distance; } if (star.VerifyCleanOrbit(nextOrbit) && star.WithinCreationRange(nextOrbit)) { ownership = star.GetOwnership(nextOrbit); star.AddSatellite(new Satellite(ownership, 0, nextOrbit, 0)); } currOrbit = nextOrbit; //now let's check on } while (currOrbit > innerRadius); } //MOVE RIGHT! //now we have our placeholder. if (star.GasGiantFlag == Star.GasgiantEpistellar || Math.Abs(placeHolder.OrbitalRadius) < 0) { var outerRadius = Star.OuterRadius(star.InitMass); do { //as we're moving right, multiply. nextOrbit = currOrbit * LibStarGen.GetOrbitalRatio(VelvetBag); if (nextOrbit < currOrbit + distance) { nextOrbit = currOrbit + distance; } if (star.VerifyCleanOrbit(nextOrbit) && star.WithinCreationRange(nextOrbit)) { ownership = star.GetOwnership(nextOrbit); star.AddSatellite(new Satellite(ownership, 0, nextOrbit, 0)); } currOrbit = nextOrbit; if (currOrbit < 0) { currOrbit = outerRadius + 10; } //now let's check on } while (currOrbit < outerRadius); } //if a clean zone has 0 planets, add one. foreach (var c in star.ZonesOfInterest.FormationZones.Where(c => !star.CleanZoneHasOrbits(c))) { nextOrbit = star.PickInRange(c.GetRange()); ownership = star.GetOwnership(nextOrbit); star.AddSatellite(new Satellite(ownership, 0, nextOrbit, 0)); } //sort orbitals star.SortOrbitals(); star.GiveOrbitalsOrder(ref totalOrbCount); //now we get orbital contents, then fill in details LibStarGen.PopulateOrbits(star, VelvetBag); //set any star with all empty orbits to have one planet if (OptionCont.EnsureOneOrbit != null && ( !star.IsAllEmptyOrbits() || !(bool) OptionCont.EnsureOneOrbit )) { continue; } var newPlanet = VelvetBag.Rng(1, star.SysPlanets.Count, -1); star.SysPlanets[newPlanet].UpdateTypeSize(Satellite.BasetypeTerrestial, Satellite.SizeMedium); } foreach (var star in OurSystem.SysStars) { var distChart = LibStarGen.GenDistChart(OurSystem.SysStars); foreach (var sat in star.SysPlanets) { sat.UpdateBlackBodyTemp(distChart, OurSystem.SysStars); } LibStarGen.CreatePlanets(OurSystem, star.SysPlanets, VelvetBag); } //----------------------- return OurSystem; }
/// <summary> /// The copy constructor /// </summary> /// <param name="s">The satelite object we are copying</param> public Satellite( Satellite s ) : base(s.ParentId, s.SelfId) { // .. it's a copy constructor. InitiateLists(); UpdateType(s.SatelliteType); UpdateSize(s.SatelliteSize); foreach (var m in s.InnerMoonlets) { InnerMoonlets.Add(new Moonlet(m)); } foreach (var m in s.OuterMoonlets) { OuterMoonlets.Add(new Moonlet(m)); } foreach (var m in s.MajorMoons) { MajorMoons.Add(new Satellite(m)); } OrbitalCycle = s.OrbitalCycle; Diameter = s.Diameter; Mass = s.Mass; Density = s.Density; AxialTilt = s.AxialTilt; SiderealPeriod = s.SiderealPeriod; RotationalPeriod = s.RotationalPeriod; RetrogradeMotion = s.RetrogradeMotion; foreach (var atmType in s.AtmCate) { AtmCate.Add(atmType); } foreach (var kvp in s.TideForce) { TideForce.Add(kvp.Key, kvp.Value); } VolActivity = s.VolActivity; TecActivity = s.TecActivity; MasterOrderId = s.MasterOrderId; SurfaceTemp = s.SurfaceTemp; DayFaceMod = s.DayFaceMod; NightFaceMod = s.NightFaceMod; HydCoverage = s.HydCoverage; AtmMass = s.AtmMass; AtmPres = s.AtmPres; Rvm = s.Rvm; IsResonant = s.IsResonant; }
/// <summary> /// Sends the completed status and begins generating the planets /// </summary> /// <param name="sender">Sender object</param> /// <param name="e">EventArgs object</param> private void btnGenPlanets_Click( object sender, EventArgs e ) { //save options OptionCont.MoreConGasGiantChances = ChkConGasGiant.IsChecked != null && (bool) ChkConGasGiant.IsChecked; OptionCont.NoOceanOnlyGarden = OnlyGarden.IsChecked != null && (bool) OnlyGarden.IsChecked; OptionCont.MoreAccurateO2Catastrophe = ChkMoreAccurateO2Catastrophe.IsChecked != null && (bool) ChkMoreAccurateO2Catastrophe.IsChecked; OptionCont.StableActivity = FrcStableActivity.IsChecked != null && (bool) FrcStableActivity.IsChecked; OptionCont.NoMarginalAtm = NoMarginAtm.IsChecked != null && (bool) NoMarginAtm.IsChecked; OptionCont.HighRvmVal = HighRvm.IsChecked != null && (bool) HighRvm.IsChecked; OptionCont.OverrideHabitability = ChkHigherHabitability.IsChecked != null && (bool) ChkHigherHabitability.IsChecked; OptionCont.IgnoreLunarTidesOnGardenWorlds = IgnoreTides.IsChecked != null && (bool) IgnoreTides.IsChecked; OptionCont.RerollAxialTiltOver45 = ChkKeepAxialTiltUnder45.IsChecked != null && (bool) ChkKeepAxialTiltUnder45.IsChecked; OptionCont.AlwaysDisplayTidalData = ChkDisplayTidalData.IsChecked != null && (bool) ChkDisplayTidalData.IsChecked; OptionCont.ExpandAsteroidBelt = ChkExpandAsteroidBelt.IsChecked != null && (bool) ChkExpandAsteroidBelt.IsChecked; if (OverrideMoons.IsChecked == true) { OptionCont.SetNumberOfMoonsOverGarden(int.Parse(NumMoons.Text)); } if (OverridePressure.IsChecked == true) { OptionCont.SetAtmPressure = double.Parse(NumAtmPressure.Text); } if (ChkOverrideTilt.IsChecked == true) { OptionCont.SetAxialTilt(int.Parse(NumTilt.Text)); } //set the moon option. if (BookHigh.IsChecked == true) { OptionCont.MoonOrbitFlag = OptionCont.MoonBookhigh; } if (BookMoon.IsChecked == true) { OptionCont.MoonOrbitFlag = OptionCont.MoonBook; } if (ExtendHigh.IsChecked == true) { OptionCont.MoonOrbitFlag = OptionCont.MoonExpandhigh; } if (ExtendNorm.IsChecked == true) { OptionCont.MoonOrbitFlag = OptionCont.MoonExpand; } //generate the planets! var totalOrbCount = 0; //total orbital count //first off, master loop. foreach (var star in OurSystem.SysStars) { if (!star.TestInitlizationZones()) { star.InitalizeZonesOfInterest(); } for (var i = 1; i < OurSystem.SysStars.Count; i++) { Range temp; if (OurSystem.SysStars[i].ParentId == star.SelfId) { temp = new Range(OurSystem.SysStars[i].GetInnerForbiddenZone(), OurSystem.SysStars[i].GetOuterForbiddenZone()); star.CreateForbiddenZone(temp, star.SelfId, OurSystem.SysStars[i].SelfId); } if (OurSystem.SysStars[i].SelfId != star.SelfId) { continue; } temp = new Range(OurSystem.SysStars[i].GetInnerForbiddenZone(), OurSystem.SysStars[i].GetOuterForbiddenZone()); star.CreateForbiddenZone(temp, star.ParentId, star.SelfId); } star.SortForbidden(); star.CreateCleanZones(); var placeHolder = new Satellite(0, 0, 0, 0); int ownership; if (star.GasGiantFlag != Star.GasgiantNone) { double rangeAvail = 0, lowerBound = 0, diffRange = 0; var spawnRange = new Range(0, 1); //get range availability and spawn range //CONVENTIONAL if (star.GasGiantFlag == Star.GasgiantConventional) { rangeAvail = star.CheckConRange(); lowerBound = Star.SnowLine(star.InitLumin) * 1; diffRange = Star.SnowLine(star.InitLumin) * 1.5 - lowerBound; spawnRange = star.GetConventionalRange(); } //ECCENTRIC if (star.GasGiantFlag == Star.GasgiantEccentric) { rangeAvail = star.CheckEccRange(); lowerBound = Star.SnowLine(star.InitLumin) * .125; diffRange = Star.SnowLine(star.InitLumin) * .75 - lowerBound; spawnRange = star.GetEccentricRange(); } //EPISTELLAR if (star.GasGiantFlag == Star.GasgiantEpistellar) { rangeAvail = star.CheckEpiRange(); lowerBound = Star.InnerRadius(star.InitLumin, star.InitMass) * .1; diffRange = Star.InnerRadius(star.InitLumin, star.InitMass) * 1.8 - lowerBound; spawnRange = star.GetEpistellarRange(); } int roll; double orbit; if (rangeAvail >= .25) { do { orbit = VelvetBag.RollRange(lowerBound, diffRange); } while (!star.VerifyCleanOrbit(orbit)); ownership = star.GetOwnership(orbit); if (star.GasGiantFlag == Star.GasgiantEpistellar) { ownership = star.SelfId; } placeHolder = new Satellite(ownership, 0, orbit, 0, Satellite.BasetypeGasgiant); roll = VelvetBag.GurpsRoll() + 4; LibStarGen.UpdateGasGiantSize(placeHolder, roll); } if (rangeAvail >= .005 && rangeAvail < .25) { orbit = star.PickInRange(spawnRange); ownership = star.GetOwnership(orbit); if (star.GasGiantFlag == Star.GasgiantEpistellar) { ownership = star.SelfId; } placeHolder = new Satellite(ownership, 0, orbit, 0, Satellite.BasetypeGasgiant); roll = VelvetBag.GurpsRoll() + 4; LibStarGen.UpdateGasGiantSize(placeHolder, roll); } } //now we've determined our placeholdr, let's start working on our orbitals. double currOrbit = Star.InnerRadius(star.InitLumin, star.InitMass), nextOrbit; const double distance = .15; //now we have our placeholder. if (Math.Abs(placeHolder.OrbitalRadius) > 0) { star.AddSatellite(placeHolder); currOrbit = placeHolder.OrbitalRadius; } if (star.GasGiantFlag != Star.GasgiantEpistellar && Math.Abs(placeHolder.OrbitalRadius) > 0) { //we're moving left. //LEFT RIGHT LEFT //.. sorry about that var innerRadius = Star.InnerRadius(star.InitLumin, star.InitMass); do { //as we're moving left, divide. nextOrbit = currOrbit / LibStarGen.GetOrbitalRatio(VelvetBag); if (nextOrbit > currOrbit - distance) { nextOrbit = currOrbit - distance; } if (star.VerifyCleanOrbit(nextOrbit) && star.WithinCreationRange(nextOrbit)) { ownership = star.GetOwnership(nextOrbit); star.AddSatellite(new Satellite(ownership, 0, nextOrbit, 0)); } currOrbit = nextOrbit; //now let's check on } while (currOrbit > innerRadius); } //MOVE RIGHT! //now we have our placeholder. if (star.GasGiantFlag == Star.GasgiantEpistellar || Math.Abs(placeHolder.OrbitalRadius) < 0) { var outerRadius = Star.OuterRadius(star.InitMass); do { //as we're moving right, multiply. nextOrbit = currOrbit * LibStarGen.GetOrbitalRatio(VelvetBag); if (nextOrbit < currOrbit + distance) { nextOrbit = currOrbit + distance; } if (star.VerifyCleanOrbit(nextOrbit) && star.WithinCreationRange(nextOrbit)) { ownership = star.GetOwnership(nextOrbit); star.AddSatellite(new Satellite(ownership, 0, nextOrbit, 0)); } currOrbit = nextOrbit; if (currOrbit < 0) { currOrbit = outerRadius + 10; } //now let's check on } while (currOrbit < outerRadius); } //if a clean zone has 0 planets, add one. foreach (var c in star.ZonesOfInterest.FormationZones) { if (!star.CleanZoneHasOrbits(c)) { nextOrbit = star.PickInRange(c.GetRange()); ownership = star.GetOwnership(nextOrbit); star.AddSatellite(new Satellite(ownership, 0, nextOrbit, 0)); } } //sort orbitals star.SortOrbitals(); star.GiveOrbitalsOrder(ref totalOrbCount); //now we get orbital contents, then fill in details LibStarGen.PopulateOrbits(star, VelvetBag); //set any star with all empty orbits to have one planet if (!star.IsAllEmptyOrbits() || !(bool) OptionCont.EnsureOneOrbit) { continue; } var newPlanet = VelvetBag.Rng(1, star.SysPlanets.Count, -1); star.SysPlanets[newPlanet].UpdateTypeSize(Satellite.BasetypeTerrestial, Satellite.SizeMedium); } foreach (var star in OurSystem.SysStars) { var distChart = LibStarGen.GenDistChart(OurSystem.SysStars); foreach (var sat in star.SysPlanets) { sat.UpdateBlackBodyTemp(distChart, OurSystem.SysStars); } LibStarGen.CreatePlanets(OurSystem, star.SysPlanets, VelvetBag); } OParent.CreatePlanetsFinished = true; Close(); //close the form }
public virtual void AddSatellite( Satellite s ) { SysPlanets.Add(s); }