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