#pragma once #include #include // Para shared_ptr #include // Para string #include // Para vector #include "utils/defines.hpp" // Para GAMECANVAS_WIDTH, GAMECANVAS_FIRST_QUAR... class SurfaceAnimatedSprite; // lines 9-9 class SurfaceMovingSprite; // lines 10-10 class DeltaTimer; class Ending2 { public: // --- Constructor y Destructor --- --- Ending2(); ~Ending2() = default; // --- Bucle principal --- void run(); private: // --- Enum para representar los estados del final --- enum class EndingState : int { PRE_CREDITS, // Estado previo a los créditos CREDITS, // Estado de los créditos POST_CREDITS, // Estado posterior a los créditos FADING, // Estado de fundido de los textos a negrp }; // --- Estructura para controlar los estados y su duración --- struct State { EndingState state; // Estado actual float duration; // Duración en segundos para el estado actual // Constructor parametrizado para inicializar la estructura State(EndingState initial_state, float state_duration) : state(initial_state), duration(state_duration) {} }; // --- Constantes --- static constexpr int FIRST_COL = GAMECANVAS_FIRST_QUARTER_X + (GAMECANVAS_WIDTH / 16); // Primera columna por donde desfilan los sprites static constexpr int SECOND_COL = GAMECANVAS_THIRD_QUARTER_X - (GAMECANVAS_WIDTH / 16); // Segunda columna por donde desfilan los sprites static constexpr int DIST_SPRITE_TEXT = 8; // Distancia entre el sprite y el texto que lo acompaña static constexpr int DIST_SPRITE_SPRITE = 0; // Distancia entre dos sprites de la misma columna static constexpr int INITIAL_Y_OFFSET = 40; // Offset inicial en Y para posicionar sprites static constexpr int SCREEN_MESH_HEIGHT = 8; // Altura de la malla superior/inferior de la pantalla static constexpr int TEXT_SPACING_MULTIPLIER = 2; // Multiplicador para espaciado entre líneas de texto // Constantes de tiempo (basadas en tiempo real, no en frames) static constexpr float SPRITE_DESP_SPEED = -12.0F; // Velocidad de desplazamiento en pixels/segundo (era -0.2 px/frame @ 60fps) static constexpr float STATE_PRE_CREDITS_DURATION = 3.0F; // Duración del estado previo a créditos en segundos static constexpr float STATE_POST_CREDITS_DURATION = 5.0F; // Duración del estado posterior a créditos en segundos static constexpr float STATE_FADE_DURATION = 5.0F; // Duración del fade final en segundos static constexpr int MUSIC_FADE_DURATION = 3000; // Duración del fade de música en milisegundos (para Audio API) // --- Objetos y punteros --- std::vector> sprites_; // Vector con todos los sprites a dibujar std::vector> sprite_texts_; // Vector con los sprites de texto de los sprites std::vector> texts_; // Vector con los sprites de texto std::unique_ptr delta_timer_; // Temporizador delta para time-based update // --- Variables --- std::vector sprite_list_; // Lista con todos los sprites a dibujar std::vector colors_; // Vector con los colores para el fade float sprite_max_width_ = 0; // El valor de ancho del sprite mas ancho float sprite_max_height_ = 0; // El valor de alto del sprite mas alto float state_time_ = 0.0F; // Tiempo acumulado en el estado actual float current_delta_ = 0.0F; // Delta time del frame actual State state_; // Controla el estado de la clase // --- Fucniones --- 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(float delta_time); // Actualiza el estado void transitionToState(EndingState new_state); // Transición entre estados void iniSpriteList(); // Inicializa la lista de sprites void loadSprites(); // Carga todos los sprites desde una lista void updateSprites(float delta); // Actualiza los sprites void updateTextSprites(float delta); // Actualiza los sprites de texto void updateTexts(float delta); // Actualiza los sprites de texto del final void renderSprites(); // Dibuja los sprites void renderSpriteTexts(); // Dibuja los sprites con el texto void renderTexts(); // Dibuja los sprites con el texto del final void placeSprites(); // Coloca los sprites en su sito void createSpriteTexts(); // Crea los sprites con las texturas con los textos void createTexts(); // Crea los sprites con las texturas con los textos del final void updateFinalFade(); // Actualiza el fade final };