La sección del programa se controla ahora mediante un puntero a una variable

This commit is contained in:
2023-09-23 00:02:49 +02:00
parent 337e6ed6cc
commit 9513a6c57e
16 changed files with 179 additions and 201 deletions

View File

@@ -16,7 +16,8 @@
Director::Director(int argc, char *argv[]) Director::Director(int argc, char *argv[])
{ {
// Inicializa variables // Inicializa variables
section.name = SECTION_PROG_LOGO; section = new section_t();
section->name = SECTION_PROG_LOGO;
// Inicializa las opciones del programa // Inicializa las opciones del programa
initOptions(); initOptions();
@@ -73,6 +74,7 @@ Director::~Director()
delete screen; delete screen;
delete lang; delete lang;
delete options; delete options;
delete section;
SDL_DestroyRenderer(renderer); SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
@@ -662,47 +664,41 @@ bool Director::saveConfigFile()
return success; return success;
} }
// Establece el valor de la variable
void Director::setSection(section_t section)
{
this->section = section;
}
void Director::runLogo() void Director::runLogo()
{ {
logo = new Logo(renderer, screen, asset, input); logo = new Logo(renderer, screen, asset, input, section);
setSection(logo->run()); logo->run();
delete logo; delete logo;
} }
void Director::runIntro() void Director::runIntro()
{ {
intro = new Intro(renderer, screen, asset, input, lang); intro = new Intro(renderer, screen, asset, input, lang, section);
setSection(intro->run()); intro->run();
delete intro; delete intro;
} }
void Director::runTitle() void Director::runTitle()
{ {
title = new Title(renderer, screen, input, asset, options, lang, section); title = new Title(renderer, screen, input, asset, options, lang, section);
setSection(title->run()); title->run();
delete title; delete title;
} }
void Director::runGame() void Director::runGame()
{ {
const int numPlayers = section.subsection == SUBSECTION_GAME_PLAY_1P ? 1 : 2; const int numPlayers = section->subsection == SUBSECTION_GAME_PLAY_1P ? 1 : 2;
game = new Game(numPlayers, 0, renderer, screen, asset, lang, input, false, options); game = new Game(numPlayers, 0, renderer, screen, asset, lang, input, false, options, section);
setSection(game->run()); game->run();
delete game; delete game;
} }
void Director::run() void Director::run()
{ {
// Bucle principal // Bucle principal
while (section.name != SECTION_PROG_QUIT) while (section->name != SECTION_PROG_QUIT)
{ {
switch (section.name) switch (section->name)
{ {
case SECTION_PROG_LOGO: case SECTION_PROG_LOGO:
runLogo(); runLogo();

View File

@@ -43,10 +43,10 @@ private:
Input *input; // Objeto Input para gestionar las entradas Input *input; // Objeto Input para gestionar las entradas
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
Asset *asset; // Objeto que gestiona todos los ficheros de recursos Asset *asset; // Objeto que gestiona todos los ficheros de recursos
section_t *section; // Sección y subsección actual del programa;
// Variables // Variables
struct options_t *options; // Variable con todas las opciones del programa struct options_t *options; // Variable con todas las opciones del programa
section_t section; // Sección y subsección actual del programa;
std::string executablePath; // Path del ejecutable std::string executablePath; // Path del ejecutable
std::string systemFolder; // Carpeta del sistema donde guardar datos std::string systemFolder; // Carpeta del sistema donde guardar datos

View File

@@ -5,7 +5,7 @@
#include <iostream> #include <iostream>
// Constructor // Constructor
EnterID::EnterID(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options) EnterID::EnterID(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, section_t *section)
{ {
// Copia la dirección de los objetos // Copia la dirección de los objetos
this->renderer = renderer; this->renderer = renderer;
@@ -165,12 +165,6 @@ void EnterID::checkEvents()
screen->setWindowSize(4); screen->setWindowSize(4);
break; break;
} }
else if (eventHandler->key.keysym.scancode == SDL_SCANCODE_F5)
{
switchPalette();
break;
}
} }
} }
} }

View File

@@ -30,6 +30,7 @@ private:
SDL_Texture *textTexture; // Textura para dibujar el texto SDL_Texture *textTexture; // Textura para dibujar el texto
Text *text; // Objeto para escribir texto en pantalla Text *text; // Objeto para escribir texto en pantalla
Texture *texture; // Textura para la fuente para el texto Texture *texture; // Textura para la fuente para el texto
section_t *section; // Estado del bucle principal para saber si continua o se sale
// Variables // Variables
bool loopRunning; // Indica si ha de terminar el bucle principal bool loopRunning; // Indica si ha de terminar el bucle principal
@@ -66,7 +67,7 @@ private:
public: public:
// Constructor // Constructor
EnterID(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options); EnterID(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, section_t *section);
// Destructor // Destructor
~EnterID(); ~EnterID();

View File

@@ -2,7 +2,7 @@
#include "common/jscore.h" #include "common/jscore.h"
// Constructor // Constructor
Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options) Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options, section_t *section)
{ {
// Copia los punteros // Copia los punteros
this->renderer = renderer; this->renderer = renderer;
@@ -11,6 +11,7 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
this->lang = lang; this->lang = lang;
this->input = input; this->input = input;
this->options = options; this->options = options;
this->section = section;
// Pasa variables // Pasa variables
this->demo.enabled = demo; this->demo.enabled = demo;
@@ -246,8 +247,8 @@ void Game::init()
gameCompleted = false; gameCompleted = false;
gameCompletedCounter = 0; gameCompletedCounter = 0;
section.name = SECTION_PROG_GAME; section->name = SECTION_PROG_GAME;
section.subsection = SUBSECTION_GAME_PLAY_1P; section->subsection = SUBSECTION_GAME_PLAY_1P;
menaceCurrent = 0; menaceCurrent = 0;
menaceThreshold = 0; menaceThreshold = 0;
hiScoreAchieved = false; hiScoreAchieved = false;
@@ -1767,7 +1768,8 @@ void Game::updatePlayers()
{ {
if (demo.enabled) if (demo.enabled)
{ {
section = {SECTION_PROG_TITLE, SUBSECTION_TITLE_INSTRUCTIONS}; section->name = SECTION_PROG_TITLE;
section->subsection = SUBSECTION_TITLE_INSTRUCTIONS;
} }
else else
{ {
@@ -1866,7 +1868,7 @@ void Game::updateDeath()
} }
else else
{ {
section.subsection = SUBSECTION_GAME_GAMEOVER; section->subsection = SUBSECTION_GAME_GAMEOVER;
} }
} }
} }
@@ -3089,7 +3091,7 @@ void Game::checkGameInput()
// Comprueba el input de pausa // Comprueba el input de pausa
if (input->checkInput(input_pause, REPEAT_FALSE)) if (input->checkInput(input_pause, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
} }
// Incrementa el contador de la demo // Incrementa el contador de la demo
@@ -3099,7 +3101,8 @@ void Game::checkGameInput()
} }
else else
{ {
section = {SECTION_PROG_TITLE, SUBSECTION_TITLE_INSTRUCTIONS}; section->name = SECTION_PROG_TITLE;
section->subsection = SUBSECTION_TITLE_INSTRUCTIONS;
} }
} }
// Modo Demo no activo // Modo Demo no activo
@@ -3182,7 +3185,7 @@ void Game::checkGameInput()
// Comprueba el input de pausa // Comprueba el input de pausa
if (input->checkInput(input_cancel, REPEAT_FALSE, options->input[i].deviceType, options->input[i].id)) if (input->checkInput(input_cancel, REPEAT_FALSE, options->input[i].deviceType, options->input[i].id))
{ {
section.subsection = SUBSECTION_GAME_PAUSE; section->subsection = SUBSECTION_GAME_PAUSE;
} }
if (demo.counter < TOTAL_DEMO_DATA) if (demo.counter < TOTAL_DEMO_DATA)
@@ -3195,7 +3198,7 @@ void Game::checkGameInput()
} }
else if (demo.recording) else if (demo.recording)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} }
i++; i++;
@@ -3339,24 +3342,24 @@ void Game::shakeScreen()
} }
// Bucle para el juego // Bucle para el juego
section_t Game::run() void Game::run()
{ {
while (section.name == SECTION_PROG_GAME) while (section->name == SECTION_PROG_GAME)
{ {
// Sección juego en pausa // Sección juego en pausa
if (section.subsection == SUBSECTION_GAME_PAUSE) if (section->subsection == SUBSECTION_GAME_PAUSE)
{ {
runPausedGame(); runPausedGame();
} }
// Sección Game Over // Sección Game Over
if (section.subsection == SUBSECTION_GAME_GAMEOVER) if (section->subsection == SUBSECTION_GAME_GAMEOVER)
{ {
runGameOverScreen(); runGameOverScreen();
} }
// Sección juego jugando // Sección juego jugando
if ((section.subsection == SUBSECTION_GAME_PLAY_1P) || (section.subsection == SUBSECTION_GAME_PLAY_2P)) if ((section->subsection == SUBSECTION_GAME_PLAY_1P) || (section->subsection == SUBSECTION_GAME_PLAY_2P))
{ {
// Si la música no está sonando // Si la música no está sonando
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED)) if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
@@ -3381,8 +3384,6 @@ section_t Game::run()
render(); render();
} }
} }
return section;
} }
// Actualiza las variables del menu de pausa del juego // Actualiza las variables del menu de pausa del juego
@@ -3412,8 +3413,8 @@ void Game::updatePausedGame()
} }
else else
{ // Ha finalizado el contador { // Ha finalizado el contador
section.name = SECTION_PROG_GAME; section->name = SECTION_PROG_GAME;
section.subsection = numPlayers == 1 ? SUBSECTION_GAME_PLAY_1P : SUBSECTION_GAME_PLAY_2P; section->subsection = numPlayers == 1 ? SUBSECTION_GAME_PLAY_1P : SUBSECTION_GAME_PLAY_2P;
if (JA_GetMusicState() == JA_MUSIC_PAUSED) if (JA_GetMusicState() == JA_MUSIC_PAUSED)
{ {
@@ -3448,8 +3449,8 @@ void Game::updatePausedGame()
fade->update(); fade->update();
if (fade->hasEnded()) if (fade->hasEnded())
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
JA_StopMusic(); JA_StopMusic();
} }
} }
@@ -3519,7 +3520,7 @@ void Game::runPausedGame()
// Inicializa variables // Inicializa variables
pauseCounter = 90; pauseCounter = 90;
while ((section.subsection == SUBSECTION_GAME_PAUSE) && (section.name == SECTION_PROG_GAME)) while ((section->subsection == SUBSECTION_GAME_PAUSE) && (section->name == SECTION_PROG_GAME))
{ {
updatePausedGame(); updatePausedGame();
checkEvents(); checkEvents();
@@ -3554,15 +3555,15 @@ void Game::updateGameOverScreen()
switch (postFade) switch (postFade)
{ {
case 0: // YES case 0: // YES
section.name = SECTION_PROG_GAME; section->name = SECTION_PROG_GAME;
deleteAllVectorObjects(); deleteAllVectorObjects();
init(); init();
section.subsection = numPlayers == 1 ? SUBSECTION_GAME_PLAY_1P : SUBSECTION_GAME_PLAY_2P; section->subsection = numPlayers == 1 ? SUBSECTION_GAME_PLAY_1P : SUBSECTION_GAME_PLAY_2P;
break; break;
case 1: // NO case 1: // NO
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
break; break;
default: default:
@@ -3600,7 +3601,7 @@ void Game::updateGameOverScreen()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
else if (eventHandler->type == SDL_KEYDOWN && eventHandler->key.repeat == 0) else if (eventHandler->type == SDL_KEYDOWN && eventHandler->key.repeat == 0)
@@ -3693,7 +3694,7 @@ void Game::runGameOverScreen()
// Reinicia el menu // Reinicia el menu
gameOverMenu->reset(); gameOverMenu->reset();
while ((section.subsection == SUBSECTION_GAME_GAMEOVER) && (section.name == SECTION_PROG_GAME)) while ((section->subsection == SUBSECTION_GAME_GAMEOVER) && (section->name == SECTION_PROG_GAME))
{ {
updateGameOverScreen(); updateGameOverScreen();
renderGameOverScreen(); renderGameOverScreen();
@@ -3806,7 +3807,7 @@ void Game::updateGameCompleted()
if (gameCompletedCounter == GAME_COMPLETED_END) if (gameCompletedCounter == GAME_COMPLETED_END)
{ {
section.subsection = SUBSECTION_GAME_GAMEOVER; section->subsection = SUBSECTION_GAME_GAMEOVER;
} }
} }
@@ -3864,7 +3865,7 @@ void Game::checkEvents()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
@@ -3872,7 +3873,7 @@ void Game::checkEvents()
{ {
if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_LOST) if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_LOST)
{ {
section.subsection = SUBSECTION_GAME_PAUSE; section->subsection = SUBSECTION_GAME_PAUSE;
} }
} }
} }

View File

@@ -120,6 +120,7 @@ private:
Asset *asset; // Objeto que gestiona todos los ficheros de recursos Asset *asset; // Objeto que gestiona todos los ficheros de recursos
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
Input *input; // Manejador de entrada Input *input; // Manejador de entrada
section_t *section; // Seccion actual dentro del juego
std::vector<Player *> players; // Vector con los jugadores std::vector<Player *> players; // Vector con los jugadores
std::vector<Balloon *> balloons; // Vector con los globos std::vector<Balloon *> balloons; // Vector con los globos
@@ -127,21 +128,21 @@ private:
std::vector<Item *> items; // Vector con los items std::vector<Item *> items; // Vector con los items
std::vector<SmartSprite *> smartSprites; // Vector con los smartsprites std::vector<SmartSprite *> smartSprites; // Vector con los smartsprites
Texture *bulletTexture; // Textura para las balas Texture *bulletTexture; // Textura para las balas
std::vector<Texture *> itemTextures; // Vector con las texturas de los items std::vector<Texture *> itemTextures; // Vector con las texturas de los items
std::vector<Texture *> balloonTextures; // Vector con las texturas de los globos std::vector<Texture *> balloonTextures; // Vector con las texturas de los globos
std::vector<Texture *> player1Textures; // Vector con las texturas del jugador std::vector<Texture *> player1Textures; // Vector con las texturas del jugador
std::vector<Texture *> player2Textures; // Vector con las texturas del jugador std::vector<Texture *> player2Textures; // Vector con las texturas del jugador
std::vector<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores; std::vector<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores;
Texture *gameBuildingsTexture; // Textura con los edificios de fondo Texture *gameBuildingsTexture; // Textura con los edificios de fondo
Texture *gameCloudsTexture; // Textura con las nubes de fondo Texture *gameCloudsTexture; // Textura con las nubes de fondo
Texture *gameGrassTexture; // Textura con la hierba del suelo Texture *gameGrassTexture; // Textura con la hierba del suelo
Texture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase Texture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase
Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
Texture *gameTextTexture; // Textura para los sprites con textos Texture *gameTextTexture; // Textura para los sprites con textos
Texture *gameOverTexture; // Textura para la pantalla de game over Texture *gameOverTexture; // Textura para la pantalla de game over
Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego
std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
@@ -174,23 +175,23 @@ private:
Sprite *gameOverSprite; // Sprite para dibujar los graficos del game over Sprite *gameOverSprite; // Sprite para dibujar los graficos del game over
Sprite *gameOverEndSprite; // Sprite para dibujar los graficos del game over de acabar el juego Sprite *gameOverEndSprite; // Sprite para dibujar los graficos del game over de acabar el juego
JA_Sound_t* balloonSound; // Sonido para la explosión del globo JA_Sound_t *balloonSound; // Sonido para la explosión del globo
JA_Sound_t* bulletSound; // Sonido para los disparos JA_Sound_t *bulletSound; // Sonido para los disparos
JA_Sound_t* playerCollisionSound; // Sonido para la colisión del jugador con un enemigo JA_Sound_t *playerCollisionSound; // Sonido para la colisión del jugador con un enemigo
JA_Sound_t* hiScoreSound; // Sonido para cuando se alcanza la máxima puntuación JA_Sound_t *hiScoreSound; // Sonido para cuando se alcanza la máxima puntuación
JA_Sound_t* itemDropSound; // Sonido para cuando se genera un item JA_Sound_t *itemDropSound; // Sonido para cuando se genera un item
JA_Sound_t* itemPickUpSound; // Sonido para cuando se recoge un item JA_Sound_t *itemPickUpSound; // Sonido para cuando se recoge un item
JA_Sound_t* coffeeOutSound; // Sonido para cuando el jugador pierde el café al recibir un impacto JA_Sound_t *coffeeOutSound; // Sonido para cuando el jugador pierde el café al recibir un impacto
JA_Sound_t* stageChangeSound; // Sonido para cuando se cambia de fase JA_Sound_t *stageChangeSound; // Sonido para cuando se cambia de fase
JA_Sound_t* bubble1Sound; // Sonido para cuando el jugador muere JA_Sound_t *bubble1Sound; // Sonido para cuando el jugador muere
JA_Sound_t* bubble2Sound; // Sonido para cuando el jugador muere JA_Sound_t *bubble2Sound; // Sonido para cuando el jugador muere
JA_Sound_t* bubble3Sound; // Sonido para cuando el jugador muere JA_Sound_t *bubble3Sound; // Sonido para cuando el jugador muere
JA_Sound_t* bubble4Sound; // Sonido para cuando el jugador muere JA_Sound_t *bubble4Sound; // Sonido para cuando el jugador muere
JA_Sound_t* clockSound; // Sonido para cuando se detiene el tiempo con el item reloj JA_Sound_t *clockSound; // Sonido para cuando se detiene el tiempo con el item reloj
JA_Sound_t* powerBallSound; // Sonido para cuando se explota una Power Ball JA_Sound_t *powerBallSound; // Sonido para cuando se explota una Power Ball
JA_Sound_t* coffeeMachineSound; // Sonido para cuando la máquina de café toca el suelo JA_Sound_t *coffeeMachineSound; // Sonido para cuando la máquina de café toca el suelo
JA_Music_t* gameMusic; // Musica de fondo JA_Music_t *gameMusic; // Musica de fondo
// Variables // Variables
int numPlayers; // Numero de jugadores int numPlayers; // Numero de jugadores
@@ -198,7 +199,6 @@ private:
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
Uint32 hiScore; // Puntuación máxima Uint32 hiScore; // Puntuación máxima
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
section_t section; // Seccion actual dentro del juego
stage_t stage[10]; // Variable con los datos de cada pantalla stage_t stage[10]; // Variable con los datos de cada pantalla
Uint8 currentStage; // Indica la fase actual Uint8 currentStage; // Indica la fase actual
Uint8 stageBitmapCounter; // Contador para el tiempo visible del texto de Stage Uint8 stageBitmapCounter; // Contador para el tiempo visible del texto de Stage
@@ -513,13 +513,13 @@ private:
public: public:
// Constructor // Constructor
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options); Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options, section_t *section);
// Destructor // Destructor
~Game(); ~Game();
// Bucle para el juego // Bucle para el juego
section_t run(); void run();
}; };
#endif #endif

View File

@@ -5,7 +5,7 @@
const Uint8 SELF = 0; const Uint8 SELF = 0;
// Constructor // Constructor
HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, options_t *options) HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, options_t *options, section_t *section)
{ {
// Copia los punteros // Copia los punteros
this->renderer = renderer; this->renderer = renderer;
@@ -13,6 +13,7 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset,
this->asset = asset; this->asset = asset;
this->input = input; this->input = input;
this->lang = lang; this->lang = lang;
this->section = section;
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
@@ -30,7 +31,7 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset,
} }
// Inicializa variables // Inicializa variables
section.name = SELF; section->name = SELF;
ticks = 0; ticks = 0;
ticksSpeed = 15; ticksSpeed = 15;
manualQuit = false; manualQuit = false;
@@ -68,8 +69,8 @@ void HiScoreTable::update()
if (counter == counterEnd) if (counter == counterEnd)
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
} }
else else
@@ -78,8 +79,8 @@ void HiScoreTable::update()
if (manualQuit) if (manualQuit)
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_3; section->subsection = SUBSECTION_TITLE_3;
} }
} }
} }
@@ -180,7 +181,7 @@ void HiScoreTable::checkEventHandler()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
} }
@@ -191,7 +192,7 @@ void HiScoreTable::checkInput()
{ {
if (input->checkInput(input_exit, REPEAT_FALSE)) if (input->checkInput(input_exit, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} }
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE)) else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
@@ -214,8 +215,8 @@ void HiScoreTable::checkInput()
if (mode == mhst_auto) if (mode == mhst_auto)
{ {
JA_StopMusic(); JA_StopMusic();
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
else else
{ {
@@ -228,17 +229,15 @@ void HiScoreTable::checkInput()
} }
// Bucle para la pantalla de instrucciones // Bucle para la pantalla de instrucciones
section_t HiScoreTable::run(mode_hiScoreTable_e mode) void HiScoreTable::run(mode_hiScoreTable_e mode)
{ {
this->mode = mode; this->mode = mode;
while (section.name == SELF) while (section->name == SELF)
{ {
update(); update();
render(); render();
} }
return section;
} }
// Transforma un valor numérico en una cadena de 6 cifras // Transforma un valor numérico en una cadena de 6 cifras

View File

@@ -32,11 +32,11 @@ private:
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
Text *text; // Objeto para escribir texto Text *text; // Objeto para escribir texto
options_t *options; // Opciones y parametyros del programa options_t *options; // Opciones y parametyros del programa
section_t *section; // Estado del bucle principal para saber si continua o se sale
// Variables // Variables
Uint16 counter; // Contador Uint16 counter; // Contador
Uint16 counterEnd; // Valor final para el contador Uint16 counterEnd; // Valor final para el contador
section_t section; // Estado del bucle principal para saber si continua o se sale
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
bool manualQuit; // Indica si se quiere salir del modo manual bool manualQuit; // Indica si se quiere salir del modo manual
@@ -59,13 +59,13 @@ private:
public: public:
// Constructor // Constructor
HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, options_t *options); HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, options_t *options, section_t *section);
// Destructor // Destructor
~HiScoreTable(); ~HiScoreTable();
// Bucle principal // Bucle principal
section_t run(mode_hiScoreTable_e mode); void run(mode_hiScoreTable_e mode);
}; };
#endif #endif

View File

@@ -45,7 +45,7 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *asset,
} }
// Inicializa variables // Inicializa variables
section.name = SELF; section->name = SELF;
ticks = 0; ticks = 0;
ticksSpeed = 15; ticksSpeed = 15;
manualQuit = false; manualQuit = false;
@@ -88,8 +88,8 @@ void Instructions::update()
if (counter == counterEnd) if (counter == counterEnd)
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
} }
else else
@@ -98,8 +98,8 @@ void Instructions::update()
if (manualQuit) if (manualQuit)
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_3; section->subsection = SUBSECTION_TITLE_3;
} }
} }
} }
@@ -214,7 +214,7 @@ void Instructions::checkEvents()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
} }
@@ -225,7 +225,7 @@ void Instructions::checkInput()
{ {
if (input->checkInput(input_exit, REPEAT_FALSE)) if (input->checkInput(input_exit, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} }
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE)) else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
@@ -248,8 +248,8 @@ void Instructions::checkInput()
if (mode == m_auto) if (mode == m_auto)
{ {
JA_StopMusic(); JA_StopMusic();
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
else else
{ {
@@ -262,16 +262,14 @@ void Instructions::checkInput()
} }
// Bucle para la pantalla de instrucciones // Bucle para la pantalla de instrucciones
section_t Instructions::run(mode_e mode) void Instructions::run(mode_e mode)
{ {
this->mode = mode; this->mode = mode;
while (section.name == SELF) while (section->name == SELF)
{ {
update(); update();
checkEvents(); checkEvents();
render(); render();
} }
return section;
} }

View File

@@ -34,11 +34,11 @@ private:
Input *input; // Objeto pata gestionar la entrada Input *input; // Objeto pata gestionar la entrada
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
Text *text; // Objeto para escribir texto Text *text; // Objeto para escribir texto
section_t *section; // Estado del bucle principal para saber si continua o se sale
// Variables // Variables
Uint16 counter; // Contador Uint16 counter; // Contador
Uint16 counterEnd; // Valor final para el contador Uint16 counterEnd; // Valor final para el contador
section_t section; // Estado del bucle principal para saber si continua o se sale
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
bool manualQuit; // Indica si se quiere salir del modo manual bool manualQuit; // Indica si se quiere salir del modo manual
@@ -64,7 +64,7 @@ public:
~Instructions(); ~Instructions();
// Bucle principal // Bucle principal
section_t run(mode_e mode); void run(mode_e mode);
}; };
#endif #endif

View File

@@ -1,7 +1,7 @@
#include "intro.h" #include "intro.h"
// Constructor // Constructor
Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang) Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, section_t *section)
{ {
// Copia los punteros // Copia los punteros
this->renderer = renderer; this->renderer = renderer;
@@ -9,6 +9,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input,
this->lang = lang; this->lang = lang;
this->asset = asset; this->asset = asset;
this->input = input; this->input = input;
this->section = section;
// Reserva memoria para los objetos // Reserva memoria para los objetos
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
@@ -19,8 +20,8 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input,
loadMedia(); loadMedia();
// Inicializa variables // Inicializa variables
section.name = SECTION_PROG_INTRO; section->name = SECTION_PROG_INTRO;
section.subsection = 0; section->subsection = 0;
ticks = 0; ticks = 0;
ticksSpeed = 15; ticksSpeed = 15;
scene = 1; scene = 1;
@@ -181,7 +182,7 @@ void Intro::checkEvents()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
} }
@@ -192,7 +193,7 @@ void Intro::checkInput()
{ {
if (input->checkInput(input_exit, REPEAT_FALSE)) if (input->checkInput(input_exit, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} }
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE)) else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
@@ -213,8 +214,8 @@ void Intro::checkInput()
else if (input->checkInput(input_pause, REPEAT_FALSE) || input->checkInput(input_accept, REPEAT_FALSE) || input->checkInput(input_fire_left, REPEAT_FALSE) || input->checkInput(input_fire_center, REPEAT_FALSE) || input->checkInput(input_fire_right, REPEAT_FALSE)) else if (input->checkInput(input_pause, REPEAT_FALSE) || input->checkInput(input_accept, REPEAT_FALSE) || input->checkInput(input_fire_left, REPEAT_FALSE) || input->checkInput(input_fire_center, REPEAT_FALSE) || input->checkInput(input_fire_right, REPEAT_FALSE))
{ {
JA_StopMusic(); JA_StopMusic();
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
} }
@@ -363,8 +364,8 @@ void Intro::updateScenes()
bitmaps[5]->setEnabled(false); bitmaps[5]->setEnabled(false);
texts[8]->setEnabled(false); texts[8]->setEnabled(false);
JA_StopMusic(); JA_StopMusic();
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
break; break;
@@ -428,16 +429,14 @@ void Intro::render()
} }
// Bucle principal // Bucle principal
section_t Intro::run() void Intro::run()
{ {
JA_PlayMusic(music, 0); JA_PlayMusic(music, 0);
while (section.name == SECTION_PROG_INTRO) while (section->name == SECTION_PROG_INTRO)
{ {
update(); update();
checkEvents(); checkEvents();
render(); render();
} }
return section;
} }

View File

@@ -29,11 +29,11 @@ private:
std::vector<SmartSprite *> bitmaps; // Vector con los sprites inteligentes para los dibujos de la intro std::vector<SmartSprite *> bitmaps; // Vector con los sprites inteligentes para los dibujos de la intro
std::vector<Writer *> texts; // Textos de la intro std::vector<Writer *> texts; // Textos de la intro
Text *text; // Textos de la intro Text *text; // Textos de la intro
section_t *section; // Estado del bucle principal para saber si continua o se sale
// Variables // Variables
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
section_t section; // Estado del bucle principal para saber si continua o se sale
JA_Music_t *music; // Musica para la intro JA_Music_t *music; // Musica para la intro
int scene; // Indica que escena está activa int scene; // Indica que escena está activa
@@ -57,13 +57,13 @@ private:
public: public:
// Constructor // Constructor
Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang); Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, section_t *section);
// Destructor // Destructor
~Intro(); ~Intro();
// Bucle principal // Bucle principal
section_t run(); void run();
}; };
#endif #endif

View File

@@ -4,13 +4,14 @@
#define END_LOGO 200 #define END_LOGO 200
// Constructor // Constructor
Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, section_t *section)
{ {
// Copia la dirección de los objetos // Copia la dirección de los objetos
this->renderer = renderer; this->renderer = renderer;
this->screen = screen; this->screen = screen;
this->asset = asset; this->asset = asset;
this->input = input; this->input = input;
this->section = section;
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
@@ -19,8 +20,8 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
// Inicializa variables // Inicializa variables
counter = 0; counter = 0;
section.name = SECTION_PROG_LOGO; section->name = SECTION_PROG_LOGO;
section.subsection = 0; section->subsection = 0;
ticks = 0; ticks = 0;
ticksSpeed = 15; ticksSpeed = 15;
} }
@@ -40,8 +41,8 @@ void Logo::checkLogoEnd()
{ {
if (counter >= END_LOGO + 20) if (counter >= END_LOGO + 20)
{ {
section.name = SECTION_PROG_INTRO; section->name = SECTION_PROG_INTRO;
section.subsection = 0; section->subsection = 0;
} }
} }
@@ -54,7 +55,7 @@ void Logo::checkEvents()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
} }
@@ -65,7 +66,7 @@ void Logo::checkInput()
{ {
if (input->checkInput(input_exit, REPEAT_FALSE)) if (input->checkInput(input_exit, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} }
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE)) else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
@@ -85,8 +86,8 @@ void Logo::checkInput()
else if (input->checkInput(input_pause, REPEAT_FALSE) || input->checkInput(input_accept, REPEAT_FALSE) || input->checkInput(input_fire_left, REPEAT_FALSE) || input->checkInput(input_fire_center, REPEAT_FALSE) || input->checkInput(input_fire_right, REPEAT_FALSE)) else if (input->checkInput(input_pause, REPEAT_FALSE) || input->checkInput(input_accept, REPEAT_FALSE) || input->checkInput(input_fire_left, REPEAT_FALSE) || input->checkInput(input_fire_center, REPEAT_FALSE) || input->checkInput(input_fire_right, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
} }
} }
@@ -144,16 +145,14 @@ void Logo::render()
} }
// Bucle para el logo del juego // Bucle para el logo del juego
section_t Logo::run() void Logo::run()
{ {
JA_StopMusic(); JA_StopMusic();
while (section.name == SECTION_PROG_LOGO) while (section->name == SECTION_PROG_LOGO)
{ {
update(); update();
checkEvents(); checkEvents();
render(); render();
} }
return section;
} }

View File

@@ -24,11 +24,11 @@ private:
Texture *texture; // Textura con los graficos Texture *texture; // Textura con los graficos
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
Sprite *sprite; // Sprite con la textura del logo Sprite *sprite; // Sprite con la textura del logo
section_t *section; // Estado del bucle principal para saber si continua o se sale
// Variables // Variables
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
section_t section; // Estado del bucle principal para saber si continua o se sale
int counter; // Contador int counter; // Contador
// Actualiza las variables del objeto // Actualiza las variables del objeto
@@ -51,13 +51,13 @@ private:
public: public:
// Constructor // Constructor
Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input); Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, section_t *section);
// Destructor // Destructor
~Logo(); ~Logo();
// Bucle principal // Bucle principal
section_t run(); void run();
}; };
#endif #endif

View File

@@ -2,7 +2,7 @@
#include "common/jscore.h" #include "common/jscore.h"
// Constructor // Constructor
Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t section) Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t *section)
{ {
// Copia las direcciones de los punteros // Copia las direcciones de los punteros
this->renderer = renderer; this->renderer = renderer;
@@ -11,7 +11,6 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
this->asset = asset; this->asset = asset;
this->options = options; this->options = options;
this->lang = lang; this->lang = lang;
this->section = section; this->section = section;
// Reserva memoria para los punteros // Reserva memoria para los punteros
@@ -95,7 +94,7 @@ Title::~Title()
void Title::init() void Title::init()
{ {
// Inicializa variables // Inicializa variables
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
counter = TITLE_COUNTER; counter = TITLE_COUNTER;
backgroundCounter = 0; backgroundCounter = 0;
backgroundMode = rand() % 2; backgroundMode = rand() % 2;
@@ -227,7 +226,7 @@ void Title::update()
// Actualiza las notificaciones // Actualiza las notificaciones
screen->updateNotifier(); screen->updateNotifier();
switch (section.subsection) switch (section->subsection)
{ {
// Sección 1 - Titulo desplazandose // Sección 1 - Titulo desplazandose
case SUBSECTION_TITLE_1: case SUBSECTION_TITLE_1:
@@ -239,7 +238,7 @@ void Title::update()
// Si los objetos han llegado a su destino, cambiamos de Sección // Si los objetos han llegado a su destino, cambiamos de Sección
if (coffeeBitmap->hasFinished() && crisisBitmap->hasFinished()) if (coffeeBitmap->hasFinished() && crisisBitmap->hasFinished())
{ {
section.subsection = SUBSECTION_TITLE_2; section->subsection = SUBSECTION_TITLE_2;
// Pantallazo blanco // Pantallazo blanco
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
@@ -270,7 +269,7 @@ void Title::update()
if (step == 33) if (step == 33)
{ {
section.subsection = SUBSECTION_TITLE_3; section->subsection = SUBSECTION_TITLE_3;
} }
} }
break; break;
@@ -296,19 +295,19 @@ void Title::update()
switch (postFade) switch (postFade)
{ {
case 0: // 1 PLAYER case 0: // 1 PLAYER
section.name = SECTION_PROG_GAME; section->name = SECTION_PROG_GAME;
section.subsection = SUBSECTION_GAME_PLAY_1P; section->subsection = SUBSECTION_GAME_PLAY_1P;
JA_StopMusic(); JA_StopMusic();
break; break;
case 1: // 2 PLAYERS case 1: // 2 PLAYERS
section.name = SECTION_PROG_GAME; section->name = SECTION_PROG_GAME;
section.subsection = SUBSECTION_GAME_PLAY_2P; section->subsection = SUBSECTION_GAME_PLAY_2P;
JA_StopMusic(); JA_StopMusic();
break; break;
case 2: // QUIT case 2: // QUIT
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
JA_StopMusic(); JA_StopMusic();
break; break;
@@ -318,17 +317,17 @@ void Title::update()
if (demo) if (demo)
{ {
runDemoGame(); runDemoGame();
if (section.name != SECTION_PROG_QUIT) if (section->name != SECTION_PROG_QUIT)
{ {
runInstructions(m_auto); runInstructions(m_auto);
} }
if (section.name != SECTION_PROG_QUIT) if (section->name != SECTION_PROG_QUIT)
{ {
runHiScoreTable(mhst_auto); runHiScoreTable(mhst_auto);
} }
} }
else else
section.name = SECTION_PROG_LOGO; section->name = SECTION_PROG_LOGO;
break; break;
default: default:
@@ -507,11 +506,11 @@ void Title::update()
if (demo) if (demo)
{ {
runDemoGame(); runDemoGame();
if (section.name != SECTION_PROG_QUIT) if (section->name != SECTION_PROG_QUIT)
{ {
runInstructions(m_auto); runInstructions(m_auto);
} }
if (section.name != SECTION_PROG_QUIT) if (section->name != SECTION_PROG_QUIT)
{ {
runHiScoreTable(mhst_auto); runHiScoreTable(mhst_auto);
} }
@@ -521,12 +520,12 @@ void Title::update()
} }
else else
{ {
section.name = SECTION_PROG_LOGO; section->name = SECTION_PROG_LOGO;
} }
} }
// Sección Instrucciones // Sección Instrucciones
if (section.subsection == SUBSECTION_TITLE_INSTRUCTIONS) if (section->subsection == SUBSECTION_TITLE_INSTRUCTIONS)
{ {
runInstructions(m_auto); runInstructions(m_auto);
counter = TITLE_COUNTER; counter = TITLE_COUNTER;
@@ -545,7 +544,7 @@ void Title::update()
// Dibuja el objeto en pantalla // Dibuja el objeto en pantalla
void Title::render() void Title::render()
{ {
switch (section.subsection) switch (section->subsection)
{ {
// Sección 1 - Titulo desplazandose // Sección 1 - Titulo desplazandose
case SUBSECTION_TITLE_1: case SUBSECTION_TITLE_1:
@@ -609,7 +608,7 @@ void Title::render()
screen->blit(); screen->blit();
} }
section.subsection = SUBSECTION_TITLE_3; section->subsection = SUBSECTION_TITLE_3;
} }
break; break;
@@ -675,7 +674,7 @@ void Title::checkEvents()
// Evento de salida de la aplicación // Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
break; break;
} }
@@ -684,7 +683,7 @@ void Title::checkEvents()
reLoadTextures(); reLoadTextures();
} }
if (section.subsection == SUBSECTION_TITLE_3) if (section->subsection == SUBSECTION_TITLE_3)
{ // Si se pulsa alguna tecla durante la tercera sección del titulo { // Si se pulsa alguna tecla durante la tercera sección del titulo
if ((eventHandler->type == SDL_KEYUP) || (eventHandler->type == SDL_JOYBUTTONUP)) if ((eventHandler->type == SDL_KEYUP) || (eventHandler->type == SDL_JOYBUTTONUP))
{ {
@@ -703,7 +702,7 @@ void Title::checkInput()
{ {
if (input->checkInput(input_exit, REPEAT_FALSE)) if (input->checkInput(input_exit, REPEAT_FALSE))
{ {
section.name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} }
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE)) else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
@@ -968,54 +967,46 @@ void Title::applyOptions()
} }
// Bucle para el titulo del juego // Bucle para el titulo del juego
section_t Title::run() void Title::run()
{ {
while (section.name == SECTION_PROG_TITLE) while (section->name == SECTION_PROG_TITLE)
{ {
update(); update();
checkEvents(); checkEvents();
render(); render();
} }
return section;
} }
// Ejecuta la parte donde se muestran las instrucciones // Ejecuta la parte donde se muestran las instrucciones
section_t Title::runInstructions(mode_e mode) void Title::runInstructions(mode_e mode)
{ {
instructions = new Instructions(renderer, screen, asset, input, lang); instructions = new Instructions(renderer, screen, asset, input, lang);
section = instructions->run(mode); instructions->run(mode);
delete instructions; delete instructions;
return section;
} }
// Ejecuta la parte donde se muestra la tabla de puntuaciones // Ejecuta la parte donde se muestra la tabla de puntuaciones
section_t Title::runHiScoreTable(mode_hiScoreTable_e mode) void Title::runHiScoreTable(mode_hiScoreTable_e mode)
{ {
if (!options->online.enabled) if (!options->online.enabled)
{ {
section.name = SECTION_PROG_TITLE; section->name = SECTION_PROG_TITLE;
section.subsection = SUBSECTION_TITLE_1; section->subsection = SUBSECTION_TITLE_1;
return section; return;
} }
hiScoreTable = new HiScoreTable(renderer, screen, asset, input, lang, options); hiScoreTable = new HiScoreTable(renderer, screen, asset, input, lang, options, section);
section = hiScoreTable->run(mode); hiScoreTable->run(mode);
delete hiScoreTable; delete hiScoreTable;
return section;
} }
// Ejecuta el juego en modo demo // Ejecuta el juego en modo demo
section_t Title::runDemoGame() void Title::runDemoGame()
{ {
demoGame = new Game(1, 0, renderer, screen, asset, lang, input, true, options); demoGame = new Game(1, 0, renderer, screen, asset, lang, input, true, options, section);
section = demoGame->run(); demoGame->run();
delete demoGame; delete demoGame;
return section;
} }
// Modifica las opciones para los controles de los jugadores // Modifica las opciones para los controles de los jugadores

View File

@@ -52,6 +52,7 @@ private:
HiScoreTable *hiScoreTable; // Objeto para mostrar las mejores puntuaciones online HiScoreTable *hiScoreTable; // Objeto para mostrar las mejores puntuaciones online
Game *demoGame; // Objeto para lanzar la demo del juego Game *demoGame; // Objeto para lanzar la demo del juego
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
section_t *section; // Indicador para el bucle del titulo
Texture *dustTexture; // Textura con los graficos del polvo Texture *dustTexture; // Textura con los graficos del polvo
Texture *coffeeTexture; // Textura con los graficos de la palabra coffee Texture *coffeeTexture; // Textura con los graficos de la palabra coffee
@@ -83,7 +84,6 @@ private:
float sin[360]; // Vector con los valores del seno precalculados float sin[360]; // Vector con los valores del seno precalculados
bool menuVisible; // Indicador para saber si se muestra el menu del titulo o la frase intermitente bool menuVisible; // Indicador para saber si se muestra el menu del titulo o la frase intermitente
bool demo; // Indica si el modo demo estará activo bool demo; // Indica si el modo demo estará activo
section_t section; // Indicador para el bucle del titulo
section_t nextSection; // Indica cual es la siguiente sección a cargar cuando termine el contador del titulo section_t nextSection; // Indica cual es la siguiente sección a cargar cuando termine el contador del titulo
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
Uint8 postFade; // Opción a realizar cuando termina el fundido Uint8 postFade; // Opción a realizar cuando termina el fundido
@@ -121,13 +121,13 @@ private:
void applyOptions(); void applyOptions();
// Ejecuta la parte donde se muestran las instrucciones // Ejecuta la parte donde se muestran las instrucciones
section_t runInstructions(mode_e mode); void runInstructions(mode_e mode);
// Ejecuta la parte donde se muestra la tabla de puntuaciones // Ejecuta la parte donde se muestra la tabla de puntuaciones
section_t runHiScoreTable(mode_hiScoreTable_e mode); void runHiScoreTable(mode_hiScoreTable_e mode);
// Ejecuta el juego en modo demo // Ejecuta el juego en modo demo
section_t runDemoGame(); void runDemoGame();
// Modifica las opciones para los controles de los jugadores // Modifica las opciones para los controles de los jugadores
bool updatePlayerInputs(int numPlayer); bool updatePlayerInputs(int numPlayer);
@@ -146,13 +146,13 @@ private:
public: public:
// Constructor // Constructor
Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t section); Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t *section);
// Destructor // Destructor
~Title(); ~Title();
// Bucle para el titulo del juego // Bucle para el titulo del juego
section_t run(); void run();
}; };
#endif #endif