Tools/MeshExtractor: Store WorldModelGroup references in WorldModelRoot

This commit is contained in:
jackpoz
2013-12-31 15:08:37 +01:00
parent 91f93feff5
commit bd57e06caf
4 changed files with 13 additions and 5 deletions

View File

@@ -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);

View File

@@ -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;

View File

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

View File

@@ -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();