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__
|
||||
#include "main.h"
|
||||
#include "version.h"
|
||||
#include "EventManager.h"
|
||||
#include "Events/DrawEvent.h"
|
||||
#include "x11.h"
|
||||
//include necessary header files
|
||||
using namespace std;
|
||||
@@ -72,11 +74,460 @@ int DrawGLScene()
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
//int InitGL(GLvoid)
|
||||
// Purpose:
|
||||
// To do all required setup before creating an OpenGL window
|
||||
///*
|
||||
void ProcessCommandLineArgs(int argc, char** argv)
|
||||
{
|
||||
string commandLine = "";
|
||||
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)
|
||||
{
|
||||
XEvent event;
|
||||
@@ -535,3 +986,4 @@ float lastTime = 0.0f; // This will hold the time from the last frame
|
||||
float currentTime;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user