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); }
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); }
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); }
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; }
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); }
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); }