sdl_callbacks

This commit is contained in:
2026-04-14 12:21:00 +02:00
parent c0accd25e2
commit f5da35bfb2
20 changed files with 406 additions and 177 deletions

View File

@@ -467,10 +467,10 @@ void Resource::reload() {
// Carga los sonidos del juego
void Resource::loadSounds() {
Logger::info("SOUND FILES");
auto list = Asset::get()->getListByType(Asset::Type::SOUND);
sounds_.clear();
int failed = 0;
for (const auto& l : list) {
auto name = getFileName(l);
updateLoadingProgress(name);
@@ -479,21 +479,23 @@ void Resource::loadSounds() {
if (!audio_data.data.empty()) {
sound = JA_LoadSound(audio_data.data.data(), audio_data.data.size());
} else {
// Fallback a cargar desde disco si no está en pack
sound = JA_LoadSound(l.c_str());
}
if (sound == nullptr) {
Logger::error(" Sound load failed: " + name);
++failed;
}
sounds_.emplace_back(name, sound);
Logger::dots("Sound : ", name, "[ LOADED ]");
}
Logger::info("Sounds loaded: " + std::to_string(list.size() - failed) + "/" + std::to_string(list.size()));
}
// Carga las músicas del juego
void Resource::loadMusics() {
Logger::cr();
Logger::info("MUSIC FILES");
auto list = Asset::get()->getListByType(Asset::Type::MUSIC);
musics_.clear();
int failed = 0;
for (const auto& l : list) {
auto name = getFileName(l);
updateLoadingProgress(name);
@@ -502,18 +504,19 @@ void Resource::loadMusics() {
if (!audio_data.data.empty()) {
music = JA_LoadMusic(audio_data.data.data(), audio_data.data.size());
} else {
// Fallback a cargar desde disco si no está en pack
music = JA_LoadMusic(l.c_str());
}
if (music == nullptr) {
Logger::error(" Music load failed: " + name);
++failed;
}
musics_.emplace_back(name, music);
Logger::dots("Music : ", name, "[ LOADED ]");
}
Logger::info("Musics loaded: " + std::to_string(list.size() - failed) + "/" + std::to_string(list.size()));
}
// Carga las texturas del juego
void Resource::loadTextures() {
Logger::cr();
Logger::info("TEXTURES");
auto list = Asset::get()->getListByType(Asset::Type::BITMAP);
textures_.clear();
@@ -522,12 +525,11 @@ void Resource::loadTextures() {
updateLoadingProgress(name);
textures_.emplace_back(name, std::make_shared<Texture>(Screen::get()->getRenderer(), l));
}
Logger::info("Textures loaded: " + std::to_string(list.size()));
}
// Carga los ficheros de texto del juego
void Resource::loadTextFiles() {
Logger::cr();
Logger::info("TEXT FILES");
auto list = Asset::get()->getListByType(Asset::Type::FONT);
text_files_.clear();
@@ -536,12 +538,11 @@ void Resource::loadTextFiles() {
updateLoadingProgress(name);
text_files_.emplace_back(name, Text::loadFile(l));
}
Logger::info("Text files loaded: " + std::to_string(list.size()));
}
// Carga las animaciones del juego
void Resource::loadAnimations() {
Logger::cr();
Logger::info("ANIMATIONS");
auto list = Asset::get()->getListByType(Asset::Type::ANIMATION);
animations_.clear();
@@ -550,12 +551,11 @@ void Resource::loadAnimations() {
updateLoadingProgress(name);
animations_.emplace_back(name, loadAnimationsFromFile(l));
}
Logger::info("Animations loaded: " + std::to_string(list.size()));
}
// Carga los datos para el modo demostración
void Resource::loadDemoData() {
Logger::cr();
Logger::info("DEMO FILES");
auto list = Asset::get()->getListByType(Asset::Type::DEMODATA);
demos_.clear();
@@ -564,13 +564,11 @@ void Resource::loadDemoData() {
updateLoadingProgress(name);
demos_.emplace_back(loadDemoDataFromFile(l));
}
Logger::info("Demo files loaded: " + std::to_string(list.size()));
}
// Crea las texturas de jugadores con todas sus variantes de paleta
void Resource::createPlayerTextures() {
Logger::cr();
Logger::info("CREATING PLAYER TEXTURES");
// Configuración de jugadores y sus paletas
struct PlayerConfig {
std::string base_texture;
@@ -641,9 +639,9 @@ void Resource::createPlayerTextures() {
// Guardar con nombre específico
std::string texture_name = player.name_prefix + "_pal" + std::to_string(palette_idx);
textures_.emplace_back(texture_name, texture);
Logger::dots("Player Texture : ", texture_name, "[ DONE ]");
}
}
Logger::info("Player textures created: " + std::to_string(players.size() * 4));
}
// Crea texturas a partir de textos para mostrar puntuaciones y mensajes
@@ -657,9 +655,6 @@ void Resource::createTextTextures() {
text(std::move(text_init)) {}
};
Logger::cr();
Logger::info("CREATING TEXTURES");
// Texturas de tamaño normal con outline
std::vector<NameAndText> strings1 = {
{"game_text_1000_points", "1.000"},
@@ -673,7 +668,6 @@ void Resource::createTextTextures() {
auto text1 = getText("04b_25_enhanced");
for (const auto& s : strings1) {
textures_.emplace_back(s.name, text1->writeDXToTexture(Text::STROKE, s.text, -2, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color));
Logger::dots("Texture : ", s.name, "[ DONE ]");
}
// Texturas de tamaño doble
@@ -688,8 +682,9 @@ void Resource::createTextTextures() {
auto text2 = getText("04b_25_2x_enhanced");
for (const auto& s : strings2) {
textures_.emplace_back(s.name, text2->writeDXToTexture(Text::STROKE, s.text, -4, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color));
Logger::dots("Texture : ", s.name, "[ DONE ]");
}
Logger::info("Text textures created: " + std::to_string(strings1.size() + strings2.size()));
}
// Crea los objetos de texto a partir de los archivos de textura y texto
@@ -707,9 +702,6 @@ void Resource::createText() {
white_texture_file(std::move(w_file)) {}
};
Logger::cr();
Logger::info("CREATING TEXT OBJECTS");
std::vector<ResourceInfo> resources = {
{"04b_25", "04b_25.png", "04b_25.txt"},
{"04b_25_enhanced", "04b_25.png", "04b_25.txt", "04b_25_white.png"}, // Nueva fuente con textura blanca
@@ -735,8 +727,8 @@ void Resource::createText() {
// Crear texto normal
texts_.emplace_back(resource.key, std::make_shared<Text>(getTexture(resource.texture_file), getTextFile(resource.text_file)));
}
Logger::dots("Text : ", resource.key, "[ DONE ]");
}
Logger::info("Text objects created: " + std::to_string(resources.size()));
}
// Vacía el vector de sonidos y libera la memoria asociada
@@ -853,23 +845,6 @@ void Resource::renderProgress() {
screen->coreRender();
}
// Comprueba los eventos durante la carga (permite salir con ESC o cerrar ventana)
void Resource::checkEvents() {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_EVENT_QUIT:
exit(0);
break;
case SDL_EVENT_KEY_DOWN:
if (event.key.key == SDLK_ESCAPE) {
exit(0);
}
break;
}
}
}
// Carga los datos para el modo demostración (sin mostrar progreso)
void Resource::loadDemoDataQuiet() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> DEMO FILES (quiet load)");
@@ -892,13 +867,12 @@ void Resource::initProgressBar() {
loading_full_rect_ = {.x = X_PADDING, .y = BAR_Y_POSITION, .w = FULL_BAR_WIDTH, .h = BAR_HEIGHT};
}
// Actualiza el progreso de carga, muestra la barra y procesa eventos
// Actualiza el progreso de carga y muestra la barra
void Resource::updateLoadingProgress(std::string name) {
loading_resource_name_ = std::move(name);
loading_count_.increase();
updateProgressBar();
renderProgress();
checkEvents();
}
// Actualiza la barra de estado