#include "IZ_keyboard.h" void IZ_KeyboardHandleKeyUpDownEvents(IZ_KeyboardState* state, IZ_Action* action, SDL_Event e) { u8 control_index; for (control_index = 0; control_index < CONTROLS; control_index += 1) { if (e.key.keysym.sym == state->config.control_mapping[control_index]) { const u16 bitflag = (0x1 << control_index); if (e.type == SDL_KEYDOWN) { *action |= bitflag; return; } if (e.type == SDL_KEYUP) { *action &= ~bitflag; return; } } } } void IZ_KeyboardHandleEvents(IZ_KeyboardState(* state)[IZ_PLAYERS], IZ_Action(* action)[IZ_PLAYERS], SDL_Event e) { for (u8 player_index = 0; player_index < IZ_PLAYERS; player_index += 1) { IZ_KeyboardHandleKeyUpDownEvents(&(*state)[player_index], &(*action)[player_index], e); } } IZ_ProcedureResult IZ_KeyboardSaveConfig(IZ_KeyboardState(* state)[IZ_PLAYERS], const char* config_path) { u8 problem = 0; char control_mapping_section_name[26]; u8 player_index; u8 control_index; for (player_index = 0; player_index < IZ_PLAYERS; player_index += 1) { sprintf_s(control_mapping_section_name, 26, "Keyboard.%d.ControlMapping", player_index); for (control_index = 0; control_index < CONTROLS; control_index += 1) { if (!ini_puts( control_mapping_section_name, ACTION_NAMES[control_index], SDL_GetKeyName((*state)[player_index].config.control_mapping[control_index]), config_path )) { problem |= (1 << player_index); } } } return problem; } void IZ_KeyboardLoadConfig(IZ_KeyboardState(* state)[IZ_PLAYERS], const char* config_path) { char buffer[128]; char keyboard_section_name[26]; u8 player_index; u8 control_index; for (player_index = 0; player_index < IZ_PLAYERS; player_index += 1) { sprintf_s(keyboard_section_name, 26, "Keyboard.%d.ControlMapping", player_index); for (control_index = 0; control_index < CONTROLS; control_index += 1) { ini_gets( keyboard_section_name, ACTION_NAMES[control_index], SDL_GetKeyName(IZ_KEYBOARD_DEFAULT_STATE[player_index].config.control_mapping[control_index]), buffer, 128, config_path ); (*state)[player_index].config.control_mapping[control_index] = SDL_GetKeyFromName(buffer); } } } IZ_ProcedureResult IZ_KeyboardInitialize(IZ_KeyboardState(* state)[IZ_PLAYERS], const char* config_path, u8 argc, const char* argv[]) { SDL_memcpy(state, &IZ_KEYBOARD_DEFAULT_STATE, sizeof(IZ_KeyboardState)); IZ_KeyboardLoadConfig(state, config_path); return IZ_KeyboardSaveConfig(state, config_path); }