Files
coffee_crisis_arcade_edition/source/game_logo.h

83 lines
2.6 KiB
C++

#pragma once
#include <SDL2/SDL.h>
#include "asset.h"
#include "screen.h"
#include "smartsprite.h"
#include "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
// 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, 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();
};