diff --git a/source/resource.cpp b/source/resource.cpp index b84ac43..24d79a5 100644 --- a/source/resource.cpp +++ b/source/resource.cpp @@ -809,6 +809,23 @@ void Resource::renderProgress() { Lang::getText("[RESOURCE] LOADING") + " : " + loading_resource_name_, param.resource.color); + // Muestra información del monitor alineada con la barra de carga + loading_text_->writeColored( + X_PADDING, + Y_PADDING, + screen->getDisplayMonitorName(), + param.resource.color); + loading_text_->writeColored( + X_PADDING, + Y_PADDING + 9, + std::to_string(screen->getDisplayMonitorWidth()) + "x" + std::to_string(screen->getDisplayMonitorHeight()), + param.resource.color); + loading_text_->writeColored( + X_PADDING, + Y_PADDING + 18, + std::to_string(screen->getDisplayMonitorRefreshRate()) + "Hz", + param.resource.color); + // Renderiza el frame en pantalla screen->coreRender(); } @@ -844,9 +861,6 @@ void Resource::loadDemoDataQuiet() { // Inicializa los rectangulos que definen la barra de progreso void Resource::initProgressBar() { - constexpr float X_PADDING = 20.0F; - constexpr float Y_PADDING = 20.0F; - constexpr float BAR_HEIGHT = 10.0F; const float BAR_Y_POSITION = param.game.height - BAR_HEIGHT - Y_PADDING; const float WIRED_BAR_WIDTH = param.game.width - (X_PADDING * 2); diff --git a/source/resource.h b/source/resource.h index df3bb73..663f932 100644 --- a/source/resource.h +++ b/source/resource.h @@ -120,6 +120,11 @@ class Resource { } }; + // --- Constantes para la barra de progreso --- + static constexpr float X_PADDING = 20.0F; + static constexpr float Y_PADDING = 20.0F; + static constexpr float BAR_HEIGHT = 10.0F; + // --- Modo de carga --- LoadingMode loading_mode_; diff --git a/source/screen.cpp b/source/screen.cpp index 22356a9..b016c1d 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -86,10 +86,10 @@ void Screen::render() { // Vuelca el contenido del renderizador en pantalla exceptuando ciertas partes void Screen::coreRender() { - fps_.increment(); + /*fps_.increment(); #ifdef _DEBUG renderInfo(); -#endif +#endif*/ renderPresent(); // Renderiza el contenido del game_canvas_ } @@ -358,6 +358,13 @@ void Screen::getDisplayInfo() { const auto *dm = SDL_GetCurrentDisplayMode(displays[0]); + // Guarda información del monitor en display_monitor_ + const char *first_display_name = SDL_GetDisplayName(displays[0]); + display_monitor_.name = (first_display_name != nullptr) ? first_display_name : "Unknown"; + display_monitor_.width = static_cast(dm->w); + display_monitor_.height = static_cast(dm->h); + display_monitor_.refresh_rate = static_cast(dm->refresh_rate); + // Calcula el máximo factor de zoom que se puede aplicar a la pantalla Options::window.max_zoom = std::min(dm->w / param.game.width, dm->h / param.game.height); Options::window.zoom = std::min(Options::window.zoom, Options::window.max_zoom); diff --git a/source/screen.h b/source/screen.h index bda2c39..0a1a360 100644 --- a/source/screen.h +++ b/source/screen.h @@ -54,6 +54,12 @@ class Screen { [[nodiscard]] static auto getVSync() -> bool { return Options::video.vsync; } // Obtiene el valor de V-Sync [[nodiscard]] auto getText() const -> std::shared_ptr { return text_; } // Obtiene el puntero al texto de Screen + // --- Display Monitor getters --- + [[nodiscard]] auto getDisplayMonitorName() const -> std::string { return display_monitor_.name; } + [[nodiscard]] auto getDisplayMonitorWidth() const -> int { return display_monitor_.width; } + [[nodiscard]] auto getDisplayMonitorHeight() const -> int { return display_monitor_.height; } + [[nodiscard]] auto getDisplayMonitorRefreshRate() const -> int { return display_monitor_.refresh_rate; } + #ifdef _DEBUG // --- Debug --- void toggleDebugInfo() { debug_info_.show = !debug_info_.show; } @@ -65,6 +71,12 @@ class Screen { static constexpr int WINDOWS_DECORATIONS = 35; // Decoraciones de la ventana // --- Estructuras privadas --- + struct DisplayMonitor { + std::string name; + int width; + int height; + int refresh_rate; + }; struct FPS { Uint32 ticks{0}; // Tiempo en milisegundos desde que se comenzó a contar. int frame_count{0}; // Número acumulado de frames en el intervalo. @@ -206,6 +218,7 @@ class Screen { FlashEffect flash_effect_; // Efecto de flash en pantalla ShakeEffect shake_effect_; // Efecto de agitar la pantalla bool attenuate_effect_ = false; // Indica si la pantalla ha de estar atenuada + DisplayMonitor display_monitor_; // Información del monitor actual #ifdef _DEBUG Debug debug_info_; // Información de debug #endif @@ -218,7 +231,7 @@ class Screen { void renderPresent(); // Selecciona y ejecuta el método de renderizado adecuado void loadShaders(); // Carga el contenido del archivo GLSL void adjustWindowSize(); // Calcula el tamaño de la ventana - static void getDisplayInfo(); // Obtiene información sobre la pantalla + void getDisplayInfo(); // Obtiene información sobre la pantalla void renderOverlays(); // Renderiza todos los overlays y efectos void renderAttenuate(); // Atenúa la pantalla void createText(); // Crea el objeto de texto