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)      }  }  | 
