/// <summary> /// Parses a single luminary and recursively all its children. /// </summary> /// <param name="lumen">XElement to parse</param> /// <param name="shape">Shape contained by the luminary and used to draw/represent it.</param> /// <param name="scale">universe scale</param> /// <param name="primaryPosition">this luminary's parent position</param> /// <returns></returns> private static Luminary parseLuminary(XElement lumen, Shape shape, float scale, Vector3 primaryPosition) { Luminary l = new Luminary(shape); l.Scaling = scale; l.Name = lumen.Element("name").Value; l.Info = lumen.Element("info").Value; l.CalculateCoords(primaryPosition, float.Parse(lumen.Element("primaryDistance").Value), float.Parse(lumen.Element("diameter").Value)); l.CalculateSpeed(float.Parse(lumen.Element("rotationSpeed").Value)); l.Illuminated = Boolean.Parse(lumen.Element("illuminated").Value); l.IsSatellite = Boolean.Parse(lumen.Element("isSatellite").Value); if (lumen.Element("texture") == null) { l.AddTextures("Sun_Map.jpg", "sun_normal.png", "sun_b.jpg"); //for now: set the sun textures as default } else { l.AddTextures(lumen.Element("texture").Value, lumen.Element("normal").Value, lumen.Element("bump").Value); } if (!l.IsSatellite) //is not a satellite -> has children that need to be parsed as well { IEnumerable <XElement> children = lumen.Elements("luminaries").Elements(); foreach (var child in children) { l.add(parseLuminary(child, shape, scale, l.Coords + new Vector3(l.Diameter * 0.5f))); //translate from the surface of the primary, not the center } } return(l); }
/// <summary> /// Add a child luminary (satellite) to the list. /// </summary> /// <param name="child">child/satellite</param> public void add(Luminary child) { Satellites.Add(child); }