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

239 lines
6.8 KiB
C++

#pragma once
#include "KResourceManagerBase.h"
#include <toolkit/khash.h>
#include <kfile/TRFMetaData.h>
#include "GameDefine.h"
struct E_DATA
{
E_DATA()
{
dwType = 0;
dwTime = 0;
dwDetail = 0;
dwDirection = 0;
dwProperty = 0;
}
DWORD dwTime;
DWORD dwType;
DWORD dwDetail;
std::string strFileName;
DWORD dwDirection;
DWORD dwProperty;
};
struct EVENT_LIST
{
std::string strAniName;
std::vector< E_DATA > vEventlist;
};
struct EFFECT_POS_DATA
{
DWORD dwIndex;
std::string strName;
};
struct TEXTURE_GROUP_LIST
{
struct Seq_list
{
Seq_list() : strSeqName( "" )
{}
~Seq_list()
{
for( int x = 0; x < TEXTURE_GROUP_INDEX_MAX; ++x )
{
vTextureIndex[x].clear();
}
}
std::string strSeqName;
std::vector< std::string > vTextureIndex[TEXTURE_GROUP_INDEX_MAX];
const char* GetName() { return strSeqName.c_str(); }
};
std::string strNx3Name;
std::vector< Seq_list* > vSeqList;
TEXTURE_GROUP_LIST() {}
~TEXTURE_GROUP_LIST()
{
std::vector< Seq_list* >::iterator itSeqList = vSeqList.begin();
for( ; itSeqList != vSeqList.end(); )
{
delete (*itSeqList);
itSeqList = vSeqList.erase( itSeqList );
}
}
const char* GetName() { return strNx3Name.c_str(); }
};
typedef std::vector< TEXTURE_GROUP_LIST* >::iterator iterator_texture_group_list;
typedef std::vector< TEXTURE_GROUP_LIST::Seq_list* >::iterator iterator_seq_list;
struct COBSET
{
COBSET()
{
nRefCount = 1;
nAniPart = 0; ///< ANIPART_BIPED
nSex = 0;
nClan = 0;
nRenderType = -1;
nPropCategory = -1;
nShadowType = -1;
}
~COBSET()
{
m_HairList.erase( m_HairList.begin(), m_HairList.end() );
m_FaceList.erase( m_FaceList.begin(), m_FaceList.end() );
m_BodyList.erase( m_BodyList.begin(), m_BodyList.end() );
m_FootList.erase( m_FootList.begin(), m_FootList.end() );
m_HandList.erase( m_HandList.begin(), m_HandList.end() );
m_AccEyeList.erase( m_AccEyeList.begin(), m_AccEyeList.end() );
m_AccLipList.erase( m_AccLipList.begin(), m_AccLipList.end() );
m_AccEarList.erase( m_AccEarList.begin(), m_AccEarList.end() );
m_AccNeckList.erase( m_AccNeckList.begin(), m_AccNeckList.end() );
m_MantleList.erase( m_MantleList.begin(), m_MantleList.end() );
m_FabricList.erase( m_FabricList.begin(), m_FabricList.end() );
m_LWeaponList.erase( m_LWeaponList.begin(), m_LWeaponList.end() );
m_RWeaponList.erase( m_RWeaponList.begin(), m_RWeaponList.end() );
m_HelmList.erase( m_HelmList.begin(), m_HelmList.end() );
m_AniList.erase( m_AniList.begin(), m_AniList.end() );
m_AniEventList.erase( m_AniEventList.begin(), m_AniEventList.end() );
m_EffPosList.erase( m_EffPosList.begin(), m_EffPosList.end() );
m_MeshList.erase( m_MeshList.begin(), m_MeshList.end() );
m_LodList.erase( m_LodList.begin(), m_LodList.end() );
//해쉬 삭제
std::vector< std::string >* anilist;
bool res;
res = m_hashAni.get_first_value( anilist );
while ( res )
{
if ( anilist != NULL )
delete anilist;
res = m_hashAni.get_next_value( anilist );
}
m_hashAni.clear();
for( int x = 0; x < MPART_MAX; ++x )
{
std::vector< TEXTURE_GROUP_LIST* >::iterator itTexGroup = m_TextureGroupList[x].begin();
for( ; itTexGroup != m_TextureGroupList[x].end(); )
{
delete (*itTexGroup);
itTexGroup = m_TextureGroupList[x].erase( itTexGroup );
}
}
}
std::vector< std::string > * const GetPartNameList( int nPart )
{
switch( nPart )
{
case MPART_FACE: return &m_FaceList; break;
case MPART_HAIR: return &m_HairList; break;
case MPART_BODY: return &m_BodyList; break;
case MPART_FOOT: return &m_FootList; break;
case MPART_HAND: return &m_HandList; break;
case MPART_L_SKIRT: return &m_LSkirtList; break;
case MPART_M_SKIRT: return &m_MSkirtList; break;
case MPART_S_SKIRT: return &m_SSkirtList; break;
case MPART_MANTLE: return &m_MantleList; break;
case MPART_FABRIC: return &m_FabricList; break;
case MPART_L_WEAPON: return &m_LWeaponList; break;
case MPART_R_WEAPON: return &m_RWeaponList; break;
case MPART_HELM: return &m_HelmList; break;
}
return NULL;
}
int nRefCount;
std::string strName; ///< 화일 이름
int nAniPart; ///< 부위 인덱스
int nSex; ///< 성별
int nClan; ///< 종족
DWORD nRenderType; ///< Prop Info 01[GENERAL, BUILDING]
DWORD nPropCategory; ///< Prop Info 02[Prop, Building, NPC]
DWORD nShadowType; ///< Prop Info 03[그림자 생성(no,dy_cast, st_cast)+그림자 수신(no, recv)]
float fSelCube[6]; ///< 선택 큐브
float fDeadCube[6]; ///< 죽었을때 선택 큐브
float fVisibleCube[6]; ///< 컬링 용 큐브
float fCollideCube[6]; ///< 캐릭터간 충돌 큐브
std::vector< EFFECT_POS_DATA > m_EffPosList;
//Prop 용 COB
std::vector< std::string > m_MeshList; ///< NAF용 Mesh 리스트
std::vector< EFFECT_POS_DATA > m_LodList; ///< LOD List
std::string m_strHeightFile; ///< 높이 화일
std::string m_strCameraCollisionFile; ///< 카메라 충돌 화일, //gmpbigsun(20121122): Mob일경우 MTE texture이름이 들어감.
std::vector< std::string > m_HairList; ///< Mesh Part별 List
std::vector< std::string > m_FaceList;
std::vector< std::string > m_BodyList;
std::vector< std::string > m_FootList;
std::vector< std::string > m_HandList;
std::vector< std::string > m_LSkirtList;
std::vector< std::string > m_MSkirtList;
std::vector< std::string > m_SSkirtList;
std::vector< std::string > m_AccEyeList;
std::vector< std::string > m_AccLipList;
std::vector< std::string > m_AccEarList;
std::vector< std::string > m_AccNeckList;
std::vector< std::string > m_MantleList;
std::vector< std::string > m_FabricList;
std::vector< std::string > m_LWeaponList;
std::vector< std::string > m_RWeaponList;
std::vector< std::string > m_HelmList;
std::vector< std::string > m_AniList; ///< Mation List
KHash<std::vector< std::string >*, hashPr_string> m_hashAni;
std::vector< EVENT_LIST > m_AniEventList; ///< Motion 별 Time Event
std::vector< TEXTURE_GROUP_LIST* > m_TextureGroupList[MPART_MAX];
};
class COBManager : public KSingletoneResourceManager<COBManager>
{
public:
COBManager();
virtual ~COBManager();
std::vector<COBSET *> * Load_NoCash( const char *resname ); ///< 툴에서 사용하려고 만든 것임. 받은 메세지는 삭제 요망.
std::vector<COBSET *> * Load( const char *resname );
trf::MetaData& GetMetaData() { return m_metaData; }
protected:
std::vector<COBSET *> * load( const char *pFileName );
std::vector<COBSET *> * DetailLoad( KStream &Stream );
std::vector<COBSET *> * DetailLoadTRF( KStream &Stream );
XCriticalSection m_lckIntf;
KHash< std::vector<COBSET*>*, hashPr_string> m_resByName;
trf::MetaData m_metaData;
};