#include "keyboardconfig.hpp" #include "wopsettings.hpp" #include "keytable.hpp" const char* KeyboardConfig::keyName[] = { "Left", "Right", "Down", "Up", "Shoot", "Jump", "Dig", "Jet", "Shoot rope", "Remove rope", "Shorten rope", "Lengthen rope", "Release rope", "Screenshot", "Debug", "Decrease volume", "Increase volume", "Toggle jukebox", "Weapon 1", "Weapon 2", "Weapon 3", "Weapon 4", "Weapon 5", "Weapon 6", "Weapon 7", "Weapon 8", "Weapon 9", "Weapon 0", "Spawn", "Next weapon", "Previous weapon", "Insert bookmark", "Change focus", "Toggle fullscreen", "Show FPS", "Limit FPS" }; KeyboardConfig::KeyboardConfig() { KeyTable::initializeTable(); // set all keys to default values key[LEFT] = SDLK_LEFT; key[RIGHT] = SDLK_RIGHT; key[DOWN] = SDLK_DOWN; key[UP] = SDLK_UP; key[SHOOT] = SDLK_LCTRL; key[JUMP] = SDLK_LSHIFT; key[DIG] = SDLK_LALT; key[JET] = SDLK_f; key[ROPE_ON] = SDLK_z; key[ROPE_OFF] = SDLK_x; key[ROPE_IN] = SDLK_a; key[ROPE_OUT] = SDLK_s; key[ROPE_REL] = SDLK_d; key[SCREENSHOT] = SDLK_o; key[DEBUG] = SDLK_F12; key[DEC_VOL] = SDLK_F5; key[INC_VOL] = SDLK_F6; key[TOGGLE_JUKEBOX] = SDLK_F7; key[WEAPON1] = SDLK_1; key[WEAPON2] = SDLK_2; key[WEAPON3] = SDLK_3; key[WEAPON4] = SDLK_4; key[WEAPON5] = SDLK_5; key[WEAPON6] = SDLK_6; key[WEAPON7] = SDLK_7; key[WEAPON8] = SDLK_8; key[WEAPON9] = SDLK_9; key[WEAPON0] = SDLK_0; key[SPAWN] = SDLK_SPACE; key[NEXT_WEAPON] = SDLK_c; key[PREV_WEAPON] = SDLK_v; key[INSERT_REPLAY_BOOKMARK] = SDLK_F11; key[CHANGE_FOCUS] = SDLK_F10; key[TOGGLE_FULLSCREEN] = SDLK_t; key[SHOW_FPS] = SDLK_F9; key[LIMIT_FPS] = SDLK_F8; } void KeyboardConfig::readSettings( WopSettings* settings ) { readSetting( settings, "key_left", key[LEFT] ); readSetting( settings, "key_right", key[RIGHT] ); readSetting( settings, "key_up", key[UP] ); readSetting( settings, "key_down", key[DOWN] ); readSetting( settings, "key_shoot", key[SHOOT] ); readSetting( settings, "key_jump", key[JUMP] ); readSetting( settings, "key_dig", key[DIG] ); readSetting( settings, "key_jet", key[JET] ); readSetting( settings, "key_rope_on", key[ROPE_ON] ); readSetting( settings, "key_rope_off", key[ROPE_OFF] ); readSetting( settings, "key_rope_in", key[ROPE_IN] ); readSetting( settings, "key_rope_out", key[ROPE_OUT] ); readSetting( settings, "key_rope_rel", key[ROPE_REL] ); readSetting( settings, "key_screenshot", key[SCREENSHOT] ); readSetting( settings, "key_debug", key[DEBUG] ); readSetting( settings, "key_dec_vol", key[DEC_VOL] ); readSetting( settings, "key_inc_vol", key[INC_VOL] ); readSetting( settings, "key_toggle_jukebox", key[TOGGLE_JUKEBOX] ); readSetting( settings, "key_weapon_1", key[WEAPON1] ); readSetting( settings, "key_weapon_2", key[WEAPON2] ); readSetting( settings, "key_weapon_3", key[WEAPON3] ); readSetting( settings, "key_weapon_4", key[WEAPON4] ); readSetting( settings, "key_weapon_5", key[WEAPON5] ); readSetting( settings, "key_weapon_6", key[WEAPON6] ); readSetting( settings, "key_weapon_7", key[WEAPON7] ); readSetting( settings, "key_weapon_8", key[WEAPON8] ); readSetting( settings, "key_weapon_9", key[WEAPON9] ); readSetting( settings, "key_weapon_0", key[WEAPON0] ); readSetting( settings, "key_spawn", key[SPAWN] ); readSetting( settings, "key_next_weapon", key[NEXT_WEAPON] ); readSetting( settings, "key_prev_weapon", key[PREV_WEAPON] ); readSetting( settings, "key_insert_replay_bookmark", key[INSERT_REPLAY_BOOKMARK] ); readSetting( settings, "key_change_focus", key[CHANGE_FOCUS] ); readSetting( settings, "key_toggle_fullscreen", key[TOGGLE_FULLSCREEN] ); readSetting( settings, "key_show_fps", key[SHOW_FPS] ); readSetting( settings, "key_limit_fps", key[LIMIT_FPS] ); } void KeyboardConfig::writeSettings( WopSettings* settings ) const { writeSetting( settings, "key_left", key[LEFT] ); writeSetting( settings, "key_right", key[RIGHT] ); writeSetting( settings, "key_up", key[UP] ); writeSetting( settings, "key_down", key[DOWN] ); writeSetting( settings, "key_shoot", key[SHOOT] ); writeSetting( settings, "key_jump", key[JUMP] ); writeSetting( settings, "key_dig", key[DIG] ); writeSetting( settings, "key_jet", key[JET] ); writeSetting( settings, "key_rope_on", key[ROPE_ON] ); writeSetting( settings, "key_rope_off", key[ROPE_OFF] ); writeSetting( settings, "key_rope_in", key[ROPE_IN] ); writeSetting( settings, "key_rope_out", key[ROPE_OUT] ); writeSetting( settings, "key_rope_rel", key[ROPE_REL] ); writeSetting( settings, "key_screenshot", key[SCREENSHOT] ); writeSetting( settings, "key_debug", key[DEBUG] ); writeSetting( settings, "key_dec_vol", key[DEC_VOL] ); writeSetting( settings, "key_inc_vol", key[INC_VOL] ); writeSetting( settings, "key_toggle_jukebox", key[TOGGLE_JUKEBOX] ); writeSetting( settings, "key_weapon_1", key[WEAPON1] ); writeSetting( settings, "key_weapon_2", key[WEAPON2] ); writeSetting( settings, "key_weapon_3", key[WEAPON3] ); writeSetting( settings, "key_weapon_4", key[WEAPON4] ); writeSetting( settings, "key_weapon_5", key[WEAPON5] ); writeSetting( settings, "key_weapon_6", key[WEAPON6] ); writeSetting( settings, "key_weapon_7", key[WEAPON7] ); writeSetting( settings, "key_weapon_8", key[WEAPON8] ); writeSetting( settings, "key_weapon_9", key[WEAPON9] ); writeSetting( settings, "key_weapon_0", key[WEAPON0] ); writeSetting( settings, "key_spawn", key[SPAWN] ); writeSetting( settings, "key_next_weapon", key[NEXT_WEAPON] ); writeSetting( settings, "key_prev_weapon", key[PREV_WEAPON] ); writeSetting( settings, "key_insert_replay_bookmark", key[INSERT_REPLAY_BOOKMARK] ); writeSetting( settings, "key_change_focus", key[CHANGE_FOCUS] ); writeSetting( settings, "key_toggle_fullscreen", key[TOGGLE_FULLSCREEN] ); writeSetting( settings, "key_show_fps", key[SHOW_FPS] ); writeSetting( settings, "key_limit_fps", key[LIMIT_FPS] ); } void KeyboardConfig::readSetting( WopSettings* settings, const char* settingName, SDLKey& keyValue ) { Setting *setting = settings->getSetting( settingName ); if( setting ) { SDLKey keycode = KeyTable::getKeyByName( setting->getString() ); if ( keycode != SDLK_LAST ) keyValue = keycode; } else { settings->setKey( settingName, KeyTable::getKeyName( keyValue ) ); } } void KeyboardConfig::writeSetting( WopSettings* settings, const char* settingName, SDLKey keyValue ) const { settings->setKey( settingName, KeyTable::getKeyName( keyValue ) ); }