TerrainGen coverage


terraingen/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
663 / 663
100.0%
Branches:
351 / 351
100.0%
Functions:
51 / 51
100.0%

config/fields/boulders.h
Line Branch Exec Source
1 /// @file
2 /// @brief The JSON fields of boulder layers, boulder sizes and boulder shapes.
3 #pragma once
4
5 #include "terraingen/config/config.h"
6 #include "terraingen/config/fields/common.h"
7 #include "terraingen/config/fields/maps.h"
8
9 #include <numbers>
10 #include <string_view>
11
12 namespace terraingen::config {
13
14 /// Description of the curve of an SP-8023 boulder size model.
15 inline constexpr std::string_view kCurveHelp =
16 "Which of the model's minimum, nominal and maximum curves to use, from fewest to most "
17 "boulders.";
18
19 template <> struct SpecName<GolombekRappBouldersSpec> {
20 static constexpr std::string_view kName = "golombek_rapp";
21 static constexpr std::string_view kDescription =
22 "Golombek and Rapp boulder sizes, set by the fraction of ground the boulders cover and the "
23 "layer's qa and qb.";
24 };
25 119 template <typename IO> void Fields(IO& /*io*/, GolombekRappBouldersSpec& /*spec*/) {}
26
27 template <> struct SpecName<Sp8023IntercraterBouldersSpec> {
28 static constexpr std::string_view kName = "sp8023_intercrater";
29 static constexpr std::string_view kDescription =
30 "Blocks between craters from NASA SP-8023, the lunar surface design model (Figure 7).";
31 };
32 34 template <typename IO> void Fields(IO& io, Sp8023IntercraterBouldersSpec& spec) {
33
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Sp8023IntercraterBouldersSpec&):
✓ Branch 3 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Sp8023IntercraterBouldersSpec&):
✓ Branch 3 taken 5 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Sp8023IntercraterBouldersSpec&):
✓ Branch 3 taken 20 times.
34 io("curve", spec.curve, kCurveHelp);
34 34 }
35
36 template <> struct SpecName<Sp8023CraterBouldersSpec> {
37 static constexpr std::string_view kName = "sp8023_crater";
38 static constexpr std::string_view kDescription =
39 "Blocks around blocky craters from NASA SP-8023 (Figure 9), for the ejecta of craters "
40 "that reached bedrock.";
41 };
42 33 template <typename IO> void Fields(IO& io, Sp8023CraterBouldersSpec& spec) {
43
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Sp8023CraterBouldersSpec&):
✓ Branch 3 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Sp8023CraterBouldersSpec&):
✓ Branch 3 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Sp8023CraterBouldersSpec&):
✓ Branch 3 taken 20 times.
33 io("curve", spec.curve, kCurveHelp);
44 33 }
45
46 template <> struct SpecName<SynthterrainBouldersSpec> {
47 static constexpr std::string_view kName = "synthterrain";
48 static constexpr std::string_view kDescription =
49 "One of the power-law boulder distributions synthterrain offers, for comparison with it.";
50 };
51 33 template <typename IO> void Fields(IO& io, SynthterrainBouldersSpec& spec) {
52
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SynthterrainBouldersSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SynthterrainBouldersSpec&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SynthterrainBouldersSpec&):
✓ Branch 4 taken 20 times.
33 io("model", spec.model, "Which of synthterrain's power-law boulder distributions to use.");
53 33 }
54
55 78 template <typename IO> void Fields(IO& io, BoulderPatches& patches) {
56
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderPatches&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderPatches&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderPatches&):
✓ Branch 4 taken 44 times.
78 io("spread", patches.spread,
57 "Boulder abundance varies from 1 / spread to spread times its mean, at least 1; 1 is the "
58 "same everywhere.",
59 78 "", AtLeast(1.0));
60
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderPatches&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderPatches&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderPatches&):
✓ Branch 4 taken 44 times.
78 io("size", patches.size,
61 78 "Typical width of a patch of richer or poorer boulder cover, in metres.", "m", Above(0.0));
62 78 }
63
64 79 template <typename IO> void Fields(IO& io, BoulderFillet& fillet) {
65
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFillet&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFillet&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFillet&):
✓ Branch 4 taken 44 times.
79 io("height_share", fillet.heightShare,
66 "Height of the regolith piled against a boulder, as a share of its exposed height, from 0 "
67 "to 1; 0 draws no fillets.",
68 79 "", UnitInterval());
69
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFillet&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFillet&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFillet&):
✓ Branch 4 taken 44 times.
79 io("width_ratio", fillet.widthRatio,
70 "How far the fillet reaches beyond the boulder's edge, over its diameter; it falls to "
71 "nothing there.",
72 79 "", Above(0.0));
73 79 }
74
75 79 template <typename IO> void Fields(IO& io, BoulderVentifacts& ventifacts) {
76
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 44 times.
79 io("share", ventifacts.share,
77 "Share of boulders with a windward facet planed by sand-laden wind, from 0 to 1; 0 for "
78 "none. Gale crater: 0.39 (Bridges et al. 2014).",
79 79 "", UnitInterval());
80
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 44 times.
79 io("wind_azimuth", ventifacts.windAzimuth,
81 "Where the abrading wind blows toward, in radians counter-clockwise from east; facets face "
82 "the other way.",
83 "rad");
84
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 44 times.
79 io("min_angle", ventifacts.minAngle,
85 "Gentlest facet slope from horizontal, in radians; 50 to 60 deg on basalt (Laity and "
86 "Bridges 2009).",
87 79 "rad", Inside(0.0, 0.5 * std::numbers::pi));
88
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 44 times.
79 io("max_angle", ventifacts.maxAngle, "Steepest facet slope from horizontal, in radians.", "rad",
89 79 Inside(0.0, 0.5 * std::numbers::pi));
90
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 44 times.
79 io("second_wind_azimuth", ventifacts.secondWindAzimuth,
91 "A second abrading wind, where it blows toward, in radians; some faceted boulders get a "
92 "second facet facing it and a keel between. Unset for none.",
93 "rad");
94
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderVentifacts&):
✓ Branch 4 taken 44 times.
79 io("keel_share", ventifacts.keelShare,
95 "Share of faceted boulders with the second facet, from 0 to 1. Gale crater: 12 of 39 "
96 "(Bridges et al. 2014).",
97 79 "", UnitInterval());
98 79 }
99
100 81 template <typename IO> void Fields(IO& io, BoulderEjecta& ejecta) {
101
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("min_crater_diameter", ejecta.minCraterDiameter,
102 "Smallest crater, in metres, that throws blocks out; 0 with no regolith thickness disables "
103 "crater blocks.",
104 81 "m", AtLeast(0.0));
105
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("regolith_thickness", ejecta.regolithThickness,
106 "Regolith thickness in metres: craters smaller than it over the excavation depth ratio dig "
107 "no boulder and throw no blocks. Unset ignores the regolith.",
108 81 "m", Above(0.0));
109
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("excavation_depth_ratio", ejecta.excavationDepthRatio,
110 "Depth of excavation over crater diameter, in (0, 1]; with the regolith thickness it sets "
111 "the smallest crater that throws blocks.",
112 81 "", AboveUpTo(0.0, 1.0));
113
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("coverage", ejecta.coverage,
114 "Golombek-Rapp k, the fraction of ground covered by blocks at the rim of a fresh crater, "
115 "between 0 and 1; used with golombek_rapp ejecta sizes.",
116 81 "", Inside(0.0, 1.0));
117
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("profile", ejecta.profile,
118 "How the share of a crater's blocks falls off with distance from its centre.");
119
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("reach", ejecta.reach,
120 "Distance from the crater's centre, in crater radii, beyond which it adds no blocks; over "
121 "1.",
122 81 "", Above(1.0));
123
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("decay_radii", ejecta.decayRadii,
124 "With the exponential profile, the e-folding distance of the blocks outside the rim, in "
125 "crater radii.",
126 81 "", Above(0.0));
127
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("floor_share", ejecta.floorShare,
128 "With the exponential profile, the crater floor's share of the rim's blocks, from 0 to 1.",
129 81 "", UnitInterval());
130
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("aging", ejecta.aging,
131 "How a crater's blocks wear away with time, so that few are left around old craters.");
132
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("min_freshness", ejecta.minFreshness,
133 "With freshness aging, the freshness (current over fresh depth) at or below which a crater "
134 "keeps no blocks; from 0 to below 1.",
135 81 "", FromBelow(0.0, 1.0));
136
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("lifetime_gyr", ejecta.lifetimeGyr,
137 "With age aging, the crater age in Gyr at which a crater keeps no blocks.", "Gyr",
138 81 Above(0.0));
139
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("aging_exponent", ejecta.agingExponent,
140 "With age aging, the exponent of (1 - age / lifetime); higher values strip blocks from "
141 "craters sooner.",
142 81 "", AtLeast(0.0));
143
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderEjecta&):
✓ Branch 4 taken 44 times.
81 io("gravity", ejecta.gravity,
144 "Surface gravity in m/s^2: with the regolith thickness, it limits how far blocks are "
145 "thrown, after Bart and Melosh (2010). Unset applies no such limit.",
146 81 "", Above(0.0));
147 81 }
148
149 90 template <typename IO> void Fields(IO& io, ExposureParams& exposure) {
150
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("reach", exposure.reach,
151 "Distance in metres around a point at which its surroundings are read, to tell rises from "
152 "lows.",
153 90 "m", Above(0.0));
154
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("rise_soil", exposure.riseSoil,
155 "Height above the surroundings, as a share of the reach, at or below which the ground is "
156 "soil.");
157
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("rise_boulder", exposure.riseBoulder,
158 "Height above the surroundings, as a share of the reach, at or above which the ground is "
159 "bedrock; above the soil threshold.");
160
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("slope_soil", exposure.slopeSoil, "Slope, as rise over run, at or under which soil holds.");
161
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("slope_boulder", exposure.slopeBoulder,
162 "Slope, as rise over run, at or over which no soil holds and the ground is bedrock; above "
163 "the soil threshold.");
164
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("floor_cover", exposure.floorCover,
165 "Share of level ground that is bedrock too, in noise patches, as on a swept lava floor; "
166 "from 0 to below 1, and 0 for none.",
167 90 "", FromBelow(0.0, 1.0));
168
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("floor_patch", exposure.floorPatch,
169 90 "Width of the bedrock patches on level ground, in metres.", "m", Above(0.0));
170
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ExposureParams&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ExposureParams&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ExposureParams&):
✓ Branch 4 taken 68 times.
90 io("seed", exposure.seed, "Seed of the bedrock patches on level ground.");
171 90 }
172
173 81 template <typename IO> void Fields(IO& io, BoulderModelThreshold& models) {
174
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 44 times.
81 io("min_diameter", models.minDiameter,
175 "Boulders at least this many metres across become 3D models; unset applies no diameter "
176 "threshold.",
177 81 "m", Above(0.0));
178
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 44 times.
81 io("min_samples", models.minSamples,
179 "Boulders spanning at least this many samples at the spacing evaluated become 3D models, so "
180 "finer levels of detail make more of them; unset applies no such threshold.",
181 81 "", Above(0.0));
182
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 44 times.
81 io("max_diameter", models.maxDiameter,
183 "Boulders this many metres across or wider are not models, keeping a band of sizes as "
184 "models; unset applies no upper limit.",
185 81 "m", Above(0.0));
186
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 28 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderModelThreshold&):
✓ Branch 4 taken 44 times.
81 io("max_samples", models.maxSamples,
187 "Boulders spanning this many samples or more are not models; unset applies no such limit.",
188 81 "", Above(0.0));
189 81 }
190
191 78 template <typename IO> void Fields(IO& io, BoulderReliefRange& range) {
192
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 44 times.
78 io("min_diameter", range.minDiameter,
193 "Smallest boulder drawn into the heights, in metres; smaller ones stay in the lists only, "
194 "for the renderer's surface detail.",
195 78 "m", AtLeast(0.0));
196
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 44 times.
78 io("max_diameter", range.maxDiameter,
197 "Boulders this many metres across or wider are not drawn into the heights; unset applies no "
198 "upper limit.",
199 78 "m", Above(0.0));
200
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderReliefRange&):
✓ Branch 4 taken 44 times.
78 io("models", range.models,
201 "Draws the 3D model boulders into the heights as well, as a stand-in for far views.");
202 78 }
203
204 79 template <typename IO> void Fields(IO& io, BoulderClusters& clusters) {
205
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderClusters&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderClusters&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderClusters&):
✓ Branch 4 taken 44 times.
79 io("share", clusters.share,
206 "Share of the boulders between craters gathered in clusters, from 0 to 1; 0 leaves them "
207 "scattered.",
208 79 "", UnitInterval());
209
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderClusters&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderClusters&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderClusters&):
✓ Branch 4 taken 44 times.
79 io("spacing", clusters.spacing,
210 "Typical distance between cluster centres, in metres; with thomas, one centre per spacing "
211 "squared on average.",
212 79 "m", Above(0.0));
213
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderClusters&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderClusters&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderClusters&):
✓ Branch 4 taken 44 times.
79 io("radius", clusters.radius,
214 "Gaussian radius of a cluster, in metres; below the spacing with nearest, at most twice it "
215 "with thomas.",
216 79 "m", Above(0.0));
217
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderClusters&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderClusters&):
✓ Branch 4 taken 26 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderClusters&):
✓ Branch 4 taken 44 times.
79 io("model", clusters.model, "How cluster centres are laid out and their clusters combine.");
218 79 }
219
220 78 template <typename IO> void Fields(IO& io, BoulderFragmentation& fragmentation) {
221
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("min_diameter", fragmentation.minDiameter, "Smallest boulder that breaks, in metres.", "m",
222 78 Above(0.0));
223
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("split_wear", fragmentation.splitWear,
224 "Wear from 0 (fresh) to 1 from which boulders split into pieces that still fit; 1 breaks "
225 "nothing.",
226 78 "", UnitInterval());
227
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("rubble_wear", fragmentation.rubbleWear,
228 "Wear from which the pieces scatter as rubble, turn and sink; at least split_wear.", "",
229 78 UnitInterval());
230
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("min_pieces", fragmentation.minPieces, "Fewest pieces a boulder breaks into, at least 2.",
231 78 "", Between(2.0, 12.0));
232
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("max_pieces", fragmentation.maxPieces, "Most pieces a boulder breaks into, at most 12.", "",
233 78 Between(2.0, 12.0));
234
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("gap_ratio", fragmentation.gapRatio,
235 "Widest crack between split pieces, as a share of the boulder's diameter.", "",
236 78 AtLeast(0.0));
237
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("spread_ratio", fragmentation.spreadRatio,
238 "How far rubble scatters beyond the cracks, as a share of the boulder's diameter.", "",
239 78 AtLeast(0.0));
240
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 25 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderFragmentation&):
✓ Branch 4 taken 44 times.
78 io("slab_share", fragmentation.slabShare,
241 "Share of broken boulders split by roughly parallel cracks right through them; the rest "
242 "crack out from the middle.",
243 78 "", UnitInterval());
244 78 }
245
246 3324 template <typename IO> void Fields(IO& io, ValueRange& range) {
247
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueRange&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueRange&):
✓ Branch 4 taken 960 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueRange&):
✓ Branch 4 taken 2355 times.
3324 io("min", range.min, "Lower end of the interval the value is drawn uniformly from.");
248
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueRange&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueRange&):
✓ Branch 4 taken 960 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueRange&):
✓ Branch 4 taken 2355 times.
3324 io("max", range.max, "Upper end of the interval the value is drawn uniformly from.");
249 3324 }
250
251 663 template <typename IO> void Fields(IO& io, BoulderStyle& style) {
252
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("name", style.name, "Label of the style, for reference; it does not change the shapes.");
253
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("weight", style.weight,
254 "Relative share of boulders given this style, not negative; the styles' weights must not "
255 "all be 0.",
256 663 "", AtLeast(0.0));
257
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("solid", style.solid,
258 "Solid the shape starts from, before it is stretched, rounded, roughened and fractured.");
259
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("intermediate", style.intermediate,
260 "Range of the intermediate axis over the long one, b / a, within (0, 1]; lower values "
261 "give more elongated boulders.");
262
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("short_axis", style.shortAxis,
263 "Range of the short, vertical axis over the long one, c / a, within (0, 1] and at most "
264 "the intermediate ratio; lower values give flatter boulders.");
265
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("rounding", style.rounding,
266 "Range of the share, from 0 to 1, by which the shape is rounded toward the ellipsoid of "
267 "its axes: 0 keeps the solid's edges and corners, 1 is the ellipsoid.");
268
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("min_fractures", style.minFractures,
269 "Fewest flat fracture planes cutting a boulder, from 0; each boulder's count is drawn "
270 "between the two.",
271 663 "", Between(0.0, 64.0));
272
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("max_fractures", style.maxFractures,
273 "Most flat fracture planes cutting a boulder, at most 64 and at least the fewest.", "",
274 663 Between(0.0, 64.0));
275
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("fracture_depth", style.fractureDepth,
276 "Range of where each fracture plane lies, as a share of the shape's reach along its "
277 "normal, within (0, 1]; lower values cut more away.");
278
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("max_fracture_tilt", style.maxFractureTilt,
279 "Largest vertical component of a fracture plane's unit normal, from 0 to 1: 0 keeps "
280 "normals horizontal, cutting a slab about its rim only.",
281 663 "", UnitInterval());
282
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("noise_amplitude", style.noiseAmplitude,
283 "Largest relative change of the radius by the roughening noise, in [0, 1); 0 leaves the "
284 "surface unroughened.",
285 663 "", FromBelow(0.0, 1.0));
286
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("noise_wavelength", style.noiseWavelength,
287 "Wavelength of the roughening noise's first octave, in long-axis lengths; positive, "
288 "with smaller values giving finer bumps.",
289 663 "", Above(0.0));
290
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("noise_octaves", style.noiseOctaves,
291 "Octaves of the roughening noise, 1 to 12, each halving in wavelength; more add finer "
292 "detail.",
293 663 "", Between(1.0, 12.0));
294
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("edge_softness", style.edgeSoftness,
295 "Range of how far edges and corners are worn back where faces meet, as weathering rounds "
296 "them, in long-axis lengths from 0 to 0.5; 0 keeps them sharp.");
297
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderStyle&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderStyle&):
✓ Branch 4 taken 192 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderStyle&):
✓ Branch 4 taken 462 times.
663 io("face_roughness", style.faceRoughness,
298 "How far fracture faces undulate, as a share of each plane's offset from 0 to 0.5; 0 keeps "
299 "them flat.",
300 663 "", Between(0.0, 0.5));
301 663 }
302
303 77 template <typename IO> void Fields(IO& io, BoulderShapeOptions& shapes) {
304
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 44 times.
77 io("styles", shapes.styles,
305 "Kinds of boulder each shape is drawn from, picked by weight; at least one.");
306
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 44 times.
77 io("subdivisions", shapes.subdivisions,
307 "Times the solid's triangles are split in four, 0 to 6; more give finer, smoother shapes "
308 "with more triangles.",
309 77 "", Between(0.0, 6.0));
310
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 44 times.
77 io("weathering", shapes.weathering,
311 "Scales every style's edge softness: 0 gives sharp edges, 1 the styles' own, more is more "
312 "worn.",
313 77 "", AtLeast(0.0));
314
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 24 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderShapeOptions&):
✓ Branch 4 taken 44 times.
77 io("seed", shapes.seed,
315 "Seed the shapes are drawn with, along with each shape's own seed; changing it reshapes "
316 "every boulder.");
317 77 }
318
319 template <> struct SpecName<BoulderLayerSpec> {
320 static constexpr std::string_view kName = "boulders";
321 static constexpr std::string_view kDescription =
322 "Boulders scattered over the ground from a size distribution, in patches and around fresh "
323 "craters, as relief or 3D models.";
324 };
325 111 template <typename IO> void Fields(IO& io, BoulderLayerSpec& spec) {
326 111 BoulderLayerOptions& boulders = spec.boulders;
327 111 BoulderSizes& sizes = boulders.sizes;
328 111 BoulderBedrock& bedrock = boulders.bedrock;
329 111 BoulderPose& pose = boulders.pose;
330 111 BoulderRendering& rendering = boulders.rendering;
331
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("coverage", sizes.coverage,
332 "Golombek-Rapp k, the fraction of the ground covered by boulders, between 0 and 1; used "
333 "with golombek_rapp sizes, where higher values give more boulders.",
334 111 "", Inside(0.0, 1.0));
335
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("qa", sizes.qConstant,
336 "Constant term of the Golombek-Rapp q = qa + qb / k, per metre; a larger q leaves fewer "
337 "large boulders. Also used for golombek_rapp ejecta.",
338 "1/m");
339
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("qb", sizes.qCoverageCoefficient,
340 "Term of the Golombek-Rapp q = qa + qb / k divided by the coverage k, per metre.", "1/m");
341
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("min_diameter", sizes.minDiameter,
342 "Smallest boulder generated, in metres; lower values add many more small boulders.", "m",
343 111 Above(0.0));
344
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("max_diameter", sizes.maxDiameter,
345 111 "Largest boulder generated, in metres, exclusive; above the smallest.", "m", Above(0.0));
346
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("sizes", spec.sizes,
347 "Size distribution of the boulders between craters, per m^2; patches and bedrock scale its "
348 "density.");
349
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("seed", boulders.seed,
350 "Seed of the boulders, their attributes and the patches; changing it gives a different "
351 "boulder field of the same statistics.");
352
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("patches", boulders.patches,
353 "Patches of richer and poorer boulder cover across the ground.");
354
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("clusters", boulders.clusters,
355 "Clusters of the boulders between craters around scattered centres; off unless share is "
356 "set.");
357
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("ejecta", boulders.ejecta,
358 "Blocks thrown out by craters of the nearest crater layer before this one that dug into "
359 "boulder, densest at the rim and thinning outward.");
360
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("ejecta_sizes", spec.ejectaSizes,
361 "Size distribution of the blocks at the rim of a fresh crater, per m^2; golombek_rapp uses "
362 "the ejecta's coverage with qa and qb.");
363
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("extrapolate", spec.extrapolate,
364 "Lets the size distributions be evaluated outside their valid diameters, such as beyond a "
365 "table's published ones; otherwise they must cover the boulder sizes.");
366
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
111 io("exposure", bedrock.exposure,
367 "Raises the abundance of boulders where the ground beneath is bedrock, judged from its "
368 "shape; unset disables it.");
369
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("bedrock_abundance", bedrock.abundance,
370 "Boulder abundance on bedrock over that on soil, and in between in proportion; used with "
371 "the exposure field.",
372 110 "", Above(0.0));
373
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("exposure_spacing", bedrock.exposureSpacing,
374 "Spacing in metres the ground is read at for the exposure field, fixed so that which "
375 "boulders exist does not depend on the level of detail.",
376 110 "m", Above(0.0));
377
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("bedrock_mean_size", bedrock.meanSize,
378 "With a density map, the side in metres of the squares bedrock is held to the map's mean "
379 "over, so it gathers boulders without adding any; a GeoTIFF map uses its own cells.",
380 110 "m", Above(0.0));
381
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("min_height_ratio", pose.minHeightRatio,
382 "Smallest boulder height over diameter; each boulder's is drawn uniformly between the two "
383 "ratios.",
384 110 "", Above(0.0));
385
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("max_height_ratio", pose.maxHeightRatio,
386 110 "Largest boulder height over diameter; at least the smallest.", "", Above(0.0));
387
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("min_burial", pose.minBurial,
388 "Smallest buried share of a boulder's height; each boulder's is drawn uniformly between the "
389 "two shares.",
390 110 "", FromBelow(0.0, 1.0));
391
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("max_burial", pose.maxBurial,
392 "Largest buried share of a boulder's height, below 1; more burial leaves less of the "
393 "boulder exposed.",
394 110 "", FromBelow(0.0, 1.0));
395
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("max_lean", pose.maxLean, "Largest tilt of a boulder from the vertical, in radians.", "rad",
396 110 AtLeast(0.0));
397
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("side_share", pose.sideShare,
398 "Share of boulders resting on a side, their intermediate axis up, rather than on their "
399 "broadest face.",
400 110 "", UnitInterval());
401
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("end_share", pose.endShare,
402 "Share of boulders standing on an end, their long axis up; with side_share, at most 1.", "",
403 110 UnitInterval());
404
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("max_tilt", pose.maxTilt,
405 "Largest tilt of a boulder's up axis from the vertical in a random direction, after its "
406 "lean, in radians; tilts are spread evenly over that cap of directions.",
407 110 "rad", Between(0.0, std::numbers::pi));
408
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("follow_slope", pose.followSlope,
409 "Settles each boulder on the slope of the ground beneath it before its tilt.");
410
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("settle", pose.settle,
411 "Tips each boulder model over until it rests stably on a face, its centre of mass over "
412 "what it stands on, rather than balanced on an edge or corner.");
413
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("max_slope", pose.maxSlope,
414 "Steepest ground, across a boulder's diameter, that boulders stay on, in radians; steeper "
415 "ground has none, models and drawn boulders alike. Unset keeps boulders on any slope.",
416 110 "rad", Inside(0.0, 0.5 * std::numbers::pi));
417
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("roll_distance", pose.rollDistance,
418 "With max_slope, boulders on steeper ground roll down it and rest where it is gentle "
419 "enough, gathering at the foot of slopes; those that would roll farther than this many "
420 "metres are left out. Unset leaves out every boulder on steeper ground.",
421 110 "m", Above(0.0));
422
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("burial_by_wear", pose.burialByWear,
423 "How far wear sets burial, from 0 to 1: blocks of fresh craters sit near the smallest "
424 "burial and those of worn ones sink toward the largest, while boulders between craters "
425 "span every stage; 0 draws burial uniformly.",
426 110 "", UnitInterval());
427
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("fillet", boulders.fillet,
428 "Regolith piled against each boulder's base, around relief and models alike; off unless "
429 "height_share is set.");
430
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("ventifacts", boulders.ventifacts,
431 "Windward facets planed on boulders by sand-laden wind, from wear; off unless share is "
432 "set.");
433
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 66 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("fragmentation", boulders.fragmentation,
434 "Boulders broken by wear into pieces that replace them, split and then scattered as "
435 "rubble; off unless split_wear is below 1.");
436
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
110 io("relief", rendering.relief, "How the boulders drawn into the heights look there.");
437
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("models", rendering.models,
438 "Which boulders become 3D models of their own rather than relief in the heights; neither "
439 "threshold set means no models.");
440
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("relief_range", rendering.reliefRange,
441 "Which boulders are drawn into the heights by diameter: none below min_diameter or from "
442 "max_diameter, and models only when asked.");
443
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("shapes", rendering.shapes,
444 "The boulders' 3D boulder shapes, used by shape relief and by models.");
445
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("shape_files", spec.shapeFiles,
446 "Rock meshes (.obj with its .mtl, .gltf or .glb) the boulder shapes are drawn from instead "
447 "of the procedural styles, each boulder picking one by its shape seed; paths relative to "
448 "the configuration. Empty keeps the procedural shapes.");
449
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("density_map", spec.densityMap,
450 "Map that sets the abundance of boulders between craters point by point, scaling the "
451 "sizes to what it measures; unset keeps the abundance the sizes set everywhere.");
452
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("slope_map", spec.slopeMap,
453 "Map of how steeply boulder counts fall with size, such as a mean diameter map, bending the "
454 "sizes into a local power law through their count at its reference diameter; needs a size "
455 "distribution. Unset keeps the sizes' shape everywhere.");
456
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("manual", spec.manual,
457 "Catalog boulders placed as given and never thinned or left out; x, y and diameter are "
458 "read.");
459
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("completeness", spec.completeness,
460 "Where the manual boulders are a complete catalog: the diameter in metres from which they "
461 "stand in for generated boulders, infinite or no value where there is no catalog. Unset "
462 "keeps every generated boulder.");
463
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("shape_prototypes", rendering.shapePrototypes,
464 "How many shapes the boulders share, so they can be drawn as instances; 0 gives every "
465 "boulder a shape of its own.");
466
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BoulderLayerSpec&):
✓ Branch 4 taken 35 times.
109 io("fade", boulders.fade, "How boulders too small to resolve at the sample spacing fade out.");
467 109 }
468
469 } // namespace terraingen::config
470