diff --git a/src/linux.cpp b/src/linux.cpp new file mode 100644 index 0000000..48983f1 --- /dev/null +++ b/src/linux.cpp @@ -0,0 +1,953 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Module: linux.cpp +// Author: Tom Hicks +// Creation: 09-01-2003 +// LastEdit: 06-19-2005 +// Editors: Tom Hicks +// +// Purpose: +// To implement the OpenArena SDK. +// +// Summary of Methods: +// Global +// -InitControls() +// Loads the defaultPlayer's configuration. +// -InitGL() +// Initializes OpenGL and is responsible for loading textures. +// -ResizeGLScene(GLsizei width, GLsizei height) +// Resizes the viewport to the current size of the visible area of the window specified by width and height. +// -KillGLWindow() +// Closes the window. +// -CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag) +// Creates the window with the specified parameters. +// -WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +// Main procedure. +// -WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +// Window Procedure for the OpenGL window. +// +//////////////////////////////////////////////////////////////////////////////// +#ifdef __linux + +//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); +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); +*/ + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Function Definitions + +// +//void InitControls() +// Purpose: +// Initializes controls by loading the default control config file "my.cfg". + +void InitControls() +{ + if (!level.LoadConfig("my.cfg")) + level.LoadConfig(); +} + +// +// int InitGL(GLvoid) +// Purpose: +// To do all required setup before creating an OpenGL window +// Pre: +// +// Post: +// + +int InitGL(GLvoid) +{ + level.LoadGLTextures(); + + glEnable(GL_TEXTURE_2D); + glShadeModel(GL_SMOOTH); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClearDepth(1.0f); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + + /*lighting disabled temporarily + glLightfv(GL_LIGHT1, GL_AMBIENT, level.LightAmbient); + for(index=0; index'); + } + 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; + } + + + + while(!done) + { + if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) + { + if (msg.message==WM_QUIT) + { + 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; + } + } + } + } + + level.UnloadMap(); + KillGLWindow(); + return (msg.wParam); +} +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/windows.cpp similarity index 99% rename from src/main.cpp rename to src/windows.cpp index ff3a570..7bfd64a 100644 --- a/src/main.cpp +++ b/src/windows.cpp @@ -1,9 +1,9 @@ //////////////////////////////////////////////////////////////////////////////// // -// Module: main.cpp +// Module: windows.cpp // Author: Tom Hicks // Creation: 09-01-2003 -// LastEdit: 10-20-2003 +// LastEdit: 06-19-2005 // Editors: Tom Hicks // // Purpose: @@ -27,7 +27,7 @@ // Window Procedure for the OpenGL window. // //////////////////////////////////////////////////////////////////////////////// - +#ifdef WIN32 //include necessary header files #include "../include/main.h" @@ -945,3 +945,4 @@ int WINAPI WinMain( HINSTANCE hInstance, KillGLWindow(); return (msg.wParam); } +#endif \ No newline at end of file