public Texture getTrackIconTexture(AMTrack _track) { if(_track is AMAnimationTrack) return texIconAnimation; else if(_track is AMEventTrack) return texIconEvent; else if(_track is AMPropertyTrack) return texIconProperty; else if(_track is AMTranslationTrack) return texIconTranslation; else if(_track is AMAudioTrack) return texIconAudio; else if(_track is AMRotationTrack) return texIconRotation; else if(_track is AMOrientationTrack) return texIconOrientation; else if(_track is AMGOSetActiveTrack) return texIconProperty; Debug.LogWarning("Animator: Icon texture not found for track " + _track.getTrackType()); return null; }
bool showTrack(AMTrack _track, int t, int group_level, ref float track_y, ref bool isAnyTrackFoldedOut, ref float height_group_elements, Event e, Vector2 scrollViewBounds) { // track is beyond bounds if(track_y + (_track.foldout ? height_track : height_track_foldin) < scrollViewBounds.x || track_y > scrollViewBounds.y) { if(_track.foldout) { track_y += height_track; isAnyTrackFoldedOut = true; } else { track_y += height_track_foldin; } return false; } // returns true if mouse over track bool mouseOverTrack = false; float track_x = width_subtrack_space * group_level; bool inGroup = group_level > 0; bool isTrackSelected = aData.getCurrentTake().selectedTrack == t; bool isTrackContextSelected = aData.getCurrentTake().contextSelectionTracks.Contains(t); Rect rectTrack; string strStyle; if(isTrackSelected) { if(aData.getCurrentTake().contextSelectionTracks.Count <= 1) strStyle = "GroupElementActive"; else strStyle = "GroupElementSelectedActive"; } else if(isTrackContextSelected) strStyle = "GroupElementSelected"; else strStyle = "GroupElementNormal"; rectTrack = new Rect(track_x, track_y, width_track - track_x, height_track_foldin); // renaming track if(isRenamingTrack != t) { Rect rectTrackFoldin = new Rect(rectTrack.x, rectTrack.y, rectTrack.width, rectTrack.height); // used to toggle track foldout if(_track.foldout) { rectTrackFoldin.width -= 55f; } if(GUI.Button(new Rect(rectTrack.x, rectTrack.y, 15f, rectTrack.height), "", "label")) { _track.foldout = !_track.foldout; timelineSelectTrack(t); } if(GUI.Button(new Rect(rectTrack.x + 15f, rectTrack.y, rectTrack.width - 15f, rectTrack.height), "", "label")) { timelineSelectTrack(t); if(didDoubleClick("track" + t + "foldout")) { cancelTextEditting(); //_track.foldout = !_track.foldout; isRenamingTrack = t; if(!_track.foldout) _track.foldout = true; } } } // set track icon texture Texture texIcon = getTrackIconTexture(_track); // track start, foldin if(!_track.foldout) { if(rectTrack.width > 4f) { if(rectTrack.Contains(e.mousePosition) && mouseOverElement == (int)ElementType.None) { mouseOverTrack = true; mouseOverElement = (int)ElementType.Track; mouseOverGroupElement = new Vector2((inGroup ? aData.getCurrentTake().getTrackGroup(t) : 0), t); } GUI.BeginGroup(rectTrack, GUI.skin.GetStyle(strStyle)); GUI.DrawTexture(new Rect(17f, (height_track_foldin - 12f) / 2f, 12f, 12f), texIcon); GUI.Label(new Rect(17f + 12f + 2f, 0f, rectTrack.width - (12f + 15f + 2f), height_track_foldin), _track.name); GUI.EndGroup(); // draw foldout if(rectTrack.width >= 10f) GUI.DrawTexture(new Rect(track_x, track_y + (height_group - 16f) / 2f, 16f, 16f), (_track.foldout ? GUI.skin.GetStyle("GroupElementFoldout").normal.background : GUI.skin.GetStyle("GroupElementFoldout").active.background)); } else { // tooltip hidden track, foldin GUI.enabled = false; GUI.Button(new Rect(width_track - 80f, track_y, 80f, height_group), trimString(_track.name, 8)); GUI.enabled = !isPlaying; } track_y += height_track_foldin; } else { // track start, foldout // track rect rectTrack = new Rect(track_x, track_y, width_track - track_x, height_track); if(rectTrack.width > 4f) { // select track texture if(rectTrack.Contains(e.mousePosition) && mouseOverElement == (int)ElementType.None) { mouseOverTrack = true; mouseOverElement = (int)ElementType.Track; mouseOverGroupElement = new Vector2((inGroup ? aData.getCurrentTake().getTrackGroup(t) : 0), t); } // draw track texture GUI.BeginGroup(rectTrack, GUI.skin.GetStyle(strStyle)); // track name if(isRenamingTrack == t) { GUI.SetNextControlName("RenameTrack" + t); _track.name = GUI.TextField(new Rect(15f, 2f, rectTrack.width - 15f, 20f), _track.name, 20); GUI.FocusControl("RenameTrack" + t); } else { GUI.Label(new Rect(15f, 0f, rectTrack.width - 15f, 20f), _track.name); } // track type Rect rectTrackIcon = new Rect(4f, 20f, 12f, 12f); GUI.Box(rectTrackIcon, texIcon); string trackType = _track.getTrackType(); Rect rectTrackType = new Rect(rectTrackIcon.x + rectTrackIcon.width + 2f, height_track - 39f, rectTrack.width - 20f, 15f); if((_track is AMPropertyTrack) && (trackType == "Not Set")) rectTrackType.width -= 48f; GUI.Label(rectTrackType, trackType); // if property track, show set property button if(_track is AMPropertyTrack) { if(!(_track as AMPropertyTrack).obj) GUI.enabled = false; GUIStyle styleButtonSet = new GUIStyle(GUI.skin.button); styleButtonSet.clipping = TextClipping.Overflow; if(GUI.Button(new Rect(width_track - 48f - width_subtrack_space * group_level - 4f, height_track - 38f, 48f, 15f), "Set", styleButtonSet)) { // show property select window AMPropertySelect.setValues((_track as AMPropertyTrack)); EditorWindow.GetWindow(typeof(AMPropertySelect)); } GUI.enabled = !isPlaying; } // track object float width_object_field = width_track - track_x; showObjectFieldFor(_track, width_object_field, new Rect(padding_track, 39f, width_track - width_subtrack_space * group_level - padding_track * 2, 16f)); GUI.EndGroup(); } else { // tooltip hidden track, foldout GUI.enabled = false; GUI.Button(new Rect(width_track - 80f, track_y, 80f, height_group), trimString(_track.name, 8)); GUI.enabled = !isPlaying; } // track button if(GUI.Button(rectTrack, "", "label")) { timelineSelectTrack(t); } // draw foldout if(rectTrack.width >= 15f) GUI.DrawTexture(new Rect(track_x, track_y + (height_group - 16f) / 2f, 16f, 16f), (_track.foldout ? GUI.skin.GetStyle("GroupElementFoldout").normal.background : GUI.skin.GetStyle("GroupElementFoldout").active.background)); track_y += height_track; isAnyTrackFoldedOut = true; // track end } // draw element position texture after track if(dragType == (int)DragType.GroupElement) { if(mouseOverElement == (int)ElementType.Track && mouseOverGroupElement.y == t) { GUI.DrawTexture(new Rect(rectTrack.x, rectTrack.y + rectTrack.height - height_element_position, rectTrack.width, height_element_position), tex_element_position); } } height_group_elements += rectTrack.height; return mouseOverTrack; }