forked from jaildesigner-jailgames/jaildoctors_dilemma
Fase 1: Refactorización de Room - Extracción de gestión de entidades
Extraída la gestión de enemigos e items de Room a managers dedicados, reduciendo las responsabilidades de la clase Room y mejorando la separación de concernimientos. Cambios principales: - Creado EnemyManager para gestionar enemigos (creación, update, render, colisión) - Creado ItemManager para gestionar items (creación, update, render, colisión, pickup) - Room ahora delega toda la gestión de entidades a estos managers - Room mantiene su interfaz pública sin cambios (retrocompatibilidad total) - Eliminados vectores enemies_ e items_ de Room (reemplazados por managers) Archivos nuevos: - source/game/gameplay/enemy_manager.hpp/cpp - source/game/gameplay/item_manager.hpp/cpp Archivos modificados: - source/game/gameplay/room.hpp/cpp - CMakeLists.txt Estado: - Compilación exitosa - Carga de assets verificada (325 assets OK) - Linters ejecutados (clang-tidy y cppcheck) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
49
source/game/gameplay/enemy_manager.cpp
Normal file
49
source/game/gameplay/enemy_manager.cpp
Normal file
@@ -0,0 +1,49 @@
|
||||
#include "enemy_manager.hpp"
|
||||
|
||||
#include <algorithm> // Para std::ranges::any_of
|
||||
|
||||
#include "../../utils/utils.hpp" // Para checkCollision
|
||||
#include "../entities/enemy.hpp" // Para Enemy
|
||||
|
||||
// Añade un enemigo a la colección
|
||||
void EnemyManager::addEnemy(std::shared_ptr<Enemy> enemy) {
|
||||
enemies_.push_back(std::move(enemy));
|
||||
}
|
||||
|
||||
// Elimina todos los enemigos
|
||||
void EnemyManager::clear() {
|
||||
enemies_.clear();
|
||||
}
|
||||
|
||||
// Elimina el último enemigo de la colección
|
||||
void EnemyManager::removeLastEnemy() {
|
||||
if (!enemies_.empty()) {
|
||||
enemies_.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba si no hay enemigos
|
||||
auto EnemyManager::isEmpty() const -> bool {
|
||||
return enemies_.empty();
|
||||
}
|
||||
|
||||
// Actualiza todos los enemigos
|
||||
void EnemyManager::update(float delta_time) {
|
||||
for (const auto& enemy : enemies_) {
|
||||
enemy->update(delta_time);
|
||||
}
|
||||
}
|
||||
|
||||
// Renderiza todos los enemigos
|
||||
void EnemyManager::render() {
|
||||
for (const auto& enemy : enemies_) {
|
||||
enemy->render();
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba si hay colisión con algún enemigo
|
||||
auto EnemyManager::checkCollision(SDL_FRect& rect) -> bool {
|
||||
return std::ranges::any_of(enemies_, [&rect](const auto& enemy) {
|
||||
return ::checkCollision(rect, enemy->getCollider());
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user