Clone of PhatAC @ https://github.com/floaterxk/PhatAC

TurbineData.cpp 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "StdAfx.h"
  2. #include "Globals.h"
  3. //
  4. #include "TurbineData.h"
  5. #include "TurbineObject.h"
  6. TurbineData::TurbineData()
  7. {
  8. m_dwVersion = 0;
  9. m_mFileInfo.clear();
  10. m_mObjects.clear();
  11. m_strPath = csprintf("%s\\Data\\", g_pGlobals->GetGameDirectory());
  12. }
  13. TurbineData::~TurbineData()
  14. {
  15. CloseFile();
  16. }
  17. void TurbineData::FileFoundCallback(void *This, DWORD dwFileID, BTreeEntry *pEntry)
  18. {
  19. ((TurbineData *)This)->FileFoundCallbackInternal(dwFileID, pEntry);
  20. }
  21. void TurbineData::FileFoundCallbackInternal(DWORD dwFileID, BTreeEntry *pEntry)
  22. {
  23. FILEINFO info;
  24. info.dwPosition = pEntry->BlockHead;
  25. info.dwLength = pEntry->Length;
  26. m_mFileInfo[dwFileID] = info;
  27. }
  28. void TurbineData::LoadFile(const char* szFile)
  29. {
  30. LOG(Temp, Normal, "Loading %s.. ", szFile);
  31. m_strFile = szFile;
  32. std::string fullpath = m_strPath + "\\" + szFile;
  33. m_pDATDisk = new DATDisk(fullpath.c_str());
  34. if (!m_pDATDisk->Open())
  35. {
  36. LOG(Temp, Normal, "Error loading file %s!\n", fullpath.c_str());
  37. SafeDelete(m_pDATDisk);
  38. }
  39. else
  40. {
  41. LOG(Temp, Normal, "mapping.. ");
  42. m_pDATDisk->FindFileIDsWithinRange(0, (DWORD)-1, FileFoundCallback, NULL, this);
  43. LOG(Temp, Normal, "done!\n");
  44. #ifdef PRE_TOD_DATA_FILES
  45. #else
  46. LOG(Temp, Normal, "%s: version %u, %u entries.\n", szFile, m_pDATDisk->GetHeader()->VersionMinor, m_mFileInfo.size());
  47. #endif
  48. }
  49. }
  50. void TurbineData::CloseFile()
  51. {
  52. SafeDelete(m_pDATDisk);
  53. //clean up object pool
  54. for (OBJECTMAP::iterator i = m_mObjects.begin(); i != m_mObjects.end(); ++i)
  55. SafeDelete(i->second);
  56. m_mObjects.clear();
  57. m_mFileInfo.clear();
  58. }
  59. BOOL TurbineData::FileExists(DWORD dwID)
  60. {
  61. FILEMAP::iterator i = m_mFileInfo.find(dwID);
  62. return (i != m_mFileInfo.end()) ? TRUE : FALSE;
  63. }
  64. TURBINEFILE *TurbineData::GetFile(DWORD dwID)
  65. {
  66. DATEntry entry;
  67. if (m_pDATDisk && m_pDATDisk->GetData(dwID, &entry))
  68. {
  69. return new TurbineFile(dwID, entry.Data, entry.Length);
  70. }
  71. return NULL;
  72. }
  73. DWORD TurbineData::GetFileCount()
  74. {
  75. return (DWORD)m_mFileInfo.size();
  76. }
  77. DWORD TurbineData::GetVersion()
  78. {
  79. return m_dwVersion;
  80. }
  81. FILEMAP *TurbineData::GetFiles()
  82. {
  83. return &m_mFileInfo;
  84. }
  85. void TurbineData::Think()
  86. {
  87. }
  88. void TurbineData::InsertObject(DWORD dwID, TURBINEOBJECT* pObject)
  89. {
  90. m_mObjects[dwID] = pObject;
  91. }
  92. TURBINEOBJECT *TurbineData::FindObject(DWORD dwFileID)
  93. {
  94. OBJECTMAP::iterator it = m_mObjects.find(dwFileID);
  95. if (it != m_mObjects.end())
  96. return it->second;
  97. else
  98. return NULL;
  99. }