public static Vector3 ClosestPtPointTriangleNew(Vector3 p, Vector3 a, Vector3 b, Vector3 c)
{
float num10;
var vector = b - a;
var vector2 = c - a;
var vector3 = p - a;
var num = Vector3.Dot(vector, vector3);
var num2 = Vector3.Dot(vector2, vector3);
if ((num <= 0f) && (num2 <= 0f))
{
return a;
}
var vector4 = p - b;
var num3 = Vector3.Dot(vector, vector4);
var num4 = Vector3.Dot(vector2, vector4);
if ((num3 >= 0f) && (num4 <= num3))
{
return b;
}
var num5 = (num * num4) - (num3 * num2);
if (((num5 <= 0f) && (num >= 0f)) && (num3 <= 0f))
{
var num6 = num / (num - num3);
return (a + ((num6 * vector)));
}
var vector5 = p - c;
var num7 = Vector3.Dot(vector, vector5);
var num8 = Vector3.Dot(vector2, vector5);
if ((num8 >= 0f) && (num7 <= num8))
{
return c;
}
var num9 = (num7 * num2) - (num * num8);
if (((num9 <= 0f) && (num2 >= 0f)) && (num8 <= 0f))
{
num10 = num2 / (num2 - num8);
return (a + ((num10 * vector2)));
}
var num11 = (num3 * num8) - (num7 * num4);
if (((num11 <= 0f) && ((num4 - num3) >= 0f)) && ((num7 - num8) >= 0f))
{
num10 = (num4 - num3) / ((num4 - num3) + (num7 - num8));
return (b + ((num10 * (c - b))));
}
var num12 = 1f / ((num11 + num9) + num5);
var num13 = num9 * num12;
var num14 = num5 * num12;
return ((a + (vector * num13)) + (vector2 * num14));
}