CampaignData.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. //===========================================================================//
  2. // Copyright (C) Microsoft Corporation. All rights reserved. //
  3. //===========================================================================//
  4. #include "StdAfx.h"
  5. #include "CampaignData.h"
  6. #include "EString.h"
  7. #include "ECharString.h"
  8. #include "assert.h"
  9. static long sReadIdBoolean(FitIniFile &missionFile, const char *varName, bool &value) {
  10. long result = 0;
  11. bool tmpBool;
  12. result = missionFile.readIdBoolean((char *)varName, tmpBool);
  13. if (NO_ERR != result) {
  14. //assert(false);
  15. } else {
  16. value = tmpBool;
  17. }
  18. return result;
  19. }
  20. static long sReadIdInteger(FitIniFile &missionFile, const char *varName, int &value) {
  21. long result = 0;
  22. long tmpLong;
  23. result = missionFile.readIdLong((char *)varName, tmpLong);
  24. if (NO_ERR != result) {
  25. //assert(false);
  26. } else {
  27. value = tmpLong;
  28. }
  29. return result;
  30. }
  31. static long sReadIdString(FitIniFile &missionFile, const char *varName, CString &CStr) {
  32. long result = 0;
  33. char buffer[2001/*buffer size*/]; buffer[0] = '\0';
  34. result = missionFile.readIdString((char *)varName, buffer, 2001/*buffer size*/ - 1);
  35. if (NO_ERR != result) {
  36. //assert(false);
  37. } else {
  38. CStr = buffer;
  39. }
  40. return result;
  41. }
  42. CMissionData::CMissionData() {
  43. m_PurchaseFile = "purchase_All";
  44. m_LogisticsEnabled = true;
  45. m_IsMandatory = true;
  46. m_PilotPromotionEnabled = true;
  47. m_PurchasingEnabled = false;
  48. m_SalvageEnabled = true;
  49. m_MissionSelectionEnabled = true;
  50. }
  51. bool CMissionData::operator==(const CMissionData &rhs) const {
  52. if ((m_MissionFile == rhs.m_MissionFile)
  53. && (m_PurchaseFile == rhs.m_PurchaseFile)
  54. && (m_LogisticsEnabled == rhs.m_LogisticsEnabled)
  55. && (m_IsMandatory == rhs.m_IsMandatory)
  56. && (m_PilotPromotionEnabled == rhs.m_PilotPromotionEnabled)
  57. && (m_PurchasingEnabled == rhs.m_PurchasingEnabled)
  58. && (m_MissionSelectionEnabled == rhs.m_MissionSelectionEnabled)
  59. && (m_SalvageEnabled == rhs.m_SalvageEnabled)) {
  60. return true;
  61. } else {
  62. return false;
  63. }
  64. }
  65. bool CMissionData::Save(FitIniFile &fitFile) {
  66. fitFile.writeIdString( "FileName", m_MissionFile.GetBuffer(0));
  67. fitFile.writeIdBoolean("Mandatory", m_IsMandatory);
  68. fitFile.writeIdString( "PurchaseFile", m_PurchaseFile.GetBuffer(0));
  69. fitFile.writeIdBoolean("PlayLogistics", m_LogisticsEnabled);
  70. fitFile.writeIdBoolean("PlaySalvage", m_SalvageEnabled);
  71. fitFile.writeIdBoolean("PlayPilotPromotion", m_PilotPromotionEnabled);
  72. fitFile.writeIdBoolean("PlayPurchasing", m_PurchasingEnabled);
  73. fitFile.writeIdBoolean( "PlaySelection", m_MissionSelectionEnabled );
  74. return true;
  75. }
  76. bool CMissionData::Read(FitIniFile &fitFile) {
  77. int result;
  78. result = sReadIdString(fitFile, "FileName", m_MissionFile);
  79. result = sReadIdBoolean(fitFile, "Mandatory", m_IsMandatory);
  80. result = sReadIdString(fitFile, "PurchaseFile", m_PurchaseFile);
  81. result = sReadIdBoolean(fitFile, "PlayLogistics", m_LogisticsEnabled);
  82. result = sReadIdBoolean(fitFile, "PlaySalvage", m_SalvageEnabled);
  83. result = sReadIdBoolean(fitFile, "PlayPilotPromotion", m_PilotPromotionEnabled);
  84. result = sReadIdBoolean(fitFile, "PlayPurchasing", m_PurchasingEnabled);
  85. result = sReadIdBoolean( fitFile, "PlaySelection", m_MissionSelectionEnabled );
  86. return true;
  87. }
  88. CGroupData::CGroupData() {
  89. m_OperationFile = "mcl_cm_op_sample";
  90. m_NumMissionsToComplete = 1;
  91. m_TuneNumber = 0;
  92. }
  93. bool CGroupData::operator==(const CGroupData &rhs) const {
  94. if ((m_MissionList == rhs.m_MissionList)
  95. && (m_OperationFile == rhs.m_OperationFile)
  96. && (m_PreVideoFile == rhs.m_PreVideoFile)
  97. && (m_VideoFile == rhs.m_VideoFile)
  98. && (m_Label == rhs.m_Label)
  99. && (m_NumMissionsToComplete == rhs.m_NumMissionsToComplete)
  100. && (m_TuneNumber == rhs.m_TuneNumber)
  101. && (m_ABLScript == rhs.m_ABLScript)) {
  102. return true;
  103. } else {
  104. return false;
  105. }
  106. }
  107. bool CGroupData::Save(FitIniFile &fitFile, const char *groupName) {
  108. fitFile.writeIdString( "Label", m_Label.GetBuffer(0));
  109. fitFile.writeIdLong("NumberToComplete", m_NumMissionsToComplete);
  110. fitFile.writeIdString( "OperationFile", m_OperationFile.GetBuffer(0));
  111. fitFile.writeIdString( "Video", m_VideoFile.GetBuffer(0));
  112. fitFile.writeIdString( "PreVideo", m_PreVideoFile.GetBuffer(0));
  113. fitFile.writeIdLong("Tune", m_TuneNumber);
  114. fitFile.writeIdLong("MissionCount", m_MissionList.Count());
  115. if (!m_ABLScript.IsEmpty()) {
  116. fitFile.writeIdString( "ABLScript", m_ABLScript.GetBuffer(0));
  117. }
  118. CMissionList::EIterator it;
  119. int index;
  120. for (it = m_MissionList.Begin(), index = 0; !it.IsDone(); it++, index+=1) {
  121. ECharString blockName;
  122. blockName.Format("%sMission%d", groupName, index);
  123. fitFile.writeBlock(blockName.Data());
  124. (*it).Save(fitFile);
  125. }
  126. return true;
  127. }
  128. bool CGroupData::Read(FitIniFile &fitFile, const char *groupName) {
  129. int result;
  130. result = sReadIdString(fitFile, "Label", m_Label);
  131. result = sReadIdInteger(fitFile, "NumberToComplete", m_NumMissionsToComplete);
  132. result = sReadIdString(fitFile, "OperationFile", m_OperationFile);
  133. result = sReadIdString(fitFile, "Video", m_VideoFile);
  134. result = sReadIdString(fitFile, "PreVideo", m_PreVideoFile);
  135. result = sReadIdInteger(fitFile, "Tune", m_TuneNumber);
  136. result = sReadIdString(fitFile, "ABLScript", m_ABLScript);
  137. int missionCount = 0;
  138. result = sReadIdInteger(fitFile, "MissionCount", missionCount);
  139. if (NO_ERR != result) { return false; }
  140. int index;
  141. for (index = 0; missionCount > index; index+=1) {
  142. ECharString blockName;
  143. blockName.Format("%sMission%d", groupName, index);
  144. result = fitFile.seekBlock(blockName.Data());
  145. if (NO_ERR != result) { assert(false); continue; }
  146. CMissionData missionData;
  147. bool bresult = missionData.Read(fitFile);
  148. if (true != bresult) { assert(false); continue; }
  149. m_MissionList.Append(missionData);
  150. }
  151. return true;
  152. }
  153. CCampaignData::CCampaignData() {
  154. m_NameUseResourceString = false;
  155. m_NameResourceStringID = 0;
  156. m_CBills = 0;
  157. }
  158. bool CCampaignData::operator==(const CCampaignData &rhs) const {
  159. if ((m_GroupList == rhs.m_GroupList)
  160. && (m_Name == rhs.m_Name)
  161. && (m_NameUseResourceString == rhs.m_NameUseResourceString)
  162. && (m_NameResourceStringID == rhs.m_NameResourceStringID)
  163. && (m_CBills == rhs.m_CBills)
  164. && (m_FinalVideo == rhs.m_FinalVideo)) {
  165. return true;
  166. } else {
  167. return false;
  168. }
  169. }
  170. bool CCampaignData::Save(CString pathName) {
  171. FitIniFile fitFile;
  172. int result = fitFile.create(pathName.GetBuffer(0));
  173. if (result != NO_ERR)
  174. {
  175. return false;
  176. }
  177. fitFile.writeBlock("Campaign");
  178. fitFile.writeIdBoolean("NameUseResourceString", m_NameUseResourceString);
  179. if (!m_NameUseResourceString) {
  180. fitFile.writeIdString("CampaignName", m_Name.GetBuffer(0));
  181. } else {
  182. fitFile.writeIdLong("NameID", m_NameResourceStringID);
  183. }
  184. fitFile.writeIdLong("CBills", m_CBills);
  185. fitFile.writeIdString( "FinalVideo", m_FinalVideo.GetBuffer(0));
  186. fitFile.writeIdLong("GroupCount", m_GroupList.Count());
  187. CGroupList::EIterator it;
  188. int index;
  189. for (it = m_GroupList.Begin(), index = 0; !it.IsDone(); it++, index+=1) {
  190. ECharString blockName;
  191. blockName.Format("Group%d", index);
  192. fitFile.writeBlock(blockName.Data());
  193. (*it).Save(fitFile, blockName.Data());
  194. }
  195. fitFile.close();
  196. return true;
  197. }
  198. bool CCampaignData::Read(CString pathName) {
  199. FitIniFile fitFile;
  200. int result = fitFile.open(pathName.GetBuffer(0));
  201. if (NO_ERR != result) { assert(false); return false; }
  202. result = fitFile.seekBlock("Campaign");
  203. if (NO_ERR != result) { assert(false); }
  204. result = sReadIdString(fitFile, "CampaignName", m_Name);
  205. if (NO_ERR == result) { m_NameUseResourceString = false; }
  206. result = sReadIdInteger(fitFile, "NameID", m_NameResourceStringID);
  207. if (NO_ERR == result) { m_NameUseResourceString = true; }
  208. result = sReadIdBoolean(fitFile, "NameUseResourceString", m_NameUseResourceString);
  209. result = sReadIdInteger(fitFile, "CBills", m_CBills);
  210. result = sReadIdString(fitFile, "FinalVideo", m_FinalVideo);
  211. int groupCount = 0;
  212. result = sReadIdInteger(fitFile, "GroupCount", groupCount);
  213. if (NO_ERR != result) { return false; }
  214. int index;
  215. for (index = 0; groupCount > index; index+=1) {
  216. ECharString blockName;
  217. blockName.Format("Group%d", index);
  218. result = fitFile.seekBlock(blockName.Data());
  219. if (NO_ERR != result) { assert(false); continue; }
  220. CGroupData groupData;
  221. bool bresult = groupData.Read(fitFile, blockName.Data());
  222. if (true != bresult) { assert(false); continue; }
  223. m_GroupList.Append(groupData);
  224. }
  225. fitFile.close();
  226. return true;
  227. }