Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override BehaviorReturnCode Run()
        {
            if (_children.Count == 0)
            {
                return(BehaviorReturnCode.BT_SUCCESS);
            }

            if (_currentPosition == -1)
            {
                Init();
            }

            BehaviorTreeNode   currentRunningNode = _children[_currentPosition];
            BehaviorReturnCode status             = BehaviorReturnCode.BT_FAILURE;

            while ((status = currentRunningNode.Run()) == BehaviorReturnCode.BT_SUCCESS)
            {
                _currentPosition++;
                // Fallan todos los hijos
                if (_currentPosition == _children.Count)
                {
                    _currentPosition = -1;
                    return(status);
                }
                currentRunningNode = _children[_currentPosition];
            }

            if (status == BehaviorReturnCode.BT_FAILURE)
            {
                _currentPosition = -1;
            }

            return(status);
        }
Beispiel #2
0
        // <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override BehaviorReturnCode Run()
        {
            if (_children.Count == 0)
            {
                return(BehaviorReturnCode.BT_SUCCESS);
            }

            if (_currentPosition == -1)
            {
                Init();
            }

            System.Random      random       = new System.Random(DateTime.Now.Millisecond);
            int                randomNumber = 0;
            BehaviorReturnCode status       = BehaviorReturnCode.BT_FAILURE;

            if (_currentPosition == -1)
            {
                randomNumber = random.Next(0, _children.Count);
            }
            else
            {
                randomNumber = _currentPosition;
            }

            BehaviorTreeNode currentRunningNode = _children[randomNumber];

            status = currentRunningNode.Run();
            if (status == BehaviorReturnCode.BT_SUCCESS || status == BehaviorReturnCode.BT_FAILURE)
            {
                _currentPosition = -1;
            }

            return(status);
        }