#include "load_param.h" #include #include // Asigna variables a partir de dos cadenas bool setOptions(param_t *param, std::string var, std::string value); // Establece valores por defecto a las variables void initParam(param_t *param) { // Tamaño original del juego param->gameWidth = 320; param->gameHeight = 240; // Tamaño para el marcador param->scoreboard = {0, 208, 320, 32}; // Valores para el FADE_RANDOM_SQUARE param->numSquaresWidth = 80; param->numSquaresHeight = 60; param->fadeRandomSquaresDelay = 1; param->fadeRandomSquaresMult = 8; param->fadePostDuration = 20; param->venetianSize = 16; // Posició del texto para empezar a jugar param->pressStart = 180; } // Establece valores para los parametros a partir de un fichero de texto void loadParam(param_t *param, std::string filePath) { // Pone valores por defecto a las variables initParam(param); // Variables para manejar el fichero std::string line; std::ifstream file(filePath); std::string param1; std::string param2; // Si el fichero se puede abrir if (file.good()) { // Procesa cada linea del fichero while (std::getline(file, line)) { // Reinicia variables param1 = ""; param2 = ""; // Elimina los comentarios line = line.substr(0, line.find("#")); // Ignora los espacios en blanco int pos = 0; while (pos < (int)line.size() && (int)line[pos] <= 32) { pos++; } // Si no ha llegado al final de la linea, es que hay algo escrito (no es una linea vacía) if (pos < (int)line.size()) { // Elimina el espacio en blanco line = line.substr(pos, std::string::npos); // Se queda con todo lo que no sean espacios en blanco pos = 1; while (pos <= (int)line.size() && (int)line[pos] > 32) { pos++; } // Si llega al final de la linea, falta la segunda palabra if (pos < (int)line.size()) { // Se queda con la primera palabra param1 = line.substr(0, pos); // Y recorta la linea line = line.substr(pos, std::string::npos); // Ignora los espacios en blanco pos = 0; while (pos <= (int)line.size() && (int)line[pos] <= 32) { pos++; } // Si llega al final de la linea, falta la segunda palabra if (pos < (int)line.size()) { // Elimina el espacio en blanco line = line.substr(pos, std::string::npos); // Ignora los espacios en blanco pos = 1; while (pos <= (int)line.size() && (int)line[pos] > 32) { pos++; } // Se queda con la segunda palabra param2 = line.substr(0, pos); } } } setOptions(param, param1, param2); } // Cierra el fichero file.close(); } } // Asigna variables a partir de dos cadenas bool setOptions(param_t *param, std::string var, std::string value) { // Indicador de éxito en la asignación bool success = true; // Opciones de video if (var == "gameWidth") { param->gameWidth = std::stoi(value); } else if (var == "gameHeight") { param->gameHeight = std::stoi(value); } else if (var == "numSquaresWidth") { param->numSquaresWidth = std::stoi(value); } else if (var == "numSquaresHeight") { param->numSquaresHeight = std::stoi(value); } else if (var == "fadeRandomSquaresDelay") { param->fadeRandomSquaresDelay = std::stoi(value); } else if (var == "fadeRandomSquaresMult") { param->fadeRandomSquaresMult = std::stoi(value); } else if (var == "fadePostDuration") { param->fadePostDuration = std::stoi(value); } else if (var == "venetianSize") { param->venetianSize = std::stoi(value); } else if (var == "scoreboard.x") { param->scoreboard.x = std::stoi(value); } else if (var == "scoreboard.y") { param->scoreboard.y = std::stoi(value); } else if (var == "scoreboard.w") { param->scoreboard.w = std::stoi(value); } else if (var == "scoreboard.h") { param->scoreboard.h = std::stoi(value); } else if (var == "pressStart") { param->pressStart = std::stoi(value); } else if (var == "titleCounter") { param->titleCounter = std::stoi(value); } else { success = false; } return success; }