public static ESplitType GetSplitResult(SplitPlane plane, TriRef tri) { var planeDir = plane.dir; var valA = LVector2.Cross(planeDir, tri.a - plane.a); var valB = LVector2.Cross(planeDir, tri.b - plane.a); var valC = LVector2.Cross(planeDir, tri.c - plane.a); var isRight = false; if (valA != 0) { isRight = valA < 0; } if (valB != 0) { isRight = valB < 0; } if (valC != 0) { isRight = valC < 0; } var isA = valA <= 0; var isB = valB <= 0; var isC = valC <= 0; if (isA == isB && isB == isC) { return(isRight ? ESplitType.Right : ESplitType.Left); } isA = valA >= 0; isB = valB >= 0; isC = valC >= 0; if (isA == isB && isB == isC) { return(isRight ? ESplitType.Right : ESplitType.Left); } return(ESplitType.OnPlane); }