• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Return-To-The-Roots / s25client / 5111912776

pending completion
5111912776

Pull #1592

github

web-flow
Merge aa25149c0 into 2c095fc86
Pull Request #1592: Update translations

13 of 13 new or added lines in 4 files covered. (100.0%)

21671 of 42980 relevant lines covered (50.42%)

30486.29 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.97
/libs/s25main/mapGenerator/Rivers.cpp
1
// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org)
2
//
3
// SPDX-License-Identifier: GPL-2.0-or-later
4

5
#include "mapGenerator/Rivers.h"
6
#include "mapGenerator/Terrain.h"
7
#include "mapGenerator/TextureHelper.h"
8

9
namespace rttr { namespace mapGenerator {
10

11
    River CreateStream(RandomUtility& rnd, Map& map, const MapPoint& source, Direction direction, unsigned length,
34✔
12
                       unsigned splitRate)
13
    {
14
        const MapExtent& size = map.size;
34✔
15

16
        River river;
34✔
17
        std::vector<Direction> exlcuded{direction + 2, direction + 3, direction + 4};
68✔
18

19
        auto& textures = map.textureMap;
34✔
20
        const auto water = textures.Find(IsWater);
34✔
21

22
        MapPoint currentNode = source;
34✔
23
        Direction currentDir = direction;
34✔
24

25
        for(unsigned node = 0; node < length; ++node)
461✔
26
        {
27
            const auto& triangles = GetTriangles(currentNode, size, currentDir);
436✔
28

29
            for(const auto& triangle : triangles)
1,308✔
30
            {
31
                textures.Set(triangle, water);
872✔
32

33
                const auto& edges = GetTriangleEdges(triangle, size);
872✔
34
                for(const MapPoint& edge : edges)
3,488✔
35
                {
36
                    river.insert(edge);
2,616✔
37
                }
38
            }
39

40
            if(map.z[currentNode] == map.height.minimum)
436✔
41
            {
42
                return river;
9✔
43
            }
44

45
            const auto lastDir = currentDir;
427✔
46

47
            while(currentDir == lastDir || helpers::contains(exlcuded, currentDir))
1,086✔
48
            {
49
                currentDir = lastDir + (rnd.ByChance(50) ? 5 : 1);
659✔
50
            }
51

52
            currentNode = map.getTextures().GetNeighbour(currentNode, lastDir);
427✔
53

54
            if(rnd.ByChance(splitRate))
427✔
55
            {
56
                auto splitDirection = direction + (rnd.ByChance(50) ? 5 : 1);
1✔
57
                auto anotherRivers = CreateStream(rnd, map, currentNode, splitDirection, length / 2, splitRate / 2);
2✔
58

59
                for(const MapPoint& node : anotherRivers)
21✔
60
                {
61
                    river.insert(node);
20✔
62
                }
63
            }
64
        }
65

66
        auto seaLevel = static_cast<unsigned>(map.height.minimum);
25✔
67
        auto& z = map.z;
25✔
68

69
        for(const MapPoint& node : river)
563✔
70
        {
71
            if(z[node] > 0)
538✔
72
            {
73
                z[node] = std::max(static_cast<unsigned>(z[node] - 1), seaLevel);
538✔
74
            } else
75
            {
76
                z[node] = seaLevel;
×
77
            }
78
        }
79

80
        return river;
25✔
81
    }
82

83
}} // namespace rttr::mapGenerator
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc