private static IStellarEntity FindOrbitParent( StarSystem system, IStellarEntity orbiter) { if (!system.Objects.Contains <IStellarEntity>(orbiter)) { throw new ArgumentOutOfRangeException("System does not contain orbiter."); } if (orbiter.Params == null) { return((IStellarEntity)null); } if (!string.IsNullOrEmpty(orbiter.Params.Parent)) { return(system.Objects.FirstOrDefault <IStellarEntity>((Func <IStellarEntity, bool>)(x => { if (x.Params != null) { return x.Params.Name == orbiter.Params.Parent; } return false; }))); } if (orbiter.Params is StarOrbit) { return((IStellarEntity)null); } return(system.Star); }
public IEnumerable <IStellarEntity> GetMoons(IStellarEntity planet) { foreach (IStellarEntity stellarEntity in this.Objects.Where <IStellarEntity>((Func <IStellarEntity, bool>)(x => { if (x.Orbit != null) { return(x.Orbit.Parent == planet.Params); } return(false); }))) { if (stellarEntity.Params is MoonOrbit || stellarEntity.Params is PlanetOrbit) { yield return(stellarEntity); } } }
public void Add(IStellarEntity obj) { this._objects.Add(obj); }
private static int CompareByOrbitNumber(IStellarEntity x, IStellarEntity y) { return(x.Orbit.OrbitNumber.CompareTo(y.Orbit.OrbitNumber)); }
public static float CalcOrbitStep(IStellarEntity orbitParent) { return(StarSystemHelper.CalcOrbitStep(orbitParent.Params)); }
public static StarSystem CreateStarSystem(Random random, Matrix worldTransform, Kerberos.Sots.Data.StarMapFramework.StarSystem systemParams, LegacyTerrain parentTerrain) { StellarClass stellarClass = StarHelper.ResolveStellarClass(random, systemParams.Type, systemParams.SubType, systemParams.Size); Kerberos.Sots.Data.StarMapFramework.StarOrbit starOrbit = new StarOrbit(); starOrbit.Name = systemParams.Name; starOrbit.StellarClass = stellarClass.ToString(); int randomOrbital = 1; List <Kerberos.Sots.Data.StarMapFramework.Orbit> list = new List <Kerberos.Sots.Data.StarMapFramework.Orbit>(); list.Add(starOrbit); for (int i = 0; i < list.Count; i++) { Kerberos.Sots.Data.StarMapFramework.Orbit thisOrbital = list[i]; if (!(thisOrbital is EmptyOrbit)) { List <Kerberos.Sots.Data.StarMapFramework.Orbit> predefinedOrbitals = new List <Kerberos.Sots.Data.StarMapFramework.Orbit>(); predefinedOrbitals.AddRange(systemParams.Orbits.Where(delegate(Kerberos.Sots.Data.StarMapFramework.Orbit x) { if (string.IsNullOrEmpty(x.Parent)) { return(thisOrbital is StarOrbit); } return(x.Parent == thisOrbital.Name); })); if (thisOrbital is StarOrbit) { StarSystemHelper.AssignOrbitNumbers(stellarClass, predefinedOrbitals); } else { int orbitNumber = 1; predefinedOrbitals.ForEach(delegate(Kerberos.Sots.Data.StarMapFramework.Orbit x) { x.OrbitNumber = orbitNumber++; }); } List <Kerberos.Sots.Data.StarMapFramework.Orbit> list2 = StarSystemHelper.PopulateRandomOrbits(random, thisOrbital); list2.RemoveAll((Kerberos.Sots.Data.StarMapFramework.Orbit x) => predefinedOrbitals.Any((Kerberos.Sots.Data.StarMapFramework.Orbit y) => y.OrbitNumber == x.OrbitNumber)); list2.ForEach(delegate(Kerberos.Sots.Data.StarMapFramework.Orbit x) { x.Name = string.Format("RandomOrbital{0}", ++randomOrbital); }); list.AddRange(predefinedOrbitals); list.AddRange(list2); } } StarSystem starSystem = new StarSystem(); starSystem.Params = systemParams; starSystem.WorldTransform = worldTransform; starSystem.DisplayName = systemParams.Name; starSystem.IsStartPosition = systemParams.isStartLocation; starSystem.WorldTransform = worldTransform; starSystem.Terrain = parentTerrain; foreach (Kerberos.Sots.Data.StarMapFramework.Orbit orbit in list) { bool isOrbitingStar = orbit.Parent == starOrbit.Name; List <IStellarEntity> objs = new List <IStellarEntity>(StarSystemHelper.CreateOrbiters(random, orbit, isOrbitingStar)); starSystem.AddRange(objs); } foreach (IStellarEntity stellarEntity in starSystem.Objects) { IStellarEntity stellarEntity2 = StarSystemHelper.FindOrbitParent(starSystem, stellarEntity); if (stellarEntity2 != null) { stellarEntity.Orbit = StarSystem.SetOrbit(random, stellarEntity2.Params, stellarEntity.Params); } } return(starSystem); }