1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-09-16 09:26:28 +02:00

More changes following review.

This commit is contained in:
krs
2022-11-22 18:55:18 +02:00
parent f0b66b6192
commit d516a5f529
9 changed files with 52 additions and 65 deletions

View File

@@ -28,10 +28,9 @@ ArchiveEntry::ArchiveEntry()
CArchiveLoader::CArchiveLoader(std::string _mountPoint, bfs::path _archive, bool extractArchives) :
archive(std::move(_archive)),
mountPoint(std::move(_mountPoint))
mountPoint(std::move(_mountPoint)),
extractArchives(extractArchives)
{
this->extractArchives = extractArchives;
// Open archive file(.snd, .vid, .lod)
CFileInputStream fileStream(archive);
@@ -246,7 +245,7 @@ void CArchiveLoader::extractToFolder(std::string outputSubFolder, const std::str
out.write(data.get(), entry.fullSize);
}
bfs::path createExtractedFilePath(std::string outputSubFolder, std::string entryName)
bfs::path createExtractedFilePath(const std::string & outputSubFolder, const std::string & entryName)
{
bfs::path extractionFolderPath = VCMIDirs::get().userCachePath() / "extracted" / outputSubFolder;
bfs::path extractedFilePath = extractionFolderPath / entryName;

View File

@@ -105,6 +105,6 @@ private:
};
/** Constructs the file path for the extracted file. Creates the subfolder hierarchy aswell **/
boost::filesystem::path createExtractedFilePath(std::string outputSubFolder, std::string entryName);
boost::filesystem::path createExtractedFilePath(const std::string & outputSubFolder, const std::string & entryName);
VCMI_LIB_NAMESPACE_END

View File

@@ -210,7 +210,7 @@ void CResourceHandler::load(const std::string &fsConfigURI, bool extractArchives
addFilesystem("data", "core", createFileSystem("", fsConfig["filesystem"], extractArchives));
}
void CResourceHandler::addFilesystem(const std::string & parent, const std::string & identifier, ISimpleResourceLoader * loader, bool extractArchives)
void CResourceHandler::addFilesystem(const std::string & parent, const std::string & identifier, ISimpleResourceLoader * loader)
{
if(knownLoaders.count(identifier) != 0)
{

View File

@@ -92,7 +92,7 @@ public:
* @param identifier name of this loader by which it can be retrieved later
* @param loader resource loader to add
*/
static void addFilesystem(const std::string & parent, const std::string & identifier, ISimpleResourceLoader * loader, bool extractArchives = false);
static void addFilesystem(const std::string & parent, const std::string & identifier, ISimpleResourceLoader * loader);
/**
* @brief removeFilesystem removes previously added filesystem from global resouce holder

View File

@@ -719,7 +719,7 @@ void Animation::exportBitmaps(const bfs::path & path, bool prependResourceName)
fileName = name + "_" + fileName;
auto s = img->size();
img->save(QStringFromPath(actualPath / fileName), "PNG");
img->save(pathToQString(actualPath / fileName), "PNG");
counter++;
}
@@ -816,13 +816,4 @@ void Animation::createFlippedGroup(const size_t sourceGroup, const size_t target
auto image = getImage(frame, targetGroup);
*image = image->transformed(QTransform::fromScale(1, -1));
}
}
QString QStringFromPath(const bfs::path& filePath)
{
#ifdef _WIN32
return QString::fromStdWString(filePath.generic_wstring());
#else
return QString::fromStdString(filePath.native());
#endif
}
}

View File

@@ -94,6 +94,3 @@ public:
void createFlippedGroup(const size_t sourceGroup, const size_t targetGroup);
};
// ToDo: krs - temp location for this function. Need to move to right lib and see if it works on other platforms.
QString QStringFromPath(const boost::filesystem::path& filePath);

View File

@@ -109,17 +109,10 @@ void MainWindow::parseCommandLine()
if (!positionalArgs.isEmpty())
mapFilePath = positionalArgs.at(0);
if (parser.isSet("e"))
extractArchives = true;
if (parser.isSet("s"))
splitDefs = true;
if (parser.isSet("c"))
convertPcxToPng = true;
if (parser.isSet("d"))
deleteOriginals = true;
extractArchives = parser.isSet("e");
splitDefs = parser.isSet("s");
convertPcxToPng = parser.isSet("c");
deleteOriginals = parser.isSet("d");
}
MainWindow::MainWindow(QWidget *parent) :
@@ -176,7 +169,7 @@ MainWindow::MainWindow(QWidget *parent) :
graphics = new Graphics(); // should be before curh->init()
graphics->load();//must be after Content loading but should be in main thread
ConvertExtractedResourceFiles(splitDefs, convertPcxToPng, deleteOriginals);
convertExtractedResourceFiles(splitDefs, convertPcxToPng, deleteOriginals);
ui->mapView->setScene(controller.scene(0));
ui->mapView->setController(&controller);

View File

@@ -1,3 +1,13 @@
/*
* ResourceConverter.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "ResourceConverter.h"
@@ -15,12 +25,14 @@
namespace bfs = boost::filesystem;
// converts all pcx files from /Images into PNG
void ConvertPcxToPng(bool deleteOriginals)
void doConvertPcxToPng(bool deleteOriginals)
{
bfs::path imagesPath = VCMIDirs::get().userCachePath() / "extracted" / "Images";
std::string filename;
bfs::path imagesPath = VCMIDirs::get().userCachePath() / "extracted" / "IMAGES";
bfs::directory_iterator end_iter;
for ( bfs::directory_iterator dir_itr(imagesPath); dir_itr != end_iter; ++dir_itr )
for(bfs::directory_iterator dir_itr(imagesPath); dir_itr != end_iter; ++dir_itr)
{
try
{
@@ -29,33 +41,32 @@ void ConvertPcxToPng(bool deleteOriginals)
std::string filePath = dir_itr->path().string();
std::string fileStem = dir_itr->path().stem().string();
std::string filename = dir_itr->path().filename().string();
filename = boost::locale::to_lower(filename);
filename = dir_itr->path().filename().string();
std::string filenameLowerCase = boost::locale::to_lower(filename);
if(filename.find(".pcx") != std::string::npos)
if(bfs::extension(filenameLowerCase) == ".pcx")
{
auto img = BitmapHandler::loadBitmap(filename);
auto img = BitmapHandler::loadBitmap(filenameLowerCase);
bfs::path pngFilePath = imagesPath / (fileStem + ".png");
img.save(QStringFromPath(pngFilePath), "PNG");
img.save(pathToQString(pngFilePath), "PNG");
if (deleteOriginals)
if(deleteOriginals)
bfs::remove(filePath);
}
}
catch ( const std::exception & ex )
catch(const std::exception & ex)
{
logGlobal->info(dir_itr->path().filename().string() + " " + ex.what() + "\n");
logGlobal->info(filename + " " + ex.what() + "\n");
}
}
}
// splits a def file into individual parts and converts the output to PNG format
void SplitDefFile(std::string fileName, bfs::path spritesPath, bool deleteOriginals)
void splitDefFile(const std::string & fileName, const bfs::path & spritesPath, bool deleteOriginals)
{
if (CResourceHandler::get()->existsResource(ResourceID("SPRITES/" + fileName)))
if(CResourceHandler::get()->existsResource(ResourceID("SPRITES/" + fileName)))
{
std::string URI = fileName;
std::unique_ptr<Animation> anim = make_unique<Animation>(URI);
std::unique_ptr<Animation> anim = make_unique<Animation>(fileName);
anim->preload();
anim->exportBitmaps(VCMIDirs::get().userCachePath() / "extracted", true);
@@ -66,26 +77,23 @@ void SplitDefFile(std::string fileName, bfs::path spritesPath, bool deleteOrigin
logGlobal->error("Def File Split error! " + fileName);
}
// splits def files (TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44), this way faction resources are independent
// 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)
{
bfs::path extractedPath = VCMIDirs::get().userDataPath() / "extracted";
bfs::path spritesPath = extractedPath / "Sprites";
bfs::path spritesPath = extractedPath / "SPRITES";
SplitDefFile("TwCrPort.def", spritesPath, deleteOriginals); // split town creature portraits
SplitDefFile("CPRSMALL.def", spritesPath, deleteOriginals); // split hero army creature portraits
SplitDefFile("FlagPort.def", spritesPath, deleteOriginals); // adventure map dwellings
SplitDefFile("ITPA.def", spritesPath, deleteOriginals); // small town icons
SplitDefFile("ITPt.def", spritesPath, deleteOriginals); // big town icons
SplitDefFile("Un32.def", spritesPath, deleteOriginals); // big town icons
SplitDefFile("Un44.def", spritesPath, deleteOriginals); // big town icons
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)
void convertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals)
{
if (splitDefs)
if(splitDefs)
splitDefFiles(deleteOriginals);
if (convertPcxToPng)
ConvertPcxToPng(deleteOriginals);
if(convertPcxToPng)
doConvertPcxToPng(deleteOriginals);
}

View File

@@ -1,7 +1,5 @@
#pragma once
/*
* VCMI_Lib.cpp, part of VCMI engine
* ResourceConverter.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
@@ -9,6 +7,7 @@
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
// Splits def files that are shared between factions and converts pcx to bmp
void ConvertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals);
void convertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals);