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(); } }
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(); }