예제 #1
0
    private void UpdateStateInfoFields()
    {
        _stateInfoNode = FindStateInfoNode();

        if (_stateInfoNode == null)
        {
            Debug.LogError("Must have a state info node!");
            return;
        }

        var fields = _stateInfoNode.StateInfo.GetType().GetFields();

        _stateInfoFields = fields.Where(x => x.FieldType == typeof(int) ||
                                        x.FieldType == typeof(float) || x.FieldType == typeof(bool)).ToArray();
    }
예제 #2
0
    private void InitCondition()
    {
        if (Conditions == null)
        {
            Conditions = CreateInstance <MutiConditionEditor> ();
        }

        _stateInfoNode = FindStateInfoNode();

        _serializedObject = new SerializedObject(Conditions);

        _conditionEditorList = new ReorderableList(_serializedObject,
                                                   _serializedObject.FindProperty("Conditions"), true, true, true, true);
        _conditionEditorList.drawElementCallback = DisplayConditionElement;
        _conditionEditorList.drawHeaderCallback  = DisplayConditionHealder;
        _conditionEditorList.onAddCallback       = CreateConditionEditor;
    }
예제 #3
0
    private void SetStateMethods()
    {
        _stateInfoNode = FindStateInfoNode();

        if (_stateInfoNode == null)
        {
            return;
        }
        if (_stateInfoNode.StateScript == null)
        {
            return;
        }

        if (StateMethods == null)
        {
            StateMethods = new Dictionary <string, string> ();
        }
        StateMethods.Clear();

        var methods = _stateInfoNode.StateScript.GetType().GetMethods(BindingFlags.Instance |
                                                                      BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic);

        for (int i = 0; i < methods.Length; i++)
        {
            if (methods[i].GetCustomAttributes(typeof(CompilerGeneratedAttribute), true).Length != 0)
            {
                continue;
            }

            int lastIdx = methods[i].Name.LastIndexOf('_');

            if (lastIdx < 0)
            {
                continue;
            }

            if (methods[i].Name.Substring(0, lastIdx) != StateName)
            {
                continue;
            }

            switch (methods[i].Name.Substring(lastIdx + 1))
            {
            case "Enter":
                StateMethods["Enter"] = methods[i].Name;
                break;

            case "Exit":
                StateMethods["Exit"] = methods[i].Name;
                break;

            case "Finally":
                StateMethods["Finally"] = methods[i].Name;
                break;

            case "Update":
                StateMethods["Update"] = methods[i].Name;
                break;

            case "LateUpdate":
                StateMethods["LateUpdate"] = methods[i].Name;
                break;

            case "FixedUpdate":
                StateMethods["FixedUpdate"] = methods[i].Name;
                break;
            }
        }
    }