Exemplo n.º 1
0
    //---------------------------------------------------------------------------------------------
    //
    // Process Input
    //
    // check witch point of selected widget will be dragged etc.
    //
    //---------------------------------------------------------------------------------------------
    void ProcessInput()
    {
        Event e = Event.current;

        if (e.type == EventType.ScrollWheel)
        {
            // Zoom

            if (e.delta.y > 0.0f)
            {
                m_ZoomFactor -= 0.1f;
            }
            else if (e.delta.y < 0.0f)
            {
                m_ZoomFactor += 0.1f;
            }

            m_ZoomFactor = Mathf.Clamp(m_ZoomFactor, GUIEditorUtils.MIN_SCALE_FACTOR, GUIEditorUtils.MAX_SCALE_FACTOR);

            // Pan with "horizontal" wheel

            float pan = e.delta.x * GUIEditorUtils.WHEEL_PAN_MULTIPLICATOR / m_ZoomFactor;

            SetPlatformShift(new Vector2(m_PlatformShift.x + pan, m_PlatformShift.y));
        }
        else if (e.type == EventType.MouseDown && SecondaryButtons.Contains(e.button))
        {
            // pan
            m_Pan       = true;
            m_DragOrig  = m_PlatformShift;
            m_DragMouse = Event.current.mousePosition;
        }
        else if (e.type == EventType.MouseUp && SecondaryButtons.Contains(e.button))
        {
            m_Pan = false;
        }
        // Pan ?
        else if (m_Pan && (e.type == EventType.MouseDrag) && SecondaryButtons.Contains(e.button))
        {
            if (m_TexturePosPrepared)
            {
                Vector2 mouseDelta = new Vector2();

                mouseDelta  = Event.current.mousePosition - m_DragMouse;
                mouseDelta /= m_ZoomFactor;

                mouseDelta.x /= m_TextureSize.x;
                mouseDelta.y /= m_TextureSize.y;

                SetPlatformShift(m_DragOrig + mouseDelta);
            }
        }
        else if (e.type == EventType.MouseDown && e.button == PrimaryButton)
        {
            m_MouseDown = true;

            // Select vertex of edited rectangle?

            if (m_TexturePosPrepared)
            {
                Vector2 mousePos = Event.current.mousePosition;

                if (mousePos.x >= m_TexturePos.x && mousePos.y >= m_TexturePos.y)
                {
                    Vector2 pos = new Vector2(m_TexturePos.x + m_EditedArea.Area.x * m_ZoomFactor, m_TexturePos.y + m_EditedArea.Area.y * m_ZoomFactor);

                    pos.x += m_TextureSize.x * m_ZoomFactor * m_PlatformShift.x;
                    pos.y += m_TextureSize.y * m_ZoomFactor * m_PlatformShift.y;

                    if (GUIEditorUtils.IsPointTouched(mousePos, pos, 0, 0, m_PointSize * 0.5f))
                    {
                        m_SelectedPointIdx = 0;

                        Undo.RecordObject(m_SelectedWidget, "Edit UV");
                    }
                    else if (GUIEditorUtils.IsPointTouched(mousePos, pos, m_EditedArea.Area.width * m_ZoomFactor, 0, m_PointSize * 0.5f))
                    {
                        m_SelectedPointIdx = 1;

                        Undo.RecordObject(m_SelectedWidget, "Edit UV");
                    }
                    else if (GUIEditorUtils.IsPointTouched(mousePos, pos, m_EditedArea.Area.width * m_ZoomFactor, m_EditedArea.Area.height * m_ZoomFactor, m_PointSize * 0.5f))
                    {
                        m_SelectedPointIdx = 2;

                        Undo.RecordObject(m_SelectedWidget, "Edit UV");
                    }
                    else if (GUIEditorUtils.IsPointTouched(mousePos, pos, 0, m_EditedArea.Area.height * m_ZoomFactor, m_PointSize * 0.5f))
                    {
                        m_SelectedPointIdx = 3;

                        Undo.RecordObject(m_SelectedWidget, "Edit UV");
                    }
                    else
                    {
                        m_SelectedPointIdx = -1;

                        //Debug.Log(mousePos.x);

                        // Move with whole widget ?

                        float minX = Mathf.Min(pos.x, pos.x + m_EditedArea.Area.width * m_ZoomFactor);
                        float minY = Mathf.Min(pos.y, pos.y + m_EditedArea.Area.height * m_ZoomFactor);

                        if ((mousePos.x >= minX) &&
                            (mousePos.y >= minY) &&
                            (mousePos.x < (minX + Mathf.Abs(m_EditedArea.Area.width) * m_ZoomFactor)) &&
                            (mousePos.y < (minY + Mathf.Abs(m_EditedArea.Area.height) * m_ZoomFactor)))
                        {
                            //Debug.Log("mouse = "+ mousePos.x + ", minX = " + minX);

                            m_WidgetDrag = true;

                            m_DragOrig.x = m_EditedArea.Area.x;
                            m_DragOrig.y = m_EditedArea.Area.y;

                            m_DragMouse = mousePos;
                        }
                    }
                }
            }
        }
        else if (e.type == EventType.MouseUp && e.button == PrimaryButton)
        {
            m_MouseDown          = false;
            m_SelectedPointIdx   = -1;
            m_TexturePosPrepared = false;

            m_Pan        = false;
            m_WidgetDrag = false;
        }
        else
        {
            // movement with widget ?
            if (m_WidgetDrag)
            {
                Vector2 mouseDelta = new Vector2();

                mouseDelta  = Event.current.mousePosition - m_DragMouse;
                mouseDelta /= m_ZoomFactor;

                m_EditedArea.Area.x = m_DragOrig.x + mouseDelta.x;
                m_EditedArea.Area.y = m_DragOrig.y + mouseDelta.y;

                EditorUtility.SetDirty(m_SelectedWidget);
            }
        }
    }