Beispiel #1
0
        public override BTStatus Step()
        {
            for (int i = 0; i < m_Children.Count; i++)
            {
                BTNode   pNode   = m_Children[i];
                BTStatus pStatus = pNode.Step();
                switch (pStatus)
                {
                case BTStatus.Running:
                {
                    if (m_ActiveIndex != i && m_ActiveIndex != -1)
                    {
                        m_Children[m_ActiveIndex].Clear();
                    }
                    m_ActiveIndex = i;
                    m_PreviaIndex = -1;
                    m_IsRunning   = true;
                    return(BTStatus.Running);
                }

                case BTStatus.Success:
                {
                    if (m_ActiveIndex != i && m_ActiveIndex != -1)
                    {
                        m_Children[m_ActiveIndex].Clear();
                    }
                    pNode.Clear();
                    m_ActiveIndex = -1;
                    m_PreviaIndex = i;
                    m_IsRunning   = false;
                    return(BTStatus.Success);
                }

                case BTStatus.Failure:
                {
                    pNode.Clear();
                    return(BTStatus.Failure);
                }
                }
            }

            m_IsRunning = false;
            return(BTStatus.Failure);
        }
Beispiel #2
0
        protected override EBTStatus Execute()
        {
            if (FindJudgeTrans() == false)
            {
                return(EBTStatus.BT_FAILURE);
            }
            List <Actor> list = Owner.GetActorsByAffectType(Affect);
            List <Actor> hits = new List <Actor>();

            for (int i = 0; i < list.Count; i++)
            {
                Actor actor = list[i];
                if (Scope.IsTouch(actor))
                {
                    mCurCount++;
                    hits.Add(actor);
                }
                if (CheckHitLimit())
                {
                    break;
                }
            }

            if (hits.Count > 0)
            {
                BTTreeManager.Instance.SaveData(this, Define.BT_JUDGE_LIST, hits);
                BTTreeManager.Instance.SaveData(this, Define.BT_JUDGE_SUCCESS, string.Empty);
                if (mChildren.Count > 0)
                {
                    BTNode pNode = mChildren[0];
                    pNode.Step();
                }
            }

            if (LifeTime > 0)
            {
                return(CheckHitLimit() ? EBTStatus.BT_SUCCESS : EBTStatus.BT_RUNNING);
            }
            else
            {
                return(mCurCount > 0 ? EBTStatus.BT_SUCCESS : EBTStatus.BT_FAILURE);
            }
        }
Beispiel #3
0
        protected override BTStatus Execute()
        {
            if (FindJudgeTrans() == false)
            {
                return(BTStatus.Failure);
            }
            List <ActorBase> list = Owner.GetActorsByAffectType(Affect);
            List <ActorBase> hits = new List <ActorBase>();

            for (int i = 0; i < list.Count; i++)
            {
                ActorBase actor = list[i];
                if (Scope.IsTouch(actor))
                {
                    mCurCount++;
                    hits.Add(actor);
                }
                if (CheckHitLimit())
                {
                    break;
                }
            }

            if (hits.Count > 0)
            {
                GameEntry.BT.SaveData(this, Constant.Define.BTJudgeList, hits);
                GameEntry.BT.SaveData(this, Constant.Define.BTJudgeSuccess, string.Empty);
                if (m_Children.Count > 0)
                {
                    BTNode pNode = m_Children[0];
                    pNode.Step();
                }
            }

            if (LifeTime > 0)
            {
                return(CheckHitLimit() ? BTStatus.Success : BTStatus.Running);
            }
            else
            {
                return(mCurCount > 0 ? BTStatus.Success : BTStatus.Failure);
            }
        }
Beispiel #4
0
        public override BTStatus Step()
        {
            if (m_ActiveIndex == -1)
            {
                m_ActiveIndex = UnityEngine.Random.Range(0, m_Children.Count);
            }

            if (m_Children.Count > 0)
            {
                BTNode   pNode   = m_Children[m_ActiveIndex];
                BTStatus pStatus = pNode.Step();
                switch (pStatus)
                {
                case BTStatus.Running:
                {
                    m_IsRunning = true;
                    return(BTStatus.Running);
                }

                case BTStatus.Success:
                {
                    pNode.Clear();
                    m_ActiveIndex = -1;
                    m_PreviaIndex = m_ActiveIndex;
                    m_IsRunning   = false;
                    return(BTStatus.Success);
                }

                case BTStatus.Failure:
                {
                    pNode.Clear();
                    m_ActiveIndex = -1;
                    m_PreviaIndex = -1;
                    m_IsRunning   = false;
                    return(BTStatus.Failure);
                }
                }
            }
            m_ActiveIndex = -1;
            m_PreviaIndex = -1;
            m_IsRunning   = false;
            return(BTStatus.Failure);
        }
Beispiel #5
0
        public override BTStatus Step()
        {
            for (int i = 0; i < m_Children.Count; i++)
            {
                if (m_FinishChildrenIndexList.Contains(i))
                {
                    continue;
                }
                BTNode   pNode   = m_Children[i];
                BTStatus pStatus = pNode.Step();

                if (pStatus != BTStatus.Running)
                {
                    pNode.Clear();
                    m_FinishChildrenIndexList.Add(i);
                }
            }

            m_IsRunning = (m_FinishChildrenIndexList.Count < m_Children.Count);
            return((m_IsRunning) ? BTStatus.Running : BTStatus.Success);
        }
Beispiel #6
0
        public override EBTStatus Step()
        {
            for (int i = 0; i < mChildren.Count; i++)
            {
                if (mFinishChildrenIndexList.Contains(i))
                {
                    continue;
                }
                BTNode    pNode   = mChildren[i];
                EBTStatus pStatus = pNode.Step();

                if (pStatus != EBTStatus.BT_RUNNING)
                {
                    pNode.Clear();
                    mFinishChildrenIndexList.Add(i);
                }
            }

            mIsRunning = (mFinishChildrenIndexList.Count < mChildren.Count);
            return((mIsRunning) ? EBTStatus.BT_RUNNING : EBTStatus.BT_SUCCESS);
        }
Beispiel #7
0
        public override BTStatus Step()
        {
            if (m_ActiveIndex == -1)
            {
                m_ActiveIndex = 0;
            }
            for (; m_ActiveIndex < m_Children.Count; m_ActiveIndex++)
            {
                BTNode   pNode   = m_Children[m_ActiveIndex];
                BTStatus pStatus = pNode.Step();
                switch (pStatus)
                {
                case BTStatus.Running:
                {
                    m_IsRunning = true;
                    return(BTStatus.Running);
                }

                case BTStatus.Success:
                {
                    pNode.Clear();
                    continue;
                }

                case BTStatus.Failure:
                {
                    m_ActiveIndex = -1;
                    m_IsRunning   = false;
                    pNode.Clear();
                    return(BTStatus.Failure);
                }
                }
            }
            m_ActiveIndex = -1;
            m_IsRunning   = false;
            return(BTStatus.Success);
        }
Beispiel #8
0
        public override EBTStatus Step()
        {
            if (mActiveIndex == -1)
            {
                mActiveIndex = 0;
            }
            for (; mActiveIndex < mChildren.Count; mActiveIndex++)
            {
                BTNode    pNode   = mChildren[mActiveIndex];
                EBTStatus pStatus = pNode.Step();
                switch (pStatus)
                {
                case EBTStatus.BT_RUNNING:
                {
                    mIsRunning = true;
                    return(EBTStatus.BT_RUNNING);
                }

                case EBTStatus.BT_SUCCESS:
                {
                    pNode.Clear();
                    continue;
                }

                case EBTStatus.BT_FAILURE:
                {
                    mActiveIndex = -1;
                    mIsRunning   = false;
                    pNode.Clear();
                    return(EBTStatus.BT_FAILURE);
                }
                }
            }
            mActiveIndex = -1;
            mIsRunning   = false;
            return(EBTStatus.BT_SUCCESS);
        }