public TileData DeserializeTileData(Stream stream)
        {
            var node = TWXmlNode.GetRootNodeFromStream(stream);
            var data = new TileData(XMLSerializer.ReadGuid(node.FindChildNode("Guid")))
            {
                Mesh       = meshFactory.GetMesh(XMLSerializer.ReadGuid(node.FindChildNode("Mesh"))),
                Dimensions = XMLSerializer.ReadVector3(node.FindChildNode("Dimensions"))
            };

            var faces = node.FindChildNode("Faces").GetChildNodes();

            for (int i = 0; i < faces.Length; i++)
            {
                var cFace = faces[i];
                var face  = (TileFace)Enum.Parse(typeof(TileFace), cFace.GetAttribute("Face"));
                data.SetFaceType(face, tileFaceTypeFactory.GetTileFaceType(XMLSerializer.ReadGuid(cFace.FindChildNode("Type"))));
                data.SetLocalWinding(face, XMLSerializer.ReadBoolean(cFace.FindChildNode("Winding")));
            }

            return(data);
        }