diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/mesh_extractor/MeshExtractor.cpp | 3 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelHandler.cpp | 6 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelRoot.cpp | 7 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelRoot.h | 2 |
4 files changed, 13 insertions, 5 deletions
diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index f756bf087bd..0e2ca46b399 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -253,8 +253,9 @@ void ExtractGameobjectModels() fwrite(&model.Header.WmoId, sizeof(uint32), 1, output); const char grp[] = { 'G' , 'R' , 'P', ' ' }; - for (std::vector<WorldModelGroup>::iterator itr2 = model.Groups.begin(); itr2 != model.Groups.end(); ++itr2) + for (std::vector<WorldModelGroup*>::iterator groupItr = model.Groups.begin(); groupItr != model.Groups.end(); ++groupItr) { + WorldModelGroup* itr2 = *groupItr; const WMOGroupHeader& header = itr2->Header; fwrite(&header.Flags, sizeof(uint32), 1, output); fwrite(&header.WmoId, sizeof(uint32), 1, output); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index e4238b1e321..2f4c1b6323c 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -88,8 +88,9 @@ void WorldModelHandler::ProcessInternal( MapChunk* mcnk ) void WorldModelHandler::InsertModelGeometry( std::vector<Vector3>& verts, std::vector<Triangle<uint32> >& tris, const WorldModelDefinition& def, WorldModelRoot* root, bool translate ) { - for (std::vector<WorldModelGroup>::iterator group = root->Groups.begin(); group != root->Groups.end(); ++group) + for (std::vector<WorldModelGroup*>::iterator groupItr = root->Groups.begin(); groupItr != root->Groups.end(); ++groupItr) { + WorldModelGroup* group = *groupItr; uint32 vertOffset = verts.size(); for (std::vector<Vector3>::iterator itr2 = group->Vertices.begin(); itr2 != group->Vertices.end(); ++itr2) { @@ -136,8 +137,9 @@ void WorldModelHandler::InsertModelGeometry( std::vector<Vector3>& verts, std::v tris.push_back(Triangle<uint32>(Constants::TRIANGLE_TYPE_WMO, itr2->V0 + vertOffset, itr2->V1 + vertOffset, itr2->V2 + vertOffset)); } - for (std::vector<WorldModelGroup>::iterator group = root->Groups.begin(); group != root->Groups.end(); ++group) + for (std::vector<WorldModelGroup*>::iterator groupItr = root->Groups.begin(); groupItr != root->Groups.end(); ++groupItr) { + WorldModelGroup* group = *groupItr; if (!group->HasLiquidData) continue; diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp index a288713c646..d80e5a1691a 100644 --- a/src/tools/mesh_extractor/WorldModelRoot.cpp +++ b/src/tools/mesh_extractor/WorldModelRoot.cpp @@ -33,6 +33,11 @@ WorldModelRoot::WorldModelRoot( std::string path ) WorldModelRoot::~WorldModelRoot() { delete Data; + /* @ToDo: uncomment this once the ~WorldModelGroup() doesn't cause a crash anymore + for (std::vector<WorldModelGroup*>::iterator group = Groups.begin(); group != Groups.end(); ++group) + delete *group; + + Groups.clear();*/ } void WorldModelRoot::ReadGroups() @@ -46,7 +51,7 @@ void WorldModelRoot::ReadGroups() 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) + Groups.push_back(new WorldModelGroup(stream, name, i)); } } diff --git a/src/tools/mesh_extractor/WorldModelRoot.h b/src/tools/mesh_extractor/WorldModelRoot.h index c2303ceafe4..7b1248246ca 100644 --- a/src/tools/mesh_extractor/WorldModelRoot.h +++ b/src/tools/mesh_extractor/WorldModelRoot.h @@ -34,7 +34,7 @@ public: WorldModelHeader Header; std::vector<DoodadInstance> DoodadInstances; std::vector<DoodadSet> DoodadSets; - std::vector<WorldModelGroup> Groups; + std::vector<WorldModelGroup*> Groups; private: void ReadGroups(); void ReadDoodadSets(); |