summaryrefslogtreecommitdiff
path: root/src/keyboardconfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/keyboardconfig.cpp')
-rw-r--r--src/keyboardconfig.cpp53
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];