public BTreeNodePreconditionNOT(BTreeNodePrecondition _precondition)
 {
     if (_precondition == null)
     {
         Debugger.Log("BTreeNodePreconditionNOT is null");
     }
     m_Precondition = _precondition;
 }
示例#2
0
 public BTreeNodeNonePrioritySelector(BTreeNode _parentNode, BTreeNodePrecondition _precondition = null)
     : base(_parentNode, _precondition)
 {
 }
示例#3
0
 public BTreeNodeCtrl(BTreeNode _parentNode, BTreeNodePrecondition _precondition = null)
     : base(_parentNode, _precondition)
 {
 }
示例#4
0
 public BTreeNodeLoop(BTreeNode _parentNode, BTreeNodePrecondition _precondition = null, int _loopCount = INFINITELOOP)
     : base(_parentNode, _precondition)
 {
     m_LoopCount    = _loopCount;
     m_CurrentCount = 0;
 }
示例#5
0
 public BTreeNodeSequence(BTreeNode _parentNode, BTreeNodePrecondition _precondition = null)
     : base(_parentNode, _precondition)
 {
 }
 public BTreeNodeAction(BTreeNode _parentNode, BTreeNodePrecondition _precondition = null)
     : base(_parentNode, _precondition)
 {
     m_IsAcitonNode = true;
 }
示例#7
0
        BTreeNodePrecondition DrawPrecondition(BTreeNodePrecondition _condition, int _space, ref int index)
        {
            index = index + 1;
            BTreeNodePrecondition result = null;

            if (_condition == null)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Space(_space);

                m_Precondition[index] = EditorGUILayout.ObjectField("", m_Precondition[index], typeof(MonoScript), false);
                if (m_Precondition[index] != null)
                {
                    Type type = GetPreconditionType(m_Precondition[index].name);
                    if (type == null)
                    {
                        m_Precondition[index] = null;
                        return(_condition);
                    }
                    result = (BTreeNodePrecondition)type.GetConstructor(new Type[] { }).Invoke(new object[] { });
                }
                GUILayout.EndHorizontal();
            }
            else
            {
                m_Precondition[index] = null;
                GUILayout.BeginHorizontal();
                GUILayout.Space(_space);
                string[] scripts = AssetDatabase.FindAssets("t:Script " + _condition.GetType().Name);
                if (scripts.Length > 0)
                {
                    string     path       = AssetDatabase.GUIDToAssetPath(scripts[0]);
                    MonoScript monoScript = (MonoScript)AssetDatabase.LoadAssetAtPath(path, typeof(MonoScript));
                    var        obj        = EditorGUILayout.ObjectField("", monoScript, typeof(MonoScript), false);
                    Type       type       = GetPreconditionType(obj.name);
                    if (type == null)
                    {
                        return(_condition);
                    }
                    result = (BTreeNodePrecondition)type.GetConstructor(new Type[] { }).Invoke(new object[] { });
                }
                GUILayout.EndHorizontal();
                _space = _space + SPACEDETLE;

                BTreeNodePrecondition _lastPreCondition = _condition;
                if (result is BTreeNodePreconditionAND)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(_space);
                    int childCount = 0;
                    if (_lastPreCondition is BTreeNodePreconditionAND)
                    {
                        BTreeNodePreconditionAND _lastCondAND = (BTreeNodePreconditionAND)_lastPreCondition;
                        childCount = _lastCondAND.GetChildPreconditionCount();
                    }
                    var val = EditorGUILayout.IntField(childCount);
                    GUILayout.EndHorizontal();

                    if (_lastPreCondition is BTreeNodePreconditionAND)
                    {
                        BTreeNodePreconditionAND _lastCondAND          = (BTreeNodePreconditionAND)_lastPreCondition;
                        BTreeNodePrecondition[]  childPreconditions    = new BTreeNodePrecondition[val];
                        BTreeNodePrecondition[]  curChildPreconditions = _lastCondAND.GetChildPrecondition();
                        for (int i = 0; i < val; i++)
                        {
                            BTreeNodePrecondition _cond = null;
                            if (curChildPreconditions.Length >= i + 1)
                            {
                                _cond = curChildPreconditions[i];
                            }
                            childPreconditions[i] = DrawPrecondition(_cond, _space, ref index);
                        }
                        ((BTreeNodePreconditionAND)result).SetChildPrecondition(childPreconditions);
                    }
                    else
                    {
                        BTreeNodePrecondition[] childPreconditions = new BTreeNodePrecondition[val];
                        for (int i = 0; i < val; i++)
                        {
                            childPreconditions[i] = DrawPrecondition(null, _space, ref index);
                        }
                        ((BTreeNodePreconditionAND)result).SetChildPrecondition(childPreconditions);
                    }
                }
                else if (result is BTreeNodePreconditionOR)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(_space);
                    int childCount = 0;
                    if (_lastPreCondition is BTreeNodePreconditionOR)
                    {
                        BTreeNodePreconditionOR _lastCondOR = (BTreeNodePreconditionOR)_lastPreCondition;
                        childCount = _lastCondOR.GetChildPreconditionCount();
                    }
                    var val = EditorGUILayout.IntField(childCount);
                    GUILayout.EndHorizontal();

                    if (_lastPreCondition is BTreeNodePreconditionOR)
                    {
                        BTreeNodePreconditionOR _lastCondOR           = (BTreeNodePreconditionOR)_lastPreCondition;
                        BTreeNodePrecondition[] childPreconditions    = new BTreeNodePrecondition[val];
                        BTreeNodePrecondition[] curChildPreconditions = _lastCondOR.GetChildPrecondition();
                        for (int i = 0; i < val; i++)
                        {
                            BTreeNodePrecondition _cond = null;
                            if (curChildPreconditions.Length >= i + 1)
                            {
                                _cond = curChildPreconditions[i];
                            }
                            childPreconditions[i] = DrawPrecondition(_cond, _space, ref index);
                        }
                        ((BTreeNodePreconditionOR)result).SetChildPrecondition(childPreconditions);
                    }
                    else
                    {
                        BTreeNodePrecondition[] childPreconditions = new BTreeNodePrecondition[val];
                        for (int i = 0; i < val; i++)
                        {
                            childPreconditions[i] = DrawPrecondition(null, _space, ref index);
                        }
                        ((BTreeNodePreconditionOR)result).SetChildPrecondition(childPreconditions);
                    }
                }
                else if (result is BTreeNodePreconditionNOT)
                {
                    BTreeNodePrecondition curChildPreconditions = null;
                    if (_lastPreCondition is BTreeNodePreconditionNOT)
                    {
                        BTreeNodePreconditionNOT _lastCondNOT = (BTreeNodePreconditionNOT)_lastPreCondition;
                        curChildPreconditions = _lastCondNOT.GetChildPrecondition();
                    }
                    curChildPreconditions = DrawPrecondition(curChildPreconditions, _space, ref index);
                    ((BTreeNodePreconditionNOT)result).SetChildPrecondition(curChildPreconditions);
                }
            }

            return(result);
        }
 public void SetChildPrecondition(BTreeNodePrecondition _precondition)
 {
     m_Precondition = _precondition;
 }