OpenBarnyard
 
Loading...
Searching...
No Matches
TModel Class Referenceabstract

#include <TModel.h>

Inheritance diagram for TModel:
TModelHAL

Public Types

enum  Flags_ : Flags { Flags_None = 0 , Flags_Created = BITFLAG( 0 ) , Flags_Loaded = BITFLAG( 1 ) }
 
using Flags = TUINT32
 
using t_ModelLoaderTRBCallback = TBOOL ( * )( TModel* a_pModel )
 
using t_ModelLoaderTMDCallback = TBOOL ( * )( TModel* a_pModel )
 

Public Member Functions

 TModel ()
 
virtual TBOOL Create (TTMD *a_pTMD, TBOOL a_bLoad)=0
 
virtual TBOOL Create (const TCHAR *a_szFileName, TBOOL a_bLoad)=0
 
virtual void Delete ()=0
 
virtual TBOOL LoadFromFile (const TCHAR *a_szFileName)=0
 
virtual void Unload ()=0
 
virtual ~TModel ()
 
virtual TBOOL GetUnknownFlag ()=0
 
TBOOL LoadTRB ()
 
TBOOL LoadTRB (TTRB *a_pTRB)
 
TBOOL LoadTRB (const TCHAR *a_szFileName, TTRB *a_pAssetTRB, TUINT8 a_ui8FileNameLen)
 
void UnloadTRB ()
 
TModelInstanceCreateInstance ()
 
void * GetSymbol (const TCHAR *a_szSymbolName)
 
TBOOL IsCreated () const
 
TBOOL IsLoaded () const
 
void SetNumLODs (TINT a_iNumLODs)
 
TINT GetNumLODs () const
 
TTRBGetTRB () const
 
TModelLODGetLOD (TUINT32 a_uiLOD)
 
const TModelLODGetLOD (TUINT32 a_uiLOD) const
 
TSkeletonGetSkeleton () const
 
template<class T>
T * CastSymbol (const TCHAR *a_szSymbolName)
 

Static Public Member Functions

static TBOOL GetSkeletonAssetSymbolName (const TCHAR *a_szFileName, const TCHAR *&a_rSymbolName, TUINT8 &a_rNameLen, TTRB *a_pTRB)
 
static void SetLoaderTMDCallback (t_ModelLoaderTMDCallback a_cbLoader)
 
static void SetLoaderTRBCallback (t_ModelLoaderTRBCallback a_cbLoader)
 

Public Attributes

friend TModelInstance
 
friend AModelLoader
 
Flags m_eFlags
 
TINT m_iNumInstances
 
TINT m_iLODCount
 
TFLOAT m_fLODDistance
 
TSkeletonm_pSkeleton
 
TModelLOD m_LODs [MAX_NUM_LODS]
 
TFLOAT m_aLODDistances [4]
 
TINT m_iNumCollisionMeshes
 
TModelCollisionMeshm_pCollisionMeshes
 
TTRBm_pTRB
 
const TCHARm_szSymbolPrefix
 
TUINT8 m_szSymbolPrefixLength
 
TBOOL m_bIsAssetFile
 

Static Public Attributes

static constexpr TUINT MAX_NUM_LODS = 5
 

Detailed Description

Definition at line 68 of file TModel.h.

Member Typedef Documentation

◆ Flags

Definition at line 71 of file TModel.h.

◆ t_ModelLoaderTMDCallback

using TModel::t_ModelLoaderTMDCallback = TBOOL ( * )( TModel* a_pModel )

Definition at line 80 of file TModel.h.

◆ t_ModelLoaderTRBCallback

using TModel::t_ModelLoaderTRBCallback = TBOOL ( * )( TModel* a_pModel )

Definition at line 79 of file TModel.h.

Member Enumeration Documentation

◆ Flags_

Enumerator
Flags_None 
Flags_Created 
Flags_Loaded 

Definition at line 72 of file TModel.h.

73 {
74 Flags_None = 0,
76 Flags_Loaded = BITFLAG( 1 ),
77 };
#define BITFLAG(x)
Definition Defines.h:10
@ Flags_Loaded
Definition TModel.h:76
@ Flags_None
Definition TModel.h:74
@ Flags_Created
Definition TModel.h:75

Constructor & Destructor Documentation

◆ TModel()

TModel::TModel ( )

Definition at line 15 of file TModel.cpp.

16{
19 m_iLODCount = 0;
23 m_pTRB = TNULL;
25 m_aLODDistances[ 0 ] = 5.0f;
26 m_aLODDistances[ 1 ] = 20.0f;
29}
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24
TBOOL m_bIsAssetFile
Definition TModel.h:158
TINT m_iLODCount
Definition TModel.h:148
TSkeleton * m_pSkeleton
Definition TModel.h:150
TINT m_iNumCollisionMeshes
Definition TModel.h:153
TFLOAT m_aLODDistances[4]
Definition TModel.h:152
Flags m_eFlags
Definition TModel.h:146
TTRB * m_pTRB
Definition TModel.h:155
TModelCollisionMesh * m_pCollisionMeshes
Definition TModel.h:154
TINT m_iNumInstances
Definition TModel.h:147

◆ ~TModel()

TModel::~TModel ( )
virtual

Definition at line 33 of file TModel.cpp.

34{
35}

Member Function Documentation

◆ CastSymbol()

template<class T>
T * TModel::CastSymbol ( const TCHAR * a_szSymbolName)
inline

Definition at line 133 of file TModel.h.

133{ return TSTATICCAST( T, GetSymbol( a_szSymbolName ) ); }
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
void * GetSymbol(const TCHAR *a_szSymbolName)
Definition TModel.cpp:181

◆ Create() [1/2]

virtual TBOOL TModel::Create ( const TCHAR * a_szFileName,
TBOOL a_bLoad )
pure virtual

Implemented in TModelHAL.

◆ Create() [2/2]

virtual TBOOL TModel::Create ( TTMD * a_pTMD,
TBOOL a_bLoad )
pure virtual

Implemented in TModelHAL.

◆ CreateInstance()

TModelInstance * TModel::CreateInstance ( )

Definition at line 196 of file TModel.cpp.

197{
198 auto pInstance = new TModelInstance( this );
199
200 if ( m_pSkeleton )
201 {
202 pInstance->m_pSkeletonInstance = m_pSkeleton->CreateInstance( TTRUE );
203
204 if ( TNULL == pInstance->m_pSkeletonInstance )
205 {
206 TASSERT( !"Couldn't create skeleton instance" );
207 delete pInstance;
208 return TNULL;
209 }
210 }
211
213 return pInstance;
214}
#define TASSERT(X,...)
Definition Defines.h:138
#define TTRUE
Definition Typedefs.h:25
friend TModelInstance
Definition TModel.h:84

◆ Delete()

virtual void TModel::Delete ( )
pure virtual

Implemented in TModelHAL.

◆ GetLOD() [1/2]

TModelLOD & TModel::GetLOD ( TUINT32 a_uiLOD)
inline

Definition at line 115 of file TModel.h.

116 {
117 TASSERT( a_uiLOD < MAX_NUM_LODS );
118 return m_LODs[ a_uiLOD ];
119 }
TModelLOD m_LODs[MAX_NUM_LODS]
Definition TModel.h:151
static constexpr TUINT MAX_NUM_LODS
Definition TModel.h:82

◆ GetLOD() [2/2]

const TModelLOD & TModel::GetLOD ( TUINT32 a_uiLOD) const
inline

Definition at line 121 of file TModel.h.

122 {
123 TASSERT( a_uiLOD < MAX_NUM_LODS );
124 return m_LODs[ a_uiLOD ];
125 }

◆ GetNumLODs()

TINT TModel::GetNumLODs ( ) const
inline

Definition at line 111 of file TModel.h.

111{ return m_iLODCount; }

◆ GetSkeleton()

TSkeleton * TModel::GetSkeleton ( ) const
inline

Definition at line 127 of file TModel.h.

128 {
129 return m_pSkeleton;
130 }

◆ GetSkeletonAssetSymbolName()

TBOOL TModel::GetSkeletonAssetSymbolName ( const TCHAR * a_szFileName,
const TCHAR *& a_rSymbolName,
TUINT8 & a_rNameLen,
TTRB * a_pTRB )
static

Definition at line 217 of file TModel.cpp.

218{
219 auto iFilePathLength = TUINT8( TStringManager::String8Length( a_szFileName ) );
220 auto iFileNamePos = iFilePathLength - 1;
221 a_rNameLen = iFilePathLength;
222
223 while ( a_szFileName[ iFileNamePos ] != '\\' && a_szFileName[ iFileNamePos ] != '/' )
224 iFileNamePos--;
225
226 iFileNamePos++;
227 TCHAR symbolName[ 64 ];
228
229 auto iFileNameLength = iFilePathLength - iFileNamePos - 4;
230 a_rNameLen = iFileNameLength;
231
232 TStringManager::String8Copy( symbolName, a_szFileName + iFileNamePos, iFileNameLength );
233 symbolName[ iFileNameLength ] = '_';
234 symbolName[ iFileNameLength + 1 ] = '\0';
235 a_rNameLen = iFileNameLength + 1;
236
238 TStringManager::String8Copy( symbolName + a_rNameLen, "Skeleton" );
239
240 auto pSymbol = a_pTRB->GetSymbol( symbolName );
241
242 if ( pSymbol )
243 {
244 a_rSymbolName = a_pTRB->GetSymbolName( pSymbol );
245 return TTRUE;
246 }
247 else
248 {
249 return TFALSE;
250 }
251}
char TCHAR
Definition Typedefs.h:20
uint8_t TUINT8
Definition Typedefs.h:17
TTRBSymbol * GetSymbol(TINT index) const
Definition TTRB.cpp:368
const TCHAR * GetSymbolName(TINT index) const
Definition TTRB.cpp:357
static void String8ToLowerCase(TCHAR *str)
static TSIZE String8Length(const TCHAR *str)
static TCHAR * String8Copy(TCHAR *dst, const TCHAR *src, TSIZE size=-1)

◆ GetSymbol()

void * TModel::GetSymbol ( const TCHAR * a_szSymbolName)

Definition at line 181 of file TModel.cpp.

182{
183 if ( m_bIsAssetFile )
184 {
185 TCHAR symbolName[ 64 ];
187 TStringManager::String8Copy( symbolName + m_szSymbolPrefixLength, a_szSymbolName );
188
189 return m_pTRB->GetSymbolAddress( symbolName );
190 }
191
192 return m_pTRB->GetSymbolAddress( a_szSymbolName );
193}
const TCHAR * m_szSymbolPrefix
Definition TModel.h:156
TUINT8 m_szSymbolPrefixLength
Definition TModel.h:157

◆ GetTRB()

TTRB * TModel::GetTRB ( ) const
inline

Definition at line 113 of file TModel.h.

113{ return m_pTRB; }

◆ GetUnknownFlag()

virtual TBOOL TModel::GetUnknownFlag ( )
pure virtual

Implemented in TModelHAL.

◆ IsCreated()

TBOOL TModel::IsCreated ( ) const
inline

Definition at line 107 of file TModel.h.

107{ return m_eFlags & Flags_Created; }

◆ IsLoaded()

TBOOL TModel::IsLoaded ( ) const
inline

Definition at line 108 of file TModel.h.

108{ return m_eFlags & Flags_Loaded; }

◆ LoadFromFile()

virtual TBOOL TModel::LoadFromFile ( const TCHAR * a_szFileName)
pure virtual

Implemented in TModelHAL.

◆ LoadTRB() [1/3]

TBOOL TModel::LoadTRB ( )

Definition at line 38 of file TModel.cpp.

39{
41
42 // Load skeleton
43 if ( auto pSkeletonHeader = TSTATICCAST( TTMDBase::SkeletonHeader, GetSymbol( "SkeletonHeader" ) ) )
44 {
45 m_pSkeleton = TSTATICCAST( TSkeleton, GetSymbol( "Skeleton" ) );
46 TKeyframeLibrary* pLibrary = TRenderInterface::GetSingleton()->GetKeyframeLibraryManager().GetLibrary( pSkeletonHeader->m_szTKLName );
47
48 if ( !pLibrary )
49 {
50 TERROR( "TModel: loading a model without required keyframe library: %s\n", pSkeletonHeader->m_szTKLName );
51 }
52
53 m_pSkeleton->GetKeyLibraryInstance().CreateEx(
54 pLibrary,
55 pSkeletonHeader->m_iTKeyCount,
56 pSkeletonHeader->m_iQKeyCount,
57 pSkeletonHeader->m_iSKeyCount,
58 pSkeletonHeader->m_iTBaseIndex,
59 pSkeletonHeader->m_iQBaseIndex,
60 pSkeletonHeader->m_iSBaseIndex
61 );
62 }
63
64 // Load collision
65 auto pCollisionHeader = TSTATICCAST( TTMDBase::CollisionHeader, GetSymbol( "Collision" ) );
66 TASSERT( TNULL != pCollisionHeader );
67
68 m_iNumCollisionMeshes = pCollisionHeader->m_iNumMeshes;
69 m_pCollisionMeshes = new TModelCollisionMesh[ pCollisionHeader->m_iNumMeshes ];
70
71 // Copy info about the collision meshes
72 for ( TINT i = 0; i < pCollisionHeader->m_iNumMeshes; i++ )
73 {
74 auto& collisionMesh = m_pCollisionMeshes[ i ];
75 const auto& collisionMeshHeader = pCollisionHeader->m_pMeshes[ i ];
76
77 // Copy base info
78 collisionMesh.m_Unk1 = collisionMeshHeader.m_Unk1;
79 collisionMesh.m_pVertices = collisionMeshHeader.m_pVertices;
80 collisionMesh.m_uiNumVertices = collisionMeshHeader.m_uiNumVertices;
81 collisionMesh.m_pIndices = collisionMeshHeader.m_pIndices;
82 collisionMesh.m_uiNumIndices = collisionMeshHeader.m_uiNumIndices;
83
84 // Reserve space for collision types
85 collisionMesh.m_vecCollTypes.SetSize( collisionMeshHeader.m_uiNumCollTypes, TModelCollisionType{} );
86
87 // Copy collision types
88 for ( TUINT k = 0; k < collisionMeshHeader.m_uiNumCollTypes; k++ )
89 {
90 collisionMesh.m_vecCollTypes[ k ].strName = collisionMeshHeader.m_pCollTypes[ k ].pszName;
91 collisionMesh.m_vecCollTypes[ k ].uiUnk1 = collisionMeshHeader.m_pCollTypes[ k ].iUnk1;
92 collisionMesh.m_vecCollTypes[ k ].uiUnk2 = collisionMeshHeader.m_pCollTypes[ k ].iUnk2;
93
94 // TODO: figure out what it is
95 collisionMesh.m_vecCollTypes[ k ].vecS1.SetSize( collisionMeshHeader.m_pCollTypes[ k ].iSomeCount );
96 collisionMesh.m_vecCollTypes[ k ].uiUnk3 = 0;
97 collisionMesh.m_vecCollTypes[ k ].uiUnk4 = 0;
98
99 for ( TINT j = 0; j < collisionMeshHeader.m_pCollTypes[ k ].iSomeCount; j++ )
100 {
101 collisionMesh.m_vecCollTypes[ k ].vecS1[ j ].uiUnk1 = collisionMeshHeader.m_pCollTypes[ k ].pS1[ j ].uiUnk1;
102 collisionMesh.m_vecCollTypes[ k ].vecS1[ j ].uiUnk2 = collisionMeshHeader.m_pCollTypes[ k ].pS1[ j ].uiUnk2;
103 }
104 }
105 }
106
107 // Now let some client modelloader handle this
108 TASSERT( ms_cbModelLoaderTRB != TNULL, "Loader callback is not specified" );
109 ms_cbModelLoaderTRB( this );
110
112 return TTRUE;
113}
#define TERROR(...)
Definition Defines.h:153
unsigned int TUINT
Definition Typedefs.h:8
int TINT
Definition Typedefs.h:7
TKeyframeLibrary * GetLibrary(const TCHAR *a_szName)
TKeyframeLibraryManager & GetKeyframeLibraryManager()
static TFORCEINLINE TRenderInterface * GetSingleton()
Definition TSingleton.h:49

◆ LoadTRB() [2/3]

TBOOL TModel::LoadTRB ( const TCHAR * a_szFileName,
TTRB * a_pAssetTRB,
TUINT8 a_ui8FileNameLen )

Definition at line 125 of file TModel.cpp.

126{
127 if ( !m_bIsAssetFile && m_pTRB )
128 {
129 delete m_pTRB;
130 }
131
132 if ( a_pAssetTRB )
133 {
134 m_pTRB = a_pAssetTRB;
136 m_szSymbolPrefix = a_szFileName;
137 m_szSymbolPrefixLength = a_ui8FileNameLen;
138 }
139 else
140 {
142 m_pTRB = new TTRB();
143
144 if ( m_pTRB->Load( a_szFileName, 0 ) != TTRB::ERROR_OK )
145 {
146 return TFALSE;
147 }
148 }
149
150 return LoadTRB();
151}
@ ERROR_OK
Definition TTRB.h:258
TBOOL LoadTRB()
Definition TModel.cpp:38

◆ LoadTRB() [3/3]

TBOOL TModel::LoadTRB ( TTRB * a_pTRB)

Definition at line 116 of file TModel.cpp.

117{
119 m_pTRB = a_pTRB;
120
121 return LoadTRB();
122}

◆ SetLoaderTMDCallback()

static void TModel::SetLoaderTMDCallback ( t_ModelLoaderTMDCallback a_cbLoader)
inlinestatic

Definition at line 138 of file TModel.h.

138{ ms_cbModelLoaderTMD = a_cbLoader; }

◆ SetLoaderTRBCallback()

static void TModel::SetLoaderTRBCallback ( t_ModelLoaderTRBCallback a_cbLoader)
inlinestatic

Definition at line 139 of file TModel.h.

139{ ms_cbModelLoaderTRB = a_cbLoader; }

◆ SetNumLODs()

void TModel::SetNumLODs ( TINT a_iNumLODs)
inline

Definition at line 110 of file TModel.h.

110{ m_iLODCount = a_iNumLODs; }

◆ Unload()

virtual void TModel::Unload ( )
pure virtual

Implemented in TModelHAL.

◆ UnloadTRB()

void TModel::UnloadTRB ( )

Definition at line 154 of file TModel.cpp.

155{
156 if ( m_pTRB )
157 {
158 // TODO: reset data for collisions
159
160 if ( !m_bIsAssetFile )
161 {
162 m_pTRB->Close();
163 delete m_pTRB;
164 }
165
166 m_pTRB = TNULL;
167 }
168
170
171 if ( m_pCollisionMeshes )
172 {
173 TASSERT( TFALSE, "Unload collision data" );
174 }
175
178}

Member Data Documentation

◆ AModelLoader

friend TModel::AModelLoader

Definition at line 85 of file TModel.h.

◆ m_aLODDistances

TFLOAT TModel::m_aLODDistances[4]

Definition at line 152 of file TModel.h.

◆ m_bIsAssetFile

TBOOL TModel::m_bIsAssetFile

Definition at line 158 of file TModel.h.

◆ m_eFlags

Flags TModel::m_eFlags

Definition at line 146 of file TModel.h.

◆ m_fLODDistance

TFLOAT TModel::m_fLODDistance

Definition at line 149 of file TModel.h.

◆ m_iLODCount

TINT TModel::m_iLODCount

Definition at line 148 of file TModel.h.

◆ m_iNumCollisionMeshes

TINT TModel::m_iNumCollisionMeshes

Definition at line 153 of file TModel.h.

◆ m_iNumInstances

TINT TModel::m_iNumInstances

Definition at line 147 of file TModel.h.

◆ m_LODs

TModelLOD TModel::m_LODs[MAX_NUM_LODS]

Definition at line 151 of file TModel.h.

◆ m_pCollisionMeshes

TModelCollisionMesh* TModel::m_pCollisionMeshes

Definition at line 154 of file TModel.h.

◆ m_pSkeleton

TSkeleton* TModel::m_pSkeleton

Definition at line 150 of file TModel.h.

◆ m_pTRB

TTRB* TModel::m_pTRB

Definition at line 155 of file TModel.h.

◆ m_szSymbolPrefix

const TCHAR* TModel::m_szSymbolPrefix

Definition at line 156 of file TModel.h.

◆ m_szSymbolPrefixLength

TUINT8 TModel::m_szSymbolPrefixLength

Definition at line 157 of file TModel.h.

◆ MAX_NUM_LODS

TUINT TModel::MAX_NUM_LODS = 5
staticconstexpr

Definition at line 82 of file TModel.h.

◆ TModelInstance

friend TModel::TModelInstance

Definition at line 84 of file TModel.h.


The documentation for this class was generated from the following files: