private CelestialUnityObject CreateObject(CelestialObjectDetails childObjectDetails, CelestialObjectDetails centreObject, float kmToUnit) { var relativeToCentre = centreObject.GalacticPosition - childObjectDetails.GalacticPosition; var position = GetPositionInSelectedUnits(relativeToCentre); return(CreateObject(childObjectDetails, kmToUnit, position)); }
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 }); }
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()); }
private float ScaleObject(CelestialObjectDetails objectDetails, float kmToUnit) { return((float)((objectDetails.RadiusKm / kmToUnit) * 2) * ObjectScale); }