#pragma once #include #include // Para shared_ptr #include // Para vector #include "game/entities/enemy.hpp" // Para Enemy, Enemy::Data /** * @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 #ifdef _DEBUG void updateAnimations(float delta_time); // Solo actualiza animaciones sin mover enemigos void resetPositions(const std::vector& enemy_data); // Resetea todos los enemigos a su posición inicial [[nodiscard]] auto getCount() const -> int; // Número de enemigos auto getEnemy(int index) -> std::shared_ptr&; // Acceso a un enemigo por índice #endif private: std::vector> enemies_; // Colección de enemigos };