diff --git a/src/ship/CameraController.cpp b/src/ship/CameraController.cpp index 2959e8879f9..1d8a3df781b 100644 --- a/src/ship/CameraController.cpp +++ b/src/ship/CameraController.cpp @@ -56,7 +56,8 @@ InternalCameraController::InternalCameraController(RefCountedPtr m_origFov(camera->GetFovAng()), m_zoomPct(1), m_zoomPctTo(1), - m_viewOrient(matrix3x3d::Identity()) + m_viewOrient(matrix3x3d::Identity()), + m_smoothing(false) { Reset(); } @@ -106,8 +107,13 @@ void InternalCameraController::Reset() void InternalCameraController::Update() { - AnimationCurves::Approach(m_rotX, m_rotToX, Pi::GetFrameTime(), 15.f); - AnimationCurves::Approach(m_rotY, m_rotToY, Pi::GetFrameTime(), 15.f); + if (m_smoothing) { + AnimationCurves::Approach(m_rotX, m_rotToX, Pi::GetFrameTime(), 13.f); + AnimationCurves::Approach(m_rotY, m_rotToY, Pi::GetFrameTime(), 13.f); + } else { + m_rotX = m_rotToX; + m_rotY = m_rotToY; + } m_viewOrient = matrix3x3d::RotateY(-m_rotY) * @@ -126,6 +132,11 @@ void InternalCameraController::getRots(double &rX, double &rY) rY = m_rotY; } +void InternalCameraController::SetSmoothingEnabled(bool enabled) +{ + m_smoothing = enabled; +} + void InternalCameraController::SetMode(Mode m) { if (m >= MODE_MAX) return; diff --git a/src/ship/CameraController.h b/src/ship/CameraController.h index 1278bac2358..e9248c9e2d9 100644 --- a/src/ship/CameraController.h +++ b/src/ship/CameraController.h @@ -96,6 +96,9 @@ class InternalCameraController : public MoveableCameraController { Type GetType() const override { return INTERNAL; } const char *GetName() const override { return m_name; } + void SetSmoothingEnabled(bool enabled); + bool GetSmoothingEnabled() const { return m_smoothing; } + void SetMode(Mode m); Mode GetMode() const { return m_mode; } @@ -134,6 +137,8 @@ class InternalCameraController : public MoveableCameraController { float m_zoomPct; float m_zoomPctTo; matrix3x3d m_viewOrient; + + bool m_smoothing; }; // Zoomable, rotatable orbit camera, always looks at the ship diff --git a/src/ship/ShipViewController.cpp b/src/ship/ShipViewController.cpp index 11a71814ac0..aca3884b455 100644 --- a/src/ship/ShipViewController.cpp +++ b/src/ship/ShipViewController.cpp @@ -109,6 +109,10 @@ void ShipViewController::Init() m_flybyCameraController.reset(new FlyByCameraController(m_cameraContext, Pi::player)); SetCamType(m_camType); //set the active camera + // setup camera smoothing + // TODO: expose this via UI once setting/updating config values from Lua is nicer + m_internalCameraController->SetSmoothingEnabled(Pi::config->Int("CameraSmoothing", 0)); + std::string headtrackingIP = Pi::config->String("HeadtrackingIP", ""); int port = Pi::config->Int("HeadtrackingPort", 4242);