-extern void record_control(int action)
+extern uint8_t player_control_by_id(int action)
{
if (is_command_id_shortdsc(action, "wait"))
{
{
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;
}
-/* 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);
+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)
+/* 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);
#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()
+ */
{
world.inventory_select = getc(file);
}
- record_control(action);
+ player_control_by_id(action);
}
}
while (1)
{
world.inventory_select = getc(file);
}
- record_control(action);
+ player_control_by_id(action);
}
}
else if (meta_control(key))
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();