private void doAutoPlanning() { if (!this.AutoReplan) { return; } this.timeTillReplan -= Workspace.Instance.DeltaTime; var noPlan = this.m_rootTask == null || this.m_rootTask.GetStatus() != EBTStatus.BT_RUNNING; //if (noPlan || timeTillReplan <= 0) if (noPlan) { timeTillReplan += AutoReplanInterval; PlannerTask newPlan = this.GeneratePlan(); if (newPlan != null) { if (this.m_rootTask != null) { if (this.m_rootTask.GetStatus() == EBTStatus.BT_RUNNING) { this.m_rootTask.abort(this.agent); raisePlanAborted(this.m_rootTask); } BehaviorTask.DestroyTask(this.m_rootTask); } this.m_rootTask = newPlan; } } }
private void doAutoPlanning() { if (!this.AutoReplan) { return; } var noPlan = this.m_rootTask == null || this.m_rootTask.GetStatus() != EBTStatus.BT_RUNNING; if (noPlan) { PlannerTask newPlan = this.GeneratePlan(); if (newPlan != null) { if (this.m_rootTask != null) { if (this.m_rootTask.GetStatus() == EBTStatus.BT_RUNNING) { this.m_rootTask.abort(this.agent); } BehaviorTask.DestroyTask(this.m_rootTask); } this.m_rootTask = newPlan; } } }
private void OnDisable() { if (this.m_rootTask != null) { if (this.m_rootTask.GetStatus() == EBTStatus.BT_RUNNING) { this.m_rootTask.abort(this.agent); BehaviorTask.DestroyTask(this.m_rootTask); } this.m_rootTask = null; } }
public static void DestroyBehaviorTreeTask(BehaviorTreeTask behaviorTreeTask, Agent agent) { if (behaviorTreeTask != null) { if (Workspace.ms_allBehaviorTreeTasks.ContainsKey(behaviorTreeTask.GetName())) { Workspace.BTItem_t bTItem_t = Workspace.ms_allBehaviorTreeTasks.get_Item(behaviorTreeTask.GetName()); bTItem_t.bts.Remove(behaviorTreeTask); if (agent != null) { bTItem_t.agents.Remove(agent); } } BehaviorTask.DestroyTask(behaviorTreeTask); } }
public static void DestroyBehaviorTreeTask(BehaviorTreeTask behaviorTreeTask, Agent agent) { if (behaviorTreeTask != null) { if (ms_allBehaviorTreeTasks.ContainsKey(behaviorTreeTask.GetName())) { BTItem_t _t = ms_allBehaviorTreeTasks[behaviorTreeTask.GetName()]; _t.bts.Remove(behaviorTreeTask); if (agent != null) { _t.agents.Remove(agent); } } BehaviorTask.DestroyTask(behaviorTreeTask); } }
public PlannerTask decomposeNode(BehaviorNode node, int depth) { try { // Ensure that the planner does not get stuck in an infinite loop if (depth >= 256) { Debug.LogError("Exceeded task nesting depth. Does the graph contain an invalid cycle?"); return(null); } LogPlanNodeBegin(this.agent, node); int depth1 = this.agent.Variables.Depth; PlannerTask taskAdded = null; bool isPreconditionOk = node.CheckPreconditions(this.agent, false); if (isPreconditionOk) { bool bOk = true; taskAdded = PlannerTask.Create(node, this.agent); if (node is Action) { //nothing to do for action Debug.Check(true); } else { Debug.Check(taskAdded is PlannerTaskComplex); PlannerTaskComplex seqTask = taskAdded as PlannerTaskComplex; bOk = this.decomposeComplex(node, seqTask, depth); } if (bOk) { node.ApplyEffects(this.agent, Effector.EPhase.E_SUCCESS); } else { BehaviorTask.DestroyTask(taskAdded); taskAdded = null; } } else { //precondition failed LogPlanNodePreconditionFailed(this.agent, node); } LogPlanNodeEnd(this.agent, node, taskAdded != null ? "success" : "failure"); Debug.Check(this.agent.Variables.Depth == depth1); return(taskAdded); } catch (Exception ex) { Debug.Check(false, ex.Message); } return(null); }