aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/mesh_extractor/WorldModelGroup.cpp18
-rw-r--r--src/tools/mesh_extractor/WorldModelGroup.h4
-rw-r--r--src/tools/mesh_extractor/WorldModelRoot.cpp8
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)
}
}