protected MyNavigationTriangle AddTriangle(ref Vector3 A, ref Vector3 B, ref Vector3 C, ref int edgeAB, ref int edgeBC, ref int edgeCA) { MyNavigationTriangle userData = this.m_triPool.Allocate(); int num = ((0 + ((edgeAB == -1) ? 1 : 0)) + ((edgeBC == -1) ? 1 : 0)) + ((edgeCA == -1) ? 1 : 0); int triangleIndex = -1; if (num == 3) { triangleIndex = this.m_mesh.MakeNewTriangle(userData, ref A, ref B, ref C, out edgeAB, out edgeBC, out edgeCA); } else if (num == 2) { triangleIndex = (edgeAB == -1) ? ((edgeBC == -1) ? this.m_mesh.ExtrudeTriangleFromEdge(ref B, edgeCA, userData, out edgeAB, out edgeBC) : this.m_mesh.ExtrudeTriangleFromEdge(ref A, edgeBC, userData, out edgeCA, out edgeAB)) : this.m_mesh.ExtrudeTriangleFromEdge(ref C, edgeAB, userData, out edgeBC, out edgeCA); } else if (num == 1) { triangleIndex = (edgeAB != -1) ? ((edgeBC != -1) ? this.GetTriangleOneNewEdge(ref edgeCA, ref edgeAB, ref edgeBC, userData) : this.GetTriangleOneNewEdge(ref edgeBC, ref edgeCA, ref edgeAB, userData)) : this.GetTriangleOneNewEdge(ref edgeAB, ref edgeBC, ref edgeCA, userData); } else { MyWingedEdgeMesh.Edge other = this.m_mesh.GetEdge(edgeAB); MyWingedEdgeMesh.Edge edge = this.m_mesh.GetEdge(edgeBC); MyWingedEdgeMesh.Edge edge3 = this.m_mesh.GetEdge(edgeCA); int sharedB = edge3.TryGetSharedVertex(ref other); int sharedC = other.TryGetSharedVertex(ref edge); int num5 = edge.TryGetSharedVertex(ref edge3); int num6 = ((0 + ((sharedB == -1) ? 0 : 1)) + ((sharedC == -1) ? 0 : 1)) + ((num5 == -1) ? 0 : 1); if (num6 == 3) { triangleIndex = this.m_mesh.MakeFace(userData, edgeAB); } else if (num6 == 2) { triangleIndex = (sharedB != -1) ? ((sharedC != -1) ? this.GetTriangleTwoSharedVertices(edgeCA, edgeAB, ref edgeBC, sharedB, sharedC, userData) : this.GetTriangleTwoSharedVertices(edgeBC, edgeCA, ref edgeAB, num5, sharedB, userData)) : this.GetTriangleTwoSharedVertices(edgeAB, edgeBC, ref edgeCA, sharedC, num5, userData); } else if (num6 == 1) { triangleIndex = (sharedB == -1) ? ((sharedC == -1) ? this.GetTriangleOneSharedVertex(edgeBC, edgeCA, ref edgeAB, num5, userData) : this.GetTriangleOneSharedVertex(edgeAB, edgeBC, ref edgeCA, sharedC, userData)) : this.GetTriangleOneSharedVertex(edgeCA, edgeAB, ref edgeBC, sharedB, userData); } else { int num7; int num8; triangleIndex = this.m_mesh.ExtrudeTriangleFromEdge(ref C, edgeAB, userData, out num7, out num8); this.m_mesh.MergeEdges(num8, edgeCA); this.m_mesh.MergeEdges(num7, edgeBC); } } userData.Init(this, triangleIndex); return(userData); }
private int GetTriangleOneNewEdge(ref int newEdge, ref int succ, ref int pred, MyNavigationTriangle newTri) { MyWingedEdgeMesh.Edge edge = this.m_mesh.GetEdge(pred); MyWingedEdgeMesh.Edge other = this.m_mesh.GetEdge(succ); int vertex = edge.TryGetSharedVertex(ref other); if (vertex != -1) { int num3 = edge.OtherVertex(vertex); return(this.m_mesh.MakeEdgeFace(num3, other.OtherVertex(vertex), pred, succ, newTri, out newEdge)); } int num2 = succ; Vector3 vertexPosition = this.m_mesh.GetVertexPosition(other.GetFacePredVertex(-1)); this.m_mesh.MergeEdges(num2, succ); return(this.m_mesh.ExtrudeTriangleFromEdge(ref vertexPosition, pred, newTri, out newEdge, out succ)); }