diff options
author | Wuzzy <wuzzy2@mail.ru> | 2021-07-15 19:19:59 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-15 21:19:59 +0200 |
commit | f4d8cc0f0bf33a998aa0d6d95de4b34f69fb31db (patch) | |
tree | bff947ef11780c27de4304b7a05be1de71be3d89 /src/client | |
parent | 68143ed8eca81857d3d28c2c4059411d72a78e8e (diff) | |
download | minetest-f4d8cc0f0bf33a998aa0d6d95de4b34f69fb31db.tar.gz minetest-f4d8cc0f0bf33a998aa0d6d95de4b34f69fb31db.tar.bz2 minetest-f4d8cc0f0bf33a998aa0d6d95de4b34f69fb31db.zip |
Add wallmounted support for plantlike and plantlike_rooted nodes (#11379)
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/content_mapblock.cpp | 48 | ||||
-rw-r--r-- | src/client/content_mapblock.h | 2 |
2 files changed, 47 insertions, 3 deletions
diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp index 810c57138..bb2d6398f 100644 --- a/src/client/content_mapblock.cpp +++ b/src/client/content_mapblock.cpp @@ -958,10 +958,38 @@ void MapblockMeshGenerator::drawPlantlikeQuad(float rotation, float quad_offset, vertex.rotateXZBy(rotation + rotate_degree); vertex += offset; } + + u8 wall = n.getWallMounted(nodedef); + if (wall != DWM_YN) { + for (v3f &vertex : vertices) { + switch (wall) { + case DWM_YP: + vertex.rotateYZBy(180); + vertex.rotateXZBy(180); + break; + case DWM_XP: + vertex.rotateXYBy(90); + break; + case DWM_XN: + vertex.rotateXYBy(-90); + vertex.rotateYZBy(180); + break; + case DWM_ZP: + vertex.rotateYZBy(-90); + vertex.rotateXYBy(90); + break; + case DWM_ZN: + vertex.rotateYZBy(90); + vertex.rotateXYBy(90); + break; + } + } + } + drawQuad(vertices, v3s16(0, 0, 0), plant_height); } -void MapblockMeshGenerator::drawPlantlike() +void MapblockMeshGenerator::drawPlantlike(bool is_rooted) { draw_style = PLANT_STYLE_CROSS; scale = BS / 2 * f->visual_scale; @@ -998,6 +1026,22 @@ void MapblockMeshGenerator::drawPlantlike() break; } + if (is_rooted) { + u8 wall = n.getWallMounted(nodedef); + switch (wall) { + case DWM_YP: + offset.Y += BS*2; + break; + case DWM_XN: + case DWM_XP: + case DWM_ZN: + case DWM_ZP: + offset.X += -BS; + offset.Y += BS; + break; + } + } + switch (draw_style) { case PLANT_STYLE_CROSS: drawPlantlikeQuad(46); @@ -1048,7 +1092,7 @@ void MapblockMeshGenerator::drawPlantlikeRootedNode() MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + p); light = LightPair(getInteriorLight(ntop, 1, nodedef)); } - drawPlantlike(); + drawPlantlike(true); p.Y--; } diff --git a/src/client/content_mapblock.h b/src/client/content_mapblock.h index 237cc7847..7344f05ee 100644 --- a/src/client/content_mapblock.h +++ b/src/client/content_mapblock.h @@ -146,7 +146,7 @@ public: void drawPlantlikeQuad(float rotation, float quad_offset = 0, bool offset_top_only = false); - void drawPlantlike(); + void drawPlantlike(bool is_rooted = false); // firelike-specific void drawFirelikeQuad(float rotation, float opening_angle, |