#pragma once #include "TerrainInfoForSegment.h" #include class CBossTerrainSegmentLoadThread; class CTerrainSegmentLoadThread : public XBossWorker::XWorker { public: CTerrainSegmentLoadThread( class CTerrainMapEngine * pMapEngine, int nSegmentIndex, const K3DPoint& rSegmentOrigin, int nTileCountPerSegment, int nTileCountPerMap, float fTileLength) : m_pMapEngine( pMapEngine ) , m_bFinished( false ) , m_nSegmentIndex( nSegmentIndex ) , m_ptSegmentOrigin( rSegmentOrigin ) , m_nTileCountPerSegment( nTileCountPerSegment ) , m_nTileCountPerMap( nTileCountPerMap ) , m_fTileLength( fTileLength ) , m_nMapPosX( 0 ) , m_nMapPosY( 0 ) , m_nScriptIndex( -1 ) , m_pTerrainInfo( NULL ) { // _oprint( "CTerrainSegmentLoadThread : [%d]\n", nSegmentIndex ); } /// 총 9개의 세그먼트의 정보를 넣는다. 영역 바깥인 경우 넣지 않으면 된다. void SetMapFileNameAndSegmentIndex( int nMapNum, const char* szMapFileName, int nSegmentIndexInMap ) { if( 0 <= nMapNum && nMapNum < 9 ) { m_SegmentInitStruct[ nMapNum ].strMapFileName = szMapFileName; m_SegmentInitStruct[ nMapNum ].nSegmentIndexInMap = nSegmentIndexInMap; } } // 스크립트 파일 정보를 넣는다. //void SetLocationFileName( int nMapPosX, int nMapPosY, int nScriptIndex, const char* szLocationFileName ) //{ // m_nMapPosX = nMapPosX; // m_nMapPosY = nMapPosY; // m_nScriptIndex = nScriptIndex; // m_strLocationFileName = szLocationFileName; //} void SetMapPos( int nMapPosX, int nMapPosY ) { m_nMapPosX = nMapPosX; m_nMapPosY = nMapPosY; } bool IsFinished() const { return m_bFinished; } int GetSegmentIndex() const { return m_nSegmentIndex; } int GetScriptIndex() const { return m_nScriptIndex; } /// 외부로 나가는 결과값 CTerrainInfoForSegment* GetTerrainInfo() const { return m_pTerrainInfo; } CTerrainInfoForSegment::PROPLOAD_INFO GetPropLoadInfo() const { return m_PropLoadInfo; } CTerrainInfoForSegment::SPEEDGRASSLOAD_INFO & GetSpeedGrassLoadInfo() { return m_SpeedGrassLoadInfo; } bool onProcess( int nThreadNum ); void onEnd( bool bIsCancel ) { m_bFinished = true; } private: friend class CBossTerrainSegmentLoadThread; volatile bool m_bFinished; int m_nSegmentIndex; K3DPoint m_ptSegmentOrigin; int m_nTileCountPerSegment; int m_nTileCountPerMap; float m_fTileLength; CTerrainInfoForSegment::INITSTRUCT m_SegmentInitStruct[9]; int m_nMapPosX, m_nMapPosY; std::string m_strLocationFileName; int m_nScriptIndex; class CTerrainMapEngine * m_pMapEngine; // 결과값 ( 외부로 넘기므로 소멸자에서 제거하지 않는다. ) private: CTerrainInfoForSegment* m_pTerrainInfo; CTerrainInfoForSegment::PROPLOAD_INFO m_PropLoadInfo; CTerrainInfoForSegment::SPEEDGRASSLOAD_INFO m_SpeedGrassLoadInfo; };