From 808dd347b62ecc62565b489fbfd7e984564702db Mon Sep 17 00:00:00 2001 From: elexis Date: Wed, 23 Nov 2016 14:50:47 +0000 Subject: [PATCH] Play cinematic paths on arbitrary cameras to prepare previews of the camera frustum in atlas. Patch by Vladislav, refs #3814. This was SVN commit r18992. --- source/graphics/CinemaManager.cpp | 3 ++- source/graphics/CinemaPath.cpp | 7 +++---- source/graphics/CinemaPath.h | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/source/graphics/CinemaManager.cpp b/source/graphics/CinemaManager.cpp index dd500c9321..94cac3502d 100644 --- a/source/graphics/CinemaManager.cpp +++ b/source/graphics/CinemaManager.cpp @@ -172,7 +172,8 @@ void CCinemaManager::Update(const float deltaRealTime) // TODO: implement skip } - m_CinematicSimulationData.m_PathQueue.front().Play(deltaRealTime); + CCamera *camera = g_Game->GetView()->GetCamera(); + m_CinematicSimulationData.m_PathQueue.front().Play(deltaRealTime, camera); } void CCinemaManager::Render() diff --git a/source/graphics/CinemaPath.cpp b/source/graphics/CinemaPath.cpp index 0110f13b57..b65dbb647e 100644 --- a/source/graphics/CinemaPath.cpp +++ b/source/graphics/CinemaPath.cpp @@ -217,9 +217,8 @@ void CCinemaPath::SetTimescale(fixed scale) m_Timescale = scale; } -void CCinemaPath::MoveToPointAt(float t, float nodet, const CVector3D& startRotation) +void CCinemaPath::MoveToPointAt(float t, float nodet, const CVector3D& startRotation, CCamera* camera) { - CCamera *camera = g_Game->GetView()->GetCamera(); t = (this->*DistModePtr)(t); CVector3D pos = GetPosition(t); @@ -341,13 +340,13 @@ bool CCinemaPath::Validate() return false; } -bool CCinemaPath::Play(const float deltaRealTime) +bool CCinemaPath::Play(const float deltaRealTime, CCamera* camera) { m_TimeElapsed += m_Timescale.ToFloat() * deltaRealTime; if (!Validate()) return false; - MoveToPointAt(m_TimeElapsed / GetDuration().ToFloat(), GetNodeFraction(), m_PreviousRotation); + MoveToPointAt(m_TimeElapsed / GetDuration().ToFloat(), GetNodeFraction(), m_PreviousRotation, camera); return true; } diff --git a/source/graphics/CinemaPath.h b/source/graphics/CinemaPath.h index aa4a78c476..e67fad5a77 100644 --- a/source/graphics/CinemaPath.h +++ b/source/graphics/CinemaPath.h @@ -61,7 +61,7 @@ public: CCinemaPath(const CCinemaData& data, const TNSpline& spline, const TNSpline& targetSpline); // Sets camera position to calculated point on spline - void MoveToPointAt(float t, float nodet, const CVector3D&); + void MoveToPointAt(float t, float nodet, const CVector3D& startRotation, CCamera* camera); // Distortion mode functions-change how ratio is passed to distortion style functions float EaseIn(float t) const; @@ -109,8 +109,9 @@ public: /** * Returns false if finished. * @param deltaRealTime Elapsed real time since the last frame. + * @param camera An affected camera */ - bool Play(const float deltaRealTime); + bool Play(const float deltaRealTime, CCamera* camera); /** * Validate the path