arreglos en stats.cpp
This commit is contained in:
@@ -189,7 +189,8 @@ namespace Resource {
|
||||
if (!items.is_sequence()) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Warning: Type '%s' in category '%s' is not a sequence, skipping",
|
||||
type_str.c_str(), category.c_str());
|
||||
type_str.c_str(),
|
||||
category.c_str());
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -208,18 +209,22 @@ namespace Resource {
|
||||
} else {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Warning: Invalid item in type '%s', category '%s', skipping",
|
||||
type_str.c_str(), category.c_str());
|
||||
type_str.c_str(),
|
||||
category.c_str());
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Error parsing asset in category '%s', type '%s': %s",
|
||||
category.c_str(), type_str.c_str(), e.what());
|
||||
category.c_str(),
|
||||
type_str.c_str(),
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Error parsing type in category '%s': %s",
|
||||
category.c_str(), e.what());
|
||||
category.c_str(),
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
} else if (category_assets.is_sequence()) {
|
||||
@@ -252,7 +257,8 @@ namespace Resource {
|
||||
} catch (const std::exception& e) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"Error parsing asset in category '%s': %s",
|
||||
category.c_str(), e.what());
|
||||
category.c_str(),
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -33,8 +33,8 @@ namespace Resource {
|
||||
|
||||
// --- Métodos para la gestión de recursos ---
|
||||
void add(const std::string& file_path, Type type, bool required = true, bool absolute = false);
|
||||
void addAsset(const std::string& path, Type type); // Añade al mapa y persiste en assets.yaml
|
||||
void removeAsset(const std::string& filename); // Quita del mapa y persiste en assets.yaml
|
||||
void addAsset(const std::string& path, Type type); // Añade al mapa y persiste en assets.yaml
|
||||
void removeAsset(const std::string& filename); // Quita del mapa y persiste en assets.yaml
|
||||
void loadFromFile(const std::string& config_file_path, const std::string& prefix = "", const std::string& system_folder = ""); // Con soporte para variables
|
||||
void loadFromString(const std::string& config_content, const std::string& prefix = "", const std::string& system_folder = ""); // Para cargar desde pack (release)
|
||||
[[nodiscard]] auto get(const std::string& filename) const -> std::string; // Obtiene la ruta completa
|
||||
|
||||
@@ -15,17 +15,6 @@ Stats::Stats(std::string file, std::string buffer)
|
||||
Stats::~Stats() {
|
||||
// Vuelca los datos del buffer en la lista de estadisticas
|
||||
updateListFromBuffer();
|
||||
|
||||
// Calcula cual es la habitación con más muertes
|
||||
checkWorstNightmare();
|
||||
|
||||
// Guarda las estadísticas
|
||||
saveToFile(buffer_path_, buffer_list_);
|
||||
saveToFile(file_path_, list_);
|
||||
|
||||
buffer_list_.clear();
|
||||
list_.clear();
|
||||
dictionary_.clear();
|
||||
}
|
||||
|
||||
// Inicializador
|
||||
@@ -90,12 +79,9 @@ auto Stats::findByName(const std::string& name, const std::vector<RoomData>& lis
|
||||
}
|
||||
|
||||
// Carga las estadisticas desde un fichero
|
||||
auto Stats::loadFromFile(const std::string& file_path, std::vector<RoomData>& list) -> bool { // NOLINT(readability-convert-member-functions-to-static)
|
||||
void Stats::loadFromFile(const std::string& file_path, std::vector<RoomData>& list) { // NOLINT(readability-convert-member-functions-to-static)
|
||||
list.clear();
|
||||
|
||||
// Indicador de éxito en la carga
|
||||
bool success = true;
|
||||
|
||||
// Variables para manejar el fichero
|
||||
std::ifstream file(file_path);
|
||||
|
||||
@@ -108,26 +94,32 @@ auto Stats::loadFromFile(const std::string& file_path, std::vector<RoomData>& li
|
||||
if (!line.empty() && line.back() == '\r') {
|
||||
line.pop_back();
|
||||
}
|
||||
// Comprueba que la linea no sea un comentario
|
||||
if (!line.starts_with("#")) {
|
||||
RoomData stat;
|
||||
std::stringstream ss(line);
|
||||
std::string tmp;
|
||||
// Comprueba que la linea no sea un comentario ni esté vacía
|
||||
if (line.empty() || line.starts_with("#")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Obtiene el nombre
|
||||
getline(ss, tmp, ';');
|
||||
stat.name = tmp;
|
||||
RoomData stat;
|
||||
std::stringstream ss(line);
|
||||
std::string tmp;
|
||||
|
||||
// Obtiene las visitas
|
||||
// Obtiene el nombre
|
||||
getline(ss, tmp, ';');
|
||||
stat.name = tmp;
|
||||
|
||||
// Obtiene las visitas y muertes
|
||||
try {
|
||||
getline(ss, tmp, ';');
|
||||
stat.visited = std::stoi(tmp);
|
||||
|
||||
// Obtiene las muertes
|
||||
getline(ss, tmp, ';');
|
||||
stat.died = std::stoi(tmp);
|
||||
|
||||
list.push_back(stat);
|
||||
} catch (const std::exception&) {
|
||||
// Línea con formato incorrecto, la ignora
|
||||
continue;
|
||||
}
|
||||
|
||||
list.push_back(stat);
|
||||
}
|
||||
|
||||
// Cierra el fichero
|
||||
@@ -139,8 +131,6 @@ auto Stats::loadFromFile(const std::string& file_path, std::vector<RoomData>& li
|
||||
// Crea el fichero con los valores por defecto
|
||||
saveToFile(file_path, list);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
// Guarda las estadisticas en un fichero
|
||||
@@ -169,11 +159,6 @@ void Stats::checkWorstNightmare() { // NOLINT(readability-convert-member-functi
|
||||
}
|
||||
}
|
||||
|
||||
// Añade una entrada al diccionario
|
||||
void Stats::addDictionary(const std::string& number, const std::string& name) {
|
||||
dictionary_.push_back({.number = number, .name = name});
|
||||
}
|
||||
|
||||
// Vuelca los datos del buffer en la lista de estadisticas
|
||||
void Stats::updateListFromBuffer() {
|
||||
// Actualiza list_ desde buffer_list_
|
||||
@@ -192,6 +177,13 @@ void Stats::updateListFromBuffer() {
|
||||
}
|
||||
}
|
||||
|
||||
// Limpia el buffer después de volcarlo
|
||||
buffer_list_.clear();
|
||||
|
||||
// Calcula cual es la habitación con más muertes
|
||||
checkWorstNightmare();
|
||||
|
||||
// Guarda las estadísticas
|
||||
saveToFile(buffer_path_, buffer_list_);
|
||||
saveToFile(file_path_, list_);
|
||||
}
|
||||
@@ -11,23 +11,17 @@ class Stats {
|
||||
int died; // Cuenta las veces que se ha muerto en una habitación
|
||||
};
|
||||
|
||||
struct Dictionary {
|
||||
std::string number; // Numero de la habitación
|
||||
std::string name; // Nombre de la habitación
|
||||
};
|
||||
|
||||
// Variables
|
||||
std::vector<Dictionary> dictionary_; // Lista con la equivalencia nombre-numero de habitacion
|
||||
std::vector<RoomData> buffer_list_; // Lista con las estadisticas temporales por habitación
|
||||
std::vector<RoomData> list_; // Lista con las estadisticas completas por habitación
|
||||
std::string buffer_path_; // Fichero con las estadísticas temporales
|
||||
std::string file_path_; // Fichero con las estadísticas completas
|
||||
std::vector<RoomData> buffer_list_; // Lista con las estadisticas temporales por habitación
|
||||
std::vector<RoomData> list_; // Lista con las estadisticas completas por habitación
|
||||
std::string buffer_path_; // Fichero con las estadísticas temporales
|
||||
std::string file_path_; // Fichero con las estadísticas completas
|
||||
|
||||
// Busca una entrada en la lista por nombre
|
||||
static auto findByName(const std::string& name, const std::vector<RoomData>& list) -> int;
|
||||
|
||||
// Carga las estadisticas desde un fichero
|
||||
static auto loadFromFile(const std::string& file_path, std::vector<RoomData>& list) -> bool;
|
||||
static void loadFromFile(const std::string& file_path, std::vector<RoomData>& list);
|
||||
|
||||
// Guarda las estadisticas en un fichero
|
||||
static void saveToFile(const std::string& file_path, const std::vector<RoomData>& list);
|
||||
@@ -39,14 +33,13 @@ class Stats {
|
||||
void updateListFromBuffer();
|
||||
|
||||
public:
|
||||
// Constructostd::string nst stdstd::string nst std::string& buffer);
|
||||
// Constructor
|
||||
Stats(std::string file, std::string buffer);
|
||||
|
||||
// Destructor
|
||||
~Stats();
|
||||
|
||||
// Inicializador
|
||||
// Se debe llamar a este procedimiento una vez se haya creado el diccionario numero-nombre
|
||||
void init();
|
||||
|
||||
// Añade una muerte a las estadisticas
|
||||
@@ -54,7 +47,4 @@ class Stats {
|
||||
|
||||
// Añade una visita a las estadisticas
|
||||
void addVisit(const std::string& name);
|
||||
|
||||
// Añade una entrada al diccionario
|
||||
void addDictionary(const std::string& number, const std::string& name);
|
||||
};
|
||||
@@ -914,14 +914,8 @@ void Game::checkRestoringJail(float delta_time) {
|
||||
}
|
||||
}
|
||||
|
||||
// Inicializa el diccionario de las estadísticas
|
||||
// Inicializa las estadísticas
|
||||
void Game::initStats() { // NOLINT(readability-convert-member-functions-to-static)
|
||||
auto list = Resource::Cache::get()->getRooms();
|
||||
|
||||
for (const auto& room : list) {
|
||||
stats_->addDictionary(room.room->number, room.room->name);
|
||||
}
|
||||
|
||||
stats_->init();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user