From 4ff0eff5568d6002620817fea80129ff83b76eca Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sat, 25 Jun 2005 16:09:42 -0400 Subject: [PATCH] Changed: Compiles and runs under linux TODO: Makefile needs to be tweaked TODO: linux version needs to be changed so it actually renders the world 'n stuff ~g2k --- src/Makefile | 20 +- src/linux.cpp | 1007 +++++++++---------------------------------------- 2 files changed, 199 insertions(+), 828 deletions(-) diff --git a/src/Makefile b/src/Makefile index 5bdfd23..90d02c3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,7 +2,7 @@ CPP = g++ INCLUDES = LD = g++ INCLUDEPATH = ../include -OBJECTS = bmp.o camera.o ctrls.o level.o main.o mygl.o myglFont.o myglTexture.o physics.o player.o strmanip.o tga.o vector.o +OBJECTS = bmp.o camera.o ctrls.o level.o mygl.o myglFont.o myglTexture.o physics.o player.o strmanip.o tga.o vector.o main.o LIBS = -L/usr/X11R6/lib -lGL -lGLU -lXxf86vm LIBRARIES = SO_LIBS = @@ -32,17 +32,31 @@ oa_video.so: oa_input.so: -bmp.o: bmp.cpp $(INCLUDEPATH)/bmp.h +#Add something like this +#$(INCLUDEPATH)/bmp.h: mygl.h datatypes.h texture.h +# touch bmp.h + +bmp.o: bmp.cpp $(INCLUDEPATH)/bmp.h $(CPP) -c -o bmp.o bmp.cpp +$(INCLUDEPATH)/bmp.h: $(INCLUDEPATH)/mygl.h $(INCLUDEPATH)/datatypes.h $(INCLUDEPATH)/texture.h + touch $(INCLUDEPATH)/bmp.h + +#$(INCLUDEPATH)/mygl.h: $(INCLUDEPATH)/datatypes.h + camera.o: camera.cpp $(INCLUDEPATH)/camera.h $(CPP) -c -o camera.o camera.cpp + +#$(INCLUDEPATH)/camera.h ctrls.o: ctrls.cpp $(INCLUDEPATH)/ctrls.h $(CPP) -c -o ctrls.o ctrls.cpp level.o: level.cpp $(INCLUDEPATH)/level.h $(CPP) -c -o level.o level.cpp + +$(INCLUDEPATH)/level.h: $(INCLUDEPATH)/myglFont.h + touch $(INCLUDEPATH)/level.h mygl.o: mygl.cpp $(INCLUDEPATH)/mygl.h $(CPP) -c -o mygl.o mygl.cpp @@ -68,5 +82,5 @@ tga.o: tga.cpp $(INCLUDEPATH)/tga.h vector.o: vector.cpp $(INCLUDEPATH)/vector.h $(CPP) -c -o vector.o vector.cpp -main.o: linux.cpp $(INCLUDEPATH)/linux.h $(INCLUDEPATH)/main.h +main.o: linux.cpp $(INCLUDEPATH)/main.h $(CPP) -c -o main.o linux.cpp diff --git a/src/linux.cpp b/src/linux.cpp index 48983f1..1fb8a61 100644 --- a/src/linux.cpp +++ b/src/linux.cpp @@ -31,40 +31,51 @@ //include necessary header files #include "../include/main.h" - -/* I'm pretty sure this won't work in linux -//link necessary libraries -#pragma comment(lib, "opengl32.lib") -#pragma comment(lib, "glu32.lib") -#pragma comment(lib, "glaux.lib") -#pragma comment(lib, "winmm.lib") -*/ - -//Ensure CDS_FULLSCREEN is defined -#ifndef CDS_FULLSCREEN -#define CDS_FULLSCREEN 4 -#endif - using namespace std; void InitControls(); -int InitGL(GLvoid); -void ReSizeGLScene(GLsizei width, GLsizei height); -bool CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag); +int InitGL(); void KillGLWindow(); -/* These two are definately wrong -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); -LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -*/ + +static int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4, GLX_DEPTH_SIZE, 16, None}; +static int attrListDbl[] = {GLX_RGBA, GLX_DOUBLEBUFFER, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4, GLX_DEPTH_SIZE, 16, None}; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Function Definitions +void ResizeGLScene(GLsizei width, GLsizei height) +{ + if(height == 0) + height = 1; + + glViewport(0,0,width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0f, (GLfloat)width/height, 0.1f, 100.0f); + glMatrixMode(GL_MODELVIEW); +} + +int DrawGLScene() +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLoadIdentity(); + glTranslatef(-1.5f, 0.0f, -6.0f); + glBegin(GL_TRIANGLES); + glVertex3f(0.0f, 1.0f, 0.0f); + glVertex3f(-1.0f, -1.0f, 0.0f); + glVertex3f(1.0f, 1.0f, 0.0f); + glEnd(); + if(g_Screen.doubleBuffered) + { + glXSwapBuffers(g_Screen.display, g_Screen.window); + } + return 1; +} + // //void InitControls() // Purpose: // Initializes controls by loading the default control config file "my.cfg". - void InitControls() { if (!level.LoadConfig("my.cfg")) @@ -72,14 +83,9 @@ void InitControls() } // -// int InitGL(GLvoid) +//int InitGL(GLvoid) // Purpose: // To do all required setup before creating an OpenGL window -// Pre: -// -// Post: -// - int InitGL(GLvoid) { level.LoadGLTextures(); @@ -109,845 +115,196 @@ int InitGL(GLvoid) } // -// GLvoid ReSizeGLScene(GLsizei width, GLsizei height) +//void KillGLWindow() // Purpose: -// To resize the OpenGL window also called on creation -// Pre: -// -// Post: -// - -void ReSizeGLScene(GLsizei width, GLsizei height) -{ - if (height==0) - height=1; - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - +// To do all required setup before creating an OpenGL window void KillGLWindow() { - if (g_Screen.fullscreen) + if(g_Screen.hRC) { - ChangeDisplaySettings(NULL, 0); - ShowCursor(true/*false*/); + if(!glXMakeCurrent(g_Screen.display, None, NULL)) + { + printf("Could not release drawing context.\n"); + } + glXDestroyContext(g_Screen.display, g_Screen.hRC); + g_Screen.hRC = NULL; } - - if (hRC) + + if(g_Screen.fullscreen) { - if (!wglMakeCurrent(NULL, NULL)) - MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); - - if (!wglDeleteContext(hRC)) - MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); - - hRC=NULL; - } - - if (hDC && !ReleaseDC(g_hWnd, hDC)) - { - MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); - hDC=NULL; - } - - if (g_hWnd && !DestroyWindow(g_hWnd)) - { - MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); - g_hWnd=NULL; - } - - if (!UnregisterClass("OpenArena v0.1.0", hInstance)) - { - MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION); - hInstance=NULL; + XF86VidModeSwitchToMode(g_Screen.display, g_Screen.screen, &g_Screen.vidMode); + XF86VidModeSetViewPort(g_Screen.display, g_Screen.screen, 0, 0); } + XCloseDisplay(g_Screen.display); } +// +//bool CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag) +// Purpose: +// bool CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag) { - unsigned int PixelFormat; - WNDCLASS wc; - DWORD dwExStyle; - DWORD dwStyle; - RECT WindowRect; - WindowRect.left=(long)0; - WindowRect.right=(long)width; - WindowRect.top=(long)0; - WindowRect.bottom=(long)height; - - g_Screen.fullscreen = fullscreenflag; + XVisualInfo* vi; + Colormap cmap; + int bestMode = 0; + int vidModeMajorVersion; + int vidModeMinorVersion; + int glxMajorVersion; + int glxMinorVersion; + int modeNum; + XF86VidModeModeInfo** modes; + Atom wmDelete; + Window winDummy; + unsigned int borderDummy; + + g_Screen.name = title; g_Screen.width = width; g_Screen.height = height; g_Screen.bpp = bits; - g_Screen.name = title; + g_Screen.fullscreen = fullscreenflag; - hInstance = GetModuleHandle(NULL); - wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; - wc.lpfnWndProc = (WNDPROC)WndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = "OpenArena v0.1.0"; - - if (!RegisterClass(&wc)) + g_Screen.display = XOpenDisplay(0); + g_Screen.screen = DefaultScreen(g_Screen.display); + XF86VidModeQueryVersion(g_Screen.display, &vidModeMajorVersion, &vidModeMinorVersion); + printf("XF86VidModeExtension-Version %d.%d\n", vidModeMajorVersion, vidModeMinorVersion); + + XF86VidModeGetAllModeLines(g_Screen.display, g_Screen.screen, &modeNum, &modes); + g_Screen.vidMode = *modes[0]; + + int i; + for(i=0; ihdisplay == width) && (modes[i]->vdisplay == height)) { - if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","OpenArena",MB_YESNO|MB_ICONEXCLAMATION)==IDYES) - g_Screen.fullscreen = false; - else - { - - MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP); - return false; - } + bestMode = i; } } - - if (g_Screen.fullscreen) + + vi = glXChooseVisual(g_Screen.display, g_Screen.screen, attrListDbl); + if(vi == NULL) { - dwExStyle = WS_EX_APPWINDOW; - dwStyle = WS_POPUP; - ShowCursor(/*true*/false); + vi = glXChooseVisual(g_Screen.display, g_Screen.screen, attrListSgl); + g_Screen.doubleBuffered = false; + printf("Only Singlebuffered Visual!\n"); } else { - ShowCursor(false); - dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; - dwStyle = WS_OVERLAPPEDWINDOW; + g_Screen.doubleBuffered = true; + printf("Got Doublebuffered Visual!\n"); } - - AdjustWindowRectEx(&WindowRect, dwStyle, false, dwExStyle); - - if (!(g_hWnd = CreateWindowEx(dwExStyle, "OpenArena v0.1.0", title.c_str(), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle, 0, 0, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, NULL, NULL, hInstance, NULL))) + + glXQueryVersion(g_Screen.display, &glxMajorVersion, & glxMinorVersion); + printf("glX-Version %d.%d\n", glxMajorVersion, glxMinorVersion); + + g_Screen.hRC = glXCreateContext(g_Screen.display, vi, 0, GL_TRUE); + cmap = XCreateColormap(g_Screen.display, RootWindow(g_Screen.display, vi->screen), vi->visual, AllocNone); + g_Screen.attributes.colormap = cmap; + g_Screen.attributes.border_pixel = 0; + + if(g_Screen.fullscreen) { - KillGLWindow(); - MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; + XF86VidModeSwitchToMode(g_Screen.display, g_Screen.screen, modes[bestMode]); + XF86VidModeSetViewPort(g_Screen.display, g_Screen.screen, 0, 0); + XFree(modes); + + g_Screen.attributes.override_redirect = true; + g_Screen.attributes.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask; + g_Screen.window = XCreateWindow(g_Screen.display, RootWindow(g_Screen.display, vi->screen), 0, 0, width, height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect, &g_Screen.attributes); + XWarpPointer(g_Screen.display, None, g_Screen.window, 0, 0, 0, 0, 0, 0); + XMapRaised(g_Screen.display, g_Screen.window); + XGrabKeyboard(g_Screen.display, g_Screen.window, true, GrabModeAsync, GrabModeAsync, CurrentTime); + XGrabPointer(g_Screen.display, g_Screen.window, true, ButtonPressMask, GrabModeAsync, GrabModeAsync, g_Screen.window, None, CurrentTime); } - - static PIXELFORMATDESCRIPTOR pfd={sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, bits, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 }; - - if (!(hDC=GetDC(g_hWnd))) + else { - KillGLWindow(); - MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; + g_Screen.attributes.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask; + g_Screen.window = XCreateWindow(g_Screen.display, RootWindow(g_Screen.display, vi->screen), 0, 0, width, height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap | CWEventMask, &g_Screen.attributes); + wmDelete = XInternAtom(g_Screen.display, "WM_DELETE_WINDOW", true); + XSetWMProtocols(g_Screen.display, g_Screen.window, &wmDelete, 1); + XSetStandardProperties(g_Screen.display, g_Screen.window, title.c_str(), title.c_str(), None, NULL, 0, NULL); + XMapRaised(g_Screen.display, g_Screen.window); } - - if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) + + glXMakeCurrent(g_Screen.display, g_Screen.window, g_Screen.hRC); + unsigned int twidth, theight, depth; + XGetGeometry(g_Screen.display, g_Screen.window, &winDummy, &g_Screen.x, &g_Screen.y, &twidth, &theight, &borderDummy, &depth); + g_Screen.bpp = (char)depth; + g_Screen.height = (short)twidth; + g_Screen.width = (short)theight; + printf("Depth %d\n", g_Screen.bpp); + if(glXIsDirect(g_Screen.display, g_Screen.hRC)) { - KillGLWindow(); - MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; + printf("Congrats, you have Direct Rendering!\n"); } - - if(!SetPixelFormat(hDC,PixelFormat,&pfd)) + else { - KillGLWindow(); - MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; + printf("Sorry, no Direct Rendering possible!\n"); } - - if (!(hRC=wglCreateContext(hDC))) - { - KillGLWindow(); - MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; - } - - if(!wglMakeCurrent(hDC,hRC)) - { - KillGLWindow(); - MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; - } - - ShowWindow(g_hWnd,SW_SHOW); - SetForegroundWindow(g_hWnd); - SetFocus(g_hWnd); - ReSizeGLScene(width, height); - - if (!InitGL()) - { - KillGLWindow(); - MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return false; - } - + InitGL(); return true; } -LRESULT CALLBACK WndProc(HWND hWnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) +int main(int argc, char** argv) { - switch (uMsg) - { - case WM_ACTIVATE: - { - if (!HIWORD(wParam)) - { - active=true; - } - else - { - active=false; - } - - return 0; - } - case WM_SYSCOMMAND: - { - switch (wParam) - { - case SC_SCREENSAVE: - case SC_MONITORPOWER: - return 0; - } - break; - } - case WM_CLOSE: - { - PostQuitMessage(0); - return 0; - } - case WM_KEYDOWN: - { - 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); - } - - } - else - { - keys[wParam] = true; - } - return 0; - } - case WM_KEYUP: - { - keys[wParam] = false; - keys2[wParam] = false; - return 0; - } - case WM_SYSKEYDOWN: - break; - case WM_SIZE: - { - ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); - return 0; - } - case WM_LBUTTONDOWN: - { - keys[VK_LBUTTON] = true; - return 0; - } - case WM_LBUTTONUP: - { - keys[VK_LBUTTON] = false; - keys[VK_LBUTTON] = false; - return 0; - } - case WM_RBUTTONDOWN: - { - keys[VK_RBUTTON] = true; - return 0; - } - case WM_RBUTTONUP: - { - keys[VK_RBUTTON] = false; - keys[VK_RBUTTON] = false; - return 0; - } - case WM_MBUTTONDOWN: - { - keys[VK_MBUTTON] = true; - return 0; - } - case WM_MBUTTONUP: - { - keys[VK_MBUTTON] = false; - keys[VK_MBUTTON] = false; - return 0; - } - } - - return DefWindowProc(hWnd,uMsg,wParam,lParam); -} - -int WINAPI WinMain( HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - MSG msg; - bool done=false; - - - if (strlen(lpCmdLine)) - level.ParseCmds(lpCmdLine); - - InitControls(); - - g_Screen.name = "OpenArena v0.1.0"; - g_Screen.width = level.screen.width; - g_Screen.height = level.screen.height; - g_Screen.bpp = level.screen.bpp; - g_Screen.fullscreen = level.screen.fullscreen; - - level.glFont.SetScreenDimensions(g_Screen.width*2, g_Screen.height*2); - //level.glFont.BuildFont("oa\\textures\\menu\\font.bmp");//(level.gamedir + "\\textures\\menu\\font.bmp").c_str()); - if (level.nextLevel == "") - { - level.LoadMap("intro.map"); - } - - if (!CreateGLWindow(g_Screen.name, g_Screen.width, g_Screen.height, g_Screen.bpp, g_Screen.fullscreen)) - { - return 0; - } - - - + XEvent event; + bool done = false; + + g_Screen.fullscreen = false; + CreateGLWindow("Blah Blah BLah", 640, 480, 24, false); while(!done) { - if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) + while(XPending(g_Screen.display) > 0) { - if (msg.message==WM_QUIT) + XNextEvent(g_Screen.display, &event); + switch(event.type) { - done=true; - } - else - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - else - { - if (active) - { - if (keys[VK_ESCAPE]) - { - done=true; - } - else - { - level.defaultPlayer[0].camera.Update(); - - if(level.showConsole) - { - if(keys['I'] && !keys2['I']) - level.showConsole = false; - //level.UpdateConsole('\n'); - } - else - { - if (level.mlook) - { - level.defaultPlayer[0].camera.SetViewByMouse(g_Screen); - } - else - { - SetCursorPos(g_Screen.width/2, g_Screen.height/2); - } - - ////////// - //Move Backward - if(!level.defaultPlayer->controls.backward.IsEmpty()) - { - level.defaultPlayer->controls.backward.FirstPosition(); - if(keys[level.defaultPlayer->controls.backward.Retrieve()]) - { - level.defaultPlayer->camera.MoveCamera(-level.moveSpeed); - } - else - { - while(level.defaultPlayer->controls.backward.NextPosition() && (keys[level.defaultPlayer->controls.backward.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.backward.Retrieve()]) - { - level.defaultPlayer->camera.MoveCamera(-level.moveSpeed); - } - } - } - } - - ////////// - //Move forward - if(!level.defaultPlayer->controls.forward.IsEmpty()) - { - level.defaultPlayer->controls.forward.FirstPosition(); - if(keys[level.defaultPlayer->controls.forward.Retrieve()]) - { - level.defaultPlayer->camera.MoveCamera(level.moveSpeed); - } - else - { - while(level.defaultPlayer->controls.forward.NextPosition() && (keys[level.defaultPlayer->controls.forward.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.forward.Retrieve()]) - { - level.defaultPlayer->camera.MoveCamera(level.moveSpeed); - } - } - } - } - - ////////// - //Strafe Left - if(!level.defaultPlayer->controls.moveLeft.IsEmpty()) - { - level.defaultPlayer->controls.moveLeft.FirstPosition(); - if(keys[level.defaultPlayer->controls.moveLeft.Retrieve()]) - { - level.defaultPlayer->camera.StrafeCamera(-level.moveSpeed); - } - else - { - while(level.defaultPlayer->controls.moveLeft.NextPosition() && (keys[level.defaultPlayer->controls.moveLeft.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.moveLeft.Retrieve()]) - { - level.defaultPlayer->camera.StrafeCamera(-level.moveSpeed); - } - } - } - } - - ////////// - //Strafe Right - if(!level.defaultPlayer->controls.moveRight.IsEmpty()) - { - level.defaultPlayer->controls.moveRight.FirstPosition(); - if(keys[level.defaultPlayer->controls.moveRight.Retrieve()]) - { - level.defaultPlayer[0].camera.StrafeCamera(level.moveSpeed); - } - else - { - while(level.defaultPlayer->controls.moveRight.NextPosition() && (keys[level.defaultPlayer->controls.moveRight.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.moveRight.Retrieve()]) - { - level.defaultPlayer->camera.StrafeCamera(level.moveSpeed); - } - } - } - } - - ////////// - //Keyboard Look Left - if(!level.defaultPlayer->controls.lookLeft.IsEmpty()) - { - level.defaultPlayer->controls.lookLeft.FirstPosition(); - if(keys[level.defaultPlayer->controls.lookLeft.Retrieve()]) - { - level.defaultPlayer[0].camera.RotateView(level.turnSpeed, 0, 1, 0); - } - else - { - while(level.defaultPlayer->controls.lookLeft.NextPosition() && (keys[level.defaultPlayer->controls.lookLeft.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.lookLeft.Retrieve()]) - { - level.defaultPlayer[0].camera.RotateView(level.turnSpeed, 0, 1, 0); - } - } - } - } - - ////////// - //Keyboard Look Right - if(!level.defaultPlayer->controls.lookRight.IsEmpty()) - { - level.defaultPlayer->controls.lookRight.FirstPosition(); - if(keys[level.defaultPlayer->controls.lookRight.Retrieve()]) - { - level.defaultPlayer->camera.RotateView(-level.turnSpeed, 0, 1, 0); - } - else - { - while(level.defaultPlayer->controls.lookRight.NextPosition() && (keys[level.defaultPlayer->controls.lookRight.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.lookRight.Retrieve()]) - { - level.defaultPlayer->camera.RotateView(-level.turnSpeed, 0, 1, 0); - } - } - } - } - - ////////// - //Keyboard Look Up - if(!level.defaultPlayer->controls.lookUp.IsEmpty()) - { - level.defaultPlayer->controls.lookUp.FirstPosition(); - if(keys[level.defaultPlayer->controls.lookUp.Retrieve()]) - { - level.defaultPlayer->camera.RotateView(level.turnSpeed, 1, 0, 0); - } - else - { - while(level.defaultPlayer->controls.lookUp.NextPosition() && (keys[level.defaultPlayer->controls.lookUp.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.lookUp.Retrieve()]) - { - level.defaultPlayer->camera.RotateView(level.turnSpeed, 1, 0, 0); - } - } - } - } - - ////////// - //Keyboard Look Down - if(!level.defaultPlayer->controls.lookDown.IsEmpty()) - { - level.defaultPlayer->controls.lookDown.FirstPosition(); - if(keys[level.defaultPlayer->controls.lookDown.Retrieve()]) - { - level.defaultPlayer->camera.RotateView(-level.turnSpeed, 1, 0, 0); - } - else - { - while(level.defaultPlayer->controls.lookDown.NextPosition() && (keys[level.defaultPlayer->controls.lookDown.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.lookDown.Retrieve()]) - { - level.defaultPlayer->camera.RotateView(-level.turnSpeed, 1, 0, 0); - } - } - } - } - - ////////// - //Toggle Show FPS - if(!level.defaultPlayer->controls.toggleFPS.IsEmpty()) - { - level.defaultPlayer->controls.toggleFPS.FirstPosition(); - if(keys[level.defaultPlayer->controls.toggleFPS.Retrieve()]) - { - if(!keys2[level.defaultPlayer->controls.toggleFPS.Retrieve()]) - { - level.showFPS = !level.showFPS; - } - } - else - { - while(level.defaultPlayer->controls.toggleFPS.NextPosition() && (keys[level.defaultPlayer->controls.toggleFPS.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.toggleFPS.Retrieve()]) - { - if(!keys2[level.defaultPlayer->controls.toggleFPS.Retrieve()]) - { - level.showFPS = !level.showFPS; - } - } - } - } - } - - ////////// - //Toggle MouseLook - if(!level.defaultPlayer->controls.toggleMouseLook.IsEmpty()) - { - level.defaultPlayer->controls.toggleMouseLook.FirstPosition(); - if(keys[level.defaultPlayer->controls.toggleMouseLook.Retrieve()]) - { - if(keys2[level.defaultPlayer->controls.toggleMouseLook.Retrieve()]) - { - level.mlook = ! level.mlook; - } - } - else - { - while(level.defaultPlayer->controls.toggleMouseLook.NextPosition() && (keys[level.defaultPlayer->controls.toggleMouseLook.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.toggleMouseLook.Retrieve()]) - { - if(keys2[level.defaultPlayer->controls.toggleMouseLook.Retrieve()]) - { - level.mlook = ! level.mlook; - } - } - } - } - } - - ////////// - //Toggle Console - if(!level.defaultPlayer[0].controls.toggleConsole.IsEmpty()) - { - level.defaultPlayer[0].controls.toggleConsole.FirstPosition(); - if(keys[level.defaultPlayer[0].controls.toggleConsole.Retrieve()]) - { - if(!keys2[level.defaultPlayer[0].controls.toggleConsole.Retrieve()]) - { - level.showConsole = !level.showConsole; - keys2[level.defaultPlayer[0].controls.toggleConsole.Retrieve()] = true; - } - } - else - { - while(level.defaultPlayer[0].controls.toggleConsole.NextPosition() && (keys[level.defaultPlayer[0].controls.toggleConsole.Retrieve()] != true)); - { - if(keys[level.defaultPlayer[0].controls.toggleConsole.Retrieve()]) - { - if(!keys2[level.defaultPlayer[0].controls.toggleConsole.Retrieve()]) - { - level.showConsole = !level.showConsole; - keys2[level.defaultPlayer[0].controls.toggleConsole.Retrieve()] = true; - } - } - } - } - } - - ////////// - //Quick MouseLook - if(!level.defaultPlayer->controls.quickMouseLook.IsEmpty()) - { - level.defaultPlayer->controls.quickMouseLook.FirstPosition(); - if(keys[level.defaultPlayer->controls.quickMouseLook.Retrieve()]) - { - if(keys2[level.defaultPlayer->controls.quickMouseLook.Retrieve()]) - { - level.mlook = ! level.mlook; - } - } - else - { - while(level.defaultPlayer->controls.quickMouseLook.NextPosition() && (keys[level.defaultPlayer->controls.quickMouseLook.Retrieve()] != true)); - { - if(keys[level.defaultPlayer->controls.quickMouseLook.Retrieve()]) - { - if(keys2[level.defaultPlayer->controls.quickMouseLook.Retrieve()]) - { - level.mlook = ! level.mlook; - } - } - } - } - } - //level.Render(); - } - level.Render(); - // - } - } - - SwapBuffers(hDC); - - if (keys[VK_F1]) - { - keys[VK_F1]=false; - KillGLWindow(); - g_Screen.fullscreen=!g_Screen.fullscreen; - if (!CreateGLWindow("OpenArena",g_Screen.width,g_Screen.height,g_Screen.bpp,g_Screen.fullscreen)) - { - return 0; - } + case Expose: + if(event.xexpose.count != 0) + { + break; + } + DrawGLScene(); + break; + case ConfigureNotify: + if((event.xconfigure.width != g_Screen.width) || (event.xconfigure.height != g_Screen.height)) + { + g_Screen.width = event.xconfigure.width; + g_Screen.height = event.xconfigure.height; + printf("Resize event\n"); + ResizeGLScene(event.xconfigure.width, event.xconfigure.height); + } + break; + case ButtonPress: + done = true; + break; + case KeyPress: + if(XLookupKeysym(&event.xkey, 0) == XK_Escape) + { + done = true; + } + if(XLookupKeysym(&event.xkey, 0) == XK_F1) + { + KillGLWindow(); + g_Screen.fullscreen = !g_Screen.fullscreen; + CreateGLWindow("Blah Blah Blah", 640, 480, 24, g_Screen.fullscreen); + } + break; + case ClientMessage: + if(*XGetAtomName(g_Screen.display, event.xclient.message_type) == *"WM_PROTOCOLS") + { + printf("Exiting sanely...\n"); + done = true; + } + break; + default: + break; } } + DrawGLScene(); } - - level.UnloadMap(); KillGLWindow(); - return (msg.wParam); + exit(0); } -#endif \ No newline at end of file + +#endif