#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 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; };