afegit el namespace Logger

This commit is contained in:
2025-10-19 18:10:55 +02:00
parent df6e7e5155
commit 413c3c30a6
17 changed files with 107 additions and 96 deletions

View File

@@ -12,6 +12,7 @@
#include "resource_helper.hpp" // Para ResourceHelper #include "resource_helper.hpp" // Para ResourceHelper
#include "texture.hpp" // Para Texture #include "texture.hpp" // Para Texture
#include "utils.hpp" // Para printWithDots #include "utils.hpp" // Para printWithDots
#include "ui/logger.hpp"
// Carga las animaciones en un vector(Animations) desde un fichero // Carga las animaciones en un vector(Animations) desde un fichero
auto loadAnimationsFromFile(const std::string& file_path) -> AnimationsFileBuffer { auto loadAnimationsFromFile(const std::string& file_path) -> AnimationsFileBuffer {
@@ -38,7 +39,7 @@ auto loadAnimationsFromFile(const std::string& file_path) -> AnimationsFileBuffe
std::istream& input_stream = using_resource_data ? stream : static_cast<std::istream&>(file); std::istream& input_stream = using_resource_data ? stream : static_cast<std::istream&>(file);
printWithDots("Animation : ", file_path.substr(file_path.find_last_of("\\/") + 1), "[ LOADED ]"); Logger::dots("Animation : ", file_path.substr(file_path.find_last_of("\\/") + 1), "[ LOADED ]");
std::vector<std::string> buffer; std::vector<std::string> buffer;
std::string line; std::string line;

View File

@@ -49,7 +49,6 @@ void Asset::add(const std::string& file_path, Type type, bool required, bool abs
addToMap(file_path, type, required, absolute); addToMap(file_path, type, required, absolute);
} }
// Carga recursos desde un archivo de configuración con soporte para variables
// Carga recursos desde un archivo de configuración con soporte para variables // Carga recursos desde un archivo de configuración con soporte para variables
void Asset::loadFromFile(const std::string& config_file_path, const std::string& prefix, const std::string& system_folder) { void Asset::loadFromFile(const std::string& config_file_path, const std::string& prefix, const std::string& system_folder) {
std::ifstream file(config_file_path); std::ifstream file(config_file_path);
@@ -125,10 +124,7 @@ void Asset::loadFromFile(const std::string& config_file_path, const std::string&
} }
} }
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, std::cout << "Loaded " << file_list_.size() << " assets from config file" << std::endl;
"Loaded %d assets from config file",
static_cast<int>(file_list_.size()));
file.close(); file.close();
} }
@@ -180,9 +176,7 @@ auto Asset::check() const -> bool {
Type asset_type = static_cast<Type>(type); Type asset_type = static_cast<Type>(type);
if (by_type.find(asset_type) != by_type.end()) { if (by_type.find(asset_type) != by_type.end()) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, Logger::info(getTypeName(asset_type) + " FILES");
"\n>> %s FILES",
getTypeName(asset_type).c_str());
bool type_success = true; bool type_success = true;
for (const auto* item : by_type[asset_type]) { for (const auto* item : by_type[asset_type]) {
@@ -193,18 +187,10 @@ auto Asset::check() const -> bool {
} }
if (type_success) { if (type_success) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, " All files are OK."); Logger::info("All files are OK.\n");
} }
} }
} }
// Resultado
if (success) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** CHECKING FILES COMPLETED.\n");
} else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "\n** CHECKING FILES FAILED.\n");
}
return success; return success;
} }

View File

@@ -7,6 +7,7 @@
#include "external/jail_audio.h" // Para JA_FadeOutMusic, JA_Init, JA_PauseM... #include "external/jail_audio.h" // Para JA_FadeOutMusic, JA_Init, JA_PauseM...
#include "options.hpp" // Para AudioOptions, audio, MusicOptions #include "options.hpp" // Para AudioOptions, audio, MusicOptions
#include "resource.hpp" // Para Resource #include "resource.hpp" // Para Resource
#include "ui/logger.hpp" // Para logger
// Singleton // Singleton
Audio* Audio::instance = nullptr; Audio* Audio::instance = nullptr;
@@ -144,6 +145,6 @@ void Audio::initSDLAudio() {
JA_Init(FREQUENCY, SDL_AUDIO_S16LE, 2); JA_Init(FREQUENCY, SDL_AUDIO_S16LE, 2);
enable(Options::audio.enabled); enable(Options::audio.enabled);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "** Audio system initialized successfully"); Logger::info("Audio system initialized successfully");
} }
} }

View File

@@ -6,6 +6,7 @@
#include "resource_helper.hpp" // Para ResourceHelper #include "resource_helper.hpp" // Para ResourceHelper
#include "utils.hpp" // Para printWithDots, getFileName #include "utils.hpp" // Para printWithDots, getFileName
#include "ui/logger.hpp"
// Carga el fichero de datos para la demo // Carga el fichero de datos para la demo
auto loadDemoDataFromFile(const std::string& file_path) -> DemoData { auto loadDemoDataFromFile(const std::string& file_path) -> DemoData {
@@ -26,7 +27,7 @@ auto loadDemoDataFromFile(const std::string& file_path) -> DemoData {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: Fichero no encontrado %s", file_path.c_str()); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: Fichero no encontrado %s", file_path.c_str());
throw std::runtime_error("Fichero no encontrado: " + file_path); throw std::runtime_error("Fichero no encontrado: " + file_path);
} }
printWithDots("DemoData : ", getFileName(file_path), "[ LOADED ]"); Logger::dots("DemoData : ", getFileName(file_path), "[ LOADED ]");
// Lee todos los datos del fichero y los deja en el destino // Lee todos los datos del fichero y los deja en el destino
for (int i = 0; i < TOTAL_DEMO_DATA; ++i) { for (int i = 0; i < TOTAL_DEMO_DATA; ++i) {

View File

@@ -35,6 +35,7 @@
#include "ui/notifier.hpp" // Para Notifier #include "ui/notifier.hpp" // Para Notifier
#include "ui/service_menu.hpp" // Para ServiceMenu #include "ui/service_menu.hpp" // Para ServiceMenu
#include "utils.hpp" // Para Overrides, overrides, getPath #include "utils.hpp" // Para Overrides, overrides, getPath
#include "ui/logger.hpp"
// Constructor // Constructor
Director::Director(int argc, std::span<char*> argv) { Director::Director(int argc, std::span<char*> argv) {
@@ -54,7 +55,7 @@ Director::Director(int argc, std::span<char*> argv) {
SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
SDL_SetLogPriority(SDL_LOG_CATEGORY_TEST, SDL_LOG_PRIORITY_ERROR); SDL_SetLogPriority(SDL_LOG_CATEGORY_TEST, SDL_LOG_PRIORITY_ERROR);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Game start"); Logger::put("Game start\n");
// Inicia la semilla aleatoria usando el tiempo actual en segundos // Inicia la semilla aleatoria usando el tiempo actual en segundos
std::srand(static_cast<unsigned int>(std::time(nullptr))); std::srand(static_cast<unsigned int>(std::time(nullptr)));
@@ -71,7 +72,7 @@ Director::Director(int argc, std::span<char*> argv) {
Director::~Director() { Director::~Director() {
close(); close();
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nBye!"); Logger::put("\nBye!");
} }
// Inicializa todo // Inicializa todo
@@ -85,17 +86,28 @@ void Director::init() {
ResourceHelper::initializeResourceSystem(executable_path_ + "resources.pack"); ResourceHelper::initializeResourceSystem(executable_path_ + "resources.pack");
#endif #endif
loadAssets(); // Crea el índice de archivos loadAssets(); // Crea el índice de archivos
Logger::section("INIT INPUT");
Input::init(Asset::get()->get("gamecontrollerdb.txt"), Asset::get()->get("controllers.json")); // Carga configuración de controles Input::init(Asset::get()->get("gamecontrollerdb.txt"), Asset::get()->get("controllers.json")); // Carga configuración de controles
Logger::section("INIT CONFIG");
Options::setConfigFile(Asset::get()->get("config_v2.txt")); // Establece el fichero de configuración Options::setConfigFile(Asset::get()->get("config_v2.txt")); // Establece el fichero de configuración
Options::setControllersFile(Asset::get()->get("controllers.json")); // Establece el fichero de configuración de mandos Options::setControllersFile(Asset::get()->get("controllers.json")); // Establece el fichero de configuración de mandos
Options::loadFromFile(); // Carga el archivo de configuración Options::loadFromFile(); // Carga el archivo de configuración
loadParams(); // Carga los parámetros del programa loadParams(); // Carga los parámetros del programa
loadScoreFile(); // Carga el archivo de puntuaciones loadScoreFile(); // Carga el archivo de puntuaciones
// Inicialización de subsistemas principales // Inicialización de subsistemas principales
Lang::setLanguage(Options::settings.language); // Carga el archivo de idioma Lang::setLanguage(Options::settings.language); // Carga el archivo de idioma
Logger::section("INIT VIDEO");
Screen::init(); // Inicializa la pantalla y el sistema de renderizado Screen::init(); // Inicializa la pantalla y el sistema de renderizado
Logger::section("INIT AUDIO");
Audio::init(); // Activa el sistema de audio Audio::init(); // Activa el sistema de audio
Logger::section("INIT RESOURCES");
#ifdef _DEBUG #ifdef _DEBUG
Resource::init(Resource::LoadingMode::PRELOAD); // Inicializa el sistema de gestión de recursos Resource::init(Resource::LoadingMode::PRELOAD); // Inicializa el sistema de gestión de recursos
#else #else
@@ -104,6 +116,8 @@ void Director::init() {
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
Logger::section("GAME LOG");
} }
// Cierra todo y libera recursos del sistema y de los singletons // Cierra todo y libera recursos del sistema y de los singletons
@@ -164,7 +178,7 @@ void Director::loadAssets() {
std::string config_path = executable_path_ + PREFIX + "/config/assets.txt"; std::string config_path = executable_path_ + PREFIX + "/config/assets.txt";
Asset::get()->loadFromFile(config_path, PREFIX, system_folder_); Asset::get()->loadFromFile(config_path, PREFIX, system_folder_);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Assets configuration loaded successfully"); Logger::put("Assets configuration loaded successfully");
// Si falta algun fichero, sale del programa // Si falta algun fichero, sale del programa
if (!Asset::get()->check()) { if (!Asset::get()->check()) {

View File

@@ -118,21 +118,16 @@ void JA_Init(const int freq, const SDL_AudioFormat format, const int num_channel
SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG); SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG);
#endif #endif
SDL_Log("Iniciant JailAudio...");
JA_audioSpec = {format, num_channels, freq }; JA_audioSpec = {format, num_channels, freq };
if (!sdlAudioDevice) SDL_CloseAudioDevice(sdlAudioDevice); if (!sdlAudioDevice) SDL_CloseAudioDevice(sdlAudioDevice);
sdlAudioDevice = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &JA_audioSpec); sdlAudioDevice = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &JA_audioSpec);
SDL_Log( (sdlAudioDevice==0) ? "Failed to initialize SDL audio!\n" : "OK!\n"); if (sdlAudioDevice==0) SDL_Log("Failed to initialize SDL audio!");
for (int i=0; i<JA_MAX_SIMULTANEOUS_CHANNELS; ++i) channels[i].state = JA_CHANNEL_FREE; for (int i=0; i<JA_MAX_SIMULTANEOUS_CHANNELS; ++i) channels[i].state = JA_CHANNEL_FREE;
for (int i=0; i<JA_MAX_GROUPS; ++i) JA_soundVolume[i] = 0.5f; for (int i=0; i<JA_MAX_GROUPS; ++i) JA_soundVolume[i] = 0.5f;
//SDL_PauseAudioDevice(sdlAudioDevice);
//JA_timerID = SDL_AddTimer(30, JA_UpdateCallback, nullptr);
} }
void JA_Quit() void JA_Quit()
{ {
//if (JA_timerID) SDL_RemoveTimer(JA_timerID);
if (!sdlAudioDevice) SDL_CloseAudioDevice(sdlAudioDevice); if (!sdlAudioDevice) SDL_CloseAudioDevice(sdlAudioDevice);
sdlAudioDevice = 0; sdlAudioDevice = 0;
} }

View File

@@ -7,6 +7,7 @@
#include <memory> // Para shared_ptr, __shared_ptr_access, allocator, operator==, make_shared #include <memory> // Para shared_ptr, __shared_ptr_access, allocator, operator==, make_shared
#include <unordered_map> // Para unordered_map, operator==, _Node_iterator_base, _Node_iterator, _Node_const_iterator #include <unordered_map> // Para unordered_map, operator==, _Node_iterator_base, _Node_iterator, _Node_const_iterator
#include <utility> // Para pair, move #include <utility> // Para pair, move
#include "ui/logger.hpp"
// Singleton // Singleton
Input* Input::instance = nullptr; Input* Input::instance = nullptr;
@@ -318,7 +319,7 @@ void Input::initSDLGamePad() {
addGamepadMappingsFromFile(); addGamepadMappingsFromFile();
loadGamepadConfigs(); loadGamepadConfigs();
discoverGamepads(); discoverGamepads();
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "** Input System initialized successfully\n"); Logger::info("Input System initialized successfully");
} }
} }
} }

View File

@@ -6,6 +6,7 @@
#include <iterator> // Para distance #include <iterator> // Para distance
#include "utils.hpp" // Para getFileName #include "utils.hpp" // Para getFileName
#include "ui/logger.hpp"
// Resetea la tabla a los valores por defecto // Resetea la tabla a los valores por defecto
void ManageHiScoreTable::clear() { void ManageHiScoreTable::clear() {
@@ -169,7 +170,8 @@ auto ManageHiScoreTable::saveToFile(const std::string& file_path) -> bool {
SDL_WriteIO(file, &occ_value, sizeof(int)); SDL_WriteIO(file, &occ_value, sizeof(int));
} }
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Writing file: %s", getFileName(file_path).c_str()); //SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Writing file: %s", getFileName(file_path).c_str());
Logger::info("Writing file: " + getFileName(file_path));
SDL_CloseIO(file); SDL_CloseIO(file);
} else { } else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: Unable to save %s file! %s", getFileName(file_path).c_str(), SDL_GetError()); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: Unable to save %s file! %s", getFileName(file_path).c_str(), SDL_GetError());

View File

@@ -17,6 +17,7 @@
#include "difficulty.hpp" // Para Code, init #include "difficulty.hpp" // Para Code, init
#include "input.hpp" // Para InputDevice #include "input.hpp" // Para InputDevice
#include "lang.hpp" // Para Code #include "lang.hpp" // Para Code
#include "ui/logger.hpp" // Para Logger
#include "utils.hpp" // Para boolToString, stringToBool, getFileName #include "utils.hpp" // Para boolToString, stringToBool, getFileName
namespace Options { namespace Options {
@@ -64,7 +65,8 @@ auto loadFromFile() -> bool {
// 2. Si el fichero existe, lo leemos para obtener los nombres de los mandos. // 2. Si el fichero existe, lo leemos para obtener los nombres de los mandos.
if (file_exists) { if (file_exists) {
// --- CASO: EL FICHERO EXISTE --- // --- CASO: EL FICHERO EXISTE ---
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nReading file: %s", getFileName(settings.config_file).c_str()); // SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nReading file: %s", getFileName(settings.config_file).c_str());
Logger::info("Reading file: " + getFileName(settings.config_file));
std::string line; std::string line;
std::string param_name; std::string param_name;
std::string param_value; std::string param_value;
@@ -114,7 +116,8 @@ auto saveToFile() -> bool {
return false; return false;
} }
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Writing file: %s", getFileName(settings.config_file).c_str()); //SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Writing file: %s", getFileName(settings.config_file).c_str());
Logger::info("Writing file: " + getFileName(settings.config_file));
applyPendingChanges(); applyPendingChanges();

View File

@@ -12,6 +12,7 @@
#include "color.hpp" #include "color.hpp"
#include "ui/notifier.hpp" // Para Notifier::Position #include "ui/notifier.hpp" // Para Notifier::Position
#include "utils.hpp" #include "utils.hpp"
#include "ui/logger.hpp" // Para Logger
// Variable global - ahora se inicializa automáticamente con valores por defecto // Variable global - ahora se inicializa automáticamente con valores por defecto
Param param; Param param;
@@ -52,7 +53,8 @@ void loadParamsFromFile(const std::string& file_path) {
throw std::runtime_error("No se pudo abrir el archivo: " + file_path); throw std::runtime_error("No se pudo abrir el archivo: " + file_path);
} }
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nReading file: %s", getFileName(file_path).c_str()); //SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nReading file: %s", getFileName(file_path).c_str());
Logger::info("Reading file: " + getFileName(file_path));
std::string line; std::string line;
std::string param_name; std::string param_name;
@@ -69,7 +71,7 @@ void loadParamsFromFile(const std::string& file_path) {
std::istringstream iss(line); std::istringstream iss(line);
if (iss >> param_name >> param_value) { if (iss >> param_name >> param_value) {
if (!setParams(param_name, param_value)) { if (!setParams(param_name, param_value)) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "Parámetro desconocido: %s", param_name.c_str()); Logger::info("WARNING: Parámetro desconocido: " + param_name, Logger::YELLOW);
} }
} }
} }

View File

@@ -19,6 +19,7 @@
#include "screen.hpp" // Para Screen #include "screen.hpp" // Para Screen
#include "text.hpp" // Para Text #include "text.hpp" // Para Text
#include "version.h" // Para Version::APP_NAME y Version::GIT_HASH #include "version.h" // Para Version::APP_NAME y Version::GIT_HASH
#include "ui/logger.hpp" // Para Logger
struct JA_Music_t; // lines 11-11 struct JA_Music_t; // lines 11-11
struct JA_Sound_t; // lines 12-12 struct JA_Sound_t; // lines 12-12
@@ -445,7 +446,7 @@ void Resource::load() {
auto vsync = Screen::getVSync(); auto vsync = Screen::getVSync();
screen->setVSync(false); screen->setVSync(false);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** LOADING RESOURCES"); //SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** LOADING RESOURCES");
loadSounds(); // Carga sonidos loadSounds(); // Carga sonidos
loadMusics(); // Carga músicas loadMusics(); // Carga músicas
loadTextures(); // Carga texturas loadTextures(); // Carga texturas
@@ -455,7 +456,7 @@ void Resource::load() {
createText(); // Crea objetos de texto createText(); // Crea objetos de texto
createTextTextures(); // Crea texturas a partir de texto createTextTextures(); // Crea texturas a partir de texto
createPlayerTextures(); // Crea las texturas de jugadores con todas sus variantes de paleta createPlayerTextures(); // Crea las texturas de jugadores con todas sus variantes de paleta
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** RESOURCES LOADED"); //SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** RESOURCES LOADED");
// Restablece el sincronismo vertical a su valor original // Restablece el sincronismo vertical a su valor original
screen->setVSync(vsync); screen->setVSync(vsync);
@@ -473,7 +474,7 @@ void Resource::reload() {
// Carga los sonidos del juego // Carga los sonidos del juego
void Resource::loadSounds() { void Resource::loadSounds() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> SOUND FILES"); Logger::info("SOUND FILES");
auto list = Asset::get()->getListByType(Asset::Type::SOUND); auto list = Asset::get()->getListByType(Asset::Type::SOUND);
sounds_.clear(); sounds_.clear();
@@ -482,13 +483,14 @@ void Resource::loadSounds() {
updateLoadingProgress(name); updateLoadingProgress(name);
std::string audio_path = createTempAudioFile(l, temp_audio_files_); std::string audio_path = createTempAudioFile(l, temp_audio_files_);
sounds_.emplace_back(name, JA_LoadSound(audio_path.c_str())); sounds_.emplace_back(name, JA_LoadSound(audio_path.c_str()));
printWithDots("Sound : ", name, "[ LOADED ]"); Logger::dots("Sound : ", name, "[ LOADED ]");
} }
} }
// Carga las músicas del juego // Carga las músicas del juego
void Resource::loadMusics() { void Resource::loadMusics() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> MUSIC FILES"); Logger::CR();
Logger::info("MUSIC FILES");
auto list = Asset::get()->getListByType(Asset::Type::MUSIC); auto list = Asset::get()->getListByType(Asset::Type::MUSIC);
musics_.clear(); musics_.clear();
@@ -497,13 +499,14 @@ void Resource::loadMusics() {
updateLoadingProgress(name); updateLoadingProgress(name);
std::string audio_path = createTempAudioFile(l, temp_audio_files_); std::string audio_path = createTempAudioFile(l, temp_audio_files_);
musics_.emplace_back(name, JA_LoadMusic(audio_path.c_str())); musics_.emplace_back(name, JA_LoadMusic(audio_path.c_str()));
printWithDots("Music : ", name, "[ LOADED ]"); Logger::dots("Music : ", name, "[ LOADED ]");
} }
} }
// Carga las texturas del juego // Carga las texturas del juego
void Resource::loadTextures() { void Resource::loadTextures() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> TEXTURES"); Logger::CR();
Logger::info("TEXTURES");
auto list = Asset::get()->getListByType(Asset::Type::BITMAP); auto list = Asset::get()->getListByType(Asset::Type::BITMAP);
textures_.clear(); textures_.clear();
@@ -516,7 +519,8 @@ void Resource::loadTextures() {
// Carga los ficheros de texto del juego // Carga los ficheros de texto del juego
void Resource::loadTextFiles() { void Resource::loadTextFiles() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> TEXT FILES"); Logger::CR();
Logger::info("TEXT FILES");
auto list = Asset::get()->getListByType(Asset::Type::FONT); auto list = Asset::get()->getListByType(Asset::Type::FONT);
text_files_.clear(); text_files_.clear();
@@ -529,7 +533,8 @@ void Resource::loadTextFiles() {
// Carga las animaciones del juego // Carga las animaciones del juego
void Resource::loadAnimations() { void Resource::loadAnimations() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> ANIMATIONS"); Logger::CR();
Logger::info("ANIMATIONS");
auto list = Asset::get()->getListByType(Asset::Type::ANIMATION); auto list = Asset::get()->getListByType(Asset::Type::ANIMATION);
animations_.clear(); animations_.clear();
@@ -542,7 +547,8 @@ void Resource::loadAnimations() {
// Carga los datos para el modo demostración // Carga los datos para el modo demostración
void Resource::loadDemoData() { void Resource::loadDemoData() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> DEMO FILES"); Logger::CR();
Logger::info("DEMO FILES");
auto list = Asset::get()->getListByType(Asset::Type::DEMODATA); auto list = Asset::get()->getListByType(Asset::Type::DEMODATA);
demos_.clear(); demos_.clear();
@@ -555,7 +561,8 @@ void Resource::loadDemoData() {
// Crea las texturas de jugadores con todas sus variantes de paleta // Crea las texturas de jugadores con todas sus variantes de paleta
void Resource::createPlayerTextures() { void Resource::createPlayerTextures() {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> CREATING PLAYER TEXTURES"); Logger::CR();
Logger::info("CREATING PLAYER TEXTURES");
// Configuración de jugadores y sus paletas // Configuración de jugadores y sus paletas
struct PlayerConfig { struct PlayerConfig {
@@ -627,7 +634,7 @@ void Resource::createPlayerTextures() {
// Guardar con nombre específico // Guardar con nombre específico
std::string texture_name = player.name_prefix + "_pal" + std::to_string(palette_idx); std::string texture_name = player.name_prefix + "_pal" + std::to_string(palette_idx);
textures_.emplace_back(texture_name, texture); textures_.emplace_back(texture_name, texture);
printWithDots("Player Texture : ", texture_name, "[ DONE ]"); Logger::dots("Player Texture : ", texture_name, "[ DONE ]");
} }
} }
} }
@@ -643,7 +650,8 @@ void Resource::createTextTextures() {
text(std::move(text_init)) {} text(std::move(text_init)) {}
}; };
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> CREATING TEXTURES"); Logger::CR();
Logger::info("CREATING TEXTURES");
// Texturas de tamaño normal con outline // Texturas de tamaño normal con outline
std::vector<NameAndText> strings1 = { std::vector<NameAndText> strings1 = {
@@ -658,7 +666,7 @@ void Resource::createTextTextures() {
auto text1 = getText("04b_25_enhanced"); auto text1 = getText("04b_25_enhanced");
for (const auto& s : strings1) { 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)); textures_.emplace_back(s.name, text1->writeDXToTexture(Text::STROKE, s.text, -2, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color));
printWithDots("Texture : ", s.name, "[ DONE ]"); Logger::dots("Texture : ", s.name, "[ DONE ]");
} }
// Texturas de tamaño doble // Texturas de tamaño doble
@@ -673,7 +681,7 @@ void Resource::createTextTextures() {
auto text2 = getText("04b_25_2x_enhanced"); auto text2 = getText("04b_25_2x_enhanced");
for (const auto& s : strings2) { 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)); textures_.emplace_back(s.name, text2->writeDXToTexture(Text::STROKE, s.text, -4, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color));
printWithDots("Texture : ", s.name, "[ DONE ]"); Logger::dots("Texture : ", s.name, "[ DONE ]");
} }
} }
@@ -692,7 +700,8 @@ void Resource::createText() {
white_texture_file(std::move(w_file)) {} white_texture_file(std::move(w_file)) {}
}; };
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> CREATING TEXT OBJECTS"); Logger::CR();
Logger::info("CREATING TEXT OBJECTS");
std::vector<ResourceInfo> resources = { std::vector<ResourceInfo> resources = {
{"04b_25", "04b_25.png", "04b_25.txt"}, {"04b_25", "04b_25.png", "04b_25.txt"},
@@ -719,7 +728,7 @@ void Resource::createText() {
// Crear texto normal // Crear texto normal
texts_.emplace_back(resource.key, std::make_shared<Text>(getTexture(resource.texture_file), getTextFile(resource.text_file))); texts_.emplace_back(resource.key, std::make_shared<Text>(getTexture(resource.texture_file), getTextFile(resource.text_file)));
} }
printWithDots("Text : ", resource.key, "[ DONE ]"); Logger::dots("Text : ", resource.key, "[ DONE ]");
} }
} }
@@ -881,7 +890,7 @@ void Resource::cleanupTempAudioFiles() {
try { try {
if (std::filesystem::exists(temp_path)) { if (std::filesystem::exists(temp_path)) {
std::filesystem::remove(temp_path); std::filesystem::remove(temp_path);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Removed temp audio file: %s", temp_path.c_str()); //SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Removed temp audio file: %s", temp_path.c_str());
} }
} catch (const std::exception& e) { } catch (const std::exception& e) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to remove temp audio file %s: %s", temp_path.c_str(), e.what()); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to remove temp audio file %s: %s", temp_path.c_str(), e.what());

View File

@@ -15,6 +15,7 @@
#include "rendering/opengl/opengl_shader.hpp" // Para OpenGLShader #include "rendering/opengl/opengl_shader.hpp" // Para OpenGLShader
#include "text.hpp" // Para Text, Text::COLOR, Text::STROKE #include "text.hpp" // Para Text, Text::COLOR, Text::STROKE
#include "texture.hpp" // Para Texture #include "texture.hpp" // Para Texture
#include "ui/logger.hpp" // Para Logger
#include "ui/notifier.hpp" // Para Notifier #include "ui/notifier.hpp" // Para Notifier
#include "ui/service_menu.hpp" // Para ServiceMenu #include "ui/service_menu.hpp" // Para ServiceMenu
#include "utils.hpp" // Para Zone #include "utils.hpp" // Para Zone
@@ -279,8 +280,7 @@ void Screen::initShaders() {
#else #else
// En macOS, OpenGL está deprecated y rinde mal // En macOS, OpenGL está deprecated y rinde mal
// TODO: Implementar backend de Metal para shaders en macOS // TODO: Implementar backend de Metal para shaders en macOS
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, Logger::info("WARNING: Shaders no disponibles en macOS (OpenGL deprecated). Usa Metal backend.", Logger::YELLOW);
"Shaders no disponibles en macOS (OpenGL deprecated). Usa Metal backend.");
#endif #endif
} }
@@ -407,7 +407,7 @@ auto Screen::initSDLVideo() -> bool {
SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_BLEND); SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_BLEND);
SDL_SetRenderVSync(renderer_, Options::video.vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED); SDL_SetRenderVSync(renderer_, Options::video.vsync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "** Video system initialized successfully"); Logger::info("Video system initialized successfully");
return true; return true;
} }
@@ -421,7 +421,8 @@ void Screen::getDisplayInfo() {
SDL_DisplayID instance_id = displays[i]; SDL_DisplayID instance_id = displays[i];
const char* name = SDL_GetDisplayName(instance_id); const char* name = SDL_GetDisplayName(instance_id);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Display %" SDL_PRIu32 ": %s", instance_id, (name != nullptr) ? name : "Unknown"); // SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Display %" SDL_PRIu32 ": %s", instance_id, (name != nullptr) ? name : "Unknown");
Logger::info(std::string("Display ") + std::to_string(instance_id) + ": " + (name != nullptr ? name : "Unknown"));
} }
const auto* dm = SDL_GetCurrentDisplayMode(displays[0]); const auto* dm = SDL_GetCurrentDisplayMode(displays[0]);
@@ -437,15 +438,20 @@ void Screen::getDisplayInfo() {
Options::window.max_zoom = std::min(dm->w / param.game.width, dm->h / param.game.height); Options::window.max_zoom = std::min(dm->w / param.game.width, dm->h / param.game.height);
Options::window.zoom = std::min(Options::window.zoom, Options::window.max_zoom); Options::window.zoom = std::min(Options::window.zoom, Options::window.max_zoom);
// Muestra información sobre el tamaño de la pantalla y de la ventana de juego // Obtiene la cadena con la información sobre la resolución y el refresco
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Current display mode: %dx%d @ %dHz", static_cast<int>(dm->w), static_cast<int>(dm->h), static_cast<int>(dm->refresh_rate)); Options::video.info = std::to_string(dm->w) + "x" +
std::to_string(dm->h) + " @ " +
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Window resolution: %dx%d x%d", static_cast<int>(param.game.width), static_cast<int>(param.game.height), Options::window.zoom);
Options::video.info = std::to_string(static_cast<int>(dm->w)) + "x" +
std::to_string(static_cast<int>(dm->h)) + " @ " +
std::to_string(static_cast<int>(dm->refresh_rate)) + " Hz"; std::to_string(static_cast<int>(dm->refresh_rate)) + " Hz";
// Muestra información sobre el tamaño de la pantalla y de la ventana de juego
// SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Current display mode: %dx%d @ %dHz", static_cast<int>(dm->w), static_cast<int>(dm->h), static_cast<int>(dm->refresh_rate));
Logger::info("Current display mode: " + Options::video.info);
// SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Window resolution: %dx%d x%d", static_cast<int>(param.game.width), static_cast<int>(param.game.height), Options::window.zoom);
Logger::info("Window resolution: " + std::to_string(static_cast<int>(param.game.width)) + "x" + std::to_string(static_cast<int>(param.game.height)) + "x" + std::to_string(Options::window.zoom));
// Calcula el máximo factor de zoom que se puede aplicar a la pantalla // Calcula el máximo factor de zoom que se puede aplicar a la pantalla
const int MAX_ZOOM = std::min(dm->w / param.game.width, (dm->h - WINDOWS_DECORATIONS) / param.game.height); const int MAX_ZOOM = std::min(dm->w / param.game.width, (dm->h - WINDOWS_DECORATIONS) / param.game.height);

View File

@@ -14,6 +14,7 @@
#include "sprite.hpp" // Para Sprite #include "sprite.hpp" // Para Sprite
#include "texture.hpp" // Para Texture #include "texture.hpp" // Para Texture
#include "utils.hpp" // Para getFileName, printWithDots #include "utils.hpp" // Para getFileName, printWithDots
#include "ui/logger.hpp"
// Constructor // Constructor
Text::Text(const std::shared_ptr<Texture>& texture, const std::string& text_file) { Text::Text(const std::shared_ptr<Texture>& texture, const std::string& text_file) {
@@ -419,8 +420,8 @@ auto Text::loadFile(const std::string& file_path) -> std::shared_ptr<Text::File>
line_read++; line_read++;
}; };
Logger::dots("Text File : ", getFileName(file_path), "[ LOADED ]");
// Cierra el fichero si se usó // Cierra el fichero si se usó
printWithDots("Text File : ", getFileName(file_path), "[ LOADED ]");
if (!using_resource_data && file.is_open()) { if (!using_resource_data && file.is_open()) {
file.close(); file.close();
} }

View File

@@ -17,6 +17,7 @@
#include "resource_helper.hpp" // Para ResourceHelper #include "resource_helper.hpp" // Para ResourceHelper
#include "stb_image.h" // Para stbi_image_free, stbi_load, STBI_rgb_alpha #include "stb_image.h" // Para stbi_image_free, stbi_load, STBI_rgb_alpha
#include "utils.hpp" #include "utils.hpp"
#include "ui/logger.hpp"
// Constructor // Constructor
Texture::Texture(SDL_Renderer* renderer, std::string path) Texture::Texture(SDL_Renderer* renderer, std::string path)
@@ -82,7 +83,7 @@ auto Texture::loadFromFile(const std::string& file_path) -> bool {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: Fichero no encontrado %s", getFileName(file_path).c_str()); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: Fichero no encontrado %s", getFileName(file_path).c_str());
throw std::runtime_error("Fichero no encontrado: " + getFileName(file_path)); throw std::runtime_error("Fichero no encontrado: " + getFileName(file_path));
} }
printWithDots("Texture : ", getFileName(file_path), "[ LOADED ]"); Logger::dots("Texture : ", getFileName(file_path), "[ LOADED ]");
int pitch; int pitch;
SDL_PixelFormat pixel_format; SDL_PixelFormat pixel_format;
@@ -330,7 +331,7 @@ auto Texture::loadPaletteFromFile(const std::string& file_path, bool quiet) -> P
} }
if (!quiet) { if (!quiet) {
printWithDots("Palette : ", getFileName(file_path), "[ LOADED ]"); Logger::dots("Palette : ", getFileName(file_path), "[ LOADED ]");
} }
// Usar la nueva función loadPalette, que devuelve un vector<uint32_t> // Usar la nueva función loadPalette, que devuelve un vector<uint32_t>

View File

@@ -33,6 +33,21 @@ inline void info(const std::string& msg, const std::string& color = WHITE) {
std::cout << " " << color << msg << RESET << "\n"; std::cout << " " << color << msg << RESET << "\n";
} }
// Put
inline void put(const std::string& msg, const std::string& color = WHITE) {
std::cout << color << msg << RESET << "\n";
}
// Error
inline void error(const std::string& msg) {
std::cout << RED << msg << RESET << "\n";
}
// CR
inline void CR() {
std::cout << "\n";
}
// Dots genérico // Dots genérico
inline void dots(const std::string& prefix, inline void dots(const std::string& prefix,
const std::string& middle, const std::string& middle,
@@ -49,7 +64,7 @@ inline void dots(const std::string& prefix,
field_text = middle.substr(0, field_width); field_text = middle.substr(0, field_width);
} }
std::cout << prefix << field_text std::cout << " " << prefix << field_text
<< suffixColor << suffix << RESET << suffixColor << suffix << RESET
<< "\n"; << "\n";
} }

View File

@@ -294,32 +294,6 @@ auto stringInVector(const std::vector<std::string>& vec, const std::string& str)
return std::ranges::find(vec, str) != vec.end(); return std::ranges::find(vec, str) != vec.end();
} }
// Imprime por pantalla una línea de texto de tamaño fijo rellena con puntos
void printWithDots(const std::string& text1, const std::string& text2, const std::string& text3) {
constexpr size_t TOTAL_WIDTH = 52;
// Calcula el ancho del campo para text2 restando la longitud de text1 y text3
size_t field_width = TOTAL_WIDTH > (text1.size() + text3.size())
? TOTAL_WIDTH - text1.size() - text3.size()
: 0;
// Prepara el bloque a imprimir a partir de text2
std::string field_text;
if (text2.size() < field_width) {
// Si text2 es más corto, lo rellenamos a la derecha con puntos
field_text = text2 + std::string(field_width - text2.size(), '.');
} else {
// Si es demasiado largo, lo cortamos
field_text = text2.substr(0, field_width);
}
// Concatena todo
std::string formatted_text = text1 + field_text + text3;
// Imprime la línea formateada usando SDL_LogInfo
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "%s", formatted_text.c_str());
}
// Obtiene el nombre de un fichero a partir de una ruta completa // Obtiene el nombre de un fichero a partir de una ruta completa
auto getFileName(const std::string& path) -> std::string { auto getFileName(const std::string& path) -> std::string {
return std::filesystem::path(path).filename().string(); return std::filesystem::path(path).filename().string();

View File

@@ -84,7 +84,6 @@ auto easeInCubic(double time) -> double;
// Utilidades varias // Utilidades varias
auto stringInVector(const std::vector<std::string>& vec, const std::string& str) -> bool; // Comprueba si un vector contiene una cadena auto stringInVector(const std::vector<std::string>& vec, const std::string& str) -> bool; // Comprueba si un vector contiene una cadena
void printWithDots(const std::string& text1, const std::string& text2, const std::string& text3); // Imprime una línea con puntos
auto truncateWithEllipsis(const std::string& input, size_t length) -> std::string; // Trunca un string y le añade puntos suspensivos auto truncateWithEllipsis(const std::string& input, size_t length) -> std::string; // Trunca un string y le añade puntos suspensivos
// Ficheros y rutas // Ficheros y rutas