private PlannerTask BuildPlan(Task root) { LogManager.PLanningClearCache(); int depth = this.agent.Variables.Depth; PlannerTask rootTask = null; using (var currentState = this.agent.Variables.Push(true)) { this.agent.PlanningTop = this.agent.Variables.Top; Debug.Check(this.agent.PlanningTop >= 0); LogPlanBegin(this.agent, root); rootTask = this.decomposeNode(root, 0); LogPlanEnd(this.agent, root); #if !BEHAVIAC_RELEASE BehaviorTask.CHECK_BREAKPOINT(this.agent, root, "plan", EActionResult.EAR_all); #endif this.agent.PlanningTop = -1; } Debug.Check(this.agent.Variables.Depth == depth); return(rootTask); }
public override bool decompose(BehaviorNode node, PlannerTaskComplex seqTask, int depth, Planner planner) { Sequence sequence = (Sequence)node; bool bOk = false; int childCount = sequence.GetChildrenCount(); int i = 0; for (; i < childCount; ++i) { BehaviorNode childNode = sequence.GetChild(i); PlannerTask childTask = planner.decomposeNode(childNode, depth); if (childTask == null) { break; } //clear the log cache so that the next node can log all properites LogManager.PLanningClearCache(); seqTask.AddChild(childTask); } if (i == childCount) { bOk = true; } return(bOk); }