70 lines
2.4 KiB
C++
70 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory> // Para shared_ptr
|
|
#include <string> // Para string
|
|
#include <vector> // Para vector
|
|
|
|
#include "scoreboard.hpp" // Para Scoreboard::Data
|
|
|
|
class Item;
|
|
|
|
/**
|
|
* @brief Gestor de items de una habitación
|
|
*
|
|
* Responsabilidades:
|
|
* - Almacenar y gestionar la colección de items
|
|
* - Actualizar todos los items
|
|
* - Renderizar todos los items
|
|
* - Detectar colisiones con items y gestionar pickup
|
|
* - Integración con ItemTracker, Scoreboard y Audio
|
|
*/
|
|
class ItemManager {
|
|
public:
|
|
/**
|
|
* @brief Constructor
|
|
* @param room_name Nombre de la habitación (para ItemTracker)
|
|
* @param scoreboard_data Puntero compartido a los datos del scoreboard
|
|
*/
|
|
ItemManager(std::string room_name, std::shared_ptr<Scoreboard::Data> scoreboard_data);
|
|
~ItemManager() = default;
|
|
|
|
// Prohibir copia y movimiento para evitar duplicación accidental
|
|
ItemManager(const ItemManager&) = delete;
|
|
auto operator=(const ItemManager&) -> ItemManager& = delete;
|
|
ItemManager(ItemManager&&) = delete;
|
|
auto operator=(ItemManager&&) -> ItemManager& = delete;
|
|
|
|
// Gestión de items
|
|
void addItem(std::shared_ptr<Item> item); // Añade un item a la colección
|
|
void clear(); // Elimina todos los items
|
|
|
|
// Actualización y renderizado
|
|
void update(float delta_time); // Actualiza todos los items
|
|
void render(); // Renderiza todos los items
|
|
|
|
// Estado
|
|
void setPaused(bool paused); // Pausa/despausa todos los items
|
|
|
|
// Detección de colisiones
|
|
/**
|
|
* @brief Comprueba si hay colisión con algún item
|
|
*
|
|
* Si hay colisión:
|
|
* - Añade el item a ItemTracker
|
|
* - Elimina el item de la colección
|
|
* - Reproduce el sonido de pickup
|
|
* - Actualiza el scoreboard y estadísticas
|
|
*
|
|
* @param rect Rectángulo de colisión
|
|
* @return true si hubo colisión, false en caso contrario
|
|
*/
|
|
auto checkCollision(SDL_FRect& rect) -> bool;
|
|
|
|
private:
|
|
std::vector<std::shared_ptr<Item>> items_; // Colección de items
|
|
std::string room_name_; // Nombre de la habitación
|
|
std::shared_ptr<Scoreboard::Data> data_; // Datos del scoreboard
|
|
};
|