MEJORA: Los elementos de menu reciben el selector con un degradado de color en el propio item. Falta agregar otro degradado para el elemento que pierde el foco
This commit is contained in:
@@ -60,6 +60,9 @@ Menu::Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file)
|
||||
load(file);
|
||||
}
|
||||
|
||||
// Calcula los colores del selector para el degradado
|
||||
setSelectorItemColors();
|
||||
|
||||
// Deja el cursor en el primer elemento
|
||||
reset();
|
||||
}
|
||||
@@ -108,7 +111,7 @@ bool Menu::load(std::string file_path)
|
||||
if (file.good())
|
||||
{
|
||||
// Procesa el fichero linea a linea
|
||||
//std::cout << "Reading file " << filename.c_str() << std::endl;
|
||||
// std::cout << "Reading file " << filename.c_str() << std::endl;
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
if (line == "[item]")
|
||||
@@ -132,7 +135,7 @@ bool Menu::load(std::string file_path)
|
||||
// Procesa las dos subcadenas
|
||||
if (!setItem(&item, line.substr(0, pos), line.substr(pos + 1, line.length())))
|
||||
{
|
||||
//std::cout << "Warning: file " << filename.c_str() << "\n, unknown parameter \"" << line.substr(0, pos).c_str() << "\"" << std::endl;
|
||||
// std::cout << "Warning: file " << filename.c_str() << "\n, unknown parameter \"" << line.substr(0, pos).c_str() << "\"" << std::endl;
|
||||
success = false;
|
||||
}
|
||||
|
||||
@@ -149,7 +152,7 @@ bool Menu::load(std::string file_path)
|
||||
// Procesa las dos subcadenas
|
||||
if (!setVars(line.substr(0, pos), line.substr(pos + 1, line.length())))
|
||||
{
|
||||
//std::cout << "Warning: file " << filename.c_str() << "\n, unknown parameter \"" << line.substr(0, pos).c_str() << "\"" << std::endl;
|
||||
// std::cout << "Warning: file " << filename.c_str() << "\n, unknown parameter \"" << line.substr(0, pos).c_str() << "\"" << std::endl;
|
||||
success = false;
|
||||
}
|
||||
|
||||
@@ -163,13 +166,13 @@ bool Menu::load(std::string file_path)
|
||||
}
|
||||
|
||||
// Cierra el fichero
|
||||
//std::cout << "Closing file " << filename.c_str() << std::endl;
|
||||
// std::cout << "Closing file " << filename.c_str() << std::endl;
|
||||
file.close();
|
||||
}
|
||||
// El fichero no se puede abrir
|
||||
else
|
||||
{
|
||||
//std::cout << "Warning: Unable to open " << filename.c_str() << " file" << std::endl;
|
||||
// std::cout << "Warning: Unable to open " << filename.c_str() << " file" << std::endl;
|
||||
success = false;
|
||||
}
|
||||
|
||||
@@ -422,10 +425,17 @@ void Menu::updateSelector()
|
||||
}
|
||||
}
|
||||
selector.rect.y = int(selector.y);
|
||||
|
||||
// Actualiza el color del item
|
||||
selector.itemColorIndex++;
|
||||
selector.itemColorIndex = std::min(selector.numJumps - 1, selector.itemColorIndex);
|
||||
selector.itemColor = selector.jumpItemColors[selector.itemColorIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
selector.rect.y = int(selector.y);
|
||||
selector.itemColorIndex = 0;
|
||||
selector.itemColor = selector.jumpItemColors[selector.numJumps - 1];
|
||||
}
|
||||
|
||||
if (selector.resizing)
|
||||
@@ -1002,4 +1012,24 @@ void Menu::setText(std::string font_png, std::string font_txt)
|
||||
{
|
||||
text = new Text(asset->get(font_png), asset->get(font_txt), renderer);
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula los colores del selector para el degradado
|
||||
void Menu::setSelectorItemColors()
|
||||
{
|
||||
const color_t colorFrom = {255, 255, 255};
|
||||
const color_t colorTo = selector.itemColor;
|
||||
|
||||
for (int i = 0; i < selector.numJumps; ++i)
|
||||
{
|
||||
const float step = ((float)i / (selector.numJumps - 1));
|
||||
const int r = colorFrom.r + ((colorTo.r - colorFrom.r) * step);
|
||||
const int g = colorFrom.g + ((colorTo.g - colorFrom.g) * step);
|
||||
const int b = colorFrom.b + ((colorTo.b - colorFrom.b) * step);
|
||||
selector.jumpItemColors[i].r = r;
|
||||
selector.jumpItemColors[i].g = g;
|
||||
selector.jumpItemColors[i].b = b;
|
||||
}
|
||||
|
||||
selector.itemColorIndex = 0;
|
||||
}
|
||||
@@ -51,22 +51,24 @@ private:
|
||||
|
||||
struct selector_t
|
||||
{
|
||||
float originY; // Coordenada de origen
|
||||
float targetY; // Coordenada de destino
|
||||
float despY; // Cantidad de pixeles que se desplaza el selector en cada salto: (target - origin) / numJumps
|
||||
bool moving; // Indica si el selector está avanzando hacia el destino
|
||||
float originH; // Altura de origen
|
||||
float targetH; // Altura de destino
|
||||
float incH; // Cantidad de pixels que debe incrementar o decrementar el selector en cada salto
|
||||
bool resizing; // Indica si el selector está cambiando de tamaño
|
||||
float y; // Coordenada actual, usado para el desplazamiento
|
||||
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
|
||||
SDL_Rect rect; // Rectangulo del selector
|
||||
color_t color; // Color del selector
|
||||
color_t itemColor; // Color del item
|
||||
int a; // Cantidad de transparencia para el rectangulo del selector
|
||||
float originY; // Coordenada de origen
|
||||
float targetY; // Coordenada de destino
|
||||
float despY; // Cantidad de pixeles que se desplaza el selector en cada salto: (target - origin) / numJumps
|
||||
bool moving; // Indica si el selector está avanzando hacia el destino
|
||||
float originH; // Altura de origen
|
||||
float targetH; // Altura de destino
|
||||
float incH; // Cantidad de pixels que debe incrementar o decrementar el selector en cada salto
|
||||
bool resizing; // Indica si el selector está cambiando de tamaño
|
||||
float y; // Coordenada actual, usado para el desplazamiento
|
||||
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
|
||||
SDL_Rect rect; // Rectangulo del selector
|
||||
color_t color; // Color del selector
|
||||
color_t itemColor; // Color del item
|
||||
color_t jumpItemColors[8]; // Transición de colores para el item seleccionado
|
||||
int itemColorIndex; // Indice del color de transición para el item seleccionado
|
||||
int a; // Cantidad de transparencia para el rectangulo del selector
|
||||
};
|
||||
|
||||
// Objetos y punteros
|
||||
@@ -139,6 +141,9 @@ private:
|
||||
// Calcula la altura del selector
|
||||
int getSelectorHeight(int value);
|
||||
|
||||
// Calcula los colores del selector para el degradado
|
||||
void setSelectorItemColors();
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file = "");
|
||||
|
||||
Reference in New Issue
Block a user