Пример #1
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (OnAction == null)
            {
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            BehaviorResult result = OnAction();

            if (result == BehaviorResult.success)
            {
                SetCompleted();
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
            }

            return(result);
        }
        public static void ShowTree(IBehaviorTree tree, string name)
        {
            var window = GetWindow <BehaviorTreeWindow>(false);

            window.titleContent = new GUIContent($"Behavior Tree: {name}");
            window.SetTree(tree, name);
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (ActionNode == null)
            {
                // Debug.LogError("missing action node");
                return(BehaviorResult.failed);
            }

            SetStarting();

            BehaviorResult result = ActionNode.Exec(tree);

            if (result == BehaviorResult.success)
            {
                SetCompleted();
                return(BehaviorResult.success);
            }
            else if (result == BehaviorResult.running)
            {
                return(BehaviorResult.running);
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
            else
            {
                SetAborted();
                return(BehaviorResult.abort);
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                return(BehaviorResult.failed);
            }

            SetStarting();

            BehaviorResult result = TargetNode.Exec(tree);

            if (result == BehaviorResult.success)
            {
                SetCompleted();
                return(BehaviorResult.success);
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
            else if (result == BehaviorResult.running)
            {
                return(BehaviorResult.running);
            }

            SetAborted();
            return(BehaviorResult.abort);
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (OnAction == null)
            {
                // Debug.LogError("missing action event method");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            OnAction();

            SetCompleted();
            return(BehaviorResult.success);
        }
Пример #6
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (m_ChildNodes.Count == 0)
            {
                // Debug.LogError("missing sequence children node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        SetFailed();
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            if (nodes == null)
            {
                nodes = new List <BehaviorNode>(m_ChildNodes);
                nodes.Sort(delegate(BehaviorNode x, BehaviorNode y) { return(tree.RandomMgr.Next(-1, 1)); });
            }

            while (true)
            {
                if (currentIndex >= nodes.Count)
                {
                    break;
                }

                BehaviorResult result = nodes[currentIndex].Exec(tree);

                if (result == BehaviorResult.running)
                {
                    return(BehaviorResult.running);
                }
                else if (result == BehaviorResult.failed)
                {
                    SetFailed();
                    return(BehaviorResult.failed);
                }
                else if (result == BehaviorResult.success)
                {
                    currentIndex++;
                    if (currentIndex == m_ChildNodes.Count)
                    {
                        SetCompleted();
                        return(result);
                    }
                }
            }
            SetCompleted();
            return(BehaviorResult.success);
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                //Debug.LogError("missing target node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            if (N == 0.0f)
            {
                N = tree.GameTime;
            }
            BehaviorResult result = TargetNode.Exec(tree);

            if (result == BehaviorResult.success)
            {
                SetCompleted();
                N = 0.0f;
                return(BehaviorResult.success);
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
            else if (result == BehaviorResult.running)
            {
                if (tree.GameTime - N < Interval)
                {
                    return(BehaviorResult.running);
                }
                else
                {
                    TargetNode.Abort();
                    N = 0.0f;
                    return(BehaviorResult.failed);
                }
            }
            else
            {
                return(BehaviorResult.abort);
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (m_ChildNodes.Count == 0)
            {
                return(BehaviorResult.failed);
            }

            SetStarting();

            while (true)
            {
                if (curNode == null)
                {
                    curNode = CheckPreconditionChild();
                }
                if (curNode != null)
                {
                    //每次都重新检查子节点条件
                    BehaviorWithPreconditonNode newNode = CheckPreconditionChild();
                    if (newNode != curNode)
                    {
                        curNode.Abort();

                        curNode = newNode;

                        if (curNode == null)
                        {
                            // 等待到下一帧再跳到循环开头继续检测
                            return(BehaviorResult.running);
                        }
                    }

                    BehaviorResult result = curNode.Exec(tree);

                    if (result == BehaviorResult.success)
                    {
                        SetCompleted();
                        return(BehaviorResult.success);
                    }
                    else if (result == BehaviorResult.failed)
                    {
                        // 子节点执行失败时不退出,继续选择
                        curNode = null;
                        return(BehaviorResult.running);
                    }
                    else if (result == BehaviorResult.running)
                    {
                        return(BehaviorResult.running);// 等待一帧
                    }
                }
                else
                {
                    return(BehaviorResult.running);
                }
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (m_ChildNodes.Count == 0)
            {
                // Debug.LogError("missing select children node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            // 概率
            if (Probability == -1)
            {
                Probability = tree.RandomMgr.Next(0, 100);
            }

            while (true)
            {
                if (currentIndex >= m_RunningNodes.Count)
                {
                    break;
                }
                if (Probability <= (m_RunningNodes[currentIndex] as BehaviorProbabilityWeightNode).Weight)
                {
                    BehaviorResult result = m_RunningNodes[currentIndex].Exec(tree);

                    if (result == BehaviorResult.success)
                    {
                        SetCompleted();
                        return(BehaviorResult.success);
                    }
                    else if (result == BehaviorResult.running)
                    {
                        return(BehaviorResult.running);
                    }
                    else if (result == BehaviorResult.failed)
                    {
                        currentIndex++;
                    }
                }
            }
            SetFailed();
            return(BehaviorResult.failed);
        }
Пример #10
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (m_ChildNodes.Count == 0)
            {
                // Debug.LogError("missing sequence children node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        SetFailed();
                        return(BehaviorResult.failed);
                    }
                }
                SetStarting();
            }

            // var runingNode = m_ChildNodes[currentIndex];
            while (true)
            {
                if (currentIndex >= m_ChildNodes.Count)
                {
                    break;
                }

                BehaviorResult result = m_ChildNodes[currentIndex].Exec(tree);
                if (result == BehaviorResult.success)
                {
                    currentIndex++;
                    if (currentIndex == m_ChildNodes.Count)
                    {
                        SetCompleted();
                        return(result);
                    }
                }
                else if (result == BehaviorResult.failed)
                {
                    SetFailed();
                    return(result);
                }
                else if (result == BehaviorResult.running)
                {
                    return(result);
                }
            }
            SetFailed();
            return(BehaviorResult.failed);
        }
Пример #11
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (OnCondition == null)
            {
                // Debug.LogError("missing condition event method");
                return(BehaviorResult.failed);
            }
            if (TrueNode == null)
            {
                //Debug.LogError("missing true node");
                return(BehaviorResult.failed);
            }
            if (FalseNode == null)
            {
                // Debug.LogError("missing false node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnCondition())
                {
                    m_BranchNode = TrueNode;
                }
                else
                {
                    m_BranchNode = FalseNode;
                }

                SetStarting();
            }

            BehaviorResult result = m_BranchNode.Exec(tree);

            if (result == BehaviorResult.success)
            {
                SetCompleted();
                return(BehaviorResult.success);
            }
            else if (result == BehaviorResult.running)
            {
                return(BehaviorResult.running);
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
            SetAborted();
            return(BehaviorResult.abort);
        }
Пример #12
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (m_ChildNodes.Count == 0)
            {
                return BehaviorResult.failed;            
            }

            if (! Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return BehaviorResult.failed;
                    }
                }

                SetStarting();
            }

            while (m_RunningList.Count > 0)
            {
                if (currentNode == null)
                {
                    int index = tree.RandomMgr.Next(0, m_RunningList.Count - 1);
                    currentNode = m_RunningList[index];
                    m_RunningList.RemoveAt(index);
                }

                BehaviorResult result = currentNode.Exec(tree);

                if(result == BehaviorResult.running)
                {
                    return BehaviorResult.running;
                }
                else if(result == BehaviorResult.success)
                {
                    SetCompleted();
                    return BehaviorResult.success;                  
                }
                else if(result == BehaviorResult.failed)
                {
                    return BehaviorResult.running;                  
                }
                
            }
            SetFailed();
            return BehaviorResult.failed;
        }
Пример #13
0
        public BehaviorTreePrinter(IBehaviorTree tree, Vector2 windowSize)
        {
            StatusIcons  = new StatusIcons();
            SharedStyles = new GuiStyleCollection();

            var container = new GraphContainerVertical();

            container.SetGlobalPosition(SCROLL_PADDING, SCROLL_PADDING);
            _root = new VisualTask(tree.Root, container);
            container.CenterAlignChildren();

            _containerSize = new Rect(0, 0,
                                      container.Width + SCROLL_PADDING * 2,
                                      container.Height + SCROLL_PADDING * 2);

            CenterScrollView(windowSize, container);
        }
Пример #14
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            while (true)
            {
                if (N == 0.0f)
                {
                    N = tree.GameTime;
                }
                while (tree.GameTime - N < CDTime)
                {
                    return(BehaviorResult.running);
                }
                BehaviorResult result = TargetNode.Exec(tree);

                if (result == BehaviorResult.success)
                {
                    Reset();
                }
                else if (result == BehaviorResult.failed)
                {
                    Reset();
                }
                else if (result == BehaviorResult.running)
                {
                    return(BehaviorResult.running);
                }
            }
        }
Пример #15
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            SetStarting();

            if (N == 0.0f)
            {
                N = tree.GameTime;
            }
            while (tree.GameTime - N < Interval)
            {
                return(BehaviorResult.running);
            }

            SetCompleted();
            N = 0.0f;
            return(BehaviorResult.success);
        }
Пример #16
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (OnConditionEvent == null)
            {
                return(BehaviorResult.failed);
            }

            SetStarting();

            if (OnConditionEvent())
            {
                SetCompleted();
                return(BehaviorResult.success);
            }
            else
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                // Debug.LogError("missing target node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            while (true)
            {
                BehaviorResult result = TargetNode.Exec(tree);

                if (result == BehaviorResult.success)
                {
                    SetCompleted();
                    return(BehaviorResult.success);
                }
                else if (result == BehaviorResult.running)
                {
                    return(BehaviorResult.running);
                }
                else if (result == BehaviorResult.failed)
                {
                    return(BehaviorResult.running);
                }
            }
        }
Пример #18
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                return(BehaviorResult.failed);
            }

            SetStarting();

            while (LoopCount < 0 || m_CounterLoop < LoopCount)
            {
                BehaviorResult result = TargetNode.Exec(tree);

                if (result == BehaviorResult.success)
                {
                    if (LoopCount > 0)
                    {
                        m_CounterLoop++;
                    }
                    //return BehaviorResult.running;
                }
                else if (result == BehaviorResult.failed)
                {
                    if (LoopCount > 0)
                    {
                        m_CounterLoop++;
                    }
                }
                else if (result == BehaviorResult.running)
                {
                    //return BehaviorResult.running;
                }
                return(BehaviorResult.running);
            }

            SetCompleted();
            return(BehaviorResult.success);
        }
Пример #19
0
        //  private IEnumerator<BehaviorResult> m_CurrentTask;

        public BehaviorTreeExecutor(IBehaviorTree owner)
        {
            m_Owner      = owner;
            m_Root       = new BehaviorRootNode();
            m_Blackboard = new BehaviorBlackboard();
        }
Пример #20
0
 public override BehaviorResult Exec(IBehaviorTree tree)
 {
     return(BehaviorResult.failed);
 }
Пример #21
0
 public override BehaviorResult Exec(IBehaviorTree tree)
 {
     return(BehaviorResult.success);
 }
Пример #22
0
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (m_ChildNodes.Count == 0)
            {
                //  Debug.LogError("missing parallel children node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            //var taskNodeMap = new Dictionary<BehaviorResult, BehaviorNode>();
            var RunnimgTaskList = new List <BehaviorNode>();
            var taskList        = new List <BehaviorResult>();

            foreach (BehaviorNode child in m_ChildNodes)
            {
                BehaviorResult task = child.Exec(tree);
                taskList.Add(task);
                if (task == BehaviorResult.running)
                {
                    RunnimgTaskList.Add(child);
                }
                //taskNodeMap[task] = child;
            }

            var tasksToKill = new List <BehaviorResult>();

            while (true)
            {
                foreach (var task in taskList)
                {
                    if (ParallelPolicy == ParallelPolicyType.FailedIfOneFaileds)
                    {
                        if (task == BehaviorResult.success)
                        {
                            tasksToKill.Add(task);
                        }
                        else if (task == BehaviorResult.running)
                        {
                            // do nothing, wait for all task MoveNext complete
                        }
                        else if (task == BehaviorResult.failed)
                        {
                            foreach (var t in RunnimgTaskList)
                            {
                                t.Abort();
                            }
                            SetFailed();
                            return(BehaviorResult.failed);
                        }
                    }
                    else if (ParallelPolicy == ParallelPolicyType.SuccessedIfOneSuccesseds)
                    {
                        if (task == BehaviorResult.success)
                        {
                            foreach (var t in RunnimgTaskList)
                            {
                                t.Abort();
                            }
                            SetCompleted();
                            return(BehaviorResult.success);
                        }
                        else if (task == BehaviorResult.running)
                        {
                            // do nothing, wait for all task MoveNext complete
                        }
                        else if (task == BehaviorResult.failed)
                        {
                            tasksToKill.Add(task);
                        }
                    }
                }
                if (tasksToKill.Count > 0)
                {
                    foreach (var t in tasksToKill)
                    {
                        taskList.Remove(t);
                    }
                    tasksToKill.Clear();
                }

                if (taskList.Count == 0)
                {
                    if (ParallelPolicy == ParallelPolicyType.FailedIfOneFaileds)
                    {
                        SetCompleted();
                        return(BehaviorResult.success);
                    }
                    else if (ParallelPolicy == ParallelPolicyType.SuccessedIfOneSuccesseds)
                    {
                        SetFailed();
                        return(BehaviorResult.failed);
                    }
                }
                else
                {
                    return(BehaviorResult.running);
                }
            }
        }
 /// <summary>
 ///   Solves all sub tree reference tasks and replaces them by real references to the sub tree.
 /// </summary>
 /// <param name="tree"> Tree in which to solve references. </param>
 public void SolveReferences(IBehaviorTree tree)
 {
     tree.Root = this.SolveReferences(tree.Root);
 }
 private void SetTree(IBehaviorTree tree, string name)
 {
     _printer?.Unbind();
     _printer = new BehaviorTreePrinter(tree, position.size);
     _name    = name;
 }
Пример #25
0
 public abstract BehaviorResult Exec(IBehaviorTree tree);
Пример #26
0
 /// <summary>
 /// Create a BehaviorStatus
 /// </summary>
 /// <param name="tree">BehaviorTree</param>
 public BehaviorTreeStatus(IBehaviorTree tree)
 {
     this.Tree           = tree;
     this.Exception      = null;
     this.RunningActions = new RunningActionCollection();
 }
Пример #27
0
 /// <summary>
 ///   Solves all sub tree reference tasks and replaces them by real references to the sub tree.
 /// </summary>
 /// <param name="tree"> Tree in which to solve references. </param>
 public void SolveReferences(IBehaviorTree tree)
 {
     tree.Root = this.SolveReferences(tree.Root);
 }