10#ifdef TOSHI_SKU_WINDOWS
30 for (
TINT i = 0; i < m_iNumHighModelFiles; i++ )
41 for (
TINT i = 0; i < m_iNumLowModelFiles; i++ )
51 auto pTerrain = ATerrainInterface::GetSingleton();
53 if ( m_szCollisionFilename[ 0 ] !=
'\0' )
55 auto pBlock = ( !pTerrain->IsCollisionStreamed() ) ?
56 pTerrain->GetVIS()->m_pPersistantTerrainBlock :
57 m_ppHighLODBlocks[ m_iCollisionMemBlockID ];
59 m_pCollisionModelData =
new ( pBlock->GetMemBlock() )
ModelNode();
61 auto pTRB =
new ( pBlock->GetMemBlock() )
TTRB();
62 pBlock->SetupTRB( pTRB, pBlock );
64 auto pModelLoaderJob = pTerrain->GetFreeModelLoaderJob();
65 pModelLoaderJob->InitJob(
66 &m_pCollisionModelData->m_ModelRef,
68 m_szCollisionFilename,
69 pTerrain->IsCollisionStreamed()
72 auto pCollisionJob = pTerrain->GetFreeCollisionLoaderJob();
73 pCollisionJob->InitJob(
this,
TFALSE );
75 AAssetStreaming::GetSingleton()->AddMainThreadJob( pModelLoaderJob );
76 AAssetStreaming::GetSingleton()->AddMainThreadJob( pCollisionJob );
85 auto pTerrain = ATerrainInterface::GetSingleton();
89 const TCHAR** ppLODNames;
93 if ( iNumLODs == 0 && m_szCollisionFilename[ 0 ] ==
'\0' )
103 GetLODBlocks( a_eLODType, ppLODBlocks, uiNumMemBlocks );
107 for (
TINT i = 0; i < uiNumMemBlocks; i++ )
109 if ( ppLODBlocks[ i ] ==
TNULL )
111 ppLODBlocks[ i ] = pTerrain->AllocateLODBlock( a_eLODType,
this );
113 if ( ppLODBlocks[ i ] ==
TNULL )
119 ppLODBlocks[ i ]->m_bIsUnused =
TFALSE;
130 for (
TINT i = 0; i < iNumLODs; i++ )
132 if ( m_ppLODModelsData[ a_eLODType ][ i ] ==
TNULL )
134 auto pBlock = ppLODBlocks[ pLODToBlock[ i ] ];
135 auto pModelData =
new ( pBlock->GetMemBlock() )
ModelNode();
137 auto pTRB =
new ( pBlock->GetMemBlock() )
TTRB();
138 pBlock->SetupTRB( pTRB, pBlock );
139 m_ppLODModelsData[ a_eLODType ][ i ] = pModelData;
141 auto pModelLoaderJob = pTerrain->GetFreeModelLoaderJob();
142 pModelLoaderJob->InitJob(
143 &pModelData->m_ModelRef,
149 AAssetStreaming::GetSingleton()->AddMainThreadJob( pModelLoaderJob );
153 auto pSectionJob = pTerrain->GetFreeSectionLoaderJob();
154 pSectionJob->InitJob(
this, a_eLODType );
156 AAssetStreaming::GetSingleton()->AddMainThreadJob( pSectionJob );
173 if ( m_szHighMatLibFilename[ 0 ] ==
'\0' )
return;
174 uiAllocAtBlock = m_iHighMatLibMemBlockID;
175 ppBlocks = m_ppHighLODBlocks;
179 if ( m_szLowMatLibFilename[ 0 ] ==
'\0' )
return;
180 uiAllocAtBlock = m_iLowMatLibMemBlockID;
181 ppBlocks = m_ppLowLODBlocks;
184 auto pBlock = ppBlocks[ uiAllocAtBlock ];
185 auto pMatlibJob = ATerrainInterface::GetSingleton()->GetFreeMatlibLoaderJob();
189 m_pMatLibHighTRB =
new ( pBlock->GetMemBlock() )
TTRB();
190 pBlock->SetupTRB( m_pMatLibHighTRB, pBlock );
192 pMatlibJob->InitJob( m_szHighMatLibFilename, m_pMatLibHighTRB, m_pMatLibHigh, pBlock->GetMemBlock() );
196 m_pMatLibLowTRB =
new ( pBlock->GetMemBlock() )
TTRB();
197 pBlock->SetupTRB( m_pMatLibLowTRB, pBlock );
199 pMatlibJob->InitJob( m_szLowMatLibFilename, m_pMatLibLowTRB, m_pMatLibLow, pBlock->GetMemBlock() );
202 AAssetStreaming::GetSingleton()->AddMainThreadJob( pMatlibJob );
213 AMaterialLibraryManager::GetSingleton()->UnloadTexturesOfLibrary( m_pMatLibHigh );
214 m_pMatLibHigh->Destroy();
215 m_pMatLibHigh =
TNULL;
218 if ( m_pMatLibHighTRB )
220 delete m_pMatLibHighTRB;
221 m_pMatLibHighTRB =
TNULL;
228 AMaterialLibraryManager::GetSingleton()->UnloadTexturesOfLibrary( m_pMatLibLow );
229 m_pMatLibLow->Destroy();
230 m_pMatLibLow =
TNULL;
233 if ( m_pMatLibLowTRB )
235 delete m_pMatLibLowTRB;
236 m_pMatLibLowTRB =
TNULL;
245 auto pTerrain = ATerrainInterface::GetSingleton();
248 for (
TINT i = 0; i < iNumLODs; i++ )
250 if ( m_ppLODModelsData[ a_eLODType ][ i ] )
252 pTerrain->DestroyModelData( m_ppLODModelsData[ a_eLODType ][ i ] );
253 m_ppLODModelsData[ a_eLODType ][ i ] =
TNULL;
263 if ( m_pCollisionModelData && pTerrain->IsCollisionStreamed() )
265 pTerrain->DestroyModelData( m_pCollisionModelData );
266 m_pCollisionModelData =
TNULL;
269 for (
TUINT i = 0; i < m_iNumHighMemBlocksUsed; i++ )
271 auto pBlock = m_ppHighLODBlocks[ i ];
275 m_ppHighLODBlocks[ i ] =
TNULL;
284 for (
TUINT i = 0; i < m_iNumLowMemBlocksUsed; i++ )
286 auto pBlock = m_ppLowLODBlocks[ i ];
290 m_ppLowLODBlocks[ i ] =
TNULL;
298 m_eFlags = eNewFlags;
312 for (
TINT k = 0; k < uiNumLODBlocks; k++ )
328 return m_pMatLibHigh !=
TNULL;
332 return m_pMatLibLow !=
TNULL;
342 m_eFlags |= ( 16 << a_eLODType );
346 m_eFlags &= ~( 16 << a_eLODType );
356 m_eFlags |= ( 1 << ( a_eLODType ) );
360 m_eFlags &= ~( 1 << ( a_eLODType ) );
384 m_eFlags |= ( 64 << a_eLODType );
388 m_eFlags &= ~( 64 << a_eLODType );
414 if ( pAnimatedMaterial )
440 if ( a_bUseLighting )
457 for (
TINT i = 0; i < pModel->GetNumLODs(); i++ )
459 auto& rLOD = pModel->GetLOD( i );
461 for (
TINT k = 0; k < rLOD.iNumMeshes; k++ )
463 auto pMesh = rLOD.ppMeshes[ k ];
468 pMaterial->SetBlendMode( 3 );
#define TSTATICCAST(POINTERTYPE, VALUE)
#define TIMPLEMENT_D(DESC)
#define TOSHI_NAMESPACE_USING
#define TDYNAMICCAST(T, OBJECT)
TSystemManager g_oSystemManager
TFLOAT GetCurrentDeltaTime() const
void AddUVOffsetY(TUINT a_uiTextureIndex, TFLOAT a_fOffset)
TFLOAT GetUVOffsetY(TUINT a_uiTextureIndex)
void SetColours(const Toshi::TVector4 &a_rShadowColour, const Toshi::TVector4 a_rAmbientColour)
const Toshi::TVector4 & GetDefaultAmbientColor() const
const Toshi::TVector4 & GetLitShadowColor() const
const Toshi::TVector4 & GetLitAmbientColor() const
const Toshi::TVector4 & GetDefaultShadowColor() const
void Assign(ATerrainSection *a_pVISGroup, ATerrainLODType a_eLODType)
friend class ATerrainInterface
void LoadMatlib(ATerrainLODType a_eLODType)
void GetLODNames(ATerrainLODType a_eLODType, const TCHAR **&a_rLODs, TINT &a_rNumLODs)
void UnloadMatlib(ATerrainLODType a_eLODType)
TBOOL IsLODQueued(ATerrainLODType a_eLODType) const
void RemoveFromStreamingQueue()
void SetLODLoaded(ATerrainLODType a_eLODType, TBOOL a_bLoaded)
TINT GetLODCount(ATerrainLODType a_eLODType)
@ FLAGS_COLLISION_LOADING
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
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
void SetUseLighting(TBOOL a_bUseLighting)
char m_szType[TYPE_NAME_MAX_SIZE+1]