Polyphase Game Engine
Loading...
Searching...
No Matches
Spline3d.h
Go to the documentation of this file.
1#pragma once
2
3#include "Nodes/3D/Node3d.h"
4#include <vector>
5
6class Spline3D : public Node3D
7{
8public:
10
11 virtual void Create() override;
12 virtual void Start() override;
13 virtual void Stop() override;
14 virtual void Tick(float deltaTime) override;
15 virtual void Copy(Node* srcNode, bool recurse) override;
16 virtual void SaveStream(Stream& stream, Platform platform) override;
17 virtual void LoadStream(Stream& stream, Platform platform, uint32_t version) override;
18 virtual void GatherProperties(std::vector<Property>& props) override;
19 virtual void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws) override;
20
21 void AddPoint(const glm::vec3& p);
22 void ClearPoints();
23 uint32_t GetPointCount() const;
24 glm::vec3 GetPoint(uint32_t index) const;
25 void SetPoint(uint32_t index, const glm::vec3& p);
26
27 glm::vec3 GetPositionAt(float t) const; // t in [0,1]
28 glm::vec3 GetTangentAt(float t) const; // normalized tangent
29
30 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
31
32 static glm::vec3 CatmullRom(const glm::vec3& p0, const glm::vec3& p1, const glm::vec3& p2, const glm::vec3& p3, float t);
33 static glm::vec3 CatmullRomTangent(const glm::vec3& p0, const glm::vec3& p1, const glm::vec3& p2, const glm::vec3& p3, float t);
34
35 void Play();
36 void StopPlayback();
37 void SetPaused(bool paused);
38 bool IsPaused() const;
39 void SetFollowLinkEnabled(uint32_t index, bool enabled);
40 bool IsFollowLinkEnabled(uint32_t index) const;
41 bool IsNearLinkFrom(uint32_t index, float epsilon = 0.05f) const;
42 bool IsNearLinkTo(uint32_t index, float epsilon = 0.05f) const;
43 bool IsLinkDirectionForward(uint32_t index, float threshold = 0.0f) const;
44 bool TriggerLink(uint32_t index);
45 void CancelActiveLink();
46
47 static void SetSplineLinesVisible(bool visible);
48 static bool IsSplineLinesVisible();
49
50#if EDITOR
51 virtual bool DrawCustomProperty(Property& prop) override;
52#endif
53
54protected:
55 struct SplineLink;
56 void GeneratePoint();
57 SplineLink* GetLinkByIndex(uint32_t index);
58 const SplineLink* GetLinkByIndex(uint32_t index) const;
59 void EnsureLinkSlots(uint32_t count);
60
61protected:
62 std::vector<glm::vec3> mPoints;
70
72 {
75 bool mFollow = true;
76 bool mTriggered = false;
77 float mSpeed = 1.0f;
78 };
79
80 std::vector<SplineLink> mLinks;
81 bool mLinkActive = false;
82 bool mDisableBounce = false;
83 float mLinkSpeedModifier = 1.0f;
84 int32_t mGeneratedLinkCount = 10;
85
87 bool mLinkSmoothStep = false;
88 bool mLinkSmoothRotate = false;
89 float mLinkTravel = 0.0f;
90 float mLinkLen = 0.0f;
91 glm::vec3 mLinkStart = glm::vec3(0.0f);
92 glm::vec3 mLinkEnd = glm::vec3(0.0f);
95 float mLinkTargetPrevDist = 0.0f;
96 float mLinkTargetTotalLen = 0.0f;
97
98 glm::mat4 mOrigCamTransform = glm::mat4(1.0f);
99 glm::mat4 mOrigStaticTransform = glm::mat4(1.0f);
100 glm::mat4 mOrigSkeletalTransform = glm::mat4(1.0f);
101 glm::mat4 mOrigParticleTransform = glm::mat4(1.0f);
102 glm::mat4 mOrigPointLightTransform = glm::mat4(1.0f);
103 glm::mat4 mOrigAudioTransform = glm::mat4(1.0f);
104 glm::mat4 mOrigNodeTransform = glm::mat4(1.0f);
105
106 float mSpeed = 2.0f;
107 bool mPlaying = false;
108 bool mLoop = true;
109 bool mCloseLoop = false;
110 bool mPingPong = false;
111 bool mPingPongForward = true;
112 bool mSmoothCurve = true;
113 bool mSmoothRotate = false;
114 bool mPause = false;
115 bool mFaceTangent = false;
117 float mTravel = 0.0f;
118
119 bool mHasTrackedPos = false;
120 glm::vec3 mPrevTrackedPos = glm::vec3(0.0f);
121 glm::vec3 mTrackedMoveDir = glm::vec3(0.0f);
122
124 {
125 std::string name;
126 float speed = 1.0f;
127 bool smoothIn = false;
128 bool smoothOut = false;
129 bool smoothCurve = false;
130 };
131
132 std::vector<PointSpeedEntry> mPointSpeedEntries;
134 float mPointSpeedValue = 1.0f;
138};
Platform
Definition EngineTypes.h:31
Definition Datum.h:164
Definition Node3d.h:14
Definition Node.h:67
virtual bool DrawCustomProperty(Property &prop)
Definition Object.h:46
Definition Property.h:14
Definition Spline3d.h:7
bool mFaceTangent
Definition Spline3d.h:115
static bool IsSplineLinesVisible()
Definition Spline3d.cpp:210
virtual void SaveStream(Stream &stream, Platform platform) override
Definition Spline3d.cpp:1138
std::vector< SplineLink > mLinks
Definition Spline3d.h:80
void SetPaused(bool paused)
Definition Spline3d.cpp:200
float mLinkLen
Definition Spline3d.h:90
glm::mat4 mOrigCamTransform
Definition Spline3d.h:98
std::vector< glm::vec3 > mPoints
Definition Spline3d.h:62
void SetFollowLinkEnabled(uint32_t index, bool enabled)
Definition Spline3d.cpp:241
float mLinkTargetStartDist
Definition Spline3d.h:94
bool IsLinkDirectionForward(uint32_t index, float threshold=0.0f) const
Definition Spline3d.cpp:313
bool TriggerLink(uint32_t index)
Definition Spline3d.cpp:431
bool mLoop
Definition Spline3d.h:108
virtual void Create() override
Definition Spline3d.cpp:67
float mLinkTargetTotalLen
Definition Spline3d.h:96
bool mPointSmoothCurveValue
Definition Spline3d.h:137
void AddPoint(const glm::vec3 &p)
Definition Spline3d.cpp:1871
glm::vec3 GetPositionAt(float t) const
Definition Spline3d.cpp:1900
NodePtrWeak mAttachmentNode3D
Definition Spline3d.h:69
glm::vec3 mPrevTrackedPos
Definition Spline3d.h:120
NodePtrWeak mPointSpeedTarget
Definition Spline3d.h:133
virtual void Tick(float deltaTime) override
Definition Spline3d.cpp:543
glm::mat4 mOrigNodeTransform
Definition Spline3d.h:104
glm::vec3 mLinkStart
Definition Spline3d.h:91
void GeneratePoint()
Definition Spline3d.cpp:1824
bool mSmoothCurve
Definition Spline3d.h:112
bool mHasTrackedPos
Definition Spline3d.h:119
bool mReverseFaceTangent
Definition Spline3d.h:116
void ClearPoints()
Definition Spline3d.cpp:1876
bool IsNearLinkFrom(uint32_t index, float epsilon=0.05f) const
Definition Spline3d.cpp:257
glm::mat4 mOrigAudioTransform
Definition Spline3d.h:103
virtual void Start() override
Definition Spline3d.cpp:83
glm::vec3 mLinkEnd
Definition Spline3d.h:92
bool mLinkActive
Definition Spline3d.h:81
float mLinkTravel
Definition Spline3d.h:89
float mActiveLinkSpeedModifier
Definition Spline3d.h:86
NodePtrWeak mAttachmentParticle3D
Definition Spline3d.h:66
glm::mat4 mOrigParticleTransform
Definition Spline3d.h:101
static glm::vec3 CatmullRomTangent(const glm::vec3 &p0, const glm::vec3 &p1, const glm::vec3 &p2, const glm::vec3 &p3, float t)
Definition Spline3d.cpp:1130
bool mPlaying
Definition Spline3d.h:107
float mLinkTargetPrevDist
Definition Spline3d.h:95
float mTravel
Definition Spline3d.h:117
bool mPause
Definition Spline3d.h:114
virtual void GatherProperties(std::vector< Property > &props) override
Definition Spline3d.cpp:1276
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Spline3d.cpp:1441
NodePtrWeak mAttachmentPointLight
Definition Spline3d.h:67
static void SetSplineLinesVisible(bool visible)
Definition Spline3d.cpp:205
void CancelActiveLink()
Definition Spline3d.cpp:423
NodePtrWeak mLinkTargetSpline
Definition Spline3d.h:93
virtual void LoadStream(Stream &stream, Platform platform, uint32_t version) override
Definition Spline3d.cpp:1186
bool mLinkSmoothStep
Definition Spline3d.h:87
bool IsNearLinkTo(uint32_t index, float epsilon=0.05f) const
Definition Spline3d.cpp:285
bool mCloseLoop
Definition Spline3d.h:109
void SetPoint(uint32_t index, const glm::vec3 &p)
Definition Spline3d.cpp:1893
int32_t mGeneratedLinkCount
Definition Spline3d.h:84
bool mPingPong
Definition Spline3d.h:110
virtual void Copy(Node *srcNode, bool recurse) override
Definition Spline3d.cpp:1085
glm::mat4 mOrigSkeletalTransform
Definition Spline3d.h:100
glm::vec3 GetTangentAt(float t) const
Definition Spline3d.cpp:1928
bool mSmoothRotate
Definition Spline3d.h:113
NodePtrWeak mAttachmentSkeletalMesh
Definition Spline3d.h:65
bool mPointSmoothInValue
Definition Spline3d.h:135
virtual void Stop() override
Definition Spline3d.cpp:182
NodePtrWeak mAttachmentStaticMesh
Definition Spline3d.h:64
bool IsPaused() const
Definition Spline3d.cpp:215
bool mDisableBounce
Definition Spline3d.h:82
glm::vec3 GetPoint(uint32_t index) const
Definition Spline3d.cpp:1886
bool mPingPongForward
Definition Spline3d.h:111
bool IsFollowLinkEnabled(uint32_t index) const
Definition Spline3d.cpp:251
void EnsureLinkSlots(uint32_t count)
Definition Spline3d.cpp:220
uint32_t GetPointCount() const
Definition Spline3d.cpp:1881
bool mPointSmoothOutValue
Definition Spline3d.h:136
void Play()
Definition Spline3d.cpp:190
float mPointSpeedValue
Definition Spline3d.h:134
glm::mat4 mOrigPointLightTransform
Definition Spline3d.h:102
void StopPlayback()
Definition Spline3d.cpp:195
NodePtrWeak mAttachmentCamera
Definition Spline3d.h:63
float mSpeed
Definition Spline3d.h:106
std::vector< PointSpeedEntry > mPointSpeedEntries
Definition Spline3d.h:132
glm::vec3 mTrackedMoveDir
Definition Spline3d.h:121
bool mLinkSmoothRotate
Definition Spline3d.h:88
glm::mat4 mOrigStaticTransform
Definition Spline3d.h:99
virtual void GatherProxyDraws(std::vector< DebugDraw > &inoutDraws) override
Definition Spline3d.cpp:1350
DECLARE_NODE(Spline3D, Node3D)
static glm::vec3 CatmullRom(const glm::vec3 &p0, const glm::vec3 &p1, const glm::vec3 &p2, const glm::vec3 &p3, float t)
Definition Spline3d.cpp:1120
NodePtrWeak mAttachmentAudio3D
Definition Spline3d.h:68
float mLinkSpeedModifier
Definition Spline3d.h:83
SplineLink * GetLinkByIndex(uint32_t index)
Definition Spline3d.cpp:227
Definition Stream.h:21
Definition Spline3d.h:124
std::string name
Definition Spline3d.h:125
bool smoothOut
Definition Spline3d.h:128
float speed
Definition Spline3d.h:126
bool smoothIn
Definition Spline3d.h:127
bool smoothCurve
Definition Spline3d.h:129