Afegits uns overrides pa agafar parametres per linea de comandos

This commit is contained in:
2024-10-21 17:46:05 +02:00
parent 2cb22ed013
commit 84238032e0
6 changed files with 61 additions and 22 deletions

View File

@@ -84,13 +84,22 @@ Director::Director(int argc, const char *argv[])
#ifdef ANBERNIC #ifdef ANBERNIC
const std::string paramFilePath = asset->get("param_320x240.txt"); const std::string paramFilePath = asset->get("param_320x240.txt");
#else #else
const std::string paramFilePath = param_file_argument_ == "--320x240" ? Asset::get()->get("param_320x240.txt") : Asset::get()->get("param_320x256.txt"); const std::string paramFilePath = overrides.param_file == "--320x240" ? Asset::get()->get("param_320x240.txt") : Asset::get()->get("param_320x256.txt");
#endif #endif
loadParams(paramFilePath); loadParams(paramFilePath);
// Carga el fichero de puntuaciones // Carga el fichero de puntuaciones
auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hi_score_table); {
manager->loadFromFile(Asset::get()->get("score.bin")); auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hi_score_table);
if (overrides.clear_hi_score_table)
{
manager->clear();
}
else
{
manager->loadFromFile(Asset::get()->get("score.bin"));
}
}
// Inicializa SDL // Inicializa SDL
initSDL(); initSDL();
@@ -513,18 +522,33 @@ void Director::loadParams(const std::string &file_path)
// Comprueba los parametros del programa // Comprueba los parametros del programa
void Director::checkProgramArguments(int argc, const char *argv[]) void Director::checkProgramArguments(int argc, const char *argv[])
{ {
const std::vector<std::string> argument_list = {"--h", "--320x240", "--clear_score"};
// Establece la ruta del programa // Establece la ruta del programa
executable_path_ = argv[0]; executable_path_ = argv[0];
// Valores por defecto
param_file_argument_.clear();
// Comprueba el resto de parámetros // Comprueba el resto de parámetros
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
{ {
if (strcmp(argv[i], "--h") == 0)
{
for (const auto &argument : argument_list)
{
std::cout << argument << std::endl;
}
// std::exit(EXIT_SUCCESS);
section::name = section::Name::QUIT;
section::options = section::Options::QUIT_FROM_EVENT;
}
if (strcmp(argv[i], "--320x240") == 0) if (strcmp(argv[i], "--320x240") == 0)
{ {
param_file_argument_ = argv[i]; overrides.param_file = argv[i];
}
if (strcmp(argv[i], "--clear_score") == 0)
{
overrides.clear_hi_score_table = true;
} }
} }
} }

View File

@@ -25,7 +25,6 @@ private:
// Variables // Variables
std::string executable_path_; // Path del ejecutable std::string executable_path_; // Path del ejecutable
std::string system_folder_; // Carpeta del sistema donde guardar datos std::string system_folder_; // Carpeta del sistema donde guardar datos
std::string param_file_argument_; // Argumento para gestionar el fichero con los parametros del programa
// Inicializa jail_audio // Inicializa jail_audio
void initJailAudio(); void initJailAudio();

View File

@@ -60,19 +60,19 @@ void ManageHiScoreTable::sort()
bool ManageHiScoreTable::loadFromFile(const std::string &file_path) bool ManageHiScoreTable::loadFromFile(const std::string &file_path)
{ {
clear(); clear();
auto success = true; auto success = true;
auto file = SDL_RWFromFile(file_path.c_str(), "r+b"); auto file = SDL_RWFromFile(file_path.c_str(), "r+b");
if (file) if (file)
{ {
const std::string file_name = file_path.substr(file_path.find_last_of("\\/") + 1); const std::string file_name = file_path.substr(file_path.find_last_of("\\/") + 1);
std::cout << "Reading file: " << file_name.c_str() << std::endl; std::cout << "Reading file: " << file_name << std::endl;
for (int i = 0; i < (int)table_->size(); ++i)
for (auto &entry : *table_)
{ {
int nameSize = 0; int nameSize = 0;
if (SDL_RWread(file, &table_->at(i).score, sizeof(int), 1) == 0) if (SDL_RWread(file, &entry.score, sizeof(int), 1) == 0)
{ {
success = false; success = false;
break; break;
@@ -84,19 +84,15 @@ bool ManageHiScoreTable::loadFromFile(const std::string &file_path)
break; break;
} }
char *name = static_cast<char *>(malloc(nameSize + 1)); std::vector<char> nameBuffer(nameSize + 1);
if (SDL_RWread(file, name, sizeof(char) * nameSize, 1) == 0) if (SDL_RWread(file, nameBuffer.data(), sizeof(char) * nameSize, 1) == 0)
{ {
success = false; success = false;
free(name);
break; break;
} }
else
{ nameBuffer[nameSize] = '\0';
name[nameSize] = 0; entry.name = std::string(nameBuffer.data());
table_->at(i).name = name;
free(name);
}
} }
SDL_RWclose(file); SDL_RWclose(file);

View File

@@ -480,7 +480,10 @@ void Screen::displayInfo()
// Resolution // Resolution
dbg_print(0, 0, info_resolution_.c_str(), 255, 255, 0); dbg_print(0, 0, info_resolution_.c_str(), 255, 255, 0);
dbg_print(0, 8, std::to_string(globalInputs::service_pressed_counter[0]).c_str(), 255, 255, 0); // Contador de service_pressed_counter
const int counter = globalInputs::service_pressed_counter[0];
if (counter > 0)
dbg_print(0, 8, std::to_string(counter).c_str(), 255, 0, 255);
} }
} }

View File

@@ -8,6 +8,9 @@
struct JA_Music_t; // lines 7-7 struct JA_Music_t; // lines 7-7
struct JA_Sound_t; // lines 8-8 struct JA_Sound_t; // lines 8-8
// Variables
Overrides overrides = Overrides();
// Colores // Colores
const Color bg_color = {0x27, 0x27, 0x36}; const Color bg_color = {0x27, 0x27, 0x36};
const Color no_color = {0xFF, 0xFF, 0xFF}; const Color no_color = {0xFF, 0xFF, 0xFF};

View File

@@ -29,6 +29,20 @@ enum class GameDifficulty
HARD = 2, HARD = 2,
}; };
// Variables para que los argumentos del programa tengan mas peso que los definidos en otros lugares
struct Overrides
{
std::string param_file; // Fichero de parametros a utilizar
bool clear_hi_score_table; // Reinicia la tabla de records
bool set_v_sync; // Establece el vsync
// Constructor por defecto
Overrides()
: param_file(""), clear_hi_score_table(false), set_v_sync(false) {}
};
extern Overrides overrides;
// Estructura para definir un circulo // Estructura para definir un circulo
struct Circle struct Circle
{ {