private bool CheckParentUpdatePreconditions(Agent pAgent) { bool bValid = true; if (this.m_bHasManagingParent) { bool bHasManagingParent = false; const int kMaxParentsCount = 512; int parentsCount = 0; BehaviorTask[] parents = new BehaviorTask[kMaxParentsCount]; BranchTask parentBranch = this.GetParent(); parents[parentsCount++] = this; //back track the parents until the managing branch while (parentBranch != null) { Debug.Check(parentsCount < kMaxParentsCount, "weird tree!"); parents[parentsCount++] = parentBranch; if (parentBranch.GetCurrentTask() == this) { //Debug.Check(parentBranch->GetNode()->IsManagingChildrenAsSubTrees()); bHasManagingParent = true; break; } parentBranch = parentBranch.GetParent(); } if (bHasManagingParent) { for (int i = parentsCount - 1; i >= 0; --i) { BehaviorTask pb = parents[i]; bValid = pb.CheckPreconditions(pAgent, true); if (!bValid) { break; } } } } else { bValid = this.CheckPreconditions(pAgent, true); } return(bValid); }