Tratando de eliminar las variables globales
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#include "gamedirector.h"
|
||||
|
||||
//Calcula el cuadrado de la distancia entre dos puntos
|
||||
// Calcula el cuadrado de la distancia entre dos puntos
|
||||
double distanceSquared(int x1, int y1, int x2, int y2)
|
||||
{
|
||||
int deltaX = x2 - x1;
|
||||
@@ -8,34 +8,99 @@ double distanceSquared(int x1, int y1, int x2, int y2)
|
||||
return deltaX * deltaX + deltaY * deltaY;
|
||||
}
|
||||
|
||||
//Detector de colisiones entre dos circulos
|
||||
// Detector de colisiones entre dos circulos
|
||||
bool checkCollision(Circle &a, Circle &b)
|
||||
{
|
||||
//Calcula el radio total al cuadrado
|
||||
// Calcula el radio total al cuadrado
|
||||
int totalRadiusSquared = a.r + b.r;
|
||||
totalRadiusSquared = totalRadiusSquared * totalRadiusSquared;
|
||||
|
||||
//Si la distancia entre el centro de los circulos es inferior a la suma de sus radios
|
||||
// Si la distancia entre el centro de los circulos es inferior a la suma de sus radios
|
||||
if (distanceSquared(a.x, a.y, b.x, b.y) < (totalRadiusSquared))
|
||||
{
|
||||
//Los circulos han colisionado
|
||||
// Los circulos han colisionado
|
||||
return true;
|
||||
}
|
||||
|
||||
//En caso contrario
|
||||
// En caso contrario
|
||||
return false;
|
||||
}
|
||||
|
||||
//Constructor
|
||||
// Constructor
|
||||
GameDirector::GameDirector()
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
//Iniciador
|
||||
// Destructor
|
||||
GameDirector::~GameDirector()
|
||||
{
|
||||
// Libera los efectos de sonido
|
||||
Mix_FreeChunk(gPopBalloonFX);
|
||||
Mix_FreeChunk(gBulletFX);
|
||||
gPopBalloonFX = NULL;
|
||||
gBulletFX = NULL;
|
||||
|
||||
// Libra la música
|
||||
Mix_FreeMusic(gTitleMusic);
|
||||
gTitleMusic = NULL;
|
||||
Mix_FreeMusic(gPlayingMusic);
|
||||
gPlayingMusic = NULL;
|
||||
|
||||
// Libera el mando
|
||||
SDL_JoystickClose(gGameController);
|
||||
gGameController = NULL;
|
||||
}
|
||||
|
||||
// Iniciador
|
||||
void GameDirector::init()
|
||||
{
|
||||
//Variables
|
||||
// Carga la música del titulo
|
||||
gTitleMusic = Mix_LoadMUS("media/music/title.ogg");
|
||||
if (gTitleMusic == NULL)
|
||||
{
|
||||
printf("Failed to load title music! SDL_mixer Error: %s\n", Mix_GetError());
|
||||
}
|
||||
|
||||
// Carga la música del juego
|
||||
gPlayingMusic = Mix_LoadMUS("media/music/playing.ogg");
|
||||
if (gPlayingMusic == NULL)
|
||||
{
|
||||
printf("Failed to load playing music! SDL_mixer Error: %s\n", Mix_GetError());
|
||||
}
|
||||
|
||||
// Carga los efectos de sonido para la explosión de los globos
|
||||
gPopBalloonFX = Mix_LoadWAV("media/sound/balloon.wav");
|
||||
if (gPopBalloonFX == NULL)
|
||||
{
|
||||
printf("Failed to load balloon sound effect! SDL_mixer Error: %s\n", Mix_GetError());
|
||||
}
|
||||
|
||||
// Carga los efectos de sonido para los disparos del jugador
|
||||
gBulletFX = Mix_LoadWAV("media/sound/bullet.wav");
|
||||
if (gBulletFX == NULL)
|
||||
{
|
||||
printf("Failed to load bullet sound effect! SDL_mixer Error: %s\n", Mix_GetError());
|
||||
}
|
||||
|
||||
// Comprueba los mandos
|
||||
if (SDL_NumJoysticks() < 1)
|
||||
{
|
||||
printf("Warning: No joysticks connected!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Carga el mando
|
||||
gGameController = SDL_JoystickOpen(0);
|
||||
if (gGameController == NULL)
|
||||
{
|
||||
printf("Warning: Unable to open game controller! SDL Error: %s\n", SDL_GetError());
|
||||
}
|
||||
printf("%i joysticks were found.\n", SDL_NumJoysticks());
|
||||
std::cout << SDL_JoystickNumButtons(gGameController) << " buttons\n";
|
||||
}
|
||||
|
||||
// Variables
|
||||
mGameStatus = GAME_STATE_TITLE;
|
||||
mOldTicks = 0;
|
||||
mMaxBalloons = 50;
|
||||
@@ -49,22 +114,22 @@ void GameDirector::init()
|
||||
mHiScoreText = std::to_string(mHiScore);
|
||||
mGetReady = true;
|
||||
|
||||
//Objeto jugador
|
||||
// Objeto jugador
|
||||
player.init();
|
||||
|
||||
//Establece a cero todos los valores del vector de objetos globo
|
||||
// Establece a cero todos los valores del vector de objetos globo
|
||||
resetBalloons();
|
||||
|
||||
//Crea dos objetos globo y los centra en el area de juego
|
||||
//balloon[0].init(0, BLOCK, BALLOON_4, BALLON_VELX_POSITIVE, 0);
|
||||
//balloon[0].allignTo(PLAY_AREA_WIDTH / 2);
|
||||
//balloon[1].init(0, BLOCK, BALLOON_4, BALLON_VELX_NEGATIVE, 0);
|
||||
//balloon[1].allignTo(PLAY_AREA_WIDTH / 2);
|
||||
// Crea dos objetos globo y los centra en el area de juego
|
||||
// balloon[0].init(0, BLOCK, BALLOON_4, BALLON_VELX_POSITIVE, 0);
|
||||
// balloon[0].allignTo(PLAY_AREA_WIDTH / 2);
|
||||
// balloon[1].init(0, BLOCK, BALLOON_4, BALLON_VELX_NEGATIVE, 0);
|
||||
// balloon[1].allignTo(PLAY_AREA_WIDTH / 2);
|
||||
|
||||
//Con los globos creados, calcula el nivel de amenaza
|
||||
// Con los globos creados, calcula el nivel de amenaza
|
||||
calculateMenaceLevel();
|
||||
|
||||
//Establece a cero todos los valores del vector de objetos bala
|
||||
// Establece a cero todos los valores del vector de objetos bala
|
||||
resetBullets();
|
||||
|
||||
#ifdef TEST
|
||||
@@ -73,22 +138,22 @@ void GameDirector::init()
|
||||
bulletTest.init(SCREEN_WIDTH / 4, SCREEN_HEIGHT / 2, BULLET_UP);
|
||||
#endif
|
||||
|
||||
//Los fondos
|
||||
// Los fondos
|
||||
gameBackground.init(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - (0 * BLOCK), &gGameBackgroundTexture);
|
||||
titleBackground.init(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, &gTitleBackgroundTexture);
|
||||
|
||||
//Objetos texto, uno de cada color
|
||||
// Objetos texto, uno de cada color
|
||||
whiteText.init(&gWhiteFontTexture);
|
||||
blackText.init(&gBlackFontTexture);
|
||||
|
||||
//Inicializa el objeto con el menu del titulo
|
||||
// Inicializa el objeto con el menu del titulo
|
||||
menuTitle.init(0, 16 * BLOCK, MENU_SELECTOR_WHITE, MENU_BACKGROUND_TRANSPARENT);
|
||||
menuTitle.addItem("START");
|
||||
menuTitle.addItem("EXIT");
|
||||
menuTitle.setBackgroundColor(0, 0, 0, 255);
|
||||
menuTitle.centerMenuOnScreen();
|
||||
|
||||
//Inicializa el objeto con el menu de pausa
|
||||
// Inicializa el objeto con el menu de pausa
|
||||
menuPause.init(0, 12 * BLOCK, MENU_SELECTOR_WHITE, MENU_BACKGROUND_SOLID);
|
||||
menuPause.addItem("CONTINUE");
|
||||
menuPause.addItem("EXIT TO TITLE");
|
||||
@@ -96,7 +161,7 @@ void GameDirector::init()
|
||||
menuPause.centerMenuOnScreen();
|
||||
}
|
||||
|
||||
//Hace una pausa de milisegundos
|
||||
// Hace una pausa de milisegundos
|
||||
void GameDirector::sleep(Uint16 time)
|
||||
{
|
||||
Uint32 ticks = SDL_GetTicks();
|
||||
@@ -106,19 +171,19 @@ void GameDirector::sleep(Uint16 time)
|
||||
}
|
||||
}
|
||||
|
||||
//Establece el valor de la variable
|
||||
// Establece el valor de la variable
|
||||
void GameDirector::setScore(Uint32 score)
|
||||
{
|
||||
mScore = score;
|
||||
}
|
||||
|
||||
//Establece el valor de la variable
|
||||
// Establece el valor de la variable
|
||||
void GameDirector::setHiScore(Uint32 score)
|
||||
{
|
||||
mHiScore = score;
|
||||
}
|
||||
|
||||
//Actualiza el valor de HiScore en caso necesario
|
||||
// Actualiza el valor de HiScore en caso necesario
|
||||
void GameDirector::updateHiScore()
|
||||
{
|
||||
if (mScore > mHiScore)
|
||||
@@ -127,7 +192,7 @@ void GameDirector::updateHiScore()
|
||||
}
|
||||
}
|
||||
|
||||
//Transforma un valor numérico en una cadena de 6 cifras
|
||||
// Transforma un valor numérico en una cadena de 6 cifras
|
||||
std::string GameDirector::updateScoreText(Uint32 num)
|
||||
{
|
||||
switch (num)
|
||||
@@ -161,7 +226,7 @@ std::string GameDirector::updateScoreText(Uint32 num)
|
||||
}
|
||||
}
|
||||
|
||||
//Pinta el marcador en pantalla usando un objeto texto
|
||||
// Pinta el marcador en pantalla usando un objeto texto
|
||||
void GameDirector::renderScoreBoard(Text &text)
|
||||
{
|
||||
mScoreText = updateScoreText(mScore);
|
||||
@@ -172,7 +237,7 @@ void GameDirector::renderScoreBoard(Text &text)
|
||||
text.write(HISCORE_NUMBER_X, HISCORE_NUMBER_Y, mHiScoreText);
|
||||
}
|
||||
|
||||
//Mueve todos los globos activos
|
||||
// Mueve todos los globos activos
|
||||
void GameDirector::moveBalloons()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBalloons; i++)
|
||||
@@ -184,7 +249,7 @@ void GameDirector::moveBalloons()
|
||||
}
|
||||
}
|
||||
|
||||
//Pinta en pantalla todos los globos activos
|
||||
// Pinta en pantalla todos los globos activos
|
||||
void GameDirector::renderBalloons()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBalloons; i++)
|
||||
@@ -196,7 +261,7 @@ void GameDirector::renderBalloons()
|
||||
}
|
||||
}
|
||||
|
||||
//Devuelve el primer indice no activo del vector de globos
|
||||
// Devuelve el primer indice no activo del vector de globos
|
||||
Uint8 GameDirector::getBallonFreeIndex()
|
||||
{
|
||||
int index = 0;
|
||||
@@ -213,7 +278,7 @@ Uint8 GameDirector::getBallonFreeIndex()
|
||||
return index;
|
||||
}
|
||||
|
||||
//Crea un globo nuevo en el vector de globos
|
||||
// Crea un globo nuevo en el vector de globos
|
||||
Uint8 GameDirector::createNewBalloon(int x, int y, Uint8 kind, float velx, Uint16 creationtimer)
|
||||
{
|
||||
Uint8 index = getBallonFreeIndex();
|
||||
@@ -221,7 +286,7 @@ Uint8 GameDirector::createNewBalloon(int x, int y, Uint8 kind, float velx, Uint1
|
||||
return index;
|
||||
}
|
||||
|
||||
//Establece a cero todos los valores del vector de objetos globo
|
||||
// Establece a cero todos los valores del vector de objetos globo
|
||||
void GameDirector::resetBalloons()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBalloons; i++)
|
||||
@@ -230,7 +295,7 @@ void GameDirector::resetBalloons()
|
||||
}
|
||||
}
|
||||
|
||||
//Explosiona un globo. Lo destruye y crea otros dos si es el caso
|
||||
// Explosiona un globo. Lo destruye y crea otros dos si es el caso
|
||||
void GameDirector::popBalloon(Uint8 index)
|
||||
{
|
||||
if (balloon[index].isActive())
|
||||
@@ -239,12 +304,12 @@ void GameDirector::popBalloon(Uint8 index)
|
||||
Uint8 freeIndex = 0;
|
||||
switch (kind)
|
||||
{
|
||||
//Si es del tipo más pequeño, simplemente elimina el globo
|
||||
// Si es del tipo más pequeño, simplemente elimina el globo
|
||||
case BALLOON_1:
|
||||
balloon[index].erase();
|
||||
break;
|
||||
|
||||
//En cualquier otro caso, crea dos globos de un tipo inferior
|
||||
// En cualquier otro caso, crea dos globos de un tipo inferior
|
||||
default:
|
||||
freeIndex = getBallonFreeIndex();
|
||||
balloon[freeIndex].init(0, balloon[index].getPosY(), balloon[index].getKind() - 1, BALLON_VELX_NEGATIVE, 0);
|
||||
@@ -256,14 +321,14 @@ void GameDirector::popBalloon(Uint8 index)
|
||||
balloon[freeIndex].allignTo(balloon[index].getPosX() + (balloon[index].getWidth() / 2));
|
||||
balloon[freeIndex].setVelY(-2.5);
|
||||
|
||||
//Elimina el globo
|
||||
// Elimina el globo
|
||||
balloon[index].erase();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Detiene todos los globos
|
||||
// Detiene todos los globos
|
||||
void GameDirector::stopAllBalloons()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBalloons; i++)
|
||||
@@ -275,7 +340,7 @@ void GameDirector::stopAllBalloons()
|
||||
}
|
||||
}
|
||||
|
||||
//Pone en marcha todos los globos
|
||||
// Pone en marcha todos los globos
|
||||
void GameDirector::startAllBalloons()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBalloons; i++)
|
||||
@@ -287,7 +352,7 @@ void GameDirector::startAllBalloons()
|
||||
}
|
||||
}
|
||||
|
||||
//Obtiene el numero de globos activos
|
||||
// Obtiene el numero de globos activos
|
||||
Uint8 GameDirector::countBalloons()
|
||||
{
|
||||
Uint8 num = 0;
|
||||
@@ -301,7 +366,7 @@ Uint8 GameDirector::countBalloons()
|
||||
return num;
|
||||
}
|
||||
|
||||
//Comprueba la colisión entre el jugador y los globos activos
|
||||
// Comprueba la colisión entre el jugador y los globos activos
|
||||
bool GameDirector::checkPlayerBallonCollision()
|
||||
{
|
||||
bool result = false;
|
||||
@@ -319,7 +384,7 @@ bool GameDirector::checkPlayerBallonCollision()
|
||||
return result;
|
||||
}
|
||||
|
||||
//Comprueba y procesa la colisión entre las balas y los globos
|
||||
// Comprueba y procesa la colisión entre las balas y los globos
|
||||
void GameDirector::processBulletBallonCollision()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBalloons; i++)
|
||||
@@ -344,7 +409,7 @@ void GameDirector::processBulletBallonCollision()
|
||||
}
|
||||
}
|
||||
|
||||
//Mueve las balas activas
|
||||
// Mueve las balas activas
|
||||
void GameDirector::moveBullets()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBullets; i++)
|
||||
@@ -356,7 +421,7 @@ void GameDirector::moveBullets()
|
||||
}
|
||||
}
|
||||
|
||||
//Pinta las balas activas
|
||||
// Pinta las balas activas
|
||||
void GameDirector::renderBullets()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBullets; i++)
|
||||
@@ -368,7 +433,7 @@ void GameDirector::renderBullets()
|
||||
}
|
||||
}
|
||||
|
||||
//Devuelve el primer indice no activo del vector de balas
|
||||
// Devuelve el primer indice no activo del vector de balas
|
||||
Uint8 GameDirector::getBulletFreeIndex()
|
||||
{
|
||||
Uint8 index = 0;
|
||||
@@ -385,7 +450,7 @@ Uint8 GameDirector::getBulletFreeIndex()
|
||||
return index;
|
||||
}
|
||||
|
||||
//Establece a cero todos los valores del vector de objetos bala
|
||||
// Establece a cero todos los valores del vector de objetos bala
|
||||
void GameDirector::resetBullets()
|
||||
{
|
||||
for (Uint8 i = 0; i < mMaxBullets; i++)
|
||||
@@ -394,13 +459,13 @@ void GameDirector::resetBullets()
|
||||
}
|
||||
}
|
||||
|
||||
//Crea un objeto bala
|
||||
// Crea un objeto bala
|
||||
void GameDirector::createBullet(int x, int y, Uint8 kind)
|
||||
{
|
||||
bullet[getBulletFreeIndex()].init(x, y, kind);
|
||||
}
|
||||
|
||||
//Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
void GameDirector::calculateMenaceLevel()
|
||||
{
|
||||
mMenaceLevel = 0;
|
||||
@@ -431,27 +496,27 @@ void GameDirector::calculateMenaceLevel()
|
||||
}
|
||||
}
|
||||
|
||||
//Obtiene el valor de la variable
|
||||
// Obtiene el valor de la variable
|
||||
Uint8 GameDirector::getMenaceLevel()
|
||||
{
|
||||
return mMenaceLevel;
|
||||
}
|
||||
|
||||
//Gestiona el nivel de amenaza
|
||||
// Gestiona el nivel de amenaza
|
||||
void GameDirector::checkMenaceLevel()
|
||||
{
|
||||
//Aumenta el nivel de amenaza en función de la puntuación
|
||||
// Aumenta el nivel de amenaza en función de la puntuación
|
||||
mMenaceLevelThreshold = 7 + (4 * (mScore / 10000));
|
||||
|
||||
//Si el nivel de amenza es inferior al umbral
|
||||
// Si el nivel de amenza es inferior al umbral
|
||||
if (mMenaceLevel < mMenaceLevelThreshold)
|
||||
{
|
||||
Uint8 index = 0;
|
||||
|
||||
//Obtiene el centro del jugador en el eje X
|
||||
// Obtiene el centro del jugador en el eje X
|
||||
int x = player.getPosX() + (player.getWidth() / 2);
|
||||
|
||||
//Crea un globo sobre el jugador en dirección hacia el centro
|
||||
// Crea un globo sobre el jugador en dirección hacia el centro
|
||||
if (x < (PLAY_AREA_WIDTH / 2))
|
||||
{
|
||||
index = createNewBalloon(0, PLAY_AREA_TOP + BLOCK - 37, BALLOON_4, BALLON_VELX_POSITIVE, 400);
|
||||
@@ -462,34 +527,34 @@ void GameDirector::checkMenaceLevel()
|
||||
}
|
||||
balloon[index].allignTo(x);
|
||||
|
||||
//Recalcula el nivel de amenaza con el nuevo globo
|
||||
// Recalcula el nivel de amenaza con el nuevo globo
|
||||
calculateMenaceLevel();
|
||||
}
|
||||
}
|
||||
|
||||
//Gestiona la entrada de teclado y mando durante el juego
|
||||
// Gestiona la entrada de teclado y mando durante el juego
|
||||
void GameDirector::checkGameInput()
|
||||
{
|
||||
//Obtiene el estado de las teclas pulsadas del teclado
|
||||
// Obtiene el estado de las teclas pulsadas del teclado
|
||||
const Uint8 *keystates = SDL_GetKeyboardState(NULL);
|
||||
|
||||
//Si está pulsada la tecla izquierda o el mando hacia la izquierda
|
||||
// Si está pulsada la tecla izquierda o el mando hacia la izquierda
|
||||
if ((keystates[SDL_SCANCODE_LEFT] != 0) || (SDL_JoystickGetAxis(gGameController, 0) < -JOYSTICK_DEAD_ZONE))
|
||||
{
|
||||
player.checkInput(INPUT_LEFT);
|
||||
}
|
||||
//Si está pulsada la tecla derecha o el mando hacia la derecha
|
||||
// Si está pulsada la tecla derecha o el mando hacia la derecha
|
||||
else if ((keystates[SDL_SCANCODE_RIGHT] != 0) || (SDL_JoystickGetAxis(gGameController, 0) > JOYSTICK_DEAD_ZONE))
|
||||
{
|
||||
player.checkInput(INPUT_RIGHT);
|
||||
}
|
||||
//Ninguna de las dos direcciones pulsadas
|
||||
// Ninguna de las dos direcciones pulsadas
|
||||
else
|
||||
{
|
||||
player.checkInput(NO_INPUT);
|
||||
}
|
||||
|
||||
//Comprobamos la tecla o el botón de disparo central
|
||||
// Comprobamos la tecla o el botón de disparo central
|
||||
if ((SDL_JoystickGetButton(gGameController, BUTTON_X)) || (keystates[SDL_SCANCODE_W] != 0))
|
||||
{
|
||||
if (player.canFire())
|
||||
@@ -497,12 +562,12 @@ void GameDirector::checkGameInput()
|
||||
createBullet(player.getPosX() + (player.getWidth() / 2) - 4, player.getPosY(), BULLET_UP);
|
||||
player.setFireCooldown(10);
|
||||
|
||||
//Reproduce el sonido de disparo
|
||||
// Reproduce el sonido de disparo
|
||||
Mix_PlayChannel(-1, gBulletFX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//Comprobamos la tecla o el botón de disparo izquierdo
|
||||
// Comprobamos la tecla o el botón de disparo izquierdo
|
||||
if ((SDL_JoystickGetButton(gGameController, BUTTON_Y)) || (keystates[SDL_SCANCODE_Q] != 0))
|
||||
{
|
||||
if (player.canFire())
|
||||
@@ -510,12 +575,12 @@ void GameDirector::checkGameInput()
|
||||
createBullet(player.getPosX() + (player.getWidth() / 2) - 4, player.getPosY(), BULLET_LEFT);
|
||||
player.setFireCooldown(10);
|
||||
|
||||
//Reproduce el sonido de disparo
|
||||
// Reproduce el sonido de disparo
|
||||
Mix_PlayChannel(-1, gBulletFX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//Comprobamos la tecla o el botón de disparo derecho
|
||||
// Comprobamos la tecla o el botón de disparo derecho
|
||||
if ((SDL_JoystickGetButton(gGameController, BUTTON_A)) || (keystates[SDL_SCANCODE_E] != 0))
|
||||
{
|
||||
if (player.canFire())
|
||||
@@ -523,38 +588,38 @@ void GameDirector::checkGameInput()
|
||||
createBullet(player.getPosX() + (player.getWidth() / 2) - 4, player.getPosY(), BULLET_RIGHT);
|
||||
player.setFireCooldown(10);
|
||||
|
||||
//Reproduce el sonido de disparo
|
||||
// Reproduce el sonido de disparo
|
||||
Mix_PlayChannel(-1, gBulletFX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//Comprobamos la tecla o el botón de pausa/menu
|
||||
// Comprobamos la tecla o el botón de pausa/menu
|
||||
if ((SDL_JoystickGetButton(gGameController, BUTTON_START)) || (keystates[SDL_SCANCODE_ESCAPE] != 0))
|
||||
{
|
||||
setGameStatus(GAME_STATE_PAUSED);
|
||||
|
||||
//Detiene la música
|
||||
// Detiene la música
|
||||
Mix_HaltMusic();
|
||||
}
|
||||
}
|
||||
|
||||
//Gestiona la entrada de teclado y mando durante el menu
|
||||
// Gestiona la entrada de teclado y mando durante el menu
|
||||
void GameDirector::checkMenuInput(Menu *menu)
|
||||
{
|
||||
//Obtiene el estado de las teclas pulsadas del teclado
|
||||
// Obtiene el estado de las teclas pulsadas del teclado
|
||||
const Uint8 *keystates = SDL_GetKeyboardState(NULL);
|
||||
|
||||
//Si está pulsada la tecla izquierda o el mando hacia la izquierda
|
||||
// Si está pulsada la tecla izquierda o el mando hacia la izquierda
|
||||
if ((keystates[SDL_SCANCODE_UP] != 0) || (SDL_JoystickGetAxis(gGameController, 1) < -JOYSTICK_DEAD_ZONE))
|
||||
{
|
||||
menu->checkInput(INPUT_UP);
|
||||
}
|
||||
//Si está pulsada la tecla derecha o el mando hacia la derecha
|
||||
// Si está pulsada la tecla derecha o el mando hacia la derecha
|
||||
else if ((keystates[SDL_SCANCODE_DOWN] != 0) || (SDL_JoystickGetAxis(gGameController, 1) > JOYSTICK_DEAD_ZONE))
|
||||
{
|
||||
menu->checkInput(INPUT_DOWN);
|
||||
}
|
||||
//Comprobamos la tecla o el botón de menu/pausa
|
||||
// Comprobamos la tecla o el botón de menu/pausa
|
||||
else if (keystates[SDL_SCANCODE_RETURN] != 0 || (SDL_JoystickGetButton(gGameController, BUTTON_A)))
|
||||
{
|
||||
menu->checkInput(INPUT_FIRE);
|
||||
@@ -643,19 +708,19 @@ void GameDirector::checkMenuInput(Menu *menu)
|
||||
#endif
|
||||
}
|
||||
|
||||
//Obtiene el valor de la variable
|
||||
// Obtiene el valor de la variable
|
||||
Uint8 GameDirector::getGameStatus()
|
||||
{
|
||||
return mGameStatus;
|
||||
}
|
||||
|
||||
//Establece el valor de la variable
|
||||
// Establece el valor de la variable
|
||||
void GameDirector::setGameStatus(Uint8 status)
|
||||
{
|
||||
mGameStatus = status;
|
||||
}
|
||||
|
||||
//Pinta una transición en pantalla
|
||||
// Pinta una transición en pantalla
|
||||
void GameDirector::renderTransition(Uint8 index)
|
||||
{
|
||||
switch (index)
|
||||
@@ -724,7 +789,7 @@ void GameDirector::renderTransition(Uint8 index)
|
||||
}
|
||||
}
|
||||
|
||||
//Pinta el texto GetReady en pantalla
|
||||
// Pinta el texto GetReady en pantalla
|
||||
void GameDirector::renderGetReady()
|
||||
{
|
||||
if (mGetReady)
|
||||
@@ -746,41 +811,41 @@ void GameDirector::renderGetReady()
|
||||
}
|
||||
}
|
||||
|
||||
//Bucle para el titulo del juego
|
||||
// Bucle para el titulo del juego
|
||||
void GameDirector::runTitle()
|
||||
{
|
||||
//Si la música no está sonando
|
||||
// Si la música no está sonando
|
||||
if (Mix_PlayingMusic() == 0)
|
||||
{
|
||||
//Reproduce la música
|
||||
// Reproduce la música
|
||||
Mix_PlayMusic(gTitleMusic, -1);
|
||||
}
|
||||
|
||||
//Comprueba los eventos que hay en la cola
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(&eventHandler) != 0)
|
||||
{
|
||||
//Evento de salida de la aplicación
|
||||
// Evento de salida de la aplicación
|
||||
if (eventHandler.type == SDL_QUIT)
|
||||
{
|
||||
setGameStatus(GAME_STATE_QUIT);
|
||||
}
|
||||
}
|
||||
|
||||
//Limpia la pantalla
|
||||
// Limpia la pantalla
|
||||
SDL_SetRenderDrawColor(gRenderer, 0x00, 0x00, 0x00, 0xFF);
|
||||
SDL_RenderClear(gRenderer);
|
||||
|
||||
//Dibuja los objetos
|
||||
// Dibuja los objetos
|
||||
titleBackground.render();
|
||||
menuTitle.render(whiteText);
|
||||
|
||||
//Actualiza la pantalla
|
||||
// Actualiza la pantalla
|
||||
SDL_RenderPresent(gRenderer);
|
||||
|
||||
//Comprueba las entradas para el menu
|
||||
// Comprueba las entradas para el menu
|
||||
checkMenuInput(&menuTitle);
|
||||
|
||||
//Comprueba si se ha seleccionado algún item del menú
|
||||
// Comprueba si se ha seleccionado algún item del menú
|
||||
switch (menuTitle.getItemSelected())
|
||||
{
|
||||
case 0:
|
||||
@@ -801,44 +866,44 @@ void GameDirector::runTitle()
|
||||
}
|
||||
}
|
||||
|
||||
//Bucle para el juego
|
||||
// Bucle para el juego
|
||||
void GameDirector::runGame()
|
||||
{
|
||||
//Si la música no está sonando
|
||||
// Si la música no está sonando
|
||||
if (Mix_PlayingMusic() == 0)
|
||||
{
|
||||
//Reproduce la música
|
||||
// Reproduce la música
|
||||
Mix_PlayMusic(gPlayingMusic, -1);
|
||||
}
|
||||
|
||||
//Lógica del juego
|
||||
//Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||
// Lógica del juego
|
||||
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||
if (SDL_GetTicks() - mOldTicks > mGameSpeed)
|
||||
{
|
||||
//Actualiza el contador de ticks
|
||||
// Actualiza el contador de ticks
|
||||
mOldTicks = SDL_GetTicks();
|
||||
|
||||
//Comprueba el teclado/mando
|
||||
// Comprueba el teclado/mando
|
||||
checkGameInput();
|
||||
|
||||
//Comprueba los eventos que hay en la cola
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(&eventHandler) != 0)
|
||||
{
|
||||
//Evento de salida de la aplicación
|
||||
// Evento de salida de la aplicación
|
||||
if (eventHandler.type == SDL_QUIT)
|
||||
{
|
||||
setGameStatus(GAME_STATE_QUIT);
|
||||
}
|
||||
|
||||
//Tecla T pulsada
|
||||
// Tecla T pulsada
|
||||
if (eventHandler.key.keysym.sym == SDLK_t)
|
||||
{
|
||||
//startAllBalloons();
|
||||
// startAllBalloons();
|
||||
popBalloon(0);
|
||||
break;
|
||||
}
|
||||
#ifdef TEST
|
||||
//W key pressed
|
||||
// W key pressed
|
||||
if (eventHandler.key.keysym.sym == SDLK_w)
|
||||
{
|
||||
bulletTest.setPosY(bulletTest.getPosY() - 1);
|
||||
@@ -846,7 +911,7 @@ void GameDirector::runGame()
|
||||
break;
|
||||
}
|
||||
|
||||
//S key pressed
|
||||
// S key pressed
|
||||
if (eventHandler.key.keysym.sym == SDLK_s)
|
||||
{
|
||||
bulletTest.setPosY(bulletTest.getPosY() + 1);
|
||||
@@ -854,7 +919,7 @@ void GameDirector::runGame()
|
||||
break;
|
||||
}
|
||||
|
||||
//A key pressed
|
||||
// A key pressed
|
||||
if (eventHandler.key.keysym.sym == SDLK_a)
|
||||
{
|
||||
bulletTest.setPosX(bulletTest.getPosX() - 1);
|
||||
@@ -862,7 +927,7 @@ void GameDirector::runGame()
|
||||
break;
|
||||
}
|
||||
|
||||
//D key pressed
|
||||
// D key pressed
|
||||
if (eventHandler.key.keysym.sym == SDLK_d)
|
||||
{
|
||||
bulletTest.setPosX(bulletTest.getPosX() + 1);
|
||||
@@ -872,37 +937,37 @@ void GameDirector::runGame()
|
||||
#endif
|
||||
}
|
||||
|
||||
//Actualiza el jugador
|
||||
// Actualiza el jugador
|
||||
player.update();
|
||||
|
||||
//Mueve los globos
|
||||
// Mueve los globos
|
||||
moveBalloons();
|
||||
|
||||
#ifdef TEST
|
||||
balloonTest.move();
|
||||
#endif
|
||||
|
||||
//Mueve las balas
|
||||
// Mueve las balas
|
||||
moveBullets();
|
||||
|
||||
//Procesa las colisiones entre globos y balas
|
||||
// Procesa las colisiones entre globos y balas
|
||||
processBulletBallonCollision();
|
||||
|
||||
//Comprueba el nivel de amenaza
|
||||
// Comprueba el nivel de amenaza
|
||||
checkMenaceLevel();
|
||||
|
||||
//Comprueba la colisión entre el jugador y los globos
|
||||
// Comprueba la colisión entre el jugador y los globos
|
||||
if (checkPlayerBallonCollision())
|
||||
{
|
||||
//stopAllBalloons();
|
||||
// stopAllBalloons();
|
||||
}
|
||||
}
|
||||
|
||||
//Limpia la pantalla
|
||||
// Limpia la pantalla
|
||||
SDL_SetRenderDrawColor(gRenderer, 0x00, 0x00, 0x00, 0xFF);
|
||||
SDL_RenderClear(gRenderer);
|
||||
|
||||
//Dibuja los objetos
|
||||
// Dibuja los objetos
|
||||
gameBackground.render();
|
||||
renderBalloons();
|
||||
#ifdef TEST
|
||||
@@ -913,31 +978,31 @@ void GameDirector::runGame()
|
||||
whiteText.write(0, 0, "X");
|
||||
}
|
||||
#endif
|
||||
//whiteText.write(0, 0, std::to_string(mMenaceLevelThreshold));
|
||||
//whiteText.write(0, BLOCK, std::to_string(player.getPosX() + player.getWidth()));
|
||||
// whiteText.write(0, 0, std::to_string(mMenaceLevelThreshold));
|
||||
// whiteText.write(0, BLOCK, std::to_string(player.getPosX() + player.getWidth()));
|
||||
renderBullets();
|
||||
player.render();
|
||||
renderScoreBoard(whiteText);
|
||||
renderGetReady();
|
||||
|
||||
//Actualiza la pantalla
|
||||
// Actualiza la pantalla
|
||||
SDL_RenderPresent(gRenderer);
|
||||
}
|
||||
|
||||
//Bucle para el menu de pausa del juego
|
||||
// Bucle para el menu de pausa del juego
|
||||
void GameDirector::runPausedGame()
|
||||
{
|
||||
//Comprueba los eventos que hay en la cola
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(&eventHandler) != 0)
|
||||
{
|
||||
//Evento de salida de la aplicación
|
||||
// Evento de salida de la aplicación
|
||||
if (eventHandler.type == SDL_QUIT)
|
||||
{
|
||||
setGameStatus(GAME_STATE_QUIT);
|
||||
}
|
||||
}
|
||||
|
||||
//Dibuja los objetos
|
||||
// Dibuja los objetos
|
||||
gameBackground.render();
|
||||
renderBalloons();
|
||||
renderBullets();
|
||||
@@ -945,13 +1010,13 @@ void GameDirector::runPausedGame()
|
||||
renderScoreBoard(whiteText);
|
||||
menuPause.render(whiteText);
|
||||
|
||||
//Limpia la pantalla
|
||||
// Limpia la pantalla
|
||||
SDL_RenderPresent(gRenderer);
|
||||
|
||||
//Comprueba las entradas para el menu
|
||||
// Comprueba las entradas para el menu
|
||||
checkMenuInput(&menuPause);
|
||||
|
||||
//Comprueba si se ha seleccionado algún item del menú
|
||||
// Comprueba si se ha seleccionado algún item del menú
|
||||
switch (menuPause.getItemSelected())
|
||||
{
|
||||
case 0:
|
||||
|
||||
Reference in New Issue
Block a user