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); }
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); }
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); }
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); }
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; }
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); }
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); } } }
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); }
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); } } }
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); }
// private IEnumerator<BehaviorResult> m_CurrentTask; public BehaviorTreeExecutor(IBehaviorTree owner) { m_Owner = owner; m_Root = new BehaviorRootNode(); m_Blackboard = new BehaviorBlackboard(); }
public override BehaviorResult Exec(IBehaviorTree tree) { return(BehaviorResult.failed); }
public override BehaviorResult Exec(IBehaviorTree tree) { return(BehaviorResult.success); }
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; }
public abstract BehaviorResult Exec(IBehaviorTree tree);
/// <summary> /// Create a BehaviorStatus /// </summary> /// <param name="tree">BehaviorTree</param> public BehaviorTreeStatus(IBehaviorTree tree) { this.Tree = tree; this.Exception = null; this.RunningActions = new RunningActionCollection(); }
/// <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); }