118 lines
3.5 KiB
C++
118 lines
3.5 KiB
C++
#pragma once
|
|
|
|
#include <SDL2/SDL_render.h> // for SDL_Renderer, SDL_Texture
|
|
#include <SDL2/SDL_stdinc.h> // for Uint32
|
|
#include <memory> // for shared_ptr
|
|
#include <string> // for string
|
|
#include <vector> // for vector
|
|
class Asset; // lines 9-9
|
|
class Input; // lines 10-10
|
|
class Resource; // lines 11-11
|
|
class Screen; // lines 12-12
|
|
class Sprite; // lines 13-13
|
|
class Text; // lines 14-14
|
|
class Texture; // lines 15-15
|
|
struct JA_Music_t; // lines 16-16
|
|
|
|
class Ending
|
|
{
|
|
private:
|
|
// Estructuras
|
|
struct EndingTexture // Estructura con dos texturas y sprites, uno para mostrar y el otro hace de cortinilla
|
|
{
|
|
std::shared_ptr<Texture> texture; // Textura a mostrar
|
|
std::shared_ptr<Sprite> sprite; // Sprite para mostrar la textura
|
|
std::shared_ptr<Texture> cover_texture; // Textura que cubre a la otra textura
|
|
std::shared_ptr<Sprite> cover_sprite; // Sprite para mostrar la textura que cubre a la otra textura
|
|
int clip_desp; // Desplazamiento del spriteClip de la textura de cobertura
|
|
int clip_height; // Altura del spriteClip de la textura de cobertura
|
|
};
|
|
|
|
struct TextAndPosition // Estructura con un texto y su posición en el eje Y
|
|
{
|
|
std::string caption; // Texto
|
|
int pos; // Posición
|
|
};
|
|
|
|
struct TextIndex
|
|
{
|
|
int index;
|
|
int trigger;
|
|
};
|
|
|
|
struct SceneData // Estructura para crear cada una de las escenas del final
|
|
{
|
|
std::vector<TextIndex> text_index; // Indices del vector de textos a mostrar y su disparador
|
|
int picture_index; // Indice del vector de imagenes a mostrar
|
|
int counter_end; // Valor del contador en el que finaliza la escena
|
|
};
|
|
|
|
// Objetos y punteros
|
|
Screen *screen_; // Objeto encargado de dibujar en pantalla
|
|
SDL_Renderer *renderer_; // El renderizador de la ventana
|
|
Resource *resource_; // Objeto con los recursos
|
|
Asset *asset_; // Objeto con los ficheros de recursos
|
|
Input *input_; // Objeto pata gestionar la entrada
|
|
std::shared_ptr<Text> text_; // Objeto para escribir texto en pantalla
|
|
SDL_Texture *cover_texture_; // Textura para cubrir el texto
|
|
|
|
// Variables
|
|
int counter_; // Contador
|
|
int pre_counter_; // Contador previo
|
|
int cover_counter_; // Contador para la cortinilla
|
|
Uint32 ticks_; // Contador de ticks para ajustar la velocidad del programa
|
|
std::vector<EndingTexture> sprite_texts_; // Vector con los sprites de texto con su cortinilla
|
|
std::vector<EndingTexture> sprite_pics_; // Vector con los sprites de texto con su cortinilla
|
|
int current_scene_; // Escena actual
|
|
std::vector<SceneData> scenes_; // Vector con los textos e imagenes de cada escena
|
|
JA_Music_t *music; // Musica que suena durante el final
|
|
|
|
// Actualiza el objeto
|
|
void update();
|
|
|
|
// Dibuja el final en pantalla
|
|
void render();
|
|
|
|
// Comprueba el manejador de eventos
|
|
void checkEvents();
|
|
|
|
// Comprueba las entradas
|
|
void checkInput();
|
|
|
|
// Inicializa los textos
|
|
void iniTexts();
|
|
|
|
// Inicializa las imagenes
|
|
void iniPics();
|
|
|
|
// Inicializa las escenas
|
|
void iniScenes();
|
|
|
|
// Actualiza los contadores
|
|
void updateCounters();
|
|
|
|
// Actualiza las cortinillas de los elementos
|
|
void updateSpriteCovers();
|
|
|
|
// Comprueba si se ha de cambiar de escena
|
|
void checkChangeScene();
|
|
|
|
// Rellena la textura para la cortinilla
|
|
void fillCoverTexture();
|
|
|
|
// Dibuja la cortinilla de cambio de escena
|
|
void renderCoverTexture();
|
|
|
|
// Actualiza el volumen de la musica
|
|
void updateMusicVolume();
|
|
|
|
public:
|
|
// Constructor
|
|
Ending();
|
|
|
|
// Destructor
|
|
~Ending();
|
|
|
|
// Bucle principal
|
|
void run();
|
|
}; |