#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) { // GAME param->gameWidth = 320; param->gameHeight = 240; param->itemSize = 20; param->autofire = true; // SCOREBOARD param->scoreboard = {0, 200, 320, 40}; // FADE param->numSquaresWidth = 160; param->numSquaresHeight = 120; param->fadeRandomSquaresDelay = 1; param->fadeRandomSquaresMult = 500; param->fadePostDuration = 80; param->venetianSize = 16; // TITLE param->pressStart = 160; param->titleCounter = 800; param->arcadeEdition = 123; param->titleCC = 11; // BACKGROUND param->backgroundAttenuateColor = {255, 255, 255}; param->backgroundAttenuateAlpha = 32; // BALLOONS param->balloon1.vel = 2.60f; param->balloon1.grav = 0.09f; param->balloon2.vel = 3.50f; param->balloon2.grav = 0.10f; param->balloon3.vel = 4.50f; param->balloon3.grav = 0.10f; param->balloon4.vel = 4.95f; param->balloon4.grav = 0.10f; } // 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; // GAME if (var == "gameWidth") { param->gameWidth = std::stoi(value); } else if (var == "gameHeight") { param->gameHeight = std::stoi(value); } else if (var == "itemSize") { param->itemSize = std::stoi(value); } else if (var == "autofire") { param->autofire = stringToBool(value); } // FADE 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); } // SCOREBOARD 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); } // TITLE else if (var == "pressStart") { param->pressStart = std::stoi(value); } else if (var == "titleCounter") { param->titleCounter = std::stoi(value); } else if (var == "arcadeEdition") { param->arcadeEdition = std::stoi(value); } else if (var == "titleCC") { param->titleCC = std::stoi(value); } // BACKGROUND else if (var == "backgroundAttenuateColor.r") { param->backgroundAttenuateColor.r = std::stoi(value); } else if (var == "backgroundAttenuateColor.g") { param->backgroundAttenuateColor.g = std::stoi(value); } else if (var == "backgroundAttenuateColor.b") { param->backgroundAttenuateColor.b = std::stoi(value); } else if (var == "backgroundAttenuateColor.a") { param->backgroundAttenuateAlpha = std::stoi(value); } // BALLOON else if (var == "balloon1.vel") { param->balloon1.vel = std::stof(value); } else if (var == "balloon1.grav") { param->balloon1.grav = std::stof(value); } else if (var == "balloon2.vel") { param->balloon2.vel = std::stof(value); } else if (var == "balloon2.grav") { param->balloon2.grav = std::stof(value); } else if (var == "balloon3.vel") { param->balloon3.vel = std::stof(value); } else if (var == "balloon3.grav") { param->balloon3.grav = std::stof(value); } else if (var == "balloon4.vel") { param->balloon4.vel = std::stof(value); } else if (var == "balloon4.grav") { param->balloon4.grav = std::stof(value); } // RESTO else { success = false; } return success; }