From 966abc85da49379726e28a9a82c99e33e41b3b8e Mon Sep 17 00:00:00 2001 From: Desour Date: Tue, 7 Jan 2025 13:09:12 +0100 Subject: [PATCH] transformNodeBox(): Rotate first by facedir --- src/mapnode.cpp | 106 +++++++----------------------------------------- 1 file changed, 14 insertions(+), 92 deletions(-) diff --git a/src/mapnode.cpp b/src/mapnode.cpp index e893125bd..22fc36086 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -179,130 +179,52 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox, if (nodebox.type == NODEBOX_FIXED || nodebox.type == NODEBOX_LEVELED) { const auto &fixed = nodebox.fixed; int facedir = n.getFaceDir(nodemgr, true); - u8 axisdir = facedir>>2; - facedir&=0x03; + u8 axisdir = facedir >> 2; + facedir &= 0x03; boxes.reserve(boxes.size() + fixed.size()); for (aabb3f box : fixed) { if (nodebox.type == NODEBOX_LEVELED) box.MaxEdge.Y = (-0.5f + n.getLevel(nodemgr) / 64.0f) * BS; + if(facedir == 1) { + box.MinEdge.rotateXZBy(-90); + box.MaxEdge.rotateXZBy(-90); + } else if(facedir == 2) { + box.MinEdge.rotateXZBy(180); + box.MaxEdge.rotateXZBy(180); + } else if(facedir == 3) { + box.MinEdge.rotateXZBy(90); + box.MaxEdge.rotateXZBy(90); + } + switch (axisdir) { case 0: - if(facedir == 1) - { - box.MinEdge.rotateXZBy(-90); - box.MaxEdge.rotateXZBy(-90); - } - else if(facedir == 2) - { - box.MinEdge.rotateXZBy(180); - box.MaxEdge.rotateXZBy(180); - } - else if(facedir == 3) - { - box.MinEdge.rotateXZBy(90); - box.MaxEdge.rotateXZBy(90); - } break; case 1: // z+ box.MinEdge.rotateYZBy(90); box.MaxEdge.rotateYZBy(90); - if(facedir == 1) - { - box.MinEdge.rotateXYBy(90); - box.MaxEdge.rotateXYBy(90); - } - else if(facedir == 2) - { - box.MinEdge.rotateXYBy(180); - box.MaxEdge.rotateXYBy(180); - } - else if(facedir == 3) - { - box.MinEdge.rotateXYBy(-90); - box.MaxEdge.rotateXYBy(-90); - } break; case 2: //z- box.MinEdge.rotateYZBy(-90); box.MaxEdge.rotateYZBy(-90); - if(facedir == 1) - { - box.MinEdge.rotateXYBy(-90); - box.MaxEdge.rotateXYBy(-90); - } - else if(facedir == 2) - { - box.MinEdge.rotateXYBy(180); - box.MaxEdge.rotateXYBy(180); - } - else if(facedir == 3) - { - box.MinEdge.rotateXYBy(90); - box.MaxEdge.rotateXYBy(90); - } break; case 3: //x+ box.MinEdge.rotateXYBy(-90); box.MaxEdge.rotateXYBy(-90); - if(facedir == 1) - { - box.MinEdge.rotateYZBy(90); - box.MaxEdge.rotateYZBy(90); - } - else if(facedir == 2) - { - box.MinEdge.rotateYZBy(180); - box.MaxEdge.rotateYZBy(180); - } - else if(facedir == 3) - { - box.MinEdge.rotateYZBy(-90); - box.MaxEdge.rotateYZBy(-90); - } break; case 4: //x- box.MinEdge.rotateXYBy(90); box.MaxEdge.rotateXYBy(90); - if(facedir == 1) - { - box.MinEdge.rotateYZBy(-90); - box.MaxEdge.rotateYZBy(-90); - } - else if(facedir == 2) - { - box.MinEdge.rotateYZBy(180); - box.MaxEdge.rotateYZBy(180); - } - else if(facedir == 3) - { - box.MinEdge.rotateYZBy(90); - box.MaxEdge.rotateYZBy(90); - } break; case 5: box.MinEdge.rotateXYBy(-180); box.MaxEdge.rotateXYBy(-180); - if(facedir == 1) - { - box.MinEdge.rotateXZBy(90); - box.MaxEdge.rotateXZBy(90); - } - else if(facedir == 2) - { - box.MinEdge.rotateXZBy(180); - box.MaxEdge.rotateXZBy(180); - } - else if(facedir == 3) - { - box.MinEdge.rotateXZBy(-90); - box.MaxEdge.rotateXZBy(-90); - } break; default: break; } + box.repair(); boxes.push_back(box); }