#pragma once #include #include // Para shared_ptr #include // Para string #include // 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); ~ItemManager() = default; // Prohibir copia y movimiento para evitar duplicación accidental ItemManager(const ItemManager&) = delete; ItemManager& operator=(const ItemManager&) = delete; ItemManager(ItemManager&&) = delete; ItemManager& operator=(ItemManager&&) = delete; // Gestión de items void addItem(std::shared_ptr 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> items_; // Colección de items std::string room_name_; // Nombre de la habitación std::shared_ptr data_; // Datos del scoreboard };