#pragma once #include #include // Configuració del tema UI (índexs de paleta, timings, fonts i flags) // carregada des de data/ui.yaml. Cada camp s'inicialitza amb el valor // de Defaults::UI com a fallback: si el fitxer falta o li manca una // clau, el joc s'executa amb el tema compilat. // // Patró idèntic a Locale i KeyConfig: Meyers singleton + load(path). // No hi ha hot-reload — els canvis al YAML requereixen reiniciar. class UiConfig { public: struct Font { std::string name; std::string gif; std::string fnt; int kerning; }; static auto get() -> UiConfig&; UiConfig(const UiConfig&) = delete; UiConfig(UiConfig&&) = delete; auto operator=(const UiConfig&) -> UiConfig& = delete; auto operator=(UiConfig&&) -> UiConfig& = delete; void load(const std::string& file_path); // Colors — índexs sobre la paleta "ui" (Resource::Cache). [[nodiscard]] auto renderInfoText() const -> Uint8 { return render_info_text_; } [[nodiscard]] auto renderInfoShadow() const -> Uint8 { return render_info_shadow_; } [[nodiscard]] auto canvasBg() const -> Uint8 { return canvas_bg_; } [[nodiscard]] auto notificationText() const -> Uint8 { return notification_text_; } [[nodiscard]] auto notificationBg() const -> Uint8 { return notification_bg_; } [[nodiscard]] auto exitText() const -> Uint8 { return exit_text_; } [[nodiscard]] auto exitBg() const -> Uint8 { return exit_bg_; } [[nodiscard]] auto menuBg() const -> Uint8 { return menu_bg_; } [[nodiscard]] auto menuBorder() const -> Uint8 { return menu_border_; } [[nodiscard]] auto menuTitle() const -> Uint8 { return menu_title_; } [[nodiscard]] auto menuLabel() const -> Uint8 { return menu_label_; } [[nodiscard]] auto menuValue() const -> Uint8 { return menu_value_; } [[nodiscard]] auto menuCursor() const -> Uint8 { return menu_cursor_; } [[nodiscard]] auto menuDisabled() const -> Uint8 { return menu_disabled_; } [[nodiscard]] auto hudBg() const -> Uint8 { return hud_bg_; } [[nodiscard]] auto hudLabel() const -> Uint8 { return hud_label_; } [[nodiscard]] auto hudValue() const -> Uint8 { return hud_value_; } [[nodiscard]] auto hudFlash() const -> Uint8 { return hud_flash_; } // Timings (ms). [[nodiscard]] auto notificationMs() const -> int { return notification_ms_; } [[nodiscard]] auto exitMs() const -> int { return exit_ms_; } [[nodiscard]] auto hudEntryMs() const -> int { return hud_entry_ms_; } [[nodiscard]] auto hudFlashMs() const -> int { return hud_flash_ms_; } [[nodiscard]] auto hudShakeMs() const -> int { return hud_shake_ms_; } // Fonts de UI. [[nodiscard]] auto hudFont() const -> const Font& { return hud_font_; } [[nodiscard]] auto placeholderFont() const -> const Font& { return placeholder_font_; } [[nodiscard]] auto menuTitleFont() const -> const Font& { return menu_title_font_; } [[nodiscard]] auto menuItemsFont() const -> const Font& { return menu_items_font_; } // Flags visuals. [[nodiscard]] auto hudBgEnabled() const -> bool { return hud_bg_enabled_; } private: UiConfig(); ~UiConfig() = default; Uint8 render_info_text_; Uint8 render_info_shadow_; Uint8 canvas_bg_; Uint8 notification_text_; Uint8 notification_bg_; Uint8 exit_text_; Uint8 exit_bg_; Uint8 menu_bg_; Uint8 menu_border_; Uint8 menu_title_; Uint8 menu_label_; Uint8 menu_value_; Uint8 menu_cursor_; Uint8 menu_disabled_; Uint8 hud_bg_; Uint8 hud_label_; Uint8 hud_value_; Uint8 hud_flash_; int notification_ms_; int exit_ms_; int hud_entry_ms_; int hud_flash_ms_; int hud_shake_ms_; Font hud_font_; Font placeholder_font_; Font menu_title_font_; Font menu_items_font_; bool hud_bg_enabled_{false}; };