Resource: optimitzat i netejat el proces de càrrega
This commit is contained in:
@@ -101,7 +101,6 @@ void Director::init()
|
||||
bindInputs(); // Asigna los controles a la entrada del sistema
|
||||
ServiceMenu::init(); // Inicializa el menú de servicio
|
||||
Notifier::init(std::string(), Resource::get()->getText("8bithud")); // Inicialización del sistema de notificaciones
|
||||
|
||||
Screen::get()->getSingletons(); // Obtiene los punteros al resto de singletones
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -97,6 +97,7 @@ private:
|
||||
ResourceCount(size_t total) : total(total), loaded(0) {}
|
||||
|
||||
void add(size_t amount) { loaded += amount; }
|
||||
void increase() { loaded++; }
|
||||
float getPercentage() const
|
||||
{
|
||||
return total > 0 ? static_cast<float>(loaded) / static_cast<float>(total) : 0.0f;
|
||||
@@ -119,6 +120,8 @@ private:
|
||||
ResourceCount loading_count_; // Contador de recursos cargados
|
||||
std::shared_ptr<Text> loading_text_; // Texto para escribir en pantalla
|
||||
std::string loading_resource_name_; // Nombre del recurso que se está cargando
|
||||
SDL_FRect loading_wired_rect_;
|
||||
SDL_FRect loading_full_rect_;
|
||||
|
||||
// --- Métodos internos de carga y gestión ---
|
||||
void loadSounds(); // Carga los sonidos
|
||||
@@ -136,10 +139,12 @@ private:
|
||||
void clearMusics(); // Vacía el vector de músicas
|
||||
|
||||
// --- Métodos internos para gestionar el progreso ---
|
||||
void calculateTotal(); // Calcula el número de recursos para cargar
|
||||
void calculateTotalResources(); // Calcula el número de recursos para cargar
|
||||
void renderProgress(); // Muestra el progreso de carga
|
||||
void checkEvents(); // Comprueba los eventos durante la carga
|
||||
void updateLoadingProgress(std::string name); // Actualiza el progreso de carga
|
||||
void initProgressBar(); // Inicializa los rectangulos que definen la barra de progreso
|
||||
void updateProgressBar(); // Actualiza la barra de estado
|
||||
|
||||
// --- Constructores y destructor privados (singleton) ---
|
||||
Resource(); // Constructor privado
|
||||
|
||||
Reference in New Issue
Block a user