J :
* New input system, cleaning, and preparation of next API update. * Have the thing compile under non-WIN32 systems (as a dud binary obviously)
This commit is contained in:
@@ -13,28 +13,126 @@
|
|||||||
int actualWidth;
|
int actualWidth;
|
||||||
int actualHeight;
|
int actualHeight;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
#include <windows.h> // Header File For Windows
|
#include <windows.h> // Header File For Windows
|
||||||
#include <gl\gl.h> // Header File For The OpenGL32 Library
|
#else
|
||||||
#include <gl\glu.h> // Header File For The GLu32 Library
|
typedef struct _HDC {} *HDC;
|
||||||
#include <gl\glaux.h> // Header File For The Glaux Library
|
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 <GL/gl.h> // Header File For The OpenGL32 Library
|
||||||
|
#include <GL/glu.h> // Header File For The GLu32 Library
|
||||||
|
#include <GL/glaux.h> // Header File For The Glaux Library
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
#include "..\..\JGE\include\JGE.h"
|
#include "../../JGE/include/JGE.h"
|
||||||
#include "..\..\JGE\include\JTypes.h"
|
#include "../../JGE/include/JTypes.h"
|
||||||
#include "..\..\JGE\include\JApp.h"
|
#include "../../JGE/include/JApp.h"
|
||||||
#include "..\..\JGE\include\JFileSystem.h"
|
#include "../../JGE/include/JFileSystem.h"
|
||||||
#include "..\..\JGE\include\JRenderer.h"
|
#include "../../JGE/include/JRenderer.h"
|
||||||
|
|
||||||
#include "..\..\JGE\include\JGameLauncher.h"
|
#include "../../JGE/include/JGameLauncher.h"
|
||||||
|
|
||||||
//#include "..\src\GameApp.h"
|
//#include "..\src\GameApp.h"
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
#pragma comment( lib, "opengl32.lib" ) // Search For OpenGL32.lib While Linking
|
#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, "glu32.lib" ) // Search For GLu32.lib While Linking
|
||||||
#pragma comment( lib, "glaux.lib" ) // Search For GLaux.lib While Linking
|
#pragma comment( lib, "glaux.lib" ) // Search For GLaux.lib While Linking
|
||||||
#pragma comment( lib, "User32.lib" )
|
#pragma comment( lib, "User32.lib" )
|
||||||
#pragma comment( lib, "Gdi32.lib" )
|
#pragma comment( lib, "Gdi32.lib" )
|
||||||
#pragma comment( lib, "Comdlg32.lib" )
|
#pragma comment( lib, "Comdlg32.lib" )
|
||||||
|
#endif
|
||||||
|
|
||||||
HDC hDC=NULL; // Private GDI Device Context
|
HDC hDC=NULL; // Private GDI Device Context
|
||||||
HGLRC hRC=NULL; // Permanent Rendering Context
|
HGLRC hRC=NULL; // Permanent Rendering Context
|
||||||
@@ -64,81 +162,38 @@ static u32 gButtons = 0;
|
|||||||
static u32 gOldButtons = 0;
|
static u32 gOldButtons = 0;
|
||||||
static queue< pair<u32, u32> > gKeyBuffer;
|
static queue< pair<u32, u32> > gKeyBuffer;
|
||||||
|
|
||||||
static u32 gPSPKeyMasks[17] =
|
static const struct { WPARAM keysym; u32 pspCode; } gDefaultBindings[] =
|
||||||
{
|
{
|
||||||
PSP_CTRL_SELECT,
|
{ VK_CONTROL, PSP_CTRL_SELECT },
|
||||||
PSP_CTRL_START,
|
{ VK_RETURN, PSP_CTRL_START },
|
||||||
PSP_CTRL_UP,
|
{ VK_ESCAPE, PSP_CTRL_START },
|
||||||
PSP_CTRL_RIGHT,
|
{ 'Z', PSP_CTRL_UP },
|
||||||
PSP_CTRL_DOWN,
|
{ 'D', PSP_CTRL_RIGHT },
|
||||||
PSP_CTRL_LEFT,
|
{ 'S', PSP_CTRL_DOWN },
|
||||||
PSP_CTRL_LTRIGGER,
|
{ 'Q', PSP_CTRL_LEFT },
|
||||||
PSP_CTRL_RTRIGGER,
|
{ 'A', PSP_CTRL_LTRIGGER },
|
||||||
PSP_CTRL_TRIANGLE,
|
{ 'E', PSP_CTRL_RTRIGGER },
|
||||||
PSP_CTRL_CIRCLE,
|
{ 'I', PSP_CTRL_TRIANGLE },
|
||||||
PSP_CTRL_CROSS,
|
{ 'L', PSP_CTRL_CIRCLE },
|
||||||
PSP_CTRL_SQUARE,
|
{ VK_SPACE, PSP_CTRL_CIRCLE },
|
||||||
PSP_CTRL_HOME,
|
{ 'K', PSP_CTRL_CROSS },
|
||||||
PSP_CTRL_HOLD,
|
{ 'J', PSP_CTRL_SQUARE },
|
||||||
PSP_CTRL_NOTE,
|
{ VK_F1, PSP_CTRL_HOME },
|
||||||
PSP_CTRL_CIRCLE,
|
{ VK_F2, PSP_CTRL_HOLD },
|
||||||
PSP_CTRL_START,
|
{ VK_F3, PSP_CTRL_NOTE }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static vector< pair<WPARAM, u32> > gKeyCodes;
|
||||||
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
|
|
||||||
};
|
|
||||||
|
|
||||||
void JGEControl()
|
void JGEControl()
|
||||||
{
|
{
|
||||||
gOldButtons = gButtons;
|
gOldButtons = gButtons;
|
||||||
|
|
||||||
gButtons = 0;
|
gButtons = 0;
|
||||||
for (int i=0;i<17;i++)
|
for (int i = gKeyCodes.size() - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
gThisFrame[i] = false;
|
if (g_keys[gKeyCodes[i].first])
|
||||||
if (g_keys[gWinKeyCodes[i]])
|
gButtons |= gKeyCodes[i].second;
|
||||||
gButtons |= gPSPKeyMasks[i];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,7 +241,7 @@ GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize Th
|
|||||||
glDisable (GL_DEPTH_TEST);
|
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
|
glClearColor (0.0f, 0.0f, 0.0f, 0.0f); // Black Background
|
||||||
glClearDepth (1.0f); // Depth Buffer Setup
|
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();
|
g_engine = JGE::GetInstance();
|
||||||
|
|
||||||
@@ -235,7 +290,7 @@ int InitGame(GLvoid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DestroyGame(GLvoid)
|
void DestroyGame(void)
|
||||||
{
|
{
|
||||||
// JParticleSystem::Destroy();
|
// JParticleSystem::Destroy();
|
||||||
// JMotionSystem::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
|
// 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();
|
DestroyGame();
|
||||||
|
|
||||||
@@ -413,7 +468,7 @@ BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscree
|
|||||||
WS_SIZEBOX |
|
WS_SIZEBOX |
|
||||||
WS_MAXIMIZEBOX |
|
WS_MAXIMIZEBOX |
|
||||||
//WS_MINIMIZE |
|
//WS_MINIMIZE |
|
||||||
WS_SYSMENU;// | \
|
WS_SYSMENU;// |
|
||||||
//WS_THICKFRAME ;
|
//WS_THICKFRAME ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -546,6 +601,9 @@ LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window
|
|||||||
WPARAM wParam, // Additional Message Information
|
WPARAM wParam, // Additional Message Information
|
||||||
LPARAM lParam) // 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
|
switch (uMsg) // Check For Windows Messages
|
||||||
{
|
{
|
||||||
case WM_ACTIVATE: // Watch For Window Activate Message
|
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])
|
if (false == g_holds[wParam])
|
||||||
{
|
{
|
||||||
g_holds[wParam] = true;
|
g_holds[wParam] = true;
|
||||||
for (signed int i = sizeof(gWinKeyCodes)/sizeof(gWinKeyCodes[0]) - 1; i >= 0; --i)
|
for (signed int i = gKeyCodes.size() - 1; i >= 0; --i)
|
||||||
if (gWinKeyCodes[i] == wParam)
|
if (gKeyCodes[i].first == wParam)
|
||||||
if (false == gThisFrame[i])
|
gKeyBuffer.push(gKeyCodes[i]);
|
||||||
{
|
|
||||||
gThisFrame[i] = true;
|
|
||||||
gKeyBuffer.push(make_pair(gPSPKeyMasks[i], wParam));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user