예제 #1
0
        private void InitializeNode()
        {
            if (editorNodes == null)
            {
                editorNodes = new List <EditorNode <NodeData> >();
            }

            editorNodes.Clear();

            if (selected == null)
            {
                return;
            }

            for (int i = 0; i < selected.advancedStates.Count; i++)
            {
                AdvancedState state = selected.advancedStates[i];

                CreateStateNode(state, new Vector2(30.0f + (i * 10.0f), 30.0f + (i * 10.0f)), state.ID);
            }

            for (int i = 0; i < Transitions.Length; i++)
            {
                CreateTransitionNode(Transitions[i], new Vector2(60.0f + (i * 10.0f), 30.0f + (i * 10.0f)), Transitions[i].ID);
            }
        }
        public EditorNode <NodeData> FindNodeByState(AdvancedState state)
        {
            if (state == null)
            {
                return(null);
            }

            if (state.ID == null)
            {
                return(null);
            }

            for (int i = 0; i < editorNodes.Count; i++)
            {
                if (editorNodes[i].myData.type != NodeType.STATE)
                {
                    continue;
                }

                if (editorNodes[i].myData.state.ID == state.ID)
                {
                    return(editorNodes[i]);
                }
            }

            return(null);
        }
예제 #3
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        DisplayScriptField();

        if (GUILayout.Button("ceshi"))
        {
            LogConsole.Log(allStates.arraySize);
            for (int i = 0; i < allStates.arraySize; ++i)
            {
                SerializedProperty elem = allStates.GetArrayElementAtIndex(i);
                LogConsole.Log(elem.name + " " + elem.type);
                while (elem.Next(true))
                {
                    LogConsole.Log(elem.name + " " + elem.type);
                }
            }
        }

        EditorGUILayout.LabelField("allStates");
        int count = allStates.arraySize;

        for (int i = 0; i < count; ++i)
        {
            EditorGUILayout.BeginHorizontal();
            GUILayout.Space(10f);
            EditorGUILayout.BeginVertical();
            EditorGUILayout.LabelField("element " + i);
            SerializedProperty elem = allStates.GetArrayElementAtIndex(i);
            if (target.allStates[i] is BaseState)
            {
                BaseState state = target.allStates[i] as BaseState;
                state.s = EditorGUILayout.TextField("s = ", state.s);
            }
            if (target.allStates[i] is AdvancedState)
            {
                AdvancedState state = target.allStates[i] as AdvancedState;
                state.i = EditorGUILayout.IntField("i = ", state.i);
            }
            if (target.allStates[i] is AnotherState)
            {
                AnotherState state = target.allStates[i] as AnotherState;
                state.f = EditorGUILayout.FloatField("f = ", state.f);
            }
            if (target.allStates[i] is AnotherAdvancedState)
            {
                AnotherAdvancedState state = target.allStates[i] as AnotherAdvancedState;
                state.b = EditorGUILayout.Toggle("b = ", state.b);
            }
            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();
        }

        serializedObject.ApplyModifiedProperties();
    }
예제 #4
0
        private EditorNode <NodeData> CreateStateNode(AdvancedState state, Vector2 position, string title)
        {
            EditorNode <NodeData> node = new EditorNode <NodeData>(new NodeData(NodeType.STATE, state, null)
                                                                   , editorNodes.Count
                                                                   , new Rect(position.x - (NODE_WIDTH * 0.5f), position.y - (NODE_HEIGHT * 0.5f), NODE_WIDTH, NODE_HEIGHT)
                                                                   , title
                                                                   , (GUIStyle)"flow node hex 4", (GUIStyle)"flow node hex 4 on"
                                                                   , OnStateNodeGenericMenu);

            editorNodes.Add(node);

            return(node);
        }
예제 #5
0
 public void SelectNodeByState(AdvancedState state)
 {
     for (int i = 0; i < editorNodes.Count; i++)
     {
         if (editorNodes[i].myData.type == NodeType.STATE)
         {
             if (editorNodes[i].myData.state.ID == state.ID)
             {
                 SelectNode(editorNodes[i]);
                 return;
             }
         }
     }
 }
    public void Test()
    {
        StateMachineTemplate template = ScriptableObject.CreateInstance <StateMachineTemplate>();

        template.allStates = new List <BaseState>();
        AdvancedState        advancedState        = new AdvancedState();
        AnotherState         anotherState         = new AnotherState();
        AnotherAdvancedState anotherAdvancedState = new AnotherAdvancedState();
        BaseState            baseState            = new BaseState();

        template.allStates.Add(advancedState);
        template.allStates.Add(anotherState);
        template.allStates.Add(anotherAdvancedState);
        template.allStates.Add(baseState);
        AssetDatabase.CreateAsset(template, "Assets/State.asset");
    }
예제 #7
0
 public NodeData(NodeType type, AdvancedState state, AdvancedTransition transition)
 {
     this.type       = type;
     this.state      = state;
     this.transition = transition;
 }