From 9733dd5b5e5516e18775665db132b2446492716c Mon Sep 17 00:00:00 2001 From: proller Date: Sat, 13 Jul 2013 21:48:14 +0400 Subject: Leveled nodebox --- src/mapnode.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/mapnode.cpp') diff --git a/src/mapnode.cpp b/src/mapnode.cpp index f93231187..33644cf5c 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -163,7 +163,7 @@ static std::vector transformNodeBox(const MapNode &n, const NodeBox &nodebox, INodeDefManager *nodemgr) { std::vector boxes; - if(nodebox.type == NODEBOX_FIXED) + if(nodebox.type == NODEBOX_FIXED || nodebox.type == NODEBOX_LEVELED) { const std::vector &fixed = nodebox.fixed; int facedir = n.getFaceDir(nodemgr); @@ -174,6 +174,11 @@ static std::vector transformNodeBox(const MapNode &n, i != fixed.end(); i++) { aabb3f box = *i; + + if (nodebox.type == NODEBOX_LEVELED) { + box.MaxEdge.Y = -BS/2 + BS*((float)1/LEVELED_MAX) * n.getLevel(nodemgr); + } + switch (axisdir) { case 0: @@ -354,6 +359,24 @@ std::vector MapNode::getSelectionBoxes(INodeDefManager *nodemgr) const return transformNodeBox(*this, f.selection_box, nodemgr); } +u8 MapNode::getLevel(INodeDefManager *nodemgr) const +{ + const ContentFeatures &f = nodemgr->get(*this); + if(f.liquid_type == LIQUID_SOURCE) + return LIQUID_LEVEL_SOURCE; + if (f.param_type_2 == CPT2_FLOWINGLIQUID) + return getParam2() & LIQUID_LEVEL_MASK; + if(f.liquid_type == LIQUID_FLOWING) // can remove if all param_type_2 setted + return getParam2() & LIQUID_LEVEL_MASK; + if(f.leveled || f.param_type_2 == CPT2_LEVELED) { + u8 level = getParam2() & LEVELED_MASK; + if(level) return level; + if(f.leveled > LEVELED_MAX) return LEVELED_MAX; + return f.leveled; //default + } + return 0; +} + u32 MapNode::serializedLength(u8 version) { if(!ser_ver_supported(version)) -- cgit v1.2.3