#pragma once #include // Para shared_ptr #include // Para string #include "color.h" // Para Color class Text; // Clase para mostrar mensajes animados en la interfaz de usuario class UIMessage { public: // Constructor: recibe el renderizador de texto, el mensaje y el color UIMessage(std::shared_ptr text_renderer, std::string message_text, const Color &color); // Muestra el mensaje con animación de entrada void show(); // Oculta el mensaje con animación de salida void hide(); // Actualiza el estado de la animación (debe llamarse cada frame) void update(); // Dibuja el mensaje en pantalla si está visible void render(); // Indica si el mensaje está visible actualmente [[nodiscard]] auto isVisible() const -> bool; // Permite actualizar la posición del mensaje (por ejemplo, si el menú se mueve) void setPosition(float new_base_x, float new_base_y); private: // --- Configuración --- std::shared_ptr text_renderer_; // Renderizador de texto std::string text_; // Texto del mensaje a mostrar Color color_; // Color del texto // --- Estado --- bool visible_ = false; // Indica si el mensaje está visible bool animating_ = false; // Indica si el mensaje está en proceso de animación float base_x_ = 0.0F; // Posición X base donde se muestra el mensaje float base_y_ = 0.0F; // Posición Y base donde se muestra el mensaje float y_offset_ = 0.0F; // Desplazamiento vertical actual del mensaje (para animación) // --- Animación --- float start_y_ = 0.0F; // Posición Y inicial de la animación float target_y_ = 0.0F; // Posición Y objetivo de la animación int anim_step_ = 0; // Paso actual de la animación static constexpr int ANIMATION_STEPS = 8; // Número total de pasos de la animación static constexpr float DESP = -8.0F; // Distancia a desplazarse // Actualiza la interpolación de la animación (ease out/in cubic) void updateAnimation(); };