Example #1
0
        public static void ShowActionInTrackMenu(NodeTrackCategory category, Action <ActionNode> callback)
        {
            if (sm_ActionInTrackTypeDic == null)
            {
                sm_ActionInTrackTypeDic = new Dictionary <NodeTrackCategory, Type[]>();
                for (int i = (int)NodeTrackCategory.None + 1; i < (int)NodeTrackCategory.Max; ++i)
                {
                    NodeTrackCategory ntCategory = (NodeTrackCategory)i;
                    sm_ActionInTrackTypeDic.Add(ntCategory, GetActionInTrackTypes(ntCategory));
                }
            }

            GenericMenu menu = new GenericMenu();

            if (sm_ActionInTrackTypeDic.TryGetValue(category, out var types) && types.Length > 0)
            {
                foreach (var type in types)
                {
                    var menuAttrs = type.GetCustomAttributes(typeof(NodeMenuAttribute), false);
                    if (menuAttrs != null && menuAttrs.Length > 0)
                    {
                        var    menuAttr = (NodeMenuAttribute)menuAttrs[0];
                        string itemName = string.IsNullOrEmpty(menuAttr.Prefix) ? menuAttr.Name : $"{menuAttr.Prefix}/{menuAttr.Name}";
                        menu.AddItem(new GUIContent(itemName), false, () =>
                        {
                            callback?.Invoke((ActionNode)Activator.CreateInstance(type));
                        });
                    }
                }
            }

            menu.ShowAsContext();
        }
Example #2
0
 private static Type[] GetActionInTrackTypes(NodeTrackCategory category)
 {
     return((from type in sm_NodeTypes
             where type.IsSubclassOf(typeof(ActionNode))
             let attrs = type.GetCustomAttributes(typeof(NodeTrackAttribute), false)
                         where attrs != null && attrs.Length > 0
                         let attr = (NodeTrackAttribute)attrs[0]
                                    where attr.Category == category
                                    select type).ToArray());
 }
Example #3
0
 public NodeTrackAttribute(NodeTrackCategory category)
 {
     Category = category;
 }