Esempio n. 1
0
//		public List<FTrackEditor> _trackEditors = new List<FTrackEditor>();

//		[SerializeField]
//		private int[] _trackEditorIds = new int[0];

//		[SerializeField]
//		private AnimVector3 _offsetAnim = new AnimVector3();

//		private FTrackEditor _trackDragged = null;

        public override void Init(FObject obj, FEditor owner)
        {
            base.Init(obj, owner);

            if (Timeline.Owner == null)
            {
                Timeline.Awake();
            }

            Editors.Clear();

            List <FTrack> tracks = Timeline.Tracks;

            for (int i = 0; i < tracks.Count; ++i)
            {
                FTrack       track       = tracks[i];
                FTrackEditor trackEditor = ContainerEditor.SequenceEditor.GetEditor <FTrackEditor>(track);
                trackEditor.Init(track, this);
                Editors.Add(trackEditor);
            }

            _icon = new GUIContent(FUtility.GetFluxTexture("Plus.png"));

//			_offsetAnim.valueChanged.AddListener( ContainerEditor.SequenceEditor.Repaint );
        }
        private void DestroyElements(List <ISelectableElement> elements)
        {
            Undo.IncrementCurrentGroup();
            Undo.RecordObject(this, "Selected Elements");
            for (int i = elements.Count - 1; i >= 0; --i)
            {
                if (elements[i] is FEvent)
                {
                    FEvent evt = (FEvent)elements[i];

                    Undo.RecordObject(evt.GetTrack(), string.Empty);
                    Undo.RecordObject(evt, string.Empty);
                    evt.GetTrack().Remove(evt);
                    Undo.DestroyObjectImmediate(evt.gameObject);
                }
                else if (elements[i] is FTrack)
                {
                    FTrack track = (FTrack)elements[i];
                    Undo.RecordObject(track.GetTimeline(), string.Empty);
                    Undo.RecordObject(track, string.Empty);
                    track.GetTimeline().RemoveTrack(track);
                    Undo.DestroyObjectImmediate(track.gameObject);
                }
            }

            Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
            Refresh();
        }
Esempio n. 3
0
        public void ShowTrackMenu(FTrack track)
        {
            if (_fcEventTypes == null)
            {
                _fcEventTypes = new Type[0];
                Type[] allTypes = typeof(FEvent).Assembly.GetTypes();

                foreach (Type type in allTypes)
                {
                    if (type.IsSubclassOf(typeof(FEvent)) && !type.IsAbstract)
                    {
                        object[] attributes = type.GetCustomAttributes(typeof(FEventAttribute), false);
                        if (attributes.Length == 1)
                        {
                            ArrayUtility.Add <Type>(ref _fcEventTypes, type);
                        }
                    }
                }
            }

            GenericMenu menu = new GenericMenu();

            foreach (Type t in _fcEventTypes)
            {
                TimelineMenuData param = new TimelineMenuData();
                param.track = track; param.evtType = t;
                object[] attributes = t.GetCustomAttributes(typeof(FEventAttribute), false);
                menu.AddItem(new GUIContent(((FEventAttribute)attributes[0]).menu), false, AddEventToTrack, param);
            }
            menu.ShowAsContext();
        }
Esempio n. 4
0
        public virtual void OnEnable()
        {
            if (target == null)
            {
                return;
            }

            FTrack track = (FTrack)target;

            Type trackType = track.GetType();

            for (int i = 0; i != targets.Length; ++i)
            {
                if (trackType != targets[i].GetType())
                {
                    _allTracksSameType = false;
                    break;
                }
            }

            if (_allTracksSameType)
            {
                _events = serializedObject.FindProperty("_events");
            }
            else
            {
                _showEvents = false;
            }
        }
        void AddTrackMenu(object param)
        {
            KeyValuePair <Type, FEventAttribute> kvp = (KeyValuePair <Type, FEventAttribute>)param;

            Undo.RecordObjects(new UnityEngine.Object[] { Container, this }, "add Track");

            FTrack track = (FTrack)typeof(FContainer).GetMethod("Add", new Type[] { typeof(FrameRange) }).MakeGenericMethod(kvp.Key).Invoke(Container, new object[] { SequenceEditor.ViewRange });

            string evtName = track.gameObject.name;

            int nameStart = 0;
            int nameEnd   = evtName.Length;

            if (nameEnd > 2 && evtName[0] == 'F' && char.IsUpper(evtName[1]))
            {
                nameStart = 1;
            }
            if (evtName.EndsWith("Event"))
            {
                nameEnd = evtName.Length - "Event".Length;
            }
            evtName = evtName.Substring(nameStart, nameEnd - nameStart);

            track.gameObject.name = ObjectNames.NicifyVariableName(evtName);

            SequenceEditor.Refresh();

            Undo.RegisterCreatedObjectUndo(track.gameObject, string.Empty);

            SequenceEditor.SelectExclusive(SequenceEditor.GetEditor <FEventEditor>(track.GetEvent(0)));
        }
Esempio n. 6
0
        private static void Rescale(FTrack track, float scaleFactor)
        {
            List <FEvent> events = track.GetEvents();

            foreach (FEvent evt in events)
            {
                Rescale(evt, scaleFactor);
            }
        }
        protected override void Paste(object obj)
        {
            if (!CanPaste(obj as FObject))
            {
                return;
            }

            Undo.RecordObject(Container, string.Empty);

            FTrack track = Instantiate <FTrack>((FTrack)obj);

            track.hideFlags = Container.hideFlags;
            Container.Add(track);
            Undo.RegisterCreatedObjectUndo(track.gameObject, "Paste Track " + ((FTrack)obj).name);
        }
Esempio n. 8
0
        public override void OnInspectorGUI()
        {
            if (_allTracksSameType)
            {
                base.OnInspectorGUI();
            }

            FTrack track = (FTrack)target;

            EditorGUI.BeginChangeCheck();
            bool enabled = EditorGUILayout.Toggle("Enabled", ((FTrack)target).enabled);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(target, (enabled ? "enable" : "disable") + " Track");
                track.enabled = enabled;
                EditorUtility.SetDirty(target);
            }

            EditorGUI.BeginChangeCheck();
            string newName = EditorGUILayout.TextField("Name", target.name);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(track.gameObject, "rename Track");
                target.name = newName;
                EditorUtility.SetDirty(target);
            }

            if (track.AllowedCacheMode != track.RequiredCacheMode)
            {
                EditorGUI.BeginChangeCheck();
                CacheMode cacheMode = (CacheMode)EditorGUILayout.EnumMaskField("Cache Mode", track.CacheMode);
                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(track, "change Cache Mode");
                    track.CacheMode = (cacheMode | track.RequiredCacheMode) & track.AllowedCacheMode;
                    EditorUtility.SetDirty(target);
                }
            }

            if (_showEvents && _events != null)
            {
                serializedObject.Update();
                EditorGUILayout.PropertyField(_events, true);
                serializedObject.ApplyModifiedProperties();
            }
        }
Esempio n. 9
0
        protected override void Init(FObject obj)
        {
            _track = (FTrack)obj;

            _eventEditors.Clear();

            List <FEvent> events = _track.GetEvents();

            for (int i = 0; i < events.Count; ++i)
            {
                FEvent       evt       = events[i];
                FEventEditor evtEditor = SequenceEditor.GetEditor <FEventEditor>(evt);
                evtEditor.Init(evt, this);
                _eventEditors.Add(evtEditor);
            }
        }
Esempio n. 10
0
        protected override void Init(FObject obj)
        {
            _timeline = (FTimeline)obj;

            _trackEditors.Clear();

            List <FTrack> tracks = _timeline.GetTracks();

            for (int i = 0; i < tracks.Count; ++i)
            {
                FTrack       track       = tracks[i];
                FTrackEditor trackEditor = _sequenceEditor.GetEditor <FTrackEditor>(track);
                trackEditor.Init(track, this);
                _trackEditors.Add(trackEditor);
            }
        }
Esempio n. 11
0
        UndoPropertyModification[] PostProcessModifications(UndoPropertyModification[] modifications)
        {
            Dictionary <int, FTrackEditor> trackEditors = new Dictionary <int, FTrackEditor>();

            foreach (UndoPropertyModification modification in modifications)
            {
                if (modification.currentValue.target is FEvent)
                {
                    FTrack track = ((FEvent)modification.currentValue.target).GetTrack();
                    if (track != null)
                    {
                        FTrackEditor trackEditor = _sequenceEditor.GetEditor <FTrackEditor>(track);
                        if (!trackEditors.ContainsKey(trackEditor.GetInstanceID()))
                        {
                            trackEditors.Add(trackEditor.GetInstanceID(), trackEditor);
                        }
                    }
                }
                else if (modification.currentValue.target is FTrack)
                {
                    FTrackEditor trackEditor = _sequenceEditor.GetEditor <FTrackEditor>(((FTrack)modification.currentValue.target));
                    if (!trackEditors.ContainsKey(trackEditor.GetInstanceID()))
                    {
                        trackEditors.Add(trackEditor.GetInstanceID(), trackEditor);
                    }
                }
                else if (modification.currentValue.target is FTrackEditor)
                {
                    FTrackEditor trackEditor = (FTrackEditor)modification.currentValue.target;
                    if (!trackEditors.ContainsKey(trackEditor.GetInstanceID()))
                    {
                        trackEditors.Add(trackEditor.GetInstanceID(), trackEditor);
                    }
                }
//				Debug.Log( "path: " + modification.propertyModification.propertyPath + " target: " + modification.propertyModification.target.name + " value: " + modification.propertyModification.value );
            }

            Dictionary <int, FTrackEditor> .Enumerator e = trackEditors.GetEnumerator();

            while (e.MoveNext())
            {
                e.Current.Value.OnTrackChanged();
            }

            return(modifications);
        }
Esempio n. 12
0
        public override void Init(FObject obj, FEditor owner)
        {
            base.Init(obj, owner);

            Editors.Clear();

            List <FTrack> tracks = Container.Tracks;

            for (int i = 0; i < tracks.Count; ++i)
            {
                FTrack       track       = tracks[i];
                FTrackEditor trackEditor = SequenceEditor.GetEditor <FTrackEditor>(track);
                trackEditor.Init(track, this);
                Editors.Add(trackEditor);
            }

            _icon = new GUIContent(FUtility.GetFluxTexture("Plus.png"));
        }
Esempio n. 13
0
            /// <summary>
            /// Retrieve tracks from a video file and extract subtitles, fonts and chapters to an external file.
            /// </summary>
            /// <param name="path">The path of the video file to analyse. This must be a local path.</param>
            /// <param name="outPath">The directory that will be used to store extracted files.</param>
            /// <param name="reExtract">Should the cache be invalidated and information re-extracted or not?</param>
            /// <returns>An array of <see cref="Track"/>.</returns>
            public static Track[] ExtractInfos(string path, string outPath, bool reExtract)
            {
                path    = path.Replace('\\', '/');
                outPath = outPath.Replace('\\', '/');

                int    size       = Marshal.SizeOf <FTrack>();
                IntPtr ptr        = extract_infos(path, outPath, out uint arrayLength, out uint trackCount, reExtract);
                IntPtr streamsPtr = ptr;

                Track[] tracks;

                if (trackCount > 0 && ptr != IntPtr.Zero)
                {
                    tracks = new Track[trackCount];

                    int j = 0;
                    for (int i = 0; i < arrayLength; i++, streamsPtr += size)
                    {
                        FTrack stream = Marshal.PtrToStructure <FTrack>(streamsPtr);
                        if (stream !.Type == FTrackType.Unknown || stream.Type == FTrackType.Attachment)
                        {
                            continue;
                        }
                        tracks[j] = stream.ToTrack();
                        j++;
                    }
                    Array.Resize(ref tracks, j);
                }
                else
                {
                    tracks = Array.Empty <Track>();
                }

                if (ptr != IntPtr.Zero)
                {
                    free_streams(ptr, trackCount);
                }
                return(tracks);
            }
Esempio n. 14
0
        void AddTrackMenu(object param)
        {
            KeyValuePair <Type, FEventAttribute> kvp = (KeyValuePair <Type, FEventAttribute>)param;

            Undo.RecordObjects(new UnityEngine.Object[] { Container, this }, "add Track");

            FTrack track = (FTrack)typeof(FContainer).GetMethod("Add", new Type[] { typeof(FrameRange) }).MakeGenericMethod(kvp.Key).Invoke(Container, new object[] { SequenceEditor.ViewRange });

            //string evtName = track.gameObject.name;

            //int nameStart = 0;
            //int nameEnd = evtName.Length;
            //if (nameEnd > 2 && evtName[0] == 'F' && char.IsUpper(evtName[1]))
            //    nameStart = 1;
            //if (evtName.EndsWith("Event"))
            //    nameEnd = evtName.Length - "Event".Length;
            //evtName = evtName.Substring(nameStart, nameEnd - nameStart);

            string evtName = kvp.Value.menu;

            if (!string.IsNullOrEmpty(kvp.Value.menu))
            {
                string[] nodes = kvp.Value.menu.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                evtName = nodes[nodes.Length - 1];
            }

            track.gameObject.name = ObjectNames.NicifyVariableName(evtName);

            if (!Container.Sequence.IsStopped)
            {
                track.Init();
            }

            SequenceEditor.Refresh();

            Undo.RegisterCreatedObjectUndo(track.gameObject, string.Empty);

            SequenceEditor.SelectExclusive(SequenceEditor.GetEditor <FEventEditor>(track.GetEvent(0)));
        }
Esempio n. 15
0
 public override void RefreshRuntimeObject()
 {
     _track = (FTrack)EditorUtility.InstanceIDToObject(_track.GetInstanceID());
 }