diff options
-rw-r--r-- | src/tools/mesh_extractor/ADT.cpp | 5 | ||||
-rw-r--r-- | src/tools/mesh_extractor/ChunkedData.cpp | 2 | ||||
-rw-r--r-- | src/tools/mesh_extractor/Geometry.cpp | 4 | ||||
-rw-r--r-- | src/tools/mesh_extractor/LiquidHandler.cpp | 26 | ||||
-rw-r--r-- | src/tools/mesh_extractor/LiquidHandler.h | 1 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelGroup.cpp | 4 |
6 files changed, 38 insertions, 4 deletions
diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index 39b600d21b7..ee7e1b12b44 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -33,6 +33,11 @@ ADT::ADT( std::string file, int x, int y ) : ObjectData(NULL), Data(NULL), HasOb ADT::~ADT() { + // Temporarily delete the underlying streams, they are guaranteed to be different + // @TODO: Remove this code once the ChunkedData destructor properly releases _Stream + delete ObjectData->_Stream; + delete Data->_Stream; + delete ObjectData; delete Data; diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index a3c3ec4b92c..8237449191a 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -85,7 +85,7 @@ ChunkedData::~ChunkedData() delete *itr; Chunks.clear(); - /* WorldModelGroup Data and SubData share the same _Stream so it's deleted twice and it crahes + /* WorldModelGroup Data and SubData share the same _Stream so it's deleted twice and it crashes if (_Stream) delete _Stream;*/ } diff --git a/src/tools/mesh_extractor/Geometry.cpp b/src/tools/mesh_extractor/Geometry.cpp index a11dda85659..62a10a65c16 100644 --- a/src/tools/mesh_extractor/Geometry.cpp +++ b/src/tools/mesh_extractor/Geometry.cpp @@ -20,6 +20,7 @@ #include "ADT.h" #include "WorldModelHandler.h" #include "DoodadHandler.h" +#include "LiquidHandler.h" #include <limits.h> Geometry::Geometry() : Transform(false) @@ -142,5 +143,8 @@ void Geometry::AddAdt( ADT* adt ) if (!adt->_WorldModelHandler->Triangles.empty()) AddData(adt->_WorldModelHandler->Vertices, adt->_WorldModelHandler->Triangles); + + if (!adt->_LiquidHandler->Triangles.empty()) + AddData(adt->_LiquidHandler->Vertices, adt->_LiquidHandler->Triangles); } diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 6800cb773f7..7d93275f283 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -21,6 +21,7 @@ LiquidHandler::LiquidHandler( ADT* adt ) : Source(adt) { HandleNewLiquid(); + HandleOldLiquid(); } LiquidHandler::~LiquidHandler() @@ -66,7 +67,7 @@ void LiquidHandler::HandleNewLiquid() } H2ORenderMask renderMask; - if (information.LiquidType != 2) + if (information.LiquidType != 2 && information.LiquidType != 6 && information.LiquidType != 10) // Skip Ocean, Slow Ocean and Fast Ocean { stream->Seek(chunk->Offset + h.OffsetRender, SEEK_SET); renderMask = H2ORenderMask::Read(stream); @@ -123,13 +124,21 @@ void LiquidHandler::HandleNewLiquid() { case 1: // Water case 2: // Ocean + case 5: // Slow Water + case 6: // Slow Ocean + case 9: // Fast Water + case 10: // Fast Ocean default: type = Constants::TRIANGLE_TYPE_WATER; break; - case 3: + case 3: // Magma + case 7: // Slow Magma + case 11: // Fast Magma type = Constants::TRIANGLE_TYPE_MAGMA; break; - case 4: + case 4: // Slime + case 8: // Slow Slime + case 12: // Fast Slime type = Constants::TRIANGLE_TYPE_SLIME; break; } @@ -140,3 +149,14 @@ void LiquidHandler::HandleNewLiquid() } } } + +void LiquidHandler::HandleOldLiquid() +{ + for (uint32 i = 0; i < 256; ++i) + { + MapChunk* mapChunk = Source->MapChunks[i]; + if (!mapChunk->Header.OffsetMCLQ || mapChunk->Header.SizeMCLQ <= 8) + continue; + printf("Found old liquid"); + } +} diff --git a/src/tools/mesh_extractor/LiquidHandler.h b/src/tools/mesh_extractor/LiquidHandler.h index 2bb503cc7e7..d7f493e2719 100644 --- a/src/tools/mesh_extractor/LiquidHandler.h +++ b/src/tools/mesh_extractor/LiquidHandler.h @@ -35,5 +35,6 @@ public: std::vector<MCNKLiquidData*> MCNKData; private: void HandleNewLiquid(); + void HandleOldLiquid(); }; #endif
\ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index 57d1126a239..3e16894ced6 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -39,6 +39,10 @@ WorldModelGroup::WorldModelGroup(Stream* stream, std::string path, int groupInde WorldModelGroup::~WorldModelGroup() { + // Temporarily delete the underlying stream, it is the same pointer for both Data and SubData. + // @TODO: Remove this code once the ChunkedData destructor properly releases _Stream + delete Data->_Stream; + delete Data; delete SubData; delete[] MOBA; |