Пример #1
0
        public static void AddRootTrack(this XTimeline timeline, XTrack track)
        {
            var tracks = timeline.trackTrees.ToList();

            tracks.Add(track);
            timeline.trackTrees = tracks.ToArray();
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        public static bool IsAllSubTrackMuted(this XTrack track)
        {
            bool ret = true;

            track.ForeachHierachyTrack((t) => { ret = ret & t.mute; });
            return(ret);
        }
Пример #5
0
 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();
 }
Пример #6
0
 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);
         }
     }
 }
Пример #7
0
        public static void AddRootTrack(this XSeqence seqence, XTrack track)
        {
            var tracks = seqence.trackTrees.ToList();

            tracks.Add(track);
            seqence.trackTrees = tracks.ToArray();
        }
Пример #8
0
        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);
        }
Пример #9
0
        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;
        }
Пример #10
0
 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();
     }
 }
Пример #11
0
 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);
 }
Пример #12
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();
            }
        }
Пример #13
0
        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();
            }
        }
Пример #14
0
 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();
     }
 }
Пример #15
0
        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);
        }
Пример #16
0
        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);
        }
Пример #17
0
        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();
            }
        }
Пример #18
0
        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();
        }
Пример #19
0
        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;
            }
        }
Пример #20
0
 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;
     }
 }
Пример #21
0
        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);
        }
Пример #22
0
        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);
        }
Пример #23
0
        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);
                }
            }
        }
Пример #24
0
        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");
            }
        }
Пример #25
0
 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);
 }
Пример #26
0
        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);
        }
Пример #27
0
        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);
        }
Пример #28
0
 private void CopyTrack()
 {
     clipboardTrack = this.track;
 }
Пример #29
0
 public static EditorTrack GetTrack(XTrack track)
 {
     return((EditorTrack)TypeUtilities.InitEObject(track));
 }
Пример #30
0
 public void AddTrack(XTrack track, object arg = null)
 {
     AddTrack(track, hierachy.Count, arg);
 }