示例#1
0
        public MarkerAnnotation AddMarker(Type type, float timeInSeconds)
        {
            MarkerAnnotation marker = MarkerAnnotation.Create(type, timeInSeconds);

            AddMarker(marker);
            return(marker);
        }
示例#2
0
        public static MarkerAnnotation Create <T>(T payload, float timeInSeconds) where T : struct
        {
            MarkerAnnotation marker = Create(typeof(T), timeInSeconds);

            marker.payload.SetValue(payload);
            return(marker);
        }
示例#3
0
        void OnMarkerRemoved(MarkerAnnotation marker)
        {
            var markerTimelineElement = GetMarkerElements().FirstOrDefault(me => me.marker == marker);

            if (markerTimelineElement != null)
            {
                markerTimelineElement.RemoveFromHierarchy();
            }

            m_Owner.SelectionContainer.Remove(marker);
        }
示例#4
0
        void OnMarkerAdded(MarkerAnnotation marker)
        {
            var markerElement = GetMarkerElements().FirstOrDefault(me => me.marker == marker);

            if (markerElement != null)
            {
                return;
            }

            CreateMarkerElement(marker);
        }
示例#5
0
        public void AddMarker(MarkerAnnotation marker)
        {
            if (!Valid)
            {
                return;
            }

            Undo.RecordObject(m_Asset, $"Add {TagAttribute.GetDescription(marker.payload.Type)}");
            markers.Add(marker);
            MarkerAdded?.Invoke(marker);
            NotifyChanged();
        }
示例#6
0
        public void RemoveMarker(MarkerAnnotation marker)
        {
            int index = markers.IndexOf(marker);

            if (index >= 0)
            {
                Undo.RecordObject(m_Asset, $"Remove {MarkerAttribute.GetDescription(marker.GetType())}");
                MarkerRemoved?.Invoke(marker);
                marker.Dispose();
                markers.RemoveAt(index);
                NotifyChanged();
            }
        }
示例#7
0
        MarkerElement CreateMarkerElement(MarkerAnnotation marker)
        {
            var me = new MarkerElement(marker, this);

            AddElement(me);

            me.Reposition();

            if (m_Owner.SelectionContainer.m_Markers.Contains(marker) && !m_Owner.SelectionContainer.m_FullClipSelection)
            {
                MarkerElement.SelectMarkerElement(me, m_Owner.SelectionContainer.Count > 1);
            }

            me.MarkerElementDragged += OnMarkerElementDragged;
            me.Selected             += OnMarkerSelected;

            return(me);
        }
        public MarkerElement(MarkerAnnotation marker, MarkerTrack track) : base(track)
        {
            m_Track     = track;
            this.marker = marker;
            focusable   = true;

            m_Content = new VisualElement();
            m_Content.AddToClassList(k_MarkerStyleClass);
            m_BackgroundColor = AnnotationAttribute.GetColor(marker.payload.Type);
            var background = m_BackgroundColor;

            background.a = k_BackgroundAlpha;
            m_Content.style.backgroundColor = background;
            Add(m_Content);

            SetupManipulators(m_Content);

            m_ManipulateLabel = new Label();
            m_ManipulateLabel.AddToClassList("markerManipulateLabel");
            m_ManipulateLabel.style.visibility = Visibility.Hidden;
            Add(m_ManipulateLabel);

            style.position  = Position.Absolute;
            style.minHeight = 22;
            style.maxWidth  = 1;

            marker.Changed += Reposition;

            if (panel != null)
            {
                SetupTimelineGuideline(panel.visualTree);
            }
            else
            {
                RegisterCallback <AttachToPanelEvent>(OnAttachToPanel);
            }

            RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel);
        }
示例#9
0
        public MarkerEditor(MarkerAnnotation marker, TaggedAnimationClip clip)
        {
            m_Clip   = clip;
            m_Marker = marker;
            UIElementsUtils.ApplyStyleSheet(BuilderWindow.k_Stylesheet, this);
            UIElementsUtils.CloneTemplateInto("Inspectors/MarkerEditor.uxml", this);
            AddToClassList("drawerElement");

            var deleteButton = this.Q <Button>("deleteButton");

            deleteButton.clickable.clicked += () => { RemoveMarker(m_Marker); };

            if (!marker.payload.ValidPayloadType)
            {
                var contents = this.Q <VisualElement>(classes: "arrayEntryContents");
                contents.Clear();
                var unknownLabel = new Label {
                    text = MarkerAttribute.k_UnknownMarkerType
                };
                unknownLabel.AddToClassList(AnnotationsEditor.k_UnknownAnnotationType);
                contents.Add(unknownLabel);
                return;
            }

            TextField typeLabel = this.Q <TextField>();

            typeLabel.value = MarkerAttribute.GetDescription(m_Marker.payload.Type);
            typeLabel.SetEnabled(false);

            var timeField = this.Q <TimeField>("timeInSeconds");

            timeField.Init(m_Clip, marker.timeInSeconds);
            timeField.TimeChanged += newTime =>
            {
                if (!EqualityComparer <float> .Default.Equals(m_Marker.timeInSeconds, newTime))
                {
                    Undo.RecordObject(m_Clip.Asset, "Change marker time");
                    m_Marker.timeInSeconds = newTime;
                    m_Marker.NotifyChanged();
                    clip.Asset.MarkDirty();
                }
            };

            m_Marker.Changed += UpdateTime;

            m_PayloadInspector = UnityEditor.Editor.CreateEditor(m_Marker.payload.ScriptableObject) as GenericStructInspector;

            m_PayloadInspector.StructModified += () =>
            {
                m_Marker.payload.Serialize();
                m_Clip.Asset.MarkDirty();
            };

            VisualElement inspectorElement   = m_PayloadInspector.CreateInspectorGUI() ?? new IMGUIContainer(m_PayloadInspector.OnInspectorGUI);
            var           inspectorContainer = this.Q <VisualElement>("payloadInspector");

            inspectorContainer.Add(inspectorElement);

            RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel);
            m_Clip.Asset.AssetWasDeserialized += UpdateTime;
        }
示例#10
0
 void RemoveMarker(MarkerAnnotation marker)
 {
     m_Clip.RemoveMarker(marker);
 }
示例#11
0
 void ShowMarkerTrack(MarkerAnnotation ma)
 {
     ForceGutterTrackDisplay?.Invoke(m_MarkerTrack);
 }