ServiceMenu: arreglos de colorets
This commit is contained in:
196
source/utils.cpp
196
source/utils.cpp
@@ -15,29 +15,6 @@
|
||||
// Variables
|
||||
Overrides overrides = Overrides();
|
||||
|
||||
// Colores
|
||||
const Color BG_COLOR = Color(0X27, 0X27, 0X36);
|
||||
const Color NO_COLOR = Color(0XFF, 0XFF, 0XFF);
|
||||
const Color SHADOW_TEXT_COLOR = Color(0X43, 0X43, 0X4F);
|
||||
const Color SEPARATOR_COLOR = Color(0X0D, 0X1A, 0X2B);
|
||||
const Color SCOREBOARD_EASY_COLOR = Color(0X4B, 0X69, 0X2F);
|
||||
const Color SCOREBOARD_NORMAL_COLOR = Color(0X2E, 0X3F, 0X47);
|
||||
const Color SCOREBOARD_HARD_COLOR = Color(0X76, 0X42, 0X8A);
|
||||
const Color FLASH_COLOR = Color(0XFF, 0XFF, 0XFF);
|
||||
const Color FADE_COLOR = Color(0X27, 0X27, 0X36);
|
||||
const Color ORANGE_COLOR = Color(0XFF, 0X7A, 0X00);
|
||||
const Color ORANGE_SOFT_COLOR = Color(0XFF, 0XA0, 0X33);
|
||||
const Color ORANGE_SHADOW_COLOR = ORANGE_SOFT_COLOR.darken(100);
|
||||
const Color GREEN_COLOR = Color(0X5B, 0XEC, 0X95);
|
||||
const Color BLUE_SKY_COLOR = Color(0X02, 0X88, 0XD1);
|
||||
const Color PINK_SKY_COLOR = Color(0XFF, 0X6B, 0X97);
|
||||
const Color GREEN_SKY_COLOR = Color(0X00, 0X79, 0X6B);
|
||||
const Color SERV_MENU_TITLE_COLOR = Color(0XFF, 0XFF, 0XFF);
|
||||
const Color SERV_MENU_TEXT_COLOR = Color(0XFF, 0XFF, 0XFF);
|
||||
const Color SERV_MENU_SELECTED_COLOR = Color(0XFF, 0XFF, 0X00);;
|
||||
const Color SERV_MENU_BG_COLOR = Color(0x1E, 0x1E, 0x1E);
|
||||
const Color DEBUG_COLOR = Color(0xFF, 0xFF, 0x00);
|
||||
|
||||
// Obtiene un color del vector de colores imitando al Coche Fantástico
|
||||
Color getColorLikeKnightRider(const std::vector<Color> &colors, int counter_)
|
||||
{
|
||||
@@ -313,18 +290,18 @@ void printWithDots(const std::string &text1, const std::string &text2, const std
|
||||
|
||||
// Calcula el ancho del campo para text2 restando la longitud de text1 y text3
|
||||
size_t field_width = TOTAL_WIDTH > (text1.size() + text3.size())
|
||||
? TOTAL_WIDTH - text1.size() - text3.size()
|
||||
: 0;
|
||||
? TOTAL_WIDTH - text1.size() - text3.size()
|
||||
: 0;
|
||||
|
||||
// Prepara el bloque a imprimir a partir de text2
|
||||
std::string field_text;
|
||||
if (text2.size() < field_width)
|
||||
{
|
||||
{
|
||||
// Si text2 es más corto, lo rellenamos a la derecha con puntos
|
||||
field_text = text2 + std::string(field_width - text2.size(), '.');
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
// Si es demasiado largo, lo cortamos
|
||||
field_text = text2.substr(0, field_width);
|
||||
}
|
||||
@@ -414,4 +391,167 @@ std::string getPath(const std::string &full_path)
|
||||
{
|
||||
std::filesystem::path path(full_path);
|
||||
return path.parent_path().string();
|
||||
}
|
||||
}
|
||||
|
||||
constexpr HSV rgbToHsv(Color color)
|
||||
{
|
||||
float r = color.r / 255.0f;
|
||||
float g = color.g / 255.0f;
|
||||
float b = color.b / 255.0f;
|
||||
|
||||
float max = fmaxf(fmaxf(r, g), b);
|
||||
float min = fminf(fminf(r, g), b);
|
||||
float delta = max - min;
|
||||
|
||||
float h = 0.0f;
|
||||
if (delta > 0.00001f)
|
||||
{
|
||||
if (max == r)
|
||||
h = fmodf((g - b) / delta, 6.0f);
|
||||
else if (max == g)
|
||||
h = ((b - r) / delta) + 2.0f;
|
||||
else
|
||||
h = ((r - g) / delta) + 4.0f;
|
||||
h *= 60.0f;
|
||||
if (h < 0.0f)
|
||||
h += 360.0f;
|
||||
}
|
||||
|
||||
float s = (max <= 0.0f) ? 0.0f : delta / max;
|
||||
float v = max;
|
||||
|
||||
return {h, s, v};
|
||||
}
|
||||
|
||||
constexpr Color hsvToRgb(HSV hsv)
|
||||
{
|
||||
float c = hsv.v * hsv.s;
|
||||
float x = c * (1 - fabsf(fmodf(hsv.h / 60.0f, 2) - 1));
|
||||
float m = hsv.v - c;
|
||||
|
||||
float r = 0, g = 0, b = 0;
|
||||
|
||||
if (hsv.h < 60)
|
||||
{
|
||||
r = c;
|
||||
g = x;
|
||||
b = 0;
|
||||
}
|
||||
else if (hsv.h < 120)
|
||||
{
|
||||
r = x;
|
||||
g = c;
|
||||
b = 0;
|
||||
}
|
||||
else if (hsv.h < 180)
|
||||
{
|
||||
r = 0;
|
||||
g = c;
|
||||
b = x;
|
||||
}
|
||||
else if (hsv.h < 240)
|
||||
{
|
||||
r = 0;
|
||||
g = x;
|
||||
b = c;
|
||||
}
|
||||
else if (hsv.h < 300)
|
||||
{
|
||||
r = x;
|
||||
g = 0;
|
||||
b = c;
|
||||
}
|
||||
else
|
||||
{
|
||||
r = c;
|
||||
g = 0;
|
||||
b = x;
|
||||
}
|
||||
|
||||
return Color(
|
||||
static_cast<uint8_t>(roundf((r + m) * 255)),
|
||||
static_cast<uint8_t>(roundf((g + m) * 255)),
|
||||
static_cast<uint8_t>(roundf((b + m) * 255)));
|
||||
}
|
||||
|
||||
/*ColorCycle generateMirroredCycle(Color base)
|
||||
{
|
||||
ColorCycle result{};
|
||||
HSV baseHSV = rgbToHsv(base);
|
||||
|
||||
for (size_t i = 0; i < COLOR_CYCLE_SIZE; ++i)
|
||||
{
|
||||
float t = static_cast<float>(i) / (COLOR_CYCLE_SIZE - 1);
|
||||
float hueShift = 25.0f * t; // reducido de 45 a 25
|
||||
float satShift = 0.0f; // sin cambio de saturación
|
||||
float valShift = 0.07f * sinf(t * 3.1415926f); // brillo más suave
|
||||
|
||||
HSV adjusted = {
|
||||
fmodf(baseHSV.h + hueShift, 360.0f),
|
||||
fminf(1.0f, fmaxf(0.0f, baseHSV.s + satShift)),
|
||||
fminf(1.0f, fmaxf(0.0f, baseHSV.v + valShift))};
|
||||
|
||||
Color c = hsvToRgb(adjusted);
|
||||
result[i] = c;
|
||||
result[2 * COLOR_CYCLE_SIZE - 1 - i] = c; // espejo
|
||||
}
|
||||
|
||||
return result;
|
||||
}*/
|
||||
|
||||
ColorCycle generateMirroredCycle(Color base, ColorCycleStyle style)
|
||||
{
|
||||
ColorCycle result{};
|
||||
HSV baseHSV = rgbToHsv(base);
|
||||
|
||||
for (size_t i = 0; i < COLOR_CYCLE_SIZE; ++i)
|
||||
{
|
||||
float t = static_cast<float>(i) / (COLOR_CYCLE_SIZE - 1); // 0 → 1
|
||||
float hueShift = 0.0f;
|
||||
float satShift = 0.0f;
|
||||
float valShift = 0.0f;
|
||||
|
||||
switch (style)
|
||||
{
|
||||
case ColorCycleStyle::SubtlePulse:
|
||||
// Solo brillo suave
|
||||
valShift = 0.07f * sinf(t * M_PI);
|
||||
break;
|
||||
|
||||
case ColorCycleStyle::HueWave:
|
||||
// Oscilación leve de tono
|
||||
hueShift = 15.0f * (t - 0.5f) * 2.0f;
|
||||
valShift = 0.05f * sinf(t * M_PI);
|
||||
break;
|
||||
|
||||
case ColorCycleStyle::Vibrant:
|
||||
// Cambios fuertes en tono y brillo
|
||||
hueShift = 35.0f * sinf(t * M_PI);
|
||||
valShift = 0.2f * sinf(t * M_PI);
|
||||
satShift = -0.2f * sinf(t * M_PI);
|
||||
break;
|
||||
|
||||
case ColorCycleStyle::DarkenGlow:
|
||||
// Se oscurece al centro
|
||||
valShift = -0.15f * sinf(t * M_PI);
|
||||
break;
|
||||
|
||||
case ColorCycleStyle::LightFlash:
|
||||
// Se ilumina al centro
|
||||
valShift = 0.25f * sinf(t * M_PI);
|
||||
break;
|
||||
}
|
||||
|
||||
HSV adjusted = {
|
||||
fmodf(baseHSV.h + hueShift + 360.0f, 360.0f),
|
||||
fminf(1.0f, fmaxf(0.0f, baseHSV.s + satShift)),
|
||||
fminf(1.0f, fmaxf(0.0f, baseHSV.v + valShift))
|
||||
};
|
||||
|
||||
Color c = hsvToRgb(adjusted);
|
||||
result[i] = c;
|
||||
result[2 * COLOR_CYCLE_SIZE - 1 - i] = c; // espejo
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user