JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
Atlas.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
10
11#include <array>
12#include <cstddef>
13#include <cstdint>
14#include <filesystem>
15#include <optional>
16#include <string>
17#include <string_view>
18#include <vector>
19
20namespace core {
21
32enum class RegionGrade : std::uint8_t {
38};
39
41inline constexpr std::size_t kRegionGradeCount = 5;
42
55
63 std::vector<RegionAppraisal> appraisals;
64
66 [[nodiscard]] RegionGrade grade() const {
67 return appraisals.empty() ? RegionGrade::Normal : appraisals.front().grade;
68 }
69
71 [[nodiscard]] bool varies() const {
72 return appraisals.size() > 1;
73 }
74};
75
86
88inline constexpr std::size_t kRegionAxisCount = 7;
89
93 std::string species;
95 std::string label;
96 int percent = 0;
97};
98
106 std::optional<int> total;
107 std::vector<RegionSpeciesShare> species;
109 std::optional<int> otherPercent;
110};
111
113struct Location {
114 std::string id;
115 std::string name;
116 std::string source;
118 std::string region;
120 std::string description;
121};
122
129struct Region {
130 std::string id;
131 std::string name;
132 std::string source;
133 std::string government;
134 std::string faction;
137 std::array<RegionStatistic, kRegionAxisCount> statistics;
138 std::vector<std::string> neighbors;
139 std::vector<std::string> locations;
140
142 [[nodiscard]] const RegionStatistic& statistic(RegionAxis axis) const {
143 return statistics[static_cast<std::size_t>(axis)];
144 }
145};
146
153struct Atlas {
155 std::vector<Region> regions;
157 std::vector<Location> locations;
159 std::vector<std::string> errors;
160
162 [[nodiscard]] const Region* findRegion(std::string_view id) const;
164 [[nodiscard]] const Location* findLocation(std::string_view id) const;
165
174 [[nodiscard]] std::vector<std::string> unreachableFrom(std::string_view from) const;
175};
176
193[[nodiscard]] Atlas loadAtlas(const std::filesystem::path& directory);
194
196[[nodiscard]] std::string_view regionGradeName(RegionGrade grade);
197
199[[nodiscard]] std::optional<RegionGrade> regionGradeFromName(std::string_view name);
200
202[[nodiscard]] std::string_view regionAxisName(RegionAxis axis);
203
204} // namespace core
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
RegionAxis
Les sept axes, dans l'ordre où le livre les imprime.
Definition Atlas.h:77
@ EconomicProsperity
Definition Atlas.h:80
@ CrimeAndViolence
Definition Atlas.h:79
@ MonsterPresence
Definition Atlas.h:83
@ MagicAccess
Definition Atlas.h:82
@ PoliticalStability
Definition Atlas.h:84
@ GovernmentCorruption
Definition Atlas.h:81
@ CitizenFreedom
Definition Atlas.h:78
constexpr std::size_t kRegionGradeCount
Nombre de notes — pour les parcours exhaustifs et les contrôles de couverture.
Definition Atlas.h:41
std::string_view regionAxisName(RegionAxis axis)
Le nom d'un axe, tel que le schéma l'écrit (citizenFreedom, …).
Definition Atlas.cpp:213
Atlas loadAtlas(const std::filesystem::path &directory)
Charge l'atlas — regions/ et locations/ sous le dossier donné.
Definition Atlas.cpp:255
std::string_view regionGradeName(RegionGrade grade)
Le nom d'une note, tel que le schéma l'écrit (veryLow, normal, …).
Definition Atlas.cpp:201
constexpr std::size_t kRegionAxisCount
Nombre d'axes.
Definition Atlas.h:88
std::optional< RegionGrade > regionGradeFromName(std::string_view name)
La note portant ce nom de schéma, ou std::nullopt.
Definition Atlas.cpp:205
RegionGrade
Les cinq notes de l'encart « Regional Statistics » (EX-CNT-060).
Definition Atlas.h:32
@ Low
Definition Atlas.h:34
@ High
Definition Atlas.h:36
@ VeryLow
Definition Atlas.h:33
@ Normal
Definition Atlas.h:35
@ VeryHigh
Definition Atlas.h:37
@ Normal
Definition Check.h:32
L'atlas chargé, et ce qui n'a pas pu l'être.
Definition Atlas.h:153
std::vector< Location > locations
Les lieux chargés, triés par identifiant.
Definition Atlas.h:157
std::vector< Region > regions
Les régions chargées, triées par identifiant.
Definition Atlas.h:155
std::vector< std::string > errors
Un message par fichier refusé, nommant le fichier et la raison.
Definition Atlas.h:159
const Location * findLocation(std::string_view id) const
Le lieu portant cet identifiant, ou nullptr.
Definition Atlas.cpp:222
std::vector< std::string > unreachableFrom(std::string_view from) const
Les régions que l'on ne peut pas atteindre depuis from en suivant neighbors (EX-CNT-062).
Definition Atlas.cpp:227
const Region * findRegion(std::string_view id) const
La région portant cet identifiant, ou nullptr.
Definition Atlas.cpp:217
Un lieu nommé d'une région : un nœud terminal du graphe, une carte à créer.
Definition Atlas.h:113
std::string source
Definition Atlas.h:116
std::string region
Identifiant de la région qui le porte. Jamais vide.
Definition Atlas.h:118
std::string id
Definition Atlas.h:114
std::string name
Definition Atlas.h:115
std::string description
Le texte du livre. Vide pour une entrée qu'il ne fait que nommer.
Definition Atlas.h:120
Une appréciation d'un axe : une note, et la portée où elle vaut.
Definition Atlas.h:50
std::string scope
Portée, telle que le livre l'écrit. Vide si l'appréciation vaut pour toute la région.
Definition Atlas.h:53
RegionGrade grade
Definition Atlas.h:51
La population d'une région.
Definition Atlas.h:105
std::vector< RegionSpeciesShare > species
Definition Atlas.h:107
std::optional< int > otherPercent
La part que le livre range sous « others ». Absente s'il n'en donne pas.
Definition Atlas.h:109
std::optional< int > total
Definition Atlas.h:106
La part d'une espèce dans la population d'une région.
Definition Atlas.h:91
int percent
Definition Atlas.h:96
std::string species
Clé d'espèce, en anglais et au singulier. Voir la note de loadAtlas.
Definition Atlas.h:93
std::string label
Le mot du livre, tel qu'il l'écrit — « summer elves ».
Definition Atlas.h:95
Un axe de statistique régionale : une ou plusieurs appréciations (EX-CNT-061).
Definition Atlas.h:62
std::vector< RegionAppraisal > appraisals
Definition Atlas.h:63
RegionGrade grade() const
La note principale : celle de la première appréciation.
Definition Atlas.h:66
bool varies() const
Vrai si la région n'est pas uniforme sur cet axe.
Definition Atlas.h:71
Une région : un nœud du graphe de cartes.
Definition Atlas.h:129
std::string name
Definition Atlas.h:131
const RegionStatistic & statistic(RegionAxis axis) const
L'axe demandé.
Definition Atlas.h:142
RegionPopulation population
Definition Atlas.h:135
std::string faction
Definition Atlas.h:134
std::string id
Definition Atlas.h:130
std::string source
Definition Atlas.h:132
std::array< RegionStatistic, kRegionAxisCount > statistics
Les sept axes, indexés par core::RegionAxis.
Definition Atlas.h:137
std::vector< std::string > locations
Definition Atlas.h:139
std::string government
Definition Atlas.h:133
std::vector< std::string > neighbors
Definition Atlas.h:138