From de3d13c10a79b5beda309d287453e49fcd800ce0 Mon Sep 17 00:00:00 2001 From: T1ti Date: Sun, 1 Jan 2023 20:03:07 +0100 Subject: [PATCH] fix MH2o attributes --- src/noggit/ChunkWater.cpp | 24 +++++++++++++++++------- src/noggit/ChunkWater.hpp | 3 ++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/noggit/ChunkWater.cpp b/src/noggit/ChunkWater.cpp index 46d2dd75..7f3b0bfa 100755 --- a/src/noggit/ChunkWater.cpp +++ b/src/noggit/ChunkWater.cpp @@ -22,6 +22,7 @@ void ChunkWater::from_mclq(std::vector& layers) { glm::vec3 pos(xbase, 0.0f, zbase); + if (!Render.has_value()) Render.emplace(); for (mclq& liquid : layers) { std::uint8_t mclq_liquid_type = 0; @@ -32,8 +33,8 @@ void ChunkWater::from_mclq(std::vector& layers) { mclq_tile const& tile = liquid.tiles[z * 8 + x]; - misc::bit_or(Render.fishable, x, z, tile.fishable); - misc::bit_or(Render.fatigue, x, z, tile.fatigue); + misc::bit_or(Render.value().fishable, x, z, tile.fishable); + misc::bit_or(Render.value().fatigue, x, z, tile.fatigue); if (!tile.dont_render) { @@ -79,8 +80,9 @@ void ChunkWater::fromFile(BlizzardArchive::ClientFile &f, size_t basePos) //render if (header.ofsRenderMask) { - f.seek(basePos + header.ofsRenderMask + sizeof(MH2O_Render)); - f.read(&Render, sizeof(MH2O_Render)); + Render.emplace(); + f.seek(basePos + header.ofsRenderMask); + f.read(&Render.value(), sizeof(MH2O_Render)); } for (std::size_t k = 0; k < header.nLayers; ++k) @@ -121,9 +123,17 @@ void ChunkWater::save(sExtendableArray& adt, int base_pos, int& header_pos, int& if (hasData(0)) { header.nLayers = _layers.size(); - header.ofsRenderMask = current_pos - base_pos; - adt.Insert(current_pos, sizeof(MH2O_Render), reinterpret_cast(&Render)); - current_pos += sizeof(MH2O_Render); + + if (Render.has_value()) + { + header.ofsRenderMask = current_pos - base_pos; + adt.Insert(current_pos, sizeof(MH2O_Render), reinterpret_cast(&Render.value())); + current_pos += sizeof(MH2O_Render); + } + else + { + header.ofsRenderMask = 0; + } header.ofsInformation = current_pos - base_pos; int info_pos = current_pos; diff --git a/src/noggit/ChunkWater.hpp b/src/noggit/ChunkWater.hpp index 24318ca8..0bb2faa1 100755 --- a/src/noggit/ChunkWater.hpp +++ b/src/noggit/ChunkWater.hpp @@ -7,6 +7,7 @@ #include #include +#include class sExtendableArray; class MapChunk; @@ -83,7 +84,7 @@ private: void copy_height_to_layer(liquid_layer& target, glm::vec3 const& pos, float radius); - MH2O_Render Render; + std::optional Render; std::vector _layers; MapChunk* _chunk;