Esempio n. 1
0
        private CelestialUnityObject CreateObject(CelestialObjectDetails childObjectDetails, CelestialObjectDetails centreObject, float kmToUnit)
        {
            var relativeToCentre = centreObject.GalacticPosition - childObjectDetails.GalacticPosition;
            var position         = GetPositionInSelectedUnits(relativeToCentre);

            return(CreateObject(childObjectDetails, kmToUnit, position));
        }
Esempio n. 2
0
        private CelestialUnityObject CreateObject(CelestialObjectDetails objectDetails, float kmToUnit, Vector3 position)
        {
            var diameterAsScale = ScaleObject(objectDetails, kmToUnit);
            var size            = new Vector3(diameterAsScale, diameterAsScale, diameterAsScale);

            return(new CelestialUnityObject
            {
                Name = objectDetails.Name,
                CelestialObjectId = objectDetails.Id,
                Position = position,
                Size = size,
                Type = objectDetails.Type
            });
        }
Esempio n. 3
0
        private IEnumerable <CelestialUnityObject> CreateCelestialObjects(CelestialObjectDetails centreObject, IEnumerable <CelestialObjectDetails> objectDetails)
        {
            if (centreObject == null)
            {
                return(new List <CelestialUnityObject>());
            }

            var maxXPosition    = centreObject.GalacticPosition.X + MaxKilometersDrawn;
            var maxYPosition    = centreObject.GalacticPosition.Y + MaxKilometersDrawn;
            var maxZPosition    = centreObject.GalacticPosition.Z + MaxKilometersDrawn;
            var objectsToRender = objectDetails.Where(od =>
                                                      od.GalacticPosition.X <= maxXPosition &&
                                                      od.GalacticPosition.Y <= maxYPosition &&
                                                      od.GalacticPosition.Z <= maxZPosition);

            if (!objectsToRender.Any())
            {
                return(new List <CelestialUnityObject>());
            }

            var orbitParentIds = objectsToRender.Select(o => o.Orbit.ParentObjectId);

            objectsToRender = objectsToRender.Union(objectDetails.Where(od => orbitParentIds.Contains(od.Id) && !objectsToRender.Any(otr => otr.Id == od.Id)));
            var unityObjects = objectsToRender.Select(o => CreateObject(o, centreObject, KilometersToUnit));

            foreach (var orbittingobject in objectsToRender.Where(o => o.Orbit?.ParentObjectId > 0))
            {
                var unityObject       = unityObjects.FirstOrDefault(uo => uo.CelestialObjectId == orbittingobject.Id);
                var unityParentObject = unityObjects.FirstOrDefault(uo => uo.CelestialObjectId == orbittingobject.Orbit.ParentObjectId);

                if (unityObject != null && unityParentObject != null && unityObject.Orbit != null)
                {
                    unityObject.Orbit.ParentGameObjectName = unityParentObject.Name;
                }
            }

            return(unityObjects.ToList());
        }
Esempio n. 4
0
 private float ScaleObject(CelestialObjectDetails objectDetails, float kmToUnit)
 {
     return((float)((objectDetails.RadiusKm / kmToUnit) * 2) * ObjectScale);
 }