treballant en sistema de portes i claus
This commit is contained in:
59
source/game/gameplay/key_manager.hpp
Normal file
59
source/game/gameplay/key_manager.hpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <memory> // Para shared_ptr
|
||||
#include <string> // Para string
|
||||
#include <vector> // Para vector
|
||||
|
||||
#include "game/entities/key.hpp" // Para Key, Key::Data
|
||||
|
||||
/**
|
||||
* @brief Gestor de llaves de una habitación
|
||||
*
|
||||
* Responsabilidades:
|
||||
* - Almacenar y gestionar la colección de llaves
|
||||
* - Actualizar y renderizar todas las llaves
|
||||
* - Detectar colisiones con el jugador y gestionar pickup
|
||||
* - Integración con Inventory (singleton global) y KeyTracker (persistencia por room)
|
||||
*/
|
||||
class KeyManager {
|
||||
public:
|
||||
explicit KeyManager(std::string room_id);
|
||||
~KeyManager() = default;
|
||||
|
||||
// Prohibir copia y movimiento para evitar duplicación accidental
|
||||
KeyManager(const KeyManager&) = delete;
|
||||
auto operator=(const KeyManager&) -> KeyManager& = delete;
|
||||
KeyManager(KeyManager&&) = delete;
|
||||
auto operator=(KeyManager&&) -> KeyManager& = delete;
|
||||
|
||||
// Gestión de llaves
|
||||
void addKey(std::shared_ptr<Key> key); // Añade una llave a la colección
|
||||
void clear(); // Elimina todas las llaves
|
||||
|
||||
// Actualización y renderizado
|
||||
void update(float delta_time); // Actualiza todas las llaves
|
||||
void render(); // Renderiza todas las llaves
|
||||
|
||||
// Estado
|
||||
void setPaused(bool paused); // Pausa/despausa todas las llaves
|
||||
|
||||
/**
|
||||
* @brief Comprueba si hay colisión con alguna llave
|
||||
*
|
||||
* Si hay colisión:
|
||||
* - Añade el id de la llave al Inventory global
|
||||
* - Registra la posición en KeyTracker (para no respawnear)
|
||||
* - Elimina la llave de la colección
|
||||
* - Reproduce el sonido de pickup
|
||||
*
|
||||
* @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<Key>> keys_; // Colección de llaves
|
||||
std::string room_id_; // Identificador de la habitación
|
||||
};
|
||||
Reference in New Issue
Block a user