#pragma once #include #include "asset.h" #include "const.h" #include "fade.h" #include "game.h" #include "input.h" #include "instructions.h" #include "item.h" #include "jail_audio.h" #include "menu.h" #include "movingsprite.h" #include "screen.h" #include "smartsprite.h" #include "sprite.h" #include "text.h" #include "utils.h" #ifndef TITLE_H #define TITLE_H // Textos #define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1)" // Contadores #define TITLE_COUNTER 800 // Cantidad de eventos de la pantalla de titulo #define TITLE_TOTAL_EVENTS 2 // Clase Title class Title { private: 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 }; // Objetos SDL_Renderer *mRenderer; // El renderizador de la ventana Screen *mScreen; // Objeto encargado de dibujar en pantalla Asset *mAsset; // Objeto que gestiona todos los ficheros de recursos Input *mInput; // Objeto para leer las entradas de teclado o mando Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas Instructions *mInstructions; // Objeto para la sección de las instrucciones Game *mDemoGame; // Objeto para lanzar la demo del juego SDL_Event *mEventHandler; // Manejador de eventos LTexture *dustTexture; // Textura con los graficos del polvo LTexture *coffeeTexture; // Textura con los graficos de la palabra coffee LTexture *crisisTexture; // Textura con los graficos de la plabra crisis LTexture *gradientTexture; // Textura con los graficos para el degradado del fondo del titulo SDL_Rect mBackgroundWindow; // Ventana visible para la textura de fondo del titulo SDL_Texture *mBackground; // Textura dibujar el fondo del titulo 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 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 *mGradient; // Sprite para dibujar el degradado del titulo 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 // Variable JA_Music mMusic; // Musica para el titulo JA_Sound mSound; // Sonido con el impacto del título int mBackgroundCounter; // Temporizador para el fondo de tiles de la pantalla de titulo int 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 float mSin[360]; // Vector con los valores del seno precalculados bool mMenuVisible; // Indicador para saber si se muestra el menu del titulo o la frase intermitente 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 Uint8 mPostFade; // Opción a realizar cuando termina el fundido 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 std::vector mAvailableInputDevices; // Vector con todos los metodos de control disponibles int mDeviceIndex[2]; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles // Actualiza las variables del objeto void update(); // Dibuja el objeto en pantalla void render(); // Comprueba los eventos void checkEventHandler(); //Actualiza el tileado de fondo void updateBG(); // 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 bool updatePlayerInputs(int numPlayer); // Crea el mosaico de fondo del titulo void createTiledBackground(); // Comprueba cuantos mandos hay conectados para gestionar el menu de opciones void checkInputDevices(); public: // Constructor Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t section); // Destructor ~Title(); // Bucle para el titulo del juego section_t run(); }; #endif