Changed: Console (ingame) now works
~g2k
This commit is contained in:
@@ -113,5 +113,6 @@ namespace OpenArena
|
||||
const unsigned int KEY_LBUTTON = KEY_BUTTON0;
|
||||
const unsigned int KEY_RBUTTON = KEY_BUTTON1;
|
||||
const unsigned int KEY_MBUTTON = KEY_BUTTON2;
|
||||
char KeyToASCII(Keys key, bool shift);
|
||||
};
|
||||
#endif
|
||||
|
||||
174
src/keys.cpp
Normal file
174
src/keys.cpp
Normal file
@@ -0,0 +1,174 @@
|
||||
#include "../include/keys.h"
|
||||
|
||||
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 ';';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_2:
|
||||
if(shift)
|
||||
{
|
||||
return '?';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '/';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_3:
|
||||
if(shift)
|
||||
{
|
||||
return '~';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '`';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_4:
|
||||
if(shift)
|
||||
{
|
||||
return '{';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '[';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_5:
|
||||
if(shift)
|
||||
{
|
||||
return '|';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '\\';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_6:
|
||||
if(shift)
|
||||
{
|
||||
return '}';
|
||||
}
|
||||
else
|
||||
{
|
||||
return ']';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_7:
|
||||
if(shift)
|
||||
{
|
||||
return '\'';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '"';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_PERIOD:
|
||||
if(shift)
|
||||
{
|
||||
return '>';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '.';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_PLUS:
|
||||
if(shift)
|
||||
{
|
||||
return '+';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '=';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_COMMA:
|
||||
if(shift)
|
||||
{
|
||||
return '<';
|
||||
}
|
||||
else
|
||||
{
|
||||
return ',';
|
||||
}
|
||||
break;
|
||||
case KEY_OEM_MINUS:
|
||||
if(shift)
|
||||
{
|
||||
return '_';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
break;
|
||||
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';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,7 @@ using namespace std;
|
||||
void InitControls();
|
||||
unsigned char TranslateKey(int keyCode);
|
||||
unsigned char TranslateButton(int keyCode);
|
||||
void HandleConsoleKeyPress(OpenArena::Keys key);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function Definitions
|
||||
@@ -175,7 +176,14 @@ int main(int argc, char** argv)
|
||||
keys2[TranslateButton(event.xbutton.button)] = false;
|
||||
break;
|
||||
case KeyPress:
|
||||
if(level.showConsole)
|
||||
{
|
||||
HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0)));
|
||||
}
|
||||
else
|
||||
{
|
||||
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true;
|
||||
}
|
||||
break;
|
||||
case KeyRelease:
|
||||
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||
@@ -628,6 +636,7 @@ unsigned char TranslateKey(int keyCode)
|
||||
case XK_Pause:
|
||||
return OpenArena::KEY_PAUSE;
|
||||
case XK_KP_Space:
|
||||
case XK_space:
|
||||
return OpenArena::KEY_SPACE;
|
||||
case XK_Insert:
|
||||
return OpenArena::KEY_INSERT;
|
||||
@@ -819,4 +828,47 @@ unsigned char TranslateButton(int keyCode)
|
||||
return OpenArena::KEY_BUTTON4;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleConsoleKeyPress(OpenArena::Keys key)
|
||||
{
|
||||
//See if we need to hide the console
|
||||
level.defaultPlayer[0].controls.toggleConsole.FirstPosition();
|
||||
if(key == level.defaultPlayer[0].controls.toggleConsole.Retrieve())
|
||||
{
|
||||
level.showConsole = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
while(level.defaultPlayer[0].controls.toggleConsole.NextPosition() && level.showConsole)
|
||||
{
|
||||
if(level.defaultPlayer[0].controls.toggleConsole.Retrieve() == key)
|
||||
{
|
||||
level.showConsole = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (key)
|
||||
{
|
||||
case OpenArena::KEY_SHIFT:
|
||||
keys[OpenArena::KEY_SHIFT] = true;
|
||||
break;
|
||||
case OpenArena::KEY_RETURN:
|
||||
level.UpdateConsole('\n');
|
||||
break;
|
||||
case OpenArena::KEY_SPACE:
|
||||
printf("hello");
|
||||
level.UpdateConsole(' ');
|
||||
break;
|
||||
case OpenArena::KEY_BACK:
|
||||
level.UpdateConsole(OpenArena::KEY_BACK);
|
||||
break;
|
||||
default:
|
||||
char ascii = OpenArena::KeyToASCII(key, keys[OpenArena::KEY_SHIFT]);
|
||||
if(ascii != '\0')
|
||||
{
|
||||
level.UpdateConsole(ascii);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user