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_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
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();
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user