Open Source Tomb Raider Engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CommandBind.cpp 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. /*!
  2. * \file src/commands/CommandBind.cpp
  3. * \brief Bind command
  4. *
  5. * \author xythobuz
  6. */
  7. #include "global.h"
  8. #include "Console.h"
  9. #include "OpenRaider.h"
  10. #include "commands/CommandBind.h"
  11. std::string CommandBind::name() {
  12. return "bind";
  13. }
  14. std::string CommandBind::brief() {
  15. return "bind a keyboard/mouse action";
  16. }
  17. void CommandBind::printHelp() {
  18. getConsole() << "bind-Command Usage:" << Console::endl;
  19. getConsole() << " bind ACTION KEY" << Console::endl;
  20. getConsole() << "Available Actions:" << Console::endl;
  21. getConsole() << " menu" << Console::endl;
  22. getConsole() << " console" << Console::endl;
  23. getConsole() << " debug" << Console::endl;
  24. getConsole() << " forward" << Console::endl;
  25. getConsole() << " backward" << Console::endl;
  26. getConsole() << " left" << Console::endl;
  27. getConsole() << " right" << Console::endl;
  28. getConsole() << " jump" << Console::endl;
  29. getConsole() << " crouch" << Console::endl;
  30. getConsole() << " use" << Console::endl;
  31. getConsole() << " holster" << Console::endl;
  32. getConsole() << " walk" << Console::endl;
  33. getConsole() << "Key-Format:" << Console::endl;
  34. getConsole() << " 'a' or '1' for character/number keys" << Console::endl;
  35. getConsole() << " \"leftctrl\" for symbols and special keys" << Console::endl;
  36. }
  37. int CommandBind::execute(std::istream& args) {
  38. std::string a, b;
  39. if (!(args >> a >> b)) {
  40. getConsole() << "Invalid use of bind-command" << Console::endl;
  41. return -1;
  42. } else {
  43. ActionEvents e = stringToActionEvent(a);
  44. if (e == ActionEventCount) {
  45. getConsole() << "bind-Error: Unknown action (" << a << ")" << Console::endl;
  46. return -2;
  47. }
  48. KeyboardButton c = stringToKeyboardButton(b);
  49. if (c == unknownKey) {
  50. getConsole() << "bind-Error: Unknown key (" << b << ")" << Console::endl;
  51. return -3;
  52. }
  53. getOpenRaider().keyBindings[e] = c;
  54. return 0;
  55. }
  56. }
  57. ActionEvents CommandBind::stringToActionEvent(std::string action) {
  58. if (action == "menu") {
  59. return menuAction;
  60. } else if (action == "console") {
  61. return consoleAction;
  62. } else if (action == "debug") {
  63. return debugAction;
  64. } else if (action == "forward") {
  65. return forwardAction;
  66. } else if (action == "backward") {
  67. return backwardAction;
  68. } else if (action == "left") {
  69. return leftAction;
  70. } else if (action == "right") {
  71. return rightAction;
  72. } else if (action == "jump") {
  73. return jumpAction;
  74. } else if (action == "crouch") {
  75. return crouchAction;
  76. } else if (action == "use") {
  77. return useAction;
  78. } else if (action == "holster") {
  79. return holsterAction;
  80. } else if (action == "walk") {
  81. return walkAction;
  82. } else {
  83. return ActionEventCount;
  84. }
  85. }
  86. KeyboardButton CommandBind::stringToKeyboardButton(std::string key) {
  87. if ((key.length() == 3) && (key[0] == '\'') && (key[2] == '\'')) {
  88. // Literal character like w, a, s, d, 0, 1...
  89. char c = key[1];
  90. if (((c >= '0') && (c <= '9'))
  91. || ((c >= 'a') && (c <= 'z')))
  92. return (KeyboardButton)c;
  93. } else if ((key.length() >= 3) && (key[0] == '\"') && (key[key.length() - 1] == '\"')) {
  94. // Special characters like tilde, esc, quote...
  95. key.erase(key.length() - 1); // Delete " at end
  96. key.erase(0, 1); // Delete " at beginning
  97. if (key == "quote") {
  98. return quoteKey;
  99. } else if (key == "backslash") {
  100. return backslashKey;
  101. } else if (key == "backspace") {
  102. return backspaceKey;
  103. } else if (key == "capslock") {
  104. return capslockKey;
  105. } else if (key == "comma") {
  106. return commaKey;
  107. } else if (key == "del") {
  108. return delKey;
  109. } else if (key == "up") {
  110. return upKey;
  111. } else if (key == "down") {
  112. return downKey;
  113. } else if (key == "left") {
  114. return leftKey;
  115. } else if (key == "right") {
  116. return rightKey;
  117. } else if (key == "end") {
  118. return endKey;
  119. } else if (key == "equals") {
  120. return equalsKey;
  121. } else if (key == "escape") {
  122. return escapeKey;
  123. } else if (key == "f1") {
  124. return f1Key;
  125. } else if (key == "f2") {
  126. return f2Key;
  127. } else if (key == "f3") {
  128. return f3Key;
  129. } else if (key == "f4") {
  130. return f4Key;
  131. } else if (key == "f5") {
  132. return f5Key;
  133. } else if (key == "f6") {
  134. return f6Key;
  135. } else if (key == "f7") {
  136. return f7Key;
  137. } else if (key == "f8") {
  138. return f8Key;
  139. } else if (key == "f9") {
  140. return f9Key;
  141. } else if (key == "f10") {
  142. return f10Key;
  143. } else if (key == "f11") {
  144. return f11Key;
  145. } else if (key == "f12") {
  146. return f12Key;
  147. } else if (key == "backquote") {
  148. return backquoteKey;
  149. } else if (key == "home") {
  150. return homeKey;
  151. } else if (key == "insert") {
  152. return insertKey;
  153. } else if (key == "leftalt") {
  154. return leftaltKey;
  155. } else if (key == "leftctrl") {
  156. return leftctrlKey;
  157. } else if (key == "leftbracket") {
  158. return leftbracketKey;
  159. } else if (key == "leftgui") {
  160. return leftguiKey;
  161. } else if (key == "leftshift") {
  162. return leftshiftKey;
  163. } else if (key == "minus") {
  164. return minusKey;
  165. } else if (key == "numlock") {
  166. return numlockKey;
  167. } else if (key == "pagedown") {
  168. return pagedownKey;
  169. } else if (key == "pageup") {
  170. return pageupKey;
  171. } else if (key == "pause") {
  172. return pauseKey;
  173. } else if (key == "dot") {
  174. return dotKey;
  175. } else if (key == "rightalt") {
  176. return rightaltKey;
  177. } else if (key == "rightctrl") {
  178. return rightctrlKey;
  179. } else if (key == "enter") {
  180. return enterKey;
  181. } else if (key == "rightgui") {
  182. return rightguiKey;
  183. } else if (key == "rightbracket") {
  184. return rightbracketKey;
  185. } else if (key == "rightshift") {
  186. return rightshiftKey;
  187. } else if (key == "scrolllock") {
  188. return scrolllockKey;
  189. } else if (key == "semicolon") {
  190. return semicolonKey;
  191. } else if (key == "slash") {
  192. return slashKey;
  193. } else if (key == "space") {
  194. return spaceKey;
  195. } else if (key == "tab") {
  196. return tabKey;
  197. } else if (key == "leftmouse") {
  198. return leftmouseKey;
  199. } else if (key == "middlemouse") {
  200. return middlemouseKey;
  201. } else if (key == "rightmouse") {
  202. return rightmouseKey;
  203. } else if (key == "fourthmouse") {
  204. return fourthmouseKey;
  205. } else if (key == "fifthmouse") {
  206. return fifthmouseKey;
  207. }
  208. }
  209. return unknownKey;
  210. }