239 lines
6.8 KiB
C++
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;
|
|
};
|