// Token: 0x0600229B RID: 8859 RVA: 0x00190E64 File Offset: 0x0018F064
public static void GetContours(INavmesh navmesh, Action <List <Int3>, bool> results)
{
bool[] uses = new bool[3];
Dictionary <int, int> outline = new Dictionary <int, int>();
Dictionary <int, Int3> vertexPositions = new Dictionary <int, Int3>();
HashSet <int> hasInEdge = new HashSet <int>();
navmesh.GetNodes(delegate(GraphNode _node)
{
TriangleMeshNode triangleMeshNode = _node as TriangleMeshNode;
uses[0] = (uses[1] = (uses[2] = false));
if (triangleMeshNode != null)
{
for (int i = 0; i < triangleMeshNode.connections.Length; i++)
{
TriangleMeshNode triangleMeshNode2 = triangleMeshNode.connections[i].node as TriangleMeshNode;
if (triangleMeshNode2 != null)
{
int num = triangleMeshNode.SharedEdge(triangleMeshNode2);
if (num != -1)
{
uses[num] = true;
}
}
}
for (int j = 0; j < 3; j++)
{
if (!uses[j])
{
int i2 = j;
int i3 = (j + 1) % triangleMeshNode.GetVertexCount();
outline[triangleMeshNode.GetVertexIndex(i2)] = triangleMeshNode.GetVertexIndex(i3);
hasInEdge.Add(triangleMeshNode.GetVertexIndex(i3));
vertexPositions[triangleMeshNode.GetVertexIndex(i2)] = triangleMeshNode.GetVertex(i2);
vertexPositions[triangleMeshNode.GetVertexIndex(i3)] = triangleMeshNode.GetVertex(i3);
}
}
}
});
Polygon.TraceContours(outline, hasInEdge, delegate(List <int> chain, bool cycle)
{
List <Int3> list = ListPool <Int3> .Claim();
for (int i = 0; i < chain.Count; i++)
{
list.Add(vertexPositions[chain[i]]);
}
results(list, cycle);
});
}