public static void WriteTileTo(this TiledBarrierGraph graph, Stream stream, uint tile) { var enumerator = graph.GetEnumerator(); // write vertices. for (var v = 0; v < graph.VertexCount; v++) { if (!enumerator.MoveTo(v)) { continue; } if (!enumerator.MoveNext()) { continue; } // write vertex details. var vertexGuid = graph.GetVertexGuid(v); stream.Write(vertexGuid.ToByteArray()); stream.Write(graph.GetVertexLocationBytes(v)); } stream.Write(EmptyGuid); // write edges. for (var v = 0; v < graph.VertexCount; v++) { if (!enumerator.MoveTo(v)) { continue; } // check (and count) edges. var edges = 0; while (enumerator.MoveNext()) { if (enumerator.Forward) { edges++; } } if (edges == 0) { continue; } // write vertex1 details. var vertex1Guid = graph.GetVertexGuid(v); stream.Write(vertex1Guid.ToByteArray()); // write edges details. stream.Write(BitConverter.GetBytes(edges)); // the number of edges. enumerator.MoveTo(v); while (enumerator.MoveNext()) { if (!enumerator.Forward) { continue; } enumerator.WriteToStream(stream); } } stream.Write(EmptyGuid); // write faces. for (var f = 1; f < graph.FaceCount; f++) { var faceGuid = graph.GetFaceGuid(f); if (faceGuid == null) { continue; } stream.Write(faceGuid.Value.ToByteArray()); // write edges. var edges = graph.EnumerateFaceClockwise(f).ToList(); stream.Write(BitConverter.GetBytes(edges.Count)); foreach (var edge in edges) { enumerator.MoveTo(edge.vertex1); enumerator.MoveNextUntil(edge.edge); stream.Write(enumerator.GetEdgeGuid().ToByteArray()); stream.WriteByte(edge.forward ? (byte)1 : (byte)0); } // write attributes. stream.WriteAttributes(graph.GetFaceData(f)); } stream.Write(EmptyGuid); }