metaforce/Runtime/Camera/CCameraSpline.hpp

46 lines
1.7 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2017-01-30 02:15:21 +00:00
#include "World/CEntityInfo.hpp"
#include "zeus/CVector3f.hpp"
2017-01-30 02:15:21 +00:00
namespace urde
{
class CStateManager;
2018-06-26 05:24:31 +00:00
class CMaterialFilter;
2017-01-30 02:15:21 +00:00
class CCameraSpline
{
friend class CBallCamera;
2017-10-10 03:50:48 +00:00
std::vector<zeus::CVector3f> x4_positions;
2017-10-14 06:34:57 +00:00
std::vector<TUniqueId> x14_wpTracker;
std::vector<float> x24_t;
2017-10-10 03:50:48 +00:00
std::vector<zeus::CVector3f> x34_directions;
float x44_length = 0.f;
bool x48_closedLoop = false;
bool GetSurroundingPoints(int idx, rstl::reserved_vector<zeus::CVector3f, 4>& positions,
rstl::reserved_vector<zeus::CVector3f, 4>& directions) const;
2017-01-30 02:15:21 +00:00
public:
2018-06-26 05:42:16 +00:00
CCameraSpline(bool closedLoop);
2017-01-30 02:15:21 +00:00
void CalculateKnots(TUniqueId, const std::vector<SConnection>&, CStateManager&);
void Initialize(TUniqueId, const std::vector<SConnection>&, CStateManager&);
void Reset(int size);
2017-10-10 03:50:48 +00:00
void AddKnot(const zeus::CVector3f& pos, const zeus::CVector3f& dir);
void SetKnotPosition(int idx, const zeus::CVector3f& pos);
const zeus::CVector3f& GetKnotPosition(int idx) const;
float GetKnotT(int idx) const;
float CalculateSplineLength();
void UpdateSplineLength() { x44_length = CalculateSplineLength(); }
2017-10-15 05:38:10 +00:00
zeus::CTransform GetInterpolatedSplinePointByLength(float pos) const;
zeus::CVector3f GetInterpolatedSplinePointByTime(float time, float range) const;
2018-06-26 05:24:31 +00:00
float FindClosestLengthOnSpline(float time, const zeus::CVector3f& p) const;
float ValidateLength(float t) const;
float ClampLength(const zeus::CVector3f& pos, bool collide,
const CMaterialFilter& filter, const CStateManager& mgr) const;
2018-06-25 01:02:29 +00:00
s32 GetSize() const { return x4_positions.size(); }
float GetLength() const { return x44_length; }
2018-06-26 05:24:31 +00:00
bool IsClosedLoop() const { return x48_closedLoop; }
2017-01-30 02:15:21 +00:00
};
2018-06-26 05:24:31 +00:00
2017-01-30 02:15:21 +00:00
}