static void AddTagMenu(ContextualMenuPopulateEvent evt, Action <DropdownMenuAction> action, DropdownMenuAction.Status menuStatus)
        {
            const string prefix = "Add Tag/";

            foreach (var tagType in TagAttribute.GetVisibleTypesInInspector())
            {
                evt.menu.AppendAction($"{prefix}{TagAttribute.GetDescription(tagType)}", action, a => menuStatus, tagType);
            }
        }
Esempio n. 2
0
        void BuildAnimationClipItemMenu(ContextualMenuPopulateEvent evt, VisualElement ve)
        {
            var clip = ve.userData as TaggedAnimationClip;

            if (clip == null)
            {
                evt.menu.AppendSeparator("Missing Clip");
                return;
            }

            if (m_AnimationLibraryListView.m_ClipSelection.Count > 0)
            {
                if (!m_AnimationLibraryListView.m_ClipSelection.Contains(clip))
                {
                    // We can't change the selection of the list from inside a context menu event
                    return;
                }

                evt.menu.AppendAction("Delete Selected Clip(s)", action => m_AnimationLibraryListView.DeleteSelection(), DropdownMenuAction.AlwaysEnabled);
                evt.menu.AppendSeparator();
                foreach (var tagType in TagAttribute.GetVisibleTypesInInspector())
                {
                    evt.menu.AppendAction($"Tag Selected Clip(s)/{TagAttribute.GetDescription(tagType)}", OnTagSelectionClicked, DropdownMenuAction.AlwaysEnabled, tagType);
                }

                evt.menu.AppendAction("Set Boundary Clips", action => BoundaryClipWindow.ShowWindow(m_Asset, m_AnimationLibraryListView.m_ClipSelection));

                evt.menu.AppendAction("Experimental - Generate Procedural Annotations", action => m_AnimationLibraryListView.GenerateProceduralAnnotations(), m_AnimationLibraryListView.CanGenerateProceduralAnnotations());
            }
            else
            {
                evt.menu.AppendAction("Delete Clip", action =>
                {
                    m_Asset.RemoveClips(new[] { clip });
                    m_AnimationLibraryListView.Refresh();
                }, DropdownMenuAction.AlwaysEnabled);

                evt.menu.AppendSeparator();
                foreach (var tagType in TagAttribute.GetVisibleTypesInInspector())
                {
                    evt.menu.AppendAction($"Tag Clip/{TagAttribute.GetDescription(tagType)}",
                                          action => clip.AddTag(tagType),
                                          DropdownMenuAction.AlwaysEnabled, tagType);
                }
            }
        }
        public static object CreateDefaultTag()
        {
            if (!k_DefaultTagTypeComputed)
            {
                foreach (Type tagType in TagAttribute.GetVisibleTypesInInspector())
                {
                    if (tagType.IsDefined(typeof(DefaultTagAttribute)))
                    {
                        if (k_CreateDefaultTagMethod == null)
                        {
                            MethodInfo createTagMethod = tagType.GetMethod("CreateDefaultTag", BindingFlags.Static | BindingFlags.Public);
                            if (createTagMethod == null)
                            {
                                Debug.LogWarning($"Default tag type {tagType.FullName} is missing \"public static {tagType.FullName} CreateDefaultTag()\" function, cannot create default tag");
                                return(null);
                            }
                            else if (createTagMethod.GetGenericArguments().Length > 0 || createTagMethod.ReturnType != tagType)
                            {
                                Debug.LogWarning($"Default tag type {tagType.FullName} should have \"public static {tagType.FullName} CreateDefaultTag()\" signature, cannot create default tag");
                                return(null);
                            }

                            k_CreateDefaultTagMethod = createTagMethod;
                            k_DefaultTagType         = tagType;
                        }
                        else
                        {
                            Debug.LogWarning($"Tag type {tagType.FullName} has default tag attribute, but {k_DefaultTagType.FullName} is already defined as the default tag");
                        }
                    }
                }

                k_DefaultTagTypeComputed = true;
            }

            if (k_CreateDefaultTagMethod == null)
            {
                return(null);
            }

            return(k_CreateDefaultTagMethod.Invoke(null, null));
        }
        public static int MaskFlags(List <bool> boolValues)
        {
            if (boolValues.Count > 32)
            {
                return(0);
            }

            int intValue = 0;

            TagAttribute.GetVisibleTypesInInspector();

            for (int i = 0; i < boolValues.Count; i++)
            {
                if (boolValues[i])
                {
                    intValue += 1 << i;
                }
            }

            return(intValue);
        }
Esempio n. 5
0
        protected override void OnMouseUpEvent(MouseUpEvent evt)
        {
            if (!m_Active || !target.HasMouseCapture() || !CanStopManipulation(evt))
            {
                return;
            }

            base.OnMouseUpEvent(evt);

            float distanceFromMouseDown = Math.Abs(evt.mousePosition.x - m_MouseDownPosition.x);

            if (distanceFromMouseDown >= k_MinDistance && !EditorApplication.isPlaying)
            {
                float mouseUpTime = m_Timeline.WorldPositionToTime(evt.mousePosition.x);

                float startTime = Math.Min(m_MouseDownTime, mouseUpTime);
                float duration  = Math.Max(m_MouseDownTime, mouseUpTime) - startTime;

                var menu = new GenericMenu();

                foreach (Type tagType in TagAttribute.GetVisibleTypesInInspector())
                {
                    menu.AddItem(new GUIContent($"{TagAttribute.GetDescription(tagType)}"),
                                 false,
                                 () => { m_Timeline.OnAddTagSelection(tagType, startTime, duration); });
                }

                menu.DropDown(new Rect(evt.mousePosition, Vector2.zero));
            }
            else
            {
                m_Timeline.ReSelectCurrentClip();
            }

            m_Target.style.visibility = Visibility.Hidden;
        }