From 187134010dd73dda83a735859195c4a52276fef5 Mon Sep 17 00:00:00 2001 From: Jakob Fries Date: Fri, 1 Jun 2007 12:02:27 +0000 Subject: config stuff --- src/engine/config.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/engine/config.h | 2 +- src/game/client/menu.cpp | 1 + src/game/config_variables.h | 8 ++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/game/config_variables.h (limited to 'src') diff --git a/src/engine/config.cpp b/src/engine/config.cpp index f38be184..3db77e3a 100644 --- a/src/engine/config.cpp +++ b/src/engine/config.cpp @@ -1,10 +1,15 @@ #include +#include +#include + #include #include #include "config.h" +using namespace std; + configuration config; void config_reset() @@ -21,15 +26,53 @@ void config_reset() void config_load(const char *filename) { dbg_msg("config/load", "loading %s", filename); + + ifstream file(filename); + string line; + + if (file) + { + while (getline(file, line)) + { + int eq_index = line.find_first_of('='); + if (eq_index != string::npos) + { + string variable = line.substr(0, eq_index); + string value = line.substr(eq_index + 1); + + #define MACRO_CONFIG_INT(name,def,min,max) { if (strcmp(#name, variable.c_str()) == 0) config_set_ ## name (&config, atoi(value.c_str())); } + #define MACRO_CONFIG_STR(name,len,def) { if (strcmp(#name, variable.c_str()) == 0) { config_set_ ## name (&config, value.c_str()); cout << variable << '=' << value << endl; } } + + #include "config_variables.h" + + #undef MACRO_CONFIG_INT + #undef MACRO_CONFIG_STR + } + } + + file.close(); + } } void config_save(const char *filename) { dbg_msg("config/save", "saving config to %s", filename); + + ofstream file(filename); + + #define MACRO_CONFIG_INT(name,def,min,max) { file << # name << '=' << config.name << endl; } + #define MACRO_CONFIG_STR(name,len,def) { file << # name << '=' << config.name << endl; } + + #include "config_variables.h" + + #undef MACRO_CONFIG_INT + #undef MACRO_CONFIG_STR + + file.close(); } #define MACRO_CONFIG_INT(name,def,min,max) void config_set_ ## name (configuration *c, int val) { if (val < min) val = min; if (max != 0 && val > max) val = max; c->name = val; } -#define MACRO_CONFIG_STR(name,len,def) void config_set_ ## name (configuration *c, char *str) { strncpy(c->name, def, len-1); c->name[sizeof(c->name)-1] = 0; } +#define MACRO_CONFIG_STR(name,len,def) void config_set_ ## name (configuration *c, const char *str) { strncpy(c->name, str, len-1); c->name[sizeof(c->name)-1] = 0; cout << "config_str" << endl; } #include "config_variables.h" #undef MACRO_CONFIG_INT #undef MACRO_CONFIG_STR diff --git a/src/engine/config.h b/src/engine/config.h index 04140bf5..7cfe2ea5 100644 --- a/src/engine/config.h +++ b/src/engine/config.h @@ -17,7 +17,7 @@ void config_load(const char *filename); void config_save(const char *filename); #define MACRO_CONFIG_INT(name,def,min,max) void config_set_ ## name (configuration *c, int val); -#define MACRO_CONFIG_STR(name,len,def) void config_set_ ## name (configuration *c, char *str); +#define MACRO_CONFIG_STR(name,len,def) void config_set_ ## name (configuration *c, const char *str); #include "config_variables.h" #undef MACRO_CONFIG_INT #undef MACRO_CONFIG_STR diff --git a/src/game/client/menu.cpp b/src/game/client/menu.cpp index 35ee66af..e110ebc5 100644 --- a/src/game/client/menu.cpp +++ b/src/game/client/menu.cpp @@ -891,6 +891,7 @@ static int settings_screen_render() if (ui_do_button(&save_button, "Save", 0, 482, 490, 128, 48, draw_teewars_button)) { config = config_copy; + config_save("teewars.cfg"); screen = 0; } diff --git a/src/game/config_variables.h b/src/game/config_variables.h new file mode 100644 index 00000000..0b1fed7e --- /dev/null +++ b/src/game/config_variables.h @@ -0,0 +1,8 @@ +MACRO_CONFIG_INT(screen_width, 800, 0, 0) +MACRO_CONFIG_INT(screen_height, 600, 0, 0) +MACRO_CONFIG_STR(player_name, 32, "nameless tee") +MACRO_CONFIG_INT(key_move_left, 65, 32, 127) +MACRO_CONFIG_INT(key_move_right, 68, 32, 127) +MACRO_CONFIG_INT(key_jump, 32, 32, 127) +MACRO_CONFIG_INT(key_fire, 33, 32, 127) +MACRO_CONFIG_INT(key_hook, 34, 32, 127) -- cgit 1.4.1