#pragma once #include "../eterGrnLib/Thing.h" class CRaceMotionData; class CAttributeData; #define COMBO_KEY DWORD #define MAKE_COMBO_KEY(motion_mode, combo_type) ( (DWORD(motion_mode) << 16) | (DWORD(combo_type)) ) #define COMBO_KEY_GET_MOTION_MODE(key) ( WORD(DWORD(key) >> 16 & 0xFFFF) ) #define COMBO_KEY_GET_COMBO_TYPE(key) ( WORD(DWORD(key) & 0xFFFF) ) class CRaceData { public: enum EParts { // Share index with server // ECharacterEquipmentPartµµ ¼öÁ¤ÇØÁÖ¼¼¿ä. //ÆÐŶ Å©±â°¡ º¯ÇÕ´Ï´Ù ¼­¹ö¿Í »óÀÇÈÄ Ãß°¡ÇØÁÖ¼¼¿ä. PART_MAIN, PART_WEAPON, PART_HEAD, PART_WEAPON_LEFT, PART_HAIR, PART_MAX_NUM, }; enum { SMOKE_NUM = 4, }; ///////////////////////////////////////////////////////////////////////////////// // Graphic Resource // Model typedef std::map TGraphicThingMap; typedef std::map TAttachingBoneNameMap; // Motion typedef struct SMotion { BYTE byPercentage; CGraphicThing * pMotion; CRaceMotionData * pMotionData; } TMotion; typedef std::vector TMotionVector; typedef std::map TMotionVectorMap; typedef struct SMotionModeData { WORD wMotionModeIndex; TMotionVectorMap MotionVectorMap; SMotionModeData() {} virtual ~SMotionModeData() {} } TMotionModeData; typedef std::map TMotionModeDataMap; typedef TMotionModeDataMap::iterator TMotionModeDataIterator; ///////////////////////////////////////////////////////////////////////////////// // Model Data typedef struct SModelData { NRaceData::TAttachingDataVector AttachingDataVector; } TModelData; typedef std::map TModelDataMap; typedef TModelDataMap::iterator TModelDataMapIterator; ///////////////////////////////////////////////////////////////////////////////// // Motion Data typedef std::map TMotionDataMap; ///////////////////////////////////////////////////////////////////////////////// // Combo Data typedef std::vector TComboIndexVector; typedef struct SComboAttackData { TComboIndexVector ComboIndexVector; } TComboData; typedef std::map TNormalAttackIndexMap; typedef std::map TComboAttackDataMap; typedef TComboAttackDataMap::iterator TComboAttackDataIterator; struct SSkin { int m_ePart; std::string m_stSrcFileName; std::string m_stDstFileName; SSkin() { m_ePart=0; } SSkin(const SSkin& c_rkSkin) { Copy(c_rkSkin); } void operator=(const SSkin& c_rkSkin) { Copy(c_rkSkin); } void Copy(const SSkin& c_rkSkin) { m_ePart=c_rkSkin.m_ePart; m_stSrcFileName=c_rkSkin.m_stSrcFileName; m_stDstFileName=c_rkSkin.m_stDstFileName; } }; struct SHair { std::string m_stModelFileName; std::vector m_kVct_kSkin; }; struct SShape { std::string m_stModelFileName; std::vector m_kVct_kSkin; }; public: static CRaceData* New(); static void Delete(CRaceData* pkRaceData); static void CreateSystem(UINT uCapacity, UINT uMotModeCapacity); static void DestroySystem(); public: CRaceData(); virtual ~CRaceData(); void Destroy(); // Codes For Client const char* GetBaseModelFileName() const; const char* GetAttributeFileName() const; const char* GetMotionListFileName() const; CGraphicThing * GetBaseModelThing(); CGraphicThing * GetLODModelThing(); CAttributeData * GetAttributeDataPtr(); BOOL GetAttachingBoneName(DWORD dwPartIndex, const char ** c_pszBoneName); BOOL CreateMotionModeIterator(TMotionModeDataIterator & itor); BOOL NextMotionModeIterator(TMotionModeDataIterator & itor); BOOL GetMotionKey(WORD wMotionModeIndex, WORD wMotionIndex, MOTION_KEY * pMotionKey); BOOL GetMotionModeDataPointer(WORD wMotionMode, TMotionModeData ** ppMotionModeData); BOOL GetModelDataPointer(DWORD dwModelIndex, const TModelData ** c_ppModelData); BOOL GetMotionVectorPointer(WORD wMotionMode, WORD wMotionIndex, const TMotionVector ** c_ppMotionVector); BOOL GetMotionDataPointer(WORD wMotionMode, WORD wMotionIndex, WORD wMotionSubIndex, CRaceMotionData** ppMotionData); BOOL GetMotionDataPointer(DWORD dwMotionKey, CRaceMotionData ** ppMotionData); DWORD GetAttachingDataCount(); BOOL GetAttachingDataPointer(DWORD dwIndex, const NRaceData::TAttachingData ** c_ppAttachingData); BOOL GetCollisionDataPointer(DWORD dwIndex, const NRaceData::TAttachingData ** c_ppAttachingData); BOOL GetBodyCollisionDataPointer(const NRaceData::TAttachingData ** c_ppAttachingData); BOOL IsTree(); const char * GetTreeFileName(); /////////////////////////////////////////////////////////////////// // Setup by Script BOOL LoadRaceData(const char * c_szFileName); CGraphicThing* RegisterMotionData(WORD wMotionMode, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage = 100); /////////////////////////////////////////////////////////////////// // Setup by Python void SetRace(DWORD dwRaceIndex); void RegisterAttachingBoneName(DWORD dwPartIndex, const char * c_szBoneName); void RegisterMotionMode(WORD wMotionModeIndex); void SetMotionModeParent(WORD wParentMotionModeIndex, WORD wMotionModeIndex); void OLD_RegisterMotion(WORD wMotionModeIndex, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage = 100); CGraphicThing* NEW_RegisterMotion(CRaceMotionData* pkMotionData, WORD wMotionModeIndex, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage = 100); bool SetMotionRandomWeight(WORD wMotionModeIndex, WORD wMotionIndex, WORD wMotionSubIndex, BYTE byPercentage); void RegisterNormalAttack(WORD wMotionModeIndex, WORD wMotionIndex); BOOL GetNormalAttackIndex(WORD wMotionModeIndex, WORD * pwMotionIndex); void ReserveComboAttack(WORD wMotionModeIndex, WORD wComboType, DWORD dwComboCount); void RegisterComboAttack(WORD wMotionModeIndex, WORD wComboType, DWORD dwComboIndex, WORD wMotionIndex); BOOL GetComboDataPointer(WORD wMotionModeIndex, WORD wComboType, TComboData ** ppComboData); void SetShapeModel(UINT eShape, const char* c_szModelFileName); void AppendShapeSkin(UINT eShape, UINT ePart, const char* c_szSrcFileName, const char* c_szDstFileName); void SetHairSkin(UINT eHair, UINT ePart, const char* c_szModelFileName, const char* c_szSrcFileName, const char* c_szDstFileName); ///// DWORD GetSmokeEffectID(UINT eSmoke); const std::string& GetSmokeBone(); SHair* FindHair(UINT eHair); SShape* FindShape(UINT eShape); protected: void __Initialize(); void __OLD_RegisterMotion(WORD wMotionMode, WORD wMotionIndex, const TMotion & rMotion); BOOL GetMotionVectorPointer(WORD wMotionMode, WORD wMotionIndex, TMotionVector ** ppMotionVector); protected: DWORD m_dwRaceIndex; DWORD m_adwSmokeEffectID[SMOKE_NUM]; CGraphicThing * m_pBaseModelThing; CGraphicThing * m_pLODModelThing; std::string m_strBaseModelFileName; std::string m_strTreeFileName; std::string m_strAttributeFileName; std::string m_strMotionListFileName; std::string m_strSmokeBoneName; TModelDataMap m_ModelDataMap; TMotionModeDataMap m_pMotionModeDataMap; TAttachingBoneNameMap m_AttachingBoneNameMap; TComboAttackDataMap m_ComboAttackDataMap; TNormalAttackIndexMap m_NormalAttackIndexMap; std::map m_kMap_dwHairKey_kHair; std::map m_kMap_dwShapeKey_kShape; NRaceData::TAttachingDataVector m_AttachingDataVector; protected: static CDynamicPool ms_MotionModeDataPool; static CDynamicPool ms_kPool; };