diff --git a/source/common/menu.cpp b/source/common/menu.cpp index 3f542dd..b82edc9 100644 --- a/source/common/menu.cpp +++ b/source/common/menu.cpp @@ -18,6 +18,7 @@ Menu::Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file) // Inicializa variables name = ""; selector.index = 0; + selector.previousIndex = 0; itemSelected = MENU_NO_OPTION; x = 0; y = 0; @@ -430,12 +431,14 @@ void Menu::updateSelector() selector.itemColorIndex++; selector.itemColorIndex = std::min(selector.numJumps - 1, selector.itemColorIndex); selector.itemColor = selector.jumpItemColors[selector.itemColorIndex]; + selector.previousItemColor = selector.jumpItemColors[selector.numJumps - 1 - selector.itemColorIndex]; } else { selector.rect.y = int(selector.y); selector.itemColorIndex = 0; selector.itemColor = selector.jumpItemColors[selector.numJumps - 1]; + selector.previousItemColor = selector.jumpItemColors[0]; } if (selector.resizing) @@ -540,6 +543,9 @@ void Menu::reorganize() // Deja el menu apuntando al siguiente elemento bool Menu::increaseSelectorIndex() { + // Guarda el indice actual antes de modificarlo + selector.previousIndex = selector.index; + // Obten las coordenadas del elemento actual selector.y = selector.originY = item[selector.index].rect.y; selector.h = selector.originH = getSelectorHeight(selector.index); @@ -570,6 +576,9 @@ bool Menu::increaseSelectorIndex() // Deja el menu apuntando al elemento anterior bool Menu::decreaseSelectorIndex() { + // Guarda el indice actual antes de modificarlo + selector.previousIndex = selector.index; + // Obten las coordenadas del elemento actual selector.y = selector.originY = item[selector.index].rect.y; selector.h = selector.originH = getSelectorHeight(selector.index); @@ -652,6 +661,12 @@ void Menu::render() text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color); } + else if (i == selector.previousIndex) + { + const color_t color = {selector.previousItemColor.r, selector.previousItemColor.g, selector.previousItemColor.b}; + text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color); + } + else if (item[i].selectable) { text->write(item[i].rect.x, item[i].rect.y, item[i].label); diff --git a/source/common/menu.h b/source/common/menu.h index 151346f..28a0f3c 100644 --- a/source/common/menu.h +++ b/source/common/menu.h @@ -63,6 +63,8 @@ private: float h; // Altura actual, usado para el cambio de tamaƱo int numJumps; // Numero de pasos preestablecido para llegar al destino int index; // Elemento del menu que tiene el foco + int previousIndex; // Elemento que tenia el foco previamente + color_t previousItemColor; // Color del item nque tenia el foco previamente SDL_Rect rect; // Rectangulo del selector color_t color; // Color del selector color_t itemColor; // Color del item