public override State Tick(EnemyManager enemyManager, EnemyStats enemyStats, EnemyAnimatorManager enemyAnimatorManager) { if (enemyManager.isPerformingAction) { enemyAnimatorManager.anim.SetFloat("Vertical", 0, 0.1f, Time.deltaTime); return(this); } Vector3 targetDirection = enemyManager.currentTarget.transform.position - enemyManager.transform.position; float distanceFromTarget = Vector3.Distance(enemyManager.currentTarget.transform.position, enemyManager.transform.position); float viewableAngle = Vector3.Angle(targetDirection, enemyManager.transform.forward); if (distanceFromTarget > enemyManager.maximumAttackRange) { enemyAnimatorManager.anim.SetFloat("Vertical", 1, 0.1f, Time.deltaTime); } HandleRotateTowardsTarget(enemyManager); enemyManager.navMeshAgent.transform.localPosition = Vector3.zero; enemyManager.navMeshAgent.transform.localRotation = Quaternion.identity; if (distanceFromTarget <= enemyManager.maximumAttackRange) { return(combatStanceState); } else { return(this); } }
public override State Tick(EnemyManager enemyManager, EnemyStats enemyStats, EnemyAnimatorManager enemyAnimatorManager) { Collider[] colliders = Physics.OverlapSphere(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.minimumDetectionAngle && viewableAngle < enemyManager.maximumDetectionAngle) { enemyManager.currentTarget = characterStats; } } } if (enemyManager.currentTarget != null) { return(pursueTargetState); } else { return(this); } }
private void Awake() { enemyLocomotionManager = GetComponent <EnemyLocomotionManager>(); enemyAnimationManager = GetComponentInChildren <EnemyAnimatorManager>(); enemyStats = GetComponent <EnemyStats>(); navMeshAgent = GetComponentInChildren <NavMeshAgent>(); navMeshAgent.enabled = false; enemyRigidBody = GetComponent <Rigidbody>(); }
public override State Tick(EnemyManager enemyManager, EnemyStats enemyStats, EnemyAnimatorManager enemyAnimatorManager) { float distanceFromTarget = Vector3.Distance(enemyManager.currentTarget.transform.position, enemyManager.transform.position); if (enemyManager.currentRecoveryTime <= 0 && distanceFromTarget <= enemyManager.maximumAttackRange) { return(attackState); } else if (distanceFromTarget > enemyManager.maximumAttackRange) { return(pursueTargetState); } else { return(this); } }
public override State Tick(EnemyManager enemyManager, EnemyStats enemyStats, EnemyAnimatorManager enemyAnimatorManager) { Vector3 targetDirection = enemyManager.currentTarget.transform.position - transform.position; float distanceFromTarget = Vector3.Distance(enemyManager.currentTarget.transform.position, enemyManager.transform.position); float viewableAngle = Vector3.Angle(targetDirection, transform.forward); if (enemyManager.isPerformingAction) { return(combatStanceState); } if (currentAttack != null) { if (distanceFromTarget < currentAttack.minimumDistanceNeededToAttack) { return(this); } else if (distanceFromTarget < currentAttack.maximumDistanceNeededToAttack) { if (viewableAngle <= currentAttack.maximumAttackAngle && viewableAngle >= currentAttack.minimumAttackAngle) { if (enemyManager.currentRecoveryTime <= 0 && enemyManager.isPerformingAction == false) { enemyAnimatorManager.anim.SetFloat("Vertical", 0, 0.1f, Time.deltaTime); enemyAnimatorManager.anim.SetFloat("Horizontal", 0, 0.1f, Time.deltaTime); enemyAnimatorManager.PlayTargetAnimation(currentAttack.actionAnimation, true); enemyManager.currentRecoveryTime = currentAttack.recoveryTime; currentAttack = null; return(combatStanceState); } } } } else { GetNewAttack(enemyManager); } return(combatStanceState); }
public abstract State Tick(EnemyManager enemyManager, EnemyStats enemyStats, EnemyAnimatorManager enemyAnimatorManager);
private void Awake() { enemyManager = GetComponent <EnemyManager>(); enemyAnimatorManager = GetComponentInChildren <EnemyAnimatorManager>(); }