Beispiel #1
0
        //============================================================================================

        /**
         *  @brief Draws and manages all the tags within the track along a GUI track in the editor
         *
         *  @param [Rect] _trackRect - the rect of the track to draw them on
         *  @param [float] _scrollValueX - the scroll value of the scroll viewEditorUtil.EditorFunctions.GetHighlightTex()
         *  @param [float] _zoom - tyhe zoom value of the
         *
         *********************************************************************************************/
        public bool DrawTags(Rect _trackRect, float _zoom, MxMTaggingWindow _taggingWindow)
        {
            bool ret = false;

            Texture markerIcon = EditorGUIUtility.IconContent("blendKey").image;
            Texture selectIcon = EditorGUIUtility.IconContent("curvekeyframe").image;

            Event evt = Event.current;

            for (int i = 0; i < m_tags.Count; ++i)
            {
                Vector2 tag = m_tags[i];

                float startX = (tag.x * 75f) * _zoom;
                float endX   = (tag.y * 75f) * _zoom;

                Color baseColor = GUI.color;

                if (EditorGUIUtility.isProSkin)
                {
                    GUI.color = Color.black;
                }

                Rect barRect = new Rect(startX, _trackRect.y + 7f, endX - startX, 5f);
                GUI.Box(barRect, "");
                GUI.color = baseColor;

                if (m_selectId == i && m_selectType == TagSelectType.All)
                {
                    GUI.DrawTexture(barRect, EditorUtil.EditorFunctions.GetHighlightTex());
                }

                barRect       = _trackRect;
                barRect.x     = startX + markerIcon.width / 2f;
                barRect.width = endX - startX - markerIcon.width;

                startX -= markerIcon.width / 2f;
                endX   -= markerIcon.width / 2f;

                Rect leftRect = new Rect(startX, _trackRect.y + 3f,
                                         markerIcon.width, markerIcon.height);

                Rect rightRect = new Rect(endX, _trackRect.y + 3f,
                                          markerIcon.width, markerIcon.height);

                if (startX > -markerIcon.width &&
                    startX < _trackRect.width + markerIcon.width)
                {
                    GUI.DrawTexture(leftRect, markerIcon);

                    if (m_selectId == i && (m_selectType == TagSelectType.Left ||
                                            m_selectType == TagSelectType.All))
                    {
                        GUI.DrawTexture(leftRect, selectIcon);
                    }
                }
                if (endX > -markerIcon.width &&
                    endX < _trackRect.width + markerIcon.width)
                {
                    GUI.DrawTexture(rightRect, markerIcon);
                    if (m_selectId == i && (m_selectType == TagSelectType.Right ||
                                            m_selectType == TagSelectType.All))
                    {
                        GUI.DrawTexture(rightRect, selectIcon);
                    }
                }

                //Selection and moving
                if (evt.isMouse && evt.button == 0)
                {
                    switch (evt.type)
                    {
                    case EventType.MouseDown:
                    {
                        if (barRect.Contains(evt.mousePosition))
                        {
                            m_selectId         = i;
                            m_selectType       = TagSelectType.All;
                            ret                = true;
                            m_draggingSelected = true;
                            _taggingWindow.SetTime(m_tags[m_selectId].x);
                        }
                        else if (leftRect.Contains(evt.mousePosition))
                        {
                            m_selectId         = i;
                            m_selectType       = TagSelectType.Left;
                            ret                = true;
                            m_draggingSelected = true;
                            _taggingWindow.SetTime(m_tags[m_selectId].x);
                        }
                        else if (rightRect.Contains(evt.mousePosition))
                        {
                            m_selectId         = i;
                            m_selectType       = TagSelectType.Right;
                            ret                = true;
                            m_draggingSelected = true;

                            _taggingWindow.SetTime(m_tags[m_selectId].y);
                        }
                    }
                    break;

                    case EventType.MouseUp:
                    {
                        m_draggingSelected = false;
                    }
                    break;

                    case EventType.MouseDrag:
                    {
                        if (m_draggingSelected && m_selectId == i)
                        {
                            float desiredValueDelta = ((evt.delta.x / _zoom)) / 75f;

                            Vector2 selected = m_tags[m_selectId];

                            switch (m_selectType)
                            {
                            case TagSelectType.All:
                            {
                                selected.x += desiredValueDelta;
                                selected.y += desiredValueDelta;

                                if (selected.x < 0f)
                                {
                                    selected.y -= selected.x;
                                    selected.x -= selected.x;
                                }

                                if (selected.y > m_clipLength)
                                {
                                    selected.x -= (selected.y - m_clipLength);
                                    selected.y -= (selected.y - m_clipLength);
                                }

                                _taggingWindow.Modified(selected.x);
                            }
                            break;

                            case TagSelectType.Left:
                            {
                                selected.x += desiredValueDelta;
                                selected.x  = Mathf.Clamp(selected.x, 0f, selected.y - 0.1f);
                                _taggingWindow.Modified(selected.x);
                            }
                            break;

                            case TagSelectType.Right:
                            {
                                selected.y += desiredValueDelta;
                                selected.y  = Mathf.Clamp(selected.y, selected.x + 0.1f, m_clipLength);
                                _taggingWindow.Modified(selected.y);
                            }
                            break;
                            }

                            m_tags[m_selectId] = selected;
                        }
                    }
                    break;
                    }
                }
            }
            return(ret);
        }
Beispiel #2
0
        //============================================================================================

        /**
         *  @brief Deselects all tags on the track
         *
         *********************************************************************************************/
        public void Deselect()
        {
            m_selectId   = -1;
            m_selectType = TagSelectType.None;
        }
 //============================================================================================
 /**
 *  @brief Removes all tags from the track
 *         
 *********************************************************************************************/
 public virtual void RemoveAllTags()
 {
     m_tagPositions.Clear();
     m_selectId = -1;
     m_selectType = TagSelectType.None;
 }