Fix liquid drawtype faces sometimes not rendering (#12807)

Co-authored-by: SmallJoker <SmallJoker@users.noreply.github.com>
This commit is contained in:
Wuzzy 2022-09-27 01:27:47 +02:00 committed by GitHub
parent f4a01f3a5d
commit 3f801bc096
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 7 deletions

View File

@ -651,7 +651,7 @@ static u8 face_contents(content_t m1, content_t m2, bool *equivalent,
const ContentFeatures &f2 = ndef->get(m2); const ContentFeatures &f2 = ndef->get(m2);
// Contents don't differ for different forms of same liquid // Contents don't differ for different forms of same liquid
if (f1.sameLiquid(f2)) if (f1.sameLiquidRender(f2))
return 0; return 0;
u8 c1 = f1.solidness; u8 c1 = f1.solidness;
@ -668,9 +668,9 @@ static u8 face_contents(content_t m1, content_t m2, bool *equivalent,
if (c1 == c2) { if (c1 == c2) {
*equivalent = true; *equivalent = true;
// If same solidness, liquid takes precense // If same solidness, liquid takes precense
if (f1.isLiquid()) if (f1.isLiquidRender())
return 1; return 1;
if (f2.isLiquid()) if (f2.isLiquidRender())
return 2; return 2;
} }

View File

@ -1681,7 +1681,7 @@ static void removeDupes(std::vector<content_t> &list)
void NodeDefManager::resolveCrossrefs() void NodeDefManager::resolveCrossrefs()
{ {
for (ContentFeatures &f : m_content_features) { 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_flowing_id = getId(f.liquid_alternative_flowing);
f.liquid_alternative_source_id = getId(f.liquid_alternative_source); f.liquid_alternative_source_id = getId(f.liquid_alternative_source);
continue; continue;

View File

@ -493,9 +493,16 @@ struct ContentFeatures
bool isLiquid() const{ bool isLiquid() const{
return (liquid_type != LIQUID_NONE); return (liquid_type != LIQUID_NONE);
} }
bool sameLiquid(const ContentFeatures &f) const{
if(!isLiquid() || !f.isLiquid()) return false; bool isLiquidRender() const {
return (liquid_alternative_flowing_id == f.liquid_alternative_flowing_id); 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 { bool lightingEquivalent(const ContentFeatures &other) const {