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

Pont ECS → écran : dessine chaque entité affichable, triée par calque puis par texture. More...

#include <SpriteRenderer.h>

Public Member Functions

 SpriteRenderer (SpriteBatch &batch, const TextureAtlas &atlas, TextureCache &cache)
 Construit le rendu de sprites.
void render (core::World &world, const Camera2D &camera, RenderMode mode, float interpolationAlpha, const std::optional< std::string > &background={}, int levelWidth=0, int levelHeight=0, const std::vector< core::TileTextureOverride > &textureOverrides={}, const std::unordered_map< std::string, core::Animation > &tileAnimations={}, const std::vector< core::Plane > &planes={}, bool planeParallax=false, const core::TileMap *doorCollision=nullptr)
 Dessine toutes les entités affichables du monde, vues par la caméra.
void setPlanesDirectory (std::filesystem::path directory)
 Fixe le dossier où résoudre les images de plans (Levels/Plans).
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 logStatisticsIfChanged ()
 Journalise les compteurs de l'image seulement s'ils ont changé depuis la précédente : le volume soumis reste observable (EX-NFR-005) sans écrire une ligne par image, ce que GraphicsLog proscrit sur un chemin de dessin.

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
SceneStatistics _loggedStatistics

Detailed Description

Pont ECS → écran : dessine chaque entité affichable, triée par calque puis par texture.

À chaque frame, compose la scène (hmi::composeWorldSprites : parcours des entités core::Transform + core::Sprite, régions d'atlas, interpolation, culling — logique pure) puis la soumet au SpriteBatch. Objet de présentation (HMI) : il lit l'ECS sans jamais le muter (EX-ARCH-012). Ce n'est pas un core::ISystem : le rendu est découplé de la simulation (EX-REN-021).

La séparation composition/soumission (LOT-40) est ce qui rend l'ordre de dessin assertable sans GPU : lastScene() expose la liste exacte des primitives de la dernière image (EX-NFR-004).

Constructor & Destructor Documentation

◆ SpriteRenderer()

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

Construit le rendu de sprites.

Parameters
batchPipeline de quads texturés utilisé pour dessiner (non possédé).
atlasAtlas fournissant la texture et ses dimensions (non possédé).
cacheCache de textures, propriétaire du damier de repli lié en mode Texture (non possédé, LOT-41).

Member Function Documentation

◆ lastScene()

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

◆ logStatisticsIfChanged()

void hmi::SpriteRenderer::logStatisticsIfChanged ( )
private

Journalise les compteurs de l'image seulement s'ils ont changé depuis la précédente : le volume soumis reste observable (EX-NFR-005) sans écrire une ligne par image, ce que GraphicsLog proscrit sur un chemin de dessin.

◆ render()

void hmi::SpriteRenderer::render ( core::World & world,
const Camera2D & camera,
RenderMode mode,
float interpolationAlpha,
const std::optional< std::string > & background = {},
int levelWidth = 0,
int levelHeight = 0,
const std::vector< core::TileTextureOverride > & textureOverrides = {},
const std::unordered_map< std::string, core::Animation > & tileAnimations = {},
const std::vector< core::Plane > & planes = {},
bool planeParallax = false,
const core::TileMap * doorCollision = nullptr )

Dessine toutes les entités affichables du monde, vues par la caméra.

Seules les entités intersectant le cadrage de la caméra (marge comprise) sont soumises (EX-NFR-005) ; une entité écartée reste simulée normalement (EX-ARCH-012).

Parameters
worldMonde dont on lit les composants Transform et Sprite.
cameraCaméra fournissant la projection monde → écran et le cadrage visible.
modeMode de rendu courant (EX-REN-046) : bascule purement visuelle, sans effet sur la scène ECS ni sur la simulation.
interpolationAlphaFacteur d'interpolation [0, 1[ entre le pas de simulation précédent et le pas courant (EX-ARCH-031, core::FixedTimestep::interpolationAlpha). Une entité portant un hmi::PreviousPosition est dessinée à lerp(précédente, courante, alpha) (mouvement lisse) ; une entité sans ce composant (tuiles fixes) est dessinée à sa position courante. 0 reproduit le comportement non interpolé.
backgroundNom de l'asset de fond du niveau (core::Level::background, LOT-44), ou absent ; composé sous tout le reste (RenderLayer::Background), uniquement en mode RenderMode::Texture.
levelWidthLargeur du niveau, en unités monde (une case = une unité) ; ignoré si background est absent.
levelHeightHauteur du niveau, en unités monde.
textureOverridesSurcharges de texture par instance du niveau courant (EX-EDIT-043, LOT-45), transmises telles quelles à hmi::sceneTextures.
tileAnimationsHorloge d'animation partagée par asset de tuile (LOT-46 TACHE-05), transmise telle quelle à hmi::sceneTextures.
planesPlans picturaux du niveau courant (EX-DEC-040, LOT-69), composés avant tout le reste et dans l'ordre déclaré — c'est cet ordre de composition qui porte leur ordre de dessin (cf. hmi::composePlanes). Leurs images sont résolues sous planesDirectory().
planeParallaxDécide du décalage de parallaxe des plans (hmi::planeParallaxActive, EX-DEC-043) : l'appelant tranche, la table étant une règle du moteur croisée avec un drapeau de niveau, pas une propriété du rendu.
doorCollisionGrille de collision courante des mécanismes (core:: MechanismController::collisionMap, LOT-55), pour que l'ombre d'une porte suive son état ouverte/fermée plutôt que son type statique ; nullptr (défaut) exclut les portes de l'ombrage.

◆ setPlanesDirectory()

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

Fixe le dossier où résoudre les images de plans (Levels/Plans).

Un plan est une donnée de niveau, pas un asset : son image ne vit pas sous Assets/ et ne passe donc pas par la résolution de noms logiques du cache.

Parameters
directoryDossier des images de plans.

◆ setSkins()

void hmi::SpriteRenderer::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 et doit le maintenir en vie. Réassigner un skin dans le catalogue se voit à l'image suivante, sans reconstruire la scène ECS — c'est tout l'intérêt de résoudre l'apparence à la composition.

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

Member Data Documentation

◆ _atlas

const TextureAtlas* hmi::SpriteRenderer::_atlas
private

◆ _batch

SpriteBatch* hmi::SpriteRenderer::_batch
private

◆ _cache

TextureCache* hmi::SpriteRenderer::_cache
private

◆ _loggedStatistics

SceneStatistics hmi::SpriteRenderer::_loggedStatistics
private

◆ _planesDirectory

std::filesystem::path hmi::SpriteRenderer::_planesDirectory
private

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

◆ _scene

ComposedScene hmi::SpriteRenderer::_scene
private

◆ _skins

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

◆ _skinSet

std::string hmi::SpriteRenderer::_skinSet
private

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