#pragma once #include "KResourceManagerBase.h" #include #include #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*, 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 { public: COBManager(); virtual ~COBManager(); std::vector * Load_NoCash( const char *resname ); ///< 툴에서 사용하려고 만든 것임. 받은 메세지는 삭제 요망. std::vector * Load( const char *resname ); trf::MetaData& GetMetaData() { return m_metaData; } protected: std::vector * load( const char *pFileName ); std::vector * DetailLoad( KStream &Stream ); std::vector * DetailLoadTRF( KStream &Stream ); XCriticalSection m_lckIntf; KHash< std::vector*, hashPr_string> m_resByName; trf::MetaData m_metaData; };