ActiveModsInSaveList.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * ActiveModsInSaveList.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "ModVerificationInfo.h"
  12. VCMI_LIB_NAMESPACE_BEGIN
  13. class ActiveModsInSaveList
  14. {
  15. std::vector<TModID> getActiveGameplayAffectingMods();
  16. ModVerificationInfo getVerificationInfo(TModID mod);
  17. /// Checks whether provided mod list is compatible with current VLC and throws on failure
  18. void verifyActiveMods(const std::map<TModID, ModVerificationInfo> & modList);
  19. public:
  20. template <typename Handler> void serialize(Handler &h)
  21. {
  22. if(h.saving)
  23. {
  24. std::vector<TModID> activeMods = getActiveGameplayAffectingMods();
  25. h & activeMods;
  26. for(const auto & m : activeMods)
  27. {
  28. ModVerificationInfo info = getVerificationInfo(m);
  29. h & info;
  30. }
  31. }
  32. else
  33. {
  34. std::vector<TModID> saveActiveMods;
  35. h & saveActiveMods;
  36. std::map<TModID, ModVerificationInfo> saveModInfos;
  37. for(int i = 0; i < saveActiveMods.size(); ++i)
  38. {
  39. ModVerificationInfo data;
  40. h & saveModInfos[saveActiveMods[i]];
  41. }
  42. verifyActiveMods(saveModInfos);
  43. }
  44. }
  45. };
  46. VCMI_LIB_NAMESPACE_END