Fixed a couple bugs involving OpenArena::Keys where either windows virtual keys or char's were being used instead.

~g2k
This commit is contained in:
2005-07-14 16:08:50 -04:00
parent 40c2acbbf9
commit 5a6c0fca9d
7 changed files with 288 additions and 203 deletions

View File

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

View File

@@ -100,8 +100,9 @@ namespace OpenArena
private: // private:
void ConsolePrint(string); void ConsolePrint(string);
private:
string consoleHistory[MAX_CONSOLE_HISTORY_LINES]; string consoleHistory[MAX_CONSOLE_HISTORY_LINES];
string consoleOutput[MAX_CONSOLE_OUTPUT_LINES]; string consoleOutput[MAX_CONSOLE_OUTPUT_LINES];
string outputText[MAX_OUTPUT_TEXT_LINES]; string outputText[MAX_OUTPUT_TEXT_LINES];

View File

@@ -153,6 +153,9 @@
<File <File
RelativePath=".\src\ctrls.cpp"> RelativePath=".\src\ctrls.cpp">
</File> </File>
<File
RelativePath=".\src\keys.cpp">
</File>
<File <File
RelativePath=".\src\Level.cpp"> RelativePath=".\src\Level.cpp">
</File> </File>

View File

@@ -19,7 +19,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return ';'; return ';';
} }
break;
case KEY_OEM_2: case KEY_OEM_2:
if(shift) if(shift)
{ {
@@ -29,7 +28,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '/'; return '/';
} }
break;
case KEY_OEM_3: case KEY_OEM_3:
if(shift) if(shift)
{ {
@@ -39,7 +37,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '`'; return '`';
} }
break;
case KEY_OEM_4: case KEY_OEM_4:
if(shift) if(shift)
{ {
@@ -49,7 +46,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '['; return '[';
} }
break;
case KEY_OEM_5: case KEY_OEM_5:
if(shift) if(shift)
{ {
@@ -59,7 +55,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '\\'; return '\\';
} }
break;
case KEY_OEM_6: case KEY_OEM_6:
if(shift) if(shift)
{ {
@@ -69,7 +64,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return ']'; return ']';
} }
break;
case KEY_OEM_7: case KEY_OEM_7:
if(shift) if(shift)
{ {
@@ -79,7 +73,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '"'; return '"';
} }
break;
case KEY_OEM_PERIOD: case KEY_OEM_PERIOD:
if(shift) if(shift)
{ {
@@ -89,7 +82,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '.'; return '.';
} }
break;
case KEY_OEM_PLUS: case KEY_OEM_PLUS:
if(shift) if(shift)
{ {
@@ -99,7 +91,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '='; return '=';
} }
break;
case KEY_OEM_COMMA: case KEY_OEM_COMMA:
if(shift) if(shift)
{ {
@@ -109,7 +100,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return ','; return ',';
} }
break;
case KEY_OEM_MINUS: case KEY_OEM_MINUS:
if(shift) if(shift)
{ {
@@ -119,7 +109,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift)
{ {
return '-'; return '-';
} }
break;
default: default:
if(key >= KEY_A && key <= KEY_Z) if(key >= KEY_A && key <= KEY_Z)
{ {

View File

@@ -366,8 +366,12 @@ uint8 KeyName(std::string str)
return OpenArena::KEY_OEM_5; return OpenArena::KEY_OEM_5;
else if (str[0] == '\'' || str[0] == '"') else if (str[0] == '\'' || str[0] == '"')
return OpenArena::KEY_OEM_7; return OpenArena::KEY_OEM_7;
else if (isalpha(str[0]))
return toupper(str[0]) - 'A' + OpenArena::KEY_A;
else if(isdigit(str[0]))
return str[0] - '0' + OpenArena::KEY_0;
else else
return toupper(str[0]); return OpenArena::KEY_UNKNOWN;
} }
} }

View File

@@ -181,7 +181,7 @@ Vec2i Vec2i::cross(const Vec2i& rtOp) const
int Vec2i::length()const int Vec2i::length()const
{ {
return (int)sqrt(x*x+y*y); return (int)sqrt((float)(x*x+y*y));
} }
int Vec2i::lengthsquared()const int Vec2i::lengthsquared()const

View File

@@ -50,6 +50,8 @@ int InitGL(GLvoid);
void ReSizeGLScene(GLsizei width, GLsizei height); void ReSizeGLScene(GLsizei width, GLsizei height);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
OpenArena::Keys TranslateKey(int keyCode);
void HandleConsoleKeyPress(OpenArena::Keys key);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Function Definitions // Function Definitions
@@ -164,187 +166,18 @@ LRESULT CALLBACK WndProc(HWND hWnd,
{ {
if(level.showConsole) if(level.showConsole)
{ {
//See if we need to hide the console HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(wParam));
level.defaultPlayer[0].controls.toggleConsole.FirstPosition();
if(wParam == 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() == wParam)
{
level.showConsole = false;
}
}
}
if(wParam == VK_RETURN)
{
level.UpdateConsole('\n');
}
else if(wParam == VK_SHIFT)
{
keys[VK_SHIFT] = true;
}
else if(wParam == VK_SPACE)
{
level.UpdateConsole(' ');
}
else if(wParam == VK_BACK)
{
level.UpdateConsole(VK_BACK);
}
else if(wParam == VK_OEM_1)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole(':');
}
else
{
level.UpdateConsole(';');
}
}
else if(wParam == VK_OEM_2)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('?');
}
else
{
level.UpdateConsole('/');
}
}
else if(wParam == VK_OEM_3)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('~');
}
else
{
level.UpdateConsole('`');
}
}
else if(wParam == VK_OEM_4)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('{');
}
else
{
level.UpdateConsole('[');
}
}
else if(wParam == VK_OEM_5)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('|');
}
else
{
level.UpdateConsole('\\');
}
}
else if(wParam == VK_OEM_6)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('}');
}
else
{
level.UpdateConsole(']');
}
}
else if(wParam == VK_OEM_7)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('\'');
}
else
{
level.UpdateConsole('"');
}
}
else if(wParam == VK_OEM_PERIOD)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('>');
}
else
{
level.UpdateConsole('.');
}
}
else if(wParam == VK_OEM_PLUS)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('+');
}
else
{
level.UpdateConsole('=');
}
}
else if(wParam == VK_OEM_COMMA)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('<');
}
else
{
level.UpdateConsole(',');
}
}
else if(wParam == VK_OEM_MINUS)
{
if(keys[VK_SHIFT])
{
level.UpdateConsole('_');
}
else
{
level.UpdateConsole('-');
}
}
else if(isalpha(uint8(wParam)))
{
if(keys[VK_SHIFT])
{
level.UpdateConsole(wParam);
}
else
{
level.UpdateConsole(tolower(wParam));
}
}
else if(isdigit(uint8(wParam)))
{
level.UpdateConsole(wParam);
}
} }
else else
{ {
keys[wParam] = true; keys[TranslateKey(wParam)] = true;
} }
return 0; return 0;
} }
case WM_KEYUP: case WM_KEYUP:
{ {
keys[wParam] = false; keys[TranslateKey(wParam)] = false;
keys2[wParam] = false; keys2[TranslateKey(wParam)] = false;
return 0; return 0;
} }
case WM_SYSKEYDOWN: case WM_SYSKEYDOWN:
@@ -356,35 +189,35 @@ LRESULT CALLBACK WndProc(HWND hWnd,
} }
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
{ {
keys[VK_LBUTTON] = true; keys[OpenArena::KEY_LBUTTON] = true;
return 0; return 0;
} }
case WM_LBUTTONUP: case WM_LBUTTONUP:
{ {
keys[VK_LBUTTON] = false; keys[OpenArena::KEY_LBUTTON] = false;
keys[VK_LBUTTON] = false; keys[OpenArena::KEY_LBUTTON] = false;
return 0; return 0;
} }
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
{ {
keys[VK_RBUTTON] = true; keys[OpenArena::KEY_RBUTTON] = true;
return 0; return 0;
} }
case WM_RBUTTONUP: case WM_RBUTTONUP:
{ {
keys[VK_RBUTTON] = false; keys[OpenArena::KEY_RBUTTON] = false;
keys[VK_RBUTTON] = false; keys[OpenArena::KEY_RBUTTON] = false;
return 0; return 0;
} }
case WM_MBUTTONDOWN: case WM_MBUTTONDOWN:
{ {
keys[VK_MBUTTON] = true; keys[OpenArena::KEY_MBUTTON] = true;
return 0; return 0;
} }
case WM_MBUTTONUP: case WM_MBUTTONUP:
{ {
keys[VK_MBUTTON] = false; keys[OpenArena::KEY_MBUTTON] = false;
keys[VK_MBUTTON] = false; keys[OpenArena::KEY_MBUTTON] = false;
return 0; return 0;
} }
} }
@@ -441,7 +274,7 @@ int WINAPI WinMain( HINSTANCE hInstance,
if (active) if (active)
{ {
if (keys[VK_ESCAPE]) if (keys[OpenArena::KEY_ESCAPE])
{ {
done=true; done=true;
} }
@@ -746,9 +579,9 @@ int WINAPI WinMain( HINSTANCE hInstance,
g_Screen.SwapBuffers(); g_Screen.SwapBuffers();
if (keys[VK_F1]) if (keys[OpenArena::KEY_F1])
{ {
keys[VK_F1]=false; keys[OpenArena::KEY_F1]=false;
g_Screen.Close(); g_Screen.Close();
g_Screen.fullscreen=!g_Screen.fullscreen; g_Screen.fullscreen=!g_Screen.fullscreen;
if (!g_Screen.Open("OpenArena",g_Screen.width,g_Screen.height,g_Screen.bpp,g_Screen.fullscreen)) if (!g_Screen.Open("OpenArena",g_Screen.width,g_Screen.height,g_Screen.bpp,g_Screen.fullscreen))
@@ -762,4 +595,259 @@ int WINAPI WinMain( HINSTANCE hInstance,
g_Screen.Close(); g_Screen.Close();
return (msg.wParam); return (msg.wParam);
} }
OpenArena::Keys TranslateKey(int keyCode)
{
switch (keyCode)
{
case VK_LEFT:
return OpenArena::KEY_LEFT;
case VK_RIGHT:
return OpenArena::KEY_RIGHT;
case VK_UP:
return OpenArena::KEY_UP;
case VK_DOWN:
return OpenArena::KEY_DOWN;
case VK_SPACE:
return OpenArena::KEY_SPACE;
case VK_RETURN:
return OpenArena::KEY_RETURN;
case VK_SHIFT:
return OpenArena::KEY_SHIFT;
case VK_PAUSE:
return OpenArena::KEY_PAUSE;
case VK_CONTROL:
return OpenArena::KEY_CONTROL;
case VK_CAPITAL:
return OpenArena::KEY_CAPITAL;
case VK_ESCAPE:
return OpenArena::KEY_ESCAPE;
case VK_PRIOR:
return OpenArena::KEY_PRIOR;
case VK_NEXT:
return OpenArena::KEY_NEXT;
case VK_END:
return OpenArena::KEY_END;
case VK_HOME:
return OpenArena::KEY_HOME;
case VK_INSERT:
return OpenArena::KEY_INSERT;
case VK_DELETE:
return OpenArena::KEY_DELETE;
case VK_LWIN:
return OpenArena::KEY_LWIN;
case VK_RWIN:
return OpenArena::KEY_RWIN;
case VK_APPS:
return OpenArena::KEY_APPS;
case VK_NUMPAD0:
return OpenArena::KEY_NUMPAD0;
case VK_NUMPAD1:
return OpenArena::KEY_NUMPAD1;
case VK_NUMPAD2:
return OpenArena::KEY_NUMPAD2;
case VK_NUMPAD3:
return OpenArena::KEY_NUMPAD3;
case VK_NUMPAD4:
return OpenArena::KEY_NUMPAD4;
case VK_NUMPAD5:
return OpenArena::KEY_NUMPAD5;
case VK_NUMPAD6:
return OpenArena::KEY_NUMPAD6;
case VK_NUMPAD7:
return OpenArena::KEY_NUMPAD7;
case VK_NUMPAD8:
return OpenArena::KEY_NUMPAD8;
case VK_NUMPAD9:
return OpenArena::KEY_NUMPAD9;
case VK_MULTIPLY:
return OpenArena::KEY_MULTIPLY;
case VK_ADD:
return OpenArena::KEY_ADD;
case VK_SUBTRACT:
return OpenArena::KEY_SUBTRACT;
case VK_DIVIDE:
return OpenArena::KEY_DIVIDE;
case VK_F1:
return OpenArena::KEY_F1;
case VK_F2:
return OpenArena::KEY_F2;
case VK_F3:
return OpenArena::KEY_F3;
case VK_F4:
return OpenArena::KEY_F4;
case VK_F5:
return OpenArena::KEY_F5;
case VK_F6:
return OpenArena::KEY_F6;
case VK_F7:
return OpenArena::KEY_F7;
case VK_F8:
return OpenArena::KEY_F8;
case VK_F9:
return OpenArena::KEY_F9;
case VK_F10:
return OpenArena::KEY_F10;
case VK_F11:
return OpenArena::KEY_F11;
case VK_F12:
return OpenArena::KEY_F12;
case VK_NUMLOCK:
return OpenArena::KEY_NUMLOCK;
case VK_SCROLL:
return OpenArena::KEY_SCROLL;
case VK_SEPARATOR:
return OpenArena::KEY_SEPARATOR;
case VK_OEM_1:
return OpenArena::KEY_OEM_1;
case VK_OEM_2:
return OpenArena::KEY_OEM_2;
case VK_OEM_3:
return OpenArena::KEY_OEM_3;
case VK_OEM_4:
return OpenArena::KEY_OEM_4;
case VK_OEM_5:
return OpenArena::KEY_OEM_5;
case VK_OEM_6:
return OpenArena::KEY_OEM_6;
case VK_OEM_7:
return OpenArena::KEY_OEM_7;
case VK_OEM_PERIOD:
return OpenArena::KEY_OEM_PERIOD;
case VK_OEM_PLUS:
return OpenArena::KEY_OEM_PLUS;
case VK_OEM_MINUS:
return OpenArena::KEY_OEM_MINUS;
case VK_OEM_COMMA:
return OpenArena::KEY_OEM_COMMA;
case VK_BACK:
return OpenArena::KEY_BACK;
case VK_TAB:
return OpenArena::KEY_TAB;
case '0':
return OpenArena::KEY_0;
case '1':
return OpenArena::KEY_1;
case '2':
return OpenArena::KEY_2;
case '3':
return OpenArena::KEY_3;
case '4':
return OpenArena::KEY_4;
case '5':
return OpenArena::KEY_5;
case '6':
return OpenArena::KEY_6;
case '7':
return OpenArena::KEY_7;
case '8':
return OpenArena::KEY_8;
case '9':
return OpenArena::KEY_9;
case 'A':
return OpenArena::KEY_A;
case 'B':
return OpenArena::KEY_B;
case 'C':
return OpenArena::KEY_C;
case 'D':
return OpenArena::KEY_D;
case 'E':
return OpenArena::KEY_E;
case 'F':
return OpenArena::KEY_F;
case 'G':
return OpenArena::KEY_G;
case 'H':
return OpenArena::KEY_H;
case 'I':
return OpenArena::KEY_I;
case 'J':
return OpenArena::KEY_J;
case 'K':
return OpenArena::KEY_K;
case 'L':
return OpenArena::KEY_L;
case 'M':
return OpenArena::KEY_M;
case 'N':
return OpenArena::KEY_N;
case 'O':
return OpenArena::KEY_O;
case 'P':
return OpenArena::KEY_P;
case 'Q':
return OpenArena::KEY_Q;
case 'R':
return OpenArena::KEY_R;
case 'S':
return OpenArena::KEY_S;
case 'T':
return OpenArena::KEY_T;
case 'U':
return OpenArena::KEY_U;
case 'V':
return OpenArena::KEY_V;
case 'W':
return OpenArena::KEY_W;
case 'X':
return OpenArena::KEY_X;
case 'Y':
return OpenArena::KEY_Y;
case 'Z':
return OpenArena::KEY_Z;
case VK_LBUTTON:
return OpenArena::KEY_LBUTTON;
case VK_RBUTTON:
return OpenArena::KEY_RBUTTON;
case VK_MBUTTON:
return OpenArena::KEY_MBUTTON;
default:
return OpenArena::KEY_UNKNOWN;
}
}
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