#pragma once #include #include // Para shared_ptr #include // Para vector class Enemy; /** * @brief Gestor de enemigos de una habitación * * Responsabilidades: * - Almacenar y gestionar la colección de enemigos * - Actualizar todos los enemigos * - Renderizar todos los enemigos * - Detectar colisiones con enemigos */ class EnemyManager { public: EnemyManager() = default; ~EnemyManager() = default; // Prohibir copia y movimiento para evitar duplicación accidental EnemyManager(const EnemyManager&) = delete; auto operator=(const EnemyManager&) -> EnemyManager& = delete; EnemyManager(EnemyManager&&) = delete; auto operator=(EnemyManager&&) -> EnemyManager& = delete; // Gestión de enemigos void addEnemy(std::shared_ptr enemy); // Añade un enemigo a la colección void clear(); // Elimina todos los enemigos void removeLastEnemy(); // Elimina el último enemigo de la colección [[nodiscard]] auto isEmpty() const -> bool; // Comprueba si no hay enemigos // Actualización y renderizado void update(float delta_time); // Actualiza todos los enemigos void render(); // Renderiza todos los enemigos // Detección de colisiones auto checkCollision(SDL_FRect& rect) -> bool; // Comprueba si hay colisión con algún enemigo private: std::vector> enemies_; // Colección de enemigos };