Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.88 KB | None | 0 0
  1. bool CRaceMotionData::LoadMotionData(const char * c_szFileName)
  2. {
  3.     const float c_fFrameTime = 1.0f / g_fGameFPS;
  4.  
  5.     CTextFileLoader* pkTextFileLoader=CTextFileLoader::Cache(c_szFileName);
  6.     if (!pkTextFileLoader)
  7.         return false;
  8.  
  9.     CTextFileLoader& rkTextFileLoader=*pkTextFileLoader;
  10.  
  11.     if (rkTextFileLoader.IsEmpty())
  12.         return false;
  13.  
  14.     rkTextFileLoader.SetTop();
  15.  
  16.     if (!rkTextFileLoader.GetTokenString("motionfilename", &m_strMotionFileName))
  17.         return false;
  18.  
  19.     if (!rkTextFileLoader.GetTokenFloat("motionduration", &m_fMotionDuration))
  20.         return false;
  21.  
  22.     CTokenVector * pTokenVector;
  23.  
  24.     if (rkTextFileLoader.GetTokenVector("accumulation", &pTokenVector))
  25.     {
  26.         if (pTokenVector->size() != 3)
  27.         {
  28.             TraceError("CRaceMotioNData::LoadMotionData : syntax error on accumulation, vector size %d", pTokenVector->size());
  29.             return false;
  30.         }
  31.  
  32.         TPixelPosition pos(atof(pTokenVector->at(0).c_str()),
  33.                            atof(pTokenVector->at(1).c_str()),
  34.                            atof(pTokenVector->at(2).c_str()));
  35.  
  36.         SetAccumulationPosition(pos);
  37.     }
  38.  
  39.     std::string strNodeName;
  40.     for (DWORD i = 0; i < rkTextFileLoader.GetChildNodeCount(); ++i)
  41.     {
  42.         CTextFileLoader::CGotoChild GotoChild(&rkTextFileLoader, i);
  43.  
  44.         rkTextFileLoader.GetCurrentNodeName(&strNodeName);
  45.  
  46.         if (0 == strNodeName.compare("comboinputdata"))
  47.         {
  48.             m_isComboMotion = TRUE;
  49.  
  50.             if (!rkTextFileLoader.GetTokenFloat("preinputtime", &m_ComboInputData.fInputStartTime))
  51.                 return false;
  52.             if (!rkTextFileLoader.GetTokenFloat("directinputtime", &m_ComboInputData.fNextComboTime))
  53.                 return false;
  54.             if (!rkTextFileLoader.GetTokenFloat("inputlimittime", &m_ComboInputData.fInputEndTime))
  55.                 return false;
  56.         }
  57.         else if (0 == strNodeName.compare("attackingdata"))
  58.         {
  59.             m_isAttackingMotion = TRUE;
  60.  
  61.             if (!NRaceData::LoadMotionAttackData(rkTextFileLoader, &m_MotionAttackData))
  62.                 return false;
  63.         }
  64.         else if (0 == strNodeName.compare("loopdata"))
  65.         {
  66.             m_isLoopMotion = TRUE;
  67.             if (!rkTextFileLoader.GetTokenInteger("motionloopcount", &m_iLoopCount))
  68.             {
  69.                 m_iLoopCount = -1;
  70.             }
  71.             if (!rkTextFileLoader.GetTokenInteger("loopcancelenable", &m_bCancelEnableSkill))
  72.             {
  73.                 m_bCancelEnableSkill = FALSE;
  74.             }
  75.             if (!rkTextFileLoader.GetTokenFloat("loopstarttime", &m_fLoopStartTime))
  76.                 return false;
  77.             if (!rkTextFileLoader.GetTokenFloat("loopendtime", &m_fLoopEndTime))
  78.                 return false;
  79.         }
  80.         else if (0 == strNodeName.compare("motioneventdata"))
  81.         {
  82.             DWORD dwMotionEventDataCount;
  83.  
  84.             if (!rkTextFileLoader.GetTokenDoubleWord("motioneventdatacount", &dwMotionEventDataCount))
  85.                 continue;
  86.  
  87.             stl_wipe(m_MotionEventDataVector);
  88.  
  89.             m_MotionEventDataVector.resize(dwMotionEventDataCount, NULL);
  90.  
  91.             for (DWORD j = 0; j < m_MotionEventDataVector.size(); ++j)
  92.             {
  93.                 if (!rkTextFileLoader.SetChildNode("event", j))
  94.                     return false;
  95.  
  96.                 int iType;
  97.                 if (!rkTextFileLoader.GetTokenInteger("motioneventtype", &iType))
  98.                     return false;
  99.  
  100.                 TMotionEventData * pData = NULL;
  101.                 switch(iType)
  102.                 {
  103.                     case MOTION_EVENT_TYPE_FLY:
  104.                         pData = new TMotionFlyEventData;
  105.                         break;
  106.                     case MOTION_EVENT_TYPE_EFFECT:
  107.                         pData = new TMotionEffectEventData;
  108.                         break;
  109.                     case MOTION_EVENT_TYPE_SCREEN_WAVING:
  110.                         pData = new TScreenWavingEventData;
  111.                         break;
  112.                     case MOTION_EVENT_TYPE_SPECIAL_ATTACKING:
  113.                         pData = new TMotionAttackingEventData;
  114.                         m_hasSplashEvent = TRUE;
  115.                         break;
  116.                     case MOTION_EVENT_TYPE_SOUND:
  117.                         pData = new TMotionSoundEventData;
  118.                         break;
  119.                     case MOTION_EVENT_TYPE_CHARACTER_SHOW:
  120.                         pData = new TMotionCharacterShowEventData;
  121.                         break;
  122.                     case MOTION_EVENT_TYPE_CHARACTER_HIDE:
  123.                         pData = new TMotionCharacterHideEventData;
  124.                         break;
  125.                     case MOTION_EVENT_TYPE_WARP:
  126.                         pData = new TMotionWarpEventData;
  127.                         break;
  128.                     case MOTION_EVENT_TYPE_EFFECT_TO_TARGET:
  129.                         pData = new TMotionEffectToTargetEventData;
  130.                         break;
  131.                     default:
  132.                         assert(!" CRaceMotionData::LoadMotionData - Strange Event Type");
  133.                         return false;
  134.                         break;
  135.                 }
  136.                 m_MotionEventDataVector[j] = pData;
  137.                 m_MotionEventDataVector[j]->Load(rkTextFileLoader);
  138.                 m_MotionEventDataVector[j]->iType = iType;
  139.                 if (!rkTextFileLoader.GetTokenFloat("startingtime", &m_MotionEventDataVector[j]->fStartingTime))
  140.                     return false;
  141.  
  142.                 m_MotionEventDataVector[j]->dwFrame = (m_MotionEventDataVector[j]->fStartingTime / c_fFrameTime);
  143.  
  144.                 rkTextFileLoader.SetParentNode();
  145.             }
  146.         }
  147.     }
  148.  
  149.     std::string strSoundFileNameTemp=c_szFileName;
  150.     strSoundFileNameTemp = CFileNameHelper::NoExtension(strSoundFileNameTemp);
  151.     strSoundFileNameTemp+= ".mss";
  152.  
  153.     if (strSoundFileNameTemp.length() > 13)
  154.     {
  155.         const char * c_szHeader = &strSoundFileNameTemp[13];
  156.  
  157.         m_strSoundScriptDataFileName = "sound/";
  158.         m_strSoundScriptDataFileName += c_szHeader;
  159.  
  160.         LoadSoundScriptData(m_strSoundScriptDataFileName.c_str());
  161.     }
  162.  
  163.     return true;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement