- #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);
- }
|