From 4b5302fe73b9aa08819ff740bbf8286352a990fb Mon Sep 17 00:00:00 2001 From: Christian Heller <c.heller@plomlompom.de> Date: Tue, 5 Nov 2013 03:47:24 +0100 Subject: [PATCH] Removed redundancy between record_control() and player_control() by re-writing their common structures. --- src/control.c | 46 +++++++++++++++------------------------------- src/control.h | 7 ++++--- src/keybindings.c | 15 +++++++++++++++ src/keybindings.h | 3 +++ src/main.c | 20 ++++++-------------- 5 files changed, 43 insertions(+), 48 deletions(-) diff --git a/src/control.c b/src/control.c index c7c7b1b..287c099 100644 --- a/src/control.c +++ b/src/control.c @@ -52,7 +52,7 @@ extern uint16_t get_available_keycode_to_action(char * name) -extern void record_control(int action) +extern uint8_t player_control_by_id(int action) { if (is_command_id_shortdsc(action, "wait")) { @@ -82,45 +82,29 @@ extern void record_control(int action) { player_pick(); } + else + { + return 0; + } + return 1; } -extern uint8_t player_control(int key) +extern uint8_t player_control_by_key(int key) { - if (key == get_available_keycode_to_action("wait")) - { - player_wait(); - } - else if (key == get_available_keycode_to_action("player_u")) - { - move_player(NORTH); - } - else if (key == get_available_keycode_to_action("player_r")) - { - move_player(EAST); - } - else if (key == get_available_keycode_to_action("player_d")) + char * action_name = get_func_to_keycode(world.kb_global.kbs, key); + if (NULL == action_name && 0 != world.wmeta->active) { - move_player(SOUTH); - } - else if (key == get_available_keycode_to_action("player_l")) - { - move_player(WEST); - } - else if (key == get_available_keycode_to_action("drop")) - { - player_drop(); + struct WinConf * wc = get_winconf_by_win(world.wmeta->active); + action_name = get_func_to_keycode(wc->kb.kbs, key); } - else if (key == get_available_keycode_to_action("pick")) + if (NULL != action_name) { - player_pick(); + uint8_t action_id = get_command_id(action_name); + return player_control_by_id(action_id); } - else - { - return 0; - } - return 1; + return 0; } diff --git a/src/control.h b/src/control.h index 889bdbf..492ac88 100644 --- a/src/control.h +++ b/src/control.h @@ -15,10 +15,11 @@ extern uint16_t get_available_keycode_to_action(char * name); -/* Control the player character, either via recorded "action" or pressed "key". +/* Control the player character, either via action id "action" or pressed "key". + * Return 1 on success, 0 if no appropriate action to trigger was found. */ -extern void record_control(int action); -extern uint8_t player_control(int key); +extern uint8_t player_control_by_id(int action); +extern uint8_t player_control_by_key(int key); diff --git a/src/keybindings.c b/src/keybindings.c index 709813c..52c6c70 100644 --- a/src/keybindings.c +++ b/src/keybindings.c @@ -37,6 +37,21 @@ static uint8_t try_keycode(uint16_t keycode_given, char * keyname, +extern char * get_func_to_keycode(struct KeyBinding * kb_p, uint16_t key) +{ + while (0 != kb_p) + { + if (key == kb_p->key) + { + return kb_p->name; + } + kb_p = kb_p->next; + } + return NULL; +} + + + extern uint16_t get_keycode_to_action(struct KeyBinding * kb_p, char * name) { while (0 != kb_p) diff --git a/src/keybindings.h b/src/keybindings.h index 3d1b75e..b2e74c0 100644 --- a/src/keybindings.h +++ b/src/keybindings.h @@ -30,6 +30,9 @@ struct KeyBiData +/* Return name of action / functionality coupled to keycode; NULL on failure. */ +extern char * get_func_to_keycode(struct KeyBinding * kb_p, uint16_t key); + /* Return keycode matched by keybinding to command of "name". */ extern uint16_t get_keycode_to_action(struct KeyBinding * keybindings, char * name); diff --git a/src/main.c b/src/main.c index 8826407..adf093f 100644 --- a/src/main.c +++ b/src/main.c @@ -26,7 +26,9 @@ #include "rrand.h" /* for rrand(), rrand_seed() */ #include "rexit.h" /* for exit_game(), exit_err() */ #include "command_db.h" /* for init_command_db(), is_command_id_shortdsc() */ -#include "control.h" /* for *_control(), get_available_keycode_to_action() */ +#include "control.h" /* for control_by_id(), player_control(), + * get_available_keycode_to_action() + */ @@ -184,7 +186,7 @@ int main(int argc, char *argv[]) { world.inventory_select = getc(file); } - record_control(action); + player_control_by_id(action); } } while (1) @@ -207,7 +209,7 @@ int main(int argc, char *argv[]) { world.inventory_select = getc(file); } - record_control(action); + player_control_by_id(action); } } else if (meta_control(key)) @@ -227,22 +229,12 @@ int main(int argc, char *argv[]) draw_all_wins(world.wmeta); key = getch(); wc = get_winconf_by_win(world.wmeta->active); - if (1 == wc->view && wingeom_control(key)) - { - continue; - } - else if (2 == wc->view && winkeyb_control(key)) - { - continue; - } - if ( (1 == wc->view && wingeom_control(key)) || (2 == wc->view && winkeyb_control(key)) - || (0 != player->lifepoints && player_control(key))) + || (0 != player->lifepoints && player_control_by_key(key))) { continue; } - if (meta_control(key)) { exit_game(); -- 2.30.2