Changed: Console (ingame) now works

~g2k
This commit is contained in:
2005-07-02 22:28:21 -04:00
parent 4a7acb6812
commit 40c2acbbf9
3 changed files with 228 additions and 1 deletions

View File

@@ -113,5 +113,6 @@ namespace OpenArena
const unsigned int KEY_LBUTTON = KEY_BUTTON0; const unsigned int KEY_LBUTTON = KEY_BUTTON0;
const unsigned int KEY_RBUTTON = KEY_BUTTON1; const unsigned int KEY_RBUTTON = KEY_BUTTON1;
const unsigned int KEY_MBUTTON = KEY_BUTTON2; const unsigned int KEY_MBUTTON = KEY_BUTTON2;
char KeyToASCII(Keys key, bool shift);
}; };
#endif #endif

174
src/keys.cpp Normal file
View 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';
}
}
}
}

View File

@@ -37,6 +37,7 @@ using namespace std;
void InitControls(); void InitControls();
unsigned char TranslateKey(int keyCode); unsigned char TranslateKey(int keyCode);
unsigned char TranslateButton(int keyCode); unsigned char TranslateButton(int keyCode);
void HandleConsoleKeyPress(OpenArena::Keys key);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Function Definitions // Function Definitions
@@ -175,7 +176,14 @@ int main(int argc, char** argv)
keys2[TranslateButton(event.xbutton.button)] = false; keys2[TranslateButton(event.xbutton.button)] = false;
break; break;
case KeyPress: case KeyPress:
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true; if(level.showConsole)
{
HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0)));
}
else
{
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true;
}
break; break;
case KeyRelease: case KeyRelease:
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false; keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
@@ -628,6 +636,7 @@ unsigned char TranslateKey(int keyCode)
case XK_Pause: case XK_Pause:
return OpenArena::KEY_PAUSE; return OpenArena::KEY_PAUSE;
case XK_KP_Space: case XK_KP_Space:
case XK_space:
return OpenArena::KEY_SPACE; return OpenArena::KEY_SPACE;
case XK_Insert: case XK_Insert:
return OpenArena::KEY_INSERT; return OpenArena::KEY_INSERT;
@@ -819,4 +828,47 @@ unsigned char TranslateButton(int keyCode)
return OpenArena::KEY_BUTTON4; 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 #endif