- afegida carpeta release

- jitter en renderInfo
This commit is contained in:
2026-04-05 09:39:05 +02:00
parent 3aa6078054
commit c0553c6d37
104 changed files with 78786 additions and 63 deletions

View File

@@ -63,6 +63,7 @@ namespace Overlay {
std::string text;
float anim{0.0F};
bool visible{false};
bool mono_digits{false}; // si true, dígits amb amplada fixa (la resta natural)
};
static InfoSegment info_segments_[INFO_SEGMENT_COUNT];
@@ -182,15 +183,19 @@ namespace Overlay {
// Render si hi ha alguna cosa visible
if (info_visible_pos_ != Options::RenderInfoPosition::OFF && info_anim_ > 0.0F) {
const int DIGIT_CELL = font_->charBoxWidth() - 1; // amplada uniforme per dígit
// Calcula amplada total interpolant cada segment per la seva anim
float total_w = 0.0F;
for (auto& seg : info_segments_) {
if (seg.anim > 0.0F && !seg.text.empty()) {
total_w += font_->width(seg.text.c_str()) * Easing::outQuad(seg.anim);
int w = seg.mono_digits
? font_->widthMonoDigits(seg.text.c_str(), DIGIT_CELL)
: font_->width(seg.text.c_str());
total_w += w * Easing::outQuad(seg.anim);
}
}
if (total_w > 0.0F) {
// Slide vertical (ease-out quadratic) — igual que abans
float eased_y = Easing::outQuad(info_anim_);
int ch = font_->charHeight();
int final_y;
@@ -209,9 +214,17 @@ namespace Overlay {
for (auto& seg : info_segments_) {
if (seg.anim > 0.01F && !seg.text.empty()) {
int xi = static_cast<int>(cur_x);
font_->draw(pixel_data, xi + 1, info_y + 1, seg.text.c_str(), Options::render_info.shadow_color);
font_->draw(pixel_data, xi, info_y, seg.text.c_str(), Options::render_info.text_color);
cur_x += font_->width(seg.text.c_str()) * Easing::outQuad(seg.anim);
int seg_w = seg.mono_digits
? font_->widthMonoDigits(seg.text.c_str(), DIGIT_CELL)
: font_->width(seg.text.c_str());
if (seg.mono_digits) {
font_->drawMonoDigits(pixel_data, xi + 1, info_y + 1, seg.text.c_str(), Options::render_info.shadow_color, DIGIT_CELL);
font_->drawMonoDigits(pixel_data, xi, info_y, seg.text.c_str(), Options::render_info.text_color, DIGIT_CELL);
} else {
font_->draw(pixel_data, xi + 1, info_y + 1, seg.text.c_str(), Options::render_info.shadow_color);
font_->draw(pixel_data, xi, info_y, seg.text.c_str(), Options::render_info.text_color);
}
cur_x += seg_w * Easing::outQuad(seg.anim);
}
}
}
@@ -268,9 +281,10 @@ namespace Overlay {
Options::render_info.position = static_cast<Options::RenderInfoPosition>(pos);
}
void setRenderInfoSegments(const char* s0, const char* s1, const char* s2, const char* s3) {
void setRenderInfoSegments(const char* s0, const char* s1, const char* s2, const char* s3, unsigned int mono_mask) {
const char* segs[INFO_SEGMENT_COUNT] = {s0, s1, s2, s3};
for (int i = 0; i < INFO_SEGMENT_COUNT; i++) {
info_segments_[i].mono_digits = (mono_mask >> i) & 1u;
if (segs[i] != nullptr && *segs[i] != '\0') {
info_segments_[i].text = segs[i];
info_segments_[i].visible = true;