// Token: 0x06002570 RID: 9584 RVA: 0x001A2E38 File Offset: 0x001A1038 public static void UpdateArea(GraphUpdateObject o, INavmeshHolder graph) { Bounds bounds = graph.transform.InverseTransform(o.bounds); IntRect irect = new IntRect(Mathf.FloorToInt(bounds.min.x * 1000f), Mathf.FloorToInt(bounds.min.z * 1000f), Mathf.CeilToInt(bounds.max.x * 1000f), Mathf.CeilToInt(bounds.max.z * 1000f)); Int3 a = new Int3(irect.xmin, 0, irect.ymin); Int3 b = new Int3(irect.xmin, 0, irect.ymax); Int3 c = new Int3(irect.xmax, 0, irect.ymin); Int3 d = new Int3(irect.xmax, 0, irect.ymax); int ymin = ((Int3)bounds.min).y; int ymax = ((Int3)bounds.max).y; graph.GetNodes(delegate(GraphNode _node) { TriangleMeshNode triangleMeshNode = _node as TriangleMeshNode; bool flag = false; int num = 0; int num2 = 0; int num3 = 0; int num4 = 0; for (int i = 0; i < 3; i++) { Int3 vertexInGraphSpace = triangleMeshNode.GetVertexInGraphSpace(i); if (irect.Contains(vertexInGraphSpace.x, vertexInGraphSpace.z)) { flag = true; break; } if (vertexInGraphSpace.x < irect.xmin) { num++; } if (vertexInGraphSpace.x > irect.xmax) { num2++; } if (vertexInGraphSpace.z < irect.ymin) { num3++; } if (vertexInGraphSpace.z > irect.ymax) { num4++; } } if (!flag && (num == 3 || num2 == 3 || num3 == 3 || num4 == 3)) { return; } for (int j = 0; j < 3; j++) { int i2 = (j > 1) ? 0 : (j + 1); Int3 vertexInGraphSpace2 = triangleMeshNode.GetVertexInGraphSpace(j); Int3 vertexInGraphSpace3 = triangleMeshNode.GetVertexInGraphSpace(i2); if (VectorMath.SegmentsIntersectXZ(a, b, vertexInGraphSpace2, vertexInGraphSpace3)) { flag = true; break; } if (VectorMath.SegmentsIntersectXZ(a, c, vertexInGraphSpace2, vertexInGraphSpace3)) { flag = true; break; } if (VectorMath.SegmentsIntersectXZ(c, d, vertexInGraphSpace2, vertexInGraphSpace3)) { flag = true; break; } if (VectorMath.SegmentsIntersectXZ(d, b, vertexInGraphSpace2, vertexInGraphSpace3)) { flag = true; break; } } if (flag || triangleMeshNode.ContainsPointInGraphSpace(a) || triangleMeshNode.ContainsPointInGraphSpace(b) || triangleMeshNode.ContainsPointInGraphSpace(c) || triangleMeshNode.ContainsPointInGraphSpace(d)) { flag = true; } if (!flag) { return; } int num5 = 0; int num6 = 0; for (int k = 0; k < 3; k++) { Int3 vertexInGraphSpace4 = triangleMeshNode.GetVertexInGraphSpace(k); if (vertexInGraphSpace4.y < ymin) { num6++; } if (vertexInGraphSpace4.y > ymax) { num5++; } } if (num6 == 3 || num5 == 3) { return; } o.WillUpdateNode(triangleMeshNode); o.Apply(triangleMeshNode); }); }