finalitzada la implementació del carrusel
This commit is contained in:
@@ -529,9 +529,8 @@ void Scoreboard::renderCarousel(size_t panel_index, int center_x, int y) {
|
||||
// Espacio extra entre letras
|
||||
constexpr int EXTRA_SPACING = 2;
|
||||
|
||||
// Carrusel extendido: 9 letras visibles (4 izq + centro + 4 der)
|
||||
constexpr int VISIBLE_LETTERS = 9;
|
||||
constexpr int HALF_VISIBLE = VISIBLE_LETTERS / 2; // 4
|
||||
// Carrusel extendido: usar constante de clase
|
||||
constexpr int HALF_VISIBLE = CAROUSEL_VISIBLE_LETTERS / 2; // 4
|
||||
|
||||
// Posición flotante actual del carrusel (índice en character_list_)
|
||||
const float carousel_pos = carousel_position_.at(panel_index);
|
||||
@@ -552,9 +551,6 @@ void Scoreboard::renderCarousel(size_t panel_index, int center_x, int y) {
|
||||
// Calcular posición X inicial (centrar el conjunto de 9 letras)
|
||||
int start_x = center_x - (HALF_VISIBLE * CHAR_STEP) - (AVG_CHAR_WIDTH / 2) - pixel_offset;
|
||||
|
||||
// Detectar si el carrusel está en movimiento
|
||||
const bool is_animating = std::abs(carousel_pos - carousel_target_.at(panel_index)) > 0.01f;
|
||||
|
||||
// Renderizar las 9 letras visibles
|
||||
for (int i = -HALF_VISIBLE; i <= HALF_VISIBLE; ++i) {
|
||||
// Índice real en character_list_ (con wrap-around circular)
|
||||
@@ -569,27 +565,26 @@ void Scoreboard::renderCarousel(size_t panel_index, int center_x, int y) {
|
||||
// Obtener el carácter directamente de character_list_
|
||||
std::string single_char(1, char_list[char_index]);
|
||||
|
||||
// Calcular distancia flotante al centro visual
|
||||
const float distance_from_center = std::abs(static_cast<float>(i) + fractional_offset);
|
||||
// Calcular distancia flotante al centro visual basada en posición real del carácter
|
||||
float distance_from_center = std::abs(static_cast<float>(char_index) - carousel_pos);
|
||||
|
||||
// Calcular color con LERP dinámico
|
||||
// Manejar wrap-around circular: elegir el camino más corto
|
||||
if (distance_from_center > static_cast<float>(char_list_size) / 2.0f) {
|
||||
distance_from_center = static_cast<float>(char_list_size) - distance_from_center;
|
||||
}
|
||||
|
||||
// Calcular color con LERP dinámico continuo
|
||||
Color letter_color;
|
||||
|
||||
if (distance_from_center < 0.5f && !is_animating) {
|
||||
// Letra central Y carrusel quieto: animated_color_
|
||||
letter_color = animated_color_;
|
||||
if (distance_from_center < 0.5f) {
|
||||
// Letra cerca del centro: LERP hacia animated_color_
|
||||
// distance_from_center va de 0.0 (centro exacto) a 0.5 (borde)
|
||||
float lerp_to_animated = distance_from_center / 0.5f; // 0.0 a 1.0
|
||||
letter_color = animated_color_.LERP(text_color1_, lerp_to_animated);
|
||||
} else {
|
||||
// Todas las demás letras O carrusel en movimiento: LERP
|
||||
float base_lerp;
|
||||
if (distance_from_center < 0.5f) {
|
||||
// Letra muy cerca del centro durante animación: 0% (color brillante)
|
||||
base_lerp = 0.0f;
|
||||
} else {
|
||||
// Letras alejadas: lerp proporcional a la distancia
|
||||
base_lerp = (distance_from_center - 0.5f) / (HALF_VISIBLE - 0.5f);
|
||||
base_lerp = std::min(base_lerp, 1.0f);
|
||||
}
|
||||
|
||||
// Letras alejadas: LERP hacia color_ (fade out)
|
||||
float base_lerp = (distance_from_center - 0.5f) / (HALF_VISIBLE - 0.5f);
|
||||
base_lerp = std::min(base_lerp, 1.0f);
|
||||
const float LERP_FACTOR = base_lerp * 0.85f;
|
||||
letter_color = text_color1_.LERP(color_, LERP_FACTOR);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user