Exemple #1
0
        protected override BTNodeStatus OnUpdate(IAgent agent, Blackboard bb)
        {
            //内部条件检测未通过
            if (InternalCondition(agent, bb) == false)
            {
                return(BTNodeStatus.Failed);
            }

            //第一次执行此行为
            if (mCurrentState == ActionStateEnum.FirstIn)
            {
                OnEnter(agent, bb);
                mCurrentState = ActionStateEnum.NotFirstIn;
            }
            BTNodeStatus status = BTNodeStatus.Finished;

            //非第一次执行此行为
            if (mCurrentState == ActionStateEnum.NotFirstIn)
            {
                status = OnExcute(agent, bb);
            }
            //若当前行为为持续性行为
            if (status == BTNodeStatus.Running)
            {
                return(status);//返回 Running
            }
            //当前行为已结束(非持续性行为)
            else
            {
                //善后工作(执行退出 + 标志位重置)
                OnReset(agent, bb);
                return(status);//返回 Finished
            }
        }
        public override BTNodeStatus Tick()
        {
            if (!checkFunction())
            {
                return(BTNodeStatus.succes);
            }
            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus result = node.Tick();

                switch (result)
                {
                case BTNodeStatus.failed:
                    return(BTNodeStatus.failed);

                case BTNodeStatus.running:
                    return(BTNodeStatus.running);

                case BTNodeStatus.succes:
                    //only at succes it moves on to the next task
                    break;

                default:
                    break;
                }
            }

            return(BTNodeStatus.succes);
        }
Exemple #3
0
    protected override BTRunningStatus DoTick(BTInput input, ref BTOutput output)
    {
        BTRunningStatus runningStatus = base.DoTick(input, ref output);

        switch (_status)
        {
        case BTNodeStatus.Ready:
            DoEnter(input);
            _needExit = true;
            _status   = BTNodeStatus.Running;
            SetActiveNode(this);
            break;

        case BTNodeStatus.Running:
            runningStatus = DoExecute(input, ref output);
            SetActiveNode(this);
            if (runningStatus == BTRunningStatus.Finish || runningStatus == BTRunningStatus.Error)
            {
                _status = BTNodeStatus.Finish;
            }
            break;

        case BTNodeStatus.Finish:
            if (_needExit)
            {
                DoExit(input, runningStatus);
            }
            _status   = BTNodeStatus.Ready;
            _needExit = false;
            SetActiveNode(null);
            break;
        }

        return(runningStatus);
    }
Exemple #4
0
 public override BTNodeStatus OnUpdate(FixPoint delta_time)
 {
     m_status = BTNodeStatus.True;
     if (m_children == null)
     {
         return(m_status);
     }
     for (; m_index < m_children.Count; ++m_index)
     {
         BTNodeStatus status = m_children[m_index].OnUpdate(delta_time);
         if (status == BTNodeStatus.Running)
         {
             return(status);
         }
         else if (status == BTNodeStatus.False)
         {
             m_status = status;
         }
     }
     if (m_index == m_children.Count)
     {
         m_index = 0;
     }
     return(m_status);
 }
Exemple #5
0
 public override void ResetNode()
 {
     base.ResetNode();
     m_status_backup = BTNodeStatus.True;
     m_is_running    = false;
     ResetRuntimeData();
 }
Exemple #6
0
        public override BTNodeStatus OnUpdate(FixPoint delta_time)
        {
            if (m_children == null)
            {
                m_status = BTNodeStatus.False;
                return(m_status);
            }
            m_status = BTNodeStatus.Running;
            if (m_variable_id != -1)
            {
                m_context.SetData(m_variable_id, (FixPoint)m_i);
            }
            BTNodeStatus child_status = m_children[0].OnUpdate(delta_time);

            if (child_status != BTNodeStatus.Running)
            {
                ++m_i;
                if (m_i >= m_n)
                {
                    m_status = BTNodeStatus.True;
                    m_i      = 0;
                }
            }
            return(m_status);
        }
Exemple #7
0
 public virtual void ResetNode()
 {
     m_status = BTNodeStatus.Unreach;
     if (m_children != null)
     {
         for (int i = 0; i < m_children.Count; ++i)
         {
             m_children[i].ResetNode();
         }
     }
 }
Exemple #8
0
    protected override void DoTransition(BTInput _input)
    {
        base.DoTransition(_input);
        if (_needExit)
        {
            DoExit(_input, BTRunningStatus.Error);
        }

        SetActiveNode(null);
        _status   = BTNodeStatus.Ready;
        _needExit = false;
    }
        public override BTNodeStatus Tick()
        {
            BTNodeStatus result = inputNodes[currentAction].Tick();

            if (currentAction == inputNodes.Length - 1 || currentAction == 0)
            {
                goingUp = !goingUp;
            }
            currentAction += (goingUp)? 1 : -1;

            return(result);
        }
        public override bool CanActivate()
        {
            if (m_behavior_tree == null)
            {
                return(false);
            }
            if (!m_behavior_tree.HasEntry(BTEntry_CanActivate))
            {
                return(true);
            }
            BTNodeStatus bt_status = m_behavior_tree.RunOnce(BTEntry_CanActivate);

            return(bt_status == BTNodeStatus.True);
        }
Exemple #11
0
 protected override BTNodeStatus Decorate(BTNodeStatus status)
 {
     if (status == BTNodeStatus.False)
     {
         return(BTNodeStatus.True);
     }
     else if (status == BTNodeStatus.True)
     {
         return(BTNodeStatus.False);
     }
     else
     {
         return(status);
     }
 }
Exemple #12
0
        public override BTNodeStatus OnUpdate(FixPoint delta_time)
        {
            BTNodeStatus status = BTNodeStatus.False;

            if (CanExecute())
            {
                if (m_children != null)
                {
                    status = m_children[0].OnUpdate(delta_time);
                }
                status = this.Decorate(status);
                PrepareForNextExecute();
            }
            m_status = status;
            return(m_status);
        }
Exemple #13
0
        public override BTNodeStatus Run()
        {
            foreach (BTBaseNode node in nodes)
            {
                BTNodeStatus result = node.Run();
                switch (result)
                {
                case BTNodeStatus.Failed: return(BTNodeStatus.Failed);

                case BTNodeStatus.Success: continue;

                case BTNodeStatus.Running: return(BTNodeStatus.Running);
                }
            }
            return(BTNodeStatus.Success);
        }
    public override BTNodeStatus Tick()
    {
        BTNodeStatus _status = decoratedNode.Tick();

        if (_status == BTNodeStatus.Failed)
        {
            return(BTNodeStatus.Success);
        }
        else if (_status == BTNodeStatus.Success)
        {
            return(BTNodeStatus.Failed);
        }
        else
        {
            return(BTNodeStatus.Running);
        }
    }
Exemple #15
0
    public override BTNodeStatus Run()
    {
        for (; i < nodes.Length; i++)
        {
            BTNodeStatus result = nodes[i].Run();
            switch (result)
            {
            case BTNodeStatus.Failed: return(BTNodeStatus.Failed);

            case BTNodeStatus.Success: txt.text = nodes[i].GetType().Name; continue;

            case BTNodeStatus.Running: txt.text = nodes[i].GetType().Name; return(BTNodeStatus.Running);
            }
        }
        i = 0;
        return(BTNodeStatus.Success);
    }
Exemple #16
0
    public override BTNodeStatus Tick()
    {
        foreach (BTNode _node in inputNodes)
        {
            BTNodeStatus _result = _node.Tick();
            switch (_result)
            {
            case BTNodeStatus.Failed:
            case BTNodeStatus.Running:
                return(_result);

            case BTNodeStatus.Success:
                continue;
            }
        }
        return(BTNodeStatus.Success);
    }
Exemple #17
0
        public override BTNodeStatus Tick()
        {
            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus status = node.Tick();
                switch (status)
                {
                case BTNodeStatus.Failed:
                    continue;

                case BTNodeStatus.Running:
                case BTNodeStatus.Succes:
                    return(status);
                }
            }
            return(BTNodeStatus.Succes);
        }
Exemple #18
0
        public override BTNodeStatus OnUpdate(FixPoint delta_time)
        {
            m_status = m_status_backup;
            BTActionBuffer action_buffer = m_context.GetActionBuffer();

            action_buffer.AddCurrentActions(this);
            if (m_is_running)
            {
                UpdateAction(delta_time);
            }
            else
            {
                EnterAction();
            }
            m_status_backup = m_status;
            return(m_status);
        }
Exemple #19
0
        public override BTNodeStatus Tick()
        {
            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus result = node.Tick();
                switch (result)
                {
                case BTNodeStatus.Failed:
                    continue;

                case BTNodeStatus.Running:
                    return(BTNodeStatus.Running);    //kan ook "return result"

                case BTNodeStatus.Succes:
                    return(BTNodeStatus.Succes);    //kan ook "return result"
                }
            }
            return(BTNodeStatus.Failed);
        }
        public override BTNodeStatus Tick()
        {
            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus result = (interruptWhen.Invoke())? interruptBehaviour.Tick() : node.Tick();

                switch (result)
                {
                case BTNodeStatus.Failed:
                case BTNodeStatus.Running:
                    return(result);

                case BTNodeStatus.Succes:
                    continue;
                }
            }

            return(BTNodeStatus.Succes);
        }
        public BTNodeStatus RunOnce(int entrty_id)
        {
            int new_index = EntryID2Index(entrty_id);

            if (new_index == -1)
            {
                return(BTNodeStatus.True);
            }
            BTActionBuffer action_buffer = m_context.GetActionBuffer();

            //ZZWTODO m_context的数据
            action_buffer.Backup();
            BTNodeStatus result = m_children[new_index].OnUpdate(FixPoint.Zero);

            action_buffer.SwapActions();
            action_buffer.ExitAllAction();
            action_buffer.Restore();
            m_children[new_index].ClearRunningTrace();
            return(result);
        }
Exemple #22
0
        public override BTNodeStatus Tick()
        {
            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus result = node.Tick();

                switch (result)
                {
                case BTNodeStatus.failed:
                    continue;

                case BTNodeStatus.running:
                    return(BTNodeStatus.running);

                case BTNodeStatus.succes:
                    return(BTNodeStatus.succes);
                }
            }

            return(BTNodeStatus.failed);
        }
        public override BTNodeStatus Tick()
        {
            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus result = node.Tick();

                switch (result)
                {
                case BTNodeStatus.failed:
                    continue;

                //if the task fails, move to the next task until it isnt failing
                case BTNodeStatus.running:
                    return(BTNodeStatus.running);

                case BTNodeStatus.succes:
                    return(BTNodeStatus.succes);
                }
            }

            return(BTNodeStatus.failed);
        }
        public override BTNodeStatus Tick()
        {
            blackBoard.robot.Out.WriteLine("Checked func<bool>");
            if (!ifThisIsTrue.Invoke())
            {
                return(BTNodeStatus.Failed);
            }

            foreach (BTNode node in inputNodes)
            {
                BTNodeStatus result = node.Tick();
                switch (result)
                {
                case BTNodeStatus.Failed:
                case BTNodeStatus.Running:
                    return(result);

                case BTNodeStatus.Succes:
                    continue;
                }
            }

            return(BTNodeStatus.Succes);
        }
 public void UpdateBT(NodeBase rootNode, IAgent agent, Blackboard bb)
 {
     BTNodeStatus status = rootNode.Update(agent, bb);
     //HTLogger.Debug(string.Format("根节点为:{0}的行为树运行状态为:{1}", rootNode, status));
 }
Exemple #26
0
 protected virtual BTNodeStatus Decorate(BTNodeStatus status)
 {
     return(status);
 }
Exemple #27
0
 public BTAction(BTAction prototype)
     : base(prototype)
 {
     m_status_backup = BTNodeStatus.True;
     m_is_running    = false;
 }
Exemple #28
0
 public BTAction()
 {
     m_status_backup = BTNodeStatus.True;
     m_is_running    = false;
 }
Exemple #29
0
 protected override BTNodeStatus Decorate(BTNodeStatus status)
 {
     return(BTNodeStatus.True);
 }
Exemple #30
0
 public BTActionNodeBase() : base()
 {
     _status       = BTNodeStatus.Ready;
     _isActiveNode = true;
     _needExit     = false;
 }