Resource: optimitzat i netejat el proces de càrrega

This commit is contained in:
2025-06-10 23:01:29 +02:00
parent 8741f9da58
commit e6f4e27fbd
3 changed files with 49 additions and 20 deletions

View File

@@ -42,8 +42,9 @@ void Resource::clear()
// Carga todos los recursos del juego y muestra el progreso de carga
void Resource::load()
{
// Calcula el total de recursos a cargar
calculateTotal();
// Prepara la gestión del progreso de carga
calculateTotalResources();
initProgressBar();
// Muerstra la ventana y desactiva el sincronismo vertical
auto screen = Screen::get();
@@ -402,7 +403,7 @@ void Resource::clearMusics()
}
// Calcula el número total de recursos a cargar y reinicia el contador de carga
void Resource::calculateTotal()
void Resource::calculateTotalResources()
{
const std::array<AssetType, 6> ASSET_TYPES = {
AssetType::SOUND,
@@ -427,30 +428,32 @@ void Resource::calculateTotal()
// Muestra el progreso de carga en pantalla (barra y texto)
void Resource::renderProgress()
{
// Obtiene la pantalla y el renderer
auto screen = Screen::get();
auto renderer = screen->getRenderer();
// Actualiza la lógica principal de la pantalla (input, etc.)
screen->coreUpdate();
constexpr float X_PADDING = 10.0f;
constexpr float Y_PADDING = 10.0f;
constexpr float BAR_HEIGHT = 10.0f;
const float BAR_Y_POSITION = param.game.height - BAR_HEIGHT - Y_PADDING;
// Inicia el frame y limpia la pantalla
screen->start();
screen->clean();
// Establece el color de dibujo a blanco
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
const float wired_bar_width = param.game.width - (X_PADDING * 2);
SDL_FRect rect_wired = {X_PADDING, BAR_Y_POSITION, wired_bar_width, X_PADDING};
SDL_RenderRect(renderer, &rect_wired);
// Dibuja la barra de progreso (marco y barra llena)
SDL_RenderRect(renderer, &loading_wired_rect_);
SDL_RenderFillRect(renderer, &loading_full_rect_);
const float full_bar_width = wired_bar_width * loading_count_.getPercentage();
SDL_FRect rect_full = {X_PADDING, BAR_Y_POSITION, full_bar_width, X_PADDING};
SDL_RenderFillRect(renderer, &rect_full);
loading_text_->write(X_PADDING, BAR_Y_POSITION - 9, "Loading : " + loading_resource_name_);
// Escribe el texto de carga encima de la barra
loading_text_->write(
loading_wired_rect_.x,
loading_wired_rect_.y - 9,
"Loading : " + loading_resource_name_
);
// Renderiza el frame en pantalla
screen->coreRender();
}
@@ -479,7 +482,29 @@ void Resource::checkEvents()
void Resource::updateLoadingProgress(std::string name)
{
loading_resource_name_ = name;
loading_count_.add(1);
loading_count_.increase();
updateProgressBar();
renderProgress();
checkEvents();
}
// 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);
loading_wired_rect_ = {X_PADDING, BAR_Y_POSITION, WIRED_BAR_WIDTH, BAR_HEIGHT};
const float FULL_BAR_WIDTH = WIRED_BAR_WIDTH * loading_count_.getPercentage();
loading_full_rect_ = {X_PADDING, BAR_Y_POSITION, FULL_BAR_WIDTH, BAR_HEIGHT};
}
// Actualiza la barra de estado
void Resource::updateProgressBar()
{
loading_full_rect_.w = loading_wired_rect_.w * loading_count_.getPercentage();
}