From ffb20c2ef657ed195060523f89a8574fcbe9ef96 Mon Sep 17 00:00:00 2001 From: "jean.chalard" Date: Mon, 24 Nov 2008 07:47:47 +0000 Subject: [PATCH] J : * New input system, cleaning, and preparation of next API update. * Have the thing compile under non-WIN32 systems (as a dud binary obviously) --- JGE/src/winmain.cpp | 228 +++++++++++++++++++++++++++----------------- 1 file changed, 141 insertions(+), 87 deletions(-) diff --git a/JGE/src/winmain.cpp b/JGE/src/winmain.cpp index 90e309256..89bcc8e05 100644 --- a/JGE/src/winmain.cpp +++ b/JGE/src/winmain.cpp @@ -13,28 +13,126 @@ int actualWidth; int actualHeight; +#ifdef WIN32 #include // Header File For Windows -#include // Header File For The OpenGL32 Library -#include // Header File For The GLu32 Library -#include // Header File For The Glaux Library +#else +typedef struct _HDC {} *HDC; +typedef struct _HGLRC {} *HGLRC; +typedef struct _HWND {} *HWND; +typedef struct _HINSTANCE {} *HINSTANCE; +typedef struct _WNDCLASS +{ + int wc; + int style; + int* lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + int* hIcon; + int* hCursor; + int hbrBackground; + char* lpszMenuName; + const char* lpszClassName; +} WNDCLASS; +typedef struct +{ + unsigned short dmSize; + unsigned int dmFields; + unsigned int dmBitsPerPel; + unsigned int dmPelsWidth; + unsigned int dmPelsHeight; +} DEVMODE; + +typedef HINSTANCE HMODULE; +typedef struct _RECT { int left; int right; int top; int bottom; } RECT; +typedef struct _MSG { int wParam; int message; } MSG; +typedef unsigned int LRESULT; +typedef unsigned int UINT; +typedef signed int WPARAM; +typedef unsigned int LPARAM; +typedef int* WNDPROC; +typedef int* HCURSOR; +typedef HCURSOR HICON; +typedef HCURSOR HMENU; +typedef struct _PIXELFORMATDESCRIPTOR { + int a;int b;int c;int d;int e;int f;int g;int h;int i;int j;int k;int l;int m;int n;int o;int p;int q;int r;int s;int t;int u;int v;int w;int x;int y;int z; } PIXELFORMATDESCRIPTOR; +typedef char* LPSTR; + +enum { VK_CONTROL, VK_RETURN, VK_ESCAPE, VK_SPACE, VK_F1, VK_F2, VK_F3 }; +enum { MB_OK, MB_ICONINFORMATION, MB_ICONSTOP, MB_YESNO, MB_ICONEXCLAMATION, IDYES }; +enum { CS_HREDRAW, CS_VREDRAW, CS_OWNDC }; +enum { WS_EX_APPWINDOW, WS_POPUP, WS_EX_WINDOWEDGE, WS_OVERLAPPED, WS_CAPTION, WS_MINIMIZEBOX, WS_MAXIMIZEBOX, WS_SIZEBOX, WS_SYSMENU, WS_CLIPSIBLINGS, WS_CLIPCHILDREN }; +enum { WM_ACTIVATE, WM_SYSCOMMAND, WM_CLOSE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MOUSEMOVE, WM_SIZE, WM_QUIT }; +enum { DM_BITSPERPEL, DM_PELSWIDTH, DM_PELSHEIGHT }; +enum { CDS_FULLSCREEN }; +enum { DISP_CHANGE_SUCCESSFUL }; +enum { SC_SCREENSAVE, SC_MONITORPOWER }; +enum { PFD_DRAW_TO_WINDOW, PFD_SUPPORT_OPENGL, PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, PFD_MAIN_PLANE }; +enum { SW_SHOW }; +enum { IDC_ARROW }; +enum { PM_REMOVE }; + +static const char* IDI_WINLOGO = ""; +#define CALLBACK +#define WINAPI +#define ZeroMemory bzero +int GetTickCount() { return 0; } +long ChangeDisplaySettings(DEVMODE*, unsigned int); +int ShowCursor(bool); +HGLRC wglCreateContext(HDC); +bool wglMakeCurrent(HDC, HGLRC); +bool wglDeleteContext(HGLRC); +int ReleaseDC(HWND, HDC); +int MessageBox(HWND, const char*, const char*, unsigned int); +bool DestroyWindow(HWND); +bool UnregisterClass(const char*, HINSTANCE); +HMODULE GetModuleHandle(char*); +HCURSOR LoadCursor(HINSTANCE, int); +HICON LoadIcon(HINSTANCE, const char*); +int* RegisterClass(const WNDCLASS*); +bool AdjustWindowRectEx(RECT*, unsigned int, bool, unsigned int); +HWND CreateWindowEx(unsigned int, const char*, const char*, unsigned int, int, int, int, int, HWND, HMENU, HINSTANCE, void*); +HDC GetDC(HWND); +int ChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR*); +bool SetPixelFormat(HDC, int, PIXELFORMATDESCRIPTOR*); +bool ShowWindow(HWND, int); +bool SetForegroundWindow(HWND); +HWND SetFocus(HWND); +unsigned short HIWORD(unsigned int); +unsigned short LOWORD(unsigned int); +LRESULT DefWindowProc(HWND, unsigned int, WPARAM, LPARAM); +void PostQuitMessage(int); +bool PeekMessage(MSG*, HWND, unsigned int, unsigned int, unsigned int); +bool TranslateMessage(const MSG*); +LRESULT DispatchMessage(const MSG*); +bool SwapBuffers(HDC); +#endif + + + +#include // Header File For The OpenGL32 Library +#include // Header File For The GLu32 Library +#include // Header File For The Glaux Library #include -#include "..\..\JGE\include\JGE.h" -#include "..\..\JGE\include\JTypes.h" -#include "..\..\JGE\include\JApp.h" -#include "..\..\JGE\include\JFileSystem.h" -#include "..\..\JGE\include\JRenderer.h" +#include "../../JGE/include/JGE.h" +#include "../../JGE/include/JTypes.h" +#include "../../JGE/include/JApp.h" +#include "../../JGE/include/JFileSystem.h" +#include "../../JGE/include/JRenderer.h" -#include "..\..\JGE\include\JGameLauncher.h" +#include "../../JGE/include/JGameLauncher.h" //#include "..\src\GameApp.h" +#ifdef WIN32 #pragma comment( lib, "opengl32.lib" ) // Search For OpenGL32.lib While Linking #pragma comment( lib, "glu32.lib" ) // Search For GLu32.lib While Linking #pragma comment( lib, "glaux.lib" ) // Search For GLaux.lib While Linking #pragma comment( lib, "User32.lib" ) #pragma comment( lib, "Gdi32.lib" ) #pragma comment( lib, "Comdlg32.lib" ) +#endif HDC hDC=NULL; // Private GDI Device Context HGLRC hRC=NULL; // Permanent Rendering Context @@ -64,81 +162,38 @@ static u32 gButtons = 0; static u32 gOldButtons = 0; static queue< pair > gKeyBuffer; -static u32 gPSPKeyMasks[17] = +static const struct { WPARAM keysym; u32 pspCode; } gDefaultBindings[] = { - PSP_CTRL_SELECT, - PSP_CTRL_START, - PSP_CTRL_UP, - PSP_CTRL_RIGHT, - PSP_CTRL_DOWN, - PSP_CTRL_LEFT, - PSP_CTRL_LTRIGGER, - PSP_CTRL_RTRIGGER, - PSP_CTRL_TRIANGLE, - PSP_CTRL_CIRCLE, - PSP_CTRL_CROSS, - PSP_CTRL_SQUARE, - PSP_CTRL_HOME, - PSP_CTRL_HOLD, - PSP_CTRL_NOTE, - PSP_CTRL_CIRCLE, - PSP_CTRL_START, + { VK_CONTROL, PSP_CTRL_SELECT }, + { VK_RETURN, PSP_CTRL_START }, + { VK_ESCAPE, PSP_CTRL_START }, + { 'Z', PSP_CTRL_UP }, + { 'D', PSP_CTRL_RIGHT }, + { 'S', PSP_CTRL_DOWN }, + { 'Q', PSP_CTRL_LEFT }, + { 'A', PSP_CTRL_LTRIGGER }, + { 'E', PSP_CTRL_RTRIGGER }, + { 'I', PSP_CTRL_TRIANGLE }, + { 'L', PSP_CTRL_CIRCLE }, + { VK_SPACE, PSP_CTRL_CIRCLE }, + { 'K', PSP_CTRL_CROSS }, + { 'J', PSP_CTRL_SQUARE }, + { VK_F1, PSP_CTRL_HOME }, + { VK_F2, PSP_CTRL_HOLD }, + { VK_F3, PSP_CTRL_NOTE } }; - -static u32 gWinKeyCodes[17] = - { - VK_CONTROL, - VK_RETURN, - 'Z', - 'D', - 'S', - 'Q', - 'A', - 'E', - 'I', - 'L', - 'K', - 'J', - VK_F1, - VK_F2, - VK_F3, - VK_SPACE, - VK_ESCAPE - - }; - -static bool gThisFrame[17] = - { - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - }; +static vector< pair > gKeyCodes; void JGEControl() { gOldButtons = gButtons; gButtons = 0; - for (int i=0;i<17;i++) + for (int i = gKeyCodes.size() - 1; i >= 0; --i) { - gThisFrame[i] = false; - if (g_keys[gWinKeyCodes[i]]) - gButtons |= gPSPKeyMasks[i]; + if (g_keys[gKeyCodes[i].first]) + gButtons |= gKeyCodes[i].second; } } @@ -186,7 +241,7 @@ GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize Th glDisable (GL_DEPTH_TEST); } -int InitGL(GLvoid) // All Setup For OpenGL Goes Here +int InitGL(void) // All Setup For OpenGL Goes Here { glClearColor (0.0f, 0.0f, 0.0f, 0.0f); // Black Background glClearDepth (1.0f); // Depth Buffer Setup @@ -213,7 +268,7 @@ int InitGL(GLvoid) // All Setup For OpenGL Goes Here } -int InitGame(GLvoid) +int InitGame(void) { g_engine = JGE::GetInstance(); @@ -235,7 +290,7 @@ int InitGame(GLvoid) } -void DestroyGame(GLvoid) +void DestroyGame(void) { // JParticleSystem::Destroy(); // JMotionSystem::Destroy(); @@ -255,7 +310,7 @@ void DestroyGame(GLvoid) } -int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing +int DrawGLScene(void) // Here's Where We Do All The Drawing { // glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer @@ -283,7 +338,7 @@ void Update(int dt) } -GLvoid KillGLWindow(GLvoid) // Properly Kill The Window +void KillGLWindow(void) // Properly Kill The Window { DestroyGame(); @@ -413,7 +468,7 @@ BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscree WS_SIZEBOX | WS_MAXIMIZEBOX | //WS_MINIMIZE | - WS_SYSMENU;// | \ + WS_SYSMENU;// | //WS_THICKFRAME ; } @@ -546,6 +601,9 @@ LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window WPARAM wParam, // Additional Message Information LPARAM lParam) // Additional Message Information { + for (signed int i = sizeof(gDefaultBindings)/sizeof(gDefaultBindings[0]) - 1; i >= 0; --i) + gKeyCodes[i] = make_pair(gDefaultBindings[i].keysym, gDefaultBindings[i].pspCode); + switch (uMsg) // Check For Windows Messages { case WM_ACTIVATE: // Watch For Window Activate Message @@ -590,13 +648,9 @@ LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window if (false == g_holds[wParam]) { g_holds[wParam] = true; - for (signed int i = sizeof(gWinKeyCodes)/sizeof(gWinKeyCodes[0]) - 1; i >= 0; --i) - if (gWinKeyCodes[i] == wParam) - if (false == gThisFrame[i]) - { - gThisFrame[i] = true; - gKeyBuffer.push(make_pair(gPSPKeyMasks[i], wParam)); - } + for (signed int i = gKeyCodes.size() - 1; i >= 0; --i) + if (gKeyCodes[i].first == wParam) + gKeyBuffer.push(gKeyCodes[i]); } return 0; }