forked from jaildesigner-jailgames/jaildoctors_dilemma
66 lines
3.3 KiB
C++
66 lines
3.3 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:
|
|
// --- 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<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 ---
|
|
State state_ = State::WAITING; // Estado actual de la escena
|
|
float elapsed_time_ = 0.0f; // Tiempo transcurrido en el estado actual
|
|
std::vector<Uint8> 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 checkEvents(); // Comprueba el manejador de eventos
|
|
static void checkInput(); // 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
|
|
}; |