#include "key_manager.hpp" #include // Para std::move #include "core/audio/audio.hpp" // Para Audio #include "game/defaults.hpp" // Para Defaults::Sound::Files #include "game/entities/key.hpp" // Para Key #include "game/gameplay/inventory.hpp" // Para Inventory #include "game/gameplay/key_tracker.hpp" // Para KeyTracker #include "utils/utils.hpp" // Para checkCollision // Constructor KeyManager::KeyManager(std::string room_id) : room_id_(std::move(room_id)) { } // Añade una llave a la colección void KeyManager::addKey(std::shared_ptr key) { // NOLINT(readability-identifier-naming) keys_.push_back(std::move(key)); } // Elimina todas las llaves void KeyManager::clear() { keys_.clear(); } // Actualiza todas las llaves void KeyManager::update(float delta_time) { for (const auto& key : keys_) { key->update(delta_time); } } // Renderiza todas las llaves void KeyManager::render() { for (const auto& key : keys_) { key->render(); } } // Pausa/despausa todas las llaves void KeyManager::setPaused(bool paused) { for (const auto& key : keys_) { key->setPaused(paused); } } // Comprueba si hay colisión con alguna llave auto KeyManager::checkCollision(SDL_FRect& rect) -> bool { for (int i = 0; i < static_cast(keys_.size()); ++i) { if (::checkCollision(rect, keys_.at(i)->getCollider())) { // Añade el id de la llave al Inventory global Inventory::get()->addKey(keys_.at(i)->getId()); // Registra la posición en KeyTracker (para no respawnear) KeyTracker::get()->addKey(room_id_, keys_.at(i)->getPos()); // Elimina la llave de la colección keys_.erase(keys_.begin() + i); // Reproduce el sonido de pickup (reutiliza el sonido de item) Audio::get()->playSound(Defaults::Sound::Files::ITEM, Audio::Group::GAME); return true; } } return false; }