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

Lecture, validation et traduction en région de texture du format nom-asset.anim.json. More...

#include <AnimationCatalog.h>

Static Public Member Functions

static AnimationDescriptionResult loadFromString (std::string_view json)
 Lit une description depuis une chaîne JSON.
static AnimationDescriptionResult loadFromFile (const std::filesystem::path &path)
 Lit une description depuis un fichier.
static std::string descriptorFileName (std::string_view assetFileName)
 Nom du fichier de description associé à un asset : même nom, extension remplacée.
static AssetValidation validateAgainstTexture (const AnimationDescription &description, const std::string &fileName, int textureWidth, int textureHeight)
 Valide la cohérence entre la description et les dimensions décodées du PNG.
static core::AtlasRegion frameRegion (const AnimationDescription &description, int frameSheetIndex)
 Région (en pixels) d'une image de la spritesheet, par son indice.
static core::AtlasRegion currentFrameRegion (const AnimationDescription &description, const core::Animation &animation)
 Région de l'image courante d'une animation en cours, d'après son état (core::Animation) et la description de son asset (LOT-46 TACHE-05).

Static Public Attributes

static constexpr int FORMAT_VERSION = 1
 Version du format écrite dans le fichier, et plus élevée qui soit lue (voir hmi::SkinCatalog::FORMAT_VERSION pour le même choix de cadrage).
static constexpr float DEFAULT_FRAME_DURATION_SECONDS = 0.1f
 Durée d'image par défaut (secondes), utilisée quand un clip omet « frameDuration ».

Static Private Member Functions

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

Detailed Description

Lecture, validation et traduction en région de texture du format nom-asset.anim.json.

Logique pure (aucune dépendance GPU/Qt/fichier au-delà de la lecture elle-même) : ne réalise ni chargement PNG ni mise en cache — c'est hmi::TextureCache qui compose ce catalogue avec hmi::AssetPaths et mémoïse le résultat, exactement comme il compose déjà hmi::TextureLoader (LOT-46 TACHE-03).

Member Function Documentation

◆ currentFrameRegion()

core::AtlasRegion hmi::AnimationCatalog::currentFrameRegion ( const AnimationDescription & description,
const core::Animation & animation )
staticnodiscard

Région de l'image courante d'une animation en cours, d'après son état (core::Animation) et la description de son asset (LOT-46 TACHE-05).

Traduit animation.clipIndex/frameIndex (indices résolus par core::AnimationSystem/ core::advanceAnimation) en indice de spritesheet via AnimationClip::frames, puis en région via frameRegion. Fonction pure, sans accès au jeu de clips au-delà de ce que porte déjà animation.clips : repli sur la première image si l'animation n'a pas (ou plus) de jeu de clips valide (EX-NFR-040).

Parameters
descriptionDescription de l'asset animé (fournit frameWidth/frameHeight).
animationÉtat d'animation courant (typiquement l'horloge partagée d'un asset de tuile, LOT-46 TACHE-05).
Returns
La région à échantillonner pour l'image courante.

◆ descriptorFileName()

std::string hmi::AnimationCatalog::descriptorFileName ( std::string_view assetFileName)
staticnodiscard

Nom du fichier de description associé à un asset : même nom, extension remplacée.

Parameters
assetFileNameNom logique de l'asset (ex. « water.png »).
Returns
Le nom du descripteur (ex. « water.anim.json »).

◆ frameRegion()

core::AtlasRegion hmi::AnimationCatalog::frameRegion ( const AnimationDescription & description,
int frameSheetIndex )
staticnodiscard

Région (en pixels) d'une image de la spritesheet, par son indice.

Disposition horizontale (EX-NFR-010, fonction pure) : l'image d'indice frameSheetIndex occupe le rectangle [indice * frameWidth, 0, frameWidth, frameHeight]. Ne borne pas frameSheetIndex : c'est validateAgainstTexture qui rejette les indices hors bornes en amont, une fois les dimensions réelles connues.

Parameters
descriptionDescription fournissant frameWidth/frameHeight.
frameSheetIndexIndice de l'image dans la spritesheet (0-based).
Returns
La région correspondante.

◆ fromDocument()

AnimationDescriptionResult hmi::AnimationCatalog::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()

AnimationDescriptionResult hmi::AnimationCatalog::loadFromFile ( const std::filesystem::path & path)
staticnodiscard

Lit une description depuis un fichier.

Un fichier absent produit un échec de code FileNotFound : c'est le cas par défaut (asset non animé) et il ne doit produire aucun avertissement côté appelant — à distinguer d'un fichier présent mais invalide (EX-NFR-040).

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

◆ loadFromString()

AnimationDescriptionResult hmi::AnimationCatalog::loadFromString ( std::string_view json)
staticnodiscard

Lit une description depuis une chaîne JSON.

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

◆ validateAgainstTexture()

AssetValidation hmi::AnimationCatalog::validateAgainstTexture ( const AnimationDescription & description,
const std::string & fileName,
int textureWidth,
int textureHeight )
staticnodiscard

Valide la cohérence entre la description et les dimensions décodées du PNG.

Spritesheet horizontale (frameRegion) : la hauteur du PNG doit égaler frameHeight (un seul rang), sa largeur doit être un multiple positif de frameWidth, et chaque indice d'image référencé par un clip doit désigner une position existante dans ce rang. Séparée de la lecture JSON (loadFromString) : les dimensions réelles ne sont connues qu'après décodage du PNG, en aval (EX-REN-007, même frontière que hmi::validateAsset).

Parameters
descriptionDescription déjà lue.
fileNameNom logique de l'asset, repris dans le message d'erreur.
textureWidthLargeur décodée du PNG, en pixels.
textureHeightHauteur décodée du PNG, en pixels.
Returns
Le verdict, avec un message exploitable si non conforme.

Member Data Documentation

◆ DEFAULT_FRAME_DURATION_SECONDS

float hmi::AnimationCatalog::DEFAULT_FRAME_DURATION_SECONDS = 0.1f
staticconstexpr

Durée d'image par défaut (secondes), utilisée quand un clip omet « frameDuration ».

◆ FORMAT_VERSION

int hmi::AnimationCatalog::FORMAT_VERSION = 1
staticconstexpr

Version du format écrite dans le fichier, et plus élevée qui soit lue (voir hmi::SkinCatalog::FORMAT_VERSION pour le même choix de cadrage).


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