mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Tools/vmap_assembler: Use boost::filesystem::path for creating filenames
This commit is contained in:
@@ -36,6 +36,11 @@ template<> struct BoundsTrait<VMAP::ModelSpawn*>
|
||||
|
||||
namespace VMAP
|
||||
{
|
||||
static auto OpenFile(boost::filesystem::path const& p, char const* mode)
|
||||
{
|
||||
return Trinity::make_unique_ptr_with_deleter(fopen(p.string().c_str(), mode), &::fclose);
|
||||
}
|
||||
|
||||
G3D::Vector3 ModelPosition::transform(G3D::Vector3 const& pIn) const
|
||||
{
|
||||
G3D::Vector3 out = pIn * iScale;
|
||||
@@ -45,18 +50,18 @@ namespace VMAP
|
||||
|
||||
//=================================================================
|
||||
|
||||
TileAssembler::TileAssembler(std::string srcDirName, std::string destDirName, uint32 threads)
|
||||
: iSrcDir(std::move(srcDirName)), iDestDir(std::move(destDirName)), iThreads(threads)
|
||||
TileAssembler::TileAssembler(std::string const& srcDirName, std::string const& destDirName, uint32 threads)
|
||||
: iSrcDir(srcDirName), iDestDir(destDirName), iThreads(threads)
|
||||
{
|
||||
}
|
||||
|
||||
bool TileAssembler::convertWorld2()
|
||||
{
|
||||
boost::system::error_code ec;
|
||||
Trinity::IteratorPair dirBin(boost::filesystem::directory_iterator(iSrcDir + "/dir_bin", ec), {});
|
||||
Trinity::IteratorPair dirBin(boost::filesystem::directory_iterator(iSrcDir / "dir_bin", ec), {});
|
||||
if (ec)
|
||||
{
|
||||
printf("Failed to open input %s/dir_bin: %s\n", iSrcDir.c_str(), ec.message().c_str());
|
||||
printf("Failed to open input %s/dir_bin: %s\n", iSrcDir.string().c_str(), ec.message().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -65,7 +70,7 @@ namespace VMAP
|
||||
boost::system::error_code existsErr;
|
||||
if (!boost::filesystem::exists(iDestDir, existsErr))
|
||||
{
|
||||
printf("Failed to create output directory %s: %s\n", iDestDir.c_str(), ec.message().c_str());
|
||||
printf("Failed to create output directory %s: %s\n", iDestDir.string().c_str(), ec.message().c_str());
|
||||
return false;
|
||||
}
|
||||
// else already exists - this is fine, continue
|
||||
@@ -97,7 +102,7 @@ namespace VMAP
|
||||
thread_local std::size_t workerIndex = workerIndexGen++;
|
||||
--mapsToProcess;
|
||||
|
||||
auto dirf = Trinity::make_unique_ptr_with_deleter(fopen(file.string().c_str(), "rb"), &::fclose);
|
||||
auto dirf = OpenFile(file, "rb");
|
||||
if (!dirf)
|
||||
{
|
||||
printf("Could not read dir_bin file!\n");
|
||||
@@ -203,12 +208,14 @@ namespace VMAP
|
||||
for (uint32 i = 0; i < mapSpawns.size(); ++i)
|
||||
modelNodeIdx.try_emplace(mapSpawns[i]->ID, i);
|
||||
|
||||
boost::filesystem::path mapDestDir = iDestDir;
|
||||
|
||||
// write map tree file
|
||||
std::string mapfilename = Trinity::StringFormat("{}/{:04}.vmtree", iDestDir, data.MapId);
|
||||
auto mapfile = Trinity::make_unique_ptr_with_deleter(fopen(mapfilename.c_str(), "wb"), &::fclose);
|
||||
boost::filesystem::path mapfilename = mapDestDir / Trinity::StringFormat("{:04}.vmtree", data.MapId);
|
||||
auto mapfile = OpenFile(mapfilename, "wb");
|
||||
if (!mapfile)
|
||||
{
|
||||
printf("Cannot open %s\n", mapfilename.c_str());
|
||||
printf("Cannot open %s\n", mapfilename.string().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -230,10 +237,8 @@ namespace VMAP
|
||||
{
|
||||
uint32 x, y;
|
||||
StaticMapTree::unpackTileID(tileId, x, y);
|
||||
std::string tileFileName = Trinity::StringFormat("{}/{:04}_{:02}_{:02}.vmtile", iDestDir, data.MapId, y, x);
|
||||
auto tileFile = Trinity::make_unique_ptr_with_deleter(fopen(tileFileName.c_str(), "wb"), &::fclose);
|
||||
std::string tileSpawnIndicesFileName = Trinity::StringFormat("{}/{:04}_{:02}_{:02}.vmtileidx", iDestDir, data.MapId, y, x);
|
||||
auto tileSpawnIndicesFile = Trinity::make_unique_ptr_with_deleter(fopen(tileSpawnIndicesFileName.c_str(), "wb"), &::fclose);
|
||||
auto tileFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtile", data.MapId, y, x), "wb");
|
||||
auto tileSpawnIndicesFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtileidx", data.MapId, y, x), "wb");
|
||||
if (tileFile && tileSpawnIndicesFile)
|
||||
{
|
||||
std::set<uint32> const& parentTileEntries = data.ParentTileEntries[tileId];
|
||||
@@ -278,8 +283,7 @@ namespace VMAP
|
||||
|
||||
uint32 x, y;
|
||||
StaticMapTree::unpackTileID(tileId, x, y);
|
||||
std::string tileSpawnIndicesFileName = Trinity::StringFormat("{}/{:04}_{:02}_{:02}.vmtileidx", iDestDir, data.MapId, y, x);
|
||||
auto tileSpawnIndicesFile = Trinity::make_unique_ptr_with_deleter(fopen(tileSpawnIndicesFileName.c_str(), "wb"), &::fclose);
|
||||
auto tileSpawnIndicesFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtileidx", data.MapId, y, x), "wb");
|
||||
if (tileSpawnIndicesFile)
|
||||
{
|
||||
uint32 nSpawns = spawns.size();
|
||||
@@ -325,9 +329,7 @@ namespace VMAP
|
||||
|
||||
bool TileAssembler::calculateTransformedBound(ModelSpawn &spawn) const
|
||||
{
|
||||
std::string modelFilename(iSrcDir);
|
||||
modelFilename.push_back('/');
|
||||
modelFilename.append(spawn.name);
|
||||
boost::filesystem::path modelFilename = iSrcDir / spawn.name;
|
||||
|
||||
ModelPosition modelPosition;
|
||||
modelPosition.iDir = spawn.iRot;
|
||||
@@ -335,12 +337,12 @@ namespace VMAP
|
||||
modelPosition.init();
|
||||
|
||||
WorldModel_Raw raw_model;
|
||||
if (!raw_model.Read(modelFilename.c_str()))
|
||||
if (!raw_model.Read(modelFilename))
|
||||
return false;
|
||||
|
||||
uint32 groups = raw_model.groupsArray.size();
|
||||
if (groups != 1)
|
||||
printf("Warning: '%s' does not seem to be a M2 model!\n", modelFilename.c_str());
|
||||
printf("Warning: '%s' does not seem to be a M2 model!\n", modelFilename.string().c_str());
|
||||
|
||||
G3D::AABox rotated_bounds;
|
||||
for (int i = 0; i < 8; ++i)
|
||||
@@ -362,16 +364,12 @@ namespace VMAP
|
||||
};
|
||||
#pragma pack(pop)
|
||||
//=================================================================
|
||||
bool TileAssembler::convertRawFile(const std::string& pModelFilename)
|
||||
bool TileAssembler::convertRawFile(const std::string& pModelFilename) const
|
||||
{
|
||||
bool success = true;
|
||||
std::string filename = iSrcDir;
|
||||
if (filename.length() >0)
|
||||
filename.push_back('/');
|
||||
filename.append(pModelFilename);
|
||||
|
||||
WorldModel_Raw raw_model;
|
||||
if (!raw_model.Read(filename.c_str()))
|
||||
if (!raw_model.Read(iSrcDir / pModelFilename))
|
||||
return false;
|
||||
|
||||
// write WorldModel
|
||||
@@ -394,14 +392,14 @@ namespace VMAP
|
||||
model.setGroupModels(groupsArray);
|
||||
}
|
||||
|
||||
success = model.writeFile(iDestDir + "/" + pModelFilename + ".vmo");
|
||||
success = model.writeFile((iDestDir / (pModelFilename + ".vmo")).string());
|
||||
//std::cout << "readRawFile2: '" << pModelFilename << "' tris: " << nElements << " nodes: " << nNodes << std::endl;
|
||||
return success;
|
||||
}
|
||||
|
||||
void TileAssembler::exportGameobjectModels()
|
||||
{
|
||||
auto model_list = Trinity::make_unique_ptr_with_deleter(fopen((iSrcDir + "/" + "temp_gameobject_models").c_str(), "rb"), &::fclose);
|
||||
auto model_list = OpenFile(iSrcDir / "temp_gameobject_models", "rb");
|
||||
if (!model_list)
|
||||
return;
|
||||
|
||||
@@ -409,7 +407,7 @@ namespace VMAP
|
||||
if (fread(ident, 1, 8, model_list.get()) != 8 || memcmp(ident, VMAP::RAW_VMAP_MAGIC, 8) != 0)
|
||||
return;
|
||||
|
||||
auto model_list_copy = Trinity::make_unique_ptr_with_deleter(fopen((iDestDir + "/" + GAMEOBJECT_MODELS).c_str(), "wb"), &::fclose);
|
||||
auto model_list_copy = OpenFile(iDestDir / GAMEOBJECT_MODELS, "wb");
|
||||
if (!model_list_copy)
|
||||
return;
|
||||
|
||||
@@ -434,7 +432,7 @@ namespace VMAP
|
||||
std::string model_name(buff, name_length);
|
||||
|
||||
WorldModel_Raw raw_model;
|
||||
if (!raw_model.Read((iSrcDir + "/" + model_name).c_str()) )
|
||||
if (!raw_model.Read(iSrcDir / model_name))
|
||||
continue;
|
||||
|
||||
spawnedModelFiles.insert(model_name);
|
||||
@@ -557,12 +555,12 @@ namespace VMAP
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WorldModel_Raw::Read(const char * path)
|
||||
bool WorldModel_Raw::Read(boost::filesystem::path const& path)
|
||||
{
|
||||
auto file = Trinity::make_unique_ptr_with_deleter(fopen(path, "rb"), &::fclose);
|
||||
auto file = OpenFile(path, "rb");
|
||||
if (!file)
|
||||
{
|
||||
printf("ERROR: Can't open raw model file: %s\n", path);
|
||||
printf("ERROR: Can't open raw model file: %s\n", path.string().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
#ifndef _TILEASSEMBLER_H_
|
||||
#define _TILEASSEMBLER_H_
|
||||
|
||||
#include <G3D/Vector3.h>
|
||||
#include "ModelInstance.h"
|
||||
#include "WorldModel.h"
|
||||
#include <G3D/Matrix3.h>
|
||||
#include <G3D/Vector3.h>
|
||||
#include <boost/filesystem/path.hpp>
|
||||
#include <deque>
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
#include "ModelInstance.h"
|
||||
#include "WorldModel.h"
|
||||
|
||||
namespace VMAP
|
||||
{
|
||||
/**
|
||||
@@ -87,19 +87,19 @@ namespace VMAP
|
||||
uint32 RootWMOID;
|
||||
std::vector<GroupModel_Raw> groupsArray;
|
||||
|
||||
bool Read(const char * path);
|
||||
bool Read(boost::filesystem::path const& path);
|
||||
};
|
||||
|
||||
class TileAssembler
|
||||
{
|
||||
private:
|
||||
std::string iSrcDir;
|
||||
std::string iDestDir;
|
||||
boost::filesystem::path iSrcDir;
|
||||
boost::filesystem::path iDestDir;
|
||||
uint32 iThreads;
|
||||
std::set<std::string> spawnedModelFiles;
|
||||
|
||||
public:
|
||||
TileAssembler(std::string srcDirName, std::string destDirName, uint32 threads);
|
||||
TileAssembler(std::string const& srcDirName, std::string const& destDirName, uint32 threads);
|
||||
|
||||
bool convertWorld2();
|
||||
bool convertMap(MapSpawns& data) const;
|
||||
@@ -107,7 +107,7 @@ namespace VMAP
|
||||
bool calculateTransformedBound(ModelSpawn &spawn) const;
|
||||
void exportGameobjectModels();
|
||||
|
||||
bool convertRawFile(const std::string& pModelFilename);
|
||||
bool convertRawFile(const std::string& pModelFilename) const;
|
||||
};
|
||||
|
||||
} // VMAP
|
||||
|
||||
@@ -55,7 +55,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
std::cout << "using " << src << " as source directory and writing output to " << dest << std::endl;
|
||||
|
||||
VMAP::TileAssembler ta(std::move(src), std::move(dest), threads);
|
||||
VMAP::TileAssembler ta(src, dest, threads);
|
||||
|
||||
if (!ta.convertWorld2())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user