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

90 lines
2.8 KiB
C++

#pragma once
#include "TerrainInfoForSegment.h"
#include <toolkit/XBossWorker.h>
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;
};