Keyboard Controls changed to Win32 API.

This commit is contained in:
MusicalProgrammer
2018-05-30 22:42:48 -04:00
parent b2c0fb58da
commit a16953c8a0

View File

@@ -10,6 +10,8 @@
@author Morgan McGuire, matrix@graphics3d.com @author Morgan McGuire, matrix@graphics3d.com
*/ */
#define NO_SDL_MAIN
#include <G3DAll.h> #include <G3DAll.h>
#include <iomanip> #include <iomanip>
#include "Instance.h" #include "Instance.h"
@@ -87,10 +89,13 @@ class Demo : public GApp {
virtual void onGraphics(RenderDevice* rd); virtual void onGraphics(RenderDevice* rd);
virtual void onUserInput(UserInput* ui); virtual void onUserInput(UserInput* ui);
virtual void onCleanup(); virtual void onCleanup();
void QuitApp();
private: private:
HWND hWndMain; HWND hWndMain;
SkyRef sky; SkyRef sky;
void main(); bool quit;
void main();
}; };
class App : public GApp { class App : public GApp {
@@ -133,6 +138,7 @@ HWND App::getMainHWND()
Demo::Demo(const GAppSettings& settings,Win32Window* window) : GApp(settings,window) { Demo::Demo(const GAppSettings& settings,Win32Window* window) : GApp(settings,window) {
varStatic = VARArea::create(1024 * 1024); varStatic = VARArea::create(1024 * 1024);
hWndMain = window->hwnd(); hWndMain = window->hwnd();
quit=false;
} }
void clearInstances() void clearInstances()
@@ -912,36 +918,36 @@ void Demo::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
//User Input //User Input
void Demo::onUserInput(UserInput* ui) { void Demo::onUserInput(UserInput* ui) {
if (GetKeyState(VK_ESCAPE) >> 1) {
if (ui->keyPressed(SDLK_ESCAPE)) {
// Even when we aren't in debug mode, quit on escape. // Even when we aren't in debug mode, quit on escape.
//endApplet = true; //endApplet = true;
endProgram = true; PostQuitMessage(0);
//endProgram = true;
} }
if(mouseMovedBeginMotion) if(mouseMovedBeginMotion)
{ {
mouseMovedBeginMotion = false; mouseMovedBeginMotion = false;
debugController.setActive(true); debugController.setActive(true);
} }
if(ui->keyPressed(SDL_RIGHT_MOUSE_KEY)) if(GetKeyState(VK_RBUTTON) >> 1)
{ {
oldMouse = ui->getMouseXY(); oldMouse = ui->getMouseXY();
showMouse = false; showMouse = false;
window()->setRelativeMousePosition(window()->width()/2, window()->height()/2); window()->setRelativeMousePosition(window()->width()/2, window()->height()/2);
mouseMovedBeginMotion = true; mouseMovedBeginMotion = true;
} }
else if(ui->keyReleased(SDL_RIGHT_MOUSE_KEY)) else
{ {
ui->setMouseXY(oldMouse); ui->setMouseXY(oldMouse);
showMouse = true; showMouse = true;
debugController.setActive(false); debugController.setActive(false);
} }
if(ui->keyPressed(SDLK_LSHIFT) || ui->keyPressed(SDLK_RSHIFT))
if(GetKeyState(VK_RSHIFT) >> 1 || GetKeyState(VK_LSHIFT) >> 1)
{ {
moveRate = 1; moveRate = 1;
} }
else if(ui->keyReleased(SDLK_LSHIFT) || ui->keyReleased(SDLK_RSHIFT)) else
{ {
moveRate = 0.5; moveRate = 0.5;
} }
@@ -959,14 +965,14 @@ void Demo::onUserInput(UserInput* ui) {
cameraPos = cameraPos - frame.lookVector()*2; cameraPos = cameraPos - frame.lookVector()*2;
} }
if(ui->keyPressed(SDLK_DELETE)) if(GetKeyState(VK_DELETE) >> 1)
{ {
deleteInstance(); deleteInstance();
} }
if(ui->keyDown(SDLK_LCTRL)) if(GetKeyState(VK_LCONTROL) >> 1)
{ {
if(ui->keyPressed('d')) if(GetKeyState('D') >> 1)
{ {
messageTime = System::time(); messageTime = System::time();
if(debugMode()) if(debugMode())
@@ -985,25 +991,25 @@ void Demo::onUserInput(UserInput* ui) {
dataModel->mousex = ui->getMouseX(); dataModel->mousex = ui->getMouseX();
dataModel->mousey = ui->getMouseY(); dataModel->mousey = ui->getMouseY();
dataModel->mouseButton1Down = ui->keyDown(SDL_LEFT_MOUSE_KEY); dataModel->mouseButton1Down = ui->keyDown(SDL_LEFT_MOUSE_KEY);
if(ui->keyDown(SDLK_UP)) if(GetKeyState(VK_UP) >> 1)
{ {
forwards = true; forwards = true;
} }
else if(ui->keyDown(SDLK_DOWN)) else if(GetKeyState(VK_DOWN) >> 1)
{ {
backwards = true; backwards = true;
} }
if(ui->keyDown(SDLK_LEFT)) if(GetKeyState(VK_LEFT) >> 1)
{ {
left = true; left = true;
} }
else if(ui->keyDown(SDLK_RIGHT)) else if(GetKeyState(VK_RIGHT) >> 1)
{ {
right = true; right = true;
} }
if(ui->keyPressed(SDL_LEFT_MOUSE_KEY)) if(GetKeyState(SDL_LEFT_MOUSE_KEY))
{ {
bool onGUI = false; bool onGUI = false;
std::vector<Instance*> instances_2D = dataModel->getGuiRoot()->getAllChildren(); std::vector<Instance*> instances_2D = dataModel->getGuiRoot()->getAllChildren();
@@ -1440,16 +1446,17 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Demo *app = (Demo *)GetWindowLongPtr(hwnd, GWL_USERDATA); Demo *app = (Demo *)GetWindowLongPtr(hwnd, GWL_USERDATA);
switch(msg) switch(msg)
{ {
case WM_CLOSE: case WM_QUIT:
PostQuitMessage(0); app->QuitApp();
break; break;
case WM_DESTROY: case WM_DESTROY:
PostQuitMessage(0); app->QuitApp();
break; break;
case WM_SIZE: case WM_SIZE:
break; break;
case WM_MOUSEMOVE: case WM_MOUSEMOVE:
break; break;
default: default:
{ {
@@ -1470,7 +1477,7 @@ void Demo::main() {
sky = Sky::create(NULL, ExePath() + "/content/sky/"); sky = Sky::create(NULL, ExePath() + "/content/sky/");
//run(); //run();
bool quit=false;
RealTime now, lastTime; RealTime now, lastTime;
double simTimeRate = 1.0f; double simTimeRate = 1.0f;
float fps=30.f; float fps=30.f;
@@ -1482,8 +1489,9 @@ void Demo::main() {
//wind-> //wind->
MSG messages; /* Here messages to the application are saved */ MSG messages; /* Here messages to the application are saved */
while (GetMessage (&messages, NULL, 0, 0))
{ while (!quit)
{
lastTime = now; lastTime = now;
now = System::getTick(); now = System::getTick();
RealTime timeStep = now - lastTime; RealTime timeStep = now - lastTime;
@@ -1517,13 +1525,16 @@ void Demo::main() {
m_graphicsWatch.tick(); m_graphicsWatch.tick();
renderDevice->beginFrame(); renderDevice->beginFrame();
renderDevice->pushState(); renderDevice->pushState();
onGraphics(renderDevice); onGraphics(renderDevice);
renderDevice->popState(); renderDevice->popState();
renderDebugInfo(); renderDebugInfo();
renderDevice->endFrame(); renderDevice->endFrame();
debugText.clear(); debugText.clear();
m_graphicsWatch.tock(); m_graphicsWatch.tock();
while (PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))
{
if (IsDialogMessage(hWndMain, &messages) == 0) if (IsDialogMessage(hWndMain, &messages) == 0)
{ {
@@ -1532,12 +1543,19 @@ void Demo::main() {
/* Send message to WindowProcedure */ /* Send message to WindowProcedure */
DispatchMessage(&messages); DispatchMessage(&messages);
} }
//onGraphics(renderDevice);
} }
}
} }
void Demo::QuitApp()
{
PostQuitMessage(0);
quit=true;
}
int main(int argc, char** argv) { int main(int argc, char** argv) {
try{ try{
tempPath = ((std::string)getenv("temp")) + "/Dynamica"; tempPath = ((std::string)getenv("temp")) + "/Dynamica";
@@ -1600,7 +1618,6 @@ int main(int argc, char** argv) {
Win32Window* win32Window = Win32Window::create(settings.window,hwndMain); Win32Window* win32Window = Win32Window::create(settings.window,hwndMain);
Demo demo = Demo(settings,win32Window); Demo demo = Demo(settings,win32Window);
demo.run(); demo.run();
//app.run();
} }
catch(...) catch(...)
{ {