Tooltips: Unify the tooltip[] and list[] description tooltip display functions (...
[oweals/minetest.git] / src / content_mapblock.cpp
index 6673e2bd9f9ca96309889fbd67091d8355b9cba1..e6dd8e83e7dddbfc1cc4954c7cad009a2d43ca8e 100644 (file)
@@ -76,7 +76,7 @@ MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector
 
 void MapblockMeshGenerator::useTile(int index, bool disable_backface_culling)
 {
-       tile = getNodeTileN(n, p, index, data);
+       getNodeTileN(n, p, index, data, tile);
        if (!data->m_smooth_lighting)
                color = encode_light(light, f->light_source);
        for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) {
@@ -88,14 +88,14 @@ void MapblockMeshGenerator::useTile(int index, bool disable_backface_culling)
 
 void MapblockMeshGenerator::useDefaultTile(bool set_color)
 {
-       tile = getNodeTile(n, p, v3s16(0, 0, 0), data);
+       getNodeTile(n, p, v3s16(0, 0, 0), data, tile);
        if (set_color && !data->m_smooth_lighting)
                color = encode_light(light, f->light_source);
 }
 
-TileSpec MapblockMeshGenerator::getTile(const v3s16& direction)
+void MapblockMeshGenerator::getTile(const v3s16& direction, TileSpec &tile)
 {
-       return getNodeTile(n, p, direction, data);
+       getNodeTile(n, p, direction, data, tile);
 }
 
 void MapblockMeshGenerator::drawQuad(v3f *coords, const v3s16 &normal)
@@ -376,10 +376,10 @@ static TileSpec getSpecialTile(const ContentFeatures &f,
        return copy;
 }
 
-void MapblockMeshGenerator::prepareLiquidNodeDrawing(bool flowing)
+void MapblockMeshGenerator::prepareLiquidNodeDrawing()
 {
        tile_liquid_top = getSpecialTile(*f, n, 0);
-       tile_liquid = getSpecialTile(*f, n, flowing ? 1 : 0);
+       tile_liquid = getSpecialTile(*f, n, 1);
 
        MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y + 1, p.Z));
        c_flowing = nodedef->getId(f->liquid_alternative_flowing);
@@ -403,16 +403,12 @@ void MapblockMeshGenerator::prepareLiquidNodeDrawing(bool flowing)
        color = encode_light(light, f->light_source);
 }
 
-void MapblockMeshGenerator::getLiquidNeighborhood(bool flowing)
+void MapblockMeshGenerator::getLiquidNeighborhood()
 {
        u8 range = rangelim(nodedef->get(c_flowing).liquid_range, 1, 8);
 
        for (int w = -1; w <= 1; w++)
        for (int u = -1; u <= 1; u++) {
-               // Skip getting unneeded data
-               if (!flowing && u && w)
-                       continue;
-
                NeighborData &neighbor = liquid_neighbors[w + 1][u + 1];
                v3s16 p2 = p + v3s16(u, 0, w);
                MapNode n2 = data->m_vmanip.getNodeNoEx(blockpos_nodes + p2);
@@ -447,13 +443,6 @@ void MapblockMeshGenerator::getLiquidNeighborhood(bool flowing)
        }
 }
 
-void MapblockMeshGenerator::resetCornerLevels()
-{
-       for (int k = 0; k < 2; k++)
-       for (int i = 0; i < 2; i++)
-               corner_levels[k][i] = 0.5 * BS;
-}
-
 void MapblockMeshGenerator::calculateCornerLevels()
 {
        for (int k = 0; k < 2; k++)
@@ -494,7 +483,7 @@ f32 MapblockMeshGenerator::getCornerLevel(int i, int k)
        return 0;
 }
 
-void MapblockMeshGenerator::drawLiquidSides(bool flowing)
+void MapblockMeshGenerator::drawLiquidSides()
 {
        struct LiquidFaceDesc {
                v3s16 dir; // XZ
@@ -523,17 +512,12 @@ void MapblockMeshGenerator::drawLiquidSides(bool flowing)
                // at the top to which it should be connected. Again, unless the face
                // there would be inside the liquid
                if (neighbor.is_same_liquid) {
-                       if (!flowing)
-                               continue;
                        if (!top_is_same_liquid)
                                continue;
                        if (neighbor.top_is_same_liquid)
                                continue;
                }
 
-               if (!flowing && (neighbor.content == CONTENT_IGNORE))
-                       continue;
-
                const ContentFeatures &neighbor_features = nodedef->get(neighbor.content);
                // Don't draw face if neighbor is blocking the view
                if (neighbor_features.solidness == 2)
@@ -559,7 +543,7 @@ void MapblockMeshGenerator::drawLiquidSides(bool flowing)
        }
 }
 
-void MapblockMeshGenerator::drawLiquidTop(bool flowing)
+void MapblockMeshGenerator::drawLiquidTop()
 {
        // To get backface culling right, the vertices need to go
        // clockwise around the front of the face. And we happened to
@@ -582,45 +566,40 @@ void MapblockMeshGenerator::drawLiquidTop(bool flowing)
                vertices[i].Pos += origin;
        }
 
-       if (flowing) {
-               // Default downwards-flowing texture animation goes from
-               // -Z towards +Z, thus the direction is +Z.
-               // Rotate texture to make animation go in flow direction
-               // Positive if liquid moves towards +Z
-               f32 dz = (corner_levels[0][0] + corner_levels[0][1]) -
-                        (corner_levels[1][0] + corner_levels[1][1]);
-               // Positive if liquid moves towards +X
-               f32 dx = (corner_levels[0][0] + corner_levels[1][0]) -
-                        (corner_levels[0][1] + corner_levels[1][1]);
-               f32 tcoord_angle = atan2(dz, dx) * core::RADTODEG;
-               v2f tcoord_center(0.5, 0.5);
-               v2f tcoord_translate(blockpos_nodes.Z + p.Z, blockpos_nodes.X + p.X);
-               tcoord_translate.rotateBy(tcoord_angle);
-               tcoord_translate.X -= floor(tcoord_translate.X);
-               tcoord_translate.Y -= floor(tcoord_translate.Y);
-
-               for (int i = 0; i < 4; i++) {
-                       vertices[i].TCoords.rotateBy(tcoord_angle, tcoord_center);
-                       vertices[i].TCoords += tcoord_translate;
-               }
+       // Default downwards-flowing texture animation goes from
+       // -Z towards +Z, thus the direction is +Z.
+       // Rotate texture to make animation go in flow direction
+       // Positive if liquid moves towards +Z
+       f32 dz = (corner_levels[0][0] + corner_levels[0][1]) -
+                (corner_levels[1][0] + corner_levels[1][1]);
+       // Positive if liquid moves towards +X
+       f32 dx = (corner_levels[0][0] + corner_levels[1][0]) -
+                (corner_levels[0][1] + corner_levels[1][1]);
+       f32 tcoord_angle = atan2(dz, dx) * core::RADTODEG;
+       v2f tcoord_center(0.5, 0.5);
+       v2f tcoord_translate(blockpos_nodes.Z + p.Z, blockpos_nodes.X + p.X);
+       tcoord_translate.rotateBy(tcoord_angle);
+       tcoord_translate.X -= floor(tcoord_translate.X);
+       tcoord_translate.Y -= floor(tcoord_translate.Y);
 
-               std::swap(vertices[0].TCoords, vertices[2].TCoords);
+       for (int i = 0; i < 4; i++) {
+               vertices[i].TCoords.rotateBy(tcoord_angle, tcoord_center);
+               vertices[i].TCoords += tcoord_translate;
        }
 
+       std::swap(vertices[0].TCoords, vertices[2].TCoords);
+
        collector->append(tile_liquid_top, vertices, 4, quad_indices, 6);
 }
 
-void MapblockMeshGenerator::drawLiquidNode(bool flowing)
+void MapblockMeshGenerator::drawLiquidNode()
 {
-       prepareLiquidNodeDrawing(flowing);
-       getLiquidNeighborhood(flowing);
-       if (flowing)
-               calculateCornerLevels();
-       else
-               resetCornerLevels();
-       drawLiquidSides(flowing);
+       prepareLiquidNodeDrawing();
+       getLiquidNeighborhood();
+       calculateCornerLevels();
+       drawLiquidSides();
        if (!top_is_same_liquid)
-               drawLiquidTop(flowing);
+               drawLiquidTop();
 }
 
 void MapblockMeshGenerator::drawGlasslikeNode()
@@ -660,7 +639,7 @@ void MapblockMeshGenerator::drawGlasslikeFramedNode()
 {
        TileSpec tiles[6];
        for (int face = 0; face < 6; face++)
-               tiles[face] = getTile(g_6dirs[face]);
+               getTile(g_6dirs[face], tiles[face]);
 
        TileSpec glass_tiles[6];
        if (tiles[1].layers[0].texture &&
@@ -1193,7 +1172,7 @@ void MapblockMeshGenerator::drawNodeboxNode()
        TileSpec tiles[6];
        for (int face = 0; face < 6; face++) {
                // Handles facedir rotation for textures
-               tiles[face] = getTile(tile_dirs[face]);
+               getTile(tile_dirs[face], tiles[face]);
        }
 
        // locate possible neighboring nodes to connect to
@@ -1291,8 +1270,7 @@ void MapblockMeshGenerator::drawNode()
        else
                light = getInteriorLight(n, 1, nodedef);
        switch (f->drawtype) {
-               case NDT_LIQUID:            drawLiquidNode(false); break;
-               case NDT_FLOWINGLIQUID:     drawLiquidNode(true); break;
+               case NDT_FLOWINGLIQUID:     drawLiquidNode(); break;
                case NDT_GLASSLIKE:         drawGlasslikeNode(); break;
                case NDT_GLASSLIKE_FRAMED:  drawGlasslikeFramedNode(); break;
                case NDT_ALLFACES:          drawAllfacesNode(); break;