JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
CharacterSheet.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 <filesystem>
14#include <set>
15#include <string>
16#include <string_view>
17#include <vector>
18
19#include "Core/Rpg/Ability.h"
21#include "Core/Rpg/Inventory.h"
22#include "Core/Rpg/Skill.h"
23
24namespace core {
25
32 int level = 0;
33 int experience = 0;
35};
36
46 std::vector<ExperienceLevel> levels;
47 std::vector<std::string> errors;
48
50 [[nodiscard]] int levelFor(int experiencePoints) const;
52 [[nodiscard]] int proficiencyBonusAt(int level) const;
54 [[nodiscard]] int thresholdAt(int level) const;
56 [[nodiscard]] int maximumLevel() const;
57};
58
70 std::vector<std::string> errors;
71
73 [[nodiscard]] bool ok() const {
75 }
76};
77
79[[nodiscard]] CharacterCreationRules loadCharacterCreationRules(const std::filesystem::path& path);
80
82[[nodiscard]] ExperienceTable loadExperienceTable(const std::filesystem::path& path);
83
103 std::string name;
106 std::string speciesId;
107 std::string classId;
108 std::string backgroundId;
109
111 std::array<int, 6> abilities{};
112
113 int level = 1;
117 int armorClass = 0;
119 float speedMeters = 0.0F;
120
122 std::set<std::string> skillProficiencies;
124 std::set<Ability> savingThrowProficiencies;
125
127 [[nodiscard]] int ability(Ability which) const {
128 return abilities[static_cast<std::size_t>(which)];
129 }
130
131 [[nodiscard]] int modifier(Ability which) const {
132 return abilityModifier(ability(which));
133 }
134
135 [[nodiscard]] bool isDown() const {
136 return currentHitPoints <= 0;
137 }
138
139 [[nodiscard]] float speedInTiles() const;
140};
141
150 int newLevel = 0;
154
156 [[nodiscard]] bool gainedLevel() const {
157 return newLevel > previousLevel;
158 }
159};
160
174 std::vector<std::string> errors;
175
176 [[nodiscard]] bool ok() const {
177 return errors.empty();
178 }
179};
180
198[[nodiscard]] LoadedCharacterSheet loadCharacterSheet(const std::filesystem::path& path,
199 const CharacterOptions& options,
200 const CharacterCreationRules& rules,
201 const ExperienceTable& table);
202
204[[nodiscard]] int proficiencyBonus(const CharacterSheet& sheet, const ExperienceTable& table);
205
210[[nodiscard]] int savingThrowModifier(const CharacterSheet& sheet, const ExperienceTable& table,
211 Ability which);
212
221 int value = 0;
222 bool found = false;
223 bool proficient = false;
224};
225[[nodiscard]] SkillCheckModifier skillModifier(const CharacterSheet& sheet,
226 const ExperienceTable& table,
227 const SkillCatalog& catalog,
228 std::string_view skillId);
229
247[[nodiscard]] int maximumHitPointsFor(int hitDie, int level, int constitutionModifier);
248
264LevelUpResult gainExperience(CharacterSheet& sheet, const ExperienceTable& table, int hitDie,
265 int amount);
266
284 std::string name, const std::array<int, 6>& baseAbilities, const Species* species,
285 const PlayableClass* playableClass, const Background* background,
286 const CharacterCreationRules& rules, const ExperienceTable& table);
287
288} // namespace core
Les six caractéristiques et leur modificateur (EX-DND-010).
Espèces, historiques et classes : de quoi construire un personnage (LOT-36).
Objets portés, emplacements d'équipement et statistiques dérivées (LOT-14, EX-INV-020).
Le catalogue des compétences et la caractéristique de chacune (LOT-13).
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
ExperienceTable loadExperienceTable(const std::filesystem::path &path)
Charge la table d'expérience depuis Source/Elements/Rpg/rules/experience.json.
Definition CharacterSheet.cpp:80
SkillCheckModifier skillModifier(const CharacterSheet &sheet, const ExperienceTable &table, const SkillCatalog &catalog, std::string_view skillId)
Definition CharacterSheet.cpp:256
int savingThrowModifier(const CharacterSheet &sheet, const ExperienceTable &table, Ability which)
Le modificateur d'un jet de sauvegarde : caractéristique, plus la maîtrise si elle s'applique.
Definition CharacterSheet.cpp:250
LoadedCharacterSheet loadCharacterSheet(const std::filesystem::path &path, const CharacterOptions &options, const CharacterCreationRules &rules, const ExperienceTable &table)
Charge un personnage depuis son fichier JSON (Source/Elements/Rpg/characters/, schéma character....
Definition CharacterSheet.cpp:111
LevelUpResult gainExperience(CharacterSheet &sheet, const ExperienceTable &table, int hitDie, int amount)
Ajoute des points d'expérience et applique la montée de niveau qui en découle.
Definition CharacterSheet.cpp:288
Ability
Une des six caractéristiques d'un personnage ou d'une créature (EX-DND-010).
Definition Ability.h:24
constexpr int abilityModifier(int score) noexcept
Modificateur d'une valeur de caractéristique : (score - 10) / 2, arrondi vers le bas.
Definition Ability.h:49
int proficiencyBonus(const CharacterSheet &sheet, const ExperienceTable &table)
Le bonus de maîtrise de la fiche, lu dans la table au niveau courant.
Definition CharacterSheet.cpp:246
CharacterSheet buildCharacterSheet(std::string name, const std::array< int, 6 > &baseAbilities, const Species *species, const PlayableClass *playableClass, const Background *background, const CharacterCreationRules &rules, const ExperienceTable &table)
Construit une fiche depuis une espèce, une classe et un historique.
Definition CharacterSheet.cpp:322
int maximumHitPointsFor(int hitDie, int level, int constitutionModifier)
Les points de vie d'un niveau, selon la règle du livre.
Definition CharacterSheet.cpp:272
CharacterCreationRules loadCharacterCreationRules(const std::filesystem::path &path)
Charge les constantes depuis Source/Elements/Rpg/rules/character-creation.json.
Definition CharacterSheet.cpp:26
Un historique : maîtrises, langues accordées et capacité.
Definition CharacterOptions.h:74
Les deux constantes de règle qu'une fiche emploie, lues dans la donnée.
Definition CharacterSheet.h:67
int unarmoredArmorClass
Definition CharacterSheet.h:68
bool ok() const
Vrai si les deux valeurs ont été lues. Une règle absente ne se devine pas.
Definition CharacterSheet.h:73
int maximumAbilityScore
Definition CharacterSheet.h:69
std::vector< std::string > errors
Definition CharacterSheet.h:70
La fiche d'une créature jouable ou non : héros, PNJ, ennemi.
Definition CharacterSheet.h:102
int ability(Ability which) const
La valeur d'une caractéristique.
Definition CharacterSheet.h:127
std::string classId
Definition CharacterSheet.h:107
bool isDown() const
Vrai si la fiche est tombée à 0 point de vie.
Definition CharacterSheet.h:135
float speedInTiles() const
La vitesse en cases de la grille tactique (LOT-19, LOT-22).
Definition CharacterSheet.cpp:242
std::string name
Definition CharacterSheet.h:103
std::set< Ability > savingThrowProficiencies
Jets de sauvegarde maîtrisés.
Definition CharacterSheet.h:124
int modifier(Ability which) const
Le modificateur d'une caractéristique.
Definition CharacterSheet.h:131
int currentHitPoints
Definition CharacterSheet.h:116
std::string speciesId
Identifiants des trois choix qui ont construit la fiche.
Definition CharacterSheet.h:106
int experiencePoints
Definition CharacterSheet.h:114
int armorClass
Definition CharacterSheet.h:117
float speedMeters
Vitesse de base, en mètres — l'unité du corpus. speedInTiles() la convertit.
Definition CharacterSheet.h:119
std::set< std::string > skillProficiencies
Compétences maîtrisées, par identifiant du catalogue.
Definition CharacterSheet.h:122
std::string backgroundId
Definition CharacterSheet.h:108
int maximumHitPoints
Definition CharacterSheet.h:115
std::array< int, 6 > abilities
Les six valeurs finales, augmentations d'espèce comprises, indexées par core::Ability.
Definition CharacterSheet.h:111
int level
Definition CharacterSheet.h:113
Une ligne de la table d'expérience : le seuil d'un niveau et son bonus de maîtrise.
Definition CharacterSheet.h:31
int experience
Definition CharacterSheet.h:33
int proficiencyBonus
Definition CharacterSheet.h:34
int level
Definition CharacterSheet.h:32
La table d'expérience, du niveau 1 au niveau 20.
Definition CharacterSheet.h:45
int thresholdAt(int level) const
Le seuil d'expérience d'un niveau. 0 si la table ne le porte pas.
Definition CharacterSheet.cpp:67
int maximumLevel() const
Le niveau le plus élevé que la table porte.
Definition CharacterSheet.cpp:72
std::vector< ExperienceLevel > levels
Definition CharacterSheet.h:46
int levelFor(int experiencePoints) const
Le niveau qu'atteint un total de points d'expérience.
Definition CharacterSheet.cpp:52
std::vector< std::string > errors
Definition CharacterSheet.h:47
int proficiencyBonusAt(int level) const
Le bonus de maîtrise d'un niveau. 0 si la table ne le porte pas.
Definition CharacterSheet.cpp:62
Ce qu'un personnage porte : son sac, et ce qu'il a sur lui.
Definition Inventory.h:147
Ce qu'une montée de niveau a produit — de quoi le dire au joueur (EX-DND-003).
Definition CharacterSheet.h:148
int hitPointsGained
Definition CharacterSheet.h:151
int previousProficiencyBonus
Definition CharacterSheet.h:152
int newLevel
Definition CharacterSheet.h:150
int previousLevel
Definition CharacterSheet.h:149
int newProficiencyBonus
Definition CharacterSheet.h:153
bool gainedLevel() const
Vrai si un niveau au moins a été gagné.
Definition CharacterSheet.h:156
Une fiche chargée depuis un fichier, et ce qui n'a pas pu l'être.
Definition CharacterSheet.h:168
CharacterSheet sheet
Definition CharacterSheet.h:169
std::vector< std::string > errors
Definition CharacterSheet.h:174
bool ok() const
Definition CharacterSheet.h:176
Inventory inventory
Ce que le personnage PORTE (LOT-14), lu dans le même fichier.
Definition CharacterSheet.h:173
Une classe jouable et sa table de progression.
Definition CharacterOptions.h:101
Les compétences chargées, et ce qui n'a pas pu l'être.
Definition Skill.h:35
Le modificateur d'un jet de compétence.
Definition CharacterSheet.h:220
bool proficient
Definition CharacterSheet.h:223
bool found
Definition CharacterSheet.h:222
int value
Definition CharacterSheet.h:221
Une espèce jouable : ce que species.schema.json décrit.
Definition CharacterOptions.h:52