// service_menu.hpp - Constants del menu de servei (F12) // © 2026 JailDesigner #pragma once #include namespace Defaults::ServiceMenu { // ---- Mides en coordenades logiques del joc (1280×720) ---- // BOX_WIDTH_MIN es el minim: si el titol o algun item no hi caben, el // marc s'expandeix dinamicament amb animacio (cf. WIDTH_RATE). constexpr int BOX_WIDTH_MIN = 460; constexpr int GAP_Y = 22; constexpr int TITLE_HEIGHT = 36; // scale 0.85 ≈ 34 px de text constexpr int SUBTITLE_HEIGHT = 18; // scale 0.4 ≈ 16 px de text constexpr int SEPARATOR_HEIGHT = 1; constexpr int ITEM_HEIGHT = 38; // scale 0.55 ≈ 22 px de text + padding per al highlight constexpr int ITEM_GAP_Y = 6; // Brackets als 4 cantons (substitueixen la vora completa: estètica sci-fi). constexpr int CORNER_ARM_H = 48; constexpr int CORNER_ARM_V = 28; constexpr int CORNER_THICKNESS = 2; // ---- Animacio open/close (mateixos parametres que aee_arcade) ---- constexpr float OPEN_SPEED = 8.0F; // ~125 ms a obrir constexpr float CLOSE_SPEED = 10.0F; // ~100 ms a tancar constexpr float HEIGHT_RATE = 12.0F; // smoothing exponencial de l'alçada de la caixa constexpr float WIDTH_RATE = 12.0F; // smoothing per a canvis d'ample entre pagines // ---- Animacio del highlight (rectangle del cursor) ---- // Rate=18 dona settling ~0.17 s al 95% (ease-out exponencial). constexpr float HIGHLIGHT_RATE = 18.0F; constexpr int HIGHLIGHT_TICK_LEN = 10; // longitud dels ticks a cada cantonada constexpr int HIGHLIGHT_THICKNESS = 1; constexpr int HIGHLIGHT_PAD_X = 18; // padding lateral del rect respecte al text constexpr int HIGHLIGHT_PAD_Y = 4; // padding vertical constexpr int TEXT_INSET_X = 16; // marge intern del text dins del highlight (label esq / valor dre) constexpr int MIN_LABEL_VALUE_GAP = 30; // mínim gap entre label i valor (per al càlcul d'ample dinàmic) // ---- Colors RGBA ---- constexpr SDL_Color BG_COLOR{.r = 0, .g = 12, .b = 24, .a = 215}; constexpr SDL_Color CORNER_COLOR{.r = 120, .g = 220, .b = 255, .a = 255}; // cian neon constexpr SDL_Color TITLE_COLOR{.r = 200, .g = 240, .b = 255, .a = 255}; constexpr SDL_Color SUBTITLE_COLOR{.r = 110, .g = 170, .b = 210, .a = 220}; // cian apagat constexpr SDL_Color SEPARATOR_COLOR{.r = 60, .g = 120, .b = 180, .a = 180}; constexpr SDL_Color LABEL_COLOR{.r = 170, .g = 210, .b = 240, .a = 255}; constexpr SDL_Color CURSOR_COLOR{.r = 255, .g = 230, .b = 120, .a = 255}; // groc per al text sel·leccionat constexpr SDL_Color HIGHLIGHT_OUTLINE{.r = 255, .g = 230, .b = 120, .a = 255}; // mateix groc, opac constexpr SDL_Color HIGHLIGHT_FILL{.r = 255, .g = 230, .b = 120, .a = 36}; // wash translucid // ---- Tipografia (VectorText). Scale 1.0 = caracter 20×40 px ---- constexpr float TITLE_SCALE = 0.85F; // mateixa escala que el HUD del scoreboard constexpr float SUBTITLE_SCALE = 0.40F; // sota el titol, info decorativa (versio/hash) constexpr float ITEM_SCALE = 0.55F; // mateixa escala que les notificacions constexpr float TEXT_SPACING = 2.0F; // ---- Sons UI (relatius a data/sounds/), portats d'aee_arcade ---- constexpr const char* SELECT_SOUND = "ui/menu_select.wav"; constexpr const char* ACCEPT_SOUND = "ui/menu_accept.wav"; } // namespace Defaults::ServiceMenu