Exemple #1
0
    public override State Tick(Enemy_Manager enemyManager, Enemy_Stats 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 we are performing an action, stop our movement
        if (distanceFromTarget > enemyManager.maximumAttackRange)
        {
            enemyAnimatorManager.anim.SetFloat("Vertical", 1, 0.1f, Time.deltaTime);
        }

        HandleRotationTowardsTarget(enemyManager);


        if (distanceFromTarget <= enemyManager.maximumAttackRange)
        {
            return(combatStanceState);
        }
        else
        {
            return(this);
        }
    }
Exemple #2
0
    public override State Tick(Enemy_Manager enemyManager, Enemy_Stats enemyStats, EnemyAnimatorManager enemyAnimatorManager)
    {
        float distanceFromTarget = Vector3.Distance(enemyManager.currentTarget.transform.position, enemyManager.transform.position);

        HandleRotationTowardsTarget(enemyManager);

        if (enemyManager.isPerformingAction)
        {
            enemyAnimatorManager.anim.SetFloat("Vertical", 0, 0.1f, Time.deltaTime);
        }

        if (enemyManager.currentRecoveryTime <= 0 && distanceFromTarget <= enemyManager.maximumAttackRange)
        {
            return(attackState);
        }
        else if (distanceFromTarget > enemyManager.maximumAttackRange)
        {
            return(pursueTargetState);
        }
        else
        {
            return(this);
        }
        //potentially circle the player or walk around them
    }
    void Start()
    {
        animatorManager = GetComponent <EnemyAnimatorManager>();

        hpMax     = SetMaxHealth();
        hpCurrent = hpMax;
    }
Exemple #4
0
 void Awake()
 {
     if (_instance == null)
     {
         _instance = this;
     }
     EnemyHazardAnimation = GetComponent <ArrayAnimatorScript>();
 }
 private void Awake()
 {
     enemyManager         = GetComponent <EnemieManager>();
     enemyAnimatorManager = GetComponent <EnemyAnimatorManager>();
     navMeshAgent         = GetComponentInChildren <NavMeshAgent>();
     enemyStats           = GetComponent <EnemieStats>();
     controller           = GetComponent <CharacterController>();
 }
Exemple #6
0
    void Awake()
    {
        enemyStats    = GetComponent <EnemyStats>();
        enemyManager  = GetComponent <EnemyManager>();
        enemyAnimator = GetComponent <EnemyAnimatorManager>();

        navMeshAgent = GetComponentInChildren <NavMeshAgent>();
        allWaypoints = GameObject.FindGameObjectsWithTag("Waypoint");
    }
Exemple #7
0
    private void Awake()
    {
        enemyManager  = GetComponent <EnemyManager>();
        enemyAnimator = GetComponent <EnemyAnimatorManager>();


        navMeshAgent = GetComponentInChildren <NavMeshAgent>();
        rb           = GetComponent <Rigidbody>();
    }
Exemple #8
0
 private void Awake()
 {
     enemyLocomotionManager = GetComponent <EnemyLocomotionManager>();
     enemyAnimationManager  = GetComponentInChildren <EnemyAnimatorManager>();
     enemyStats             = GetComponent <Enemy_Stats>();
     navMeshAgent           = GetComponentInChildren <NavMeshAgent>();
     enemyRigidBody         = GetComponent <Rigidbody>();
     navMeshAgent.enabled   = false;
 }
Exemple #9
0
    public override State Tick(Enemy_Manager enemyManager, Enemy_Stats enemyStats, EnemyAnimatorManager enemyAnimatorManager)
    {
        Vector3 targetDirection    = enemyManager.currentTarget.transform.position - transform.position;
        float   viewableAngle      = Vector3.Angle(targetDirection, transform.forward);
        float   distanceFromTarget = Vector3.Distance(enemyManager.currentTarget.transform.position, enemyManager.transform.position);

        HandleRotationTowardsTarget(enemyManager);
        //select one of our many attacks
        //if the selected attack is not able to be used because of bad angle or distance, select a new attack
        //if the attack is viable, stop our movement and attack the target
        //set our recovery timer to the attacks recovery time
        //return to the combat stance state

        #region Attacks

        if (enemyManager.isPerformingAction)
        {
            return(combatStanceState);
        }

        if (currentAttack != null)
        {
            //if too close, get new attack

            if (distanceFromTarget < currentAttack.minimumDistanceNeededToAttack)
            {
                return(this);
            }
            //if we are close enough to atack, then let us proceed
            else if (distanceFromTarget < currentAttack.maximumDistanceNeededToAttack)
            {
                //if our enemy is within our attacks viewable angle, we attack
                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.isPerformingAction  = true;
                        enemyManager.currentRecoveryTime = currentAttack.recoveryTime;
                        currentAttack = null;
                        return(combatStanceState);
                    }
                }
            }
        }
        else
        {
            GetNewAttack(enemyManager);
        }

        return(combatStanceState);
    }
Exemple #10
0
    public override State Tick(Enemy_Manager enemyManager, Enemy_Stats enemyStats, EnemyAnimatorManager enemyAnimatorManager)
    {
        if (isSleeping && enemyManager.isInteracting == false)
        {
            //play sleep anim
            Debug.Log("Is sleeping");
            enemyAnimatorManager.PlayTargetAnimation(sleepAnimation, true);
        }

        #region Handle Target Detection

        Collider[] colliders = Physics.OverlapSphere(enemyManager.transform.position, detectionRadius, detectionLayer);

        for (int i = 0; i < colliders.Length; i++)
        {
            CharacterStats characterStats = colliders[i].transform.GetComponent <CharacterStats>();

            if (characterStats != null)
            {
                Vector3 targetsDirection = characterStats.transform.position - enemyManager.transform.position;
                float   viewableAngle    = Vector3.Angle(targetsDirection, enemyManager.transform.forward);

                if (viewableAngle > enemyManager.minimumDetectionAngle &&
                    viewableAngle < enemyManager.maximumDetectionAngle)
                {
                    enemyManager.currentTarget = characterStats;
                    isSleeping = false;

                    //play wake animation
                    Debug.Log("Is awake!");
                    enemyAnimatorManager.PlayTargetAnimation(wakeAnimation, true);
                }
            }
        }

        #endregion

        #region Handle State Change

        if (enemyManager.currentTarget != null)
        {
            return(pursueTargetState);
        }
        else
        {
            return(this);
        }
        #endregion
    }
Exemple #11
0
    public override State Tick(Enemy_Manager enemyManager, Enemy_Stats enemyStats, EnemyAnimatorManager enemyAnimatorManager)
    {
        #region Handle Enemy Target Detection
        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)
            {
                //check for team id

                Vector3 targetDirection = characterStats.transform.position - transform.position;
                float   viewableAngle   = Vector3.Angle(targetDirection, transform.forward);

                if (viewableAngle > enemyManager.minimumDetectionAngle && viewableAngle < enemyManager.maximumDetectionAngle)
                {
                    enemyManager.currentTarget = characterStats;
                }
            }
        }
        #endregion

        #region Handle Switching To Next State
        if (enemyManager.currentTarget != null)
        {
            return(pursueTargetState);
        }
        else
        {
            return(this);
        }

        #endregion
    }
Exemple #12
0
 private void Awake()
 {
     enemyManager         = GetComponent <Enemy_Manager>();
     enemyAnimatorManager = GetComponentInChildren <EnemyAnimatorManager>();
 }
Exemple #13
0
 public abstract State Tick(Enemy_Manager enemyManager, Enemy_Stats enemyStats, EnemyAnimatorManager enemyAnimatorManager);