diff options
25 files changed, 87 insertions, 81 deletions
diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 499983c6eb0..75496b5364d 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -31,7 +31,7 @@ class GenericCache public: GenericCache() {} - T* Get(K key) + T const* Get(K key) { ACE_GUARD_RETURN(ACE_Thread_Mutex, g, mutex, NULL); typename std::map<K, T*>::iterator itr = _items.find(key); diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 8237449191a..b288b5712cd 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -63,7 +63,7 @@ void ChunkedData::Load( uint32 maxLength, uint32 chunksHint ) } } -int ChunkedData::GetFirstIndex( const std::string& name ) +int ChunkedData::GetFirstIndex( const std::string& name ) const { for (uint32 i = 0; i < Chunks.size(); ++i) if (Chunks[i]->Name == name) diff --git a/src/tools/mesh_extractor/ChunkedData.h b/src/tools/mesh_extractor/ChunkedData.h index 349750b6c85..112bdb47199 100644 --- a/src/tools/mesh_extractor/ChunkedData.h +++ b/src/tools/mesh_extractor/ChunkedData.h @@ -29,7 +29,7 @@ public: ChunkedData(const std::string &file, uint32 chunksHint = 300); ~ChunkedData(); - int GetFirstIndex(const std::string& name); + int GetFirstIndex(const std::string& name) const; Chunk* GetChunkByName(const std::string& name); void Load(uint32 maxLength, uint32 chunksHint); diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 8321a7924a1..1e4b63ccec9 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -23,7 +23,7 @@ #include "Recast.h" #include "DetourCommon.h" -void ContinentBuilder::getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) +void ContinentBuilder::getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) const { // this is for elevation if (verts && vertCount) diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index 8ecad9d9722..249fad05eb1 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -36,7 +36,7 @@ public: {} void Build(); - void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax); + void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) const; void CalculateTileBounds(); float bmin[3]; float bmax[3]; diff --git a/src/tools/mesh_extractor/DBC.cpp b/src/tools/mesh_extractor/DBC.cpp index 1484864d7a3..5bebc34a389 100644 --- a/src/tools/mesh_extractor/DBC.cpp +++ b/src/tools/mesh_extractor/DBC.cpp @@ -55,7 +55,7 @@ DBC::~DBC() delete *itr; } -std::string DBC::GetStringByOffset( int offset ) +std::string DBC::GetStringByOffset( int offset ) const { int len = 0; for (uint32 i = offset; i < StringBlockSize; i++) @@ -74,10 +74,10 @@ std::string DBC::GetStringByOffset( int offset ) return val; } -Record* DBC::GetRecordById( int id ) +Record const* DBC::GetRecordById( int id ) const { // we assume Id is index 0 - for (std::vector<Record*>::iterator itr = Records.begin(); itr != Records.end(); ++itr) + for (std::vector<Record*>::const_iterator itr = Records.begin(); itr != Records.end(); ++itr) if ((*itr)->Values[0] == id) return *itr; return NULL; diff --git a/src/tools/mesh_extractor/DBC.h b/src/tools/mesh_extractor/DBC.h index 61912cd456d..33f5437ebe2 100644 --- a/src/tools/mesh_extractor/DBC.h +++ b/src/tools/mesh_extractor/DBC.h @@ -30,9 +30,9 @@ public: DBC(Stream* stream); ~DBC(); - std::string GetStringByOffset(int offset); + std::string GetStringByOffset(int offset) const; - Record* GetRecordById(int id); + Record const* GetRecordById(int id) const; std::string Name; std::vector<Record*> Records; @@ -52,18 +52,18 @@ public: DBC* Source; std::vector<int> Values; - int operator[](int index) + int operator[](int index) const { return Values[index]; } template <typename T> - T GetValue(int index) + T GetValue(int index) const { return *(T*)(&Values[index]); } - std::string GetString(int index) + const std::string GetString(int index) const { return Source->GetStringByOffset(Values[index]); } diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 90f676ef769..5363855740e 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -56,7 +56,7 @@ void DoodadHandler::ProcessInternal(MapChunk* mcnk) continue; std::string path = (*_paths)[doodad.MmidIndex]; - Model* model = Cache->ModelCache.Get(path); + Model const* model = Cache->ModelCache.Get(path); if (!model->IsCollidable) continue; @@ -100,14 +100,14 @@ void DoodadHandler::ReadDoodadPaths( Chunk* id, Chunk* data ) } } -void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model* model) +void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model const* model) { uint32 vertOffset = Vertices.size(); - for (std::vector<Vector3>::iterator itr = model->Vertices.begin(); itr != model->Vertices.end(); ++itr) + for (std::vector<Vector3>::const_iterator itr = model->Vertices.begin(); itr != model->Vertices.end(); ++itr) Vertices.push_back(Utils::TransformDoodadVertex(def, *itr)); // Vertices have to be converted based on the information from the DoodadDefinition struct - for (std::vector<Triangle<uint16> >::iterator itr = model->Triangles.begin(); itr != model->Triangles.end(); ++itr) + for (std::vector<Triangle<uint16> >::const_iterator itr = model->Triangles.begin(); itr != model->Triangles.end(); ++itr) Triangles.push_back(Triangle<uint32>(Constants::TRIANGLE_TYPE_DOODAD, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); } diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index b02fcc664d1..d7d3e0917b5 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -59,7 +59,7 @@ public: std::vector<Vector3> Vertices; std::vector<Triangle<uint32> > Triangles; - bool IsSane() { return _definitions && _paths; } + bool IsSane() const { return _definitions && _paths; } protected: @@ -68,7 +68,7 @@ protected: private: void ReadDoodadDefinitions(Chunk* chunk); void ReadDoodadPaths(Chunk* id, Chunk* data); - void InsertModelGeometry(const DoodadDefinition& def, Model* model); + void InsertModelGeometry(const DoodadDefinition& def, Model const* model); std::set<uint32> _drawn; std::vector<DoodadDefinition>* _definitions; std::vector<std::string>* _paths; diff --git a/src/tools/mesh_extractor/Geometry.cpp b/src/tools/mesh_extractor/Geometry.cpp index 62a10a65c16..2ae05c0b736 100644 --- a/src/tools/mesh_extractor/Geometry.cpp +++ b/src/tools/mesh_extractor/Geometry.cpp @@ -92,12 +92,12 @@ void Geometry::AddData( std::vector<Vector3>& verts, std::vector<Triangle<uint32 Triangles.push_back(Triangle<uint32>(itr->Type, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); } -void Geometry::GetRawData( float*& verts, int*& tris, uint8*& areas ) +void Geometry::GetRawData( float*& verts, int*& tris, uint8*& areas ) const { verts = new float[Vertices.size() * 3]; for (uint32 i = 0; i < Vertices.size(); ++i) { - Vector3& vert = Vertices[i]; + const Vector3& vert = Vertices[i]; verts[(i * 3) + 0] = vert.x; verts[(i * 3) + 1] = vert.y; verts[(i * 3) + 2] = vert.z; @@ -106,7 +106,7 @@ void Geometry::GetRawData( float*& verts, int*& tris, uint8*& areas ) tris = new int[Triangles.size() * 3]; for (uint32 i = 0; i < Triangles.size(); ++i) { - Triangle<uint32>& tri = Triangles[i]; + const Triangle<uint32>& tri = Triangles[i]; tris[(i * 3) + 0] = (int)tri.V0; tris[(i * 3) + 1] = (int)tri.V1; tris[(i * 3) + 2] = (int)tri.V2; diff --git a/src/tools/mesh_extractor/Geometry.h b/src/tools/mesh_extractor/Geometry.h index f2ea43e381e..cd71ac5a828 100644 --- a/src/tools/mesh_extractor/Geometry.h +++ b/src/tools/mesh_extractor/Geometry.h @@ -31,7 +31,7 @@ public: void CalculateMinMaxHeight(float& min, float& max); void AddData(std::vector<Vector3>& verts, std::vector<Triangle<uint32> >& tris); void AddAdt(ADT* adt); - void GetRawData(float*& verts, int*& tris, uint8*& areas); + void GetRawData(float*& verts, int*& tris, uint8*& areas) const; std::vector<Vector3> Vertices; std::vector<Triangle<uint32> > Triangles; diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 7d93275f283..1b6f5ce944e 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -17,6 +17,8 @@ #include "LiquidHandler.h" #include "Utils.h" +#include "DBC.h" +#include "MPQManager.h" LiquidHandler::LiquidHandler( ADT* adt ) : Source(adt) { @@ -58,6 +60,11 @@ void LiquidHandler::HandleNewLiquid() stream->Seek(chunk->Offset + h.OffsetInformation, SEEK_SET); H2OInformation information = H2OInformation::Read(stream); + // Load the LiquidTypes DBC + DBC const* liquidTypes = MPQHandler->GetDBC("LiquidTypes"); + Record const* liquid = liquidTypes->GetRecordById(information.LiquidType); + ASSERT(liquid); + // This pointer will be passed to the MCNKLiquidData constructor, from that point on, it is the job of MCNKLiquidData's destructor to release it. float** heights = new float*[9]; for (int j = 0; j < 9; ++j) @@ -65,9 +72,9 @@ void LiquidHandler::HandleNewLiquid() heights[j] = new float[9]; memset(heights[j], 0, sizeof(float) * 9); } - + H2ORenderMask renderMask; - if (information.LiquidType != 2 && information.LiquidType != 6 && information.LiquidType != 10) // Skip Ocean, Slow Ocean and Fast Ocean + if (liquid->GetValue<uint32>(3) != 1) // Read the liquid type and skip Ocean, Slow Ocean and Fast Ocean { stream->Seek(chunk->Offset + h.OffsetRender, SEEK_SET); renderMask = H2ORenderMask::Read(stream); @@ -120,25 +127,16 @@ void LiquidHandler::HandleNewLiquid() // Define the liquid type Constants::TriangleType type = Constants::TRIANGLE_TYPE_UNKNOWN; - switch (information.LiquidType) + switch (liquid->GetValue<uint32>(3)) { - case 1: // Water - case 2: // Ocean - case 5: // Slow Water - case 6: // Slow Ocean - case 9: // Fast Water - case 10: // Fast Ocean - default: + case 0: // Water + case 1: // Ocean type = Constants::TRIANGLE_TYPE_WATER; break; - case 3: // Magma - case 7: // Slow Magma - case 11: // Fast Magma + case 2: // Magma type = Constants::TRIANGLE_TYPE_MAGMA; break; - case 4: // Slime - case 8: // Slow Slime - case 12: // Fast Slime + case 3: // Slime type = Constants::TRIANGLE_TYPE_SLIME; break; } diff --git a/src/tools/mesh_extractor/MPQ.h b/src/tools/mesh_extractor/MPQ.h index c9b55545f1f..df39e901d5d 100644 --- a/src/tools/mesh_extractor/MPQ.h +++ b/src/tools/mesh_extractor/MPQ.h @@ -83,17 +83,17 @@ public: ~MPQFile() { close(); } size_t Read(void* dest, size_t bytes); Stream* GetFileStream(); - size_t getSize() { return size; } - size_t getPos() { return pointer; } + size_t getSize() const { return size; } + size_t getPos() const { return pointer; } char* getBuffer() { return buffer; } char* getPointer() { return buffer + pointer; } - bool isEof() { return eof; } + bool isEof() const { return eof; } void seek(int offset); void seekRelative(int offset); void close(); }; -inline void flipcc(char *fcc) +inline void flipcc(char* fcc) { char t; t=fcc[0]; diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 987e53eb340..4834ca368c0 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -109,10 +109,18 @@ Stream* MPQManager::GetFile(const std::string& path ) return file.GetFileStream(); } -DBC* MPQManager::GetDBC(const std::string& name ) +DBC const* MPQManager::GetDBC(const std::string& name ) { + std::map<std::string, DBC*>::const_iterator itr = LoadedDBCs.find(name); + if (itr != LoadedDBCs.end()) + return itr->second; + std::string path = "DBFilesClient\\" + name + ".dbc"; - return new DBC(GetFile(path)); + DBC* dbc = new DBC(GetFile(path)); + + LoadedDBCs[name] = dbc; + + return dbc; } Stream* MPQManager::GetFileFromLocale( const std::string& path, uint32 locale ) diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index 32a60917c82..d44030319cf 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -36,7 +36,7 @@ public: Stream* GetFileFrom(const std::string& path, MPQArchive* file); Stream* GetFileFromLocale(const std::string& path, uint32 locale); - DBC* GetDBC(const std::string& name); + DBC const* GetDBC(const std::string& name); std::vector<std::string> GetAllFiles(std::string extension); std::deque<MPQArchive*> Archives; @@ -51,6 +51,7 @@ protected: void InitializeDBC(); private: ACE_Thread_Mutex mutex; + std::map<std::string, DBC*> LoadedDBCs; }; extern MPQManager* MPQHandler; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 0e2ca46b399..6e0cd11740c 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -61,9 +61,9 @@ void ExtractMMaps(std::set<uint32>& mapIds, uint32 threads) std::string basePath = "mmaps/"; Utils::CreateDir(basePath); - DBC* dbc = MPQHandler->GetDBC("Map"); + DBC const* dbc = MPQHandler->GetDBC("Map"); printf("Map.dbc contains " SIZEFMTD " rows.\n", dbc->Records.size()); - for (std::vector<Record*>::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) + for (std::vector<Record*>::const_iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) { uint32 mapId = (*itr)->Values[0]; @@ -146,8 +146,8 @@ void ExtractGameobjectModels() return; } - DBC* dbc = MPQHandler->GetDBC("GameObjectDisplayInfo"); - for (std::vector<Record*>::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) + DBC const* dbc = MPQHandler->GetDBC("GameObjectDisplayInfo"); + for (std::vector<Record*>::const_iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) { std::string path = (*itr)->GetString(1); std::string fileName = Utils::GetPlainName(path.c_str()); diff --git a/src/tools/mesh_extractor/Stream.h b/src/tools/mesh_extractor/Stream.h index 9aaeba3369c..647ff9d5357 100644 --- a/src/tools/mesh_extractor/Stream.h +++ b/src/tools/mesh_extractor/Stream.h @@ -41,12 +41,12 @@ public: void Seek(uint32 position, uint32 type); - uint32 GetSize() + uint32 GetSize() const { return _size; } - uint32 GetPos() + uint32 GetPos() const { return _position; } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index e5c274380e9..faee5b767cd 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -71,7 +71,7 @@ TileBuilder::TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, Context = new rcContext; } -void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax, dtNavMeshParams& /*navMeshParams*/ ) +void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax, dtNavMeshParams& /*navMeshParams*/ ) const { bmin = new float[3]; bmax = new float[3]; @@ -81,7 +81,7 @@ void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax, dtNavMeshPara bmax[2] = Constants::Origin[2] /*navMeshParams.orig[2]*/ + (Constants::TileSize * (Y + 1)); } -void TileBuilder::AddGeometry(WorldModelRoot* root, const WorldModelDefinition& def) +void TileBuilder::AddGeometry(WorldModelRoot const* root, const WorldModelDefinition& def) { _Geometry = new Geometry(); _Geometry->Transform = true; @@ -226,7 +226,7 @@ uint8* TileBuilder::BuildTiled(dtNavMeshParams& navMeshParams) adt->Read(); _Geometry->AddAdt(adt); delete adt; - + if (_Geometry->Vertices.empty() && _Geometry->Triangles.empty()) return NULL; @@ -387,7 +387,7 @@ uint8* TileBuilder::BuildTiled(dtNavMeshParams& navMeshParams) return NULL; } -void TileBuilder::OutputDebugVertices() +void TileBuilder::OutputDebugVertices() const { if (Constants::Debug) { diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index fb8950c552b..6171d407212 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -32,11 +32,11 @@ public: TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, int y, uint32 mapId); ~TileBuilder(); - void CalculateTileBounds(float*& bmin, float*& bmax, dtNavMeshParams& navMeshParams); + void CalculateTileBounds(float*& bmin, float*& bmax, dtNavMeshParams& navMeshParams) const; uint8* BuildTiled(dtNavMeshParams& navMeshParams); uint8* BuildInstance(dtNavMeshParams& navMeshParams); - void AddGeometry(WorldModelRoot* root, const WorldModelDefinition& def); - void OutputDebugVertices(); + void AddGeometry(WorldModelRoot const* root, const WorldModelDefinition& def); + void OutputDebugVertices() const; std::string World; int X; int Y; diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 9344776ae1f..b8ebc0b8fd3 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -92,7 +92,7 @@ Vector3 Utils::TransformDoodadVertex(const IDefinition& def, Vector3 vec, bool t return ret; } -Vector3 Utils::TransformWmoDoodad(const DoodadInstance& inst, const WorldModelDefinition& /*root*/, Vector3& vec, bool translate ) +Vector3 Utils::TransformWmoDoodad(const DoodadInstance& inst, const WorldModelDefinition& /*root*/, const Vector3& vec, bool translate) { G3D::Quat quat = G3D::Quat(-inst.QuatY, inst.QuatZ, -inst.QuatX, inst.QuatW); @@ -374,7 +374,7 @@ void LiquidData::Read(Stream* stream, LiquidHeader& header) { for (uint32 x = 0; x < header.CountXVertices; x++) { - stream->Read<uint32>(); // Dummy value + stream->Skip<uint32>(); HeightMap[x][y] = stream->Read<float>(); } } diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index ec826c701f9..8424d92baa9 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -275,7 +275,7 @@ public: uint32 CountXVertices; uint32 Width; - bool ShouldRender(int x, int y) + bool ShouldRender(int x, int y) const { return RenderFlags[x][y] != 0x0F; } @@ -414,7 +414,7 @@ public: static char* GetPlainName(const char* FileName); static Vector3 TransformDoodadVertex(const IDefinition& def, Vector3 vec, bool translate = true); static Vector3 VectorTransform(const Vector3& vec, const G3D::Matrix4& matrix, bool normal = false); - static Vector3 TransformWmoDoodad(const DoodadInstance& inst, const WorldModelDefinition& root, Vector3& vec, bool translate = true); + static Vector3 TransformWmoDoodad(const DoodadInstance& inst, const WorldModelDefinition& root, const Vector3& vec, bool translate = true); static void InitializeMmapTileHeader(MmapTileHeader& header); }; #endif diff --git a/src/tools/mesh_extractor/WDT.cpp b/src/tools/mesh_extractor/WDT.cpp index ef554d7606f..c4afec32a63 100644 --- a/src/tools/mesh_extractor/WDT.cpp +++ b/src/tools/mesh_extractor/WDT.cpp @@ -64,9 +64,9 @@ void WDT::ReadTileTable() } } -bool WDT::HasTile( int x, int y ) +bool WDT::HasTile( int x, int y ) const { - for (std::vector<TilePos>::iterator itr = TileTable.begin(); itr != TileTable.end(); ++itr) + for (std::vector<TilePos>::const_iterator itr = TileTable.begin(); itr != TileTable.end(); ++itr) if (itr->X == x && itr->Y == y) return true; return false; diff --git a/src/tools/mesh_extractor/WDT.h b/src/tools/mesh_extractor/WDT.h index d1e8e30918d..0deb5830e75 100644 --- a/src/tools/mesh_extractor/WDT.h +++ b/src/tools/mesh_extractor/WDT.h @@ -36,8 +36,8 @@ public: bool IsValid; std::string ModelFile; WorldModelDefinition ModelDefinition; - WorldModelRoot* Model; - bool HasTile(int x, int y); + WorldModelRoot const* Model; + bool HasTile(int x, int y) const; private: void ReadGlobalModel(); void ReadTileTable(); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index 2f4c1b6323c..00e2d462dbf 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -75,7 +75,7 @@ void WorldModelHandler::ProcessInternal( MapChunk* mcnk ) continue; std::string path = (*_paths)[wmo.MwidIndex]; - WorldModelRoot* model = Cache->WorldModelCache.Get(path); + WorldModelRoot const* model = Cache->WorldModelCache.Get(path); Vertices.reserve(1000); Triangles.reserve(1000); @@ -86,13 +86,13 @@ void WorldModelHandler::ProcessInternal( MapChunk* mcnk ) stream->Seek(mcnk->Source->Offset, SEEK_SET); } -void WorldModelHandler::InsertModelGeometry( std::vector<Vector3>& verts, std::vector<Triangle<uint32> >& tris, const WorldModelDefinition& def, WorldModelRoot* root, bool translate ) +void WorldModelHandler::InsertModelGeometry( std::vector<Vector3>& verts, std::vector<Triangle<uint32> >& tris, const WorldModelDefinition& def, WorldModelRoot const* root, bool translate ) { - for (std::vector<WorldModelGroup*>::iterator groupItr = root->Groups.begin(); groupItr != root->Groups.end(); ++groupItr) + for (std::vector<WorldModelGroup*>::const_iterator groupItr = root->Groups.begin(); groupItr != root->Groups.end(); ++groupItr) { - WorldModelGroup* group = *groupItr; + WorldModelGroup const* group = *groupItr; uint32 vertOffset = verts.size(); - for (std::vector<Vector3>::iterator itr2 = group->Vertices.begin(); itr2 != group->Vertices.end(); ++itr2) + for (std::vector<Vector3>::const_iterator itr2 = group->Vertices.begin(); itr2 != group->Vertices.end(); ++itr2) { Vector3 v = Utils::TransformDoodadVertex(def, *itr2, translate); // If translate is false, then we were called directly from the TileBuilder to add data to it's _Geometry member, hence, we have to manually convert the vertices to Recast format. @@ -123,34 +123,33 @@ void WorldModelHandler::InsertModelGeometry( std::vector<Vector3>& verts, std::v for (std::vector<DoodadInstance>::iterator instance = instances.begin(); instance != instances.end(); ++instance) { - Model* model = Cache->ModelCache.Get(instance->File); + Model const* model = Cache->ModelCache.Get(instance->File); if (!model->IsCollidable) continue; int vertOffset = verts.size(); - for (std::vector<Vector3>::iterator itr2 = model->Vertices.begin(); itr2 != model->Vertices.end(); ++itr2) + for (std::vector<Vector3>::const_iterator itr2 = model->Vertices.begin(); itr2 != model->Vertices.end(); ++itr2) { Vector3 v = Utils::TransformDoodadVertex(def, Utils::TransformWmoDoodad(*instance, def, *itr2, false), translate); verts.push_back(translate ? v : Utils::ToRecast(v)); } - for (std::vector<Triangle<uint16> >::iterator itr2 = model->Triangles.begin(); itr2 != model->Triangles.end(); ++itr2) + for (std::vector<Triangle<uint16> >::const_iterator itr2 = model->Triangles.begin(); itr2 != model->Triangles.end(); ++itr2) tris.push_back(Triangle<uint32>(Constants::TRIANGLE_TYPE_WMO, itr2->V0 + vertOffset, itr2->V1 + vertOffset, itr2->V2 + vertOffset)); } - for (std::vector<WorldModelGroup*>::iterator groupItr = root->Groups.begin(); groupItr != root->Groups.end(); ++groupItr) + for (std::vector<WorldModelGroup*>::const_iterator groupItr = root->Groups.begin(); groupItr != root->Groups.end(); ++groupItr) { - WorldModelGroup* group = *groupItr; + WorldModelGroup const* group = *groupItr; if (!group->HasLiquidData) continue; const LiquidHeader& liquidHeader = group->LiquidDataHeader; - LiquidData& liquidDataGeometry = group->LiquidDataGeometry; + const LiquidData& liquidDataGeometry = group->LiquidDataGeometry; for (uint32 y = 0; y < liquidHeader.Height; y++) { for (uint32 x = 0; x < liquidHeader.Width; x++) { - if (!liquidDataGeometry.ShouldRender(x, y)) continue; diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h index 9e5b1d1a3f7..ddc6f589147 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.h +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -50,8 +50,8 @@ public: std::vector<Vector3> Vertices; std::vector<Triangle<uint32> > Triangles; - bool IsSane() { return _definitions && _paths; } - static void InsertModelGeometry(std::vector<Vector3>& verts, std::vector<Triangle<uint32> >& tris, const WorldModelDefinition& def, WorldModelRoot* root, bool translate = true); + bool IsSane() const { return _definitions && _paths; } + static void InsertModelGeometry(std::vector<Vector3>& verts, std::vector<Triangle<uint32> >& tris, const WorldModelDefinition& def, WorldModelRoot const* root, bool translate = true); protected: void ProcessInternal(MapChunk* data); private: |