protected override NodeRunningStatus UpdateInternal(object rInput, object rOutput)
{
int rFinishedChildChount = 0;
for ( int i = 0; i < mChildrenCount; i++ )
{
var rNode = mChildren[i];
if(mFinishCondition == ParallelFinishCondition.OR)
{
if(mChildrenStatus[i] == NodeRunningStatus.Executing)
{
mChildrenStatus[i] = rNode.Update(rInput, rOutput);
}
if(mChildrenStatus[i] != NodeRunningStatus.Executing)
{
for( int j = 0; j < BehaviorTreeNode._maxChildNodeCount; j++)
{
mChildrenStatus[i] = NodeRunningStatus.Executing;
}
return NodeRunningStatus.Finish;
}
}
else if(mFinishCondition == ParallelFinishCondition.AND)
{
if (mChildrenStatus[i] == NodeRunningStatus.Executing)
{
mChildrenStatus[i] = rNode.Update(rInput, rOutput);
}
if (mChildrenStatus[i] != NodeRunningStatus.Executing)
{
rFinishedChildChount++;
}
}
}
if (rFinishedChildChount == mChildrenCount)
{
for (int i = 0; i < BehaviorTreeNode._maxChildNodeCount; i++)
{
mChildrenStatus[i] = NodeRunningStatus.Executing;
}
return NodeRunningStatus.Finish;
}
return NodeRunningStatus.Executing;
}