void CreateTriangle(TileNode a, TileNode b, TileNode c)
    {
        _triangles.Add(a.VertexIndex);
        _triangles.Add(b.VertexIndex);
        _triangles.Add(c.VertexIndex);

        TileTriangle triangle = new TileTriangle(a.VertexIndex, b.VertexIndex, c.VertexIndex);

        AddTriangleToDictionary(triangle.VertexIndexA, triangle);
        AddTriangleToDictionary(triangle.VertexIndexB, triangle);
        AddTriangleToDictionary(triangle.VertexIndexC, triangle);
    }
 void AddTriangleToDictionary(int vertexIndexKey, TileTriangle triangle)
 {
     if (_triangleDictionary.ContainsKey(vertexIndexKey))
     {
         _triangleDictionary[vertexIndexKey].Add(triangle);
     }
     else
     {
         List <TileTriangle> triangleList = new List <TileTriangle>();
         triangleList.Add(triangle);
         _triangleDictionary.Add(vertexIndexKey, triangleList);
     }
 }
    int GetConnectedOutlineVertex(int vertexIndex)
    {
        List <TileTriangle> trianglesContainingVertex = _triangleDictionary[vertexIndex];

        for (int i = 0; i < trianglesContainingVertex.Count; i++)
        {
            TileTriangle triangle = trianglesContainingVertex[i];

            for (int j = 0; j < 3; j++)
            {
                int vertexB = triangle[j];
                if (vertexB != vertexIndex && !_checkedVertices.Contains(vertexB))
                {
                    if (IsOutlineEdge(vertexIndex, vertexB))
                    {
                        return(vertexB);
                    }
                }
            }
        }

        return(-1);
    }