Ejemplo n.º 1
0
 private static bool CheckNearestNodeIntersection(TriangleMeshNode node, VInt3 srcLoc, VInt3 destLoc, ref int edge)
 {
     if (!node.ContainsPoint(destLoc))
     {
         int     num         = 0;
         VInt3[] staticVerts = PathfindingUtility._staticVerts;
         node.GetPoints(ref staticVerts[0], ref staticVerts[1], ref staticVerts[2]);
         float   num2    = 3.40282347E+38f;
         int     num3    = -1;
         Vector3 vector  = (Vector3)srcLoc;
         Vector3 vector2 = (Vector3)destLoc;
         for (int i = 0; i < 3; i++)
         {
             if (Polygon.Intersects(staticVerts[i], staticVerts[(i + 1) % 3], srcLoc, destLoc))
             {
                 num++;
                 bool    flag;
                 Vector3 vector3 = Polygon.IntersectionPoint((Vector3)staticVerts[i], (Vector3)staticVerts[(i + 1) % 3], vector, vector2, ref flag);
                 DebugHelper.Assert(flag);
                 float num4 = MMGame_Math.XZSqrMagnitude(vector, ref vector3);
                 if (num4 < num2)
                 {
                     num2 = num4;
                     num3 = i;
                 }
             }
         }
         if (num != 2 || num3 == -1)
         {
             return(false);
         }
         edge = num3;
     }
     return(true);
 }