49 lines
1.8 KiB
C++
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
|
|
};
|