#pragma once #include #include // Para shared_ptr #include // 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 private: std::shared_ptr 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 };