Merge branch 'fix_liquid_attributes' into 'noggit-shadowlands'

fix MH2o attributes (liquid fatigue)

See merge request prophecy-rp/noggit-red!31
This commit is contained in:
Kaev
2023-01-01 19:59:11 +00:00
2 changed files with 19 additions and 8 deletions

View File

@@ -22,6 +22,7 @@ void ChunkWater::from_mclq(std::vector<mclq>& 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<mclq>& 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<char*>(&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<char*>(&Render.value()));
current_pos += sizeof(MH2O_Render);
}
else
{
header.ofsRenderMask = 0;
}
header.ofsInformation = current_pos - base_pos;
int info_pos = current_pos;

View File

@@ -7,6 +7,7 @@
#include <vector>
#include <set>
#include <optional>
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<MH2O_Render> Render;
std::vector<liquid_layer> _layers;
MapChunk* _chunk;