OpenBarnyard
 
Loading...
Searching...
No Matches
ATerrainSection.h
Go to the documentation of this file.
1#pragma once
2#include "ATerrainLODBlock.h"
3#include "Animation/AModel.h"
6#include "World/AWorldVIS.h"
7
9#include <Toshi/T2SList.h>
10
12{
13public:
14 class ModelNode : public Toshi::T2SList<ModelNode>::Node
15 {
16 public:
24
25 static constexpr TUINT TYPE_NAME_MAX_SIZE = 14;
26
27 public:
28 ModelNode();
29 ~ModelNode();
30
31 void Render();
32
33 void SetUseLighting( TBOOL a_bUseLighting );
34 void SetGlow( TBOOL a_bIsGlow );
35
38
39 public:
40 Toshi::TManagedModel m_ModelRef;
41 Toshi::TSceneObject* m_pSceneObject;
44 // ...
48 };
49
60
61 friend class ATerrainInterface;
62 friend class ASectionDoneJob;
63 friend class ACollisionDoneJob;
64
65public:
66 // Draws models of specified LOD
67 // Note: if trying to draw high LOD that is not loaded, low LOW will draw
68 void Draw( ATerrainLODType a_eLODType );
69
70 void LoadCollision();
71 void LoadModels( ATerrainLODType a_eLODType );
72 void LoadMatlib( ATerrainLODType a_eLODType );
73
74 void UnloadMatlib( ATerrainLODType a_eLODType );
75 void DestroyLOD( ATerrainLODType a_eLODType );
76
78
79 TBOOL IsMatLibLoaded( ATerrainLODType a_eLODType ) const;
80
81 TBOOL IsLODQueued( ATerrainLODType a_eLODType ) const { return ( m_eFlags & ( 16 << a_eLODType ) ); }
82 void SetLODQueued( ATerrainLODType a_eLODType, TBOOL a_bQueued );
83
84 TBOOL IsLODLoaded( ATerrainLODType a_eLODType ) const { return m_eFlags & ( 1 << ( a_eLODType ) ); }
85 void SetLODLoaded( ATerrainLODType a_eLODType, TBOOL a_bLoaded );
86
87 TBOOL IsLODLoading( ATerrainLODType a_eLODType ) const { return m_eFlags & ( 1 << ( a_eLODType + ATerrainLODType_NUMOF ) ); }
88 void SetLODLoading( ATerrainLODType a_eLODType, TBOOL a_bLoading );
89
90 // TODO: The flag's name is wrong
91 TBOOL IsLODEmpty( ATerrainLODType a_eLODType ) const { return ( m_eFlags & ( 64 << ( a_eLODType & 0x1f ) ) ); }
92 void SetLODEmpty( ATerrainLODType a_eLODType, TBOOL a_bEmpty );
93
94 void GetLODNames( ATerrainLODType a_eLODType, const TCHAR**& a_rLODs, TINT& a_rNumLODs )
95 {
96 if ( a_eLODType == ATerrainLODType_High )
97 {
98 a_rLODs = m_pszHighModelFiles;
99 a_rNumLODs = m_iNumHighModelFiles;
100 }
101 else
102 {
103 a_rLODs = m_pszLowModelFiles;
104 a_rNumLODs = m_iNumLowModelFiles;
105 }
106 }
107
108 void GetLODBlocks( ATerrainLODType a_eLODType, ATerrainLODBlock**& a_rMemBlocks, TUINT16& a_rNumMemBlocks )
109 {
110 if ( a_eLODType == ATerrainLODType_High )
111 {
112 a_rMemBlocks = m_ppHighLODBlocks;
113 a_rNumMemBlocks = m_iNumHighMemBlocksUsed;
114 }
115 else
116 {
117 a_rMemBlocks = m_ppLowLODBlocks;
118 a_rNumMemBlocks = m_iNumLowMemBlocksUsed;
119 }
120 }
121
123 {
124 return ( a_eLODType == ATerrainLODType_High ) ? m_iNumHighModelFiles : m_iNumLowModelFiles;
125 }
126
127private:
128 const TCHAR* m_szName;
129 const TCHAR** m_pszHighModelFiles;
130 const TCHAR** m_pszLowModelFiles;
131 TINT32 m_iNumHighModelFiles;
132 TINT32 m_iNumLowModelFiles;
133
134 TUINT8* m_aLODFlags[ 2 ];
135 const TCHAR* m_szCollisionFilename;
136 ModelNode* m_pCollisionModelData;
137 ModelNode** m_ppLODModelsData[ ATerrainLODType_NUMOF ];
138
139 const TCHAR* m_szHighMatLibFilename;
140 Toshi::TTRB* m_pMatLibHighTRB;
141 AMaterialLibrary* m_pMatLibHigh;
142
143 const TCHAR* m_szLowMatLibFilename;
144 Toshi::TTRB* m_pMatLibLowTRB;
145 AMaterialLibrary* m_pMatLibLow;
146
147 ATerrainLODType* m_pVisibility;
148 TUINT32 m_eFlags;
149 TUINT16 m_iNumHighMemBlocksUsed;
150 TUINT16 m_iNumLowMemBlocksUsed;
151 ATerrainLODBlock** m_ppHighLODBlocks;
152 ATerrainLODBlock** m_ppLowLODBlocks;
153 TUINT8* m_pHighLODToBlock;
154 TUINT8* m_pLowLODToBlock;
155 TUINT8 m_iCollisionMemBlockID;
156 TUINT8 m_iHighMatLibMemBlockID;
157 TUINT8 m_iLowMatLibMemBlockID;
158};
#define BITFLAG(x)
Definition Defines.h:10
#define ISZERO(X)
Definition Defines.h:3
uint16_t TUINT16
Definition Typedefs.h:15
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
uint32_t TUINT32
Definition Typedefs.h:13
int TINT
Definition Typedefs.h:7
bool TBOOL
Definition Typedefs.h:6
@ ATerrainLODType_NUMOF
@ ATerrainLODType_High
TINT8 ATerrainLODType
friend class ATerrainInterface
void LoadMatlib(ATerrainLODType a_eLODType)
void GetLODNames(ATerrainLODType a_eLODType, const TCHAR **&a_rLODs, TINT &a_rNumLODs)
TBOOL IsLODEmpty(ATerrainLODType a_eLODType) const
friend class ASectionDoneJob
void UnloadMatlib(ATerrainLODType a_eLODType)
TBOOL IsLODQueued(ATerrainLODType a_eLODType) const
void SetLODLoaded(ATerrainLODType a_eLODType, TBOOL a_bLoaded)
TINT GetLODCount(ATerrainLODType a_eLODType)
void DestroyLOD(ATerrainLODType a_eLODType)
void SetLODQueued(ATerrainLODType a_eLODType, TBOOL a_bQueued)
void LoadModels(ATerrainLODType a_eLODType)
TBOOL IsLODLoaded(ATerrainLODType a_eLODType) const
void SetLODEmpty(ATerrainLODType a_eLODType, TBOOL a_bEmpty)
TBOOL IsMatLibLoaded(ATerrainLODType a_eLODType) const
friend class ACollisionDoneJob
TBOOL IsLODLoading(ATerrainLODType a_eLODType) const
void SetLODLoading(ATerrainLODType a_eLODType, TBOOL a_bLoading)
void GetLODBlocks(ATerrainLODType a_eLODType, ATerrainLODBlock **&a_rMemBlocks, TUINT16 &a_rNumMemBlocks)
void Draw(ATerrainLODType a_eLODType)
AWorldMaterial * m_pAnimatedMaterial
void SetGlow(TBOOL a_bIsGlow)
Toshi::TSceneObject * m_pSceneObject
AWorldMaterial * GetAnimatedMaterial() const
Toshi::TManagedModel m_ModelRef
void SetUseLighting(TBOOL a_bUseLighting)
static constexpr TUINT TYPE_NAME_MAX_SIZE
char m_szType[TYPE_NAME_MAX_SIZE+1]