public override void Update() { timer -= Time.deltaTime; if (timer < 0) { timer = checkEverySeconds; firstChild.Restart(); firstChild.Beginn(); bool useSecondChild = firstChild.IsFulfilled(); if (!started) { started = true; SetExecutingNode(useSecondChild); } else if (wasOnSecondChild != useSecondChild) { switch (onNodeChange) { case BNodeUtil.ReturnOperation.ReturnFailure: CurrentStatus = Status.Failure; return; case BNodeUtil.ReturnOperation.ReturnSuccess: CurrentStatus = Status.Success; return; } SetExecutingNode(useSecondChild); } } switch (currentExecutingNode.CurrentStatus) { case Status.Running: currentExecutingNode.Update(); break; case Status.Success: OnCheckReturnOperation(wasOnSecondChild ? onIfNodeSuccess : onElseNodeSuccess, currentExecutingNode); break; case Status.Failure: OnCheckReturnOperation(wasOnSecondChild ? onIfNodeFailure : onElseNodeFailure, currentExecutingNode); break; } }