treballant en sistema de portes i claus
This commit is contained in:
69
source/game/gameplay/key_manager.cpp
Normal file
69
source/game/gameplay/key_manager.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#include "key_manager.hpp"
|
||||
|
||||
#include <utility> // 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> 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<int>(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;
|
||||
}
|
||||
Reference in New Issue
Block a user