Example #1
0
    protected virtual void UpdateState(EnemyState state)
    {
        switch (m_currentState)
        {
        case EnemyState.IDLE:

            if (m_sightController.m_isPlayerOnView)
            {
                EnterState(EnemyState.ENGAGING);
            }
            if (m_healthController.IsDead())
            {
                EnterState(EnemyState.DEAD);
            }
            break;

        case EnemyState.ENGAGING:
            engageTime -= Time.deltaTime;
            if (engageTime < 0f)
            {
                EnterState(EnemyState.MOVING);
            }
            break;

        case EnemyState.ATTACKING:
            if (!m_sightController.m_isPlayerOnView)
            {
                EnterState(EnemyState.IDLE);
            }
            if (m_healthController.IsDead())
            {
                EnterState(EnemyState.DEAD);
            }
            FollowTarget(player.transform.position, m_speed);
            m_shootController.Shoot();
            attackTime -= Time.deltaTime;
            if (attackTime < 0f)
            {
                EnterState(EnemyState.MOVING);
            }
            break;

        case EnemyState.MOVING:
            FollowTarget(player.transform.position, m_speed);
            timeToAttack -= Time.deltaTime;
            if (timeToAttack < 0f)
            {
                EnterState(EnemyState.ATTACKING);
            }
            if (m_healthController.IsDead())
            {
                EnterState(EnemyState.DEAD);
            }
            break;

        case EnemyState.DEAD:
            explosionTime -= Time.deltaTime;
            //if(explosionTime < 0){
            DropItems();
            Instantiate(explosionObject, this.transform.position, this.transform.rotation);
            Destroy(gameObject);
            //}
            break;
        }
    }