multi lang support

This commit is contained in:
2021-04-27 22:28:00 +02:00
parent a0e94035db
commit 176d0d4f90
14 changed files with 510 additions and 162 deletions

View File

@@ -5,7 +5,7 @@
#endif
// Constructor
Title::Title(SDL_Window *window, SDL_Renderer *renderer, Input *input, std::string *fileList, options_t *options)
Title::Title(SDL_Window *window, SDL_Renderer *renderer, Input *input, std::string *fileList, options_t *options, std::string *textStrings)
{
// Copia las direcciones de los punteros
mWindow = window;
@@ -13,6 +13,7 @@ Title::Title(SDL_Window *window, SDL_Renderer *renderer, Input *input, std::stri
mInput = input;
mFileList = fileList;
mOptions = options;
mTextStrings = textStrings;
// Reserva memoria para los punteros propios
mEventHandler = new SDL_Event();
@@ -95,7 +96,7 @@ Title::~Title()
}
// Inicializa las variables necesarias para la sección 'Title'
void Title::init(Uint8 subsection)
void Title::init(bool demo, Uint8 subsection)
{
// Carga los recursos
loadMedia();
@@ -114,6 +115,7 @@ void Title::init(Uint8 subsection)
mTicksSpeed = 15;
mText->init(TEXT_FIXED, BLOCK);
mFade->init();
mDemo = demo;
// Inicializa el bitmap de Coffee
mCoffeeBitmap->init(mTitleTexture, mRenderer);
@@ -223,10 +225,10 @@ void Title::init(Uint8 subsection)
// Inicializa los objetos de menu
mMenu.title->init("TITLE", 0, 15 * BLOCK, MENU_BACKGROUND_SOLID);
mMenu.title->addItem("PLAY");
mMenu.title->addItem("OPTIONS");
mMenu.title->addItem("HOW TO PLAY", 0, 5);
mMenu.title->addItem("QUIT");
mMenu.title->addItem(mTextStrings[0]); // PLAY
mMenu.title->addItem(mTextStrings[1]); // OPTIONS
mMenu.title->addItem(mTextStrings[2], 0, 5); // HOW TO PLAY
mMenu.title->addItem(mTextStrings[3]); // QUIT
mMenu.title->setDefaultActionWhenCancel(3);
mMenu.title->setBackgroundColor(0x30, 0x30, 0x40, 192);
mMenu.title->setSelectorColor(0xe5, 0x1c, 0x23, 255);
@@ -234,20 +236,21 @@ void Title::init(Uint8 subsection)
mMenu.title->centerMenu(SCREEN_CENTER_X);
mMenu.title->centerMenuElements();
mMenu.options->init("OPTIONS", 0, 15 * BLOCK, MENU_BACKGROUND_SOLID);
mMenu.options->addItem("FULLSCREEN");
mMenu.options->addItem("WINDOWS SIZE", 0, 5);
mMenu.options->addItem("[OK]");
mMenu.options->addItem("[CANCEL]");
mMenu.options->setDefaultActionWhenCancel(3);
mMenu.options->init("OPTIONS", 0, 14 * BLOCK, MENU_BACKGROUND_SOLID);
mMenu.options->addItem(mTextStrings[4]);
mMenu.options->addItem(mTextStrings[7]);
mMenu.options->addItem(mTextStrings[8], 0, 5);
mMenu.options->addItem(mTextStrings[9]);
mMenu.options->addItem(mTextStrings[10]);
mMenu.options->setDefaultActionWhenCancel(4);
mMenu.options->setBackgroundColor(0x30, 0x30, 0x40, 192);
mMenu.options->setSelectorColor(0xe5, 0x1c, 0x23, 255);
mMenu.options->setSelectorTextColor(0xFF, 0xF1, 0x76);
mMenu.options->centerMenu(SCREEN_CENTER_X);
mMenu.options->centerMenuElements();
// Actualiza los elementos del menu de opciones con los valores correspondientes
updateOptionsMenuLabels();
// Actualiza los textos de los menus
updateMenuLabels();
}
// Carga los recursos necesarios para la sección 'Title'
@@ -291,28 +294,54 @@ void Title::switchFullScreenModeVar()
}
}
// Actualiza los elementos del menu de opciones
void Title::updateOptionsMenuLabels()
// Actualiza los elementos de los menus
void Title::updateMenuLabels()
{
switch (mOptions->fullScreenMode)
{
case 0:
mMenu.options->setItemCaption(0, "WINDOWED");
mMenu.options->setItemCaption(0, mTextStrings[4]); // WINDOW
break;
case SDL_WINDOW_FULLSCREEN:
mMenu.options->setItemCaption(0, "FULLSCREEN");
mMenu.options->setItemCaption(0, mTextStrings[5]); // FULLSCREEN
break;
case SDL_WINDOW_FULLSCREEN_DESKTOP:
mMenu.options->setItemCaption(0, "FAKE FULLSCREEN");
mMenu.options->setItemCaption(0, mTextStrings[6]); // FAKE FULLSCREEN
break;
default:
mMenu.options->setItemCaption(0, "WINDOWED");
mMenu.options->setItemCaption(0, mTextStrings[4]); // WINDOW
break;
}
mMenu.options->setItemCaption(1, "WINDOWS SIZE " + std::to_string(mOptions->windowSize));
mMenu.options->setItemCaption(1, mTextStrings[7] + " x" + std::to_string(mOptions->windowSize)); // WINDOW SIZE
switch (mOptions->language)
{
case es_ES:
mMenu.options->setItemCaption(2, mTextStrings[8] + " " + mTextStrings[24]);
break;
case ba_BA:
mMenu.options->setItemCaption(2, mTextStrings[8] + " " + mTextStrings[25]);
break;
case en_UK:
mMenu.options->setItemCaption(2, mTextStrings[8] + " " + mTextStrings[26]);
break;
}
mMenu.options->setItemCaption(3, mTextStrings[9]);
mMenu.options->setItemCaption(4, mTextStrings[10]);
mMenu.options->centerMenu(SCREEN_CENTER_X);
mMenu.options->centerMenuElements();
mMenu.title->setItemCaption(0, mTextStrings[0]);
mMenu.title->setItemCaption(1, mTextStrings[1]);
mMenu.title->setItemCaption(2, mTextStrings[2]);
mMenu.title->setItemCaption(3, mTextStrings[3]);
mMenu.title->centerMenu(SCREEN_CENTER_X);
mMenu.title->centerMenuElements();
}
// Aplica las opciones de menu seleccionadas
@@ -320,6 +349,8 @@ void Title::applyOptions()
{
SDL_SetWindowFullscreen(mWindow, mOptions->fullScreenMode);
SDL_SetWindowSize(mWindow, SCREEN_WIDTH * mOptions->windowSize, SCREEN_HEIGHT * mOptions->windowSize);
initTextStrings(mTextStrings, mOptions->language);
updateMenuLabels();
}
// Bucle para el titulo del juego
@@ -466,7 +497,6 @@ section_t Title::run(Uint8 subsection)
case 0: // PLAY
mSection.name = PROG_SECTION_GAME;
JA_StopMusic();
mDemo = false;
break;
case 1: // QUIT
@@ -476,15 +506,15 @@ section_t Title::run(Uint8 subsection)
case 2: // TIME OUT
mCounter = TITLE_COUNTER;
//mSection = mNextSection;
//mSection.name = PROG_SECTION_TITLE;
//mSection.subsection = TITLE_SECTION_INSTRUCTIONS;
mMenu.active->reset();
//toogleTitleNextGS();
runDemoGame();
runInstructions(INSTRUCTIONS_MODE_AUTO);
init();
mDemo = true;
if (mDemo)
{
runDemoGame();
runInstructions(INSTRUCTIONS_MODE_AUTO);
init(false);
}
else
mSection.name = PROG_SECTION_LOGO;
break;
default:
@@ -509,6 +539,7 @@ section_t Title::run(Uint8 subsection)
mMenu.active = mMenu.options;
mOptions->fullScreenModePrevious = mOptions->fullScreenMode;
mOptions->windowSizePrevious = mOptions->windowSize;
mOptions->languagePrevious = mOptions->language;
break;
case 2: // HOW TO PLAY
runInstructions(INSTRUCTIONS_MODE_MANUAL);
@@ -530,25 +561,30 @@ section_t Title::run(Uint8 subsection)
{
case 0: // Fullscreen mode
switchFullScreenModeVar();
updateOptionsMenuLabels();
mMenu.active->deselectItem();
updateMenuLabels();
break;
case 1: // Windows size
mOptions->windowSize++;
if (mOptions->windowSize == 5)
mOptions->windowSize = 1;
updateOptionsMenuLabels();
mMenu.active->deselectItem();
updateMenuLabels();
break;
case 2: // OK
case 2: // Language
mOptions->language++;
if (mOptions->language == 3)
mOptions->language = 0;
updateMenuLabels();
break;
case 3: // OK
applyOptions();
mMenu.active->reset();
mMenu.active = mMenu.title;
break;
case 3: // CANCEL
case 4: // CANCEL
mOptions->fullScreenMode = mOptions->fullScreenModePrevious;
mOptions->windowSize = mOptions->windowSizePrevious;
updateOptionsMenuLabels();
mOptions->language = mOptions->languagePrevious;
updateMenuLabels();
mMenu.active->reset();
mMenu.active = mMenu.title;
break;
@@ -602,7 +638,7 @@ section_t Title::run(Uint8 subsection)
// PRESS ANY KEY!
if ((mCounter % 50 > 14) && (mMenuVisible == false))
mText->writeDX(TXT_CENTER | TXT_SHADOW, SCREEN_CENTER_X, PLAY_AREA_THIRD_QUARTER_Y + BLOCK, "PRESS ANY KEY!", 0, noColor, 1, shdwTxtColor);
mText->writeDX(TXT_CENTER | TXT_SHADOW, SCREEN_CENTER_X, PLAY_AREA_THIRD_QUARTER_Y + BLOCK, mTextStrings[23], 0, noColor, 1, shdwTxtColor);
// Texto con el copyright y versión
mText->writeDX(TXT_CENTER | TXT_SHADOW, SCREEN_CENTER_X, SCREEN_HEIGHT - (BLOCK * 2), TEXT_COPYRIGHT, 0, noColor, 1, shdwTxtColor);
@@ -615,11 +651,14 @@ section_t Title::run(Uint8 subsection)
}
else if (mCounter == 0)
{
//mPostFade = 2;
//mFade->activateFade();
runDemoGame();
runInstructions(INSTRUCTIONS_MODE_AUTO);
init();
if (mDemo)
{
runDemoGame();
runInstructions(INSTRUCTIONS_MODE_AUTO);
init(false);
}
else
mSection.name = PROG_SECTION_LOGO;
}
}
@@ -637,19 +676,15 @@ section_t Title::run(Uint8 subsection)
// Ejecuta la parte donde se muestran las instrucciones
void Title::runInstructions(Uint8 mode)
{
printf("carrega instructions\n");
mInstructions = new Instructions(mRenderer, mFileList);
mInstructions = new Instructions(mRenderer, mFileList, mTextStrings);
mInstructions->run(mode);
delete mInstructions;
printf("borra instructions\n");
}
// Ejecuta el juego en modo demo
void Title::runDemoGame()
{
printf("carrega joc\n");
mDemoGame = new Game(mRenderer, mFileList, mInput, true);
mDemoGame = new Game(mRenderer, mFileList, mTextStrings, mInput, true);
mDemoGame->run();
delete mDemoGame;
printf("borra joc\n");
}