forked from 0ad/0ad
Add camera angle/zoom reset key ("H")
This was SVN commit r7941.
This commit is contained in:
parent
5a42689d5e
commit
f221caecda
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,6 +83,7 @@ public:
|
||||
|
||||
void MoveCameraTarget(const CVector3D& target);
|
||||
void ResetCameraTarget(const CVector3D& target);
|
||||
void ResetCameraAngleZoom();
|
||||
|
||||
CCamera *GetCamera();
|
||||
CCinemaManager* GetCinema();
|
||||
|
@ -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 },
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user