multi lang support
This commit is contained in:
133
source/title.cpp
133
source/title.cpp
@@ -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");
|
||||
}
|
||||
Reference in New Issue
Block a user