From 624cca9826efae5239c3de6a7efe1abfc6d47aab Mon Sep 17 00:00:00 2001 From: Shamus Young Date: Thu, 7 May 2009 14:35:02 +0000 Subject: [PATCH] New camera controls - Should have been checked in with previous changes. --- Camera.cpp | 46 +++++++++++++++++++++++----------------------- Camera.h | 6 +++--- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Camera.cpp b/Camera.cpp index 140d40b..f70c064 100644 --- a/Camera.cpp +++ b/Camera.cpp @@ -51,18 +51,17 @@ static GLvector position; static GLvector auto_angle; static GLvector auto_position; static float distance; -static float movement; -static bool moving; +static GLvector movement; static bool cam_auto; static float tracker; static unsigned last_update; static int camera_behavior; +static unsigned last_move; /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ - static GLvector flycam_position (unsigned t) { @@ -198,7 +197,6 @@ void CameraNextBehavior () } - /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ @@ -206,7 +204,6 @@ void CameraNextBehavior () void CameraYaw (float delta) { - moving = true; angle.y -= delta; } @@ -218,7 +215,6 @@ void CameraYaw (float delta) void CameraPitch (float delta) { - moving = true; angle.x -= delta; } @@ -232,7 +228,6 @@ void CameraPan (float delta) float move_x, move_y; - moving = true; move_x = (float)sin (-angle.y * DEGREES_TO_RADIANS) / 10.0f; move_y = (float)cos (-angle.y * DEGREES_TO_RADIANS) / 10.0f; position.x -= move_y * delta; @@ -249,7 +244,6 @@ void CameraForward (float delta) float move_x, move_y; - moving = true; move_y = (float)sin (-angle.y * DEGREES_TO_RADIANS) / 10.0f; move_x = (float)cos (-angle.y * DEGREES_TO_RADIANS) / 10.0f; position.x -= move_y * delta; @@ -257,33 +251,40 @@ void CameraForward (float delta) } - - /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ -void CameraSelectionPitch (float delta) +void CameraVertical (float val) { + movement.y += val; + last_move = GetTickCount (); + } /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ -void CameraSelectionZoom (float delta) +void CameraLateral (float val) { + movement.x += val; + last_move = GetTickCount (); + } /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ -void CameraSelectionYaw (float delta) +void CameraMedial (float val) { + movement.z += val; + last_move = GetTickCount (); + } /*----------------------------------------------------------------------------- @@ -370,22 +371,21 @@ void CameraInit (void) void CameraUpdate (void) { -#if SCREENSAVER - cam_auto = true; -#endif + CameraPan (movement.x); + CameraForward (movement.z); + position.y += movement.y / 10.0f; + if (GetTickCount () - last_move > 1000) + movement *= 0.9f; + else + movement *= 0.99f; + if (SCREENSAVER) + cam_auto = true; if (cam_auto) do_auto_cam (); - if (moving) - movement *= 1.1f; - else - movement = 0.0f; - movement = CLAMP (movement, 0.01f, 1.0f); - if (angle.y < 0.0f) angle.y = 360.0f - (float)fmod (fabs (angle.y), 360.0f); angle.y = (float)fmod (angle.y, 360.0f); angle.x = CLAMP (angle.x, -MAX_PITCH, MAX_PITCH); - moving = false; } diff --git a/Camera.h b/Camera.h index 8302cb3..fb8ded0 100644 --- a/Camera.h +++ b/Camera.h @@ -16,9 +16,9 @@ void CameraUpdate (void); void CameraTerm (void); void CameraForward (float delta); -void CameraSelectionPitch (float delta_y); -void CameraSelectionYaw (float delta_x); -void CameraSelectionZoom (float delta_y); void CameraPan (float delta_x); void CameraPitch (float delta_y); void CameraYaw (float delta_x); +void CameraVertical (float val); +void CameraLateral (float val); +void CameraMedial (float val); \ No newline at end of file