Move some methods out of the headers. Patch by Vladislav. Refs #3814
This was SVN commit r18000.
This commit is contained in:
parent
524d35ffdc
commit
22bbe450e4
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
bool CCinemaPath::Empty() const
|
||||
{
|
||||
return Node.empty();
|
||||
}
|
||||
|
||||
fixed CCinemaPath::GetTimescale() const
|
||||
{
|
||||
return m_Timescale;
|
||||
}
|
||||
|
||||
const TNSpline& CCinemaPath::getTargetSpline() const
|
||||
{
|
||||
return m_TargetSpline;
|
||||
}
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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<SplineData>& 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)
|
||||
|
@ -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<SplineData>& GetAllNodes() const { return Node; }
|
||||
const std::vector<SplineData>& 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();
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user