#include "item_manager.hpp" #include "core/audio/audio.hpp" // Para Audio #include "game/entities/item.hpp" // Para Item #include "game/options.hpp" // Para Options #include "item_tracker.hpp" // Para ItemTracker #include "scoreboard.hpp" // Para Scoreboard::Data #include "utils/utils.hpp" // Para checkCollision // Constructor ItemManager::ItemManager(std::string room_name, std::shared_ptr scoreboard_data) : room_name_(std::move(room_name)), data_(std::move(scoreboard_data)) { } // Añade un item a la colección void ItemManager::addItem(std::shared_ptr item) { // NOLINT(readability-identifier-naming) items_.push_back(std::move(item)); } // Elimina todos los items void ItemManager::clear() { items_.clear(); } // Actualiza todos los items void ItemManager::update(float delta_time) { for (const auto& item : items_) { item->update(delta_time); } } // Renderiza todos los items void ItemManager::render() { for (const auto& item : items_) { item->render(); } } // Pausa/despausa todos los items void ItemManager::setPaused(bool paused) { for (const auto& item : items_) { item->setPaused(paused); } } // Comprueba si hay colisión con algún item auto ItemManager::checkCollision(SDL_FRect& rect) -> bool { // NOLINT(readability-convert-member-functions-to-static) for (int i = 0; i < static_cast(items_.size()); ++i) { if (::checkCollision(rect, items_.at(i)->getCollider())) { // Registra el item como recogido ItemTracker::get()->addItem(room_name_, items_.at(i)->getPos()); // Elimina el item de la colección items_.erase(items_.begin() + i); // Reproduce el sonido de pickup Audio::get()->playSound("item.wav", Audio::Group::GAME); // Actualiza el scoreboard y estadísticas data_->items++; Options::stats.items = data_->items; return true; } } return false; }