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

Caméra 2D orthographique : projette le monde vers l'écran pour le rendu. More...

#include <Camera2D.h>

Public Member Functions

 Camera2D (int viewportWidth, int viewportHeight)
 Construit une caméra pour une surface de rendu donnée.
void setViewportSize (int viewportWidth, int viewportHeight)
 Met à jour les dimensions de la surface de rendu (redimensionnement).
void setCenter (const core::Vector2 &worldCenter)
 Place le centre de la caméra.
void setZoom (float zoom)
 Règle le facteur de zoom.
void setShakeOffsetPixels (const core::Vector2 &offsetPixels)
 Décalage de secousse d'écran (LOT-53 TACHE-03), en pixels entiers.
const core::Vector2center () const noexcept
float zoom () const noexcept
DirectX::XMFLOAT4X4 projectionMatrix () const
 Matrice de projection monde → clip, pour le vertex shader.
core::Vector2 worldToScreen (const core::Vector2 &world) const
 Convertit une position monde en pixels écran.
core::Vector2 screenToWorld (const core::Vector2 &screen) const
 Convertit une position écran (pixels) en unités monde.
core::Rect visibleBounds () const
 Rectangle du monde effectivement cadré par la caméra.

Static Public Member Functions

static float fitZoom (float availableWidth, float availableHeight, float contentWidth, float contentHeight, float margin=1.0f)
 Facteur de zoom ajustant un contenu à une surface disponible, sans zone hors champ.

Static Public Attributes

static constexpr float PIXELS_PER_UNIT = 16.0f
 Nombre de pixels par unité monde (EX-ARCH-021).

Private Member Functions

float scale () const

Private Attributes

int _viewportWidth
int _viewportHeight
core::Vector2 _center {}
float _zoom = 1.0f
core::Vector2 _shakeOffsetPixels {}
 Décalage de secousse d'écran courant, en pixels (setShakeOffsetPixels) ; nul par défaut.

Detailed Description

Caméra 2D orthographique : projette le monde vers l'écran pour le rendu.

La caméra est centrée sur une position en unités monde et applique l'échelle 16 pixels/unité (EX-ARCH-021), avec l'origine écran en haut-gauche et l'axe Y vers le bas (convention du projet). Un facteur de zoom (de préférence entier pour la netteté du pixel art, EX-ARCH-022) multiplie cette échelle. La caméra est un objet de présentation : elle lit des positions monde mais ne modifie jamais l'ECS.

Constructor & Destructor Documentation

◆ Camera2D()

hmi::Camera2D::Camera2D ( int viewportWidth,
int viewportHeight )

Construit une caméra pour une surface de rendu donnée.

Parameters
viewportWidthLargeur de la surface de rendu, en pixels.
viewportHeightHauteur de la surface de rendu, en pixels.

Member Function Documentation

◆ center()

const core::Vector2 & hmi::Camera2D::center ( ) const
inlinenodiscardnoexcept
Returns
Le centre courant de la caméra, en unités monde.

◆ fitZoom()

float hmi::Camera2D::fitZoom ( float availableWidth,
float availableHeight,
float contentWidth,
float contentHeight,
float margin = 1.0f )
staticnodiscard

Facteur de zoom ajustant un contenu à une surface disponible, sans zone hors champ.

Entier (std::floor) tant que le facteur brut est supérieur ou égal à 1 — netteté pixel art, EX-ARCH-022 (préférence, pas une règle absolue) ; fractionnaire uniquement lorsque nécessaire pour que le contenu entier tienne dans la surface disponible (EX-REN-013, EX-EDIT-013) : sans cette exception, un contenu plus grand que la surface resterait partiellement hors champ, faute de pouvoir descendre sous le zoom ×1.

Fonction pure, partagée par le cadrage automatique de l'éditeur et celui du jeu (aucune règle dupliquée entre les deux écrans, LOT-16).

Parameters
availableWidthLargeur disponible, en pixels (> 0).
availableHeightHauteur disponible, en pixels (> 0).
contentWidthLargeur du contenu à cadrer, en unités monde (> 0).
contentHeightHauteur du contenu à cadrer, en unités monde (> 0).
marginFacteur multiplicatif appliqué avant l'arrondi (ex. 0.85 pour laisser une marge visuelle) ; 1.0 par défaut (aucune marge).
Returns
Le facteur de zoom à appliquer via setZoom.

◆ projectionMatrix()

DirectX::XMFLOAT4X4 hmi::Camera2D::projectionMatrix ( ) const
nodiscard

Matrice de projection monde → clip, pour le vertex shader.

Returns
La matrice (ligne-major DirectXMath) transformant une position monde en clip.

◆ scale()

float hmi::Camera2D::scale ( ) const
nodiscardprivate
Returns
L'échelle effective, en pixels par unité monde (PIXELS_PER_UNIT × zoom).

◆ screenToWorld()

core::Vector2 hmi::Camera2D::screenToWorld ( const core::Vector2 & screen) const
nodiscard

Convertit une position écran (pixels) en unités monde.

Parameters
screenPosition en pixels (origine haut-gauche, Y-bas).
Returns
Position en unités monde.

◆ setCenter()

void hmi::Camera2D::setCenter ( const core::Vector2 & worldCenter)

Place le centre de la caméra.

Parameters
worldCenterPosition visée, au centre de l'écran, en unités monde.

◆ setShakeOffsetPixels()

void hmi::Camera2D::setShakeOffsetPixels ( const core::Vector2 & offsetPixels)
inline

Décalage de secousse d'écran (LOT-53 TACHE-03), en pixels entiers.

Appliqué uniquement à projectionMatrix() (rendu) – jamais à _center, donc sans effet sur worldToScreen/screenToWorld/visibleBounds : le culling et la logique de cadrage par salle (hmi::GameSession::updateCurrentRoom, piloté par la position du personnage, pas par la caméra) restent structurellement insensibles à la secousse.

Parameters
offsetPixelsDécalage courant (hmi::screenShakeOffset), nul hors secousse.

◆ setViewportSize()

void hmi::Camera2D::setViewportSize ( int viewportWidth,
int viewportHeight )

Met à jour les dimensions de la surface de rendu (redimensionnement).

Parameters
viewportWidthNouvelle largeur, en pixels.
viewportHeightNouvelle hauteur, en pixels.

◆ setZoom()

void hmi::Camera2D::setZoom ( float zoom)

Règle le facteur de zoom.

Parameters
zoomMultiplicateur d'échelle (> 0 ; entier recommandé).

◆ visibleBounds()

core::Rect hmi::Camera2D::visibleBounds ( ) const
nodiscard

Rectangle du monde effectivement cadré par la caméra.

Base du culling (EX-NFR-005) : une primitive dont la boîte englobante n'intersecte pas ce rectangle (élargi d'une marge, cf. hmi::ComposedScene::CULLING_MARGIN_UNITS) n'a aucune raison d'être soumise. Dérivé de screenToWorld : aucune notion de cadrage nouvelle n'est introduite, la caméra reste la seule source de vérité.

Returns
Le rectangle visible, en unités monde (coin haut-gauche + dimensions).

◆ worldToScreen()

core::Vector2 hmi::Camera2D::worldToScreen ( const core::Vector2 & world) const
nodiscard

Convertit une position monde en pixels écran.

Parameters
worldPosition en unités monde.
Returns
Position en pixels (origine haut-gauche, Y-bas).

◆ zoom()

float hmi::Camera2D::zoom ( ) const
inlinenodiscardnoexcept
Returns
Le facteur de zoom courant.

Member Data Documentation

◆ _center

core::Vector2 hmi::Camera2D::_center {}
private

◆ _shakeOffsetPixels

core::Vector2 hmi::Camera2D::_shakeOffsetPixels {}
private

Décalage de secousse d'écran courant, en pixels (setShakeOffsetPixels) ; nul par défaut.

◆ _viewportHeight

int hmi::Camera2D::_viewportHeight
private

◆ _viewportWidth

int hmi::Camera2D::_viewportWidth
private

◆ _zoom

float hmi::Camera2D::_zoom = 1.0f
private

◆ PIXELS_PER_UNIT

float hmi::Camera2D::PIXELS_PER_UNIT = 16.0f
staticconstexpr

Nombre de pixels par unité monde (EX-ARCH-021).


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