mirror of
https://github.com/CTCaer/RetroArch.git
synced 2025-02-20 11:30:37 +00:00
refactor cheats.c
This commit is contained in:
parent
0b098b9301
commit
8fc96b52a3
65
cheats.c
65
cheats.c
@ -32,6 +32,34 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
struct item_cheat
|
||||
{
|
||||
char *desc;
|
||||
bool state;
|
||||
char *code;
|
||||
};
|
||||
|
||||
struct cheat_manager
|
||||
{
|
||||
struct item_cheat *cheats;
|
||||
unsigned ptr;
|
||||
unsigned size;
|
||||
unsigned buf_size;
|
||||
};
|
||||
|
||||
unsigned cheat_manager_get_buf_size(cheat_manager_t *handle)
|
||||
{
|
||||
if (!handle)
|
||||
return 0;
|
||||
return handle->buf_size;
|
||||
}
|
||||
|
||||
unsigned cheat_manager_get_size(cheat_manager_t *handle)
|
||||
{
|
||||
if (!handle)
|
||||
return 0;
|
||||
return handle->size;
|
||||
}
|
||||
|
||||
void cheat_manager_apply_cheats(cheat_manager_t *handle)
|
||||
{
|
||||
@ -49,6 +77,14 @@ void cheat_manager_apply_cheats(cheat_manager_t *handle)
|
||||
}
|
||||
}
|
||||
|
||||
void cheat_manager_set_code(cheat_manager_t *handle, unsigned i, const char *str)
|
||||
{
|
||||
if (!handle)
|
||||
return;
|
||||
handle->cheats[i].code = strdup(str);
|
||||
handle->cheats[i].state = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* cheat_manager_save:
|
||||
* @path : Path to cheats file (relative path).
|
||||
@ -266,6 +302,14 @@ void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx)
|
||||
RARCH_LOG("%s\n", msg);
|
||||
}
|
||||
|
||||
void cheat_manager_toggle_index(cheat_manager_t *handle, unsigned i)
|
||||
{
|
||||
if (!handle)
|
||||
return;
|
||||
|
||||
handle->cheats[i].state = !handle->cheats[i].state;
|
||||
cheat_manager_update(handle, i);
|
||||
}
|
||||
|
||||
void cheat_manager_toggle(cheat_manager_t *handle)
|
||||
{
|
||||
@ -298,3 +342,24 @@ void cheat_manager_index_prev(cheat_manager_t *handle)
|
||||
|
||||
cheat_manager_update(handle, handle->ptr);
|
||||
}
|
||||
|
||||
const char *cheat_manager_get_code(cheat_manager_t *handle, unsigned i)
|
||||
{
|
||||
if (!handle)
|
||||
return NULL;
|
||||
return handle->cheats[i].code;
|
||||
}
|
||||
|
||||
const char *cheat_manager_get_desc(cheat_manager_t *handle, unsigned i)
|
||||
{
|
||||
if (!handle)
|
||||
return NULL;
|
||||
return handle->cheats[i].desc;
|
||||
}
|
||||
|
||||
bool cheat_manager_get_code_state(cheat_manager_t *handle, unsigned i)
|
||||
{
|
||||
if (!handle)
|
||||
return false;
|
||||
return handle->cheats[i].state;
|
||||
}
|
||||
|
29
cheats.h
29
cheats.h
@ -23,23 +23,10 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct item_cheat
|
||||
{
|
||||
char *desc;
|
||||
bool state;
|
||||
char *code;
|
||||
};
|
||||
|
||||
struct cheat_manager
|
||||
{
|
||||
struct item_cheat *cheats;
|
||||
unsigned ptr;
|
||||
unsigned size;
|
||||
unsigned buf_size;
|
||||
};
|
||||
|
||||
typedef struct cheat_manager cheat_manager_t;
|
||||
|
||||
unsigned cheat_manager_get_size(cheat_manager_t *handle);
|
||||
|
||||
cheat_manager_t *cheat_manager_new(unsigned size);
|
||||
|
||||
cheat_manager_t *cheat_manager_load(const char *path);
|
||||
@ -56,6 +43,8 @@ bool cheat_manager_save(cheat_manager_t *handle, const char *path);
|
||||
|
||||
bool cheat_manager_realloc(cheat_manager_t *handle, unsigned new_size);
|
||||
|
||||
void cheat_manager_set_code(cheat_manager_t *handle, unsigned index, const char *str);
|
||||
|
||||
void cheat_manager_free(cheat_manager_t *handle);
|
||||
|
||||
void cheat_manager_index_next(cheat_manager_t *handle);
|
||||
@ -68,6 +57,16 @@ void cheat_manager_apply_cheats(cheat_manager_t *handle);
|
||||
|
||||
void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx);
|
||||
|
||||
void cheat_manager_toggle_index(cheat_manager_t *handle, unsigned i);
|
||||
|
||||
unsigned cheat_manager_get_buf_size(cheat_manager_t *handle);
|
||||
|
||||
const char *cheat_manager_get_desc(cheat_manager_t *handle, unsigned i);
|
||||
|
||||
const char *cheat_manager_get_code(cheat_manager_t *handle, unsigned i);
|
||||
|
||||
bool cheat_manager_get_code_state(cheat_manager_t *handle, unsigned i);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -46,7 +46,7 @@ static void menu_action_setting_disp_set_label_cheat_num_passes(
|
||||
*w = 19;
|
||||
strlcpy(s2, path, len2);
|
||||
if (global && global->cheat)
|
||||
snprintf(s, len, "%u", global->cheat->buf_size);
|
||||
snprintf(s, len, "%u", cheat_manager_get_buf_size(global->cheat));
|
||||
}
|
||||
|
||||
static void menu_action_setting_disp_set_label_remap_file_load(
|
||||
@ -409,12 +409,12 @@ static void menu_action_setting_disp_set_label_cheat(
|
||||
if (!global)
|
||||
return;
|
||||
|
||||
if (cheat_index < global->cheat->buf_size)
|
||||
if (cheat_index < cheat_manager_get_buf_size(global->cheat))
|
||||
snprintf(s, len, "%s : (%s)",
|
||||
(global->cheat->cheats[cheat_index].code != NULL)
|
||||
? global->cheat->cheats[cheat_index].code :
|
||||
(cheat_manager_get_code(global->cheat, cheat_index) != NULL)
|
||||
? cheat_manager_get_code(global->cheat, cheat_index) :
|
||||
menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE),
|
||||
global->cheat->cheats[cheat_index].state ?
|
||||
cheat_manager_get_code_state(global->cheat, cheat_index) ?
|
||||
menu_hash_to_str(MENU_VALUE_ON) :
|
||||
menu_hash_to_str(MENU_VALUE_OFF)
|
||||
);
|
||||
|
@ -231,8 +231,8 @@ static int action_left_cheat_num_passes(unsigned type, const char *label,
|
||||
if (!cheat)
|
||||
return -1;
|
||||
|
||||
if (cheat->size)
|
||||
new_size = cheat->size - 1;
|
||||
if (cheat_manager_get_size(cheat))
|
||||
new_size = cheat_manager_get_size(cheat) - 1;
|
||||
menu_entries_set_refresh(false);
|
||||
cheat_manager_realloc(cheat, new_size);
|
||||
|
||||
|
@ -70,8 +70,7 @@ int generic_action_cheat_toggle(size_t idx, unsigned type, const char *label,
|
||||
if (!cheat)
|
||||
return -1;
|
||||
|
||||
cheat->cheats[idx].state = !cheat->cheats[idx].state;
|
||||
cheat_manager_update(cheat, idx);
|
||||
cheat_manager_toggle_index(cheat, idx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -260,7 +259,7 @@ static int action_right_cheat_num_passes(unsigned type, const char *label,
|
||||
if (!cheat)
|
||||
return -1;
|
||||
|
||||
new_size = cheat->size + 1;
|
||||
new_size = cheat_manager_get_size(cheat) + 1;
|
||||
menu_entries_set_refresh(false);
|
||||
cheat_manager_realloc(cheat, new_size);
|
||||
|
||||
|
@ -236,7 +236,7 @@ static int action_start_cheat_num_passes(unsigned type, const char *label)
|
||||
if (!cheat)
|
||||
return -1;
|
||||
|
||||
if (cheat->size)
|
||||
if (cheat_manager_get_size(cheat))
|
||||
{
|
||||
menu_entries_set_refresh(false);
|
||||
cheat_manager_realloc(cheat, 0);
|
||||
|
@ -2008,13 +2008,13 @@ static int menu_displaylist_parse_options_cheats(menu_displaylist_info_t *info)
|
||||
menu_hash_to_str(MENU_LABEL_CHEAT_APPLY_CHANGES),
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
|
||||
for (i = 0; i < cheat->size; i++)
|
||||
for (i = 0; i < cheat_manager_get_size(cheat); i++)
|
||||
{
|
||||
char cheat_label[64] = {0};
|
||||
|
||||
snprintf(cheat_label, sizeof(cheat_label), "%s #%u: ", menu_hash_to_str(MENU_VALUE_CHEAT), i);
|
||||
if (cheat->cheats[i].desc)
|
||||
strlcat(cheat_label, cheat->cheats[i].desc, sizeof(cheat_label));
|
||||
if (cheat_manager_get_desc(cheat, i))
|
||||
strlcat(cheat_label, cheat_manager_get_desc(cheat, i), sizeof(cheat_label));
|
||||
menu_list_push(info->list, cheat_label, "", MENU_SETTINGS_CHEAT_BEGIN + i, 0, 0);
|
||||
}
|
||||
|
||||
|
@ -186,9 +186,7 @@ void menu_input_st_cheat_callback(void *userdata, const char *str)
|
||||
if (cheat && str && *str)
|
||||
{
|
||||
unsigned cheat_index = menu_input->keyboard.type - MENU_SETTINGS_CHEAT_BEGIN;
|
||||
|
||||
cheat->cheats[cheat_index].code = strdup(str);
|
||||
cheat->cheats[cheat_index].state = true;
|
||||
cheat_manager_set_code(cheat, cheat_index, str);
|
||||
}
|
||||
|
||||
menu_input_key_end_line();
|
||||
|
Loading…
x
Reference in New Issue
Block a user