OpenBarnyard
 
Loading...
Searching...
No Matches
AModel.h
Go to the documentation of this file.
1#pragma once
2#include <File/TTRB.h>
3#include <Toshi/TRefCounted.h>
5#include <Toshi/TPString8.h>
6
7#include <Toshi/T2DList.h>
8#include <Toshi/T2Vector.h>
10
11class AModel;
12
13class AModelInstance : public Toshi::TObject
14 , public Toshi::TRefCounted
15{
16public:
17 TDECLARE_CLASS( AModelInstance, Toshi::TObject );
18
19public:
20 using Flags = TUINT8;
30
38
39 friend class AModel;
40
41public:
43 AModelInstance( AModel* a_pModel, Toshi::TSceneObject* a_pSceneObject, TBOOL a_bEnableSkeletonUpdate );
44
45 void SetTransform( const Toshi::TMatrix44& a_rcTransform );
46 void SetSkeletonUpdating( TBOOL a_bUpdating );
47 void SetReceivesLight( TBOOL a_bReceives );
48 void SetVisible( TBOOL a_bVisible );
49
50 AModel* GetModel() const { return m_pModel; }
51 const Toshi::TPString8& GetModelName() const;
52 Toshi::TSceneObject* GetSceneObject() const { return m_pSceneObject; }
53 Toshi::TTransformObject& GetTransform() const { return m_pSceneObject->GetTransform(); }
54 Toshi::TSkeleton* GetSkeleton() const { return GetSceneObject()->GetInstance()->GetSkeletonInstance()->GetSkeleton(); }
55 TUINT GetClipFlags() const { return m_uiClipFlags; }
56 void SetClipFlags( TUINT a_uiClipFlags ) { m_uiClipFlags = a_uiClipFlags; }
57
58 const Toshi::TVector4& GetScale() const { return m_Scale; }
59
60 TBOOL IsUpdatingSkeleton() const { return m_eFlags & Flags_UpdatingSkeleton; }
61 TBOOL IsVisible() const { return m_eFlags & Flags_Visible; }
63 TBOOL ReceivesLight() const { return m_eFlags & Flags_ReceivesLight; }
64
65private:
66 static void RenderInstanceCallback( Toshi::TModelInstance* a_pInstance, void* a_pUserData );
67
68private:
69 Toshi::TVector4 m_Scale;
70 AModel* m_pModel;
71 TUINT m_uiClipFlags;
72 // ...
73 Toshi::TSceneObject* m_pSceneObject;
74 Toshi::TEmitter<AModelInstance, ChangeEvent> m_ChangeEmitter;
75 Flags m_eFlags;
76};
77
78using AModelInstanceRef = Toshi::TRef<AModelInstance>;
79
80class AModel : public Toshi::T2DList<AModel>::Node
81{
82public:
83 static constexpr TUINT32 MAX_NUM_INSTANCES = 250;
84
85public:
86 AModel( const Toshi::TPString8& a_rName, Toshi::TTRB* a_pTRB );
87 virtual ~AModel();
88
89 void Update( TFLOAT a_fDeltaTime );
90 void Render( TBOOL a_bIsSomething );
91
93 void DestroyInstance( AModelInstance* a_pInstance );
94
95 TSIZE GetNumInstances() const;
96 Toshi::T2Vector<AModelInstanceRef, MAX_NUM_INSTANCES>& GetInstances() { return m_vecInstanceRefs; }
97
98 const Toshi::TPString8& GetName() const { return m_Name; }
99 Toshi::TSkeleton* GetSkeleton() const { return m_pManagedModel->GetModel()->GetSkeleton(); }
100
101public:
102 static Toshi::TManagedModel* Create( const Toshi::TPString8& a_rFilePath, Toshi::TTRB* a_pTRB );
103 static void GetNameFromPath( const Toshi::TPString8& a_FilePath, Toshi::TString8& a_rName );
104 static Toshi::TString8 GenerateInstanceName( const Toshi::TPString8& a_FilePath );
105
106private:
107 inline static TUINT ms_uiNumCreated;
108
109private:
110 TUINT m_uiID;
111 Toshi::TManagedModel* m_pManagedModel;
112 Toshi::TPString8 m_Name;
113 Toshi::T2Vector<AModelInstanceRef, MAX_NUM_INSTANCES> m_vecInstanceRefs;
114 Toshi::TVector3 m_Vec1;
115 Toshi::TVector3 m_Vec2;
116};
TRB (Toshi Relocatable Binary) resource system for the Toshi engine.
#define BITFLAG(x)
Definition Defines.h:10
unsigned int TUINT
Definition Typedefs.h:8
size_t TSIZE
Definition Typedefs.h:9
uint8_t TUINT8
Definition Typedefs.h:17
float TFLOAT
Definition Typedefs.h:4
uint32_t TUINT32
Definition Typedefs.h:13
bool TBOOL
Definition Typedefs.h:6
Toshi::TRef< AModelInstance > AModelInstanceRef
Definition AModel.h:78
TUINT GetClipFlags() const
Definition AModel.h:55
Toshi::TTransformObject & GetTransform() const
Definition AModel.h:53
AModel * GetModel() const
Definition AModel.h:50
void SetReceivesLight(TBOOL a_bReceives)
Definition AModel.cpp:451
@ Flags_DrawWithDefaultMaterials
Definition AModel.h:26
@ Flags_ReceivesLight
Definition AModel.h:27
@ Flags_UpdatingSkeleton
Definition AModel.h:24
TBOOL IsUpdatingSkeleton() const
Definition AModel.h:60
TBOOL DrawWithDefaultMaterials() const
Definition AModel.h:62
TUINT8 Flags
Definition AModel.h:20
Toshi::TSkeleton * GetSkeleton() const
Definition AModel.h:54
const Toshi::TVector4 & GetScale() const
Definition AModel.h:58
friend class AModel
Definition AModel.h:39
const Toshi::TPString8 & GetModelName() const
Definition AModel.cpp:479
@ ChangeEvent_DisabledSkeletonUpdate
Definition AModel.h:36
@ ChangeEvent_UNK2
Definition AModel.h:34
@ ChangeEvent_Visibility
Definition AModel.h:33
@ ChangeEvent_EnabledSkeletonUpdate
Definition AModel.h:35
TBOOL ReceivesLight() const
Definition AModel.h:63
void SetTransform(const Toshi::TMatrix44 &a_rcTransform)
Definition AModel.cpp:278
AModelInstance(AModel *a_pModel, Toshi::TSceneObject *a_pSceneObject, TBOOL a_bEnableSkeletonUpdate)
void SetVisible(TBOOL a_bVisible)
Definition AModel.cpp:460
TDECLARE_CLASS(AModelInstance, Toshi::TObject)
TBOOL IsVisible() const
Definition AModel.h:61
Toshi::TSceneObject * GetSceneObject() const
Definition AModel.h:52
void SetClipFlags(TUINT a_uiClipFlags)
Definition AModel.h:56
void SetSkeletonUpdating(TBOOL a_bUpdating)
Definition AModel.cpp:426
void DestroyInstance(AModelInstance *a_pInstance)
Definition AModel.cpp:150
AModelInstanceRef CreateInstance()
Definition AModel.cpp:134
static void GetNameFromPath(const Toshi::TPString8 &a_FilePath, Toshi::TString8 &a_rName)
Definition AModel.cpp:189
virtual ~AModel()
Definition AModel.cpp:42
AModel(const Toshi::TPString8 &a_rName, Toshi::TTRB *a_pTRB)
Definition AModel.cpp:28
const Toshi::TPString8 & GetName() const
Definition AModel.h:98
TSIZE GetNumInstances() const
Definition AModel.cpp:155
Toshi::TSkeleton * GetSkeleton() const
Definition AModel.h:99
static constexpr TUINT32 MAX_NUM_INSTANCES
Definition AModel.h:83
void Render(TBOOL a_bIsSomething)
Definition AModel.cpp:102
void Update(TFLOAT a_fDeltaTime)
Definition AModel.cpp:51
static Toshi::TManagedModel * Create(const Toshi::TPString8 &a_rFilePath, Toshi::TTRB *a_pTRB)
Definition AModel.cpp:161
static Toshi::TString8 GenerateInstanceName(const Toshi::TPString8 &a_FilePath)
Definition AModel.cpp:234
Toshi::T2Vector< AModelInstanceRef, MAX_NUM_INSTANCES > & GetInstances()
Definition AModel.h:96