summaryrefslogtreecommitdiff
path: root/src/mapnode.cpp
diff options
context:
space:
mode:
authorWuzzy <wuzzy2@mail.ru>2020-05-19 21:08:37 +0200
committerGitHub <noreply@github.com>2020-05-19 21:08:37 +0200
commitc94d37827dd3a8be9dcc59bb693032ba7ea07922 (patch)
treeada7fd843d405f8ec6f1c43b749f553f4a215214 /src/mapnode.cpp
parent7d3972a5049324f776ab008894c34569641f0073 (diff)
downloadminetest-c94d37827dd3a8be9dcc59bb693032ba7ea07922.tar.gz
minetest-c94d37827dd3a8be9dcc59bb693032ba7ea07922.tar.bz2
minetest-c94d37827dd3a8be9dcc59bb693032ba7ea07922.zip
Rework functionality of leveled nodes (#9852)
Co-authored-by: sfan5 <sfan5@live.de> Co-authored-by: SmallJoker <SmallJoker@users.noreply.github.com>
Diffstat (limited to 'src/mapnode.cpp')
-rw-r--r--src/mapnode.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index bf7e79a71..24d62b504 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -584,7 +584,7 @@ u8 MapNode::getMaxLevel(const NodeDefManager *nodemgr) const
if( f.liquid_type == LIQUID_FLOWING || f.param_type_2 == CPT2_FLOWINGLIQUID)
return LIQUID_LEVEL_MAX;
if(f.leveled || f.param_type_2 == CPT2_LEVELED)
- return LEVELED_MAX;
+ return f.leveled_max;
return 0;
}
@@ -603,14 +603,15 @@ u8 MapNode::getLevel(const NodeDefManager *nodemgr) const
if (level)
return level;
}
- if (f.leveled > LEVELED_MAX)
- return LEVELED_MAX;
+ // Return static value from nodedef if param2 isn't used for level
+ if (f.leveled > f.leveled_max)
+ return f.leveled_max;
return f.leveled;
}
-u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level)
+s8 MapNode::setLevel(const NodeDefManager *nodemgr, s16 level)
{
- u8 rest = 0;
+ s8 rest = 0;
const ContentFeatures &f = nodemgr->get(*this);
if (f.param_type_2 == CPT2_FLOWINGLIQUID
|| f.liquid_type == LIQUID_FLOWING
@@ -631,18 +632,18 @@ u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level)
if (level < 0) { // zero means default for a leveled nodebox
rest = level;
level = 0;
- } else if (level > LEVELED_MAX) {
- rest = level - LEVELED_MAX;
- level = LEVELED_MAX;
+ } else if (level > f.leveled_max) {
+ rest = level - f.leveled_max;
+ level = f.leveled_max;
}
setParam2((level & LEVELED_MASK) | (getParam2() & ~LEVELED_MASK));
}
return rest;
}
-u8 MapNode::addLevel(const NodeDefManager *nodemgr, s8 add)
+s8 MapNode::addLevel(const NodeDefManager *nodemgr, s16 add)
{
- s8 level = getLevel(nodemgr);
+ s16 level = getLevel(nodemgr);
level += add;
return setLevel(nodemgr, level);
}