598 lines
16 KiB
C++
598 lines
16 KiB
C++
#include "StdAfx.h"
|
||
#include "../eterLib/ResourceManager.h"
|
||
#include "../eterLib/AttributeInstance.h"
|
||
#include "../eterBase/Utils.h"
|
||
#include "RaceData.h"
|
||
#include "RaceMotionData.h"
|
||
#include "../eterBase/Filename.h"
|
||
|
||
CDynamicPool<CRaceData> CRaceData::ms_kPool;
|
||
CDynamicPool<CRaceData::TMotionModeData> CRaceData::ms_MotionModeDataPool;
|
||
|
||
const std::string& CRaceData::GetSmokeBone()
|
||
{
|
||
return m_strSmokeBoneName;
|
||
}
|
||
|
||
DWORD CRaceData::GetSmokeEffectID(UINT eSmoke)
|
||
{
|
||
if(eSmoke>=SMOKE_NUM)
|
||
{
|
||
TraceError("CRaceData::GetSmokeEffectID(eSmoke=%d)", eSmoke);
|
||
return 0;
|
||
}
|
||
|
||
return m_adwSmokeEffectID[eSmoke];
|
||
}
|
||
|
||
CRaceData::SHair* CRaceData::FindHair(UINT eHair)
|
||
{
|
||
std::map<DWORD, SHair>::iterator f=m_kMap_dwHairKey_kHair.find(eHair);
|
||
if (m_kMap_dwHairKey_kHair.end()==f)
|
||
{
|
||
if (eHair != 0)
|
||
TraceError("Hair number %d is not exist.",eHair);
|
||
return NULL;
|
||
}
|
||
|
||
return &f->second;
|
||
}
|
||
|
||
void CRaceData::SetHairSkin(UINT eHair, UINT ePart, const char * c_szModelFileName, const char* c_szSrcFileName, const char* c_szDstFileName)
|
||
{
|
||
SSkin kSkin;
|
||
kSkin.m_ePart=ePart;
|
||
kSkin.m_stSrcFileName=c_szSrcFileName;
|
||
kSkin.m_stDstFileName=c_szDstFileName;
|
||
|
||
CFileNameHelper::ChangeDosPath(kSkin.m_stSrcFileName);
|
||
m_kMap_dwHairKey_kHair[eHair].m_kVct_kSkin.push_back(kSkin);
|
||
m_kMap_dwHairKey_kHair[eHair].m_stModelFileName = c_szModelFileName;
|
||
}
|
||
|
||
CRaceData::SShape* CRaceData::FindShape(UINT eShape)
|
||
{
|
||
std::map<DWORD, SShape>::iterator f=m_kMap_dwShapeKey_kShape.find(eShape);
|
||
if (m_kMap_dwShapeKey_kShape.end()==f)
|
||
return NULL;
|
||
|
||
return &f->second;
|
||
}
|
||
|
||
void CRaceData::SetShapeModel(UINT eShape, const char* c_szModelFileName)
|
||
{
|
||
m_kMap_dwShapeKey_kShape[eShape].m_stModelFileName=c_szModelFileName;
|
||
}
|
||
|
||
void CRaceData::AppendShapeSkin(UINT eShape, UINT ePart, const char* c_szSrcFileName, const char* c_szDstFileName)
|
||
{
|
||
SSkin kSkin;
|
||
kSkin.m_ePart=ePart;
|
||
kSkin.m_stSrcFileName=c_szSrcFileName;
|
||
kSkin.m_stDstFileName=c_szDstFileName;
|
||
|
||
CFileNameHelper::ChangeDosPath(kSkin.m_stSrcFileName);
|
||
m_kMap_dwShapeKey_kShape[eShape].m_kVct_kSkin.push_back(kSkin);
|
||
}
|
||
|
||
CRaceData* CRaceData::New()
|
||
{
|
||
return ms_kPool.Alloc();
|
||
}
|
||
|
||
void CRaceData::Delete(CRaceData* pkRaceData)
|
||
{
|
||
pkRaceData->Destroy();
|
||
ms_kPool.Free(pkRaceData);
|
||
}
|
||
|
||
void CRaceData::CreateSystem(UINT uCapacity, UINT uMotModeCapacity)
|
||
{
|
||
ms_MotionModeDataPool.Create(uMotModeCapacity);
|
||
ms_kPool.Create(uCapacity);
|
||
}
|
||
|
||
void CRaceData::DestroySystem()
|
||
{
|
||
ms_kPool.Destroy();
|
||
ms_MotionModeDataPool.Destroy();
|
||
}
|
||
|
||
BOOL CRaceData::CreateMotionModeIterator(TMotionModeDataIterator & itor)
|
||
{
|
||
if (m_pMotionModeDataMap.empty())
|
||
return FALSE;
|
||
|
||
itor = m_pMotionModeDataMap.begin();
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL CRaceData::NextMotionModeIterator(TMotionModeDataIterator & itor)
|
||
{
|
||
++itor;
|
||
|
||
return m_pMotionModeDataMap.end() != itor;
|
||
}
|
||
|
||
BOOL CRaceData::GetMotionKey(WORD wMotionModeIndex, WORD wMotionIndex, MOTION_KEY * pMotionKey)
|
||
{
|
||
TMotionModeData * pMotionModeData;
|
||
if (!GetMotionModeDataPointer(wMotionModeIndex, &pMotionModeData))
|
||
return FALSE;
|
||
|
||
if (pMotionModeData->MotionVectorMap.end() == pMotionModeData->MotionVectorMap.find(wMotionIndex))
|
||
{
|
||
WORD wGeneralMode=CRaceMotionData::MODE_GENERAL;
|
||
|
||
switch(wMotionModeIndex)
|
||
{
|
||
case CRaceMotionData::MODE_HORSE_ONEHAND_SWORD:
|
||
case CRaceMotionData::MODE_HORSE_TWOHAND_SWORD:
|
||
case CRaceMotionData::MODE_HORSE_DUALHAND_SWORD:
|
||
case CRaceMotionData::MODE_HORSE_FAN:
|
||
case CRaceMotionData::MODE_HORSE_BELL:
|
||
case CRaceMotionData::MODE_HORSE_BOW:
|
||
wGeneralMode=CRaceMotionData::MODE_HORSE;
|
||
break;
|
||
|
||
default:
|
||
wGeneralMode=CRaceMotionData::MODE_GENERAL;
|
||
break;
|
||
}
|
||
|
||
TMotionModeData * pMotionModeGeneralData;
|
||
if (!GetMotionModeDataPointer(wGeneralMode, &pMotionModeGeneralData))
|
||
return FALSE;
|
||
|
||
if (pMotionModeGeneralData->MotionVectorMap.end() == pMotionModeGeneralData->MotionVectorMap.find(wMotionIndex))
|
||
return FALSE;
|
||
|
||
*pMotionKey = MAKE_MOTION_KEY(wGeneralMode, wMotionIndex);
|
||
}
|
||
else
|
||
{
|
||
*pMotionKey = MAKE_MOTION_KEY(wMotionModeIndex, wMotionIndex);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::GetMotionModeDataPointer(WORD wMotionMode, TMotionModeData ** ppMotionModeData)
|
||
{
|
||
TMotionModeDataIterator itor = m_pMotionModeDataMap.find(wMotionMode);
|
||
if (itor == m_pMotionModeDataMap.end())
|
||
return FALSE;
|
||
|
||
*ppMotionModeData = itor->second;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::GetModelDataPointer(DWORD dwModelIndex, const TModelData ** c_ppModelData)
|
||
{
|
||
TModelDataMapIterator itor = m_ModelDataMap.find(dwModelIndex);
|
||
if (m_ModelDataMap.end() == itor)
|
||
return false;
|
||
|
||
*c_ppModelData = &itor->second;
|
||
|
||
return true;
|
||
}
|
||
|
||
BOOL CRaceData::GetMotionVectorPointer(WORD wMotionMode, WORD wMotionIndex, TMotionVector ** ppMotionVector)
|
||
{
|
||
TMotionModeData * pMotionModeData;
|
||
if (!GetMotionModeDataPointer(wMotionMode, &pMotionModeData))
|
||
return FALSE;
|
||
|
||
TMotionVectorMap::iterator itor = pMotionModeData->MotionVectorMap.find(wMotionIndex);
|
||
if (pMotionModeData->MotionVectorMap.end() == itor)
|
||
return FALSE;
|
||
|
||
*ppMotionVector = &itor->second;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::GetMotionDataPointer(WORD wMotionMode, WORD wMotionIndex, WORD wMotionSubIndex, CRaceMotionData ** c_ppMotionData)
|
||
{
|
||
const TMotionVector * c_pMotionVector;
|
||
if (!GetMotionVectorPointer(wMotionMode, wMotionIndex, &c_pMotionVector))
|
||
return FALSE;
|
||
|
||
if (wMotionSubIndex >= c_pMotionVector->size())
|
||
return FALSE;
|
||
|
||
const TMotion & c_rMotion = c_pMotionVector->at(wMotionSubIndex);
|
||
|
||
if (!c_rMotion.pMotionData)
|
||
return FALSE;
|
||
|
||
*c_ppMotionData = c_rMotion.pMotionData;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::GetMotionDataPointer(DWORD dwMotionKey, CRaceMotionData ** c_ppMotionData)
|
||
{
|
||
return GetMotionDataPointer(GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey), GET_MOTION_SUB_INDEX(dwMotionKey), c_ppMotionData);
|
||
}
|
||
|
||
BOOL CRaceData::GetMotionVectorPointer(WORD wMotionMode, WORD wMotionIndex, const TMotionVector ** c_ppMotionVector)
|
||
{
|
||
TMotionVector * pMotionVector;
|
||
if (!GetMotionVectorPointer(wMotionMode, wMotionIndex, &pMotionVector))
|
||
return FALSE;
|
||
|
||
*c_ppMotionVector = pMotionVector;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
DWORD CRaceData::GetAttachingDataCount()
|
||
{
|
||
return m_AttachingDataVector.size();
|
||
}
|
||
|
||
BOOL CRaceData::GetAttachingDataPointer(DWORD dwIndex, const NRaceData::TAttachingData ** c_ppAttachingData)
|
||
{
|
||
if (dwIndex >= GetAttachingDataCount())
|
||
return FALSE;
|
||
|
||
*c_ppAttachingData = &m_AttachingDataVector[dwIndex];
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::GetCollisionDataPointer(DWORD dwIndex, const NRaceData::TAttachingData ** c_ppAttachingData)
|
||
{
|
||
if (dwIndex >= GetAttachingDataCount())
|
||
return FALSE;
|
||
|
||
if (NRaceData::ATTACHING_DATA_TYPE_COLLISION_DATA != m_AttachingDataVector[dwIndex].dwType)
|
||
return FALSE;
|
||
|
||
*c_ppAttachingData = &m_AttachingDataVector[dwIndex];
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::GetBodyCollisionDataPointer(const NRaceData::TAttachingData ** c_ppAttachingData)
|
||
{
|
||
for (DWORD i = 0; i < m_AttachingDataVector.size(); ++i)
|
||
{
|
||
const NRaceData::TAttachingData * pAttachingData = &m_AttachingDataVector[i];
|
||
|
||
if (NRaceData::ATTACHING_DATA_TYPE_COLLISION_DATA == pAttachingData->dwType)
|
||
if (NRaceData::COLLISION_TYPE_BODY == pAttachingData->pCollisionData->iCollisionType)
|
||
{
|
||
*c_ppAttachingData = pAttachingData;
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
void CRaceData::SetRace(DWORD dwRaceIndex)
|
||
{
|
||
m_dwRaceIndex = dwRaceIndex;
|
||
}
|
||
|
||
void CRaceData::RegisterAttachingBoneName(DWORD dwPartIndex, const char * c_szBoneName)
|
||
{
|
||
m_AttachingBoneNameMap.insert(TAttachingBoneNameMap::value_type(dwPartIndex, c_szBoneName));
|
||
}
|
||
|
||
void CRaceData::RegisterMotionMode(WORD wMotionModeIndex)
|
||
{
|
||
TMotionModeData * pMotionModeData = ms_MotionModeDataPool.Alloc();
|
||
pMotionModeData->wMotionModeIndex = wMotionModeIndex;
|
||
pMotionModeData->MotionVectorMap.clear();
|
||
m_pMotionModeDataMap.insert(TMotionModeDataMap::value_type(wMotionModeIndex, pMotionModeData));
|
||
}
|
||
|
||
CGraphicThing* CRaceData::NEW_RegisterMotion(CRaceMotionData* pkMotionData, WORD wMotionModeIndex, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
|
||
{
|
||
CGraphicThing * pMotionThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(c_szFileName);
|
||
|
||
TMotionModeData * pMotionModeData;
|
||
if (!GetMotionModeDataPointer(wMotionModeIndex, &pMotionModeData))
|
||
{
|
||
AssertLog("Failed getting motion mode data!");
|
||
return NULL;
|
||
}
|
||
|
||
TMotion kMotion;
|
||
kMotion.byPercentage = byPercentage;
|
||
kMotion.pMotion = pMotionThing;
|
||
kMotion.pMotionData = pkMotionData;
|
||
pMotionModeData->MotionVectorMap[wMotionIndex].push_back(kMotion);
|
||
|
||
return pMotionThing;
|
||
}
|
||
|
||
CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
|
||
{
|
||
CRaceMotionData * pRaceMotionData = CRaceMotionData::New();
|
||
if (!pRaceMotionData->LoadMotionData(c_szFileName))
|
||
{
|
||
TraceError("CRaceData::RegisterMotionData - LoadMotionData(c_szFileName=%s) ERROR", c_szFileName);
|
||
CRaceMotionData::Delete(pRaceMotionData);
|
||
pRaceMotionData = NULL;
|
||
return NULL;
|
||
}
|
||
|
||
// 2004. 3. 15. myevan. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>dz<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>.
|
||
pRaceMotionData->SetName(wMotionIndex);
|
||
|
||
/////
|
||
|
||
// FIXME : <20>̹<EFBFBD> GR2<52><32> <20>ε<EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><EFBFBD><EEB6BB> <20>ؾ<EFBFBD> <20>ϴ°<CFB4>?
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ȱ<EFBFBD><C8B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20><> <20>߰<EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. - [levites]
|
||
|
||
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
|
||
|
||
// 2004.09.03.myevan.<2E><><EFBFBD>ο<EFBFBD><CEBF>Լ<EFBFBD><D4BC><EFBFBD> <20><>ó
|
||
//TMotion Motion;
|
||
//Motion.byPercentage = byPercentage;
|
||
//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());
|
||
//Motion.pMotionData = pRaceMotionData;
|
||
//__OLD_RegisterMotion(wMotionMode, wMotionIndex, Motion);
|
||
//return true;
|
||
}
|
||
|
||
|
||
void CRaceData::OLD_RegisterMotion(WORD wMotionModeIndex, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
|
||
{
|
||
CGraphicThing * pThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(c_szFileName);
|
||
|
||
TMotion Motion;
|
||
Motion.byPercentage = byPercentage;
|
||
Motion.pMotion = pThing;
|
||
Motion.pMotionData = NULL;
|
||
__OLD_RegisterMotion(wMotionModeIndex, wMotionIndex, Motion);
|
||
}
|
||
|
||
void CRaceData::__OLD_RegisterMotion(WORD wMotionMode, WORD wMotionIndex, const TMotion & rMotion)
|
||
{
|
||
TMotionModeData * pMotionModeData;
|
||
if (!GetMotionModeDataPointer(wMotionMode, &pMotionModeData))
|
||
{
|
||
AssertLog("Failed getting motion mode data!");
|
||
return;
|
||
}
|
||
|
||
TMotionVectorMap::iterator itor = pMotionModeData->MotionVectorMap.find(wMotionIndex);
|
||
if (pMotionModeData->MotionVectorMap.end() == itor)
|
||
{
|
||
TMotionVector MotionVector;
|
||
MotionVector.push_back(rMotion);
|
||
|
||
pMotionModeData->MotionVectorMap.insert(TMotionVectorMap::value_type(wMotionIndex, MotionVector));
|
||
}
|
||
else
|
||
{
|
||
TMotionVector & rMotionVector = itor->second;
|
||
rMotionVector.push_back(rMotion);
|
||
}
|
||
}
|
||
|
||
|
||
bool CRaceData::SetMotionRandomWeight(WORD wMotionModeIndex, WORD wMotionIndex, WORD wMotionSubIndex, BYTE byPercentage)
|
||
{
|
||
TMotionModeData * pMotionModeData;
|
||
|
||
if (!GetMotionModeDataPointer(wMotionModeIndex, &pMotionModeData))
|
||
{
|
||
//AssertLog("Failed getting motion mode data!");
|
||
return false;
|
||
}
|
||
|
||
TMotionVectorMap::iterator itor = pMotionModeData->MotionVectorMap.find(wMotionIndex);
|
||
|
||
if (pMotionModeData->MotionVectorMap.end() != itor)
|
||
{
|
||
TMotionVector & rMotionVector = itor->second;
|
||
if (wMotionSubIndex < rMotionVector.size())
|
||
{
|
||
rMotionVector[wMotionSubIndex].byPercentage = byPercentage;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TraceError("CRaceData::SetMotionRandomWeight(wMotionModeIndex=%d, wMotionIndex=%d, wMotionSubIndex=%d, byPercentage=%d) - Find Motion(wMotionIndex=%d) FAILED",
|
||
wMotionModeIndex, wMotionIndex, wMotionSubIndex, byPercentage, wMotionModeIndex);
|
||
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
void CRaceData::RegisterNormalAttack(WORD wMotionModeIndex, WORD wMotionIndex)
|
||
{
|
||
m_NormalAttackIndexMap.insert(TNormalAttackIndexMap::value_type(wMotionModeIndex, wMotionIndex));
|
||
}
|
||
BOOL CRaceData::GetNormalAttackIndex(WORD wMotionModeIndex, WORD * pwMotionIndex)
|
||
{
|
||
TNormalAttackIndexMap::iterator itor = m_NormalAttackIndexMap.find(wMotionModeIndex);
|
||
|
||
if (m_NormalAttackIndexMap.end() == itor)
|
||
return FALSE;
|
||
|
||
*pwMotionIndex = itor->second;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void CRaceData::ReserveComboAttack(WORD wMotionModeIndex, WORD wComboType, DWORD dwComboCount)
|
||
{
|
||
TComboData ComboData;
|
||
ComboData.ComboIndexVector.clear();
|
||
ComboData.ComboIndexVector.resize(dwComboCount);
|
||
m_ComboAttackDataMap.insert(TComboAttackDataMap::value_type(MAKE_COMBO_KEY(wMotionModeIndex, wComboType), ComboData));
|
||
}
|
||
|
||
void CRaceData::RegisterComboAttack(WORD wMotionModeIndex, WORD wComboType, DWORD dwComboIndex, WORD wMotionIndex)
|
||
{
|
||
TComboAttackDataIterator itor = m_ComboAttackDataMap.find(MAKE_COMBO_KEY(wMotionModeIndex, wComboType));
|
||
if (m_ComboAttackDataMap.end() == itor)
|
||
return;
|
||
|
||
TComboIndexVector & rComboIndexVector = itor->second.ComboIndexVector;
|
||
if (dwComboIndex >= rComboIndexVector.size())
|
||
{
|
||
AssertLog("CRaceData::RegisterCombo - Strange combo index!");
|
||
return;
|
||
}
|
||
|
||
rComboIndexVector[dwComboIndex] = wMotionIndex;
|
||
}
|
||
|
||
BOOL CRaceData::GetComboDataPointer(WORD wMotionModeIndex, WORD wComboType, TComboData ** ppComboData)
|
||
{
|
||
TComboAttackDataIterator itor = m_ComboAttackDataMap.find(MAKE_COMBO_KEY(wMotionModeIndex, wComboType));
|
||
|
||
if (m_ComboAttackDataMap.end() == itor)
|
||
return FALSE;
|
||
|
||
*ppComboData = &itor->second;
|
||
return TRUE;
|
||
}
|
||
|
||
const char * CRaceData::GetBaseModelFileName() const
|
||
{
|
||
return m_strBaseModelFileName.c_str();
|
||
}
|
||
|
||
const char * CRaceData::GetAttributeFileName() const
|
||
{
|
||
return m_strAttributeFileName.c_str();
|
||
}
|
||
|
||
const char* CRaceData::GetMotionListFileName() const
|
||
{
|
||
return m_strMotionListFileName.c_str();
|
||
}
|
||
|
||
CGraphicThing * CRaceData::GetBaseModelThing()
|
||
{
|
||
if (!m_pBaseModelThing)
|
||
{
|
||
m_pBaseModelThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(m_strBaseModelFileName.c_str());
|
||
}
|
||
|
||
return m_pBaseModelThing;
|
||
}
|
||
|
||
CGraphicThing * CRaceData::GetLODModelThing()
|
||
{
|
||
if (!m_pLODModelThing)
|
||
{
|
||
std::string strLODFileName = CFileNameHelper::NoExtension(m_strBaseModelFileName) + "_lod_01.gr2";
|
||
if (CResourceManager::Instance().IsFileExist(strLODFileName.c_str()))
|
||
{
|
||
m_pLODModelThing = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(strLODFileName.c_str());
|
||
}
|
||
}
|
||
|
||
return m_pLODModelThing;
|
||
}
|
||
|
||
CAttributeData * CRaceData::GetAttributeDataPtr()
|
||
{
|
||
if (m_strAttributeFileName.empty())
|
||
return NULL;
|
||
|
||
if (!CResourceManager::Instance().IsFileExist(m_strAttributeFileName.c_str()))
|
||
return NULL;
|
||
|
||
return (CAttributeData *)CResourceManager::Instance().GetResourcePointer(m_strAttributeFileName.c_str());
|
||
}
|
||
|
||
BOOL CRaceData::GetAttachingBoneName(DWORD dwPartIndex, const char ** c_pszBoneName)
|
||
{
|
||
TAttachingBoneNameMap::iterator itor = m_AttachingBoneNameMap.find(dwPartIndex);
|
||
if (itor == m_AttachingBoneNameMap.end())
|
||
return FALSE;
|
||
|
||
const std::string & c_rstrBoneName = itor->second;
|
||
|
||
*c_pszBoneName = c_rstrBoneName.c_str();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CRaceData::IsTree()
|
||
{
|
||
return !m_strTreeFileName.empty();
|
||
}
|
||
|
||
const char * CRaceData::GetTreeFileName()
|
||
{
|
||
return m_strTreeFileName.c_str();
|
||
}
|
||
|
||
void CRaceData::Destroy()
|
||
{
|
||
m_kMap_dwHairKey_kHair.clear();
|
||
m_kMap_dwShapeKey_kShape.clear();
|
||
|
||
m_strBaseModelFileName = "";
|
||
m_strTreeFileName = "";
|
||
m_strAttributeFileName = "";
|
||
m_strMotionListFileName = "motlist.txt";
|
||
|
||
m_AttachingBoneNameMap.clear();
|
||
m_ModelDataMap.clear();
|
||
|
||
m_NormalAttackIndexMap.clear();
|
||
m_ComboAttackDataMap.clear();
|
||
|
||
TMotionModeDataMap::iterator itorMode = m_pMotionModeDataMap.begin();
|
||
for (; itorMode != m_pMotionModeDataMap.end(); ++itorMode)
|
||
{
|
||
TMotionModeData * pMotionModeData = itorMode->second;
|
||
|
||
TMotionVectorMap::iterator itorMotion = pMotionModeData->MotionVectorMap.begin();
|
||
for (; itorMotion != pMotionModeData->MotionVectorMap.end(); ++itorMotion)
|
||
{
|
||
TMotionVector & rMotionVector = itorMotion->second;
|
||
for (DWORD i = 0; i < rMotionVector.size(); ++i)
|
||
{
|
||
CRaceMotionData::Delete(rMotionVector[i].pMotionData);
|
||
}
|
||
}
|
||
|
||
ms_MotionModeDataPool.Free(pMotionModeData);
|
||
}
|
||
m_pMotionModeDataMap.clear();
|
||
|
||
__Initialize();
|
||
}
|
||
|
||
void CRaceData::__Initialize()
|
||
{
|
||
m_strMotionListFileName = "motlist.txt";
|
||
|
||
m_pBaseModelThing = NULL;
|
||
m_pLODModelThing = NULL;
|
||
|
||
m_dwRaceIndex = 0;
|
||
|
||
memset(m_adwSmokeEffectID, 0, sizeof(m_adwSmokeEffectID));
|
||
}
|
||
|
||
CRaceData::CRaceData()
|
||
{
|
||
__Initialize();
|
||
}
|
||
CRaceData::~CRaceData()
|
||
{
|
||
Destroy();
|
||
} |