JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
Camera2D.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <DirectXMath.h>
7
8#include "Core/Math/Rect.h"
9#include "Core/Math/Vector2.h"
10
15
16namespace hmi {
17
20inline constexpr float LANDING_SHAKE_AMPLITUDE_PIXELS = 2.0f;
22inline constexpr float DEATH_SHAKE_AMPLITUDE_PIXELS = 3.0f;
24inline constexpr float SCREEN_SHAKE_DURATION = 0.2f;
25
35 float amplitudePixels = 0.0f;
37 float elapsed = 0.0f;
39 float duration = 0.0f;
40};
41
49void triggerScreenShake(ScreenShakeState& state, float amplitudePixels, float duration) noexcept;
50
56void advanceScreenShake(ScreenShakeState& state, float fixedDelta) noexcept;
57
68[[nodiscard]] core::Vector2 screenShakeOffset(const ScreenShakeState& state) noexcept;
69
79class Camera2D {
80public:
82 static constexpr float PIXELS_PER_UNIT = 16.0f;
83
89 Camera2D(int viewportWidth, int viewportHeight);
90
96 void setViewportSize(int viewportWidth, int viewportHeight);
97
102 void setCenter(const core::Vector2& worldCenter);
103
108 void setZoom(float zoom);
109
119 void setShakeOffsetPixels(const core::Vector2& offsetPixels) {
120 _shakeOffsetPixels = offsetPixels;
121 }
122
124 [[nodiscard]] const core::Vector2& center() const noexcept {
125 return _center;
126 }
127
129 [[nodiscard]] float zoom() const noexcept {
130 return _zoom;
131 }
132
137 [[nodiscard]] DirectX::XMFLOAT4X4 projectionMatrix() const;
138
144 [[nodiscard]] core::Vector2 worldToScreen(const core::Vector2& world) const;
145
151 [[nodiscard]] core::Vector2 screenToWorld(const core::Vector2& screen) const;
152
162 [[nodiscard]] core::Rect visibleBounds() const;
163
183 [[nodiscard]] static float fitZoom(float availableWidth, float availableHeight,
184 float contentWidth, float contentHeight,
185 float margin = 1.0f);
186
187private:
189 [[nodiscard]] float scale() const;
190
194 float _zoom = 1.0f;
197};
198
199} // namespace hmi
Rectangle aligné sur les axes en coordonnées monde, propre à Core.
Vecteur 2D à composantes flottantes, propre à Core (sans dépendance DirectX).
float scale() const
Definition Camera2D.cpp:56
float zoom() const noexcept
Definition Camera2D.h:129
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.
Definition Camera2D.cpp:112
float _zoom
Definition Camera2D.h:194
void setShakeOffsetPixels(const core::Vector2 &offsetPixels)
Décalage de secousse d'écran (LOT-53 TACHE-03), en pixels entiers.
Definition Camera2D.h:119
core::Vector2 worldToScreen(const core::Vector2 &world) const
Convertit une position monde en pixels écran.
Definition Camera2D.cpp:85
static constexpr float PIXELS_PER_UNIT
Nombre de pixels par unité monde (EX-ARCH-021).
Definition Camera2D.h:82
core::Rect visibleBounds() const
Rectangle du monde effectivement cadré par la caméra.
Definition Camera2D.cpp:103
core::Vector2 _shakeOffsetPixels
Décalage de secousse d'écran courant, en pixels (setShakeOffsetPixels) ; nul par défaut.
Definition Camera2D.h:196
int _viewportWidth
Definition Camera2D.h:191
void setZoom(float zoom)
Règle le facteur de zoom.
Definition Camera2D.cpp:51
Camera2D(int viewportWidth, int viewportHeight)
Construit une caméra pour une surface de rendu donnée.
Definition Camera2D.cpp:36
void setCenter(const core::Vector2 &worldCenter)
Place le centre de la caméra.
Definition Camera2D.cpp:46
void setViewportSize(int viewportWidth, int viewportHeight)
Met à jour les dimensions de la surface de rendu (redimensionnement).
Definition Camera2D.cpp:40
core::Vector2 _center
Definition Camera2D.h:193
int _viewportHeight
Definition Camera2D.h:192
DirectX::XMFLOAT4X4 projectionMatrix() const
Matrice de projection monde → clip, pour le vertex shader.
Definition Camera2D.cpp:62
core::Vector2 screenToWorld(const core::Vector2 &screen) const
Convertit une position écran (pixels) en unités monde.
Definition Camera2D.cpp:94
const core::Vector2 & center() const noexcept
Definition Camera2D.h:124
Definition AudioEngine.cpp:15
void advanceScreenShake(ScreenShakeState &state, float fixedDelta) noexcept
Avance une secousse d'écran d'un pas fixe.
Definition Camera2D.cpp:19
constexpr float LANDING_SHAKE_AMPLITUDE_PIXELS
Amplitude conservatrice de la secousse d'écran à un atterrissage lourd (LOT-53 TACHE-03) : discrète,...
Definition Camera2D.h:20
core::Vector2 screenShakeOffset(const ScreenShakeState &state) noexcept
Décalage courant d'une secousse d'écran, en pixels entiers (EX-ARCH-022).
Definition Camera2D.cpp:26
void triggerScreenShake(ScreenShakeState &state, float amplitudePixels, float duration) noexcept
Déclenche (ou relance) une secousse d'écran.
Definition Camera2D.cpp:12
constexpr float SCREEN_SHAKE_DURATION
Durée de toute secousse d'écran, en secondes – brève par construction.
Definition Camera2D.h:24
constexpr float DEATH_SHAKE_AMPLITUDE_PIXELS
Amplitude de la secousse à la mort du personnage : légèrement plus marquée que l'atterrissage.
Definition Camera2D.h:22
Rectangle aligné sur les axes (AABB) en unités monde.
Definition Rect.h:23
Vecteur bidimensionnel en coordonnées monde (composantes float).
Definition Vector2.h:21
État déterministe d'une secousse d'écran en cours de décroissance vers zéro.
Definition Camera2D.h:33
float duration
Durée totale de la secousse, en secondes.
Definition Camera2D.h:39
float amplitudePixels
Amplitude au déclenchement, en pixels écran.
Definition Camera2D.h:35
float elapsed
Temps écoulé depuis le déclenchement, en secondes.
Definition Camera2D.h:37