OpenBarnyard
 
Loading...
Searching...
No Matches
TSkeleton.h
Go to the documentation of this file.
1#pragma once
2#include "Toshi/TQList.h"
3#include "Toshi/TSystem.h"
4
5#include "Math/TQuaternion.h"
6#include "Math/TMatrix44.h"
7#include "Render/TAnimation.h"
8
9#define TBONE_INVALID -1
10#define TSEQ_INVALID -1
11
13
15
17{
18public:
26 TFLOAT GetKeyPair( TINT a_iCurrentAnimProgress, TUINT16& a_rCurrentKeyIndex, TUINT16& a_rLerpFromIndex, TUINT16& a_rLerpToIndex );
27
28 TFORCEINLINE uint16_t* GetKey( size_t a_iKeyIndex )
29 {
30 return TREINTERPRETCAST( uint16_t*, a_iKeyIndex * m_iKeySize + TREINTERPRETCAST( uintptr_t, m_pData ) );
31 }
32
34 {
35 return m_iNumKeys;
36 }
37
39 {
40 return m_eFlags & 1;
41 }
42
44 {
45 return m_eFlags & 2;
46 }
47
48 TFORCEINLINE uint8_t GetFlags() const
49 {
50 return m_eFlags;
51 }
52
53private:
54 uint8_t m_eFlags;
55 uint8_t m_iKeySize;
56 TUINT16 m_iNumKeys;
57 uint16_t* m_pData;
58};
59
61{
62public:
64 {
66 };
67
68public:
69 TBOOL IsBase() const { return !( m_eFlags & FLAG_Overlay ); }
70 TBOOL IsOverlay() const { return ( m_eFlags & FLAG_Overlay ); }
71
72 TSkeletonSequenceBone* GetBones() { return m_pSeqBones; }
73 TSkeletonSequenceBone* GetBone( TINT a_iIndex ) { return &m_pSeqBones[ a_iIndex ]; }
74
75 TFLOAT GetDuration() const { return m_fDuration; }
76 TUINT8 GetNameLength() const { return m_iNameLength; }
77 const TCHAR* GetName() const { return m_szName; }
78 TINT16 GetUnk2() const { return m_iUnk2; }
79
80private:
81 TUINT8 m_iNameLength;
82 TCHAR m_szName[ 31 ];
83 Flag m_eFlags;
84 TINT16 m_iUnk2;
85 TINT m_iNumUsedBones;
86 TFLOAT m_fDuration;
87 TSkeletonSequenceBone* m_pSeqBones;
88};
89
116
118{
119public:
120 using t_fnQuatLerp = void ( * )( TQuaternion& a_rOut, const TQuaternion& a_rStart, const TQuaternion& a_rEnd, TFLOAT a_fProgress );
121
129
131
132public:
133 TSkeleton();
134 ~TSkeleton();
135
136 TSkeletonInstance* CreateInstance( TBOOL a_bSetBasePose );
137
139 void SetQInterpFn( QUATINTERP a_eQuatInterp );
140
141 TSkeletonBone* GetBone( const TCHAR* a_cBoneName, TUINT32 a_iLength = 0 ) { return GetBone( GetBoneID( a_cBoneName, a_iLength ) ); }
142 TINT GetBoneID( const TCHAR* a_cBoneName, TUINT32 a_iLength = 0 );
143
146 TSkeletonBone* GetBone( TINT a_iBone ) { return &m_pBones[ a_iBone ]; }
149 TINT GetBoneCount() const { return m_iBoneCount; }
151
152 TINT GetSequenceID( const TCHAR* a_sSequenceName, TUINT32 a_iLength = 0 );
154 TSkeletonSequence* GetSequence( TINT a_iSequence ) { return &m_SkeletonSequences[ a_iSequence ]; }
155 TSkeletonSequence* GetSequence( const TCHAR* a_sSequenceName, TUINT32 a_iLength = 0 ) { return GetSequence( GetSequenceID( a_sSequenceName, a_iLength ) ); }
156
158
159 TSkeleton& operator=( const TSkeleton& a_rSkeleton ) { TIMPLEMENT(); }
160
161public:
170
171 union // 0x3C
172 {
175 };
176};
177
184
186{
187public:
193
194 friend TSkeleton;
195
196public:
199
200 TAnimation* AddAnimation( TUINT16 a_iSequenceIndex, TFLOAT a_fDestWeight, TFLOAT a_fBlendInSpeed );
201 TAnimation* AddAnimationFull( TUINT16 a_iSequenceIndex, TFLOAT a_fDestWeight, TFLOAT a_fBlendInSpeed, TFLOAT a_fBlendOutSpeed, TAnimation::Flags a_eFlags );
202 TAnimation* GetAnimation( TUINT16 a_iSeqId );
203
204 void RemoveAnimation( TAnimation* a_pAnimation, TFLOAT a_fBlendOutSpeed );
205 void RemoveAllAnimations();
206
207 void UpdateTime( TFLOAT a_fDeltaTime );
208 void UpdateState( TBOOL a_bForceUpdate );
209
210 const TMatrix44& GetBoneTransformCurrent( TINT a_iBone );
211 TMatrix44& GetBoneTransformCurrent( TINT a_iBone, TMatrix44& a_rOutTransform );
213
214 void Delete();
215
216 TSkeleton* GetSkeleton() { return m_pSkeleton; }
217 const TSkeletonInstanceBone* GetBones() { return m_pBones; }
218 const TSkeletonInstanceBone& GetBone( TINT a_uiIndex );
219
220public:
223
224private:
225 TINT m_eFlags;
226 TUINT32 m_iSize;
227 TSkeleton* m_pSkeleton;
228 TINT16 m_iBaseAnimationCount;
229 TINT16 m_iOverlayAnimationCount;
230 TQList<TAnimation> m_BaseAnimations;
231 TQList<TAnimation> m_OverlayAnimations;
232 TQList<TAnimation> m_FreeAnimations;
233 TSkeletonInstanceBone* m_pBones;
234 TAnimation* m_pAnimations;
235 TFLOAT m_fTotalWeight;
236 TINT m_iLastUpdateTimeFrame;
237 TINT m_iLastUpdateStateFrame;
238};
239
4x4 matrix implementation for the Toshi engine
Quaternion implementation for the Toshi engine.
LoadLibrary TOSHI_NAMESPACE_START constexpr TINT TANIMATION_MAXBONES
Definition TAnimation.h:13
#define TIMPLEMENT()
Definition Defines.h:136
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define BITFLAG(x)
Definition Defines.h:10
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TFORCEINLINE
Definition Defines.h:74
#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
TUINT16 Flags
Definition TAnimation.h:25
TFORCEINLINE uint8_t GetFlags() const
Definition TSkeleton.h:48
TFORCEINLINE TBOOL IsOverlayAnimated() const
Definition TSkeleton.h:43
TFORCEINLINE uint16_t * GetKey(size_t a_iKeyIndex)
Definition TSkeleton.h:28
TFORCEINLINE TBOOL IsTranslateAnimated() const
Definition TSkeleton.h:38
TFORCEINLINE TUINT16 GetKeyCount() const
Definition TSkeleton.h:33
TFLOAT GetKeyPair(TINT a_iCurrentAnimProgress, TUINT16 &a_rCurrentKeyIndex, TUINT16 &a_rLerpFromIndex, TUINT16 &a_rLerpToIndex)
Returns lerp progress coefficient that should be used for animating.
TBOOL IsBase() const
Definition TSkeleton.h:69
TSkeletonSequenceBone * GetBones()
Definition TSkeleton.h:72
TINT16 GetUnk2() const
Definition TSkeleton.h:78
TFLOAT GetDuration() const
Definition TSkeleton.h:75
const TCHAR * GetName() const
Definition TSkeleton.h:77
TSkeletonSequenceBone * GetBone(TINT a_iIndex)
Definition TSkeleton.h:73
TUINT8 GetNameLength() const
Definition TSkeleton.h:76
TBOOL IsOverlay() const
Definition TSkeleton.h:70
TCHAR m_szName[31]
Definition TSkeleton.h:112
TMatrix44 & GetTransformInv()
Definition TSkeleton.h:99
TVector3 m_Position
Definition TSkeleton.h:114
TINT GetParentBone() const
Definition TSkeleton.h:105
TINT16 m_iParentBone
Definition TSkeleton.h:113
TUINT8 m_iNameLength
Definition TSkeleton.h:111
TQuaternion m_Rotation
Definition TSkeleton.h:108
const TQuaternion & GetRotation() const
Definition TSkeleton.h:94
TUINT8 GetNameLength() const
Definition TSkeleton.h:102
const TCHAR * GetName() const
Definition TSkeleton.h:103
TMatrix44 & GetTransform()
Definition TSkeleton.h:96
const TMatrix44 & GetTransform() const
Definition TSkeleton.h:97
TQuaternion & GetRotation()
Definition TSkeleton.h:93
TMatrix44 m_TransformInv
Definition TSkeleton.h:110
TMatrix44 m_Transform
Definition TSkeleton.h:109
const TVector3 & GetPosition() const
Definition TSkeleton.h:100
TINT16 m_iBoneCount
Definition TSkeleton.h:162
TINT16 GetSequenceCount()
Definition TSkeleton.h:157
@ QUATINTERP_Nlerp
Definition TSkeleton.h:127
@ QUATINTERP_Default
Definition TSkeleton.h:125
@ QUATINTERP_Slerp
Definition TSkeleton.h:126
friend TSkeletonInstance
Definition TSkeleton.h:130
TUINT32 QUATINTERP
Definition TSkeleton.h:122
TSkeletonSequence * GetSequences()
Definition TSkeleton.h:153
TSkeletonInstance * CreateInstance(TBOOL a_bSetBasePose)
Definition TSkeleton.cpp:28
TINT GetSequenceID(const TCHAR *a_sSequenceName, TUINT32 a_iLength=0)
Definition TSkeleton.cpp:98
TSkeletonSequence * GetSequence(TINT a_iSequence)
Definition TSkeleton.h:154
t_fnQuatLerp GetQInterpFn() const
Definition TSkeleton.h:138
TSkeletonBone * GetBones()
Definition TSkeleton.h:147
TSkeletonSequence * m_SkeletonSequences
Definition TSkeleton.h:169
TINT16 m_iManualBoneCount
Definition TSkeleton.h:163
TSkeletonBone * GetBone(TINT a_iBone)
Definition TSkeleton.h:146
void(*)(TQuaternion &a_rOut, const TQuaternion &a_rStart, const TQuaternion &a_rEnd, TFLOAT a_fProgress) t_fnQuatLerp
Definition TSkeleton.h:120
TSkeletonBone * GetBone(const TCHAR *a_cBoneName, TUINT32 a_iLength=0)
Definition TSkeleton.h:141
void SetQInterpFn(QUATINTERP a_eQuatInterp)
Definition TSkeleton.cpp:71
t_fnQuatLerp m_fnQuatLerp
Definition TSkeleton.h:173
TINT16 m_iAnimationMaxCount
Definition TSkeleton.h:165
QUATINTERP m_eQuatLerpType
Definition TSkeleton.h:174
TINT16 m_iInstanceCount
Definition TSkeleton.h:166
TKeyframeLibraryInstance m_KeyLibraryInstance
Definition TSkeleton.h:167
TINT16 m_iSequenceCount
Definition TSkeleton.h:164
TSkeletonBone * m_pBones
Definition TSkeleton.h:168
TSkeleton & operator=(const TSkeleton &a_rSkeleton)
Definition TSkeleton.h:159
TINT GetBoneID(const TCHAR *a_cBoneName, TUINT32 a_iLength=0)
Definition TSkeleton.cpp:80
TINT GetBoneCount() const
Definition TSkeleton.h:149
TSkeletonSequence * GetSequence(const TCHAR *a_sSequenceName, TUINT32 a_iLength=0)
Definition TSkeleton.h:155
TINT GetInstanceCount() const
Definition TSkeleton.h:148
TINT GetAnimationMaxCount()
Definition TSkeleton.h:145
TINT GetAutoBoneCount() const
Definition TSkeleton.h:150
TKeyframeLibraryInstance & GetKeyLibraryInstance()
Definition TSkeleton.h:144
TQuaternion m_Rotation
Definition TSkeleton.h:180
TAnimation * AddAnimation(TUINT16 a_iSequenceIndex, TFLOAT a_fDestWeight, TFLOAT a_fBlendInSpeed)
void UpdateTime(TFLOAT a_fDeltaTime)
const TMatrix44 & GetBoneTransformCurrent(TINT a_iBone)
void UpdateState(TBOOL a_bForceUpdate)
void SetStateFromBasePose()
static TMatrix44 g_aForwardMatrices[TANIMATION_MAXBONES]
Definition TSkeleton.h:221
const TSkeletonInstanceBone & GetBone(TINT a_uiIndex)
static BoneCache g_aBonesCaches[TANIMATION_MAXBONES]
Definition TSkeleton.h:222
void RemoveAnimation(TAnimation *a_pAnimation, TFLOAT a_fBlendOutSpeed)
TAnimation * AddAnimationFull(TUINT16 a_iSequenceIndex, TFLOAT a_fDestWeight, TFLOAT a_fBlendInSpeed, TFLOAT a_fBlendOutSpeed, TAnimation::Flags a_eFlags)
void RemoveAllAnimations()
TAnimation * GetAnimation(TUINT16 a_iSeqId)
TSkeleton * GetSkeleton()
Definition TSkeleton.h:216
const TSkeletonInstanceBone * GetBones()
Definition TSkeleton.h:217
Definition TQList.h:8