示例#1
0
        public override EBTResult Tick()
        {
            EBTResult tmpResult = EBTResult.Running;

            IsRunning = true;

            do
            {
                if (!mRepeatForever)
                {
                    ++mCurrentCount;
                }

                if (mCurrentCount > mCount)
                {
                    tmpResult = EBTResult.Success;
                    IsRunning = false;
                    break;
                }

                EBTResult tmpChildResult = ChildNode.Tick();

                if (mEndOnFailure && EBTResult.Failed == tmpChildResult)
                {
                    tmpResult = EBTResult.Failed;
                    IsRunning = false;
                    break;
                }
            } while (false);

            return(tmpResult);
        }
示例#2
0
        protected override void OnExit(EBTResult result)
        {
            _curChild = 0;
            if (_child != null)
            {
                OnExit(_child, result);
                _child = null;
            }

            base.OnExit(result);
        }
示例#3
0
        public override EBTResult Tick()
        {
            mTime += Time.deltaTime;
            EBTResult tmpResult = EBTResult.Running;

            if (mTime >= mDelay)
            {
                tmpResult = ChildNode.Tick();
            }

            return(tmpResult);
        }
示例#4
0
 protected void OnExit(BTNode other, EBTResult result)
 {
     other.state = result;
     if (other._it != null)
     {
         other._it = null;
         if (other._stack != null)
         {
             other._stack.Clear();
         }
         other.OnExit(result);
         other._enter = false;
     }
 }
示例#5
0
文件: BTTimer.cs 项目: dqtoy/ActDemo
        public override EBTResult Tick()
        {
            mTime += Time.deltaTime;

            if (mTime >= mInterval)
            {
                mTime = 0;
                EBTResult result = ChildNode.Tick();
                return(result);
            }
            else
            {
                return(EBTResult.Running);
            }
        }
示例#6
0
        protected override void OnExit(EBTResult result)
        {
            if (children != null)
            {
                for (int i = 0; i < children.Count; ++i)
                {
                    var child = children[i];
                    if (child.state == EBTResult.Running)
                    {
                        OnExit(child, result);
                    }
                }
            }

            base.OnExit(result);
        }
示例#7
0
        public override EBTResult Tick()
        {
            if (0 == ChildNodes.Count)
            {
                return(EBTResult.Success);
            }

            EBTResult tmpResult = EBTResult.Running;

            IsRunning = true;

            for (int i = 0, max = ChildNodes.Count; i < max; i++)
            {
                if (mCompleteChildIdxList.Contains(i))
                {
                    continue;
                }

                BTNode tmpChildNode = ChildNodes[i];

                switch (tmpChildNode.Tick())
                {
                case EBTResult.Success:
                    mCompleteChildIdxList.Add(i);

                    if (mCompleteChildIdxList.Count == ChildNodes.Count)
                    {
                        tmpResult = EBTResult.Success;
                    }
                    break;

                case EBTResult.Failed:
                    tmpResult = EBTResult.Failed;
                    break;
                }

                if (EBTResult.Running != tmpResult)
                {
                    IsRunning = false;
                    Clear();
                    break;
                }
            }

            return(tmpResult);
        }
示例#8
0
        public override EBTResult Tick()
        {
            if (!mIsConditionsComplete)
            {
                switch (mLogicOpt)
                {
                case EBTLogic.And:
                    foreach (BTConditional conditional in mConditionals)
                    {
                        if (!conditional.Check())
                        {
                            return(EBTResult.Failed);
                        }
                    }
                    break;

                case EBTLogic.Or:
                    bool anySuccess = false;

                    foreach (BTConditional conditional in mConditionals)
                    {
                        if (conditional.Check())
                        {
                            anySuccess = true;
                            break;
                        }
                    }

                    if (!anySuccess)
                    {
                        return(EBTResult.Failed);
                    }
                    break;
                }
            }

            mIsConditionsComplete = true;
            EBTResult tmpResult = ChildNode.Tick();

            if (EBTResult.Running == tmpResult)
            {
                IsRunning = true;
            }

            return(tmpResult);
        }
示例#9
0
        public override EBTResult Tick()
        {
            if (-1 == mActiveChildIndex)
            {
                mActiveChildIndex = 0;
            }

            if (mActiveChildIndex >= ChildNodes.Count)
            {
                return(EBTResult.Success);
            }

            BTNode    tmpChildNode = ChildNodes[mActiveChildIndex];
            EBTResult tmpResult    = EBTResult.Running;

            IsRunning = true;

            switch (tmpChildNode.Tick())
            {
            case EBTResult.Success:
                mActiveChildIndex++;

                if (mActiveChildIndex >= ChildNodes.Count)
                {
                    tmpResult = EBTResult.Success;
                }
                break;

            case EBTResult.Failed:
                IsRunning = false;
                tmpResult = EBTResult.Failed;
                break;
            }

            if (EBTResult.Running != tmpResult)
            {
                Clear();
            }

            return(tmpResult);
        }
示例#10
0
文件: BTAction.cs 项目: dqtoy/ActDemo
        sealed public override EBTResult Tick()
        {
            EBTResult tmpTickResult = EBTResult.Success;

            if (mStatus == EBTActionStatus.Ready)
            {
                Enter();
                mStatus = EBTActionStatus.Running;
            }
            if (mStatus == EBTActionStatus.Running)
            {
                tmpTickResult = Execute();
                IsRunning     = true;

                if (tmpTickResult != EBTResult.Running)
                {
                    Exit();
                    mStatus   = EBTActionStatus.Ready;
                    IsRunning = false;
                }
            }

            return(tmpTickResult);
        }
示例#11
0
        public override EBTResult Tick()
        {
            if (-1 == mActiveChildIndex)
            {
                int tmpTotalWeight = 0;

                for (int i = 0, max = ChildNodes.Count; i < max; ++i)
                {
                    if (mFailedChildIdxList.Contains(i))
                    {
                        continue;
                    }

                    tmpTotalWeight += (i >= mChildNodeWeightList.Count ? 1 : mChildNodeWeightList[i]);
                }

                int tmpRandonValue = Random.Range(0, tmpTotalWeight);

                for (int i = 0, max = ChildNodes.Count; i < max; ++i)
                {
                    if (mFailedChildIdxList.Contains(i))
                    {
                        continue;
                    }

                    tmpRandonValue -= (i >= mChildNodeWeightList.Count ? 1 : mChildNodeWeightList[i]);

                    if (tmpRandonValue < 0)
                    {
                        mActiveChildIndex = i;
                        break;
                    }
                }
            }

            BTNode    tmpChildNode = ChildNodes[mActiveChildIndex];
            EBTResult tmpResult    = EBTResult.Running;

            IsRunning = true;

            switch (tmpChildNode.Tick())
            {
            case EBTResult.Success:
                tmpResult = EBTResult.Success;
                break;

            case EBTResult.Failed:
                mActiveChildIndex = -1;

                if (mFailedChildIdxList.Count >= ChildNodes.Count)
                {
                    tmpResult = EBTResult.Failed;
                }
                break;
            }

            if (EBTResult.Running != tmpResult)
            {
                IsRunning = false;
                Clear();
            }

            return(tmpResult);
        }
示例#12
0
 protected virtual void OnExit(EBTResult result)
 {
 }