Guest User

Gamelib/RaceDataFile.cpp

a guest
Sep 11th, 2023
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.76 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "../eterLib/ResourceManager.h"
  3.  
  4. #include "RaceData.h"
  5. #include "RaceMotionData.h"
  6.  
  7. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  8. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. #define ENABLE_SKIN_EXTENDED
  10. BOOL CRaceData::LoadRaceData(const char * c_szFileName)
  11. {
  12.     CTextFileLoader TextFileLoader;
  13.     if (!TextFileLoader.Load(c_szFileName))
  14.         return FALSE;
  15.  
  16.     TextFileLoader.SetTop();
  17.  
  18.     TextFileLoader.GetTokenString("basemodelfilename", &m_strBaseModelFileName);
  19.     TextFileLoader.GetTokenString("treefilename", &m_strTreeFileName);
  20.     TextFileLoader.GetTokenString("attributefilename", &m_strAttributeFileName);
  21.     TextFileLoader.GetTokenString("smokebonename", &m_strSmokeBoneName);
  22.     TextFileLoader.GetTokenString("motionlistfilename", &m_strMotionListFileName);
  23.  
  24.     if (!m_strTreeFileName.empty())
  25.     {
  26.         CFileNameHelper::StringPath(m_strTreeFileName);
  27.     }
  28.  
  29.     CTokenVector* pSmokeTokenVector;
  30.     if (TextFileLoader.GetTokenVector("smokefilename", &pSmokeTokenVector))
  31.     {
  32.         if (pSmokeTokenVector->size()%2!=0)
  33.         {
  34.             TraceError("SmokeFileName ArgCount[%d]%2==0", pSmokeTokenVector->size());
  35.             return FALSE;
  36.         }
  37.  
  38.         UINT uLineCount=pSmokeTokenVector->size()/2;
  39.  
  40.         for (UINT uLine=0; uLine<uLineCount; ++uLine)
  41.         {
  42.             int eSmoke=atoi(pSmokeTokenVector->at(uLine*2+0).c_str());
  43.             if (eSmoke<0 || eSmoke>=SMOKE_NUM)
  44.             {
  45.                 TraceError("SmokeFileName SmokeNum[%d] OUT OF RANGE", eSmoke);
  46.                 return FALSE;
  47.             }
  48.  
  49.             const std::string& c_rstrEffectFileName = pSmokeTokenVector->at(uLine*2+1);
  50.  
  51.             DWORD& rdwCRCEft=m_adwSmokeEffectID[eSmoke];
  52.             if (!CEffectManager::Instance().RegisterEffect2(c_rstrEffectFileName.c_str(), &rdwCRCEft))
  53.             {
  54.                 TraceError("CRaceData::RegisterEffect2(%s) ERROR", c_rstrEffectFileName.c_str());
  55.                 rdwCRCEft=0;
  56.                 return false;
  57.             }
  58.         }
  59.     }
  60.  
  61.     if (TextFileLoader.SetChildNode("shapedata"))
  62.     {
  63.         std::string strPathName;
  64.         DWORD dwShapeDataCount = 0;
  65.         if (TextFileLoader.GetTokenString("pathname", &strPathName) &&
  66.             TextFileLoader.GetTokenDoubleWord("shapedatacount", &dwShapeDataCount))
  67.         {
  68.             for (DWORD i = 0; i < dwShapeDataCount; ++i)
  69.             {
  70.                 if (!TextFileLoader.SetChildNode("shapedata", i))
  71.                 {
  72.                     continue;
  73.                 }
  74.  
  75.                 /////////////////////////
  76.                 TextFileLoader.GetTokenString("specialpath", &strPathName);
  77.                 /////////////////////////
  78.  
  79.                 DWORD dwShapeIndex;
  80.                 if (!TextFileLoader.GetTokenDoubleWord("shapeindex", &dwShapeIndex))
  81.                 {
  82.                     continue;
  83.                 }
  84.  
  85.                 // LOCAL_PATH_SUPPORT
  86.                 std::string strModel;
  87.                 if (TextFileLoader.GetTokenString("model", &strModel))
  88.                 {
  89.                     SetShapeModel(dwShapeIndex, (strPathName + strModel).c_str());
  90.                 }
  91.                 else
  92.                 {
  93.                     if (!TextFileLoader.GetTokenString("local_model", &strModel))
  94.                         continue;
  95.  
  96.                     SetShapeModel(dwShapeIndex, strModel.c_str());
  97.                 }
  98.                 // END_OF_LOCAL_PATH_SUPPORT
  99.  
  100.                 std::string strSourceSkin;
  101.                 std::string strTargetSkin;
  102.                 #ifdef ENABLE_SKIN_EXTENDED
  103.                 constexpr auto minSkinExtension = 2;
  104.                 constexpr auto maxSkinExtension = 9;
  105.                 static char __szSourceSkin[10+6+2+1];
  106.                 static char __szTargetSkin[10+6+2+1];
  107.                 #endif
  108.  
  109.                 // LOCAL_PATH_SUPPORT
  110.                 if (TextFileLoader.GetTokenString("local_sourceskin", &strSourceSkin) &&
  111.                     TextFileLoader.GetTokenString("local_targetskin", &strTargetSkin))
  112.                 {
  113.                     AppendShapeSkin(dwShapeIndex, 0, strSourceSkin.c_str(), strTargetSkin.c_str());
  114.                 }
  115.                 #ifdef ENABLE_SKIN_EXTENDED
  116.                 for (auto j=minSkinExtension; j<=maxSkinExtension; j++)
  117.                 {
  118.                     _snprintf(__szSourceSkin, sizeof(__szSourceSkin), "local_sourceskin%d", j);
  119.                     _snprintf(__szTargetSkin, sizeof(__szTargetSkin), "local_targetskin%d", j);
  120.                     if (TextFileLoader.GetTokenString(__szSourceSkin, &strSourceSkin) &&
  121.                         TextFileLoader.GetTokenString(__szTargetSkin, &strTargetSkin))
  122.                     {
  123.                         AppendShapeSkin(dwShapeIndex, 0, __szSourceSkin, __szTargetSkin);
  124.                     }
  125.                 }
  126.                 #endif
  127.                 // END_OF_LOCAL_PATH_SUPPORT
  128.  
  129.                 if (TextFileLoader.GetTokenString("sourceskin", &strSourceSkin) &&
  130.                     TextFileLoader.GetTokenString("targetskin", &strTargetSkin))
  131.                 {
  132.                     AppendShapeSkin(dwShapeIndex, 0, (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str());
  133.                 }
  134.                 #ifdef ENABLE_SKIN_EXTENDED
  135.                 for (auto j=minSkinExtension; j<=maxSkinExtension; j++)
  136.                 {
  137.                     _snprintf(__szSourceSkin, sizeof(__szSourceSkin), "sourceskin%d", j);
  138.                     _snprintf(__szTargetSkin, sizeof(__szTargetSkin), "targetskin%d", j);
  139.                     if (TextFileLoader.GetTokenString(__szSourceSkin, &strSourceSkin) &&
  140.                         TextFileLoader.GetTokenString(__szTargetSkin, &strTargetSkin))
  141.                     {
  142.                         AppendShapeSkin(dwShapeIndex, 0, (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str());
  143.                     }
  144.                 }
  145.                 #else
  146.                     if (TextFileLoader.GetTokenString("sourceskin2", &strSourceSkin) &&
  147.                         TextFileLoader.GetTokenString("targetskin2", &strTargetSkin))
  148.                     {
  149.                         AppendShapeSkin(dwShapeIndex, 0, (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str());
  150.                     }
  151.                 #endif
  152.                 TextFileLoader.SetParentNode();
  153.             }
  154.         }
  155.  
  156.         TextFileLoader.SetParentNode();
  157.     }
  158.  
  159.     if (TextFileLoader.SetChildNode("hairdata"))
  160.     {
  161.         std::string strPathName;
  162.         DWORD dwHairDataCount = 0;
  163.         if (TextFileLoader.GetTokenString("pathname", &strPathName) &&
  164.             TextFileLoader.GetTokenDoubleWord("hairdatacount", &dwHairDataCount))
  165.         {
  166.             for (DWORD i = 0; i < dwHairDataCount; ++i)
  167.             {
  168.                 if (!TextFileLoader.SetChildNode("hairdata", i))
  169.                 {
  170.                     continue;
  171.                 }
  172.  
  173.                 /////////////////////////
  174.                 TextFileLoader.GetTokenString("specialpath", &strPathName);
  175.                 /////////////////////////
  176.  
  177.                 DWORD dwShapeIndex;
  178.                 if (!TextFileLoader.GetTokenDoubleWord("hairindex", &dwShapeIndex))
  179.                 {
  180.                     continue;
  181.                 }
  182.  
  183.                 std::string strModel;
  184.                 std::string strSourceSkin;
  185.                 std::string strTargetSkin;
  186. #ifdef ENABLE_SKIN_EXTENDED
  187.                 constexpr auto minSkinExtension = 2;
  188.                 constexpr auto maxSkinExtension = 9;
  189.                 static char __szSourceSkin[10 + 6 + 2 + 1];
  190.                 static char __szTargetSkin[10 + 6 + 2 + 1];
  191. #endif
  192.                 if (TextFileLoader.GetTokenString("model", &strModel) &&
  193.                     TextFileLoader.GetTokenString("sourceskin", &strSourceSkin) &&
  194.                     TextFileLoader.GetTokenString("targetskin", &strTargetSkin))
  195.                 {
  196.                     SetHairSkin(dwShapeIndex, 0, (strPathName + strModel).c_str(), (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str());
  197.                 }
  198. #ifdef ENABLE_SKIN_EXTENDED
  199.                 for (auto j = minSkinExtension; j <= maxSkinExtension; j++)
  200.                 {
  201.                     _snprintf(__szSourceSkin, sizeof(__szSourceSkin), "sourceskin%d", j);
  202.                     _snprintf(__szTargetSkin, sizeof(__szTargetSkin), "targetskin%d", j);
  203.                     if (TextFileLoader.GetTokenString("model", &strModel) &&
  204.                         TextFileLoader.GetTokenString(__szSourceSkin, &strSourceSkin) &&
  205.                         TextFileLoader.GetTokenString(__szTargetSkin, & strTargetSkin))
  206.                         {
  207.                             SetHairSkin(dwShapeIndex, 0, (strPathName + strModel).c_str(), (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str());
  208.                         }
  209.                 }
  210.  
  211.                 if (TextFileLoader.GetTokenString("local_model", &strModel) &&
  212.                     TextFileLoader.GetTokenString("local_sourceskin", &strSourceSkin) &&
  213.                     TextFileLoader.GetTokenString("local_targetskin", &strTargetSkin))
  214.                 {
  215.                     SetHairSkin(dwShapeIndex, 0, strModel.c_str(), strSourceSkin.c_str(), strTargetSkin.c_str());
  216.                 }
  217. #endif
  218.                 TextFileLoader.SetParentNode();
  219.             }
  220.         }
  221.  
  222.         TextFileLoader.SetParentNode();
  223.     }
  224.  
  225.     if (TextFileLoader.SetChildNode("attachingdata"))
  226.     {
  227.         if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector))
  228.             return FALSE;
  229.  
  230.         TextFileLoader.SetParentNode();
  231.     }
  232.  
  233.     return TRUE;
  234. }
Add Comment
Please, Sign In to add comment