Changed rendering to use the DrawEvent's
This commit is contained in:
462
src/macosx.cpp
462
src/macosx.cpp
@@ -49,6 +49,8 @@
|
|||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
#include "EventManager.h"
|
||||||
|
#include "Events/DrawEvent.h"
|
||||||
#include "x11.h"
|
#include "x11.h"
|
||||||
//include necessary header files
|
//include necessary header files
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -72,11 +74,460 @@ int DrawGLScene()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
void ProcessCommandLineArgs(int argc, char** argv)
|
||||||
//int InitGL(GLvoid)
|
{
|
||||||
// Purpose:
|
string commandLine = "";
|
||||||
// To do all required setup before creating an OpenGL window
|
int i;
|
||||||
///*
|
for(i=1; i<argc; i++)
|
||||||
|
{
|
||||||
|
commandLine = commandLine + " " + argv[i];
|
||||||
|
}
|
||||||
|
level.ParseCmds(commandLine.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
OpenArena::EventManager* em = new OpenArena::EventManager();
|
||||||
|
em->RegisterEventHandler(new OpenArena::DrawEvent::DrawEventHandler());
|
||||||
|
XEvent event;
|
||||||
|
bool done = false;
|
||||||
|
|
||||||
|
ProcessCommandLineArgs(argc, argv);
|
||||||
|
|
||||||
|
InitControls();
|
||||||
|
|
||||||
|
level.glFont.SetScreenDimensions(level.screen.GetWidth()*2, level.screen.GetHeight()*2);
|
||||||
|
|
||||||
|
if(level.nextLevel == "")
|
||||||
|
{
|
||||||
|
level.LoadMap("intro.map");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
level.LoadMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Hack for now X11 no like 32 bit depth
|
||||||
|
if(level.screen.GetColorDepth() == 32)
|
||||||
|
{
|
||||||
|
level.screen.SetColorDepth(24);
|
||||||
|
}
|
||||||
|
|
||||||
|
// g_Screen.SetInitializer(new OpenArena::Window::Initializer());
|
||||||
|
// g_Screen.SetResizer(new OpenArena::Window::Resizer());
|
||||||
|
|
||||||
|
if(!g_Screen.Open(OPENARENA_VERSION, level.screen.GetWidth(), level.screen.GetHeight(), level.screen.GetColorDepth(), level.screen.GetFullscreen()))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.SetWindow(&g_Screen);
|
||||||
|
|
||||||
|
level.LoadGLTextures();
|
||||||
|
|
||||||
|
while(!done)
|
||||||
|
{
|
||||||
|
while(XPending(g_Screen.GetDisplay()) > 0)
|
||||||
|
{
|
||||||
|
//Equivalent of WNDPROC
|
||||||
|
XNextEvent(g_Screen.GetDisplay(), &event);
|
||||||
|
switch(event.type)
|
||||||
|
{
|
||||||
|
case Expose:
|
||||||
|
if(event.xexpose.count != 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//DrawGLScene();
|
||||||
|
em->SendEvent(new OpenArena::DrawEvent());
|
||||||
|
break;
|
||||||
|
case ConfigureNotify:
|
||||||
|
if((event.xconfigure.width != g_Screen.GetWidth()) || (event.xconfigure.height != g_Screen.GetHeight()))
|
||||||
|
{
|
||||||
|
g_Screen.SetWidth(event.xconfigure.width);
|
||||||
|
g_Screen.SetHeight(event.xconfigure.height);
|
||||||
|
ResizeGLScene(event.xconfigure.width, event.xconfigure.height);
|
||||||
|
|
||||||
|
//em->SendEvent(new ResizeWindowEvent(event.xconfigure.width, event.xconfigure.width);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ButtonPress:
|
||||||
|
keys[TranslateButton(event.xbutton.button)] = true;
|
||||||
|
break;
|
||||||
|
case ButtonRelease:
|
||||||
|
keys[TranslateButton(event.xbutton.button)] = false;
|
||||||
|
keys2[TranslateButton(event.xbutton.button)] = false;
|
||||||
|
break;
|
||||||
|
case KeyPress:
|
||||||
|
if(level.showConsole)
|
||||||
|
{
|
||||||
|
HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KeyRelease:
|
||||||
|
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||||
|
keys2[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||||
|
break;
|
||||||
|
case ClientMessage:
|
||||||
|
if(*XGetAtomName(g_Screen.GetDisplay(), event.xclient.message_type) == *"WM_PROTOCOLS")
|
||||||
|
{
|
||||||
|
printf("Exiting sanely...\n");
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} //End Equivalent of WNDPROC
|
||||||
|
|
||||||
|
if(active)
|
||||||
|
{
|
||||||
|
if(keys[OpenArena::KEY_ESCAPE])
|
||||||
|
{
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
else if(keys[OpenArena::KEY_F1])
|
||||||
|
{
|
||||||
|
g_Screen.Close();
|
||||||
|
g_Screen.ToggleFullscreen();
|
||||||
|
g_Screen.Open();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
level.defaultPlayer[0].camera.Update();
|
||||||
|
if(!level.showConsole)
|
||||||
|
{
|
||||||
|
if(level.mlook)
|
||||||
|
{
|
||||||
|
using OpenArena::Vec2i;
|
||||||
|
Vec2i middleOfScreen = Vec2i(g_Screen.GetWidth()/2, g_Screen.GetHeight()/2);
|
||||||
|
Vec2i mousePosition = g_Screen.GetMousePosition();
|
||||||
|
if(mousePosition != middleOfScreen)
|
||||||
|
{
|
||||||
|
//Vec2i mouseDelta = mousePosition - middleOfScreen;
|
||||||
|
Vec2i mouseDelta = middleOfScreen - mousePosition;
|
||||||
|
g_Screen.SetMousePosition(middleOfScreen);
|
||||||
|
const float MOUSE_SENSITIVITY_HORIZONTAL = 0.005;
|
||||||
|
const float MOUSE_SENSITIVITY_VERTICAL = 0.005;
|
||||||
|
float horizontalAngle = mouseDelta.x * MOUSE_SENSITIVITY_HORIZONTAL;
|
||||||
|
float verticalAngle = mouseDelta.y * MOUSE_SENSITIVITY_VERTICAL;
|
||||||
|
level.defaultPlayer[0].camera.RotateHorizontal(horizontalAngle);
|
||||||
|
level.defaultPlayer[0].camera.RotateVertical(verticalAngle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// SetMousePosition(g_Screen.width/2, g_Screen.height/2);//Shit this may be windows specific
|
||||||
|
}
|
||||||
|
|
||||||
|
//Maybe some of these if not almost all should be moved into Level
|
||||||
|
//////////
|
||||||
|
//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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em->SendEvent(new OpenArena::DrawEvent());
|
||||||
|
//DrawGLScene();
|
||||||
|
|
||||||
|
if(keys[OpenArena::KEY_F1])
|
||||||
|
{
|
||||||
|
keys[OpenArena::KEY_F1] = false;
|
||||||
|
g_Screen.Close();
|
||||||
|
g_Screen.ToggleFullscreen();
|
||||||
|
if(!g_Screen.Open(OPENARENA_VERSION, level.screen.GetWidth(), level.screen.GetHeight(), level.screen.GetColorDepth(), level.screen.GetFullscreen()))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
level.UnloadMap();
|
||||||
|
g_Screen.Close();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
XEvent event;
|
XEvent event;
|
||||||
@@ -535,3 +986,4 @@ float lastTime = 0.0f; // This will hold the time from the last frame
|
|||||||
float currentTime;
|
float currentTime;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user