forked from jaildesigner-jailgames/coffee_crisis
550 lines
13 KiB
C++
550 lines
13 KiB
C++
#pragma once
|
|
#include "ifdefs.h"
|
|
#include "sprite.h"
|
|
#include "movingsprite.h"
|
|
#include "smartsprite.h"
|
|
#include "player.h"
|
|
#include "balloon.h"
|
|
#include "bullet.h"
|
|
#include "item.h"
|
|
#include "text.h"
|
|
#include "text2.h"
|
|
#include "menu.h"
|
|
#include "const.h"
|
|
#include "jail_audio.h"
|
|
#include <math.h>
|
|
|
|
#ifndef GAMEDIRECTOR_H
|
|
#define GAMEDIRECTOR_H
|
|
|
|
// GameDirector
|
|
class GameDirector
|
|
{
|
|
public:
|
|
// Constructor
|
|
GameDirector();
|
|
|
|
// Destructor
|
|
~GameDirector();
|
|
|
|
// Iniciador
|
|
void init(bool reset);
|
|
|
|
// Arranca SDL y crea la ventana
|
|
bool initSDL();
|
|
|
|
// Crea el indice de ficheros
|
|
void setFileList();
|
|
|
|
// Comprueba que todos los ficheros existen
|
|
bool checkFileList();
|
|
|
|
// Carga un archivo de imagen en una textura
|
|
bool loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer);
|
|
|
|
// Carga los recursos necesarios
|
|
bool loadMedia(Uint8 section);
|
|
|
|
// Descrga los recursos necesarios
|
|
bool unLoadMedia(Uint8 section);
|
|
|
|
// Establece el valor de la variable
|
|
void setExecutablePath(std::string path);
|
|
|
|
// Establece el valor de la variable
|
|
void setScore(Uint32 score);
|
|
|
|
// Establece el valor de la variable
|
|
void setHiScore(Uint32 score);
|
|
|
|
// Actualiza el valor de HiScore en caso necesario
|
|
void updateHiScore();
|
|
|
|
// Transforma un valor numérico en una cadena de 6 cifras
|
|
std::string updateScoreText(Uint32 num);
|
|
|
|
// Pinta el marcador en pantalla usando un objeto texto
|
|
void renderScoreBoard();
|
|
|
|
// Actualiza el valor de la variable mStage
|
|
void updateStage();
|
|
|
|
// Actualiza el estado de muerte
|
|
void updateDeath();
|
|
|
|
// Renderiza el fade final cuando se acaba la partida
|
|
void renderDeathFade();
|
|
|
|
// Mueve todos los globos activos
|
|
void moveBalloons();
|
|
|
|
// Pinta en pantalla todos los globos activos
|
|
void renderBalloons();
|
|
|
|
// Devuelve el primer indice no activo del vector de globos
|
|
Uint8 getBallonFreeIndex();
|
|
|
|
// Crea un globo nuevo en el vector de globos
|
|
Uint8 createNewBalloon(float x, int y, Uint8 kind, float velx, Uint16 stoppedtimer, LTexture *texture);
|
|
|
|
// Establece a cero todos los valores del vector de objetos globo
|
|
void resetBalloons();
|
|
|
|
// Explosiona un globo. Lo destruye y crea otros dos si es el caso
|
|
void popBalloon(Uint8 index);
|
|
|
|
// Explosiona todos los globos
|
|
void popAllBallons();
|
|
|
|
// Detiene todos los globos
|
|
void stopAllBalloons(Uint16 time);
|
|
|
|
// Pone en marcha todos los globos
|
|
void startAllBalloons();
|
|
|
|
// Obtiene el numero de globos activos
|
|
Uint8 countBalloons();
|
|
|
|
// Comprueba la colisión entre el jugador y los globos activos
|
|
bool checkPlayerBallonCollision();
|
|
|
|
// Comprueba la colisión entre el jugador y los items
|
|
void checkPlayerItemCollision();
|
|
|
|
// Comprueba la colisión entre las balas y los globos
|
|
void checkBulletBallonCollision();
|
|
|
|
// Mueve las balas activas
|
|
void moveBullets();
|
|
|
|
// Pinta las balas activas
|
|
void renderBullets();
|
|
|
|
// Devuelve el primer indice no activo del vector de balas
|
|
Uint8 getBulletFreeIndex();
|
|
|
|
// Establece a cero todos los valores del vector de objetos bala
|
|
void resetBullets();
|
|
|
|
// Crea un objeto bala
|
|
void createBullet(int x, int y, Uint8 kind);
|
|
|
|
// Actualiza los items
|
|
void updateItems();
|
|
|
|
// Pinta los items activos
|
|
void renderItems();
|
|
|
|
// Devuelve el primer indice no activo del vector de items
|
|
Uint8 getItemFreeIndex();
|
|
|
|
// Establece a cero todos los valores del vector de objetos item
|
|
void resetItems();
|
|
|
|
// Devuelve un item en función del azar
|
|
Uint8 dropItem();
|
|
|
|
// Crea un objeto item
|
|
void createItem(int x, int y, Uint8 kind);
|
|
|
|
// Crea un objeto SmartSprite
|
|
void createItemScoreSprite(int x, int y, SmartSprite *sprite);
|
|
|
|
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
|
void throwCoffee(int x, int y);
|
|
|
|
// Crea un SmartSprite para arrojar al jugador al morir
|
|
void throwPlayer(int x, int y);
|
|
|
|
// Actualiza los SmartSprites
|
|
void updateSmartSprites();
|
|
|
|
// Pinta los SmartSprites activos
|
|
void renderSmartSprites();
|
|
|
|
// Devuelve el primer indice no activo del vector de SmartSprites
|
|
Uint8 getSmartSpriteFreeIndex();
|
|
|
|
// Establece a cero todos los valores del vector de objetos SmafrtSprite
|
|
void resetSmartSprites();
|
|
|
|
// Acciones a realizar cuando el jugador muere
|
|
void killPlayer();
|
|
|
|
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
|
void calculateMenaceLevel();
|
|
|
|
// Obtiene el valor de la variable
|
|
Uint8 getMenaceLevel();
|
|
|
|
// Obtiene el valor de la variable
|
|
bool isPlayFieldDrawOnly();
|
|
|
|
// Establece el valor de la variable
|
|
void setPlayFieldDrawOnly(bool state);
|
|
|
|
// Establece el valor de la variable
|
|
void setTimeStopped(bool value);
|
|
|
|
// Obtiene el valor de la variable
|
|
bool isTimeStopped();
|
|
|
|
// Establece el valor de la variable
|
|
void setTimeStoppedTimer(Uint16 value);
|
|
|
|
// Actualiza y comprueba el valor de la variable
|
|
void updateTimeStoppedTimer();
|
|
|
|
// Establece el valor de la variable
|
|
void setExplosionTime(bool value);
|
|
|
|
// Obtiene el valor de la variable
|
|
bool isExplosionTime();
|
|
|
|
// Establece el valor de la variable
|
|
void setRemainingExplosions(Uint8 value);
|
|
|
|
// Actualiza y comprueba el valor de la variable
|
|
void updateRemainingExplosionsTimer();
|
|
|
|
// Gestiona el nivel de amenaza
|
|
void checkMenaceLevel();
|
|
|
|
// Actualiza el campo de juego
|
|
void updatePlayField();
|
|
|
|
// Actualiza el fondo
|
|
void updateBackground();
|
|
|
|
// Dibuja el fondo
|
|
void renderBackground();
|
|
|
|
// Dibuja el campo de juego
|
|
void renderPlayField();
|
|
|
|
// Gestiona las entradas desde el mando de juego
|
|
bool checkGameController(Uint8 state);
|
|
|
|
// Gestiona la entrada durante el juego
|
|
void checkGameInput();
|
|
|
|
// Gestiona la entrada de teclado y mando durante el menu
|
|
void checkMenuInput(Menu *menu);
|
|
|
|
// Obtiene el valor de la variable
|
|
Uint8 getGameStatus();
|
|
|
|
// Establece el valor de la variable
|
|
void setGameStatus(Uint8 status);
|
|
|
|
// Pinta una transición en pantalla
|
|
void renderFade(Uint8 index);
|
|
|
|
// Pinta diferentes mensajes en la pantalla
|
|
void renderMessages();
|
|
|
|
// Habilita el efecto del item de detener el tiempo
|
|
void enableTimeStopItem();
|
|
|
|
// Deshabilita el efecto del item de detener el tiempo
|
|
void disableTimeStopItem();
|
|
|
|
// Cambia el valor de la variable de modo de pantalla completa
|
|
void changeFullScreenMode();
|
|
|
|
// Actualiza los elementos del menu de opciones
|
|
void updateOptionsMenu();
|
|
|
|
// Agita la pantalla
|
|
void shakeScreen();
|
|
|
|
// Bucle para el logo del juego
|
|
void runLogo();
|
|
|
|
// Bucle para la intro del juego
|
|
void runIntro();
|
|
|
|
// Bucle para el titulo del juego
|
|
void runTitle();
|
|
|
|
// Bucle para el juego
|
|
void runGame();
|
|
|
|
// Bucle para el menu de pausa del juego
|
|
void runPausedGame();
|
|
|
|
// Bucle para la pantalla de instrucciones
|
|
void runInstructions();
|
|
|
|
// Bucle para la pantalla de game over
|
|
void runGameOverScreen();
|
|
|
|
// Dibuja la informacion de debug en pantalla
|
|
void renderDebugInfo();
|
|
|
|
// Activa el modo Demo
|
|
void enableDemoMode();
|
|
|
|
// Desactiva el modo Demo
|
|
void disableDemoMode();
|
|
|
|
// Intercambia el proximo estado del juego despues del titulo
|
|
void toogleTitleNextGS();
|
|
|
|
private:
|
|
// La ventana donde dibujamos
|
|
SDL_Window *mWindow;
|
|
|
|
// El renderizador de la ventana
|
|
SDL_Renderer *mRenderer;
|
|
|
|
// Texturas donde dibujar
|
|
SDL_Texture *mBackbuffer;
|
|
SDL_Texture *mTitleSurface;
|
|
SDL_Texture *mInstructionsSurface;
|
|
|
|
// Manejador para el mando 1
|
|
SDL_Joystick *mGameController;
|
|
bool mGameControllerFound;
|
|
SDL_Haptic *mControllerHaptic;
|
|
|
|
// Datos del fichero
|
|
Uint32 mScoreDataFile[TOTAL_SCORE_DATA];
|
|
DemoKeys mDemoDataFile[TOTAL_DEMO_DATA];
|
|
|
|
// Manejador de eventos
|
|
SDL_Event *mEventHandler;
|
|
|
|
// El jugador
|
|
Player *mPlayer;
|
|
|
|
// Vector con los objetos globo
|
|
Balloon *mBalloon[MAX_BALLOONS];
|
|
|
|
// Vector con los objetos bala
|
|
Bullet *mBullet[MAX_BULLETS];
|
|
|
|
// Vector con los objetos item
|
|
Item *mItem[MAX_ITEMS];
|
|
|
|
// Fondo del juego
|
|
Sprite *mGameBackgroundFront;
|
|
Sprite *mGameBackgroundSky;
|
|
MovingSprite *mGBClouds1;
|
|
MovingSprite *mGBClouds1b;
|
|
MovingSprite *mGBClouds2;
|
|
MovingSprite *mGBClouds2b;
|
|
Sprite *mGrass;
|
|
|
|
// Instrucciones
|
|
Sprite *mInstructions;
|
|
|
|
// Fondo de la pantalla de titulo
|
|
Sprite *mTitleTile;
|
|
|
|
// Ventana visible de la textura de fondo del titulo
|
|
SDL_Rect mBackgroundWindow;
|
|
|
|
// Vector con los valores del seno para 360 grados
|
|
double mSen[360];
|
|
|
|
// Texto
|
|
struct text
|
|
{
|
|
Text *white;
|
|
Text *black;
|
|
Text *nokia;
|
|
};
|
|
|
|
text mText;
|
|
|
|
// Variable con lkos menus del juego
|
|
struct menu
|
|
{
|
|
Menu *title; // Menu de la pantalla de título
|
|
Menu *pause; // Menú de la pantalla de pausa
|
|
Menu *gameOver; // Menú de la pantalla de game over
|
|
Menu *options; // Menú de la pantalla de opciones
|
|
Menu *active; // Menu activo (de momento para la pantalla del titulo)
|
|
};
|
|
|
|
menu mMenu;
|
|
|
|
// Notificación GetReady!
|
|
SmartSprite *mGetReadyBitmap;
|
|
|
|
// Dibujos de la intro
|
|
SmartSprite *mIntroBitmap[INTRO_TOTAL_BITMAPS];
|
|
|
|
// Sprites con el titulo del juego para la pantalla de titulo
|
|
SmartSprite *mCoffeeBitmap;
|
|
SmartSprite *mCrisisBitmap;
|
|
AnimatedSprite *mDustSpriteLeft;
|
|
AnimatedSprite *mDustSpriteRight;
|
|
|
|
// Sprites con los puntos de algunos objetos
|
|
SmartSprite *m1000Bitmap;
|
|
SmartSprite *m2500Bitmap;
|
|
SmartSprite *m5000Bitmap;
|
|
|
|
// Vector para almacenar y gestionar SmartSprites
|
|
SmartSprite *mSmartSprite[MAX_SMART_SPRITES];
|
|
|
|
// Textos de la intro
|
|
Text2 *mIntroText[INTRO_TOTAL_TEXTS];
|
|
|
|
// Vector para coordinar los eventos de la intro
|
|
Uint8 mIntroEvents[INTRO_TOTAL_EVENTS];
|
|
|
|
// Vector para coordinar los eventos de la pantalla de titulo
|
|
Uint8 mTitleEvents[TITLE_TOTAL_EVENTS];
|
|
|
|
// Indicador para el bucle del titulo
|
|
Uint8 mTitleStatus;
|
|
|
|
struct game
|
|
{
|
|
Uint32 score; // Puntuación actual
|
|
Uint32 hiScore; // Puntuación máxima
|
|
Uint8 status; // Indicador para el bucle principal
|
|
bool paused; // Idica si el juego está en pausa
|
|
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
|
|
Uint8 stage; // Pantalla actual
|
|
Uint8 stageCounter; // Contador para el tiempo visible del texto de Stage
|
|
double stagePath[STAGE_COUNTER]; // Vector con los puntos Y por donde pasará la etiqueta
|
|
Uint16 deathCounter; // Contador para la animación de muerte del jugador
|
|
Uint8 deathIndex; // Indice del vector de smartsprites que contiene el sprite del jugador
|
|
};
|
|
|
|
game mGame;
|
|
|
|
// Contador de ticks para ajustar la velocidad del juego
|
|
Uint32 mTicks;
|
|
|
|
// Velocidad a la que se repite el bucle de juego
|
|
Uint8 mTicksSpeed;
|
|
|
|
// Nivel de amenaza actual
|
|
Uint8 mMenaceLevel;
|
|
|
|
// Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral,
|
|
// se generan más globos. Si el umbral aumenta, aumenta el numero de globos
|
|
Uint8 mMenaceLevelThreshold;
|
|
|
|
// Indica si el bucle de juego avanza o solo pinta
|
|
bool mPlayFieldDrawOnly;
|
|
|
|
// Indica si se va a mostrar la información de debug
|
|
bool mDebug;
|
|
|
|
// Almacena los códigos de teclado correspondientes
|
|
Input mKeyboard;
|
|
|
|
// Buffer para teclas pulsadas
|
|
Input mKeyboardBuffer;
|
|
|
|
// Indica si el tiempo está detenido
|
|
bool mTimeStopped;
|
|
|
|
// Temporizador para llevar la cuenta del tiempo detenido
|
|
Uint16 mTimeStoppedTimer;
|
|
|
|
// Cantidad de explosiones restantes
|
|
Uint8 mRemainingExplosions;
|
|
|
|
// Temporizador para la cantidad de explosiones restantes
|
|
Uint16 mRemainingExplosionsTimer;
|
|
|
|
// Indica si las explosiones estan en marcha
|
|
bool mExplosionTime;
|
|
|
|
// Contador para las instrucciones
|
|
Uint16 mInstructionsCounter;
|
|
|
|
// Temporizador para la pantalla de titulo
|
|
Uint16 mTitleTimer;
|
|
|
|
// Temporizador para el fondo de tiles de la pantalla de titulo
|
|
Uint16 mTitleBackgroundTimer;
|
|
|
|
// Variable para almacenar el tipo de efecto que hará el foindo del titulo
|
|
Uint8 mTitleBackgroundMode;
|
|
|
|
// Indicador para saber si se muestra el menu del titulo o la frase intermitente
|
|
bool mTitleMenuVisible;
|
|
|
|
// Indica si está activo el modo demo
|
|
bool mDemo;
|
|
|
|
// Indica si está activado el modo para grabar la demo
|
|
bool mDemoRecording;
|
|
|
|
// Contador para el modo demo
|
|
Uint16 mDemoCounter;
|
|
DemoKeys mDemoKeys;
|
|
|
|
// Indica a que estado pasara el juego cuando acabe el temporizador del titulo
|
|
Uint8 mTiteNextGS;
|
|
|
|
// Contador para el juego
|
|
Uint32 mGameCounter;
|
|
|
|
// Variable para evitar la repetición de teclas en los menus
|
|
bool mMenuKeyPressed;
|
|
|
|
// Variables para el tamaño y modo de la ventana y variables para almacenar el valor si cancelamos en el menu de opciones
|
|
Uint32 mFullScreenMode;
|
|
Uint32 mFullScreenModePrevious;
|
|
Uint8 mWindowSize;
|
|
Uint8 mWindowSizePrevious;
|
|
|
|
// Variables para el logo
|
|
struct logo
|
|
{
|
|
Uint16 counter;
|
|
Sprite *sprite;
|
|
};
|
|
logo mLogo;
|
|
|
|
// Path del ejecutable
|
|
std::string mExecutablePath;
|
|
|
|
// Recursos
|
|
struct resourceBinFile
|
|
{
|
|
std::string file;
|
|
bool loaded;
|
|
};
|
|
|
|
resourceBinFile mBinFile[TOTAL_BINFILE];
|
|
|
|
struct resourceSound
|
|
{
|
|
std::string file;
|
|
bool loaded;
|
|
JA_Sound sound;
|
|
};
|
|
|
|
resourceSound mSound[TOTAL_SOUND];
|
|
|
|
struct resourceMusic
|
|
{
|
|
std::string file;
|
|
bool loaded;
|
|
JA_Music music;
|
|
};
|
|
|
|
resourceMusic mMusic[TOTAL_MUSIC];
|
|
|
|
struct resourceTexture
|
|
{
|
|
std::string file;
|
|
bool loaded;
|
|
LTexture *texture;
|
|
};
|
|
|
|
resourceTexture mTexture[TOTAL_TEXTURE];
|
|
};
|
|
|
|
#endif
|