Files
projecte_2026/source/game/entities/key.hpp
Sergio Valor 8ebf7894f2 - afegides claus i portes al editor
- fix: crear una nova habitació no modificava la memoria, soles els fitxers
2026-04-10 18:34:04 +02:00

49 lines
1.8 KiB
C++

#pragma once
#include <SDL3/SDL.h>
#include <memory> // Para shared_ptr
#include <string> // Para string
class AnimatedSprite;
/**
* @brief Llave coleccionable
*
* Entidad de 16x16 px con una animación "default". Al ser recogida por el
* jugador, su identificador (id_) se añade al Inventory global y la llave
* desaparece de la habitación. Una llave puede abrir todas las puertas con
* el mismo id; no se consume al usarse.
*/
class Key {
public:
struct Data {
std::string animation_path; // Ruta al fichero de animación (ej. "key1.yaml")
std::string id; // Identificador que abre las puertas con el mismo id
float x{0.0F}; // Posición X en píxeles
float y{0.0F}; // Posición Y en píxeles
};
explicit Key(const Data& data);
~Key() = default;
void render(); // Pinta la llave en pantalla
void update(float delta_time); // Avanza la animación
auto getCollider() -> SDL_FRect& { return collider_; } // Rectángulo de colisión
[[nodiscard]] auto getPos() const -> SDL_FPoint; // Posición actual (para tracker)
[[nodiscard]] auto getId() const -> const std::string& { return id_; } // Identificador de la llave
void setPaused(bool paused) { is_paused_ = paused; } // Pausa/despausa la animación
#ifdef _DEBUG
void setPosition(float x, float y); // Mueve sprite y collider en vivo (editor)
#endif
private:
std::shared_ptr<AnimatedSprite> sprite_; // Sprite animado de la llave
SDL_FRect collider_{}; // Rectángulo de colisión
std::string id_; // Identificador
bool is_paused_{false}; // Indica si la llave está pausada
};