diff --git a/include/keys.h b/include/keys.h index a2c68f9..3b08215 100644 --- a/include/keys.h +++ b/include/keys.h @@ -110,9 +110,9 @@ namespace OpenArena KEY_Y, KEY_Z }; - const unsigned int KEY_LBUTTON = KEY_BUTTON0; - const unsigned int KEY_RBUTTON = KEY_BUTTON1; - const unsigned int KEY_MBUTTON = KEY_BUTTON2; + const Keys KEY_LBUTTON = KEY_BUTTON0; + const Keys KEY_RBUTTON = KEY_BUTTON1; + const Keys KEY_MBUTTON = KEY_BUTTON2; char KeyToASCII(Keys key, bool shift); }; #endif diff --git a/include/level.h b/include/level.h index f412bf5..a993b98 100644 --- a/include/level.h +++ b/include/level.h @@ -100,8 +100,9 @@ namespace OpenArena - private: +// private: void ConsolePrint(string); + private: string consoleHistory[MAX_CONSOLE_HISTORY_LINES]; string consoleOutput[MAX_CONSOLE_OUTPUT_LINES]; string outputText[MAX_OUTPUT_TEXT_LINES]; diff --git a/oa.vcproj b/oa.vcproj index 9f3233b..aebb5c7 100644 --- a/oa.vcproj +++ b/oa.vcproj @@ -153,6 +153,9 @@ + + diff --git a/src/keys.cpp b/src/keys.cpp index ad06c1a..da1c9e0 100644 --- a/src/keys.cpp +++ b/src/keys.cpp @@ -19,7 +19,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return ';'; } - break; case KEY_OEM_2: if(shift) { @@ -29,7 +28,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '/'; } - break; case KEY_OEM_3: if(shift) { @@ -39,7 +37,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '`'; } - break; case KEY_OEM_4: if(shift) { @@ -49,7 +46,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '['; } - break; case KEY_OEM_5: if(shift) { @@ -59,7 +55,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '\\'; } - break; case KEY_OEM_6: if(shift) { @@ -69,7 +64,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return ']'; } - break; case KEY_OEM_7: if(shift) { @@ -79,7 +73,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '"'; } - break; case KEY_OEM_PERIOD: if(shift) { @@ -89,7 +82,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '.'; } - break; case KEY_OEM_PLUS: if(shift) { @@ -99,7 +91,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '='; } - break; case KEY_OEM_COMMA: if(shift) { @@ -109,7 +100,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return ','; } - break; case KEY_OEM_MINUS: if(shift) { @@ -119,7 +109,6 @@ char OpenArena::KeyToASCII(Keys key, bool shift) { return '-'; } - break; default: if(key >= KEY_A && key <= KEY_Z) { diff --git a/src/strmanip.cpp b/src/strmanip.cpp index 47195ff..300c60e 100644 --- a/src/strmanip.cpp +++ b/src/strmanip.cpp @@ -366,8 +366,12 @@ uint8 KeyName(std::string str) return OpenArena::KEY_OEM_5; else if (str[0] == '\'' || str[0] == '"') 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 - return toupper(str[0]); + return OpenArena::KEY_UNKNOWN; } } diff --git a/src/vector.cpp b/src/vector.cpp index e03aa0b..4fb85df 100644 --- a/src/vector.cpp +++ b/src/vector.cpp @@ -181,7 +181,7 @@ Vec2i Vec2i::cross(const Vec2i& rtOp) const int Vec2i::length()const { - return (int)sqrt(x*x+y*y); + return (int)sqrt((float)(x*x+y*y)); } int Vec2i::lengthsquared()const diff --git a/src/windows.cpp b/src/windows.cpp index 2ce30e5..300fd84 100644 --- a/src/windows.cpp +++ b/src/windows.cpp @@ -50,6 +50,8 @@ int InitGL(GLvoid); void ReSizeGLScene(GLsizei width, GLsizei height); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +OpenArena::Keys TranslateKey(int keyCode); +void HandleConsoleKeyPress(OpenArena::Keys key); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Function Definitions @@ -164,187 +166,18 @@ LRESULT CALLBACK WndProc(HWND hWnd, { if(level.showConsole) { - //See if we need to hide the console - 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); - } - + HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(wParam)); } else { - keys[wParam] = true; + keys[TranslateKey(wParam)] = true; } - return 0; + return 0; } case WM_KEYUP: { - keys[wParam] = false; - keys2[wParam] = false; + keys[TranslateKey(wParam)] = false; + keys2[TranslateKey(wParam)] = false; return 0; } case WM_SYSKEYDOWN: @@ -356,35 +189,35 @@ LRESULT CALLBACK WndProc(HWND hWnd, } case WM_LBUTTONDOWN: { - keys[VK_LBUTTON] = true; + keys[OpenArena::KEY_LBUTTON] = true; return 0; } case WM_LBUTTONUP: { - keys[VK_LBUTTON] = false; - keys[VK_LBUTTON] = false; + keys[OpenArena::KEY_LBUTTON] = false; + keys[OpenArena::KEY_LBUTTON] = false; return 0; } case WM_RBUTTONDOWN: { - keys[VK_RBUTTON] = true; + keys[OpenArena::KEY_RBUTTON] = true; return 0; } case WM_RBUTTONUP: { - keys[VK_RBUTTON] = false; - keys[VK_RBUTTON] = false; + keys[OpenArena::KEY_RBUTTON] = false; + keys[OpenArena::KEY_RBUTTON] = false; return 0; } case WM_MBUTTONDOWN: { - keys[VK_MBUTTON] = true; + keys[OpenArena::KEY_MBUTTON] = true; return 0; } case WM_MBUTTONUP: { - keys[VK_MBUTTON] = false; - keys[VK_MBUTTON] = false; + keys[OpenArena::KEY_MBUTTON] = false; + keys[OpenArena::KEY_MBUTTON] = false; return 0; } } @@ -441,7 +274,7 @@ int WINAPI WinMain( HINSTANCE hInstance, if (active) { - if (keys[VK_ESCAPE]) + if (keys[OpenArena::KEY_ESCAPE]) { done=true; } @@ -746,9 +579,9 @@ int WINAPI WinMain( HINSTANCE hInstance, 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.fullscreen=!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(); 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 \ No newline at end of file