Example #1
0
    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);
			}
		}
	}