Files
jaildoctors_dilemma/source/game/gameplay/enemy_manager.hpp

53 lines
2.0 KiB
C++

#pragma once
#include <SDL3/SDL.h>
#include <memory> // Para shared_ptr
#include <vector> // 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> 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>& 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<Enemy>&; // Acceso a un enemigo por índice
#endif
private:
std::vector<std::shared_ptr<Enemy>> enemies_; // Colección de enemigos
};