X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=3468df641ff8bcc26072cf1d47f51194a3ff84d6;hb=1638f687279338a97d28e2a770fd63e7c789bdf8;hp=e9991e1f88bdd732c9d3fd1aa8de3a570c338b92;hpb=eb307f1cc053ffdead7e4b50503b6b54f9a9c412;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index e9991e1f..3468df64 100644 --- a/src/files.c +++ b/src/files.c @@ -8103,8 +8103,9 @@ void SaveScore(int nr) #define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_9 19 #define SETUP_TOKEN_DEBUG_FRAME_DELAY_USE_MOD_KEY 20 #define SETUP_TOKEN_DEBUG_FRAME_DELAY_GAME_ONLY 21 +#define SETUP_TOKEN_DEBUG_SHOW_FRAMES_PER_SECOND 22 -#define NUM_DEBUG_SETUP_TOKENS 22 +#define NUM_DEBUG_SETUP_TOKENS 23 /* options setup */ #define SETUP_TOKEN_OPTIONS_VERBOSE 0 @@ -8296,6 +8297,7 @@ static struct TokenInfo debug_setup_tokens[] = { TYPE_KEY_X11, &sdi.frame_delay_key[9], "debug.key.frame_delay_9" }, { TYPE_BOOLEAN, &sdi.frame_delay_use_mod_key,"debug.frame_delay.use_mod_key"}, { TYPE_BOOLEAN, &sdi.frame_delay_game_only, "debug.frame_delay.game_only" }, + { TYPE_BOOLEAN, &sdi.show_frames_per_second, "debug.show_frames_per_second" }, }; static struct TokenInfo options_setup_tokens[] = @@ -8493,6 +8495,8 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->debug.frame_delay_use_mod_key = DEFAULT_FRAME_DELAY_USE_MOD_KEY; si->debug.frame_delay_game_only = DEFAULT_FRAME_DELAY_GAME_ONLY; + si->debug.show_frames_per_second = FALSE; + si->options.verbose = FALSE; #if defined(PLATFORM_ANDROID) @@ -8520,6 +8524,60 @@ static void setSetupInfoToDefaults_EditorCascade(struct SetupInfo *si) si->editor_cascade.el_dynamic = FALSE; } +#define MAX_HIDE_SETUP_TOKEN_SIZE 20 + +static char *getHideSetupToken(void *setup_value) +{ + static char hide_setup_token[MAX_HIDE_SETUP_TOKEN_SIZE]; + + if (setup_value != NULL) + snprintf(hide_setup_token, MAX_HIDE_SETUP_TOKEN_SIZE, "%p", setup_value); + + return hide_setup_token; +} + +static void setHideSetupEntry(void *setup_value_raw) +{ + /* !!! DIRTY WORKAROUND; TO BE FIXED AFTER THE MM ENGINE RELEASE !!! */ + void *setup_value = setup_value_raw - (void *)&si + (void *)&setup; + + char *hide_setup_token = getHideSetupToken(setup_value); + + if (setup_value != NULL) + setHashEntry(hide_setup_hash, hide_setup_token, ""); +} + +boolean hideSetupEntry(void *setup_value) +{ + char *hide_setup_token = getHideSetupToken(setup_value); + + return (setup_value != NULL && + getHashEntry(hide_setup_hash, hide_setup_token) != NULL); +} + +static void setSetupInfoFromTokenText(SetupFileHash *setup_file_hash, + struct TokenInfo *token_info, + int token_nr, char *token_text) +{ + char *token_hide_text = getStringCat2(token_text, ".hide"); + char *token_hide_value = getHashEntry(setup_file_hash, token_hide_text); + + /* set the value of this setup option in the setup option structure */ + setSetupInfo(token_info, token_nr, getHashEntry(setup_file_hash, token_text)); + + /* check if this setup option should be hidden in the setup menu */ + if (token_hide_value != NULL && get_boolean_from_string(token_hide_value)) + setHideSetupEntry(token_info[token_nr].value); +} + +static void setSetupInfoFromTokenInfo(SetupFileHash *setup_file_hash, + struct TokenInfo *token_info, + int token_nr) +{ + setSetupInfoFromTokenText(setup_file_hash, token_info, token_nr, + token_info[token_nr].text); +} + static void decodeSetupFileHash(SetupFileHash *setup_file_hash) { int i, pnr; @@ -8527,25 +8585,25 @@ static void decodeSetupFileHash(SetupFileHash *setup_file_hash) if (!setup_file_hash) return; + if (hide_setup_hash == NULL) + hide_setup_hash = newSetupFileHash(); + /* global setup */ si = setup; for (i = 0; i < NUM_GLOBAL_SETUP_TOKENS; i++) - setSetupInfo(global_setup_tokens, i, - getHashEntry(setup_file_hash, global_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, global_setup_tokens, i); setup = si; /* editor setup */ sei = setup.editor; for (i = 0; i < NUM_EDITOR_SETUP_TOKENS; i++) - setSetupInfo(editor_setup_tokens, i, - getHashEntry(setup_file_hash,editor_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, editor_setup_tokens, i); setup.editor = sei; /* shortcut setup */ ssi = setup.shortcut; for (i = 0; i < NUM_SHORTCUT_SETUP_TOKENS; i++) - setSetupInfo(shortcut_setup_tokens, i, - getHashEntry(setup_file_hash,shortcut_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, shortcut_setup_tokens, i); setup.shortcut = ssi; /* player setup */ @@ -8561,8 +8619,8 @@ static void decodeSetupFileHash(SetupFileHash *setup_file_hash) char full_token[100]; sprintf(full_token, "%s%s", prefix, player_setup_tokens[i].text); - setSetupInfo(player_setup_tokens, i, - getHashEntry(setup_file_hash, full_token)); + setSetupInfoFromTokenText(setup_file_hash, player_setup_tokens, i, + full_token); } setup.input[pnr] = sii; } @@ -8570,29 +8628,25 @@ static void decodeSetupFileHash(SetupFileHash *setup_file_hash) /* system setup */ syi = setup.system; for (i = 0; i < NUM_SYSTEM_SETUP_TOKENS; i++) - setSetupInfo(system_setup_tokens, i, - getHashEntry(setup_file_hash, system_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, system_setup_tokens, i); setup.system = syi; /* internal setup */ sxi = setup.internal; for (i = 0; i < NUM_INTERNAL_SETUP_TOKENS; i++) - setSetupInfo(internal_setup_tokens, i, - getHashEntry(setup_file_hash, internal_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, internal_setup_tokens, i); setup.internal = sxi; /* debug setup */ sdi = setup.debug; for (i = 0; i < NUM_DEBUG_SETUP_TOKENS; i++) - setSetupInfo(debug_setup_tokens, i, - getHashEntry(setup_file_hash, debug_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, debug_setup_tokens, i); setup.debug = sdi; /* options setup */ soi = setup.options; for (i = 0; i < NUM_OPTIONS_SETUP_TOKENS; i++) - setSetupInfo(options_setup_tokens, i, - getHashEntry(setup_file_hash, options_setup_tokens[i].text)); + setSetupInfoFromTokenInfo(setup_file_hash, options_setup_tokens, i); setup.options = soi; }