JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
Equipment.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 <filesystem>
12#include <optional>
13#include <string>
14#include <string_view>
15#include <vector>
16
17#include "Core/Rpg/Dice.h"
18#include "Core/Rpg/RpgEnums.h"
19
20namespace core {
21
22struct CharacterSheet;
24
36
38struct Armor {
39 std::string id;
40 std::string name;
41 std::string source;
46 bool dexterityBonus = false;
48 std::optional<int> dexterityBonusMax;
50 std::optional<int> strengthRequired;
51 bool stealthDisadvantage = false;
53 int price = 0;
55 int weightGrams = 0;
56};
57
59struct Weapon {
60 std::string id;
61 std::string name;
62 std::string source;
64 std::string category;
65 bool ranged = false;
67 std::optional<Dice> damage;
68 std::optional<DamageType> damageType;
69 int price = 0;
70 int weightGrams = 0;
72 std::string text;
77 std::vector<std::string> properties;
78};
79
82 std::vector<Weapon> weapons;
83 std::vector<Armor> armors;
84 std::vector<std::string> errors;
85
86 [[nodiscard]] const Weapon* findWeapon(std::string_view id) const;
87 [[nodiscard]] const Armor* findArmor(std::string_view id) const;
88};
89
91[[nodiscard]] EquipmentCatalog loadEquipment(const std::filesystem::path& weaponsDir,
92 const std::filesystem::path& armorsDir);
93
115[[nodiscard]] int armorClassFor(const CharacterSheet& sheet, const CharacterCreationRules& rules,
116 const Armor* armor, const Armor* shield);
117
121 int weightGrams = 0;
123 int quantity = 1;
124};
125
134[[nodiscard]] int totalWeightGrams(const std::vector<InventoryEntry>& entries);
135
137[[nodiscard]] std::string_view armorCategoryName(ArmorCategory category);
139[[nodiscard]] std::optional<ArmorCategory> parseArmorCategory(std::string_view name);
140
141} // namespace core
Notation de dés NdF+M : analyse, évaluation, bornes (EX-NFR-002).
Les quatre énumérations fermées du RPG : dégâts, conditions, écoles, tailles.
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
EquipmentCatalog loadEquipment(const std::filesystem::path &weaponsDir, const std::filesystem::path &armorsDir)
Charge les armes et les armures depuis leurs dossiers.
Definition Equipment.cpp:99
ArmorCategory
Catégorie d'armure. Ensemble fermé : le livre n'en connaît pas d'autre.
Definition Equipment.h:26
@ Medium
Definition Equipment.h:28
@ Shield
Le bouclier n'est pas une armure : il ajoute à la classe d'armure au lieu de la remplacer.
Definition Equipment.h:34
@ Light
Definition Equipment.h:27
@ Heavy
Definition Equipment.h:29
std::string_view armorCategoryName(ArmorCategory category)
Nom textuel d'une catégorie d'armure, tel que la donnée l'écrit.
Definition Equipment.cpp:64
std::optional< ArmorCategory > parseArmorCategory(std::string_view name)
Inverse d'armorCategoryName. std::nullopt si le nom est inconnu — jamais deviné.
Definition Equipment.cpp:79
int armorClassFor(const CharacterSheet &sheet, const CharacterCreationRules &rules, const Armor *armor, const Armor *shield)
La classe d'armure d'un personnage, armure et bouclier compris.
Definition Equipment.cpp:175
int totalWeightGrams(const std::vector< InventoryEntry > &entries)
Le poids total d'un inventaire, en grammes.
Definition Equipment.cpp:203
Une armure ou un bouclier du catalogue.
Definition Equipment.h:38
bool stealthDisadvantage
Definition Equipment.h:51
bool dexterityBonus
Vrai si le modificateur de Dextérité s'ajoute.
Definition Equipment.h:46
int weightGrams
Poids en grammes.
Definition Equipment.h:55
int price
Prix en pièces de cuivre — l'unité interne du projet (LOT-32).
Definition Equipment.h:53
std::optional< int > strengthRequired
Force exigée pour ne pas être ralenti. Absente si l'armure n'en demande pas.
Definition Equipment.h:50
std::optional< int > dexterityBonusMax
Plafond du modificateur de Dextérité, s'il y en a un (+2 sur les armures intermédiaires).
Definition Equipment.h:48
ArmorCategory category
Definition Equipment.h:42
std::string source
Definition Equipment.h:41
std::string id
Definition Equipment.h:39
int baseArmorClass
Classe d'armure de base — ou le bonus du bouclier, qui s'ajoute.
Definition Equipment.h:44
std::string name
Definition Equipment.h:40
Les deux constantes de règle qu'une fiche emploie, lues dans la donnée.
Definition CharacterSheet.h:67
La fiche d'une créature jouable ou non : héros, PNJ, ennemi.
Definition CharacterSheet.h:102
Les deux catalogues chargés, et ce qui n'a pas pu l'être.
Definition Equipment.h:81
std::vector< Weapon > weapons
Definition Equipment.h:82
std::vector< std::string > errors
Definition Equipment.h:84
const Armor * findArmor(std::string_view id) const
Definition Equipment.cpp:94
const Weapon * findWeapon(std::string_view id) const
Definition Equipment.cpp:89
std::vector< Armor > armors
Definition Equipment.h:83
Une ligne d'inventaire : un objet et sa quantité.
Definition Equipment.h:119
int weightGrams
Poids unitaire, en grammes.
Definition Equipment.h:121
int quantity
Quantité. Une quantité nulle ou négative ne pèse rien.
Definition Equipment.h:123
Une arme du catalogue.
Definition Equipment.h:59
std::string id
Definition Equipment.h:60
int price
Definition Equipment.h:69
std::string source
Definition Equipment.h:62
std::string category
simple ou martial.
Definition Equipment.h:64
std::string name
Definition Equipment.h:61
std::optional< Dice > damage
Dés de dégâts. Absents pour le filet, qui n'inflige rien et entrave.
Definition Equipment.h:67
std::optional< DamageType > damageType
Definition Equipment.h:68
std::vector< std::string > properties
Les mêmes, structurées (finesse, light, thrown...).
Definition Equipment.h:77
std::string text
Les propriétés, telles que le livre les écrit — en toutes lettres, et en français.
Definition Equipment.h:72
bool ranged
Definition Equipment.h:65
int weightGrams
Definition Equipment.h:70