Files
Leviathan/Client/Game/engine/TerrainEngine/TerrainGrassColonyInfoForMap.h
T
2026-06-01 12:46:52 +02:00

138 lines
3.6 KiB
C++

#pragma once
//#include "EnvironmentInfo.h"
#include "GrassColonyInfo.h"
#include "MapDefine.h"
struct GrassColonyInfoMap
{
GrassColonyInfoMap() : m_nPolygonID( -1 ),
m_pGrassColonyInfo( NULL )
{}
~GrassColonyInfoMap()
{
SAFE_DELETE( m_pGrassColonyInfo );
}
int m_nPolygonID;
GrassColonyInfo* m_pGrassColonyInfo;
void SetGrassColonyInfoSaveBuffer( KStream* pStream, NFM_SPEED_GRASS_COLONY_INFO* pGrassColonyInfoSaveBuffer )
{
m_nPolygonID = pGrassColonyInfoSaveBuffer->nPolygonID;
m_pGrassColonyInfo = new GrassColonyInfo;
m_pGrassColonyInfo->fDensity = pGrassColonyInfoSaveBuffer->fDensity;
m_pGrassColonyInfo->fDisTribution = pGrassColonyInfoSaveBuffer->fDisTribution;
m_pGrassColonyInfo->fSize = pGrassColonyInfoSaveBuffer->fSize;
m_pGrassColonyInfo->fHeightP = pGrassColonyInfoSaveBuffer->fHeightP;
m_pGrassColonyInfo->fHeightM = pGrassColonyInfoSaveBuffer->fHeightM;
m_pGrassColonyInfo->Color = pGrassColonyInfoSaveBuffer->Color;
m_pGrassColonyInfo->fColorRatio = pGrassColonyInfoSaveBuffer->fColorRatio;
m_pGrassColonyInfo->fColorTone = pGrassColonyInfoSaveBuffer->fColorTone;
m_pGrassColonyInfo->fChroma = pGrassColonyInfoSaveBuffer->fChroma;
m_pGrassColonyInfo->fBrightness = pGrassColonyInfoSaveBuffer->fBrightness;
m_pGrassColonyInfo->fCombinationRatio = pGrassColonyInfoSaveBuffer->fCombinationRatio;
m_pGrassColonyInfo->fWindReaction = pGrassColonyInfoSaveBuffer->fWindReaction;
int nTexFileNameLength = 0;
pStream->Read( &nTexFileNameLength, sizeof( nTexFileNameLength ) );
if( nTexFileNameLength > 0 )
{
char* pTexFileName = new char[nTexFileNameLength];
pStream->Read( pTexFileName, sizeof( char ) * nTexFileNameLength );
m_pGrassColonyInfo->strTexFileName = pTexFileName;
SAFE_DELETE_ARRAY( pTexFileName );
m_pGrassColonyInfo->CreateTexture();
}
int nPolygonCount = 0;
pStream->Read( &nPolygonCount, sizeof(nPolygonCount) );
for( int nPolygon = 0; nPolygon < nPolygonCount; nPolygon++ )
{
int nPointCount;
pStream->Read( &nPointCount, sizeof(nPointCount) );
POINT* pPoints = new POINT[ nPointCount ];
pStream->Read( pPoints, sizeof(POINT) * nPointCount );
delete[] pPoints;
}
}
};
typedef std::vector<GrassColonyInfoMap*> GRASS_COLONYINFO_MAP;
class CTerrainGrassColonyInfoForMap
{
public:
CTerrainGrassColonyInfoForMap( int nMapX, int nMapY ) : m_nMapX(nMapX),
m_nMapY(nMapY),
m_nSegMentCount(1)
{
}
~CTerrainGrassColonyInfoForMap()
{
Clear();
}
void Clear()
{
GRASS_COLONYINFO_MAP::iterator iter = m_vGrassColonyInfoMap.begin();
for( ; iter != m_vGrassColonyInfoMap.end(); )
{
SAFE_DELETE( (*iter) );
iter = m_vGrassColonyInfoMap.erase( iter );
}
}
void AddGrassColonyInfo( GrassColonyInfoMap* pGrassColonyInfo )
{
m_vGrassColonyInfoMap.push_back( pGrassColonyInfo );
}
bool CheckMap( int nMapX, int nMapY )
{
if( m_nMapX == nMapX && m_nMapY == nMapY )
{
return true;
}
return false;
}
GrassColonyInfo* GetGrassColonyInfo( int nPolygonID )
{
GRASS_COLONYINFO_MAP::iterator iter = m_vGrassColonyInfoMap.begin();
for( ; iter != m_vGrassColonyInfoMap.end(); ++iter )
{
if( (*iter)->m_nPolygonID == nPolygonID)
return (*iter)->m_pGrassColonyInfo;
}
return NULL;
}
void AddSegMentRef()
{
++m_nSegMentCount;
}
bool DeleteSegMentRef()
{
--m_nSegMentCount;
if( m_nSegMentCount <=0 ) return true;
return false;
}
private:
GRASS_COLONYINFO_MAP m_vGrassColonyInfoMap;
int m_nMapX;
int m_nMapY;
int m_nSegMentCount;
};