|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
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::Vector2 & | center () 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. | |
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.
| hmi::Camera2D::Camera2D | ( | int | viewportWidth, |
| int | viewportHeight ) |
Construit une caméra pour une surface de rendu donnée.
| viewportWidth | Largeur de la surface de rendu, en pixels. |
| viewportHeight | Hauteur de la surface de rendu, en pixels. |
|
inlinenodiscardnoexcept |
|
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).
| availableWidth | Largeur disponible, en pixels (> 0). |
| availableHeight | Hauteur disponible, en pixels (> 0). |
| contentWidth | Largeur du contenu à cadrer, en unités monde (> 0). |
| contentHeight | Hauteur du contenu à cadrer, en unités monde (> 0). |
| margin | Facteur multiplicatif appliqué avant l'arrondi (ex. 0.85 pour laisser une marge visuelle) ; 1.0 par défaut (aucune marge). |
|
nodiscard |
Matrice de projection monde → clip, pour le vertex shader.
|
nodiscardprivate |
|
nodiscard |
Convertit une position écran (pixels) en unités monde.
| screen | Position en pixels (origine haut-gauche, Y-bas). |
| void hmi::Camera2D::setCenter | ( | const core::Vector2 & | worldCenter | ) |
Place le centre de la caméra.
| worldCenter | Position visée, au centre de l'écran, en unités monde. |
|
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.
| offsetPixels | Décalage courant (hmi::screenShakeOffset), nul hors secousse. |
| void hmi::Camera2D::setViewportSize | ( | int | viewportWidth, |
| int | viewportHeight ) |
Met à jour les dimensions de la surface de rendu (redimensionnement).
| viewportWidth | Nouvelle largeur, en pixels. |
| viewportHeight | Nouvelle hauteur, en pixels. |
| void hmi::Camera2D::setZoom | ( | float | zoom | ) |
Règle le facteur de zoom.
| zoom | Multiplicateur d'échelle (> 0 ; entier recommandé). |
|
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é.
|
nodiscard |
Convertit une position monde en pixels écran.
| world | Position en unités monde. |
|
inlinenodiscardnoexcept |
|
private |
|
private |
Décalage de secousse d'écran courant, en pixels (setShakeOffsetPixels) ; nul par défaut.
|
private |
|
private |
|
private |
|
staticconstexpr |
Nombre de pixels par unité monde (EX-ARCH-021).