Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
 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);
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 public abstract State Tick(EnemyManager enemyManager, EnemyStats enemyStats, EnemyAnimatorManager enemyAnimatorManager);
 private void Awake()
 {
     enemyManager         = GetComponent <EnemyManager>();
     enemyAnimatorManager = GetComponentInChildren <EnemyAnimatorManager>();
 }