void App::Update(const delta_t dt, const delta_t elapsed) { // retrieve current mouse state mouse_info mi = GetMouse(); string buffer; // write program information to window title if (blurEnabled) buffer = "[B]"; SetWindowTitle("firefly-demo v%d.%d (FPS: %.2lf)" " x-%d y-%d %s", FF_MAJOR_VERSION, FF_MINOR_VERSION, GetFPS(), mi.x, mi.y, buffer.c_str()); // calculate movement rate and direction bool forceBlur = false; if (GetKey('A')) { cameraFrame.MoveRight(MOVE_SPEED*dt); forceBlur = true; } if (GetKey('D')) { cameraFrame.MoveRight(-MOVE_SPEED*dt); forceBlur = true; } if (GetKey('W')) { cameraFrame.MoveForward(MOVE_SPEED*dt); forceBlur = true; } if (GetKey('S')) { cameraFrame.MoveForward(-MOVE_SPEED*dt); forceBlur = true; } // calculate mouse delta float delta = (GetWidth() / 2.f) - mi.x; moveBlur = (abs(delta) > BLUR_MIN_DELTA || forceBlur) ? true : false; cameraFrame.RotateWorld( -delta * TURN_SPEED * dt / 4, 0, 1, 0); // keep the mouse centered glfwSetMousePos(GetWidth() / 2, GetHeight() / 2); // handle current jumping state if (jumping) { jumpVel -= JUMP_GRAVITY * dt; cameraFrame.MoveUp(jumpVel * dt); // if we have landed if (cameraFrame.GetOriginY() < 0) { jumping = false; jumpVel = 0; // make sure we are positioned back at ground height float dist = cameraFrame.GetOriginY(); cameraFrame.MoveUp(cameraFrame.GetOriginY() - dist); } } }