69 lines
3.4 KiB
C++
69 lines
3.4 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory> // Para shared_ptr
|
|
#include <vector> // 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:
|
|
// --- Enumeraciones ---
|
|
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
|
|
|
|
// --- Métodos ---
|
|
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
|
|
void renderSprites(); // Dibuja los sprites
|
|
|
|
// --- Variables miembro ---
|
|
// Objetos y punteros a recursos
|
|
std::shared_ptr<SurfaceAnimatedSprite> player_sprite_; // Sprite con el jugador
|
|
std::shared_ptr<SurfaceAnimatedSprite> tv_sprite_; // Sprite con el televisor
|
|
std::shared_ptr<DeltaTimer> delta_timer_; // Timer para time-based logic
|
|
|
|
// Variables de estado de la escena
|
|
State state_{State::WAITING}; // Estado actual de la escena
|
|
float elapsed_time_{0.0F}; // Tiempo transcurrido en el estado actual
|
|
|
|
// Variables de efectos visuales
|
|
std::vector<Uint8> colors_; // Vector con los colores para el fade
|
|
Uint8 color_{0}; // Color actual para texto y sprites
|
|
}; |