Example #1
0
        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;
            }
        }