fix: tidy gamepad/overlay/jfile (statics sense sufix, locals UPPER_CASE)

This commit is contained in:
2026-05-16 14:37:56 +02:00
parent 7789c1c217
commit 1e00f5c3a4
3 changed files with 191 additions and 191 deletions
+98 -98
View File
@@ -14,7 +14,7 @@
namespace Overlay {
static std::unique_ptr<Text> font_;
static std::unique_ptr<Text> font;
// --- Aspecte de la notificació ---
static constexpr Uint32 NOTIF_BG_COLOR = 0xFF2E1A1A; // Fons blau fosc (ABGR)
@@ -52,12 +52,12 @@ namespace Overlay {
int box_h{0}; // Alçada de la caixa (calculat al crear)
};
static std::vector<Notification> notifications_;
static Uint32 last_ticks_ = 0;
static std::vector<Notification> notifications;
static Uint32 last_ticks = 0;
// --- Render info ---
static Options::RenderInfoPosition info_visible_pos_ = Options::RenderInfoPosition::OFF;
static float info_anim_ = 0.0F; // 0 = fora de pantalla, 1 = posició final
static Options::RenderInfoPosition info_visible_pos = Options::RenderInfoPosition::OFF;
static float info_anim = 0.0F; // 0 = fora de pantalla, 1 = posició final
static constexpr float INFO_SLIDE_SPEED = 5.0F;
// Segments del render info — cadascú amb la seva pròpia visibilitat animada
@@ -69,7 +69,7 @@ namespace Overlay {
bool visible{false};
bool mono_digits{false}; // si true, dígits amb amplada fixa (la resta natural)
};
static InfoSegment info_segments_[INFO_SEGMENT_COUNT];
static InfoSegment info_segments[INFO_SEGMENT_COUNT];
// --- Crèdits cinematogràfics ---
// Usen el sistema de notificacions en posició TOP_CENTER_DROP.
@@ -78,8 +78,8 @@ namespace Overlay {
PLAYING_1,
GAP,
PLAYING_2 };
static CreditsPhase credits_phase_ = CreditsPhase::IDLE;
static float credits_timer_ = 0.0F; // segons dins la phase actual
static CreditsPhase credits_phase = CreditsPhase::IDLE;
static float credits_timer = 0.0F; // segons dins la phase actual
static constexpr float CREDITS_DELAY = 2.0F;
static constexpr float CREDITS_GAP = 0.4F;
static constexpr float CREDITS_HOLD = 7.5F;
@@ -87,16 +87,16 @@ namespace Overlay {
static constexpr Uint32 CREDITS_FG = NOTIF_TEXT_COLOR; // mateix cian
// --- Doble ESC per a eixir ---
static bool esc_waiting_ = false;
static bool esc_waiting = false;
void init() {
font_ = std::make_unique<Text>("fonts/8bithud.fnt", "fonts/8bithud.gif");
last_ticks_ = SDL_GetTicks();
font = std::make_unique<Text>("fonts/8bithud.fnt", "fonts/8bithud.gif");
last_ticks = SDL_GetTicks();
}
void destroy() {
font_.reset();
notifications_.clear();
font.reset();
notifications.clear();
}
// Pinta un rectangle sòlid dins els límits de la pantalla
@@ -115,17 +115,17 @@ namespace Overlay {
}
void render(Uint32* pixel_data) {
if (!font_ || (pixel_data == nullptr)) {
if (!font || (pixel_data == nullptr)) {
return;
}
// Calcula delta time
Uint32 now = SDL_GetTicks();
float dt = static_cast<float>(now - last_ticks_) / 1000.0F;
last_ticks_ = now;
float dt = static_cast<float>(now - last_ticks) / 1000.0F;
last_ticks = now;
// Actualitza i pinta cada notificació
for (auto& notif : notifications_) {
for (auto& notif : notifications) {
switch (notif.status) {
case Status::RISING:
notif.anim += SLIDE_SPEED * dt;
@@ -184,52 +184,52 @@ namespace Overlay {
}
// Pinta el text línia a línia (amb ombra o contorn segons style)
int line_h = font_->charHeight();
int line_h = font->charHeight();
int line_y = box_y + NOTIF_PADDING_V;
for (const auto& line : notif.lines) {
int line_w = font_->width(line.c_str());
int line_w = font->width(line.c_str());
int line_x = box_x + ((notif.box_w - line_w) / 2); // centrat dins la caixa
if (notif.style == NotifStyle::SHADOW) {
font_->draw(pixel_data, line_x + 1, line_y + 1, line.c_str(), notif.accent_color);
font->draw(pixel_data, line_x + 1, line_y + 1, line.c_str(), notif.accent_color);
} else if (notif.style == NotifStyle::OUTLINE) {
// Contorn 4-direccional (N, S, E, W)
font_->draw(pixel_data, line_x, line_y - 1, line.c_str(), notif.accent_color);
font_->draw(pixel_data, line_x, line_y + 1, line.c_str(), notif.accent_color);
font_->draw(pixel_data, line_x - 1, line_y, line.c_str(), notif.accent_color);
font_->draw(pixel_data, line_x + 1, line_y, line.c_str(), notif.accent_color);
font->draw(pixel_data, line_x, line_y - 1, line.c_str(), notif.accent_color);
font->draw(pixel_data, line_x, line_y + 1, line.c_str(), notif.accent_color);
font->draw(pixel_data, line_x - 1, line_y, line.c_str(), notif.accent_color);
font->draw(pixel_data, line_x + 1, line_y, line.c_str(), notif.accent_color);
}
font_->draw(pixel_data, line_x, line_y, line.c_str(), notif.text_color);
font->draw(pixel_data, line_x, line_y, line.c_str(), notif.text_color);
line_y += line_h + 1;
}
}
// Render info (FPS, driver, shader) — animat amb slide vertical
// State machine: visible_pos s'actualitza cap a desired quan anim arriba a 0
// State machine: visible_pos s'actualitza cap a DESIRED quan anim arriba a 0
{
const auto desired = Options::render_info.position;
if (desired == info_visible_pos_) {
const auto DESIRED = Options::render_info.position;
if (DESIRED == info_visible_pos) {
// Mateix lloc: entra fins a 1
if (info_anim_ < 1.0F) {
info_anim_ += INFO_SLIDE_SPEED * dt;
info_anim_ = std::min(info_anim_, 1.0F);
if (info_anim < 1.0F) {
info_anim += INFO_SLIDE_SPEED * dt;
info_anim = std::min(info_anim, 1.0F);
}
} else {
// Canvi: si visible_pos està OFF, commuta directament
if (info_visible_pos_ == Options::RenderInfoPosition::OFF) {
info_visible_pos_ = desired;
info_anim_ = 0.0F;
if (info_visible_pos == Options::RenderInfoPosition::OFF) {
info_visible_pos = DESIRED;
info_anim = 0.0F;
} else {
// Ix del lloc actual
info_anim_ -= INFO_SLIDE_SPEED * dt;
if (info_anim_ <= 0.0F) {
info_anim_ = 0.0F;
info_visible_pos_ = desired;
info_anim -= INFO_SLIDE_SPEED * dt;
if (info_anim <= 0.0F) {
info_anim = 0.0F;
info_visible_pos = DESIRED;
}
}
}
// Actualitza animacions individuals dels segments
for (auto& seg : info_segments_) {
for (auto& seg : info_segments) {
float target = seg.visible ? 1.0F : 0.0F;
if (seg.anim < target) {
seg.anim += SEG_SPEED * dt;
@@ -241,25 +241,25 @@ 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
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 (const auto& seg : info_segments_) {
for (const auto& seg : info_segments) {
if (seg.anim > 0.0F && !seg.text.empty()) {
int w = seg.mono_digits
? font_->widthMonoDigits(seg.text.c_str(), DIGIT_CELL)
: font_->width(seg.text.c_str());
? 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) {
float eased_y = Easing::outQuad(info_anim_);
int ch = font_->charHeight();
float eased_y = Easing::outQuad(info_anim);
int ch = font->charHeight();
int final_y;
int start_y;
if (info_visible_pos_ == Options::RenderInfoPosition::TOP) {
if (info_visible_pos == Options::RenderInfoPosition::TOP) {
final_y = 1;
start_y = -ch - 1;
} else {
@@ -270,18 +270,18 @@ namespace Overlay {
// Dibuixa cada segment en la seva posició x acumulada
float cur_x = (SCREEN_W - total_w) / 2.0F;
for (const auto& seg : info_segments_) {
for (const auto& seg : info_segments) {
if (seg.anim > 0.01F && !seg.text.empty()) {
int xi = static_cast<int>(cur_x);
int seg_w = seg.mono_digits
? font_->widthMonoDigits(seg.text.c_str(), DIGIT_CELL)
: font_->width(seg.text.c_str());
? 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);
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);
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);
}
@@ -291,34 +291,34 @@ namespace Overlay {
}
// Elimina les acabades
std::erase_if(notifications_, [](const Notification& n) { return n.status == Status::FINISHED; });
std::erase_if(notifications, [](const Notification& n) { return n.status == Status::FINISHED; });
// Si la notificació d'ESC ha desaparegut, reseteja l'estat
if (esc_waiting_ && notifications_.empty()) {
esc_waiting_ = false;
if (esc_waiting && notifications.empty()) {
esc_waiting = false;
}
// Indicador de pausa persistent (cantó superior dret)
if ((Director::get() != nullptr) && Director::get()->isPaused()) {
const char* pause_text = Locale::get("notifications.pause");
int w = font_->width(pause_text);
int w = font->width(pause_text);
int x = SCREEN_W - w - 4;
int y = 4;
// Contorn blanc 4-direccional
font_->draw(pixel_data, x, y - 1, pause_text, 0xFFFFFFFF);
font_->draw(pixel_data, x, y + 1, pause_text, 0xFFFFFFFF);
font_->draw(pixel_data, x - 1, y, pause_text, 0xFFFFFFFF);
font_->draw(pixel_data, x + 1, y, pause_text, 0xFFFFFFFF);
font->draw(pixel_data, x, y - 1, pause_text, 0xFFFFFFFF);
font->draw(pixel_data, x, y + 1, pause_text, 0xFFFFFFFF);
font->draw(pixel_data, x - 1, y, pause_text, 0xFFFFFFFF);
font->draw(pixel_data, x + 1, y, pause_text, 0xFFFFFFFF);
// Text en roig
font_->draw(pixel_data, x, y, pause_text, 0xFF0000FF);
font->draw(pixel_data, x, y, pause_text, 0xFF0000FF);
}
// Crèdits seqüencials — dispara notificacions TOP_CENTER_DROP una darrere l'altra.
if (credits_phase_ != CreditsPhase::IDLE) {
credits_timer_ += dt;
switch (credits_phase_) {
if (credits_phase != CreditsPhase::IDLE) {
credits_timer += dt;
switch (credits_phase) {
case CreditsPhase::DELAY:
if (credits_timer_ >= CREDITS_DELAY) {
if (credits_timer >= CREDITS_DELAY) {
showNotification(
{std::string(Locale::get("credits.port_role")),
std::string(Locale::get("credits.port_name"))},
@@ -327,18 +327,18 @@ namespace Overlay {
NotifStyle::OUTLINE,
CREDITS_BG,
CREDITS_FG);
credits_phase_ = CreditsPhase::PLAYING_1;
credits_timer_ = 0.0F;
credits_phase = CreditsPhase::PLAYING_1;
credits_timer = 0.0F;
}
break;
case CreditsPhase::PLAYING_1:
if (notifications_.empty()) {
credits_phase_ = CreditsPhase::GAP;
credits_timer_ = 0.0F;
if (notifications.empty()) {
credits_phase = CreditsPhase::GAP;
credits_timer = 0.0F;
}
break;
case CreditsPhase::GAP:
if (credits_timer_ >= CREDITS_GAP) {
if (credits_timer >= CREDITS_GAP) {
showNotification(
{std::string(Locale::get("credits.modern_role")),
std::string(Locale::get("credits.modern_name"))},
@@ -347,14 +347,14 @@ namespace Overlay {
NotifStyle::OUTLINE,
CREDITS_BG,
CREDITS_FG);
credits_phase_ = CreditsPhase::PLAYING_2;
credits_timer_ = 0.0F;
credits_phase = CreditsPhase::PLAYING_2;
credits_timer = 0.0F;
}
break;
case CreditsPhase::PLAYING_2:
if (notifications_.empty()) {
credits_phase_ = CreditsPhase::IDLE;
credits_timer_ = 0.0F;
if (notifications.empty()) {
credits_phase = CreditsPhase::IDLE;
credits_timer = 0.0F;
}
break;
case CreditsPhase::IDLE:
@@ -363,7 +363,7 @@ namespace Overlay {
}
// Neteja notificacions finalitzades
std::erase_if(notifications_, [](const Notification& n) { return n.status == Status::FINISHED; });
std::erase_if(notifications, [](const Notification& n) { return n.status == Status::FINISHED; });
// Menú flotant per damunt de tot (isVisible inclou l'animació de tancament)
if (Menu::isVisible()) {
@@ -382,7 +382,7 @@ namespace Overlay {
Uint32 accent_color,
Uint32 text_color) {
// Reemplaça la notificació anterior
notifications_.clear();
notifications.clear();
Notification notif;
notif.lines = lines;
@@ -395,15 +395,15 @@ namespace Overlay {
// Calcula l'amplada màxima de les línies
int max_w = 0;
for (const auto& line : lines) {
int w = font_->width(line.c_str());
int w = font->width(line.c_str());
max_w = std::max(w, max_w);
}
notif.box_w = max_w + NOTIF_PADDING_H * 2;
int line_h = font_->charHeight();
int line_h = font->charHeight();
int line_count = static_cast<int>(lines.size());
notif.box_h = line_count * line_h + (line_count - 1) * 1 + NOTIF_PADDING_V * 2;
notifications_.push_back(notif);
notifications.push_back(notif);
}
void toggleRenderInfo() { cycleRenderInfo(+1); }
@@ -418,47 +418,47 @@ namespace Overlay {
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) != 0U);
info_segments[i].mono_digits = (((mono_mask >> i) & 1U) != 0U);
if (segs[i] != nullptr && *segs[i] != '\0') {
info_segments_[i].text = segs[i];
info_segments_[i].visible = true;
info_segments[i].text = segs[i];
info_segments[i].visible = true;
} else {
info_segments_[i].visible = false;
info_segments[i].visible = false;
}
}
}
void startCredits() {
if (credits_phase_ != CreditsPhase::IDLE) {
if (credits_phase != CreditsPhase::IDLE) {
return;
}
credits_phase_ = CreditsPhase::DELAY;
credits_timer_ = 0.0F;
credits_phase = CreditsPhase::DELAY;
credits_timer = 0.0F;
}
void cancelCredits() {
credits_phase_ = CreditsPhase::IDLE;
credits_timer_ = 0.0F;
notifications_.clear();
credits_phase = CreditsPhase::IDLE;
credits_timer = 0.0F;
notifications.clear();
}
auto creditsActive() -> bool {
return credits_phase_ != CreditsPhase::IDLE;
return credits_phase != CreditsPhase::IDLE;
}
auto isEscConsumed() -> bool {
return esc_waiting_;
return esc_waiting;
}
auto handleEscape() -> bool {
if (!esc_waiting_) {
if (!esc_waiting) {
// Primera pulsació: mostra avís i consumeix
esc_waiting_ = true;
esc_waiting = true;
showNotification(Locale::get("notifications.exit_double_esc"), 2.0F);
return true; // Consumit
}
// Segona pulsació: deixa passar
esc_waiting_ = false;
esc_waiting = false;
return false;
}