示例#1
0
    public static Vector3 ClosestPointToPolyLine(params Vector3[] vertices)
    {
        float num1   = DistanceToLine(vertices[0], vertices[1]);
        int   index1 = 0;

        for (int index2 = 2; index2 < vertices.Length; ++index2)
        {
            float num2 = DistanceToLine(vertices[index2 - 1], vertices[index2]);
            if ((double)num2 < (double)num1)
            {
                num1   = num2;
                index1 = index2 - 1;
            }
        }
        Vector3 vector3_1 = vertices[index1];
        Vector3 vector3_2 = vertices[index1 + 1];
        Vector2 vector2_1 = Event.current.mousePosition - MyHandleUtility.WorldToGUIPoint(vector3_1);
        Vector2 vector2_2 = MyHandleUtility.WorldToGUIPoint(vector3_2) - MyHandleUtility.WorldToGUIPoint(vector3_1);
        float   magnitude = vector2_2.magnitude;
        float   num3      = Vector3.Dot((Vector3)vector2_2, (Vector3)vector2_1);

        if ((double)magnitude > 9.99999997475243E-07)
        {
            num3 /= magnitude * magnitude;
        }
        float t = Mathf.Clamp01(num3);

        return(Vector3.Lerp(vector3_1, vector3_2, t));
    }
示例#2
0
    public static float DistanceToLine(Vector3 p1, Vector3 p2)
    {
        p1 = (Vector3)MyHandleUtility.WorldToGUIPoint(p1);
        p2 = (Vector3)MyHandleUtility.WorldToGUIPoint(p2);
        float num = MyHandleUtility.DistancePointLine((Vector3)Event.current.mousePosition, p1, p2);

        if ((double)num < 0.0)
        {
            num = 0.0f;
        }
        return(num);
    }
示例#3
0
    public static float DistanceToCircle(Vector3 position, float radius)
    {
        Vector2 vector2_1 = MyHandleUtility.WorldToGUIPoint(position);
        Camera  current   = Camera.current;
        Vector2 zero      = Vector2.zero;

        if ((bool)((Object)current))
        {
            Vector2 vector2_2 = MyHandleUtility.WorldToGUIPoint(position + current.transform.right * radius);
            radius = (vector2_1 - vector2_2).magnitude;
        }
        float magnitude = (vector2_1 - Event.current.mousePosition).magnitude;

        if ((double)magnitude < (double)radius)
        {
            return(0.0f);
        }
        return(magnitude - radius);
    }
示例#4
0
 public static void DebugD(Vector3 p1)
 {
     Debug.Log(MyHandleUtility.WorldToGUIPoint(p1));
     Debug.Log((Vector3)Event.current.mousePosition);
     Debug.Log("***");
 }