Resource: optimitzat i netejat el proces de càrrega
This commit is contained in:
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user