513 lines
14 KiB
C++
Executable File
513 lines
14 KiB
C++
Executable File
/***************************************************************************
|
|
* Copyright (C) 2001-2023 by Tom Hicks *
|
|
* headhunter3@gmail.com *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
#include "keys.h"
|
|
|
|
#include <string>
|
|
|
|
using std::string;
|
|
|
|
char OpenArena::KeyToASCII(Keys key, bool shift) {
|
|
if (key == KEY_UNKNOWN) {
|
|
return '\0';
|
|
} else {
|
|
switch (key) {
|
|
case KEY_OEM_1:
|
|
if (shift) {
|
|
return ':';
|
|
} else {
|
|
return ';';
|
|
}
|
|
case KEY_OEM_2:
|
|
if (shift) {
|
|
return '?';
|
|
} else {
|
|
return '/';
|
|
}
|
|
case KEY_OEM_3:
|
|
if (shift) {
|
|
return '~';
|
|
} else {
|
|
return '`';
|
|
}
|
|
case KEY_OEM_4:
|
|
if (shift) {
|
|
return '{';
|
|
} else {
|
|
return '[';
|
|
}
|
|
case KEY_OEM_5:
|
|
if (shift) {
|
|
return '|';
|
|
} else {
|
|
return '\\';
|
|
}
|
|
case KEY_OEM_6:
|
|
if (shift) {
|
|
return '}';
|
|
} else {
|
|
return ']';
|
|
}
|
|
case KEY_OEM_7:
|
|
if (shift) {
|
|
return '\'';
|
|
} else {
|
|
return '"';
|
|
}
|
|
case KEY_OEM_PERIOD:
|
|
if (shift) {
|
|
return '>';
|
|
} else {
|
|
return '.';
|
|
}
|
|
case KEY_OEM_PLUS:
|
|
if (shift) {
|
|
return '+';
|
|
} else {
|
|
return '=';
|
|
}
|
|
case KEY_OEM_COMMA:
|
|
if (shift) {
|
|
return '<';
|
|
} else {
|
|
return ',';
|
|
}
|
|
case KEY_OEM_MINUS:
|
|
if (shift) {
|
|
return '_';
|
|
} else {
|
|
return '-';
|
|
}
|
|
default:
|
|
if (key >= KEY_A && key <= KEY_Z) {
|
|
if (shift) {
|
|
return key - KEY_A + 'A';
|
|
} else {
|
|
return key - KEY_A + 'a';
|
|
}
|
|
} else if (key >= KEY_0 && key <= KEY_9) {
|
|
if (shift) {
|
|
switch (key - KEY_0) {
|
|
case 0:
|
|
return ')';
|
|
case 1:
|
|
return '!';
|
|
case 2:
|
|
return '@';
|
|
case 3:
|
|
return '#';
|
|
case 4:
|
|
return '$';
|
|
case 5:
|
|
return '%';
|
|
case 6:
|
|
return '^';
|
|
case 7:
|
|
return '&';
|
|
case 8:
|
|
return '*';
|
|
case 9:
|
|
return '(';
|
|
}
|
|
} else {
|
|
return key - KEY_0 + '0';
|
|
}
|
|
} else {
|
|
return '\0';
|
|
}
|
|
}
|
|
}
|
|
return '\0';
|
|
}
|
|
|
|
const char* OpenArena::GetKeyName(Keys key) {
|
|
switch (key) {
|
|
case KEY_UNKNOWN:
|
|
return "unknown";
|
|
case KEY_BUTTON0:
|
|
return "button0";
|
|
case KEY_BUTTON1:
|
|
return "button1";
|
|
case KEY_BUTTON2:
|
|
return "button2";
|
|
case KEY_BUTTON3:
|
|
return "button3";
|
|
case KEY_BUTTON4:
|
|
return "button4";
|
|
case KEY_LEFT:
|
|
return "left";
|
|
case KEY_RIGHT:
|
|
return "right";
|
|
case KEY_UP:
|
|
return "up";
|
|
case KEY_DOWN:
|
|
return "down";
|
|
case KEY_SPACE:
|
|
return "space";
|
|
case KEY_RETURN:
|
|
return "return";
|
|
case KEY_SHIFT:
|
|
return "shift";
|
|
case KEY_PAUSE:
|
|
return "pause";
|
|
case KEY_CONTROL:
|
|
return "ctrl";
|
|
case KEY_CAPITAL:
|
|
return "caps";
|
|
case KEY_ESCAPE:
|
|
return "esc";
|
|
case KEY_PRIOR:
|
|
return "pgup";
|
|
case KEY_NEXT:
|
|
return "pgdn";
|
|
case KEY_END:
|
|
return "end";
|
|
case KEY_HOME:
|
|
return "home";
|
|
case KEY_INSERT:
|
|
return "insert";
|
|
case KEY_DELETE:
|
|
return "del";
|
|
case KEY_LWIN:
|
|
return "leftwin";
|
|
case KEY_RWIN:
|
|
return "rightwin";
|
|
case KEY_APPS:
|
|
return "apps";
|
|
case KEY_NUMPAD0:
|
|
return "kp0";
|
|
case KEY_NUMPAD1:
|
|
return "kp1";
|
|
case KEY_NUMPAD2:
|
|
return "kp2";
|
|
case KEY_NUMPAD3:
|
|
return "kp3";
|
|
case KEY_NUMPAD4:
|
|
return "kp4";
|
|
case KEY_NUMPAD5:
|
|
return "kp5";
|
|
case KEY_NUMPAD6:
|
|
return "kp6";
|
|
case KEY_NUMPAD7:
|
|
return "kp7";
|
|
case KEY_NUMPAD8:
|
|
return "kp8";
|
|
case KEY_NUMPAD9:
|
|
return "kp9";
|
|
case KEY_MULTIPLY:
|
|
return "multiply";
|
|
case KEY_ADD:
|
|
return "plus";
|
|
case KEY_SUBTRACT:
|
|
return "minus";
|
|
case KEY_DIVIDE:
|
|
return "divide";
|
|
case KEY_F1:
|
|
return "f1";
|
|
case KEY_F2:
|
|
return "f2";
|
|
case KEY_F3:
|
|
return "f3";
|
|
case KEY_F4:
|
|
return "f4";
|
|
case KEY_F5:
|
|
return "f5";
|
|
case KEY_F6:
|
|
return "f6";
|
|
case KEY_F7:
|
|
return "f7";
|
|
case KEY_F8:
|
|
return "f8";
|
|
case KEY_F9:
|
|
return "f9";
|
|
case KEY_F10:
|
|
return "f10";
|
|
case KEY_F11:
|
|
return "f11";
|
|
case KEY_F12:
|
|
return "f12";
|
|
case KEY_NUMLOCK:
|
|
return "numlock";
|
|
case KEY_SCROLL:
|
|
return "scrolllock";
|
|
case KEY_SEPARATOR:
|
|
return "_separator";
|
|
case KEY_OEM_1:
|
|
return "semicolon";
|
|
case KEY_OEM_2:
|
|
return "slash";
|
|
case KEY_OEM_3:
|
|
return "tilde";
|
|
case KEY_OEM_4:
|
|
return "leftbracket";
|
|
case KEY_OEM_5:
|
|
return "backslash";
|
|
case KEY_OEM_6:
|
|
return "rightbracket";
|
|
case KEY_OEM_7:
|
|
return "quote";
|
|
case KEY_OEM_PERIOD:
|
|
return "period";
|
|
case KEY_OEM_PLUS:
|
|
return "equals";
|
|
case KEY_OEM_MINUS:
|
|
return "minus";
|
|
case KEY_OEM_COMMA:
|
|
return "comma";
|
|
case KEY_BACK:
|
|
return "backspace";
|
|
case KEY_TAB:
|
|
return "tab";
|
|
case KEY_0:
|
|
return "0";
|
|
case KEY_1:
|
|
return "1";
|
|
case KEY_2:
|
|
return "2";
|
|
case KEY_3:
|
|
return "3";
|
|
case KEY_4:
|
|
return "4";
|
|
case KEY_5:
|
|
return "5";
|
|
case KEY_6:
|
|
return "6";
|
|
case KEY_7:
|
|
return "7";
|
|
case KEY_8:
|
|
return "8";
|
|
case KEY_9:
|
|
return "9";
|
|
case KEY_A:
|
|
return "a";
|
|
case KEY_B:
|
|
return "b";
|
|
case KEY_C:
|
|
return "c";
|
|
case KEY_D:
|
|
return "d";
|
|
case KEY_E:
|
|
return "e";
|
|
case KEY_F:
|
|
return "f";
|
|
case KEY_G:
|
|
return "g";
|
|
case KEY_H:
|
|
return "h";
|
|
case KEY_I:
|
|
return "i";
|
|
case KEY_J:
|
|
return "j";
|
|
case KEY_K:
|
|
return "k";
|
|
case KEY_L:
|
|
return "l";
|
|
case KEY_M:
|
|
return "m";
|
|
case KEY_N:
|
|
return "n";
|
|
case KEY_O:
|
|
return "o";
|
|
case KEY_P:
|
|
return "p";
|
|
case KEY_Q:
|
|
return "q";
|
|
case KEY_R:
|
|
return "r";
|
|
case KEY_S:
|
|
return "s";
|
|
case KEY_T:
|
|
return "t";
|
|
case KEY_U:
|
|
return "u";
|
|
case KEY_V:
|
|
return "v";
|
|
case KEY_W:
|
|
return "w";
|
|
case KEY_X:
|
|
return "x";
|
|
case KEY_Y:
|
|
return "y";
|
|
case KEY_Z:
|
|
return "z";
|
|
case KEY_ALT_L:
|
|
return "leftalt";
|
|
case KEY_ALT_R:
|
|
return "rightalt";
|
|
case KEY_COMMAND:
|
|
return "command";
|
|
case KEY_ENTER:
|
|
return "enter";
|
|
case KEY_OPTION:
|
|
return "option";
|
|
}
|
|
|
|
return "invalid";
|
|
}
|
|
|
|
OpenArena::Keys OpenArena::GetKey(const char* keyName) {
|
|
string str = keyName;
|
|
if (str.length() > 1) {
|
|
if (str.substr(0, 2) == "up")
|
|
return OpenArena::KEY_UP;
|
|
else if (str.substr(0, 4) == "down")
|
|
return OpenArena::KEY_DOWN;
|
|
else if (str.substr(0, 3) == "esc")
|
|
return OpenArena::KEY_ESCAPE;
|
|
else if (str.substr(0, 6) == "pageup")
|
|
return OpenArena::KEY_PRIOR;
|
|
else if (str.substr(0, 8) == "pagedown")
|
|
return OpenArena::KEY_NEXT;
|
|
else if (str.substr(0, 5) == "right")
|
|
return OpenArena::KEY_RIGHT;
|
|
else if (str.substr(0, 4) == "left")
|
|
return OpenArena::KEY_LEFT;
|
|
else if (str.substr(0, 5) == "space")
|
|
return OpenArena::KEY_SPACE;
|
|
else if (str.substr(0, 6) == "mouse1")
|
|
return OpenArena::KEY_LBUTTON;
|
|
else if (str.substr(0, 6) == "mouse2")
|
|
return OpenArena::KEY_RBUTTON;
|
|
else if (str.substr(0, 6) == "mouse3")
|
|
return OpenArena::KEY_MBUTTON;
|
|
else if (str.substr(0, 4) == "home")
|
|
return OpenArena::KEY_HOME;
|
|
else if (str.substr(0, 3) == "end")
|
|
return OpenArena::KEY_END;
|
|
else if (str.substr(0, 3) == "tab")
|
|
return OpenArena::KEY_TAB;
|
|
else if (str.substr(0, 5) == "enter")
|
|
return OpenArena::KEY_RETURN;
|
|
else if (str.substr(0, 6) == "insert")
|
|
return OpenArena::KEY_INSERT;
|
|
else if (str.substr(0, 6) == "delete")
|
|
return OpenArena::KEY_DELETE;
|
|
else if (str.substr(0, 7) == "control")
|
|
return OpenArena::KEY_CONTROL;
|
|
else if (str.substr(0, 5) == "shift")
|
|
return OpenArena::KEY_SHIFT;
|
|
else if (str.substr(0, 7) == "numpad0")
|
|
return OpenArena::KEY_NUMPAD0;
|
|
else if (str.substr(0, 7) == "numpad1")
|
|
return OpenArena::KEY_NUMPAD1;
|
|
else if (str.substr(0, 7) == "numpad2")
|
|
return OpenArena::KEY_NUMPAD2;
|
|
else if (str.substr(0, 7) == "numpad3")
|
|
return OpenArena::KEY_NUMPAD3;
|
|
else if (str.substr(0, 7) == "numpad4")
|
|
return OpenArena::KEY_NUMPAD4;
|
|
else if (str.substr(0, 7) == "numpad5")
|
|
return OpenArena::KEY_NUMPAD5;
|
|
else if (str.substr(0, 7) == "numpad6")
|
|
return OpenArena::KEY_NUMPAD6;
|
|
else if (str.substr(0, 7) == "numpad7")
|
|
return OpenArena::KEY_NUMPAD7;
|
|
else if (str.substr(0, 7) == "numpad8")
|
|
return OpenArena::KEY_NUMPAD8;
|
|
else if (str.substr(0, 7) == "numpad9")
|
|
return OpenArena::KEY_NUMPAD9;
|
|
else if (str.substr(0, 9) == "separator")
|
|
return OpenArena::KEY_SEPARATOR;
|
|
else if (str.substr(0, 4) == "lwin")
|
|
return OpenArena::KEY_LWIN;
|
|
else if (str.substr(0, 4) == "rwin")
|
|
return OpenArena::KEY_RWIN;
|
|
else if (str.substr(0, 4) == "apps")
|
|
return OpenArena::KEY_APPS;
|
|
else if (str.substr(0, 7) == "numpad*")
|
|
return OpenArena::KEY_MULTIPLY;
|
|
else if (str.substr(0, 7) == "numpad+")
|
|
return OpenArena::KEY_ADD;
|
|
else if (str.substr(0, 7) == "numpad/")
|
|
return OpenArena::KEY_DIVIDE;
|
|
else if (str.substr(0, 7) == "numpad-")
|
|
return OpenArena::KEY_SUBTRACT;
|
|
else if (str.substr(0, 6) == "scroll")
|
|
return OpenArena::KEY_SCROLL;
|
|
else if (str.substr(0, 7) == "numlock")
|
|
return OpenArena::KEY_NUMLOCK;
|
|
else if (str.substr(0, 5) == "pause")
|
|
return OpenArena::KEY_PAUSE;
|
|
else if (str.substr(0, 8) == "capslock")
|
|
return OpenArena::KEY_CAPITAL;
|
|
|
|
/*uncomment this to enable f1 as a mappable key
|
|
else if(str.substr(0,2) == "f1")
|
|
return OpenArena::KEY_F1;
|
|
*/
|
|
|
|
else if (str.substr(0, 2) == "f2")
|
|
return OpenArena::KEY_F2;
|
|
else if (str.substr(0, 2) == "f3")
|
|
return OpenArena::KEY_F3;
|
|
else if (str.substr(0, 2) == "f4")
|
|
return OpenArena::KEY_F4;
|
|
else if (str.substr(0, 2) == "f5")
|
|
return OpenArena::KEY_F5;
|
|
else if (str.substr(0, 2) == "f6")
|
|
return OpenArena::KEY_F6;
|
|
else if (str.substr(0, 2) == "f7")
|
|
return OpenArena::KEY_F7;
|
|
else if (str.substr(0, 2) == "f8")
|
|
return OpenArena::KEY_F8;
|
|
else if (str.substr(0, 2) == "f9")
|
|
return OpenArena::KEY_F9;
|
|
else if (str.substr(0, 2) == "f10")
|
|
return OpenArena::KEY_F10;
|
|
else if (str.substr(0, 2) == "f11")
|
|
return OpenArena::KEY_F11;
|
|
else if (str.substr(0, 2) == "f12")
|
|
return OpenArena::KEY_F12;
|
|
// Add Game specific keys here and e-mail headhunter45@hotmail.com subject OpenArena keys so I can add them please
|
|
else if (str.substr(0, 4) == "null")
|
|
return OpenArena::KEY_UNKNOWN;
|
|
else
|
|
return OpenArena::KEY_UNKNOWN;
|
|
} else {
|
|
if (str[0] == '~' || str[0] == '`')
|
|
return OpenArena::KEY_OEM_3;
|
|
else if (str[0] == '?' || str[0] == '/')
|
|
return OpenArena::KEY_OEM_2;
|
|
else if (str[0] == '.' || str[0] == '>')
|
|
return OpenArena::KEY_OEM_PERIOD;
|
|
else if (str[0] == '+' || str[0] == '=')
|
|
return OpenArena::KEY_OEM_PLUS;
|
|
else if (str[0] == ';' || str[0] == ':')
|
|
return OpenArena::KEY_OEM_1;
|
|
else if (str[0] == ',' || str[0] == '<')
|
|
return OpenArena::KEY_OEM_COMMA;
|
|
else if (str[0] == '-' || str[0] == '_')
|
|
return OpenArena::KEY_OEM_MINUS;
|
|
else if (str[0] == '[' || str[0] == '{')
|
|
return OpenArena::KEY_OEM_4;
|
|
else if (str[0] == ']' || str[0] == '}')
|
|
return OpenArena::KEY_OEM_6;
|
|
else if (str[0] == '\\' || str[0] == '|')
|
|
return OpenArena::KEY_OEM_5;
|
|
else if (str[0] == '\'' || str[0] == '"')
|
|
return OpenArena::KEY_OEM_7;
|
|
else if (isalpha(str[0]))
|
|
return (OpenArena::Keys)(toupper(str[0]) - 'A' + OpenArena::KEY_A);
|
|
else if (isdigit(str[0]))
|
|
return (OpenArena::Keys)(str[0] - '0' + OpenArena::KEY_0);
|
|
else
|
|
return OpenArena::KEY_UNKNOWN;
|
|
}
|
|
} // End namespace OpenArena
|