From 0baf73b9ae10eea1cf3d24e920a80fff12bcfd1a Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 28 Aug 2021 23:45:29 +0200 Subject: [PATCH] working on options menu, almost done --- source/menu.cpp | 24 +++++++++++++++++++++++- source/menu.h | 7 +++++++ source/title.cpp | 26 ++++++++++++++++++-------- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/source/menu.cpp b/source/menu.cpp index 0cad019..a213943 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -53,6 +53,7 @@ void Menu::init(std::string name, int x, int y, int backgroundType) mCenterX = x + ((SCREEN_WIDTH - x) / 2); mCenterY = y + ((SCREEN_HEIGHT - y) / 2); mWidestItem = 0; + mColorGreyed = {128, 128, 128}; // Selector mSelector.origin = 0; @@ -275,10 +276,19 @@ void Menu::render() const color_t color = {mSelector.itemR, mSelector.itemG, mSelector.itemB}; mText->writeColored(mItem[i].x, mItem[i].y, mItem[i].label, color); } - else + else if (mItem[i].selectable) { mText->write(mItem[i].x, mItem[i].y, mItem[i].label); } + else if (mItem[i].greyed) + { + mText->writeColored(mItem[i].x, mItem[i].y, mItem[i].label, mColorGreyed); + } + //else // no selectable + //{ + // const color_t color = {mSelector.itemR, mSelector.itemG, mSelector.itemB}; + // mText->writeColored(mItem[i].x, mItem[i].y, mItem[i].label, color); + //} } } @@ -501,4 +511,16 @@ void Menu::replaceElementsOnY() { mItem[i].y = mItem[i - 1].y + mItem[i - 1].h + mItem[i - 1].hPaddingDown; } +} + +// Establece el estado seleccionable de un item +void Menu::setSelectable(Uint8 index, bool value) +{ + mItem[index].selectable = value; +} + +// Establece el estado agrisado de un item +void Menu::setGreyed(Uint8 index, bool value) +{ + mItem[index].greyed = value; } \ No newline at end of file diff --git a/source/menu.h b/source/menu.h index 5249af1..7da30c3 100644 --- a/source/menu.h +++ b/source/menu.h @@ -37,6 +37,7 @@ private: JA_Sound mSoundCancel; // Sonido al cancelar el menu JA_Sound mSoundMove; // Sonido al mover el selector Input *mInput; // Gestor de eventos de entrada de teclado o gamepad + color_t mColorGreyed; // Color para los elementos agrisados struct rectangle { @@ -184,6 +185,12 @@ public: // Coloca el selector en una posición específica void setSelectorPos(Uint8 index); + + // Establece el estado seleccionable de un item + void setSelectable(Uint8 index, bool value); + + // Establece el estado agrisado de un item + void setGreyed(Uint8 index, bool value); }; #endif diff --git a/source/title.cpp b/source/title.cpp index a6169ab..846e326 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -754,6 +754,16 @@ section_t Title::run(Uint8 subsection) break; case 6: // Display mode switchFullScreenModeVar(); + if (mOptions->fullScreenMode != 0) + { + mMenu.options->setSelectable(8, false); + mMenu.options->setGreyed(8, true); + } + else + { + mMenu.options->setSelectable(8, true); + mMenu.options->setGreyed(8, false); + } updateMenuLabels(); break; case 8: // Windows size @@ -878,11 +888,11 @@ void Title::runDemoGame() delete mDemoGame; } - // Modifica las opciones para los controles de los jugadores - void Title::SwitchInputs(int value) - { - Uint8 temp; - temp = mOptions->player1Input; - mOptions->player1Input = mOptions->player2Input; - mOptions->player2Input = temp; - } \ No newline at end of file +// Modifica las opciones para los controles de los jugadores +void Title::SwitchInputs(int value) +{ + Uint8 temp; + temp = mOptions->player1Input; + mOptions->player1Input = mOptions->player2Input; + mOptions->player2Input = temp; +} \ No newline at end of file