#pragma once #include #include "common/asset.h" #include "common/screen.h" #include "common/smartsprite.h" #include "common/jail_audio.h" #include "const.h" // Clase GameLogo class GameLogo { private: // Objetos y punteros SDL_Renderer *renderer; // El renderizador de la ventana Screen *screen; // Objeto encargado de dibujar en pantalla Asset *asset; // Objeto que gestiona todos los ficheros de recursos Texture *dustTexture; // Textura con los graficos del polvo Texture *coffeeTexture; // Textura con los graficos de la palabra "COFFEE" Texture *crisisTexture; // Textura con los graficos de la plabra "CRISIS" Texture *arcadeEditionTexture; // Textura con los graficos de "Arcade Edition" AnimatedSprite *dustBitmapL; // Sprite con la el polvo que aparece al colisionar el texto de la pantalla de titulo AnimatedSprite *dustBitmapR; // Sprite con la el polvo que aparece al colisionar el texto de la pantalla de titulo SmartSprite *coffeeBitmap; // Sprite con la palabra "COFFEE" para la pantalla de titulo SmartSprite *crisisBitmap; // Sprite con la palabra "CRISIS" para la pantalla de titulo Sprite *arcadeEditionBitmap; // Sprite con los graficos de "Arcade Edition" JA_Sound_t *crashSound; // Sonido con el impacto del título param_t *param; // Puntero con todos los parametros del programa // Variables int x; // Posición donde dibujar el logo int y; // Posición donde dibujar el logo enum status_e { disabled, moving, shaking, finished } status; // Estado en el que se encuentra la clase struct shake_t { int desp; // Pixels de desplazamiento para agitar la pantalla en el eje x int delay; // Retraso entre cada desplazamiento de la pantalla al agitarse int counter; // Contador para el retraso int lenght; // Cantidad de desplazamientos a realizar int remaining; // Cantidad de desplazamientos pendientes a realizar int origin; // Valor inicial de la pantalla para dejarla igual tras el desplazamiento } shake; // Estructura para generar el efecto de agitación // Inicializa las variables void init(); // Calcula el desplazamiento vertical inicial int getInitialVerticalDesp(); public: // Constructor GameLogo(SDL_Renderer *renderer, Screen *screen, Asset *asset, param_t *param, int x, int y); // Destructor ~GameLogo(); // Pinta la clase en pantalla void render(); // Actualiza la lógica de la clase void update(); // Activa la clase void enable(); // Indica si ha terminado la animación bool hasFinished(); // Recarga las texturas void reLoad(); };