OpenBarnyard
 
Loading...
Searching...
No Matches
TModel.h
Go to the documentation of this file.
1
10
11#pragma once
12#include "TTMDBase.h"
13#include "TSkeleton.h"
14#include "TModelCollision.h"
15#include "TMesh.h"
16
17#include "Math/TSphere.h"
18#include "File/TTRB.h"
19
20class AModelLoader;
21
23
25{
26 TSphere BoundingSphere = TSphere( 0.0f, 0.0f, 0.0f, 0.0f );
29};
30
31struct TTMD;
32class TModel;
33
35{
36public:
37 friend class TModel;
38
39 using t_PreRenderCB = void ( * )( TModelInstance* a_pInstance );
40 using t_CustomRenderCB = void ( * )( TModelInstance* a_pInstance, void* a_pUserData );
41
42public:
43 TModelInstance( TModel* a_pModel );
45
46 void Update( TFLOAT a_fDeltaTime );
47 void Render();
48 void Delete();
49
50 void SetPreRenderCallback( t_PreRenderCB a_fnCallback );
51 void SetCustomRenderMethod( t_CustomRenderCB a_fnCallback, void* a_pUserData );
52
53 TINT32 GetLOD();
54 void SetLOD( TINT32 a_iLOD );
55
56 TModel* GetModel() const;
58
59private:
60 TModel* m_pModel;
61 TSkeletonInstance* m_pSkeletonInstance;
62 t_PreRenderCB m_fnPreRenderCb;
63 t_CustomRenderCB m_fnCustomRenderCb;
64 void* m_pCustomRenderCbUserData;
65 TINT32 m_iCurrentLOD;
66};
67
68class TModel
69{
70public:
71 using Flags = TUINT32;
78
79 using t_ModelLoaderTRBCallback = TBOOL ( * )( TModel* a_pModel );
80 using t_ModelLoaderTMDCallback = TBOOL ( * )( TModel* a_pModel );
81
82 static constexpr TUINT MAX_NUM_LODS = 5;
83
86
87public:
88 TModel();
89
90 virtual TBOOL Create( TTMD* a_pTMD, TBOOL a_bLoad ) = 0;
91 virtual TBOOL Create( const TCHAR* a_szFileName, TBOOL a_bLoad ) = 0;
92 virtual void Delete() = 0;
93 virtual TBOOL LoadFromFile( const TCHAR* a_szFileName ) = 0;
94 virtual void Unload() = 0;
95 virtual ~TModel();
96 virtual TBOOL GetUnknownFlag() = 0;
97
98 TBOOL LoadTRB();
99 TBOOL LoadTRB( TTRB* a_pTRB );
100 TBOOL LoadTRB( const TCHAR* a_szFileName, TTRB* a_pAssetTRB, TUINT8 a_ui8FileNameLen );
101 void UnloadTRB();
102
104
105 void* GetSymbol( const TCHAR* a_szSymbolName );
106
107 TBOOL IsCreated() const { return m_eFlags & Flags_Created; }
108 TBOOL IsLoaded() const { return m_eFlags & Flags_Loaded; }
109
110 void SetNumLODs( TINT a_iNumLODs ) { m_iLODCount = a_iNumLODs; }
111 TINT GetNumLODs() const { return m_iLODCount; }
112
113 TTRB* GetTRB() const { return m_pTRB; }
114
116 {
117 TASSERT( a_uiLOD < MAX_NUM_LODS );
118 return m_LODs[ a_uiLOD ];
119 }
120
121 const TModelLOD& GetLOD( TUINT32 a_uiLOD ) const
122 {
123 TASSERT( a_uiLOD < MAX_NUM_LODS );
124 return m_LODs[ a_uiLOD ];
125 }
126
128 {
129 return m_pSkeleton;
130 }
131
132 template <class T>
133 T* CastSymbol( const TCHAR* a_szSymbolName ) { return TSTATICCAST( T, GetSymbol( a_szSymbolName ) ); }
134
135public:
136 static TBOOL GetSkeletonAssetSymbolName( const TCHAR* a_szFileName, const TCHAR*& a_rSymbolName, TUINT8& a_rNameLen, TTRB* a_pTRB );
137
138 static void SetLoaderTMDCallback( t_ModelLoaderTMDCallback a_cbLoader ) { ms_cbModelLoaderTMD = a_cbLoader; }
139 static void SetLoaderTRBCallback( t_ModelLoaderTRBCallback a_cbLoader ) { ms_cbModelLoaderTRB = a_cbLoader; }
140
141private:
142 inline static t_ModelLoaderTMDCallback ms_cbModelLoaderTMD;
143 inline static t_ModelLoaderTRBCallback ms_cbModelLoaderTRB;
144
145public:
159};
160
TRB (Toshi Relocatable Binary) resource system for the Toshi engine.
#define TASSERT(X,...)
Definition Defines.h:138
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
#define BITFLAG(x)
Definition Defines.h:10
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
int32_t TINT32
Definition Typedefs.h:12
unsigned int TUINT
Definition Typedefs.h:8
char TCHAR
Definition Typedefs.h:20
uint8_t TUINT8
Definition Typedefs.h:17
float TFLOAT
Definition Typedefs.h:4
#define TNULL
Definition Typedefs.h:23
uint32_t TUINT32
Definition Typedefs.h:13
int TINT
Definition Typedefs.h:7
bool TBOOL
Definition Typedefs.h:6
Definition TTRB.h:253
Definition TMesh.h:9
TSphere BoundingSphere
Definition TModel.h:26
TINT iNumMeshes
Definition TModel.h:27
TMesh ** ppMeshes
Definition TModel.h:28
void SetCustomRenderMethod(t_CustomRenderCB a_fnCallback, void *a_pUserData)
Definition TModel.cpp:302
void Delete()
Definition TModel.cpp:319
TModel * GetModel() const
Definition TModel.cpp:332
TINT32 GetLOD()
Definition TModel.cpp:313
friend class TModel
Definition TModel.h:37
void SetPreRenderCallback(t_PreRenderCB a_fnCallback)
Definition TModel.cpp:297
void(*)(TModelInstance *a_pInstance) t_PreRenderCB
Definition TModel.h:39
TModelInstance(TModel *a_pModel)
Definition TModel.cpp:253
TSkeletonInstance * GetSkeletonInstance() const
Definition TModel.cpp:337
void SetLOD(TINT32 a_iLOD)
Definition TModel.cpp:308
void Render()
Definition TModel.cpp:273
void Update(TFLOAT a_fDeltaTime)
Definition TModel.cpp:267
void(*)(TModelInstance *a_pInstance, void *a_pUserData) t_CustomRenderCB
Definition TModel.h:40
const TModelLOD & GetLOD(TUINT32 a_uiLOD) const
Definition TModel.h:121
TBOOL(*)(TModel *a_pModel) t_ModelLoaderTRBCallback
Definition TModel.h:79
TFLOAT m_fLODDistance
Definition TModel.h:149
TBOOL m_bIsAssetFile
Definition TModel.h:158
virtual TBOOL LoadFromFile(const TCHAR *a_szFileName)=0
static TBOOL GetSkeletonAssetSymbolName(const TCHAR *a_szFileName, const TCHAR *&a_rSymbolName, TUINT8 &a_rNameLen, TTRB *a_pTRB)
Definition TModel.cpp:217
TModelInstance * CreateInstance()
Definition TModel.cpp:196
TSkeleton * GetSkeleton() const
Definition TModel.h:127
TBOOL LoadTRB()
Definition TModel.cpp:38
static void SetLoaderTMDCallback(t_ModelLoaderTMDCallback a_cbLoader)
Definition TModel.h:138
TBOOL IsCreated() const
Definition TModel.h:107
TINT m_iLODCount
Definition TModel.h:148
TSkeleton * m_pSkeleton
Definition TModel.h:150
T * CastSymbol(const TCHAR *a_szSymbolName)
Definition TModel.h:133
TINT m_iNumCollisionMeshes
Definition TModel.h:153
TUINT32 Flags
Definition TModel.h:71
virtual void Unload()=0
virtual void Delete()=0
virtual TBOOL Create(const TCHAR *a_szFileName, TBOOL a_bLoad)=0
TFLOAT m_aLODDistances[4]
Definition TModel.h:152
virtual TBOOL Create(TTMD *a_pTMD, TBOOL a_bLoad)=0
void UnloadTRB()
Definition TModel.cpp:154
void SetNumLODs(TINT a_iNumLODs)
Definition TModel.h:110
const TCHAR * m_szSymbolPrefix
Definition TModel.h:156
TTRB * GetTRB() const
Definition TModel.h:113
TModelLOD m_LODs[MAX_NUM_LODS]
Definition TModel.h:151
virtual ~TModel()
Definition TModel.cpp:33
Flags m_eFlags
Definition TModel.h:146
TINT GetNumLODs() const
Definition TModel.h:111
TUINT8 m_szSymbolPrefixLength
Definition TModel.h:157
TModelLOD & GetLOD(TUINT32 a_uiLOD)
Definition TModel.h:115
static void SetLoaderTRBCallback(t_ModelLoaderTRBCallback a_cbLoader)
Definition TModel.h:139
friend AModelLoader
Definition TModel.h:85
TTRB * m_pTRB
Definition TModel.h:155
static constexpr TUINT MAX_NUM_LODS
Definition TModel.h:82
virtual TBOOL GetUnknownFlag()=0
TModelCollisionMesh * m_pCollisionMeshes
Definition TModel.h:154
Flags_
Definition TModel.h:73
@ Flags_Loaded
Definition TModel.h:76
@ Flags_None
Definition TModel.h:74
@ Flags_Created
Definition TModel.h:75
TBOOL IsLoaded() const
Definition TModel.h:108
TINT m_iNumInstances
Definition TModel.h:147
void * GetSymbol(const TCHAR *a_szSymbolName)
Definition TModel.cpp:181
TBOOL(*)(TModel *a_pModel) t_ModelLoaderTMDCallback
Definition TModel.h:80
TModel()
Definition TModel.cpp:15
friend TModelInstance
Definition TModel.h:84