aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2013-12-31 15:08:37 +0100
committerjackpoz <giacomopoz@gmail.com>2013-12-31 15:08:37 +0100
commitbd57e06cafdb925ed6b07e3acad7e486f3286328 (patch)
treea0e17c0ea5a6b598ef4b4225cc36f55c4a323f9d /src
parent91f93feff5c32c345fceabd6807fe44ea059c3f4 (diff)
Tools/MeshExtractor: Store WorldModelGroup references in WorldModelRoot
Diffstat (limited to 'src')
-rw-r--r--src/tools/mesh_extractor/MeshExtractor.cpp3
-rw-r--r--src/tools/mesh_extractor/WorldModelHandler.cpp6
-rw-r--r--src/tools/mesh_extractor/WorldModelRoot.cpp7
-rw-r--r--src/tools/mesh_extractor/WorldModelRoot.h2
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();