示例#1
0
    private static bool MakePointInTriangle(ref Int3 result, NavMeshNode node, int minX, int maxX, int minZ, int maxZ, Int3 offset)
    {
        Int3 num;
        Int3 num2;
        Int3 num3;

        node.GetPoints(out num, out num2, out num3);
        long num4 = num2.x - num.x;
        long num5 = num3.x - num2.x;
        long num6 = num.x - num3.x;
        long num7 = num2.z - num.z;
        long num8 = num3.z - num2.z;
        long num9 = num.z - num3.z;

        for (int i = minX; i <= maxX; i++)
        {
            for (int j = minZ; j <= maxZ; j++)
            {
                int num12 = i + offset.x;
                int num13 = j + offset.z;
                if (((((num4 * (num13 - num.z)) - ((num12 - num.x) * num7)) <= 0L) && (((num5 * (num13 - num2.z)) - ((num12 - num2.x) * num8)) <= 0L)) && (((num6 * (num13 - num3.z)) - ((num12 - num3.x) * num9)) <= 0L))
                {
                    result.x = num12;
                    result.z = num13;
                    return(true);
                }
            }
        }
        return(false);
    }
示例#2
0
    private static float CalculateY(Vector3 pf, NavMeshNode node)
    {
        Vector3 vector;
        Vector3 vector2;
        Vector3 vector3;

        node.GetPoints(out vector, out vector2, out vector3);
        float num  = ((vector2.z - vector3.z) * (vector.x - vector3.x)) + ((vector3.x - vector2.x) * (vector.z - vector3.z));
        float num2 = 1f / num;
        float num3 = ((vector2.z - vector3.z) * (pf.x - vector3.x)) + ((vector3.x - vector2.x) * (pf.z - vector3.z));

        num3 *= num2;
        float num4 = ((vector3.z - vector.z) * (pf.x - vector3.x)) + ((vector.x - vector3.x) * (pf.z - vector3.z));

        num4 *= num2;
        float num5 = (1f - num3) - num4;

        return(((num3 * vector.y) + (num4 * vector2.y)) + (num5 * vector3.y));
    }