#pragma once #include "ifdefs.h" #include "const.h" #include "utils.h" #include "sprite.h" #include "movingsprite.h" #include "smartsprite.h" #include "item.h" #include "text.h" #include "menu.h" #include "fade.h" #include "input.h" #include "instructions.h" #include "game.h" #include "jail_audio.h" #ifndef TITLE_H #define TITLE_H // Title class Title { private: SDL_Window *mWindow; // Ventana de la aplicación AnimatedSprite *mDustBitmapL; // Sprite con la el polvo que aparece al colisionar el texto de la pantalla de titulo AnimatedSprite *mDustBitmapR; // Sprite con la el polvo que aparece al colisionar el texto de la pantalla de titulo bool mMenuVisible; // Indicador para saber si se muestra el menu del titulo o la frase intermitente float mSin[360]; // Vector con los valores del seno precalculados JA_Music mMusic; // Musica para el titulo JA_Sound mSound; // Sonido con el impacto del título LTexture *mItemsTexture; // Textura con los gráficos de los items para las instrucciones LTexture *mTitleTexture; // Textura con los graficos para el titulo LTexture *mTextTexture; // Textura con los gráficos para el texto LTexture *mTextTexture2; // Textura con los gráficos para el texto SDL_Event *mEventHandler; // Manejador de eventos SDL_Rect mBackgroundWindow; // Ventana visible para la textura de fondo del titulo SDL_Renderer *mRenderer; // El renderizador de la ventana SDL_Texture *mBackground; // Textura dibujar el fondo del titulo SmartSprite *mCoffeeBitmap; // Sprite con la palabra COFFEE para la pantalla de titulo SmartSprite *mCrisisBitmap; // Sprite con la palabra CRISIS para la pantalla de titulo Sprite *mTile; // Sprite para dibujar el fondo de pantalla del título Sprite *mGradient; // Sprite para dibujar el degradado del titulo std::string *mFileList; // Lista de ficheros Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas Uint16 mBackgroundCounter; // Temporizador para el fondo de tiles de la pantalla de titulo Uint16 mCounter; // Temporizador para la pantalla de titulo Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa Uint8 mBackgroundMode; // Variable para almacenar el tipo de efecto que hará el fondo de la pantalla de titulo Uint8 mEvents[TITLE_TOTAL_EVENTS]; // Vector para coordinar los eventos de la pantalla de titulo bool mDemo; // Indica si el modo demo estará activo section_t mSection; // Indicador para el bucle del titulo section_t mNextSection; // Indica cual es la siguiente sección a cargar cuando termine el contador del titulo Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa Text *mText; // Objeto de texto para poder escribir textos en pantalla Text *mText2; // Objeto de texto para poder escribir textos en pantalla Fade *mFade; // Objeto para realizar fundidos en pantalla Uint8 mPostFade; // Opción a realizar cuando termina el fundido Input *mInput; // Objeto para leer las entradas de teclado o mando Instructions *mInstructions; // Objeto para la sección de las instrucciones Game *mDemoGame; // Objeto para lanzar la demo del juego struct menu_t { Menu *title; // Menu de la pantalla de título Menu *options; // Menú de la pantalla de opciones Menu *active; // Menu activo (de momento para la pantalla del titulo) bool keyPressed; // Variable para evitar la repetición de teclas en los menus }; menu_t mMenu; // Variable con todos los objetos menus y sus variables struct options_t *mOptions; // Variable con todas las variables de las opciones del programa options_t mOptionsPrevious; // Variable de respaldo para las opciones // Carga los recursos necesarios para la sección 'Title' bool loadMedia(); // Cambia el valor de la variable de modo de pantalla completa void switchFullScreenModeVar(); // Actualiza los elementos de los menus void updateMenuLabels(); // Aplica las opciones de menu seleccionadas void applyOptions(); // Ejecuta la parte donde se muestran las instrucciones void runInstructions(Uint8 mode); // Ejecuta el juego en modo demo void runDemoGame(); // Modifica las opciones para los controles de los jugadores void SwitchInputs(int value); public: // Constructor Title(SDL_Window *window, SDL_Renderer *renderer, Input *input, std::string *fileList, options_t *options, Lang *lang); // Destructor ~Title(); // Inicializa las variables necesarias para la sección 'Title' void init(bool demo = true, Uint8 subsection = TITLE_SECTION_1); // Bucle para el titulo del juego section_t run(Uint8 subsection = TITLE_SECTION_1); }; #endif