瀏覽代碼

ResourceExtractor code moved to a static class.

krs 2 年之前
父節點
當前提交
c32cd190f2

+ 16 - 23
mapeditor/mainwindow.cpp

@@ -41,15 +41,8 @@
 #include "resourceExtractor/ResourceConverter.h"
 
 static CBasicLogConfigurator * logConfig;
-ExtractionOptions * extractionOptions; // All command line options for resource extractor
 
-ExtractionOptions::ExtractionOptions(const bool extractArchives, const bool splitDefs, const bool convertPcxToPng, const bool deleteOriginals) :
-	extractArchives(extractArchives),
-	splitDefs(splitDefs),
-	convertPcxToPng(convertPcxToPng),
-	deleteOriginals(deleteOriginals)
-{
-}
+ExtractionOptions extractionOptions;
 
 QJsonValue jsonFromPixmap(const QPixmap &p)
 {
@@ -118,10 +111,10 @@ void MainWindow::parseCommandLine()
 	if (!positionalArgs.isEmpty())
 		mapFilePath = positionalArgs.at(0);
 
-	extractionOptions =  new ExtractionOptions(parser.isSet("e"), parser.isSet("s"), parser.isSet("c"), parser.isSet("d"));
+	extractionOptions = {parser.isSet("e"), {parser.isSet("s"),	 parser.isSet("c"),	 parser.isSet("d")}};
 }
 
-MainWindow::MainWindow(QWidget *parent) :
+MainWindow::MainWindow(QWidget* parent) :
 	QMainWindow(parent),
 	ui(new Ui::MainWindow),
 	controller(this)
@@ -129,7 +122,7 @@ MainWindow::MainWindow(QWidget *parent) :
 	ui->setupUi(this);
 	loadUserSettings(); //For example window size
 	setTitle();
-	
+
 	// Set current working dir to executable folder.
 	// This is important on Mac for relative paths to work inside DMG.
 	QDir::setCurrent(QApplication::applicationDirPath());
@@ -144,39 +137,39 @@ MainWindow::MainWindow(QWidget *parent) :
 	logGlobal->info("The log file will be saved to %s", logPath);
 
 	//init
-	preinitDLL(::console, false, extractionOptions->extractArchives);
+	preinitDLL(::console, false, extractionOptions.extractArchives);
 	settings.init();
-	
+
 	// Initialize logging based on settings
 	logConfig->configure();
 	logGlobal->debug("settings = %s", settings.toJsonNode().toJson());
-	
+
 	// Some basic data validation to produce better error messages in cases of incorrect install
 	auto testFile = [](std::string filename, std::string message) -> bool
 	{
 		if (CResourceHandler::get()->existsResource(ResourceID(filename)))
 			return true;
-		
+
 		logGlobal->error("Error: %s was not found!", message);
 		return false;
 	};
-	
-	if(!testFile("DATA/HELP.TXT", "Heroes III data") ||
-	   !testFile("MODS/VCMI/MOD.JSON", "VCMI data"))
+
+	if (!testFile("DATA/HELP.TXT", "Heroes III data") ||
+		!testFile("MODS/VCMI/MOD.JSON", "VCMI data"))
 	{
 		QApplication::quit();
 	}
-	
+
 	conf.init();
 	logGlobal->info("Loading settings");
-	
+
 	init();
-	
+
 	graphics = new Graphics(); // should be before curh->init()
 	graphics->load();//must be after Content loading but should be in main thread
 
-	if (extractionOptions->extractArchives)
-		convertExtractedResourceFiles(extractionOptions->splitDefs, extractionOptions->convertPcxToPng, extractionOptions->deleteOriginals);
+	if (extractionOptions.extractArchives)
+		ResourceConverter::convertExtractedResourceFiles(extractionOptions.conversionOptions);
 	
 	ui->mapView->setScene(controller.scene(0));
 	ui->mapView->setController(&controller);

+ 0 - 10
mapeditor/mainwindow.h

@@ -148,13 +148,3 @@ private:
 	// command line options
 	QString mapFilePath;			// FilePath to the H3 or VCMI map to open
 };
-
-struct ExtractionOptions
-{
-	ExtractionOptions(const bool extractArchives, const bool splitDefs, const bool convertPcxToPng, const bool deleteOriginals);
-
-	bool extractArchives = false;	// extract original H3 archives into a separate folder
-	bool splitDefs = false;			// splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's
-	bool convertPcxToPng = false;	// converts single Images (found in Images folder) from .pcx to png.
-	bool deleteOriginals = false;	// delete original files, for the ones splitted / converted.
-};

+ 11 - 18
mapeditor/resourceExtractor/ResourceConverter.cpp

@@ -22,10 +22,16 @@
 #include "boost/filesystem/path.hpp"
 #include "boost/locale.hpp"
 
-namespace bfs = boost::filesystem;
+void ResourceConverter::convertExtractedResourceFiles(ConversionOptions conversionOptions)
+{
+	if (conversionOptions.splitDefs)
+		splitDefFiles(conversionOptions.deleteOriginals);
+
+	if (conversionOptions.convertPcxToPng)
+		doConvertPcxToPng(conversionOptions.deleteOriginals);
+}
 
-// converts all pcx files from /Images into PNG
-void doConvertPcxToPng(bool deleteOriginals)
+void ResourceConverter::doConvertPcxToPng(bool deleteOriginals)
 {
 	std::string filename;
 
@@ -61,8 +67,7 @@ void doConvertPcxToPng(bool deleteOriginals)
 	}
 }
 
-// splits a def file into individual parts and converts the output to PNG format
-void splitDefFile(const std::string & fileName, const bfs::path & spritesPath, bool deleteOriginals)
+void ResourceConverter::splitDefFile(const std::string & fileName, const bfs::path & spritesPath, bool deleteOriginals)
 {
 	if(CResourceHandler::get()->existsResource(ResourceID("SPRITES/" + fileName)))
 	{
@@ -77,22 +82,10 @@ void splitDefFile(const std::string & fileName, const bfs::path & spritesPath, b
 		logGlobal->error("Def File Split error! " + fileName);
 }
 
-// splits def files (TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44) so that faction resources are independent
-// (town creature portraits, hero army creature portraits, adventure map dwellings, small town icons, big town icons, 
-// hero speciality small icons, hero speciality large icons)
-void splitDefFiles(bool deleteOriginals)
+void ResourceConverter::splitDefFiles(bool deleteOriginals)
 {
 	bfs::path spritesPath = VCMIDirs::get().userExtractedPath() / "SPRITES";
 
 	for(std::string defFilename : {"TwCrPort.def", "CPRSMALL.def", "FlagPort.def", "ITPA.def", "ITPt.def", "Un32.def", "Un44.def"})
 		splitDefFile(defFilename, spritesPath, deleteOriginals);
-}
-
-void convertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals)
-{
-	if(splitDefs)
-		splitDefFiles(deleteOriginals);
-
-	if(convertPcxToPng)
-		doConvertPcxToPng(deleteOriginals);
 }

+ 39 - 3
mapeditor/resourceExtractor/ResourceConverter.h

@@ -8,6 +8,42 @@
  *
  */
 #pragma once
- 
- // Splits def files that are shared between factions and converts pcx to bmp
-void convertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals);
+
+namespace bfs = boost::filesystem;
+
+// Struct for holding all Convertor Options
+struct ConversionOptions
+{
+	bool splitDefs = false;			// splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's
+	bool convertPcxToPng = false;	// converts single Images (found in Images folder) from .pcx to png.
+	bool deleteOriginals = false;	// delete original files, for the ones splitted / converted.
+};
+
+// Struct for holding all Resource Extractor / Converter options
+struct ExtractionOptions
+{
+	bool extractArchives = false;	// if set, original H3 archives will be extracted into a separate folder
+	ConversionOptions conversionOptions;
+};
+
+class ResourceConverter
+{
+
+public:
+
+	// Splits def files that are shared between factions and converts pcx to bmp depending on Extraction Options
+	static void convertExtractedResourceFiles(ConversionOptions conversionOptions);
+
+private:
+
+	// converts all pcx files from /Images into PNG
+	static void doConvertPcxToPng(bool deleteOriginals);
+
+	// splits a def file into individual parts and converts the output to PNG format
+	static void splitDefFile(const std::string& fileName, const bfs::path& spritesPath, bool deleteOriginals);
+
+	// splits def files (TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44) so that faction resources are independent
+	// (town creature portraits, hero army creature portraits, adventure map dwellings, small town icons, big town icons, 
+	// hero speciality small icons, hero speciality large icons)
+	static void splitDefFiles(bool deleteOriginals);
+};