浏览代码

code review

Laserlicht 2 年之前
父节点
当前提交
5fd2eee3e8
共有 6 个文件被更改,包括 25 次插入24 次删除
  1. 1 1
      client/CServerHandler.cpp
  2. 5 2
      client/mainmenu/CCampaignScreen.cpp
  3. 12 14
      lib/CConfigHandler.cpp
  4. 4 4
      lib/CConfigHandler.h
  5. 2 2
      lib/VCMI_Lib.cpp
  6. 1 1
      lib/campaign/CampaignState.h

+ 1 - 1
client/CServerHandler.cpp

@@ -685,7 +685,7 @@ void CServerHandler::startCampaignScenario(std::shared_ptr<CampaignState> cs)
 		{
 			if(ourCampaign->campaignSet != "")
 			{
-				Settings entry = persistent.write["campaign"][ourCampaign->campaignSet][ourCampaign->getFilename()]["completed"];
+				Settings entry = persistentStorage.write["completedCampaigns"][ourCampaign->getFilename()];
 				entry->Bool() = true;
 			}
 

+ 5 - 2
client/mainmenu/CCampaignScreen.cpp

@@ -107,7 +107,7 @@ CCampaignScreen::CCampaignButton::CCampaignButton(const JsonNode & config, const
 	auto header = CampaignHandler::getHeader(campFile);
 	hoverText = header->getName();
 
-	if(persistent["campaign"][campaignSet][header->getFilename()]["completed"].Bool())
+	if(persistentStorage["completedCampaigns"][header->getFilename()].Bool())
 		status = CCampaignScreen::COMPLETED;
 
 	for(const JsonNode & node : parentConfig[campaignSet]["items"].Vector())
@@ -115,11 +115,14 @@ CCampaignScreen::CCampaignButton::CCampaignButton(const JsonNode & config, const
 		for(const JsonNode & requirement : config["requires"].Vector())
 		{
 			if(node["id"].Integer() == requirement.Integer())
-				if(!persistent["campaign"][campaignSet][node["file"].String()]["completed"].Bool())
+				if(!persistentStorage["completedCampaigns"][node["file"].String()].Bool())
 					status = CCampaignScreen::DISABLED;
 		}
 	}
 
+	if(persistentStorage["unlockAllCampaigns"].Bool())
+		status = CCampaignScreen::ENABLED;
+
 	if(status != CCampaignScreen::DISABLED)
 	{
 		addUsedEvents(LCLICK | HOVER);

+ 12 - 14
lib/CConfigHandler.cpp

@@ -17,7 +17,7 @@
 VCMI_LIB_NAMESPACE_BEGIN
 
 SettingsStorage settings;
-SettingsStorage persistent;
+SettingsStorage persistentStorage;
 
 template<typename Accessor>
 SettingsStorage::NodeAccessor<Accessor>::NodeAccessor(SettingsStorage & _parent, std::vector<std::string> _path):
@@ -54,25 +54,23 @@ SettingsStorage::SettingsStorage():
 {
 }
 
-void SettingsStorage::init(bool p)
+void SettingsStorage::init(const std::string & dataFilename, const std::string & schema)
 {
-	persistentStorage = p;
-	cfgName = "config/settings.json";
-	if(persistentStorage)
-		cfgName = "config/persistent.json";
+	this->dataFilename = dataFilename;
+	this->schema = schema;
 
-	JsonPath confName = JsonPath::builtin(cfgName);
+	JsonPath confName = JsonPath::builtin(dataFilename);
 
 	JsonUtils::assembleFromFiles(confName.getOriginalName()).swap(config);
 
 	// Probably new install. Create config file to save settings to
 	if (!CResourceHandler::get("local")->existsResource(confName))
-		CResourceHandler::get("local")->createResource(cfgName);
+		CResourceHandler::get("local")->createResource(dataFilename);
 
-	if(!persistentStorage)
+	if(schema != "")
 	{
-		JsonUtils::maximize(config, "vcmi:settings");
-		JsonUtils::validate(config, "vcmi:settings", "settings");
+		JsonUtils::maximize(config, schema);
+		JsonUtils::validate(config, schema, "settings");
 	}
 }
 
@@ -83,10 +81,10 @@ void SettingsStorage::invalidateNode(const std::vector<std::string> &changedPath
 
 	JsonNode savedConf = config;
 	savedConf.Struct().erase("session");
-	if(!persistentStorage)
-		JsonUtils::minimize(savedConf, "vcmi:settings");
+	if(schema != "")
+		JsonUtils::minimize(savedConf, schema);
 
-	std::fstream file(CResourceHandler::get()->getResourceName(JsonPath::builtin(cfgName))->c_str(), std::ofstream::out | std::ofstream::trunc);
+	std::fstream file(CResourceHandler::get()->getResourceName(JsonPath::builtin(dataFilename))->c_str(), std::ofstream::out | std::ofstream::trunc);
 	file << savedConf.toJson();
 }
 

+ 4 - 4
lib/CConfigHandler.h

@@ -35,8 +35,8 @@ class DLL_LINKAGE SettingsStorage
 	std::set<SettingsListener*> listeners;
 	JsonNode config;
 
-	bool persistentStorage;
-	std::string cfgName;
+	std::string dataFilename;
+	std::string schema;
 
 	JsonNode & getNode(const std::vector<std::string> & path);
 
@@ -48,7 +48,7 @@ class DLL_LINKAGE SettingsStorage
 public:
 	// Initialize config structure
 	SettingsStorage();
-	void init(bool persistent = false);
+	void init(const std::string & dataFilename, const std::string & schema);
 	
 	// Get write access to config node at path
 	const NodeAccessor<Settings> write;
@@ -116,6 +116,6 @@ public:
 };
 
 extern DLL_LINKAGE SettingsStorage settings;
-extern DLL_LINKAGE SettingsStorage persistent;
+extern DLL_LINKAGE SettingsStorage persistentStorage;
 
 VCMI_LIB_NAMESPACE_END

+ 2 - 2
lib/VCMI_Lib.cpp

@@ -52,8 +52,8 @@ DLL_LINKAGE void preinitDLL(CConsoleHandler * Console, bool onlyEssential, bool
 	console = Console;
 	VLC = new LibClasses();
 	VLC->loadFilesystem(extractArchives);
-	settings.init();
-	persistent.init(true);
+	settings.init("config/settings.json", "vcmi:settings");
+	persistentStorage.init("config/persistentStorage.json", "");
 	VLC->loadModFilesystem(onlyEssential);
 
 }

+ 1 - 1
lib/campaign/CampaignState.h

@@ -293,7 +293,7 @@ public:
 	static JsonNode crossoverSerialize(CGHeroInstance * hero);
 	static CGHeroInstance * crossoverDeserialize(const JsonNode & node, CMap * map);
 
-	std::string campaignSet = "";
+	std::string campaignSet;
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{