Exemplo n.º 1
0
        public override void Process(float sequencerTime, float playbackRate)
        {
            float prevElapsedTime = elapsedTime;

            elapsedTime = sequencerTime;
            for (int i = 0; i < EventTracks.Count; i++)
            {
                JEventTrack  track  = EventTracks[i];
                JEventBase[] events = track.EventClips.ToArray();

                if (prevElapsedTime < elapsedTime)
                {
                    Array.Sort(events, delegate(JEventBase a, JEventBase b) { return(a.StartTime.CompareTo(b.StartTime)); });
                }
                else
                {
                    Array.Sort(events, delegate(JEventBase a, JEventBase b) { return(b.StartTime.CompareTo(a.StartTime)); });
                }

                foreach (JEventBase baseEvent in events)
                {
                    if (playbackRate >= 0.0f)
                    {
                        FireEvent(baseEvent, prevElapsedTime, elapsedTime);
                    }
                    else
                    {
                        FireEventReverse(baseEvent, prevElapsedTime, elapsedTime);
                    }

                    FireEventCommon(baseEvent, sequencerTime, prevElapsedTime, elapsedTime);
                }
            }
        }
Exemplo n.º 2
0
        private GenericMenu MenuForEventTimeLine(JTimelineBase line, JEventTrack track)
        {
            GenericMenu contextMenu = new GenericMenu();
            float       newTime     = (((UnityEngine.Event.current.mousePosition.x + XScroll) / DisplayArea.width) * line.Sequence.Duration) / XScale;

            contextMenu.AddItem(new GUIContent("AddNewEventTimeline"),
                                false, (obj) => AddNewEventTrack(((JTimelineBase)((object[])obj)[0])),
                                new object[] { line });

            string baseAdd = "Add Event/";

            var baseType = typeof(JEventBase);
            var types    = USEditorUtility.GetAllSubTypes(baseType).Where(type => type.IsSubclassOf(baseType));

            foreach (Type type in types)
            {
                string fullAdd          = baseAdd;
                var    customAttributes = type.GetCustomAttributes(true).Where(attr => attr is JEventAttribute).Cast <JEventAttribute>();
                foreach (JEventAttribute customAttribute in customAttributes)
                {
                    fullAdd += customAttribute.EventPath;
                }
                contextMenu.AddItem(new GUIContent(fullAdd),
                                    false, (obj) => AddNewTrackEvent(((JEventTrack)((object[])obj)[0]), ((float)((object[])obj)[1]), ((Type)((object[])obj)[2])),
                                    new object[] { track, newTime, type });
            }


            contextMenu.AddItem(new GUIContent("DeleteEventLine"),
                                false, (obj) => RemoveEventTrack(((JEventTrack)((object[])obj)[0])),
                                new object[] { track });

            return(contextMenu);
        }
Exemplo n.º 3
0
        public override void SkipTimelineTo(float time)
        {
            for (int i = 0; i < EventTracks.Count; i++)
            {
                JEventTrack  track           = EventTracks[i];
                JEventBase[] events          = track.EventClips.ToArray();
                float        prevElapsedTime = elapsedTime;
                elapsedTime = time;

                foreach (JEventBase baseEvent in events)
                {
                    if (!baseEvent)
                    {
                        continue;
                    }

                    bool shouldSkipEvent = !baseEvent.IsFireOneShotEvent || !baseEvent.FireOnSkip;
                    if (shouldSkipEvent)
                    {
                        continue;
                    }

                    if ((prevElapsedTime < baseEvent.StartTime || prevElapsedTime <= 0.0f) && time > baseEvent.StartTime)
                    {
                        if (Sequence.IsPlaying && baseEvent.AffectedObject)
                        {
                            baseEvent.FireEvent();
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
 private void AddRenderDataForEvent(JTimelineBase timeline)
 {
     if (timeline is JTimelineEvent)
     {
         JTimelineEvent tline = (JTimelineEvent)timeline;
         for (int k = 0; k < tline.EventTracks.Count; k++)
         {
             List <JClipRenderData> list  = new List <JClipRenderData>();
             JEventTrack            track = tline.EventTracks[k];
             for (int l = 0; l < track.EventClips.Count; l++)
             {
                 JEventBase key        = track.EventClips[l];
                 var        cachedData = ScriptableObject.CreateInstance <JClipRenderData>();
                 cachedData.ClipData = key;
                 list.Add(cachedData);
             }
             if (!timelineClipRenderDataMap.ContainsKey(track))
             {
                 timelineClipRenderDataMap.Add(track, list);
             }
             else
             {
                 timelineClipRenderDataMap[track] = list;
             }
         }
     }
 }
Exemplo n.º 5
0
 public override void PauseTimeline()
 {
     for (int i = 0; i < EventTracks.Count; i++)
     {
         JEventTrack  track  = EventTracks[i];
         JEventBase[] events = track.EventClips.ToArray();
         foreach (JEventBase eventBase in events)
         {
             eventBase.PauseEvent();
         }
     }
 }
Exemplo n.º 6
0
 public override void ResumeTimeline()
 {
     for (int i = 0; i < EventTracks.Count; i++)
     {
         JEventTrack  track  = EventTracks[i];
         JEventBase[] events = track.EventClips.ToArray();
         foreach (JEventBase eventBase in events)
         {
             if (!eventBase.IsFireOneShotEvent && Sequence.RunningTime > eventBase.StartTime && Sequence.RunningTime < (eventBase.StartTime + eventBase.Duration))
             {
                 eventBase.ResumeEvent();
             }
         }
     }
 }
Exemplo n.º 7
0
        public override void StopTimeline()
        {
            float prevElapsedTime = elapsedTime;

            elapsedTime = 0.0f;
            for (int i = 0; i < EventTracks.Count; i++)
            {
                JEventTrack  track  = EventTracks[i];
                JEventBase[] events = track.EventClips.ToArray();
                events = events.Where(e => e.StartTime <= prevElapsedTime).ToArray();
                for (int j = events.Length - 1; j >= 0; j--)
                {
                    events[j].StopEvent();
                }
            }
        }
Exemplo n.º 8
0
        private void RemoveEvent(JClipRenderData renderdata)
        {
            var keyframe = renderdata.ClipData;

            if (keyframe is JEventBase)
            {
                JEventBase  key   = (JEventBase)keyframe;
                JEventTrack track = key.Track;
                if (timelineClipRenderDataMap.ContainsKey(track))
                {
                    if (timelineClipRenderDataMap[track].Contains(renderdata))
                    {
                        timelineClipRenderDataMap[track].Remove(renderdata);
                    }
                }
                track.RemoveClip(key);
            }
        }
Exemplo n.º 9
0
        private void RemoveEventTrack(JEventTrack track)
        {
            if (timelineClipRenderDataMap.ContainsKey(track))
            {
                timelineClipRenderDataMap.Remove(track);
            }
            JTimelineEvent line = (JTimelineEvent)track.TimeLine;

            line.RemoveTrack(track);
            JTimelineContainer contain = line.TimelineContainer;

            if (line.EventTracks.Count == 0)
            {
                DestroyImmediate(line.gameObject);
            }
            //删除的是最后一个 删除掉container
            if (contain.transform.childCount == 0)
            {
                DestroyImmediate(contain.gameObject);
            }
        }
Exemplo n.º 10
0
        //添加关键帧
        private void AddNewTrackEvent(JEventTrack track, float time, Type eventType)
        {
            var clipData = ScriptableObject.CreateInstance(eventType) as JEventBase;

            clipData.StartTime = time;
            clipData.Track     = track;
            clipData.EventName = eventType.Name;
            track.AddClip(clipData);
            if (timelineClipRenderDataMap.ContainsKey(track))
            {
                var cachedData = ScriptableObject.CreateInstance <JClipRenderData>();
                cachedData.ClipData = clipData;
                timelineClipRenderDataMap[track].Add(cachedData);
            }
            else
            {
                var cachedData = ScriptableObject.CreateInstance <JClipRenderData>();
                cachedData.ClipData = clipData;
                List <JClipRenderData> list = new List <JClipRenderData>();
                list.Add(cachedData);
                timelineClipRenderDataMap.Add(track, list);
            }
        }
Exemplo n.º 11
0
 public void RemoveTrack(JEventTrack tTrack)
 {
     EventTracks.Remove(tTrack);
 }
Exemplo n.º 12
0
 public void AddTrack(JEventTrack ttrack)
 {
     ttrack.TimeLine = this;
     EventTracks.Add(ttrack);
 }
Exemplo n.º 13
0
        private void EventGUI(JTimelineEvent Eventine, JEventTrack linetrack, JClipRenderData[] renderDataList)
        {
            GenericMenu contextMenu = new GenericMenu();
            ///event 右键点击
            bool isContext       = UnityEngine.Event.current.type == EventType.MouseDown && UnityEngine.Event.current.button == 1;
            bool isChoose        = UnityEngine.Event.current.type == EventType.MouseDown && UnityEngine.Event.current.button == 0 && UnityEngine.Event.current.clickCount == 1;
            bool hasBox          = false;
            Rect DisplayAreaTemp = DisplayArea;

            DisplayAreaTemp.x = 0;
            DisplayAreaTemp.y = 0;
            for (int j = 0; j < renderDataList.Length; j++)
            {
                JClipRenderData renderdata    = renderDataList[j];
                JEventBase      eventClipData = (JEventBase)renderdata.ClipData;
                JEventTrack     track         = eventClipData.Track;
                if (linetrack != track)
                {
                    continue;
                }
                var startX = ConvertTimeToXPos(eventClipData.StartTime);

                var endX = ConvertTimeToXPos(eventClipData.StartTime + eventClipData.Duration);
                if (eventClipData.IsFireOneShotEvent)
                {
                    endX = ConvertTimeToXPos(eventClipData.StartTime + 1f);
                }
                var handleWidth = 2.0f;

                float posy   = DisplayArea.y;
                float height = DisplayArea.height;

                Rect renderRect  = new Rect(startX, posy, endX - startX, height);
                Rect leftHandle  = new Rect(startX, posy, handleWidth * 2.0f, height);
                Rect rightHandle = new Rect(endX - (handleWidth * 2.0f), posy, handleWidth * 2.0f, height);
                Rect labelRect   = new Rect();

                Rect renderRecttemp = renderRect;
                renderRecttemp.x -= DisplayArea.x;
                renderRecttemp.y  = 0;
                Rect leftHandletemp = leftHandle;
                leftHandletemp.y  = 0;
                leftHandletemp.x -= DisplayArea.x;
                Rect rightHandletemp = rightHandle;
                rightHandletemp.x -= DisplayArea.x;
                rightHandletemp.y  = 0;


                GUI.color = new Color(144 / 255.0f, 234 / 255.0f, 251 / 255.0f, 1);
                if (SelectedObjects.Contains(renderdata))
                {
                    GUI.color = ColorTools.SelectColor;
                }
                GUI.Box(renderRecttemp, "", USEditorUtility.NormalWhiteOutLineBG);

                GUI.Box(leftHandletemp, "");
                GUI.Box(rightHandletemp, "");

                labelRect                 = renderRecttemp;
                renderdata.renderRect     = renderRect;
                renderdata.labelRect      = renderRect;
                renderdata.renderPosition = new Vector2(startX, height);
                renderdata.leftHandle     = leftHandle;
                renderdata.rightHandle    = rightHandle;
                renderdata.ClipData       = eventClipData;

                labelRect.x += 4.0f; // Nudge this along a bit so it isn't flush with the side.

                GUI.color = Color.black;
                GUI.Label(labelRect, eventClipData.EventName);

                GUI.color = Color.white;

                if (isContext && renderRecttemp.Contains(UnityEngine.Event.current.mousePosition))
                {
                    hasBox = true;
                    contextMenu.AddItem(new GUIContent("DeleteEvent"),
                                        false, (obj) => RemoveEvent(((JClipRenderData)((object[])obj)[0])),
                                        new object[] { renderdata });
                }
                if (isContext && renderRecttemp.Contains(UnityEngine.Event.current.mousePosition))
                {
                    UnityEngine.Event.current.Use();
                    contextMenu.ShowAsContext();
                }
            }
            if (!hasBox && isChoose && DisplayAreaTemp.Contains(UnityEngine.Event.current.mousePosition) && (UnityEngine.Event.current.control || UnityEngine.Event.current.command))
            {
                //代码选中hierarchy中的对象 显示inspector 按住Ctrl or command
                //GameObject go = GameObject.Find(Animationline.gameObject.name);
                Selection.activeGameObject = Eventine.gameObject;
                EditorGUIUtility.PingObject(Eventine.gameObject);
            }
            if (!hasBox && isContext && DisplayAreaTemp.Contains(UnityEngine.Event.current.mousePosition))
            {
                contextMenu = MenuForEventTimeLine(Eventine, linetrack);
            }
            if (!hasBox && isContext && DisplayAreaTemp.Contains(UnityEngine.Event.current.mousePosition))
            {
                UnityEngine.Event.current.Use();
                contextMenu.ShowAsContext();
            }
        }