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

Return-To-The-Roots / s25client / 13525834592

25 Feb 2025 04:16PM UTC coverage: 50.288% (-0.07%) from 50.362%
13525834592

push

github

Flamefire
Delete all CMakeFiles folders before build

They might contain stale objects leading to
```
/usr/bin/ld: CMakeFiles/s25client.dir/s25client.cpp.o: in function `(anonymous namespace)::handleException(void*) [clone .constprop.0]':
s25client.cpp:(.text+0x18b2): undefined reference to `DebugInfo::SendStackTrace(std::vector<void*, std::allocator<void*> > const&)'
```

22358 of 44460 relevant lines covered (50.29%)

35874.47 hits per line

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

84.85
/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::mapGenerator {
10

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

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

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

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

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

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

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

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

45
        const auto lastDir = currentDir;
441✔
46

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

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

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

59
            for(const MapPoint& node : anotherRivers)
×
60
            {
61
                river.insert(node);
×
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)
643✔
70
    {
71
        if(z[node] > 0)
618✔
72
        {
73
            z[node] = std::max(static_cast<unsigned>(z[node] - 1), seaLevel);
618✔
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