예제 #1
0
        void SelecteFsmObject()
        {
            if (currState == null)
            {
                Selection.objects = new UnityEngine.Object[] { fsm }
            }
            ;
        }

        void CreateStateMenu(Vector2 position)
        {
            GenericMenu gm = new GenericMenu();

            if (currState == null)
            {
                List <Type> subClasses = new List <Type>();
                subClasses.AddRange(XReflectionUtils.FindSubClass(typeof(FsmState)).ToList());

                foreach (var item in subClasses)
                {
                    gm.AddItem(new GUIContent(item.Name), false, (t) => {
                        var state         = item.Assembly.CreateInstance((t as Type).FullName, false);
                        var fsmState      = state as FsmState;
                        fsmState.owner    = fsm;
                        fsmState.name     = (t as Type).Name;
                        fsmState.position = position;
                        fsm.AddState(fsmState);
                    }, item);
                }
            }
            else
            {
                gm.AddItem(new GUIContent("Set Default"), false, () => {
                    fsm.SetDefaultState(currState);
                });
                gm.AddItem(new GUIContent("Remove"), false, () => {
                    fsm.RemoveState(currState);
                    SelecteFsmObject();
                });
            }

            gm.ShowAsContext();
        }
    }
예제 #2
0
        public override void OnClickNode(DragNode targetNode)
        {
            currNode = ( BTNode )targetNode;
            var         allActions   = XReflectionUtils.FindSubClass(typeof(BTAction)).ToList();
            var         allVariables = XReflectionUtils.FindSubClass(typeof(BTVariable)).ToList();
            GenericMenu gm           = new GenericMenu();

            gm.AddItem(new GUIContent("New Fsm Event"), false, ClickNode, ( object )"NewEvent");
            gm.AddItem(new GUIContent("Open State Script"), false, ClickNode, "OpenScript");
            gm.AddItem(new GUIContent("Delet State"), false, ClickNode, ( object )"DeleteState");
            gm.AddItem(new GUIContent("Copy State"), false, ClickNode, "CopyState");
            for (int i = 0; i < allActions.Count; i++)
            {
                var allObject = allActions[i].GetCustomAttributes(typeof(ActionTitleAttribute), true);
                if (allObject.Length > 0)
                {
                    gm.AddItem(new GUIContent("Add Action/" + (( ActionTitleAttribute )allObject[0]).title), false, ClickNode, ( object )allActions[i].AssemblyQualifiedName);
                }
            }

            gm.ShowAsContext();
        }