#pragma once #include #include // Para shared_ptr #include // Para vector class SurfaceAnimatedSprite; // lines 7-7 class DeltaTimer; // Forward declaration class GameOver { public: // Constructor y Destructor GameOver(); ~GameOver() = default; // Bucle principal void run(); private: // --- Estados --- enum class State { WAITING, // Espera inicial antes de empezar FADE_IN, // Fade in de colores desde black DISPLAY, // Mostrando contenido con color brillante FADE_OUT, // Fade out hacia black ENDING, // Pantalla en negro antes de salir TRANSITION // Cambio a logo }; // --- Constantes de Duración (segundos) --- static constexpr float WAITING_DURATION = 0.8F; // Espera inicial static constexpr float FADE_IN_DURATION = 0.32F; // Duración del fade in static constexpr float DISPLAY_DURATION = 4.64F; // Duración mostrando contenido static constexpr float FADE_OUT_DURATION = 0.32F; // Duración del fade out static constexpr float ENDING_DURATION = 1.12F; // Espera en negro antes de salir // --- Constantes de Posición --- static constexpr int TEXT_Y = 32; // Posición Y del texto principal static constexpr int SPRITE_Y_OFFSET = 30; // Offset Y para sprites desde TEXT_Y static constexpr int PLAYER_X_OFFSET = 10; // Offset X del jugador desde el centro static constexpr int TV_X_OFFSET = 10; // Offset X del TV desde el centro static constexpr int ITEMS_Y_OFFSET = 80; // Offset Y del texto de items desde TEXT_Y static constexpr int ROOMS_Y_OFFSET = 90; // Offset Y del texto de rooms desde TEXT_Y static constexpr int NIGHTMARE_TITLE_Y_OFFSET = 110; // Offset Y del título nightmare desde TEXT_Y static constexpr int NIGHTMARE_TEXT_Y_OFFSET = 120; // Offset Y del texto nightmare desde TEXT_Y // --- Objetos y punteros --- std::shared_ptr player_sprite_; // Sprite con el jugador std::shared_ptr tv_sprite_; // Sprite con el televisor std::shared_ptr delta_timer_; // Timer para time-based logic // --- Variables --- State state_ = State::WAITING; // Estado actual de la escena float elapsed_time_ = 0.0F; // Tiempo transcurrido en el estado actual std::vector colors_; // Vector con los colores para el fade Uint8 color_; // Color usado para el texto y los sprites // --- Funciones --- void update(); // Actualiza el objeto void render(); // Dibuja el final en pantalla static void handleEvents(); // Comprueba el manejador de eventos static void handleInput(); // Comprueba las entradas void updateState(); // Actualiza el estado y transiciones void updateColor(); // Actualiza el color usado para renderizar los textos e imagenes void renderSprites(); // Dibuja los sprites };