public virtual void DrawGUISetting_Tracks(float playTime) { using (new GUILayoutBeginVerticalScope(EditorStyles.helpBox)) { using (new GUILayoutBeginScrollViewScope(ref scrollPosition)) { for (int i = 0; i < tracks.Length; i++) { TimelinableTrackBase track = tracks[i]; using (new GUILayoutToggleAreaScope(track.toggleTween, string.Format("track[{0}]:{1}", i, track.name), () => { using (new GUIEnabledScope(track.IsCanAddItemInfo())) { if (GUILayout.Button("addItemInfo", GUILayout.Width(80))) { var toAddItemInfoType = this.GetFieldInfo("_tracks").FieldType .GetElementType() .GetFieldInfo("_itemInfoes").FieldType.GetElementType(); var toAddItemInfo = toAddItemInfoType.CreateInstance <TimelinableItemInfoBase>(); toAddItemInfo.time = track.curTime; track.AddItemInfo(toAddItemInfo); } } if (GUILayout.Button("+", GUILayout.Width(32))) { var cloneTrack = tracks.GetType().GetElementType() .CreateInstance <TimelinableTrackBase>(); cloneTrack.CopyFrom(track); AddTrack(cloneTrack); } if (tracks.Length != 1 || i != 0) { if (GUILayout.Button("-", GUILayout.Width(32))) { RemoveTrack(track); } } })) { track.DrawGUISetting(); } Array.Sort(track.itemInfoes); track.Retime(playTime); } } } }
public static void OnDrawTracksLeftSideCallback(TimelinableSequenceBase sequence, TimelineRect timelineRect) { if (sequence == null || sequence.tracks.IsNullOrEmpty()) { return; } for (int i = 0; i < sequence.tracks.Length; i++) { TimelinableTrackBase track = sequence.tracks[i]; var trackColor = i % 2 == 0 ? Color.gray.SetA(0.2f) : Color.gray.SetA(0.4f); var leftTrackRect = timelineRect.GetLeftTrackRect(i); using (new GUILayout.AreaScope(leftTrackRect)) { EditorGUI.DrawRect(new Rect(0, 0, leftTrackRect.width, leftTrackRect.height), trackColor); EditorGUILayout.LabelField(track.name, GUIStyleConst.LabelBoldMiddleCenterStyle); } } }
public static void OnDrawTracksRightSideCallback(TimelinableSequenceBase sequence, TimelineRect timelineRect) { if (sequence == null || sequence.tracks.IsNullOrEmpty()) { return; } for (int i = 0; i < sequence.tracks.Length; i++) { TimelinableTrackBase track = sequence.tracks[i]; var trackColor = i % 2 == 0 ? Color.gray.SetA(0.2f) : Color.gray.SetA(0.4f); var rightTrackRect = timelineRect.GetRightTrackRect(i); using (new GUILayout.AreaScope(rightTrackRect)) { EditorGUI.DrawRect(new Rect(0, 0, rightTrackRect.width, rightTrackRect.height), trackColor); //Draw ItemInfo for (int j = 0; j < track.itemInfoes.Length; j++) { var itemInfo = track.itemInfoes[j]; var itemInfoRect = timelineRect.GetRightTrackRect(itemInfo.time, itemInfo.duration, i); itemInfo.rect = itemInfoRect; itemInfoRect.y = 0; var style = new GUIStyle(GUIStyleConst.LabelBoldMiddleLeftStyle.SetName(GUI.skin.box)); if (itemInfo.isSelected || itemInfo.IsTimeInside(track.curTime)) { GUIUtil.Box(itemInfoRect, string.Format("{0}[{1}]<color=red>{2}</color>", itemInfo.name, j, itemInfo.isSelected ? "*" : ""), style, Color.blue.SetA(0.5f)); } else { GUIUtil.Box(itemInfoRect, string.Format("{0}[{1}]", itemInfo.name, j), style, Color.gray.SetA(0.5f)); } } } } }
public virtual void DrawGUISetting(TimelinableTrackBase track) { string title = string.Format("{0}[{1}]<color=red>{2}</color>", name, track.itemInfoes.IndexOf(this), isSelected ? "*选中" : ""); using (new GUILayoutToggleAreaScope(toggleTween, title, () => { using (new GUIEnabledScope(track.itemInfoLibrary != null && track.IsItemInfoCanAddToLibrary())) { if (GUILayout.Button("addToLibrary", GUILayout.Width(100))) { var toAddItemInfo = GetType().CreateInstance <TimelinableItemInfoBase>(); toAddItemInfo.CopyFrom(this); track.itemInfoLibrary.AddItemInfo(toAddItemInfo); } } if (GUILayout.Button("add", GUILayout.Width(64))) { var toAddItemInfo = GetType().CreateInstance <TimelinableItemInfoBase>(); toAddItemInfo.CopyFrom(this); toAddItemInfo.time = track.curTime; track.AddItemInfo(toAddItemInfo); } if (GUILayout.Button("delete", GUILayout.Width(64))) { isSelected = false; track.RemoveItemInfo(this); } })) { name = EditorGUILayout.TextField("itemInfo_name", name); time = EditorGUILayout.FloatField("time", time).Minimum(0); duration = EditorGUILayout.FloatField("duration", duration).Minimum(0); DrawGUISetting_Detail(); } }