diff options
Diffstat (limited to 'src/keyboardconfig.cpp')
-rw-r--r-- | src/keyboardconfig.cpp | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp index 9ae7ed68..d7288796 100644 --- a/src/keyboardconfig.cpp +++ b/src/keyboardconfig.cpp @@ -19,8 +19,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "keyboardconfig.h" +#include <guichan/sdl/sdlinput.hpp> + #include "configuration.h" +#include "keyboardconfig.h" #include "log.h" #include "gui/setup_keyboard.h" @@ -40,13 +42,14 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyMoveRight", SDLK_RIGHT, "Move Right"}, {"keyAttack", SDLK_LCTRL, "Attack"}, {"keySmilie", SDLK_LALT, "Smilie"}, - {"keyTarget", SDLK_LSHIFT, "Target"}, + {"keyTalk", SDLK_t, "Talk"}, + {"keyTarget", SDLK_LSHIFT, "Stop Attack"}, {"keyTargetClosest", SDLK_a, "Target Closest"}, + {"keyTargetNPC", SDLK_n, "Target NPC"}, {"keyTargetPlayer", SDLK_q, "Target Player"}, {"keyPickup", SDLK_z, "Pickup"}, {"keyHideWindows", SDLK_h, "Hide Windows"}, {"keyBeingSit", SDLK_s, "Sit"}, - {"keyShortcut0", SDLK_0, "Item Shortcut 0"}, {"keyShortcut1", SDLK_1, "Item Shortcut 1"}, {"keyShortcut2", SDLK_2, "Item Shortcut 2"}, {"keyShortcut3", SDLK_3, "Item Shortcut 3"}, @@ -56,6 +59,9 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyShortcut7", SDLK_7, "Item Shortcut 7"}, {"keyShortcut8", SDLK_8, "Item Shortcut 8"}, {"keyShortcut9", SDLK_9, "Item Shortcut 9"}, + {"keyShortcut10", SDLK_0, "Item Shortcut 10"}, + {"keyShortcut11", SDLK_MINUS, "Item Shortcut 11"}, + {"keyShortcut12", SDLK_EQUALS, "Item Shortcut 12"}, {"keyWindowStatus", SDLK_F2, "Status Window"}, {"keyWindowInventory", SDLK_F3, "Inventory Window"}, {"keyWindowEquipment", SDLK_F4, "Equipment WIndow"}, @@ -64,7 +70,21 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyWindowChat", SDLK_F7, "Chat Window"}, {"keyWindowShortcut", SDLK_F8, "Item Shortcut Window"}, {"keyWindowSetup", SDLK_F9, "Setup Window"}, - {"keyWindowDebug", SDLK_F10, "Debug Window"} + {"keyWindowDebug", SDLK_F10, "Debug Window"}, + {"keyWindowEmote", SDLK_F11, "Emote Window"}, + {"keyWindowEmoteBar", SDLK_F12, "Emote Shortcut Window"}, + {"keyEmoteShortcut1", SDLK_1, "Emote Shortcut 1"}, + {"keyEmoteShortcut2", SDLK_2, "Emote Shortcut 2"}, + {"keyEmoteShortcut3", SDLK_3, "Emote Shortcut 3"}, + {"keyEmoteShortcut4", SDLK_4, "Emote Shortcut 4"}, + {"keyEmoteShortcut5", SDLK_5, "Emote Shortcut 5"}, + {"keyEmoteShortcut6", SDLK_6, "Emote Shortcut 6"}, + {"keyEmoteShortcut7", SDLK_7, "Emote Shortcut 7"}, + {"keyEmoteShortcut8", SDLK_8, "Emote Shortcut 8"}, + {"keyEmoteShortcut9", SDLK_9, "Emote Shortcut 9"}, + {"keyEmoteShortcut10", SDLK_0, "Emote Shortcut 10"}, + {"keyEmoteShortcut11", SDLK_MINUS, "Emote Shortcut 11"}, + {"keyEmoteShortcut12", SDLK_EQUALS, "Emote Shortcut 12"} }; void KeyboardConfig::init() @@ -110,11 +130,19 @@ void KeyboardConfig::makeDefault() bool KeyboardConfig::hasConflicts() { int i, j; +/** + * No need to parse the square matrix: only check one triangle + * that's enough to detect conflicts + */ for (i = 0; i < KEY_TOTAL; i++) { - for (j = 0; j < KEY_TOTAL; j++) + for (j = i, j++; j < KEY_TOTAL; j++) { - if (i != j && mKey[i].value == mKey[j].value) + // Allow for item shortcut and emote keys to overlap, but no other keys + if (!(((i >= KEY_SHORTCUT_1) && (i <= KEY_SHORTCUT_12)) && + ((j >= KEY_EMOTE_1) && (j <= KEY_EMOTE_12))) + && mKey[i].value == mKey[j].value + ) { return true; } @@ -140,6 +168,19 @@ int KeyboardConfig::getKeyIndex(int keyValue) const return KEY_NO_VALUE; } + +int KeyboardConfig::getKeyEmoteOffset(int keyValue) const +{ + for (int i = KEY_EMOTE_1; i <= KEY_EMOTE_12; i++) + { + if(keyValue == mKey[i].value) + { + return 1 + i - KEY_EMOTE_1; + } + } + return 0; +} + bool KeyboardConfig::isKeyActive(int index) { return mActiveKeys[ mKey[index].value]; |