예제 #1
0
 //初期化
 public NodeConnectionPoint(Node node, ConnectionPointType type, GUIStyle style, Action <NodeConnectionPoint> OnClickConnectionPoint, NextStateJudge judge = null)
 {
     this.node  = node;               //親
     this.type  = type;               //タイプ
     this.style = style;              //スタイル
     this.OnClickConnectionPoint = OnClickConnectionPoint;
     rect = new Rect(0, 0, 10f, 20f); //座標
     if (judge != null)
     {
         myNextStateJudge = judge;
     }
 }
예제 #2
0
    //コピーしたステートのペースト(ネクストステート含め)
    private void OnClickPasteNodeAll(Vector2 mousePosition)
    {
        if (copyNode == null)
        {
            return;
        }
        NomalState statePlus = new NomalState();

        statePlus.execDelegate   = new List <StateBase.ActionDelegate>(copyNode.myState.execDelegate);
        statePlus.stateName      = copyNode.myState.stateName + "(Clone)";
        statePlus.nextStateJudge = new List <NextStateJudge>();
        for (int i = 0; i < copyNode.myState.nextStateJudge.Count; i++)
        {
            NextStateJudge next = new NextStateJudge();
            next.nextID            = new InstanceID();
            next.nextID            = copyNode.myState.nextStateJudge[i].nextID;
            next.nextState         = copyNode.myState.nextStateJudge[i].nextState;
            next.nextStateName     = copyNode.myState.nextStateJudge[i].nextStateName;
            next.priority          = copyNode.myState.nextStateJudge[i].priority;
            next.comment           = copyNode.myState.nextStateJudge[i].comment;
            next.judgeFunc         = copyNode.myState.nextStateJudge[i].judgeFunc;
            next.judgeFuncName     = copyNode.myState.nextStateJudge[i].judgeFuncName;
            next.judgeFuncInstance = copyNode.myState.nextStateJudge[i].judgeFuncInstance;
            statePlus.nextStateJudge.Add(next);
        }
        statePlus.playUpdateDelegate = new List <StateBase.ActionDelegate>(copyNode.myState.playUpdateDelegate);
        states.Add(statePlus);
        if (nodes == null)
        {
            nodes = new List <Node>();
        }
        //マウスの場所に追加
        nodes.Add(new Node(new Rect(mousePosition.x, mousePosition.y, 200, 50), inPointStyle, outPointStyle, OnClickInPoint, OnClickOutPoint, OnClickRemoveNode, " ", nowId, statePlus, gameObject, stateMonobehaviors[nowStateMonoNuber]));
        nowId++;
        initFlag = true;
    }
예제 #3
0
    //戻り値booolのメソッドをポップアップで表示
    private void PopupBoolMethod()
    {
        //boolメソッド欄表示
        for (int i = 0; i < outPoints.Count; i++)
        {
            EditorGUILayout.BeginVertical(GUI.skin.box);
            EditorGUILayout.BeginHorizontal();
            //オーバーフローしてたら0に
            if (outPoints[i].nowStringNumber >= nowMethodsBool.Count)
            {
                outPoints[i].nowStringNumber = 0;
            }
            //メソッドの同期
            for (int j = 0; j < nowMethodsBool.Count; j++)
            {
                if (nowMethodsBool[j].nowMethod.Name == outPoints[i].stateJudge.judgeFuncName && nowMethodsBool[j].compornent == outPoints[i].stateJudge.judgeFuncInstance)
                {
                    outPoints[i].nowStringNumber = j;
                }
            }

            //ポップアップでメソッド取得
            outPoints[i].nowStringNumber = EditorGUILayout.Popup(outPoints[i].nowStringNumber, nowOptionsBool, GUILayout.Width(rect.width - 83));
            if (GUILayout.Button("⇧", GUILayout.Height(15), GUILayout.Width(18)))
            {
                if (i > 0)
                {
                    NextStateJudge actionDel = outPoints[i].stateJudge;
                    myState.nextStateJudge[i]     = myState.nextStateJudge[i - 1];
                    myState.nextStateJudge[i - 1] = actionDel;
                    NodeBaseEditor.initFlag       = true;
                }
            }
            if (GUILayout.Button("⇩", GUILayout.Height(15), GUILayout.Width(18)))
            {
                if (i < myState.nextStateJudge.Count - 1)
                {
                    NextStateJudge actionDel = outPoints[i].stateJudge;
                    myState.nextStateJudge[i]     = myState.nextStateJudge[i + 1];
                    myState.nextStateJudge[i + 1] = actionDel;
                    NodeBaseEditor.initFlag       = true;
                }
            }
            if (GUILayout.Button("×", GUILayout.Height(15), GUILayout.Width(19)))
            {
                myState.nextStateJudge.Remove(outPoints[i].stateJudge);
                NodeBaseEditor.initFlag = true;
            }

            //現在のメソッドがあれば
            if (nowMethodsBool.Count > 0)
            {
                outPoints[i].stateJudge.judgeFuncInstance = nowMethodsBool[outPoints[i].nowStringNumber].compornent;
                outPoints[i].stateJudge.judgeFuncName     = nowMethodsBool[outPoints[i].nowStringNumber].nowMethod.Name;


                //GetCompornentは同じクラスがあった場合にも対応
                //outPoints[i].stateJudge.judgeFunc = (Func<bool>)nowMethodsBool[outPoints[i].nowStringNumber].nowMethod.CreateDelegate(typeof(Func<bool>), nowMethodsBool[outPoints[i].nowStringNumber].compornent);
            }

            EditorGUILayout.EndHorizontal();
            if (outPoints.Count > i)
            {
                ParameterInfo[] parameters = { };
                if (nowMethodsBool.Count > 0)
                {
                    //引数があればそれに応じたフィールドの生成
                    parameters = nowMethodsBool[outPoints[i].nowStringNumber].nowMethod.GetParameters();
                }
                //引数1
                if (parameters.Length == 1)
                {
                    EditorGUILayout.BeginHorizontal();
                    //引数のセットと表示
                    SetArgument(ref outPoints[i].stateJudge.arg1, ref outPoints[i].stateJudge.argType1, parameters, 0, 180);
                    EditorGUILayout.EndHorizontal();
                    //引数が一つであることを渡す
                    outPoints[i].stateJudge.argMode = JudgeFuncArgMode.Arg1;
                }
                else if (parameters.Length == 2)
                {
                    EditorGUILayout.BeginHorizontal();
                    SetArgument(ref outPoints[i].stateJudge.arg1, ref outPoints[i].stateJudge.argType1, parameters, 0, 90);
                    SetArgument(ref outPoints[i].stateJudge.arg2, ref outPoints[i].stateJudge.argType2, parameters, 1, 90);
                    EditorGUILayout.EndHorizontal();
                    //引数が2つであることを渡す
                    outPoints[i].stateJudge.argMode = JudgeFuncArgMode.Arg2;
                }

                //引数なし
                else if (parameters.Length == 0)
                {
                    outPoints[i].stateJudge.argMode = JudgeFuncArgMode.NoArg;
                    GUILayout.Label("引数なし");
                }
                outPoints[i].stateJudge.comment = EditorGUILayout.TextField(outPoints[i].stateJudge.comment);
            }
            EditorGUILayout.EndVertical();
            //高さのプラス
            rect.height += 44;
            rect.height += 18;
        }
    }