1
0
forked from 0ad/0ad

Add camera angle/zoom reset key ("H")

This was SVN commit r7941.
This commit is contained in:
Ykkrosh 2010-08-14 00:52:19 +00:00
parent 5a42689d5e
commit f221caecda
4 changed files with 40 additions and 0 deletions

View File

@ -122,6 +122,18 @@ public:
m_Target = Clamp(m_Target, (double)min, (double)max);
}
// Wrap so 'target' is in the range [min, max]
void Wrap(float min, float max)
{
double t = fmod(m_Target - min, (double)(max - min));
if (t < 0)
t += max - min;
t += min;
m_Current += t - m_Target;
m_Target = t;
}
private:
double m_Target; // the value which m_Current is tending towards
double m_Current;
@ -727,6 +739,8 @@ void CGameView::Update(float DeltaTime)
}
*/
m->RotateY.Wrap(-M_PI, M_PI);
// Update the camera matrix
SetupCameraMatrix(m, &m->ViewCamera.m_Orientation);
m->ViewCamera.UpdateFrustum();
@ -772,6 +786,25 @@ void CGameView::ResetCameraTarget(const CVector3D& target)
m->ViewCamera.UpdateFrustum();
}
void CGameView::ResetCameraAngleZoom()
{
CCamera targetCam = m->ViewCamera;
targetCam.m_Orientation.SetIdentity();
targetCam.m_Orientation.RotateX(m->RotateX.GetValue());
targetCam.m_Orientation.RotateY(m->RotateY.GetValue());
targetCam.m_Orientation.Translate(m->PosX.GetValue(), m->PosY.GetValue(), m->PosZ.GetValue());
// Compute the zoom adjustment to get us back to the default
CVector3D forwards = targetCam.m_Orientation.GetIn();
CVector3D delta = targetCam.GetFocus() - targetCam.m_Orientation.GetTranslation();
float dist = delta.Dot(forwards);
m->Zoom.AddSmoothly(dist - m->ViewZoomDefault);
// Reset orientations to default
m->RotateX.SetValueSmoothly(DEGTORAD(m->ViewRotateXDefault));
m->RotateY.SetValueSmoothly(DEGTORAD(m->ViewRotateYDefault));
}
InReaction game_view_handler(const SDL_Event_* ev)
{
// put any events that must be processed even if inactive here
@ -828,6 +861,10 @@ InReaction CGameView::HandleEvent(const SDL_Event_* ev)
case HOTKEY_CAMERA_ROTATE_WHEEL_CCW:
m->RotateY.AddSmoothly(-m->ViewRotateYSpeedWheel);
return IN_HANDLED;
case HOTKEY_CAMERA_RESET:
ResetCameraAngleZoom();
return IN_HANDLED;
}
}

View File

@ -83,6 +83,7 @@ public:
void MoveCameraTarget(const CVector3D& target);
void ResetCameraTarget(const CVector3D& target);
void ResetCameraAngleZoom();
CCamera *GetCamera();
CCinemaManager* GetCinema();

View File

@ -73,6 +73,7 @@ static SHotkeyInfo hotkeyInfo[] =
{ HOTKEY_BIGSCREENSHOT, "bigscreenshot", 0, 0 },
{ HOTKEY_WIREFRAME, "wireframe", SDLK_w, 0 },
{ HOTKEY_TOGGLEFULLSCREEN, "togglefullscreen", 0, 0 },
{ HOTKEY_CAMERA_RESET, "camera.reset", 0, 0 },
{ HOTKEY_CAMERA_ZOOM_IN, "camera.zoom.in", SDLK_PLUS, SDLK_KP_PLUS },
{ HOTKEY_CAMERA_ZOOM_OUT, "camera.zoom.out", SDLK_MINUS, SDLK_KP_MINUS },
{ HOTKEY_CAMERA_ZOOM_WHEEL_IN, "camera.zoom.wheel.in", MOUSE_WHEELUP, 0 },

View File

@ -54,6 +54,7 @@ enum
HOTKEY_BIGSCREENSHOT,
HOTKEY_WIREFRAME,
HOTKEY_TOGGLEFULLSCREEN,
HOTKEY_CAMERA_RESET,
HOTKEY_CAMERA_ZOOM_IN,
HOTKEY_CAMERA_ZOOM_OUT,
HOTKEY_CAMERA_ZOOM_WHEEL_IN,