#pragma once #include // for SDL_Renderer #include // for unique_ptr, shared_ptr #include "defines.h" // for AppMode class Texture; class Sprite; // Estados de la máquina de estados del logo enum class AppLogoState { HIDDEN, // Logo oculto, esperando APPLOGO_DISPLAY_INTERVAL FADE_IN, // Apareciendo (alpha 0 → 255) VISIBLE, // Completamente visible, esperando APPLOGO_DISPLAY_DURATION FADE_OUT // Desapareciendo (alpha 255 → 0) }; class AppLogo { public: AppLogo() = default; ~AppLogo() = default; // Inicializar textura y sprite del logo bool initialize(SDL_Renderer* renderer, int screen_width, int screen_height); // Actualizar temporizadores y estado de visibilidad void update(float delta_time, AppMode current_mode); // Renderizar logo si está visible void render(); // Actualizar tamaño de pantalla (reposicionar logo) void updateScreenSize(int screen_width, int screen_height); private: std::shared_ptr logo_texture_; // Textura del logo std::unique_ptr logo_sprite_; // Sprite para renderizar AppLogoState state_ = AppLogoState::HIDDEN; // Estado actual de la máquina de estados float timer_ = 0.0f; // Contador de tiempo para estado actual int current_alpha_ = 0; // Alpha actual (0-255) int screen_width_ = 0; // Ancho de pantalla (para centrar) int screen_height_ = 0; // Alto de pantalla (para centrar) // Métodos privados auxiliares void updateLogoPosition(); // Centrar logo en pantalla };