public override State Tick(EnemyManager enemyManager, EnemyStats stats, EnemyAnimatorHandler animatorHandler) { Vector3 targetDirection = enemyManager.currentTarget.transform.position - enemyManager.transform.position; float viewableAngle = Vector3.Angle(targetDirection, transform.forward); if (currentAttack != null) { if (enemyManager.distanceFromTarget < currentAttack.distanceNeededToAttack.min) { return(this); } else if (enemyManager.distanceFromTarget < currentAttack.distanceNeededToAttack.max) { if (enemyManager.viewableAngle <= currentAttack.attackAngle * 0.5f) { if (enemyManager.currentRecoveryTime <= 0f && !enemyManager.isPerformingAction) { animatorHandler.anim.SetFloat(AnimatorHandler.hashVertical, 0f, 0.1f, Time.deltaTime); animatorHandler.anim.SetFloat(AnimatorHandler.hashHorizontal, 0f, 0.1f, Time.deltaTime); animatorHandler.PlayTargetAnimation(currentAttack.actionAnimation, true); enemyManager.isPerformingAction = true; enemyManager.currentRecoveryTime = currentAttack.recoveryTime; currentAttack = null; return(combatStanceState); } } } } else { GetNewAttack(enemyManager); } return(combatStanceState); }
public override State Tick(EnemyManager enemyManager, EnemyStats stats, EnemyAnimatorHandler animatorHandler) { if (enemyManager.isPerformingAction) { return(this); } Vector3 targetDirection = enemyManager.currentTarget.transform.position - enemyManager.transform.position; enemyManager.distanceFromTarget = targetDirection.magnitude; float viewableAngle = Vector3.Angle(targetDirection, transform.forward); if (enemyManager.distanceFromTarget > enemyManager.maxAttackingRange) { animatorHandler.anim.SetFloat(AnimatorHandler.hashVertical, 1f, 0.1f, Time.deltaTime); } else if (enemyManager.distanceFromTarget <= enemyManager.maxAttackingRange) { animatorHandler.anim.SetFloat(AnimatorHandler.hashVertical, 0f, 0.1f, Time.deltaTime); } HandleRotateTowardsTarget(enemyManager); enemyManager.agent.transform.localPosition = Vector3.zero; enemyManager.agent.transform.localRotation = Quaternion.identity; if (enemyManager.distanceFromTarget <= enemyManager.maxAttackingRange) { return(combatStanceState); } else { return(this); } }
public override State Tick(EnemyManager enemyManager, EnemyStats stats, EnemyAnimatorHandler animatorHandler) { #region Handle Target detection Collider[] colliders = Physics.OverlapSphere(enemyManager.transform.position, enemyManager.detectionRadius, detectionLayer); for (int i = 0; i < colliders.Length; i++) { CharacterStats characterStats = colliders[i].transform.GetComponent <CharacterStats>(); if (characterStats != null) { Vector3 targetDirection = characterStats.transform.position - enemyManager.transform.position; float viewableAngle = Vector3.Angle(targetDirection, enemyManager.transform.forward); if (viewableAngle > -enemyManager.detectionAngle && viewableAngle < enemyManager.detectionAngle) { enemyManager.currentTarget = characterStats; } } } #endregion if (enemyManager.currentTarget != null) { return(pursueTargetState); } else { return(this); } }
void Awake() { locomotion = GetComponent <EnemyLocomotion>(); animatorHandler = GetComponentInChildren <EnemyAnimatorHandler>(); stats = GetComponent <EnemyStats>(); agent = GetComponentInChildren <NavMeshAgent>(); rigid = GetComponent <Rigidbody>(); }
public override State Tick(EnemyManager enemyManager, EnemyStats stats, EnemyAnimatorHandler animatorHandler) { enemyManager.distanceFromTarget = Vector3.Distance(enemyManager.currentTarget.transform.position, enemyManager.transform.position); if (enemyManager.currentRecoveryTime <= 0f && enemyManager.distanceFromTarget <= enemyManager.maxAttackingRange) { return(attackState); } else if (enemyManager.distanceFromTarget > enemyManager.maxAttackingRange) { return(pursueTargetState); } else { return(this); } }
public abstract State Tick(EnemyManager enemyManager, EnemyStats stats, EnemyAnimatorHandler animatorHandler);
void Awake() { enemyManager = GetComponent <EnemyManager>(); animatorHandler = GetComponentInChildren <EnemyAnimatorHandler>(); }
void Start() { myAnimator = GetComponent <EnemyAnimatorHandler>();//????? myHealth = GetComponent <Health>(); }