示例#1
0
        private Result Execute_Attack()
        {
            //check if the anim state is over
            m_Pawn.transform.position = m_AttackPosition;

            Animator anim = m_Pawn.GetComponentInChildren <Animator>();

            if (anim != null)
            {
                int AttackHash         = Animator.StringToHash(string.Format("Base Layer.{0}", m_AnimStateAttackName));
                AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo(0);
                if (info.nameHash != AttackHash)
                {
                    m_State           = CloseUpAttackState.StartComeBack;
                    m_TimeStartTravel = Time.fixedTime;
                    PlayReaction();
                }
            }
            else
            {
                m_State           = CloseUpAttackState.StartComeBack;
                m_TimeStartTravel = Time.fixedTime;
                PlayReaction();
            }

            m_Pawn.transform.forward = (m_AttackPosition - m_InitialPosition).normalized;
            return(Result.Continue);
        }
示例#2
0
        private Result Execute_StartMoveToEnemy()
        {
            if (!string.IsNullOrEmpty(m_AnimTrigRunState))
            {
                Animator anim = m_Pawn.GetComponentInChildren <Animator>();
                if (anim != null)
                {
                    anim.SetTrigger(m_AnimTrigRunState);
                }
            }

            m_State = CloseUpAttackState.MoveToEnemy;
            return(Result.Continue);
        }
示例#3
0
        private Result Execute_StartComeBack()
        {
            m_Pawn.transform.position = m_AttackPosition;
            if (!string.IsNullOrEmpty(m_AnimTrigRunState))
            {
                Animator anim = m_Pawn.GetComponentInChildren <Animator>();
                if (anim != null)
                {
                    anim.SetTrigger(m_AnimTrigRunState);
                }
            }

            m_State = CloseUpAttackState.ComeBack;
            return(Result.Continue);
        }
示例#4
0
        public void Prepare()
        {
            m_InitialOrientation = m_Pawn.transform.localRotation;
            m_InitialPosition    = m_Pawn.transform.position;
            m_TargetPosition     = m_Target.transform.position;
            m_TargetPosition.y   = m_InitialPosition.y;

            Vector3 direction = m_TargetPosition - m_InitialPosition;

            PawnBehavior pawnBhv          = m_Pawn.GetComponent <PawnBehavior>();
            PawnBehavior targetBhv        = m_Target.GetComponent <PawnBehavior>();
            float        distanceToTravel = direction.magnitude - m_AttackDistance - pawnBhv.m_AttackAnchorRadius - targetBhv.m_AttackAnchorRadius;

            m_AttackPosition = m_InitialPosition + direction.normalized * distanceToTravel;

            m_TravelTime = distanceToTravel / m_Speed;

            m_State = CloseUpAttackState.StartMoveToEnemy;

            m_TimeStartTravel = Time.fixedTime;
        }
示例#5
0
        private Result Execute_WaitForAttackToStart()
        {
            m_Pawn.transform.position = m_AttackPosition;
            Animator anim = m_Pawn.GetComponentInChildren <Animator>();

            if (anim != null)
            {
                int AttackHash         = Animator.StringToHash(string.Format("Base Layer.{0}", m_AnimStateAttackName));
                AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo(0);
                if (info.nameHash == AttackHash)
                {
                    m_State = CloseUpAttackState.Attack;
                }
            }
            else
            {
                m_State = CloseUpAttackState.Attack;
            }
            m_Pawn.transform.forward = (m_AttackPosition - m_InitialPosition).normalized;
            return(Result.Continue);
        }
示例#6
0
        private Result Execute_MoveToEnemy()
        {
            float t = (Time.fixedTime - m_TimeStartTravel) / m_TravelTime;

            if (t < 1)
            {
                Vector3 newPos = Vector3.Lerp(m_InitialPosition, m_AttackPosition, t);
                m_Pawn.transform.position = newPos;
            }
            else
            {
                m_State = CloseUpAttackState.Attack;
                m_Pawn.transform.position = m_AttackPosition;
                Animator anim = m_Pawn.GetComponentInChildren <Animator>();
                if (anim != null && !string.IsNullOrEmpty(m_AnimTrigAttackState))
                {
                    anim.SetTrigger(m_AnimTrigAttackState);
                    m_State = CloseUpAttackState.WaitForAttackToStart;
                }
            }

            m_Pawn.transform.forward = (m_AttackPosition - m_InitialPosition).normalized;
            return(Result.Continue);
        }