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; } }