From ef3ea40f7a5418d7b3e1dbbcb1c390d9f5228cba Mon Sep 17 00:00:00 2001 From: Domenico Albani Date: Mon, 6 Feb 2017 02:09:49 +0100 Subject: [PATCH] Add more camera movement key bindings (#259) Q/E and Page up/page down to move vertically. Arrow keys in addition to WASD to move normally. --- RecastDemo/Source/main.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp index 70b1b30..e9f584d 100644 --- a/RecastDemo/Source/main.cpp +++ b/RecastDemo/Source/main.cpp @@ -144,7 +144,7 @@ int main(int /*argc*/, char** /*argv*/) float camr = 1000; float origCameraEulers[] = {0, 0}; // Used to compute rotational changes across frames. - float moveW = 0, moveS = 0, moveA = 0, moveD = 0; + float moveFront = 0.0f, moveBack = 0.0f, moveLeft = 0.0f, moveRight = 0.0f, moveUp = 0.0f, moveDown = 0.0f; float scrollZoom = 0; bool rotate = false; @@ -456,10 +456,12 @@ int main(int /*argc*/, char** /*argv*/) // Handle keyboard movement. const Uint8* keystate = SDL_GetKeyboardState(NULL); - moveW = rcClamp(moveW + dt * 4 * (keystate[SDL_SCANCODE_W] ? 1 : -1), 0.0f, 1.0f); - moveA = rcClamp(moveA + dt * 4 * (keystate[SDL_SCANCODE_A] ? 1 : -1), 0.0f, 1.0f); - moveS = rcClamp(moveS + dt * 4 * (keystate[SDL_SCANCODE_S] ? 1 : -1), 0.0f, 1.0f); - moveD = rcClamp(moveD + dt * 4 * (keystate[SDL_SCANCODE_D] ? 1 : -1), 0.0f, 1.0f); + moveFront = rcClamp(moveFront + dt * 4 * ((keystate[SDL_SCANCODE_W] || keystate[SDL_SCANCODE_UP ]) ? 1 : -1), 0.0f, 1.0f); + moveLeft = rcClamp(moveLeft + dt * 4 * ((keystate[SDL_SCANCODE_A] || keystate[SDL_SCANCODE_LEFT ]) ? 1 : -1), 0.0f, 1.0f); + moveBack = rcClamp(moveBack + dt * 4 * ((keystate[SDL_SCANCODE_S] || keystate[SDL_SCANCODE_DOWN ]) ? 1 : -1), 0.0f, 1.0f); + moveRight = rcClamp(moveRight + dt * 4 * ((keystate[SDL_SCANCODE_D] || keystate[SDL_SCANCODE_RIGHT ]) ? 1 : -1), 0.0f, 1.0f); + moveUp = rcClamp(moveUp + dt * 4 * ((keystate[SDL_SCANCODE_Q] || keystate[SDL_SCANCODE_PAGEUP ]) ? 1 : -1), 0.0f, 1.0f); + moveDown = rcClamp(moveDown + dt * 4 * ((keystate[SDL_SCANCODE_E] || keystate[SDL_SCANCODE_PAGEDOWN ]) ? 1 : -1), 0.0f, 1.0f); float keybSpeed = 22.0f; if (SDL_GetModState() & KMOD_SHIFT) @@ -467,8 +469,8 @@ int main(int /*argc*/, char** /*argv*/) keybSpeed *= 4.0f; } - float movex = (moveD - moveA) * keybSpeed * dt; - float movey = (moveS - moveW) * keybSpeed * dt + scrollZoom * 2.0f; + float movex = (moveRight - moveLeft) * keybSpeed * dt; + float movey = (moveBack - moveFront) * keybSpeed * dt + scrollZoom * 2.0f; scrollZoom = 0; cameraPos[0] += movex * (float)modelviewMatrix[0]; @@ -479,6 +481,8 @@ int main(int /*argc*/, char** /*argv*/) cameraPos[1] += movey * (float)modelviewMatrix[6]; cameraPos[2] += movey * (float)modelviewMatrix[10]; + cameraPos[1] += (moveUp - moveDown) * keybSpeed * dt; + glEnable(GL_FOG); if (sample)