138 lines
3.6 KiB
C++
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;
|
|
}; |