JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
Inventory.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
11
12#include <array>
13#include <filesystem>
14#include <optional>
15#include <string>
16#include <string_view>
17#include <vector>
18
19#include "Core/Rpg/Ability.h"
20#include "Core/Rpg/Dice.h"
21#include "Core/Rpg/Equipment.h"
22#include "Core/Rpg/RpgEnums.h"
23
24namespace core {
25
26struct CharacterSheet;
28
31struct Item {
32 std::string id;
33 std::string name;
34 std::string source;
36 std::string category;
38 int price = 0;
41 int weightGrams = 0;
43 bool stackable = false;
44 std::string rarity;
45 bool requiresAttunement = false;
46 std::string text;
47};
48
51 std::vector<Item> items;
52 std::vector<std::string> errors;
53
54 [[nodiscard]] const Item* find(std::string_view id) const;
55};
56
58[[nodiscard]] ItemCatalog loadItems(const std::filesystem::path& itemsDir);
59
80
83[[nodiscard]] EncumbranceRules loadEncumbranceRules(const std::filesystem::path& rulesFile);
84
92
117
119inline constexpr std::size_t EQUIPMENT_SLOT_COUNT = 16;
120
122[[nodiscard]] std::string_view equipmentSlotName(EquipmentSlot slot);
124[[nodiscard]] std::optional<EquipmentSlot> parseEquipmentSlot(std::string_view name);
125
128 std::string itemId;
129 int quantity = 1;
130};
131
147struct Inventory {
149 std::array<std::string, EQUIPMENT_SLOT_COUNT> equipped{};
151 std::vector<InventoryStack> backpack;
153 int purseCopper = 0;
154
156 [[nodiscard]] const std::string& at(EquipmentSlot slot) const {
157 return equipped[static_cast<std::size_t>(slot)];
158 }
159
160 [[nodiscard]] bool isEquipped(EquipmentSlot slot) const {
161 return !at(slot).empty();
162 }
163};
164
175std::string equip(Inventory& inventory, EquipmentSlot slot, std::string itemId);
176
178std::string unequip(Inventory& inventory, EquipmentSlot slot);
179
181void addToBackpack(Inventory& inventory, const std::string& itemId, int quantity = 1);
182
184int removeFromBackpack(Inventory& inventory, const std::string& itemId, int quantity = 1);
185
188 const ItemCatalog* items = nullptr;
189 const EquipmentCatalog* equipment = nullptr;
190
194 [[nodiscard]] int weightGramsOf(std::string_view id) const;
195};
196
198[[nodiscard]] int carriedWeightGrams(const Inventory& inventory, const ItemLookup& lookup);
199
202[[nodiscard]] std::vector<std::string> unknownIds(const Inventory& inventory,
203 const ItemLookup& lookup);
204
228
239[[nodiscard]] DerivedStats derivedStatsFor(const CharacterSheet& sheet, const Inventory& inventory,
240 const ItemLookup& lookup,
241 const CharacterCreationRules& creation,
242 const EncumbranceRules& carrying);
243
244} // namespace core
Les six caractéristiques et leur modificateur (EX-DND-010).
Notation de dés NdF+M : analyse, évaluation, bornes (EX-NFR-002).
Armes, armures et le calcul de la classe d'armure (LOT-34).
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
ItemCatalog loadItems(const std::filesystem::path &itemsDir)
Charge les objets depuis leur dossier (Rpg/items/).
Definition Inventory.cpp:88
std::vector< std::string > unknownIds(const Inventory &inventory, const ItemLookup &lookup)
Les identifiants que les catalogues ne portent pas — un sac qui en contient ne pèse pas ce qu'il devr...
Definition Inventory.cpp:237
std::optional< EquipmentSlot > parseEquipmentSlot(std::string_view name)
Inverse d'equipmentSlotName. std::nullopt si le nom est inconnu — jamais deviné.
Definition Inventory.cpp:74
std::string equip(Inventory &inventory, EquipmentSlot slot, std::string itemId)
Équipe itemId à slot, et rend ce que l'emplacement portait.
Definition Inventory.cpp:147
EncumbranceRules loadEncumbranceRules(const std::filesystem::path &rulesFile)
Charge les bornes de charge depuis rules/encumbrance.json.
Definition Inventory.cpp:129
std::string_view equipmentSlotName(EquipmentSlot slot)
Nom textuel d'un emplacement, tel que la donnée et les clés de traduction l'écrivent.
Definition Inventory.cpp:65
void addToBackpack(Inventory &inventory, const std::string &itemId, int quantity)
Ajoute quantity exemplaires de itemId au sac, en empilant si la ligne existe déjà.
Definition Inventory.cpp:157
int removeFromBackpack(Inventory &inventory, const std::string &itemId, int quantity)
Retire quantity exemplaires de itemId.
Definition Inventory.cpp:169
Ability
Une des six caractéristiques d'un personnage ou d'une créature (EX-DND-010).
Definition Ability.h:24
@ Strength
Definition Ability.h:25
std::string unequip(Inventory &inventory, EquipmentSlot slot)
Retire ce que slot porte.
Definition Inventory.cpp:153
DerivedStats derivedStatsFor(const CharacterSheet &sheet, const Inventory &inventory, const ItemLookup &lookup, const CharacterCreationRules &creation, const EncumbranceRules &carrying)
Calcule tout ce que l'équipement porté produit, depuis la fiche et les catalogues.
Definition Inventory.cpp:255
constexpr std::size_t EQUIPMENT_SLOT_COUNT
Nombre d'emplacements, pour dimensionner les tableaux qui les indexent.
Definition Inventory.h:119
int carriedWeightGrams(const Inventory &inventory, const ItemLookup &lookup)
Le poids total porté, sac et équipement compris, en grammes.
Definition Inventory.cpp:224
EncumbranceLevel
État de charge d'un personnage, dans l'ordre croissant de gêne.
Definition Inventory.h:86
@ HeavilyEncumbered
Au-delà du second : vitesse diminuée davantage, et désavantage.
Definition Inventory.h:89
@ Encumbered
Au-delà du premier seuil : vitesse diminuée.
Definition Inventory.h:88
@ OverCapacity
Au-delà de la capacité de charge : il ne peut plus porter.
Definition Inventory.h:90
@ Unencumbered
Rien ne le ralentit.
Definition Inventory.h:87
EquipmentSlot
Les seize emplacements d'équipement de la planche 2 du corpus.
Definition Inventory.h:99
@ Feet
Definition Inventory.h:112
@ Ammunition
Definition Inventory.h:111
@ MainHand
Definition Inventory.h:108
@ RingRight
Definition Inventory.h:107
@ Cloak
Definition Inventory.h:102
@ OffHand
Definition Inventory.h:109
@ RingLeft
Definition Inventory.h:106
@ Pouch
Definition Inventory.h:114
@ Neck
Definition Inventory.h:101
@ Torso
Definition Inventory.h:103
@ Head
Definition Inventory.h:100
@ Trinket
Definition Inventory.h:115
@ Hands
Definition Inventory.h:105
@ Ranged
Definition Inventory.h:110
@ Belt
Definition Inventory.h:104
@ Bracers
Definition Inventory.h:113
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
Ce que l'équipement porté produit — recalculé, jamais accumulé.
Definition Inventory.h:212
Ability attackAbility
Caractéristique du jet d'attaque : Force au corps à corps, Dextérité à distance.
Definition Inventory.h:220
std::optional< Dice > damage
Dés de dégâts de l'arme en main directrice.
Definition Inventory.h:217
int carryingCapacityGrams
Definition Inventory.h:223
int carriedWeightGrams
Poids porté, en grammes, et la charge qui en découle.
Definition Inventory.h:222
int armorClass
Classe d'armure, armure et bouclier compris (core::armorClassFor, LOT-34).
Definition Inventory.h:214
EncumbranceLevel encumbrance
Definition Inventory.h:224
float speedMeters
Vitesse une fois la charge retirée, en mètres. Jamais négative.
Definition Inventory.h:226
std::optional< DamageType > damageType
Definition Inventory.h:218
Les bornes de charge, lues dans la donnée (rules/encumbrance.json).
Definition Inventory.h:67
float encumberedSpeedPenaltyMeters
Definition Inventory.h:71
int carryingCapacityGramsPerStrength
Definition Inventory.h:68
bool isLoaded() const noexcept
Definition Inventory.h:76
int heavilyEncumberedGramsPerStrength
Definition Inventory.h:70
int encumberedGramsPerStrength
Definition Inventory.h:69
float heavilyEncumberedSpeedPenaltyMeters
Definition Inventory.h:72
Les deux catalogues chargés, et ce qui n'a pas pu l'être.
Definition Equipment.h:81
Une ligne du sac : un identifiant de catalogue et une quantité.
Definition Inventory.h:127
int quantity
Definition Inventory.h:129
std::string itemId
Definition Inventory.h:128
Ce qu'un personnage porte : son sac, et ce qu'il a sur lui.
Definition Inventory.h:147
int purseCopper
Bourse, en pièces de cuivre — la même unité que les prix du catalogue.
Definition Inventory.h:153
const std::string & at(EquipmentSlot slot) const
Definition Inventory.h:156
std::vector< InventoryStack > backpack
Le sac, dans l'ordre où il a été rempli.
Definition Inventory.h:151
bool isEquipped(EquipmentSlot slot) const
Definition Inventory.h:160
std::array< std::string, EQUIPMENT_SLOT_COUNT > equipped
L'équipement porté, par emplacement : un identifiant de catalogue, ou une chaîne vide.
Definition Inventory.h:149
Le catalogue d'objets, et ce qui n'a pas pu être lu.
Definition Inventory.h:50
std::vector< std::string > errors
Definition Inventory.h:52
std::vector< Item > items
Definition Inventory.h:51
const Item * find(std::string_view id) const
Definition Inventory.cpp:83
Les trois catalogues qu'un inventaire consulte pour peser et pour dériver.
Definition Inventory.h:187
const EquipmentCatalog * equipment
Definition Inventory.h:189
int weightGramsOf(std::string_view id) const
Definition Inventory.cpp:185
const ItemCatalog * items
Definition Inventory.h:188
Un objet du catalogue qui n'est ni une arme ni une armure : matériel, outil, monture,...
Definition Inventory.h:31
std::string name
Definition Inventory.h:33
std::string text
Definition Inventory.h:46
int weightGrams
Poids en grammes.
Definition Inventory.h:41
std::string rarity
Definition Inventory.h:44
bool requiresAttunement
Definition Inventory.h:45
std::string id
Definition Inventory.h:32
int price
Prix en pièces de cuivre — l'unité interne du projet (LOT-32).
Definition Inventory.h:38
bool stackable
Vrai si plusieurs exemplaires se rangent dans une même ligne d'inventaire.
Definition Inventory.h:43
std::string source
Definition Inventory.h:34
std::string category
Famille d'usage, telle que la donnée l'écrit (gear, tool, mount...).
Definition Inventory.h:36