UnityEditor.PolygonEditorUtility.OnSceneGUI C# (CSharp) Method

OnSceneGUI() public method

public OnSceneGUI ( ) : void
return void
        public void OnSceneGUI()
        {
            if ((this.m_ActiveCollider != null) && !Tools.viewToolActive)
            {
                float num;
                Vector2 offset = this.m_ActiveCollider.offset;
                Event current = Event.current;
                this.m_DeleteMode = current.command || current.control;
                Transform transform = this.m_ActiveCollider.transform;
                GUIUtility.keyboardControl = 0;
                HandleUtility.s_CustomPickDistance = 50f;
                Plane plane = new Plane(-transform.forward, Vector3.zero);
                Ray ray = HandleUtility.GUIPointToWorldRay(current.mousePosition);
                plane.Raycast(ray, out num);
                Vector3 point = ray.GetPoint(num);
                Vector2 vector3 = transform.InverseTransformPoint(point);
                if ((current.type == EventType.MouseMove) || this.m_FirstOnSceneGUIAfterReset)
                {
                    int num2;
                    int num3;
                    int num4;
                    float num5;
                    if (PolygonEditor.GetNearestPoint(vector3 - offset, out num2, out num3, out num5))
                    {
                        this.m_SelectedPath = num2;
                        this.m_SelectedVertex = num3;
                        this.m_SelectedDistance = num5;
                    }
                    else
                    {
                        this.m_SelectedPath = -1;
                    }
                    if (PolygonEditor.GetNearestEdge(vector3 - offset, out num2, out num3, out num4, out num5, this.m_LoopingCollider))
                    {
                        this.m_SelectedEdgePath = num2;
                        this.m_SelectedEdgeVertex0 = num3;
                        this.m_SelectedEdgeVertex1 = num4;
                        this.m_SelectedEdgeDistance = num5;
                    }
                    else
                    {
                        this.m_SelectedEdgePath = -1;
                    }
                    if (current.type == EventType.MouseMove)
                    {
                        current.Use();
                    }
                }
                else if (current.type == EventType.MouseUp)
                {
                    this.m_LeftIntersect = false;
                    this.m_RightIntersect = false;
                }
                bool flag = false;
                bool flag2 = false;
                if ((this.m_SelectedPath != -1) && (this.m_SelectedEdgePath != -1))
                {
                    Vector2 vector4;
                    PolygonEditor.GetPoint(this.m_SelectedPath, this.m_SelectedVertex, out vector4);
                    vector4 += offset;
                    float num6 = HandleUtility.GetHandleSize(transform.TransformPoint((Vector3) vector4)) * 0.2f;
                    flag2 = this.m_SelectedEdgeDistance < (this.m_SelectedDistance - num6);
                    flag = !flag2;
                }
                else if (this.m_SelectedPath != -1)
                {
                    flag = true;
                }
                else if (this.m_SelectedEdgePath != -1)
                {
                    flag2 = true;
                }
                if (this.m_DeleteMode && flag2)
                {
                    flag2 = false;
                    flag = true;
                }
                bool flag3 = false;
                if (flag2 && !this.m_DeleteMode)
                {
                    Vector2 vector6;
                    Vector2 vector7;
                    PolygonEditor.GetPoint(this.m_SelectedEdgePath, this.m_SelectedEdgeVertex0, out vector6);
                    PolygonEditor.GetPoint(this.m_SelectedEdgePath, this.m_SelectedEdgeVertex1, out vector7);
                    vector6 += offset;
                    vector7 += offset;
                    Vector3 start = transform.TransformPoint((Vector3) vector6);
                    Vector3 end = transform.TransformPoint((Vector3) vector7);
                    start.z = end.z = 0f;
                    Handles.color = Color.green;
                    Vector3[] points = new Vector3[] { start, end };
                    Handles.DrawAAPolyLine((float) 4f, points);
                    Handles.color = Color.white;
                    Vector2 vector10 = this.GetNearestPointOnEdge(transform.TransformPoint((Vector3) vector3), start, end);
                    EditorGUI.BeginChangeCheck();
                    float handleSize = HandleUtility.GetHandleSize((Vector3) vector10) * 0.04f;
                    Handles.color = Color.green;
                    vector10 = Handles.Slider2D((Vector3) vector10, new Vector3(0f, 0f, 1f), new Vector3(1f, 0f, 0f), new Vector3(0f, 1f, 0f), handleSize, new Handles.DrawCapFunction(Handles.DotCap), Vector3.zero);
                    Handles.color = Color.white;
                    if (EditorGUI.EndChangeCheck())
                    {
                        PolygonEditor.InsertPoint(this.m_SelectedEdgePath, this.m_SelectedEdgeVertex1, ((Vector2) ((vector6 + vector7) / 2f)) - offset);
                        this.m_SelectedPath = this.m_SelectedEdgePath;
                        this.m_SelectedVertex = this.m_SelectedEdgeVertex1;
                        this.m_SelectedDistance = 0f;
                        flag = true;
                        flag3 = true;
                    }
                }
                if (flag)
                {
                    Vector2 vector11;
                    PolygonEditor.GetPoint(this.m_SelectedPath, this.m_SelectedVertex, out vector11);
                    vector11 += offset;
                    Vector3 world = transform.TransformPoint((Vector3) vector11);
                    world.z = 0f;
                    Vector2 a = HandleUtility.WorldToGUIPoint(world);
                    float num8 = HandleUtility.GetHandleSize(world) * 0.04f;
                    if (((this.m_DeleteMode && (current.type == EventType.MouseDown)) && (Vector2.Distance(a, Event.current.mousePosition) < 50f)) || this.DeleteCommandEvent(current))
                    {
                        if ((current.type != EventType.ValidateCommand) && (PolygonEditor.GetPointCount(this.m_SelectedPath) > this.m_MinPathPoints))
                        {
                            PolygonEditor.RemovePoint(this.m_SelectedPath, this.m_SelectedVertex);
                            this.Reset();
                            flag3 = true;
                        }
                        current.Use();
                    }
                    EditorGUI.BeginChangeCheck();
                    Handles.color = !this.m_DeleteMode ? Color.green : Color.red;
                    Vector3 position = Handles.Slider2D(world, new Vector3(0f, 0f, 1f), new Vector3(1f, 0f, 0f), new Vector3(0f, 1f, 0f), num8, new Handles.DrawCapFunction(Handles.DotCap), Vector3.zero);
                    Handles.color = Color.white;
                    if (EditorGUI.EndChangeCheck() && !this.m_DeleteMode)
                    {
                        vector11 = transform.InverseTransformPoint(position) - offset;
                        PolygonEditor.TestPointMove(this.m_SelectedPath, this.m_SelectedVertex, vector11, out this.m_LeftIntersect, out this.m_RightIntersect, this.m_LoopingCollider);
                        PolygonEditor.SetPoint(this.m_SelectedPath, this.m_SelectedVertex, vector11);
                        flag3 = true;
                    }
                    if (!flag3)
                    {
                        this.DrawEdgesForSelectedPoint(position, transform, this.m_LeftIntersect, this.m_RightIntersect, this.m_LoopingCollider);
                    }
                }
                if (flag3)
                {
                    Undo.RecordObject(this.m_ActiveCollider, "Edit Collider");
                    PolygonEditor.ApplyEditing(this.m_ActiveCollider);
                }
                if (this.DeleteCommandEvent(current))
                {
                    Event.current.Use();
                }
                this.m_FirstOnSceneGUIAfterReset = false;
            }
        }

Usage Example

示例#1
0
        public void OnSceneGUI()
        {
            if (!editingCollider)
            {
                return;
            }

            m_PolyUtility.OnSceneGUI();
        }
All Usage Examples Of UnityEditor.PolygonEditorUtility::OnSceneGUI