Restore visual_scale support for nodeboxes (and allfaces) (#9906)
authorVitaliy <numzer0@yandex.ru>
Sat, 6 Jun 2020 20:25:18 +0000 (23:25 +0300)
committerGitHub <noreply@github.com>
Sat, 6 Jun 2020 20:25:18 +0000 (22:25 +0200)
doc/lua_api.txt
src/client/content_mapblock.cpp

index 8c81b7020ba377b0ed60fe624bcfacb0a67e30e9..898531880aecd5b2e2b03fda4f95523ffb96e8ab 100644 (file)
@@ -6941,7 +6941,7 @@ Used by `minetest.register_node`.
 
         visual_scale = 1.0,
         -- Supported for drawtypes "plantlike", "signlike", "torchlike",
-        -- "firelike", "mesh".
+        -- "firelike", "mesh", "nodebox", "allfaces".
         -- For plantlike and firelike, the image will start at the bottom of the
         -- node. For torchlike, the image will start at the surface to which the
         -- node "attaches". For the other drawtypes the image will be centered
index 50efd2e4066daa6b515217937c9f8d7feefae265..f7d20001f41d33eb3c494d31c225260efd2a71e4 100644 (file)
@@ -366,6 +366,7 @@ void MapblockMeshGenerator::generateCuboidTextureCoords(const aabb3f &box, f32 *
 void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc,
        TileSpec *tiles, int tile_count)
 {
+       bool scale = std::fabs(f->visual_scale - 1.0f) > 1e-3f;
        f32 texture_coord_buf[24];
        f32 dx1 = box.MinEdge.X;
        f32 dy1 = box.MinEdge.Y;
@@ -373,6 +374,14 @@ void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc,
        f32 dx2 = box.MaxEdge.X;
        f32 dy2 = box.MaxEdge.Y;
        f32 dz2 = box.MaxEdge.Z;
+       if (scale) {
+               if (!txc) { // generate texture coords before scaling
+                       generateCuboidTextureCoords(box, texture_coord_buf);
+                       txc = texture_coord_buf;
+               }
+               box.MinEdge *= f->visual_scale;
+               box.MaxEdge *= f->visual_scale;
+       }
        box.MinEdge += origin;
        box.MaxEdge += origin;
        if (!txc) {
@@ -1323,7 +1332,7 @@ void MapblockMeshGenerator::drawNodeboxNode()
 
        std::vector<aabb3f> boxes;
        n.getNodeBoxes(nodedef, &boxes, neighbors_set);
-       for (const auto &box : boxes)
+       for (auto &box : boxes)
                drawAutoLightedCuboid(box, nullptr, tiles, 6);
 }