1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-12-01 23:12:49 +02:00

Mod compatibility check is now in a separate class and not part of

ModHandler
This commit is contained in:
Ivan Savenko
2023-11-07 18:32:40 +02:00
parent a61ceaf2a7
commit eb167d94a6
15 changed files with 238 additions and 152 deletions

View File

@@ -9,21 +9,22 @@
*/
#pragma once
#include "CModInfo.h"
VCMI_LIB_NAMESPACE_BEGIN
class CModHandler;
class CModIndentifier;
class CModInfo;
struct CModVersion;
class JsonNode;
class IHandlerBase;
class CIdentifierStorage;
class CContentHandler;
struct ModVerificationInfo;
class ResourcePath;
using TModID = std::string;
class DLL_LINKAGE CModHandler : boost::noncopyable
class DLL_LINKAGE CModHandler final : boost::noncopyable
{
std::map <TModID, CModInfo> allMods;
std::vector <TModID> activeMods;//active mods, in order in which they were loaded
@@ -50,9 +51,6 @@ class DLL_LINKAGE CModHandler : boost::noncopyable
CModVersion getModVersion(TModID modName) const;
/// Attempt to set active mods according to provided list of mods from save, throws on failure
void trySetActiveMods(const std::vector<std::pair<TModID, CModInfo::VerificationInfo>> & modList);
public:
std::shared_ptr<CContentHandler> content; //(!)Do not serialize FIXME: make private
@@ -79,32 +77,7 @@ public:
void afterLoad(bool onlyEssential);
CModHandler();
virtual ~CModHandler();
template <typename Handler> void serialize(Handler &h, const int version)
{
if(h.saving)
{
h & activeMods;
for(const auto & m : activeMods)
h & getModInfo(m).getVerificationInfo();
}
else
{
loadMods();
std::vector<TModID> saveActiveMods;
h & saveActiveMods;
std::vector<std::pair<TModID, CModInfo::VerificationInfo>> saveModInfos(saveActiveMods.size());
for(int i = 0; i < saveActiveMods.size(); ++i)
{
saveModInfos[i].first = saveActiveMods[i];
h & saveModInfos[i].second;
}
trySetActiveMods(saveModInfos);
}
}
~CModHandler();
};
VCMI_LIB_NAMESPACE_END