diff options
-rw-r--r-- | src/tools/mesh_extractor/WorldModelGroup.cpp | 18 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelGroup.h | 4 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelRoot.cpp | 8 |
3 files changed, 27 insertions, 3 deletions
diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index 2864edb23f2..ae17a77fc38 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -28,6 +28,24 @@ WorldModelGroup::WorldModelGroup(std::string path, int groupIndex) : GroupIndex( IsBad = true; return; } + Load(path); +} + +WorldModelGroup::WorldModelGroup(Stream* stream, std::string path, int groupIndex) +{ + Data = new ChunkedData(stream, stream->GetSize()); + Load(path); +} + +WorldModelGroup::~WorldModelGroup() +{ + delete Data; + delete SubData; + delete[] MOBA; +} + +void WorldModelGroup::Load(std::string& path) +{ Chunk* mainChunk = Data->GetChunkByName("MOGP"); int32 firstSub = mainChunk->FindSubChunkOffset("MOPY"); if (firstSub == -1) diff --git a/src/tools/mesh_extractor/WorldModelGroup.h b/src/tools/mesh_extractor/WorldModelGroup.h index b3c2c2bd940..20d453ee028 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.h +++ b/src/tools/mesh_extractor/WorldModelGroup.h @@ -24,6 +24,10 @@ class WorldModelGroup { public: WorldModelGroup(std::string path, int groupIndex); + WorldModelGroup(Stream* stream, std::string path, int groupIndex); + ~WorldModelGroup(); + void Load(std::string& path); + ChunkedData* Data; ChunkedData* SubData; int GroupIndex; diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp index 32ff2923c75..a288713c646 100644 --- a/src/tools/mesh_extractor/WorldModelRoot.cpp +++ b/src/tools/mesh_extractor/WorldModelRoot.cpp @@ -18,6 +18,7 @@ #include "WorldModelRoot.h" #include "ChunkedData.h" #include "Utils.h" +#include "MPQManager.h" WorldModelRoot::WorldModelRoot( std::string path ) { @@ -42,9 +43,10 @@ void WorldModelRoot::ReadGroups() { char name[200]; sprintf(name, "%s_%03u.wmo", pathBase.c_str(), i); - WorldModelGroup group(name, i); - if (!group.IsBad) - Groups.push_back(group); + Stream* stream = MPQHandler->GetFile(name); + if (!stream) + continue; + Groups.emplace_back(WorldModelGroup(stream, name, i)); // @ToDo: Use the real signature of emplace_back with variadic templates once we make the full switch to C++11 (At least Visual Studio 2012) } } |