From 22bbe450e4bc216fe800ace2d1d3e431fe2e36fd Mon Sep 17 00:00:00 2001 From: sanderd17 Date: Thu, 7 Apr 2016 17:47:30 +0000 Subject: [PATCH] Move some methods out of the headers. Patch by Vladislav. Refs #3814 This was SVN commit r18000. --- source/graphics/CinemaPath.cpp | 57 +++++++++++++++++++++++++++++++++- source/graphics/CinemaPath.h | 23 +++++++------- source/maths/NUSpline.cpp | 35 +++++++++++++++++++++ source/maths/NUSpline.h | 20 ++++++------ 4 files changed, 112 insertions(+), 23 deletions(-) diff --git a/source/graphics/CinemaPath.cpp b/source/graphics/CinemaPath.cpp index 3d997d7507..07a73cf5fa 100644 --- a/source/graphics/CinemaPath.cpp +++ b/source/graphics/CinemaPath.cpp @@ -194,6 +194,41 @@ void CCinemaPath::DrawNodes(const CVector4D& RGBA) const #endif } +CVector3D CCinemaPath::GetNodePosition(const int index) const +{ + return Node[index].Position; +} + +fixed CCinemaPath::GetNodeDuration(const int index) const +{ + return Node[index].Distance; +} + +fixed CCinemaPath::GetDuration() const +{ + return MaxDistance; +} + +float CCinemaPath::GetNodeFraction() const +{ + return (m_TimeElapsed - m_PreviousNodeTime) / Node[m_CurrentNode].Distance.ToFloat(); +} + +float CCinemaPath::GetElapsedTime() const +{ + return m_TimeElapsed; +} + +CStrW CCinemaPath::GetName() const +{ + return m_Name; +} + +void CCinemaPath::SetTimescale(fixed scale) +{ + m_Timescale = scale; +} + void CCinemaPath::MoveToPointAt(float t, float nodet, const CVector3D& startRotation) { CCamera *camera = g_Game->GetView()->GetCamera(); @@ -288,6 +323,11 @@ float CCinemaPath::EaseSine(float t) const return t; } +const CCinemaData* CCinemaPath::GetData() const +{ + return CCinemaData::GetData(); +} + bool CCinemaPath::Validate() { if (m_TimeElapsed > GetDuration().ToFloat() || m_TimeElapsed < 0.0f) @@ -324,4 +364,19 @@ bool CCinemaPath::Play(const float deltaRealTime) MoveToPointAt(m_TimeElapsed / GetDuration().ToFloat(), GetNodeFraction(), m_PreviousRotation); return true; -} \ No newline at end of file +} + +bool CCinemaPath::Empty() const +{ + return Node.empty(); +} + +fixed CCinemaPath::GetTimescale() const +{ + return m_Timescale; +} + +const TNSpline& CCinemaPath::getTargetSpline() const +{ + return m_TargetSpline; +} diff --git a/source/graphics/CinemaPath.h b/source/graphics/CinemaPath.h index f66b3620e1..2ccc08b37f 100644 --- a/source/graphics/CinemaPath.h +++ b/source/graphics/CinemaPath.h @@ -59,7 +59,6 @@ class CCinemaPath : private CCinemaData, public TNSpline public: CCinemaPath() : m_TimeElapsed(0), m_PreviousNodeTime(0) {} CCinemaPath(const CCinemaData& data, const TNSpline& spline, const TNSpline& targetSpline); - ~CCinemaPath() { DistStylePtr = NULL; DistModePtr = NULL; } // Sets camera position to calculated point on spline void MoveToPointAt(float t, float nodet, const CVector3D&); @@ -80,7 +79,7 @@ public: float (CCinemaPath::*DistStylePtr)(float ratio) const; float (CCinemaPath::*DistModePtr)(float ratio) const; - const CCinemaData* GetData() const { return CCinemaData::GetData(); } + const CCinemaData* GetData() const; public: @@ -88,16 +87,16 @@ public: void DrawSpline(const RNSpline& spline, const CVector4D& RGBA, int smoothness, bool lines) const; void DrawNodes(const CVector4D& RGBA) const; - inline CVector3D GetNodePosition(const int index) const { return Node[index].Position; } - inline fixed GetNodeDuration(const int index) const { return Node[index].Distance; } - inline fixed GetDuration() const { return MaxDistance; } + CVector3D GetNodePosition(const int index) const; + fixed GetNodeDuration(const int index) const; + fixed GetDuration() const; - inline float GetNodeFraction() const { return (m_TimeElapsed - m_PreviousNodeTime) / Node[m_CurrentNode].Distance.ToFloat(); } - inline float GetElapsedTime() const { return m_TimeElapsed; } + float GetNodeFraction() const; + float GetElapsedTime() const; - CStrW GetName() const { return m_Name; } + CStrW GetName() const; - inline void SetTimescale(fixed scale) { m_Timescale = scale; } + void SetTimescale(fixed scale); float m_TimeElapsed; float m_PreviousNodeTime; // How much time has passed before the current node @@ -122,11 +121,11 @@ public: /** * Returns true if path doesn't contain nodes */ - bool Empty() { return Node.empty(); } + bool Empty() const; - fixed GetTimescale() const { return m_Timescale; } + fixed GetTimescale() const; - const TNSpline& getTargetSpline() const { return m_TargetSpline; } + const TNSpline& getTargetSpline() const; private: diff --git a/source/maths/NUSpline.cpp b/source/maths/NUSpline.cpp index a52ffd2ca7..95373502a8 100644 --- a/source/maths/NUSpline.cpp +++ b/source/maths/NUSpline.cpp @@ -44,6 +44,11 @@ CVector3D GetPositionOnCubic(const CVector3D& startPos, const CVector3D& startVe /*********************************** R N S **************************************************/ +RNSpline::RNSpline() + : NodeCount(0) +{ +} + // adds node and updates segment length void RNSpline::AddNode(const CFixedVector3D& pos) { @@ -124,6 +129,11 @@ CVector3D RNSpline::GetPosition(float time) const Node[i+1].Position, endVel, t); } +const std::vector& RNSpline::GetAllNodes() const +{ + return Node; +} + // internal. Based on Equation 14 CVector3D RNSpline::GetStartVelocity(int index) { @@ -144,6 +154,13 @@ CVector3D RNSpline::GetEndVelocity(int index) /*********************************** S N S **************************************************/ +void SNSpline::BuildSpline() +{ + RNSpline::BuildSpline(); + for (int i = 0; i < 3; ++i) + Smooth(); +} + // smoothing filter. void SNSpline::Smooth() { @@ -223,6 +240,7 @@ void TNSpline::RemoveNode(const int index) Node.erase(Node.begin() + index, Node.begin() + index + 1); --NodeCount; } + void TNSpline::UpdateNodeTime(const int index, fixed time) { if (NodeCount == 0 || index > NodeCount - 1) @@ -230,6 +248,7 @@ void TNSpline::UpdateNodeTime(const int index, fixed time) Node[index].Distance = time; } + void TNSpline::UpdateNodePos(const int index, const CFixedVector3D& pos) { if (NodeCount == 0 || index > NodeCount - 1) @@ -238,6 +257,22 @@ void TNSpline::UpdateNodePos(const int index, const CFixedVector3D& pos) Node[index].Position = pos; } +void TNSpline::BuildSpline() +{ + RNSpline::BuildSpline(); + for (int i = 0; i < 3; ++i) + Smooth(); +} + +void TNSpline::Smooth() +{ + for (int i = 0; i < 3; ++i) + { + SNSpline::Smooth(); + Constrain(); + } +} + void TNSpline::Constrain() { if (NodeCount < 3) diff --git a/source/maths/NUSpline.h b/source/maths/NUSpline.h index 61b70e3d53..d465b7b344 100644 --- a/source/maths/NUSpline.h +++ b/source/maths/NUSpline.h @@ -51,14 +51,14 @@ class RNSpline { public: - RNSpline() { NodeCount = 0; } - virtual ~RNSpline() {} + RNSpline(); + virtual ~RNSpline() = default; void AddNode(const CFixedVector3D& pos); void BuildSpline(); CVector3D GetPosition(float time) const; CVector3D GetRotation(float time) const; - const std::vector& GetAllNodes() const { return Node; } + const std::vector& GetAllNodes() const; fixed MaxDistance; int NodeCount; @@ -78,8 +78,9 @@ protected: class SNSpline : public RNSpline { public: - virtual ~SNSpline() {} - void BuildSpline(){ RNSpline::BuildSpline(); Smooth(); Smooth(); Smooth(); } + virtual ~SNSpline() = default; + + void BuildSpline(); void Smooth(); }; @@ -90,17 +91,16 @@ public: class TNSpline : public SNSpline { public: - virtual ~TNSpline() {} + virtual ~TNSpline() = default; void AddNode(const CFixedVector3D& pos, const CFixedVector3D& rotation, fixed timePeriod); - void PushNode() { Node.push_back( SplineData() ); } void InsertNode(const int index, const CFixedVector3D& pos, const CFixedVector3D& rotation, fixed timePeriod); void RemoveNode(const int index); - void UpdateNodeTime(const int index, fixed time); void UpdateNodePos(const int index, const CFixedVector3D& pos); + void UpdateNodeTime(const int index, fixed time); - void BuildSpline(){ RNSpline::BuildSpline(); Smooth(); Smooth(); Smooth(); } - void Smooth(){ for (int x = 0; x < 3; ++x) { SNSpline::Smooth(); Constrain(); } } + void BuildSpline(); + void Smooth(); void Constrain(); };