/// <summary> /// NATURAL /// Support for Natural like map elements /// TODO: /// - Trees: rows, woods. /// - other naturals /// </summary> /// <returns></returns> public IEnumerable <Natural> Natural() { var nodes = (from e in Xdoc.Descendants("node") where e.Attribute("visible").Value == "true" from t in e.Descendants("tag") where t.Attribute("k").Value == "natural" && t.Attribute("v").Value == "tree" select new { Id = e.Attribute("id").Value, Name = t.Attribute("v").Value, Lat = Convert.ToDouble(e.Attribute("lat").Value), Long = Convert.ToDouble(e.Attribute("lon").Value), Element = e }); foreach (var node in nodes) { NaturalData data = default(NaturalData); data.circumference = DefaultTreeCircumference; data.height = DefaultTreeHeight; foreach (var tag in node.Element.Descendants("tag")) { switch (tag.Attribute("k").Value.ToLower()) { case "genus": data.genus = tag.Attribute("v").Value; break; case "leaf_type": data.leaf_type = tag.Attribute("v").Value; break; case "circumference": MatchFloat(tag.Attribute("v").Value, out data.circumference); break; case "height": MatchFloat(tag.Attribute("v").Value, out data.height); break; } } var pos = MercatorHelper.ToMeters(node.Lat, node.Long); yield return(new Natural(node.Id, new Vector2(pos.X - Tile.Center.X, pos.Y - Tile.Center.Y), data)); } }
public Natural(string id, Vector2 anchor, NaturalData data) : base(id, Color.Green) { Anchor = anchor; Data = data; }