Resource: optimitzat i netejat el proces de càrrega
This commit is contained in:
@@ -101,8 +101,7 @@ void Director::init()
|
|||||||
bindInputs(); // Asigna los controles a la entrada del sistema
|
bindInputs(); // Asigna los controles a la entrada del sistema
|
||||||
ServiceMenu::init(); // Inicializa el menú de servicio
|
ServiceMenu::init(); // Inicializa el menú de servicio
|
||||||
Notifier::init(std::string(), Resource::get()->getText("8bithud")); // Inicialización del sistema de notificaciones
|
Notifier::init(std::string(), Resource::get()->getText("8bithud")); // Inicialización del sistema de notificaciones
|
||||||
|
Screen::get()->getSingletons(); // Obtiene los punteros al resto de singletones
|
||||||
Screen::get()->getSingletons(); // Obtiene los punteros al resto de singletones
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cierra todo y libera recursos del sistema y de los singletons
|
// Cierra todo y libera recursos del sistema y de los singletons
|
||||||
|
|||||||
@@ -42,8 +42,9 @@ void Resource::clear()
|
|||||||
// Carga todos los recursos del juego y muestra el progreso de carga
|
// Carga todos los recursos del juego y muestra el progreso de carga
|
||||||
void Resource::load()
|
void Resource::load()
|
||||||
{
|
{
|
||||||
// Calcula el total de recursos a cargar
|
// Prepara la gestión del progreso de carga
|
||||||
calculateTotal();
|
calculateTotalResources();
|
||||||
|
initProgressBar();
|
||||||
|
|
||||||
// Muerstra la ventana y desactiva el sincronismo vertical
|
// Muerstra la ventana y desactiva el sincronismo vertical
|
||||||
auto screen = Screen::get();
|
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
|
// 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 = {
|
const std::array<AssetType, 6> ASSET_TYPES = {
|
||||||
AssetType::SOUND,
|
AssetType::SOUND,
|
||||||
@@ -427,30 +428,32 @@ void Resource::calculateTotal()
|
|||||||
// Muestra el progreso de carga en pantalla (barra y texto)
|
// Muestra el progreso de carga en pantalla (barra y texto)
|
||||||
void Resource::renderProgress()
|
void Resource::renderProgress()
|
||||||
{
|
{
|
||||||
|
// Obtiene la pantalla y el renderer
|
||||||
auto screen = Screen::get();
|
auto screen = Screen::get();
|
||||||
auto renderer = screen->getRenderer();
|
auto renderer = screen->getRenderer();
|
||||||
|
|
||||||
|
// Actualiza la lógica principal de la pantalla (input, etc.)
|
||||||
screen->coreUpdate();
|
screen->coreUpdate();
|
||||||
|
|
||||||
constexpr float X_PADDING = 10.0f;
|
// Inicia el frame y limpia la pantalla
|
||||||
constexpr float Y_PADDING = 10.0f;
|
|
||||||
constexpr float BAR_HEIGHT = 10.0f;
|
|
||||||
const float BAR_Y_POSITION = param.game.height - BAR_HEIGHT - Y_PADDING;
|
|
||||||
|
|
||||||
screen->start();
|
screen->start();
|
||||||
screen->clean();
|
screen->clean();
|
||||||
|
|
||||||
|
// Establece el color de dibujo a blanco
|
||||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
||||||
|
|
||||||
const float wired_bar_width = param.game.width - (X_PADDING * 2);
|
// Dibuja la barra de progreso (marco y barra llena)
|
||||||
SDL_FRect rect_wired = {X_PADDING, BAR_Y_POSITION, wired_bar_width, X_PADDING};
|
SDL_RenderRect(renderer, &loading_wired_rect_);
|
||||||
SDL_RenderRect(renderer, &rect_wired);
|
SDL_RenderFillRect(renderer, &loading_full_rect_);
|
||||||
|
|
||||||
const float full_bar_width = wired_bar_width * loading_count_.getPercentage();
|
// Escribe el texto de carga encima de la barra
|
||||||
SDL_FRect rect_full = {X_PADDING, BAR_Y_POSITION, full_bar_width, X_PADDING};
|
loading_text_->write(
|
||||||
SDL_RenderFillRect(renderer, &rect_full);
|
loading_wired_rect_.x,
|
||||||
|
loading_wired_rect_.y - 9,
|
||||||
loading_text_->write(X_PADDING, BAR_Y_POSITION - 9, "Loading : " + loading_resource_name_);
|
"Loading : " + loading_resource_name_
|
||||||
|
);
|
||||||
|
|
||||||
|
// Renderiza el frame en pantalla
|
||||||
screen->coreRender();
|
screen->coreRender();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,7 +482,29 @@ void Resource::checkEvents()
|
|||||||
void Resource::updateLoadingProgress(std::string name)
|
void Resource::updateLoadingProgress(std::string name)
|
||||||
{
|
{
|
||||||
loading_resource_name_ = name;
|
loading_resource_name_ = name;
|
||||||
loading_count_.add(1);
|
loading_count_.increase();
|
||||||
|
updateProgressBar();
|
||||||
renderProgress();
|
renderProgress();
|
||||||
checkEvents();
|
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) {}
|
ResourceCount(size_t total) : total(total), loaded(0) {}
|
||||||
|
|
||||||
void add(size_t amount) { loaded += amount; }
|
void add(size_t amount) { loaded += amount; }
|
||||||
|
void increase() { loaded++; }
|
||||||
float getPercentage() const
|
float getPercentage() const
|
||||||
{
|
{
|
||||||
return total > 0 ? static_cast<float>(loaded) / static_cast<float>(total) : 0.0f;
|
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
|
ResourceCount loading_count_; // Contador de recursos cargados
|
||||||
std::shared_ptr<Text> loading_text_; // Texto para escribir en pantalla
|
std::shared_ptr<Text> loading_text_; // Texto para escribir en pantalla
|
||||||
std::string loading_resource_name_; // Nombre del recurso que se está cargando
|
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 ---
|
// --- Métodos internos de carga y gestión ---
|
||||||
void loadSounds(); // Carga los sonidos
|
void loadSounds(); // Carga los sonidos
|
||||||
@@ -136,10 +139,12 @@ private:
|
|||||||
void clearMusics(); // Vacía el vector de músicas
|
void clearMusics(); // Vacía el vector de músicas
|
||||||
|
|
||||||
// --- Métodos internos para gestionar el progreso ---
|
// --- 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 renderProgress(); // Muestra el progreso de carga
|
||||||
void checkEvents(); // Comprueba los eventos durante la carga
|
void checkEvents(); // Comprueba los eventos durante la carga
|
||||||
void updateLoadingProgress(std::string name); // Actualiza el progreso de 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) ---
|
// --- Constructores y destructor privados (singleton) ---
|
||||||
Resource(); // Constructor privado
|
Resource(); // Constructor privado
|
||||||
|
|||||||
Reference in New Issue
Block a user