fix: en la migracio de la marquesina a la nova versio de Text s'havia posat per error un kerning superior al que havia

opt: millores en la getió de la marquesina per optimitzar rendiment
This commit is contained in:
2026-03-22 19:43:35 +01:00
parent 911ee7a13e
commit 495c23a3d2
4 changed files with 25 additions and 10 deletions

View File

@@ -66,8 +66,9 @@ void Title::initMarquee() {
uint32_t cp = Text::nextCodepoint(long_text_, pos);
Glyph l;
l.codepoint = cp;
l.clip = marquee_text_->getGlyphClip(cp); // Pre-calcular clip rect (evita búsqueda por frame)
l.x = MARQUEE_START_X;
l.width = static_cast<float>(marquee_text_->glyphWidth(cp, 1)); // Pre-calcular ancho con kerning
l.width = static_cast<float>(marquee_text_->glyphWidth(cp, 0)); // Pre-calcular ancho visual del glifo
l.enabled = false;
letters_.push_back(l);
}
@@ -223,15 +224,15 @@ void Title::updateMarquee(float delta_time) {
// Dibuja la marquesina
void Title::renderMarquee() {
auto* sprite = marquee_text_->getSprite();
sprite->setY(MARQUEE_Y);
// Solo renderizar letras activas (optimización: usa cache y rangos)
for (int i = first_active_letter_; i <= last_active_letter_ + 1 && i < (int)letters_.size(); ++i) {
const auto& letter = letters_[i];
if (letter.enabled) {
marquee_text_->writeColored(
static_cast<int>(letter.x), // Conversión explícita float→int
static_cast<int>(MARQUEE_Y), // Usar constante
Text::codepointToUtf8(letter.codepoint), // Convertir codepoint a string UTF-8
static_cast<Uint8>(PaletteColor::MAGENTA));
if (letter.enabled && letter.clip.w > 0.0F) {
sprite->setClip(letter.clip);
sprite->setX(letter.x);
sprite->render(1, static_cast<Uint8>(PaletteColor::MAGENTA));
}
}
}