OpenBarnyard
 
Loading...
Searching...
No Matches
TAnimation.h
Go to the documentation of this file.
1#pragma once
2#include "Math/TVector3.h"
3#include "Math/TQuaternion.h"
4#include "Toshi/TQList.h"
5#include "File/TTRB.h"
6
7#ifdef LoadLibrary
8# undef LoadLibrary
9#endif LoadLibrary
10
12
13constexpr TINT TANIMATION_MAXBONES = 128;
14
18using TAnimationBone = unsigned short;
19
21
22class TAnimation : public TQList<TAnimation>::TNode
23{
24public:
25 using Flags = TUINT16;
34
35 using State = TUINT32;
42
43public:
44 TAnimation();
46
47 TBOOL UpdateTime( TFLOAT a_fDeltaTime );
48 void RemoveAnimation( TFLOAT a_fVal );
49
50 void SetState( State a_eState ) { m_eState = a_eState; }
51 TFLOAT SetSpeed( TFLOAT a_fSpeed ) { return std::exchange( m_fSpeed, a_fSpeed ); }
52 TFLOAT SetDestWeight( TFLOAT a_fDestWeight, TFLOAT a_fBlendInSpeed );
53 void SetBlendInSpeed( TFLOAT a_fBlendInSpeed ) { m_fBlendInSpeed = a_fBlendInSpeed; }
54 void SetBlendOutSpeed( TFLOAT a_fBlendOutSpeed ) { m_fBlendOutSpeed = a_fBlendOutSpeed; }
55
56 void ChangeToManaged( TFLOAT a_fBlendOutSpeed );
57
58 Flags GetFlags() const { return m_eFlags; }
59 State GetState() const { return m_eState; }
60 TBOOL IsActive() const { return m_eFlags & Flags_Active; }
61 TBOOL IsManaged() const { return m_eFlags & Flags_Managed; }
63
64 TUINT16 GetSequence() const { return m_iSeqID; }
65 class TSkeletonSequence* GetSequencePtr() const;
66 TSkeletonInstance* GetSkeletonInstance() const { return m_pSkeletonInstance; }
67 TFLOAT GetSpeed() const { return m_fSpeed; }
68 TFLOAT GetSeqTime() const { return m_fSeqTime; }
69 TFLOAT GetTotalTime() const { return m_fTotalTime; }
70 TFLOAT GetWeight() const { return m_fWeight; }
71 TFLOAT GetDestWeight() const { return m_fDestWeight; }
72 TFLOAT GetBlendInSpeed() const { return m_fBlendInSpeed; }
73 TFLOAT GetBlendOutSpeed() const { return m_fBlendOutSpeed; }
74
76 TAnimationBone* GetBone( TINT a_iIndex ) { return &TREINTERPRETCAST( TAnimationBone*, this + 1 )[ a_iIndex ]; }
77
78private:
79 TSkeletonInstance* m_pSkeletonInstance;
80 TUINT16 m_iSeqID;
81 Flags m_eFlags;
82 TINT16 m_iUnk3;
83 State m_eState;
84 TFLOAT m_fSpeed;
85 TFLOAT m_fWeight;
86 TFLOAT m_fDestWeight;
87 TFLOAT m_fTotalTime;
88 TFLOAT m_fSeqTime;
89 TFLOAT m_fBlendInSpeed;
90 TFLOAT m_fBlendOutSpeed;
91
92 friend class TSkeletonInstance;
93};
94
95class TKeyframeLibrary : public TDList<TKeyframeLibrary>::TNode
96{
97public:
99
114
115public:
116 static TKeyframeLibrary* CreateFromTRB( TTRB* a_pTRB, const TCHAR* a_szSymbolName );
117
118 void Delete();
119 void SetTRB( TTRB* a_pTRB ) { m_pTRB = a_pTRB; }
120
121 TINT GetNameLength() const { return m_iNameLength; }
122 const TCHAR* GetName() const { return m_szName; }
123
124private:
126
127 void IncreaseRefCount()
128 {
129 m_iReferenceCount++;
130 }
131
132 void DecreaseRefCount()
133 {
134 m_iReferenceCount--;
135 }
136
137private:
138 TUINT8 m_iNameLength;
139 TCHAR m_szName[ 31 ];
140 TVector3 m_SomeVector;
141 TINT m_iReferenceCount;
142 TINT m_iNumTranslations;
143 TINT m_iNumQuaternions;
144 TINT m_iNumScales;
145 TINT m_iTranslationSize;
146 TINT m_iQuaternionSize;
147 TINT m_iScaleSize;
148 TAnimVector* m_pTranslations;
149 TAnimQuaternion* m_pQuaternions;
150 TAnimScale* m_pScales;
151 TTRB* m_pTRB;
152};
153
155{
156public:
158
160 TKeyframeLibrary* CreateEx( TKeyframeLibrary* a_pLibrary, TINT a_iTKeyCount, TINT a_iQKeyCount, TINT a_iSKeyCount, TINT a_iTBaseIndex, TINT a_iQBaseIndex, TINT a_iSBaseIndex );
161
162 void Destroy();
163
164 TAnimVector* GetT( TINT a_iIndex ) const
165 {
166 TASSERT( a_iIndex < m_iTKeyCount );
167 return &m_pTranslations[ a_iIndex ];
168 }
169
170 TAnimQuaternion* GetQ( TINT a_iIndex ) const
171 {
172 TASSERT( a_iIndex < m_iQKeyCount );
173 return &m_pQuaternions[ a_iIndex ];
174 }
175
176 TAnimScale GetS( TINT a_iIndex ) const
177 {
178 TASSERT( a_iIndex < m_iQKeyCount );
179 return m_pScales[ a_iIndex ];
180 }
181
182 void SetLibrary( TKeyframeLibrary* a_pLibrary ) { m_pLibrary = a_pLibrary; }
183 void SetTCount( TINT a_iTCount ) { m_iTKeyCount = a_iTCount; }
184 void SetQCount( TINT a_iQCount ) { m_iQKeyCount = a_iQCount; }
185 void SetSCount( TINT a_iSCount ) { m_iSKeyCount = a_iSCount; }
186
187 TKeyframeLibrary* GetLibrary() const { return m_pLibrary; }
188 TINT GetTCount() const { return m_iTKeyCount; }
189 TINT GetQCount() const { return m_iQKeyCount; }
190 TINT GetSCount() const { return m_iSKeyCount; }
191
192private:
193 TKeyframeLibrary* m_pLibrary;
194 TINT m_iTBaseIndex;
195 TINT m_iQBaseIndex;
196 TINT m_iSBaseIndex;
197 TINT m_iTKeyCount;
198 TINT m_iQKeyCount;
199 TINT m_iSKeyCount;
200 TAnimVector* m_pTranslations;
201 TAnimQuaternion* m_pQuaternions;
202 TAnimScale* m_pScales;
203};
204
206{
207public:
210
211 TKeyframeLibrary* GetLibrary( const TCHAR* a_szName );
212
213 TKeyframeLibrary* LoadLibrary( const TCHAR* a_szFilePath );
214 TKeyframeLibrary* LoadLibrary( TTRB* a_pTRB, const TCHAR* a_szSymbolName );
215
216 void UnloadLibrary( TKeyframeLibrary* a_pLibrary );
217
218private:
220 TINT m_iNumLibraries = 0;
221};
222
TRB (Toshi Relocatable Binary) resource system for the Toshi engine.
Quaternion implementation for the Toshi engine.
3D vector implementation for the Toshi engine
TVector3 TAnimVector
Definition TAnimation.h:15
LoadLibrary TOSHI_NAMESPACE_START constexpr TINT TANIMATION_MAXBONES
Definition TAnimation.h:13
TFLOAT TAnimScale
Definition TAnimation.h:17
unsigned short TAnimationBone
Definition TAnimation.h:18
TQuaternion TAnimQuaternion
Definition TAnimation.h:16
#define TASSERT(X,...)
Definition Defines.h:138
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define BITFLAG(x)
Definition Defines.h:10
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
uint16_t TUINT16
Definition Typedefs.h:15
int16_t TINT16
Definition Typedefs.h:14
char TCHAR
Definition Typedefs.h:20
uint8_t TUINT8
Definition Typedefs.h:17
float TFLOAT
Definition Typedefs.h:4
uint32_t TUINT32
Definition Typedefs.h:13
int TINT
Definition Typedefs.h:7
bool TBOOL
Definition Typedefs.h:6
Definition TTRB.h:253
TFLOAT GetSeqTime() const
Definition TAnimation.h:68
Flags GetFlags() const
Definition TAnimation.h:58
TFLOAT GetBlendOutSpeed() const
Definition TAnimation.h:73
void SetBlendInSpeed(TFLOAT a_fBlendInSpeed)
Definition TAnimation.h:53
friend class TSkeletonInstance
Definition TAnimation.h:92
void ChangeToManaged(TFLOAT a_fBlendOutSpeed)
@ Flags_UpdateStateOnRemove
Definition TAnimation.h:32
TBOOL IsUpdateStateOnRemove() const
Definition TAnimation.h:62
TUINT16 Flags
Definition TAnimation.h:25
TBOOL UpdateTime(TFLOAT a_fDeltaTime)
void RemoveAnimation(TFLOAT a_fVal)
TFLOAT SetDestWeight(TFLOAT a_fDestWeight, TFLOAT a_fBlendInSpeed)
TUINT16 GetSequence() const
Definition TAnimation.h:64
TSkeletonInstance * GetSkeletonInstance() const
Definition TAnimation.h:66
TAnimationBone * GetBones()
Definition TAnimation.h:75
TFLOAT SetSpeed(TFLOAT a_fSpeed)
Definition TAnimation.h:51
void SetState(State a_eState)
Definition TAnimation.h:50
TFLOAT GetWeight() const
Definition TAnimation.h:70
TFLOAT GetBlendInSpeed() const
Definition TAnimation.h:72
TBOOL IsActive() const
Definition TAnimation.h:60
TFLOAT GetTotalTime() const
Definition TAnimation.h:69
TUINT32 State
Definition TAnimation.h:35
class TSkeletonSequence * GetSequencePtr() const
TAnimationBone * GetBone(TINT a_iIndex)
Definition TAnimation.h:76
TFLOAT GetDestWeight() const
Definition TAnimation.h:71
@ STATE_BLENDING_IN
Definition TAnimation.h:38
@ STATE_BLENDING_OUT
Definition TAnimation.h:40
State GetState() const
Definition TAnimation.h:59
TBOOL IsManaged() const
Definition TAnimation.h:61
void SetBlendOutSpeed(TFLOAT a_fBlendOutSpeed)
Definition TAnimation.h:54
TFLOAT GetSpeed() const
Definition TAnimation.h:67
const TCHAR * GetName() const
Definition TAnimation.h:122
TINT GetNameLength() const
Definition TAnimation.h:121
friend class TKeyframeLibraryInstance
Definition TAnimation.h:98
static TKeyframeLibrary * CreateFromTRB(TTRB *a_pTRB, const TCHAR *a_szSymbolName)
void SetTRB(TTRB *a_pTRB)
Definition TAnimation.h:119
TAnimQuaternion * m_pQuaternions
Definition TAnimation.h:111
TAnimVector * m_pTranslations
Definition TAnimation.h:110
TAnimVector * GetT(TINT a_iIndex) const
Definition TAnimation.h:164
void SetQCount(TINT a_iQCount)
Definition TAnimation.h:184
TKeyframeLibrary * Create(TKeyframeLibrary *a_pLibrary)
TAnimQuaternion * GetQ(TINT a_iIndex) const
Definition TAnimation.h:170
void SetLibrary(TKeyframeLibrary *a_pLibrary)
Definition TAnimation.h:182
void SetSCount(TINT a_iSCount)
Definition TAnimation.h:185
TAnimScale GetS(TINT a_iIndex) const
Definition TAnimation.h:176
void SetTCount(TINT a_iTCount)
Definition TAnimation.h:183
TKeyframeLibrary * GetLibrary() const
Definition TAnimation.h:187
TKeyframeLibrary * CreateEx(TKeyframeLibrary *a_pLibrary, TINT a_iTKeyCount, TINT a_iQKeyCount, TINT a_iSKeyCount, TINT a_iTBaseIndex, TINT a_iQBaseIndex, TINT a_iSBaseIndex)
TKeyframeLibrary * GetLibrary(const TCHAR *a_szName)
TKeyframeLibrary * LoadLibrary(const TCHAR *a_szFilePath)
void UnloadLibrary(TKeyframeLibrary *a_pLibrary)
friend class TDList
Definition TDList.h:13
friend TQList
Definition TQList.h:13