JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
hmi::SkinCatalog Class Reference

Catalogue des jeux de skins : (jeu, type de tuile) → { asset, mode }. More...

#include <SkinCatalog.h>

Public Member Functions

std::string toJsonString () const
bool saveToFile (const std::filesystem::path &path) const
 Écrit le catalogue dans un fichier, en créant les dossiers parents au besoin.
std::optional< SkinEntryresolve (std::string_view setName, core::TileType type) const
 Résout l'apparence d'un type de tuile dans un jeu donné.
const std::string & defaultSetName () const noexcept
bool setDefaultSetName (const std::string &setName)
 Désigne le jeu par défaut.
std::vector< std::string > setNames () const
void addSet (const std::string &setName)
 Crée un jeu vide s'il n'existe pas.
void assign (const std::string &setName, core::TileType type, SkinEntry entry)
 Assigne une apparence à un type de tuile dans un jeu, en créant le jeu au besoin.
void clearAssignment (const std::string &setName, core::TileType type)
 Retire l'assignation d'un type de tuile dans un jeu (le type redevient non skinné).
std::map< core::TileType, SkinEntryassignments (std::string_view setName) const
 Assignations d'un jeu, sans repli sur le jeu par défaut.

Static Public Member Functions

static SkinCatalogResult loadFromString (std::string_view json)
 Lit un catalogue depuis une chaîne JSON.
static SkinCatalogResult loadFromFile (const std::filesystem::path &path)
 Lit un catalogue depuis un fichier.

Static Public Attributes

static constexpr int FORMAT_VERSION = 1
 Version du format écrite dans le fichier, et plus élevée qui soit lue.

Static Private Member Functions

static SkinCatalogResult fromDocument (const core::JsonDocument &document)
 Construit le résultat depuis l'enveloppe déjà lue par core::readJsonObject.

Private Attributes

std::map< std::string, std::map< core::TileType, SkinEntry >, std::less<> > _sets
std::string _defaultSet

Detailed Description

Catalogue des jeux de skins : (jeu, type de tuile) → { asset, mode }.

Configuration de présentation, jamais donnée de simulation. Ce catalogue ne transite ni par core::Level, ni par core::LevelDraft ni son undo/redo : un changement d'habillage n'est pas une modification du niveau. Seule la désignation du jeu par un niveau relève du format de niveau, et c'est l'objet du LOT-44.

Logique pure (aucune dépendance GPU ni Qt), testable en isolation (EX-NFR-010). Aucune lecture ne lève d'exception vers l'appelant (EX-NFR-040) : toute erreur est décrite dans un hmi::SkinCatalogResult.

Member Function Documentation

◆ addSet()

void hmi::SkinCatalog::addSet ( const std::string & setName)

Crée un jeu vide s'il n'existe pas.

Parameters
setNameNom du jeu.

◆ assign()

void hmi::SkinCatalog::assign ( const std::string & setName,
core::TileType type,
SkinEntry entry )

Assigne une apparence à un type de tuile dans un jeu, en créant le jeu au besoin.

Parameters
setNameNom du jeu.
typeType de tuile.
entryApparence à assigner.

◆ assignments()

std::map< core::TileType, SkinEntry > hmi::SkinCatalog::assignments ( std::string_view setName) const
nodiscard

Assignations d'un jeu, sans repli sur le jeu par défaut.

Parameters
setNameNom du jeu.
Returns
Les entrées du jeu, ordonnées par type ; vide si le jeu n'existe pas.

◆ clearAssignment()

void hmi::SkinCatalog::clearAssignment ( const std::string & setName,
core::TileType type )

Retire l'assignation d'un type de tuile dans un jeu (le type redevient non skinné).

Parameters
setNameNom du jeu.
typeType de tuile.

◆ defaultSetName()

const std::string & hmi::SkinCatalog::defaultSetName ( ) const
inlinenodiscardnoexcept
Returns
Le nom du jeu par défaut (vide si le catalogue ne contient aucun jeu).

◆ fromDocument()

SkinCatalogResult hmi::SkinCatalog::fromDocument ( const core::JsonDocument & document)
staticnodiscardprivate

Construit le résultat depuis l'enveloppe déjà lue par core::readJsonObject.

JSON bien formé, racine objet et garde de version sont vérifiés avant d'arriver ici : c'est la brique partagée du LOT-79 (EX-CNT-012), et ce catalogue n'a plus à les réimplémenter pour son compte.

◆ loadFromFile()

SkinCatalogResult hmi::SkinCatalog::loadFromFile ( const std::filesystem::path & path)
staticnodiscard

Lit un catalogue depuis un fichier.

Un fichier absent produit un échec de code FileNotFound : c'est à l'appelant de décider qu'un catalogue vide est un état de départ légitime (ce qu'il est), car lui seul sait s'il attendait un fichier livré ou une configuration utilisateur pas encore écrite.

Parameters
pathChemin du fichier.
Returns
Le catalogue, ou une erreur décrite. Ne lève jamais.

◆ loadFromString()

SkinCatalogResult hmi::SkinCatalog::loadFromString ( std::string_view json)
staticnodiscard

Lit un catalogue depuis une chaîne JSON.

Parameters
jsonContenu JSON.
Returns
Le catalogue, ou une erreur décrite. Ne lève jamais.

◆ resolve()

std::optional< SkinEntry > hmi::SkinCatalog::resolve ( std::string_view setName,
core::TileType type ) const
nodiscard

Résout l'apparence d'un type de tuile dans un jeu donné.

Repli sur le jeu par défaut si setName ne désigne aucun jeu : un niveau qui référence un jeu supprimé doit rester affichable, dégradé plutôt qu'illisible (EX-NFR-040).

Parameters
setNameNom du jeu voulu. Vide pour demander explicitement le jeu par défaut.
typeType de tuile.
Returns
L'entrée assignée, ou std::nullopt si le type n'est pas skinné — auquel cas l'appelant affiche le damier de repli (hmi::MissingTexture).

◆ saveToFile()

bool hmi::SkinCatalog::saveToFile ( const std::filesystem::path & path) const
nodiscard

Écrit le catalogue dans un fichier, en créant les dossiers parents au besoin.

Parameters
pathChemin de destination (typiquement executableDirectory()/Assets/skins.json).
Returns
true si l'écriture a réussi. Ne lève jamais.

◆ setDefaultSetName()

bool hmi::SkinCatalog::setDefaultSetName ( const std::string & setName)
nodiscard

Désigne le jeu par défaut.

Parameters
setNameNom du jeu. Sans effet si aucun jeu ne porte ce nom.
Returns
true si le jeu existe et a été retenu.

◆ setNames()

std::vector< std::string > hmi::SkinCatalog::setNames ( ) const
nodiscard
Returns
Les noms des jeux, par ordre alphabétique (ordre stable d'affichage et d'écriture).

◆ toJsonString()

std::string hmi::SkinCatalog::toJsonString ( ) const
nodiscard
Returns
La représentation JSON du catalogue, relisible par loadFromString.

Member Data Documentation

◆ _defaultSet

std::string hmi::SkinCatalog::_defaultSet
private

◆ _sets

std::map<std::string, std::map<core::TileType, SkinEntry>, std::less<> > hmi::SkinCatalog::_sets
private

◆ FORMAT_VERSION

int hmi::SkinCatalog::FORMAT_VERSION = 1
staticconstexpr

Version du format écrite dans le fichier, et plus élevée qui soit lue.

Le champ est présent dès la création du format : l'ajouter coûte une ligne aujourd'hui, une migration une fois des fichiers dans la nature. Un fichier de version supérieure est refusé plutôt que lu au mieux — c'est précisément ce que le champ sert à éviter.


The documentation for this class was generated from the following files:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Graphics/SkinCatalog.h
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Graphics/SkinCatalog.cpp