Beispiel #1
0
 public void Dispose()
 {
     Abort();
     Parent = null;
     mRoot  = null;
     Runner = null;
 }
        public void UnregisterNode(long nodeID)
        {
            IBTNode node = null;

            _treeNodes.TryGetAndRemove(nodeID, out node);
            if (node != null)
            {
                node.NodeErrorEvent -= OnNodeErrorMessageHandler;
                this.ResetEvent     -= node.Reset;

                IBTNode[] allNodes = _treeNodes.GetValues();
                for (int i = 0; i < allNodes.Length; i++)
                {
                    IBTComposite cNode = allNodes[i] as IBTComposite;
                    if (cNode != null)
                    {
                        bool removed = cNode.RemoveChildNode(node);
                        if (removed)
                        {
                            return;
                        }
                    }
                }
            }
        }
    public override void Execute()
    {
        if (curIndex >= mNodeList.Count)
        {
            mStatus = BTStatus.Success;
            mTree.SetCurNode(mParent);
            return;
        }
        IBTNode node = mNodeList[curIndex];

        // If the node is Running, means haven't been started yet.
        // If node has already been set, this part won't run until the node returns success.
        if (node.Status == BTStatus.Running)
        {
            mTree.SetCurNode(node);
        }
        // If the node succeded, the node would have set this sequence to curNode in BehaviourTree.
        // When it comes around,
        else if (node.Status == BTStatus.Success)
        {
            curIndex++;
        }
        // If the node has failed, exit sequence.
        else if (node.Status == BTStatus.Failure)
        {
            mStatus = BTStatus.Failure;
            mTree.SetCurNode(mParent);
        }
    }
Beispiel #4
0
 public bool RemoveChildNode(IBTNode node)
 {
     if (node == null)
     {
         return(false);
     }
     return(_nodes.Remove(node));
 }
Beispiel #5
0
    private IBTCondition CreateCondition(XmlNode node)
    {
        string conditionClassName = node.Attributes["name"].Value;
        //Debug.Log("Creating condition " + conditionClassName);
        IBTNode btNode = (IBTNode)CreateReflectionObject(conditionClassName);

        return((IBTCondition)btNode);
    }
Beispiel #6
0
 public bool RemoveChildNode(IBTNode node)
 {
     if (_childNode != null && _childNode == node)
     {
         _childNode = null;
         return(true);
     }
     return(false);
 }
Beispiel #7
0
        public void AddChildNode(params IBTNode[] nodes)
        {
            if (nodes != null && nodes.Length == 0)
            {
                return;
            }
            if (nodes[0] == null || nodes[0] == this)
            {
                return;
            }

            _childNode = nodes[0];
        }
        public void RegisterNode(IBTNode node)
        {
            if (node != null)
            {
                ResetEvent -= node.Reset;
                ResetEvent += node.Reset;

                node.NodeErrorEvent -= OnNodeErrorMessageHandler;
                node.NodeErrorEvent += OnNodeErrorMessageHandler;

                _treeNodes[node.UniqueID] = node;
            }
        }
Beispiel #9
0
        void EditorAccess(IBTNode node)
        {
            mEditorAccessed.Add(node);
            var p = this;

            while (p != null)
            {
                p.mEditorAccessedDeep.Add(node);
                if (p == mRoot)
                {
                    break;
                }
                p = p.Parent;
            }
        }
Beispiel #10
0
    private IBTNode CreateBtNode(XmlNode node)
    {
        IBTNode btNode = null;

        switch (node.Name)
        {
        case "action":
            btNode = CreateAction(node);
            break;

        case "condition":
            btNode = CreateCondition(node);
            break;
        }
        return(btNode);
    }
Beispiel #11
0
    void Awake()
    {
        m_Animator  = GetComponent <Animator>();
        m_Transform = gameObject.transform;
        m_RigidBody = GetComponent <Rigidbody2D>();

        m_State = new State();

        m_SingleCollider.OnTriggerEnter = EnteredCollision;
        m_SingleCollider.OnTriggerExit  = ExitCollision;

        m_Context        = CreateClassContext();
        m_BehaviourTree  = GetNode();
        m_AnimationState = new AnimationState(m_Animator);
        m_InputState     = new InputState();
    }
Beispiel #12
0
    public void Start()
    {
        //m_Animator = GetComponent<Animator>();

        m_Transform = transform;
        m_RigidBody = GetComponent <Rigidbody2D>();

        m_HitBoxCollider.OnTriggerEnter = PlayerEnteredAttackRange;
        m_FrontCollider.OnTriggerEnter  = PlayerEnteredAttackRange;
        m_FrontCollider.OnTriggerExit   = PlayerExitedAttackRange;

        m_NextWaypoint = m_StartWaypoint;

        m_BehaviourTree = GetNode();
        m_State         = new State();
        m_Context       = CreateClassContext();
    }
        public void Clear()
        {
            Stop();
            ResetEvent?.Invoke(this, null);

            IBTNode[] allNodes = _treeNodes.GetValues();
            for (int i = 0; i < allNodes.Length; i++)
            {
                IBTNode cNode = allNodes[i];
                if (cNode != null)
                {
                    cNode.NodeErrorEvent -= OnNodeErrorMessageHandler;
                    this.ResetEvent      -= cNode.Reset;
                }
            }
            _treeNodes.Clear();
        }
Beispiel #14
0
    private IBTNode CreateTreeFromXML(XmlNodeList xmlChildren)
    {
        IBTSequencer btNode = new BTSequencer();

        foreach (XmlNode node in xmlChildren)
        {
            if (node.ChildNodes.Count > 0)
            {
                IBTNode childrenNode = CreateTreeFromXML(node.ChildNodes);
                btNode.AppendNode(CreateBtNode(node, childrenNode));
            }
            else
            {
                btNode.AppendNode(CreateBtNode(node));
            }
        }
        return(btNode);
    }
Beispiel #15
0
    private IBTNode CreateBtNode(XmlNode node, IBTNode children)
    {
        IBTNode btNode = null;

        switch (node.Name)
        {
        case "sequence":
            btNode = CreateSequence(node).AppendNode(children);
            break;

        case "inverter":
            btNode = CreateInverter(node).SetNode(children);
            break;

        case "positiveSequence":
            btNode = CreatePositiveSequence(node).AppendNode(children);
            break;
        }
        return(btNode);
    }
 public IBTPositiveSequencer AppendNode(IBTNode node)
 {
     this.childNodes.Add(node);
     return(this);
 }
Beispiel #17
0
 public IBTInvertor SetNode(IBTNode node)
 {
     childNode = node;
     return(this);
 }
 public void SetCurNode(IBTNode _newCurNode)
 {
     mCurNode = _newCurNode;
 }
Beispiel #19
0
 public IBTSelector AppendNode(IBTNode node)
 {
     this.childNodes.Add(node);
     return(this);
 }
Beispiel #20
0
 public void SetBehaviuor(IBTNode root)
 {
     Abort();
     mRoot      = root;
     IsComplate = Runner != null && mRoot == null;
 }
 public bool RemoveChildNode(IBTNode node)
 {
     return(_rootSelector.RemoveChildNode(node));
 }
Beispiel #22
0
 public BTRoot(IBTNode node)
 {
     this.node = node;
 }
 private void ResetTree()
 {
     mCurNode = mRootNode;
     mCurNode.ResetNode();
 }
Beispiel #24
0
 public void SetParent(IBTNode _mParent)
 {
     mParent = _mParent;
 }
 public BehaviourTree(IBTNode _rootNode)
 {
     mRootNode = _rootNode;
     mRootNode.SetTree(this);
     ResetTree();
 }