Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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);
         }
     }
 }
Exemplo n.º 3
0
 public void Add(IStellarEntity obj)
 {
     this._objects.Add(obj);
 }
Exemplo n.º 4
0
 private static int CompareByOrbitNumber(IStellarEntity x, IStellarEntity y)
 {
     return(x.Orbit.OrbitNumber.CompareTo(y.Orbit.OrbitNumber));
 }
Exemplo n.º 5
0
 public static float CalcOrbitStep(IStellarEntity orbitParent)
 {
     return(StarSystemHelper.CalcOrbitStep(orbitParent.Params));
 }
Exemplo n.º 6
0
        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);
        }