Actualizados los menus para el modo de consola portatil de videojuegos

This commit is contained in:
2023-02-13 11:25:36 +01:00
parent e7b1af237a
commit abe48d5995
6 changed files with 229 additions and 26 deletions

View File

@@ -119,6 +119,7 @@ bool Menu::load(std::string file_path)
item.selectable = true;
item.greyed = false;
item.linkedDown = false;
item.visible = true;
do
{
@@ -137,7 +138,7 @@ bool Menu::load(std::string file_path)
} while (line != "[/item]");
addItem(item.label, item.hPaddingDown, item.selectable, item.greyed, item.linkedDown);
addItem(item.label, item.hPaddingDown, item.selectable, item.greyed, item.linkedDown, item.visible);
}
// En caso contrario se parsea el fichero para buscar las variables y los valores
@@ -206,6 +207,11 @@ bool Menu::setItem(item_t *item, std::string var, std::string value)
item->linkedDown = value == "true" ? true : false;
}
else if (var == "visible")
{
item->visible = value == "true" ? true : false;
}
else if ((var == "") || (var == "[/item]"))
{
}
@@ -628,33 +634,36 @@ void Menu::render()
// Renderiza el texto
for (int i = 0; i < (int)item.size(); ++i)
{
if (i == selector.index)
if (item[i].visible)
{
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.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);
}
else if (item[i].greyed)
{
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, colorGreyed);
}
else
{ // No seleccionable
if ((item[i].linkedUp) && (i == selector.index + 1))
if (i == selector.index)
{
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color);
}
else // No enlazado con el de arriba
else if (item[i].selectable)
{
text->write(item[i].rect.x, item[i].rect.y, item[i].label);
}
else if (item[i].greyed)
{
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, colorGreyed);
}
else
{ // No seleccionable
if ((item[i].linkedUp) && (i == selector.index + 1))
{
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color);
}
else // No enlazado con el de arriba
{
text->write(item[i].rect.x, item[i].rect.y, item[i].label);
}
}
}
}
}
@@ -798,7 +807,7 @@ void Menu::centerMenuElementsOnX()
}
// Añade un item al menu
void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown)
void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown, bool visible)
{
item_t temp;
@@ -816,6 +825,7 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
temp.selectable = selectable;
temp.greyed = greyed;
temp.linkedDown = linkedDown;
temp.visible = visible;
item.push_back(temp);
@@ -833,6 +843,12 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
reorganize();
}
// Elimina un item del menu
void Menu::removeItem(int index)
{
/* POR HACER */
}
// Cambia el texto de un item
void Menu::setItemCaption(int index, std::string text)
{
@@ -941,6 +957,12 @@ void Menu::setLinkedDown(int index, bool value)
item[index].linkedDown = value;
}
// Establece el estado de visibilidad de un item
void Menu::setVisible(int index, bool value)
{
item[index].visible = value;
}
// Calcula la altura del selector
int Menu::getSelectorHeight(int value)
{