]> git.lizzy.rs Git - minetest.git/commitdiff
Fix liquid drawtype faces sometimes not rendering (#12807)
authorWuzzy <Wuzzy@disroot.org>
Mon, 26 Sep 2022 23:27:47 +0000 (01:27 +0200)
committerGitHub <noreply@github.com>
Mon, 26 Sep 2022 23:27:47 +0000 (19:27 -0400)
Co-authored-by: SmallJoker <SmallJoker@users.noreply.github.com>
src/client/mapblock_mesh.cpp
src/nodedef.cpp
src/nodedef.h

index d05a786a6fd54e04239c9c41f597e2d5328f3751..5036f8bd68223a523406b7c8fd2d249508dc7862 100644 (file)
@@ -651,7 +651,7 @@ static u8 face_contents(content_t m1, content_t m2, bool *equivalent,
        const ContentFeatures &f2 = ndef->get(m2);
 
        // Contents don't differ for different forms of same liquid
-       if (f1.sameLiquid(f2))
+       if (f1.sameLiquidRender(f2))
                return 0;
 
        u8 c1 = f1.solidness;
@@ -668,9 +668,9 @@ static u8 face_contents(content_t m1, content_t m2, bool *equivalent,
        if (c1 == c2) {
                *equivalent = true;
                // If same solidness, liquid takes precense
-               if (f1.isLiquid())
+               if (f1.isLiquidRender())
                        return 1;
-               if (f2.isLiquid())
+               if (f2.isLiquidRender())
                        return 2;
        }
 
index f42231736145325f63640f3d2da4b645684c4a9c..5707d31a0bcb17be5992e96ef644b3c5c886ac4d 100644 (file)
@@ -1681,7 +1681,7 @@ static void removeDupes(std::vector<content_t> &list)
 void NodeDefManager::resolveCrossrefs()
 {
        for (ContentFeatures &f : m_content_features) {
-               if (f.liquid_type != LIQUID_NONE || f.drawtype == NDT_LIQUID || f.drawtype == NDT_FLOWINGLIQUID) {
+               if (f.isLiquid() || f.isLiquidRender()) {
                        f.liquid_alternative_flowing_id = getId(f.liquid_alternative_flowing);
                        f.liquid_alternative_source_id = getId(f.liquid_alternative_source);
                        continue;
index b63748e443efea9029b98c22607ef8fa1f6dd53e..8f0d0e9e8f865a66c88d959bed75ed654811624b 100644 (file)
@@ -493,9 +493,16 @@ struct ContentFeatures
        bool isLiquid() const{
                return (liquid_type != LIQUID_NONE);
        }
-       bool sameLiquid(const ContentFeatures &f) const{
-               if(!isLiquid() || !f.isLiquid()) return false;
-               return (liquid_alternative_flowing_id == f.liquid_alternative_flowing_id);
+
+       bool isLiquidRender() const {
+               return (drawtype == NDT_LIQUID || drawtype == NDT_FLOWINGLIQUID);
+       }
+
+       bool sameLiquidRender(const ContentFeatures &f) const {
+               if (!isLiquidRender() || !f.isLiquidRender())
+                       return false;
+               return liquid_alternative_flowing_id == f.liquid_alternative_flowing_id &&
+                       liquid_alternative_source_id == f.liquid_alternative_source_id;
        }
 
        bool lightingEquivalent(const ContentFeatures &other) const {