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

95 lines
2.9 KiB
C++

#pragma once
//#include <vector>
const int c_nMaxPropCount = 65535; ///< WORD형으로 저장하므로
class CTerrainPropInfo
{
public:
CTerrainPropInfo();
virtual ~CTerrainPropInfo();
bool Initialize( const char* szPropInfoFileName );
void Release();
const std::vector<std::string>& GetPropCategoryNames() const { return m_CategoryNames; }
enum PROP_TYPE
{
PROP_UNUSED, ///< 사용되지 않는것.
PROP_USE_NAF, ///< NAF 파일로 bone 애니메이션과 NX3 mesh 파일
PROP_USE_NX3, ///< 애니메이션이 없는 NX3파일
PROP_SPEEDTREE, ///< 스피드트리
PROP_NPC, ///< NPC
};
PROP_TYPE GetPropType( WORD wPropNum ) const { return m_pPropInfo[ wPropNum ].Type; }
int GetShadowFlag( WORD wPropNum ) const { return m_pPropInfo[ wPropNum ].nShadowFlag; }
enum RENDER_TYPE
{
PROPRENDER_GENERAL,
PROPRENDER_BUILDING,
};
RENDER_TYPE GetPropRenderType( WORD wPropNum ) const { return m_pPropInfo[ wPropNum ].RenderType; }
enum LIGHTMAP_TYPE
{
PROPLIGHTMAP_NORMAL = 0,
PROPLIGHTMAP_COLLISION,
PROPLIGHTMAP_NONE,
};
LIGHTMAP_TYPE GetPropLightmapType( WORD wPropNum ) const { return m_pPropInfo[ wPropNum ].LightmapType; }
bool IsValidProp( WORD wPropNum ) const
{ return ( m_pPropInfo[ wPropNum ].Type != PROP_UNUSED ); }
int GetPropCategory( WORD wPropNum ) const
{ return IsValidProp( wPropNum ) ? m_pPropInfo[ wPropNum ].nCategory : (-1); }
float GetPropVisibleRatio( WORD wPropNum ) const
{ return IsValidProp( wPropNum ) ? m_pPropInfo[ wPropNum ].fVisibleRatio : 1.f; }
const char* GetPropName( WORD wPropNum ) const
{ return IsValidProp( wPropNum ) ? m_pPropInfo[ wPropNum ].strName.c_str() : "?"; }
const char* GetPropFileName( WORD wPropNum, bool bNoReturnNull = true ) const
{ return IsValidProp( wPropNum ) ? m_pPropInfo[ wPropNum ].strName.c_str() : (bNoReturnNull ? "" : NULL); }
const int GetPropLineIndex( WORD wPropNum ) const
{ return IsValidProp( wPropNum ) ? m_pPropInfo[ wPropNum ].nLineIndex : (-1); }
static std::string GetNX3NameByNAFName( const char* szNAFFileName );
private:
struct PROPINFO_STRUCT
{
int nLineIndex;
PROP_TYPE Type;
RENDER_TYPE RenderType;
LIGHTMAP_TYPE LightmapType;
int nCategory;
float fVisibleRatio;
int nShadowFlag;
std::string strName;
};
PROPINFO_STRUCT* m_pPropInfo;
std::vector<std::string> m_CategoryNames;
int GetShadowFlag( const char * pStr );
bool CheckPropFileType( const std::string& rName, const char* szTail ) const
{
int nFind = int( rName.find( szTail ) );
return (std::string::npos != nFind) ? (nFind == (rName.size() - ::strlen(szTail))) : false;
}
void SetPropInfo( int nLineIndex, WORD wPropNum, PROP_TYPE Type, RENDER_TYPE RenderType, LIGHTMAP_TYPE LightmapType,
int nCategory, float fVisibleRatio, const std::string& rName, int nShadowFlag );
protected:
virtual KStream* GetResourceStream( const char* szFileName ) = 0;
};