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

Dessine la grille d'un core::LevelDraft en cours d'édition. More...

#include <DraftRenderer.h>

Public Member Functions

 DraftRenderer (SpriteBatch &batch, const TextureAtlas &atlas, TextureCache &cache)
void render (const core::LevelDraft &draft, const Camera2D &camera, bool showGrid, const std::optional< std::pair< core::GridPosition, core::GridPosition > > &highlight, const LinkOverlayState &linkOverlay, RenderMode mode, bool showTextureOverrides=false, float deltaSeconds=0.0f, const LayerVisibility &visibility={}, const PlaneVisibility &planeVisibility={})
 Rend le brouillon avec la caméra donnée (reconstruit la scène si invalidée).
void setPlanesDirectory (std::filesystem::path directory)
 Fixe le dossier où résoudre les images de plans (Levels/Plans), comme hmi::SpriteRenderer::setPlanesDirectory.
void invalidate () noexcept
 Marque la scène comme périmée : elle sera reconstruite au prochain render (à appeler après toute mutation du brouillon — peinture, undo/redo, chargement, redimensionnement).
const ComposedScenelastScene () const noexcept
void setSkins (const SkinCatalog *skins, std::string skinSet={})
 Désigne le catalogue de skins et le jeu à utiliser en mode Texture (LOT-42).

Private Member Functions

void rebuild (const core::LevelDraft &draft)
void composeGrid (const core::LevelDraft &draft)
 Compose la grille de repère (frontières de cases + de salles) sur le calque d'édition.
void composeCameraFraming (const core::LevelDraft &draft)
 Compose la prévisualisation du cadrage de caméra du niveau (EX-EDIT-028, LOT-64) sur le calque d'édition : le cadre du niveau entier, la grille de salles à taille résolue (hmi::RoomGrid), ou le rectangle visible et la zone morte matérialisée du mode suivi (centré sur l'entrée).
void composeLinks (const core::LevelDraft &draft, const LinkOverlayState &overlay)
 Compose les liens de mécanismes (flèches déclencheur → cible) sur le calque d'édition.
SpriteQuad solidOverlayQuad (const core::Rect &rect, float r, float g, float b, float a) const
 Compose la course aller-retour de chaque danger mobile (EX-GP-051) sur le calque Compose les poignées de handles (carrés double ton, même patron que celles des décors).
void composeHighlight (const core::GridPosition &minimum, const core::GridPosition &maximum)
 Compose le voile d'aperçu d'une zone (outil Rectangle/Sélection) sur le calque d'édition.
void composeTextureOverrideMarkers (const core::LevelDraft &draft)
 Signale les cases portant une surcharge de texture par instance sur le calque d'édition (EX-EDIT-043, LOT-45).

Private Attributes

std::filesystem::path _planesDirectory
 Dossier des images de plans (setPlanesDirectory), vide tant qu'aucun n'est fixé.
SpriteBatch_batch
const TextureAtlas_atlas
TextureCache_cache
const SkinCatalog_skins = nullptr
std::string _skinSet
ComposedScene _scene
core::World _world
bool _dirty = true
std::unordered_map< std::string, core::Animation_tileAnimations
 Horloge d'animation partagee par asset (LOT-46 TACHE-05), avancee en temps reel a chaque render() – distincte de celle de GameSession (pas fixe) : l'apercu d'edition n'a pas besoin d'etre deterministe.
std::set< std::string > _warnedExcludedAnimations
 Assets deja signales pour une combinaison exclue (bitmask16/silhouette + animation) : memorise pour ne jamais journaliser a chaque image.

Detailed Description

Dessine la grille d'un core::LevelDraft en cours d'édition.

Réutilise le pipeline de rendu du jeu : chaque tuile non vide du brouillon devient une entité (Transform + Sprite) d'un core::World interne, composée par hmi::composeWorldSprites (lecture seule, EX-ARCH-012). Le core::World n'est reconstruit que lorsque le brouillon change (invalidate()), pas à chaque frame. Les blocs à taille réduite sont dessinés à leur échelle réelle (core::tileVisualScale), comme en jeu — cohérence visuelle stricte.

Depuis LOT-40, toutes les primitives d'une image (tuiles, grille de repère, liens de mécanismes, aperçu de sélection) sont composées dans une seule hmi::ComposedScene puis soumises en bloc : les aides d'édition portent le calque RenderLayer::EditorOverlay, qui les place au-dessus de tout le reste par construction plutôt que par l'ordre des appels de dessin. La liste obtenue est donc inspectable sans GPU (EX-NFR-004) et soumise au culling (EX-NFR-005).

Constructor & Destructor Documentation

◆ DraftRenderer()

hmi::DraftRenderer::DraftRenderer ( SpriteBatch & batch,
const TextureAtlas & atlas,
TextureCache & cache )

Member Function Documentation

◆ composeCameraFraming()

void hmi::DraftRenderer::composeCameraFraming ( const core::LevelDraft & draft)
private

Compose la prévisualisation du cadrage de caméra du niveau (EX-EDIT-028, LOT-64) sur le calque d'édition : le cadre du niveau entier, la grille de salles à taille résolue (hmi::RoomGrid), ou le rectangle visible et la zone morte matérialisée du mode suivi (centré sur l'entrée).

Composée inconditionnellement, comme les liens de mécanismes et les poignées de décors — pas une aide de placement (showGrid), une information sur ce que montrera la caméra en jeu.

◆ composeGrid()

void hmi::DraftRenderer::composeGrid ( const core::LevelDraft & draft)
private

Compose la grille de repère (frontières de cases + de salles) sur le calque d'édition.

Si accentuate, les lignes sont plus opaques — indication visuelle de l'aimantation active du geste de décors (LOT-50 TACHE-03), sinon l'auteur ne comprend pas pourquoi sa position « saute ».

◆ composeHighlight()

void hmi::DraftRenderer::composeHighlight ( const core::GridPosition & minimum,
const core::GridPosition & maximum )
private

Compose le voile d'aperçu d'une zone (outil Rectangle/Sélection) sur le calque d'édition.

◆ composeLinks()

void hmi::DraftRenderer::composeLinks ( const core::LevelDraft & draft,
const LinkOverlayState & overlay )
private

Compose les liens de mécanismes (flèches déclencheur → cible) sur le calque d'édition.

◆ composeTextureOverrideMarkers()

void hmi::DraftRenderer::composeTextureOverrideMarkers ( const core::LevelDraft & draft)
private

Signale les cases portant une surcharge de texture par instance sur le calque d'édition (EX-EDIT-043, LOT-45).

◆ invalidate()

void hmi::DraftRenderer::invalidate ( )
inlinenoexcept

Marque la scène comme périmée : elle sera reconstruite au prochain render (à appeler après toute mutation du brouillon — peinture, undo/redo, chargement, redimensionnement).

◆ lastScene()

const ComposedScene & hmi::DraftRenderer::lastScene ( ) const
inlinenodiscardnoexcept
Returns
La scène composée à la dernière image (primitives soumises et compteurs).

◆ rebuild()

void hmi::DraftRenderer::rebuild ( const core::LevelDraft & draft)
private

◆ render()

void hmi::DraftRenderer::render ( const core::LevelDraft & draft,
const Camera2D & camera,
bool showGrid,
const std::optional< std::pair< core::GridPosition, core::GridPosition > > & highlight,
const LinkOverlayState & linkOverlay,
RenderMode mode,
bool showTextureOverrides = false,
float deltaSeconds = 0.0f,
const LayerVisibility & visibility = {},
const PlaneVisibility & planeVisibility = {} )

Rend le brouillon avec la caméra donnée (reconstruit la scène si invalidée).

Si showGrid, superpose la grille de repère (frontières de cases + frontières de salles) — aide au placement, équivalent de la bascule F10 de l'éditeur historique (EX-EDIT-023). Si highlight est présent, met en surbrillance la zone (bornes min/max incluses) — aperçu de l'outil Rectangle/Sélection. linkOverlay pilote l'affichage des liens de mécanismes (flèches, trait provisoire, surbrillance — EX-IHM-030). mode choisit le rendu Physique ou Texture des tuiles (EX-REN-046, LOT-41) ; les aides d'édition (grille, liens, aperçu) restent identiques dans les deux modes — ce sont des repères d'édition, pas de l'habillage. Si showTextureOverrides, les cases portant une surcharge de texture par instance (EX-EDIT-043, LOT-45) sont signalées sur le calque d'édition — actif seulement quand l'outil « Texture par instance » l'est, pour ne pas encombrer les autres outils. deltaSeconds avance l'aperçu des tuiles animées (LOT-46 TACHE-05) en temps réel — contrairement à la simulation (hmi::GameSession), l'aperçu d'édition n'a aucune exigence de déterminisme (EX-NFR-002 ne s'applique qu'en jeu) ; 0 (par défaut) fige l'animation. Les aides d'édition, comme le reste du calque RenderLayer::EditorOverlay, ne sont jamais composées en jeu ni en essai (hmi::GameSession ne passe jamais par DraftRenderer). visibility pilote le mode d'inspection « définition des textures » (LOT-51, EX-EDIT-044) — tout visible par défaut, sans effet sur les aides d'édition ci-dessus (jamais un calque de contenu).

◆ setPlanesDirectory()

void hmi::DraftRenderer::setPlanesDirectory ( std::filesystem::path directory)
inline

Fixe le dossier où résoudre les images de plans (Levels/Plans), comme hmi::SpriteRenderer::setPlanesDirectory.

Parameters
directoryDossier des images de plans.

◆ setSkins()

void hmi::DraftRenderer::setSkins ( const SkinCatalog * skins,
std::string skinSet = {} )
inline

Désigne le catalogue de skins et le jeu à utiliser en mode Texture (LOT-42).

Le catalogue n'est pas copié : l'appelant en reste propriétaire. Réassigner un skin s'y voit à l'image suivante, sans reconstruire le brouillon ni la scène.

Parameters
skinsCatalogue, ou nullptr pour retomber entièrement sur le damier.
skinSetNom du jeu courant ; vide pour le jeu par défaut du catalogue.

◆ solidOverlayQuad()

SpriteQuad hmi::DraftRenderer::solidOverlayQuad ( const core::Rect & rect,
float r,
float g,
float b,
float a ) const
nodiscardprivate

Compose la course aller-retour de chaque danger mobile (EX-GP-051) sur le calque Compose les poignées de handles (carrés double ton, même patron que celles des décors).

Returns
Un quad plein couvrant rect, texturé par la région unie de l'atlas et teinté — brique commune des aides d'édition rectangulaires (poignées de parcours).

Member Data Documentation

◆ _atlas

const TextureAtlas& hmi::DraftRenderer::_atlas
private

◆ _batch

SpriteBatch& hmi::DraftRenderer::_batch
private

◆ _cache

TextureCache& hmi::DraftRenderer::_cache
private

◆ _dirty

bool hmi::DraftRenderer::_dirty = true
private

◆ _planesDirectory

std::filesystem::path hmi::DraftRenderer::_planesDirectory
private

Dossier des images de plans (setPlanesDirectory), vide tant qu'aucun n'est fixé.

◆ _scene

ComposedScene hmi::DraftRenderer::_scene
private

◆ _skins

const SkinCatalog* hmi::DraftRenderer::_skins = nullptr
private

◆ _skinSet

std::string hmi::DraftRenderer::_skinSet
private

◆ _tileAnimations

std::unordered_map<std::string, core::Animation> hmi::DraftRenderer::_tileAnimations
private

Horloge d'animation partagee par asset (LOT-46 TACHE-05), avancee en temps reel a chaque render() – distincte de celle de GameSession (pas fixe) : l'apercu d'edition n'a pas besoin d'etre deterministe.

◆ _warnedExcludedAnimations

std::set<std::string> hmi::DraftRenderer::_warnedExcludedAnimations
private

Assets deja signales pour une combinaison exclue (bitmask16/silhouette + animation) : memorise pour ne jamais journaliser a chaque image.

◆ _world

core::World hmi::DraftRenderer::_world
private

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