예제 #1
0
        /// <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));
            }
        }
예제 #2
0
 public Natural(string id, Vector2 anchor, NaturalData data)
     : base(id, Color.Green)
 {
     Anchor = anchor;
     Data   = data;
 }