//============================================================================================ /** * @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); }
//============================================================================================ /** * @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; }