public static void AddRootTrack(this XTimeline timeline, XTrack track) { var tracks = timeline.trackTrees.ToList(); tracks.Add(track); timeline.trackTrees = tracks.ToArray(); }
public static void GetTrackByDataType(Type type, XSeqence seqence, XTrack parent, Action <XTrack, TrackData, object> cb) { TrackData data = CreateTrackData(type); if (data != null) { if (type == typeof(XAnimationTrack)) { CharacterWindow.ShowWindow(ch => { if (ch != null) { var bd = data as AnimationTrackData; bd.prefab = ch.prefab; bd.roleid = ch.id; cb(XSeqenceFactory.GetTrack(data, seqence, parent), data, ch); } else { cb(null, data, null); } }); } else { cb(XSeqenceFactory.GetTrack(data, seqence, parent), data, null); } } else { cb(null, null, null); } }
public void AddTrack(XTrack track, int idx, object arg = null, bool repaint = true) { EditorTrack etrack = EditorFactory.GetTrack(track); etrack.trackArg = arg; float y = _y + WindowConstants.RawHeight * idx + WindowConstants.rowGap * idx; float offset = track.parent ? 10 : 0; var rect = new Rect(x, y, width, WindowConstants.RawHeight); var head = new Rect(offset, y, WindowConstants.sliderWidth - offset, WindowConstants.RawHeight); etrack.SetRect(head, rect); hierachy.Add(etrack); int last = hierachy.Count - 1; for (int i = last; i > idx; i--) { hierachy[i] = hierachy[i - 1]; hierachy[i].YOffset(WindowConstants.RawHeight + WindowConstants.rowGap); } hierachy[idx] = etrack; if (repaint) { SeqenceWindow.inst.Repaint(); } }
public static bool IsAllSubTrackMuted(this XTrack track) { bool ret = true; track.ForeachHierachyTrack((t) => { ret = ret & t.mute; }); return(ret); }
public static void Remove(this XTrack track, XTimeline timeline) { if (track.parent) { var chs = track.parent.childs; int idx = -1; for (int i = 0; i < chs.Length; i++) { if (chs[i].Equals(track)) { idx = i; break; } } if (idx >= 0) { track.parent.RemoveChild(idx); } } else { var list = timeline.trackTrees.ToList(); if (list.Contains(track)) { list.Remove(track); timeline.trackTrees = list.ToArray(); } } track.OnDestroy(); }
public static bool AddClip(this XTrack track, IClip clip, ClipData data) { if (track.clips == null) { track.clips = new IClip[1]; track.clips[0] = clip; track.data.clips = new[] { data }; return(true); } else { var list = track.clips.ToList(); var datas = track.data.clips.ToList(); if (list.Contains(clip)) { return(false); } else { list.Add(clip); datas.Add(data); list.Sort((x, y) => x.start.CompareTo(y.start)); datas.Sort((x, y) => x.start.CompareTo(y.start)); track.clips = list.ToArray(); track.data.clips = datas.ToArray(); return(true); } } }
public static void AddRootTrack(this XSeqence seqence, XTrack track) { var tracks = seqence.trackTrees.ToList(); tracks.Add(track); seqence.trackTrees = tracks.ToArray(); }
public static bool AddMarker(this XTrack track, XMarker marker, MarkData data) { if (track.marks != null) { var list = track.marks.ToList(); if (!list.Contains(marker)) { list.Add(marker); list.Sort((x, y) => x.time.CompareTo(y.time)); track.marks = list.ToArray(); var datas = track.data.marks.ToList(); datas.Add(data); track.data.marks = datas.ToArray(); return(true); } } else { track.marks = new XMarker[1]; track.marks[0] = marker; track.data.marks = new[] { data }; } return(false); }
private void PasteTrack() { var tree = TimelineWindow.inst.tree; XTrack copyed = clipboardTrack.Clone(); bool match = false; if (clipboardTrack.parent != null) { // type match if (clipboardTrack.parent.AssetType == track.AssetType) { copyed.parent = track; track.AddSub(copyed); track.AddTrackChildData(copyed.data); match = true; } else { string tip = "The paste track need type: " + clipboardTrack.parent.AssetType; EditorUtility.DisplayDialog("Notice", tip, "OK"); } } else { match = true; TimelineWindow.inst.timeline.AddRootTrack(copyed); } if (match) { int idx = 0; if (track.childs != null && track.childs.Length > 0) { var t = track.childs.Last(); if (clipboardTrack.parent != null) { if (track.childs.Length >= 2) { t = track.childs[track.childs.Length - 2]; } else { t = track; } } idx = tree.IndexOfTrack(t) + 1; } else { idx = tree.IndexOfTrack(track) + 1; } tree.AddTrack(copyed, idx, null, true); } clipboardTrack = null; }
public static void RemoveChild(this XTrack track, int idx) { if (track.childs != null && track.childs.Length > idx) { var list = track.childs.ToList(); list.RemoveAt(idx); track.childs = list.ToArray(); var list2 = track.data.childs.ToList(); list2.RemoveAt(idx); track.data.childs = list2.ToArray(); } }
public int IndexOfTrack(XTrack track) { for (int i = 0; i < hierachy.Count; i++) { var it = hierachy[i]; if (it.ID == track.ID) { return(i); } } return(0); }
public static void SortClip(this XTrack track) { if (track.clips != null && track.clips.Length > 0) { var list = track.clips.ToList(); list.Sort((x, y) => x.start.CompareTo(y.start)); track.clips = list.ToArray(); var datas = track.data.clips.ToList(); datas.Sort((x, y) => x.start.CompareTo(y.start)); track.data.clips = datas.ToArray(); } }
public static void SortMark(this XTrack track) { if (track.marks != null && track.marks.Length > 0) { var list = track.marks.ToList(); list.Sort((x, y) => x.time.CompareTo(y.time)); track.marks = list.ToArray(); var datas = track.data.marks.ToList(); datas.Sort((x, y) => x.time.CompareTo(y.time)); track.data.marks = datas.ToArray(); } }
public static void AddTrackChildData(this XTrack track, TrackData data) { if (track.data.childs == null) { track.data.childs = new[] { data }; } else { var list = track.data.childs.ToList(); list.Add(data); track.data.childs = list.ToArray(); } }
public static List <ClipRange> HirTrackClipRange(this XTrack track) { var ranges = track.TrackClipRange(); if (track.childs != null) { foreach (var it in track.childs) { var r2 = it.TrackClipRange(); ClipRange.MergeClipRange(ranges, r2); } } return(ranges); }
public List <EditorTrack> GetAllChilds(XTrack track, bool grandsonContains = true) { List <EditorTrack> list = new List <EditorTrack>(); for (int i = 0; i < hierachy.Count; i++) { var it = hierachy[i]; if (it.track.IsChild(track, grandsonContains)) { list.Add(it); } } return(list); }
public void AddChildTracks(XTrack track) { var childs = track.childs; int ix = IndexOfTrack(track); if (childs != null) { for (int i = 0; i < track.childs.Length; i++) { AddTrack(track.childs[i], ++ix, false); } SeqenceWindow.inst.Repaint(); } }
public void RmChildTrack(XTrack track) { List <EditorTrack> list = new List <EditorTrack>(); for (int i = 0; i < hierachy.Count; i++) { if (hierachy[i].track.parent.Equals(track)) { list.Add(hierachy[i]); } } foreach (var editorTrack in list) { RmTrack(editorTrack, false); } SeqenceWindow.inst.Repaint(); }
private void PasteTrack() { var clipboard = EditorTrack.clipboardTrack; XTrack copyed = clipboard.Clone(); if (clipboard.parent != null) { string tip = "select a parent track with type: " + clipboard.parent.AssetType; EditorUtility.DisplayDialog("Notice", tip, "OK"); } else { SeqenceWindow.inst.seqence.AddRootTrack(copyed); int idx = tree.hierachy.Count; tree.AddTrack(copyed, idx, null, true); clipboard = null; } }
public static void AddSub(this XTrack track, XTrack sub) { if (track.childs == null) { track.childs = new XTrack[1]; track.childs[0] = sub; } else { var tmp = new XTrack[track.childs.Length + 1]; for (int i = 0; i < track.childs.Length; i++) { tmp[i] = track.childs[i]; } tmp[track.childs.Length] = sub; track.childs = tmp; } }
public static bool RmMarker(this XTrack track, XMarker marker) { if (track.marks != null) { var list = track.marks.ToList(); if (list.Contains(marker)) { var datas = track.data.marks.ToList(); datas.Remove(marker.Data); track.data.marks = datas.ToArray(); list.Remove(marker); track.marks = list.ToArray(); return(true); } } return(false); }
public static List <XTimelineObject> TrackAssets(this XTrack track) { var clips = track.clips.ToList(); var marks = track.marks.ToList(); var childs = track.childs.ToList(); var list = new List <XTimelineObject>(); for (int i = 0; i < clips.Count; i++) { XTimelineObject clip = clips[i] as XTimelineObject; if (clip != null) { list.Add(clip); } } list.AddRange(marks); list.AddRange(childs); return(list); }
private void Add(XTrack track, IList <EditorTrack> list) { EditorTrack etrack = EditorFactory.GetTrack(track); float y = _y + WindowConstants.RawHeight * track_idx + WindowConstants.rowGap * track_idx; int offset = track.parent ? 10 : 0; var rect = new Rect(x, y, width, WindowConstants.RawHeight); var head = new Rect(offset, y, WindowConstants.sliderWidth - offset, WindowConstants.RawHeight); etrack.SetRect(head, rect); track_idx++; list.Add(etrack); if (track.childs != null) { for (int i = 0; i < track.childs.Length; i++) { Add(track.childs[i], list); } } }
public override void OnInit(XTimelineObject t) { @select = false; showChild = true; isSkillHost = false; addtiveColor = Color.white; track = (XTrack)t; var flag = (TrackFlagAttribute)Attribute.GetCustomAttribute(t.GetType(), typeof(TrackFlagAttribute)); allowClip = flag.allowClip; if (_addclip == null) { _addclip = EditorGUIUtility.TrTextContent("Add Clip \t #a"); _unselect = EditorGUIUtility.TrTextContent("UnSelect All \t #u"); _select = EditorGUIUtility.TrTextContent("Select All Tracks \t %#s"); delete = EditorGUIUtility.TrTextContent("Delete Clip\t #d"); copy = EditorGUIUtility.TrTextContent("Copy Track\t #c"); paste = EditorGUIUtility.TrTextContent("Paste Track\t #p"); } }
public static bool RmClip(this XTrack track, IClip clip) { if (track.clips != null && track.clips.Length > 0) { var list = track.clips.ToList(); var datas = track.data.clips.ToList(); if (datas.Contains(clip.data)) { datas.Remove(clip.data); track.data.clips = datas.ToArray(); } if (list.Contains(clip)) { list.Remove(clip); track.clips = list.ToArray(); return(true); } } return(false); }
public static XMarker MakeMarker(Type t, float time, XTrack track) { XMarker marker = null; MarkData data = null; if (t == typeof(XJumpMarker)) { data = new JumpMarkData() { time = time }; marker = XSeqenceFactory.GetMarker(track, data); } else if (t == typeof(XSlowMarker)) { data = new SlowMarkData() { time = time, slowRate = 0.5f }; marker = XSeqenceFactory.GetMarker(track, data); } else if (t == typeof(XActiveMark)) { data = new ActiveMarkData() { time = time }; marker = XSeqenceFactory.GetMarker(track, data); } else { Debug.LogError("unknown mark: " + t); } if (marker != null) { track.AddMarker(marker, data); } return(marker); }
public static List <ClipRange> TrackClipRange(this XTrack track) { List <ClipRange> ranges = new List <ClipRange>(); if (track.clips != null) { var clips = track.clips.ToList(); clips.Sort((x, y) => x.start.CompareTo(y.start)); float last = -1; foreach (var it in clips) { ClipRange range = new ClipRange(); if (it.start > last) { range.start = it.start; range.end = it.end; ranges.Add(range); last = it.end; } } } return(ranges); }
private void CopyTrack() { clipboardTrack = this.track; }
public static EditorTrack GetTrack(XTrack track) { return((EditorTrack)TypeUtilities.InitEObject(track)); }
public void AddTrack(XTrack track, object arg = null) { AddTrack(track, hierachy.Count, arg); }