JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
GameViewport.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 <QRhiWidget>
7#include <QString>
8#include <chrono>
9#include <filesystem>
10#include <memory>
11#include <optional>
12#include <utility>
13#include <vector>
14
18#include "Core/Math/Rect.h"
35
41
42namespace hmi {
43class SpriteBatch;
44class TextureAtlas;
45class TextureCache;
46class DraftRenderer;
47class Localization;
48class BitmapFont;
49class AudioEngine;
50} // namespace hmi
51
52namespace hmi {
53
81class GameViewport : public QRhiWidget, public EditContextTarget {
82 Q_OBJECT
83
84public:
85 explicit GameViewport(QWidget* parent = nullptr);
86 ~GameViewport() override;
87
88 GameViewport(const GameViewport&) = delete;
90
92 void setActiveTile(core::TileType type) noexcept {
93 _activeTile = type;
94 }
95
98 void setActiveTextureAsset(std::optional<std::string> asset) noexcept {
99 _activeTextureAsset = std::move(asset);
100 }
101
110 void setTool(hmi::EditorTool tool);
111
113 void setLocalization(const Localization* loc) noexcept {
114 _loc = loc;
115 }
116
124 void setAudioEngine(AudioEngine* engine) noexcept {
125 _audioEngine = engine;
126 }
127
130 [[nodiscard]] hmi::GameKeyBindings& gameBindings() noexcept {
131 return _gameBindings;
132 }
133
136 [[nodiscard]] hmi::GamepadBindings& gamepadBindings() noexcept {
137 return _gamepadBindings;
138 }
139
142 [[nodiscard]] hmi::EditorKeyBindings& editorBindings() noexcept {
143 return _editorBindings;
144 }
145
148 void save();
149
151 void openLevel(const std::filesystem::path& path);
152
154 [[nodiscard]] bool isDirty() const noexcept {
155 return _dirty;
156 }
157
168 bool renameOpenLevel(const std::string& newName);
169
171 void startPlaytest();
172
174 void undo() override;
176 void redo() override;
178 [[nodiscard]] bool canUndo() const override {
179 return _draft.canUndo();
180 }
181
182 [[nodiscard]] bool canRedo() const override {
183 return _draft.canRedo();
184 }
185
186 void copy() override {
188 }
189
190 void paste() override {
192 }
193
194 [[nodiscard]] bool canCopy() const override {
195 return _selection.has_value();
196 }
197
198 [[nodiscard]] bool canPaste() const override {
199 return !_clipboard.empty();
200 }
201
202 void toggleGrid() noexcept;
204 void resetCamera() noexcept;
207 void toggleRenderMode();
208
218 void toggleDiagnosticsOverlay() noexcept;
219
221
223 [[nodiscard]] bool diagnosticsOverlayEnabled() const noexcept {
224 return _diagnosticsEnabled;
225 }
226
230 void setDiagnosticsOverlayEnabled(bool enabled) noexcept;
231
239 void startGame(std::filesystem::path map);
240
244 void pauseSimulation() noexcept;
248 void resumeSimulation();
250 [[nodiscard]] bool simulationPaused() const noexcept {
251 return _paused;
252 }
253
256 void quitGame() noexcept;
257
261 void setVSync(bool enabled) noexcept;
263 [[nodiscard]] bool vsyncEnabled() const noexcept {
264 return _vsync;
265 }
266
268 void resizeLevel(int width, int height);
269
271 [[nodiscard]] bool wouldResizeDrop(int width, int height) const;
272
274 [[nodiscard]] int levelWidth() const;
275 [[nodiscard]] int levelHeight() const;
276
278 [[nodiscard]] const core::LevelDraft& draft() const noexcept {
279 return _draft;
280 }
281
283 [[nodiscard]] std::optional<std::size_t> selectedPlaneIndex() const noexcept {
284 return _selectedPlane;
285 }
286
288 [[nodiscard]] const PlaneVisibility& planeVisibility() const noexcept {
289 return _planeVisibility;
290 }
291
294 [[nodiscard]] std::optional<core::GridPosition> hoveredCell() const noexcept {
295 return _hoverCell;
296 }
297
299 [[nodiscard]] float zoom() const noexcept {
300 return _camera.zoom();
301 }
302
304 [[nodiscard]] EditorTool activeTool() const noexcept {
305 return _tool;
306 }
307
310 void setHighlightedLink(std::optional<std::pair<core::GridPosition, core::GridPosition>> link);
311
314 void unlinkMechanism(core::GridPosition targetPosition);
315
319
323 void setHighlightedTextureOverride(std::optional<core::GridPosition> position);
324
330 void setLevelBackground(std::optional<std::string> background);
331
340 void setLevelSkinSet(std::optional<std::string> skinSet);
341
348
354 void removeCameraZone(std::size_t index);
355
357 [[nodiscard]] RenderMode renderMode() const noexcept {
358 return _renderMode;
359 }
360
366 [[nodiscard]] const LayerVisibility& layerVisibility() const noexcept {
367 return _layerVisibility;
368 }
369
375 void setLayerVisible(RenderLayer layer, bool visible) noexcept {
376 _layerVisibility.setVisible(layer, visible);
377 }
378
380 void showAllLayers() noexcept {
381 _layerVisibility.showAll();
382 }
383
391 [[nodiscard]] SkinCatalog& skinCatalog() noexcept {
392 return _scene.skins();
393 }
394
399 void setSkinSet(const std::string& setName);
400
410 void reloadAssets();
411
419 void invalidateAsset(const std::string& fileName);
420
428 void setRenderMode(RenderMode mode);
429
439 void selectPlane(std::optional<std::size_t> index);
441 void addPlane(core::Plane plane);
445 void removePlane(std::size_t index);
447 void movePlane(std::size_t index, bool forward);
449 void setPlaneDepth(std::size_t index, core::PlaneDepth depth);
452 void setPlaneDensity(std::size_t index, int pixelsPerUnit);
454 void setPlaneParallax(std::size_t index, float parallaxX, float parallaxY);
456 void setPlaneOpacity(std::size_t index, float opacity);
458 void setLevelParallaxEnabled(bool enabled);
460 void setPlaneVisible(std::size_t index, bool visible);
462 void setPlaneIsolated(std::size_t index, bool isolate);
464
465signals:
467 void statusMessage(const QString& message);
486 void planeSelectionChanged(std::optional<std::size_t> index);
490 void hoveredCellChanged(std::optional<core::GridPosition> cell);
493 void zoomChanged(float zoom);
501
502protected:
506 void initialize(QRhiCommandBuffer* commandBuffer) override;
508 void render(QRhiCommandBuffer* commandBuffer) override;
510 void releaseResources() override;
511 bool event(QEvent* event) override;
512 void keyPressEvent(QKeyEvent* event) override;
513 void keyReleaseEvent(QKeyEvent* event) override;
514 void mousePressEvent(QMouseEvent* event) override;
515 void mouseReleaseEvent(QMouseEvent* event) override;
516 void mouseMoveEvent(QMouseEvent* event) override;
517 void wheelEvent(QWheelEvent* event) override;
518
519private:
522 void createResources();
524 void tick(float elapsedSeconds);
528 void renderFrame(QRhiCommandBuffer* commandBuffer, float deltaSeconds);
532 void renderDiagnosticsOverlay(int viewportWidth, int viewportHeight);
533 void stopPlaytest();
534 void loadGameMap();
535 void updateMousePosition(const QMouseEvent* event);
536
539 void updateEditCamera();
542 [[nodiscard]] core::Vector2 screenPosition(const QMouseEvent* event) const;
545 [[nodiscard]] float minManualZoom() const;
548 [[nodiscard]] float maxManualZoom() const;
550 [[nodiscard]] std::optional<core::GridPosition> cellAt(const QMouseEvent* event);
553 [[nodiscard]] core::GridPosition clampedCell(const QMouseEvent* event);
555 void paintAt(const QMouseEvent* event);
562 void copySelection();
564 void pasteClipboard();
566 [[nodiscard]] std::optional<std::pair<core::GridPosition, core::GridPosition>> highlight()
567 const;
569 void handleLinkClick(const QMouseEvent* event);
573 void handleTextureAssignClick(const QMouseEvent* event, bool rightClick);
577 [[nodiscard]] core::Vector2 worldPositionAt(const QMouseEvent* event);
579 [[nodiscard]] bool linkExists(core::GridPosition switchPosition,
580 core::GridPosition targetPosition) const;
583 void markDraftMutated();
584
585 [[nodiscard]] int pixelWidth() const;
586 [[nodiscard]] int pixelHeight() const;
587
589 [[nodiscard]] QString statusText(const char* key) const;
590
591 using Clock = std::chrono::steady_clock;
592
597 std::unique_ptr<hmi::DraftRenderer> _draftRenderer;
599 std::string _skinSet;
606 Clock::time_point _previousFrame;
607 bool _loopStarted = false;
608
623
630 bool _manualCamera = false;
631 float _manualZoom = 1.0f;
633 bool _rightDragging = false;
636 bool _cameraPanned = false;
641 std::optional<std::string> _activeTextureAsset;
643 std::optional<std::size_t> _selectedPlane;
647 bool _painting = false;
648 bool _dragging = false;
653 std::optional<core::GridPosition> _hoverCell;
655 0.0f;
657 const Localization* _loc = nullptr;
660
661 std::optional<std::pair<core::GridPosition, core::GridPosition>> _selection;
663 std::optional<core::GridPosition> _pendingLink;
665 std::optional<std::pair<core::GridPosition, core::GridPosition>> _selectedLink;
668 std::optional<core::GridPosition> _highlightedOverride;
670 std::vector<std::vector<core::TileType>> _clipboard;
671 bool _dirty = false;
672 bool _showGrid = true;
680 bool _vsync = true;
681 bool _gameMode = false;
685 bool _paused = false;
686 std::filesystem::path _gameMap;
688
691 std::optional<hmi::GameSession> _session;
692};
693
694} // namespace hmi
Caméra 2D : conversion entre unités monde et pixels écran.
Compteur de cadence et de primitives, affichable en jeu (LOT-62 TACHE-02, EX-NFR-001,...
Cible des commandes Annuler/Refaire/Copier/Coller, indépendante du contexte d'édition qui les impléme...
Association remappable action d'éditeur -> touche clavier, avec persistance (EX-CTRL-012).
Outil actif dans la grille de l'éditeur (LOT-15, EX-EDIT-014).
Cadenceur à pas de temps fixe pour une simulation déterministe.
Association remappable action de jeu -> touche clavier, avec persistance (EX-CTRL-012).
Session de jeu réutilisable : simule et rend un niveau, sans dépendance d'écran.
Association remappable action de jeu -> bouton manette, avec persistance (EX-CTRL-002,...
Sondage XInput de la manette, fusionné dans un InputState (réutilisable).
Position entière dans la grille d'un niveau (colonne, ligne).
État des entrées clavier/souris/manette échantillonné une fois par frame.
Jeu de visibilités par calque du mode d'inspection de l'éditeur (LOT-51, EX-EDIT-044).
Représentation mutable d'un niveau en cours d'édition.
Visibilité par rang de plan dans l'éditeur (EX-DEC-045, LOT-69 TACHE-05).
Rectangle aligné sur les axes en coordonnées monde, propre à Core.
Mode de rendu Physique/Texture et sa persistance (EX-REN-046).
Les ressources QRhi que toute surface de rendu du projet possède (LOT-86).
Association type de tuile → asset et mode de rendu, groupée en jeux nommés (EX-EDIT-042,...
Types de tuiles d'une carte et utilitaires associés.
Convertit un temps réel écoulé variable en un nombre de pas de simulation fixes.
Definition FixedTimestep.h:24
Niveau mutable en cours d'édition, distinct de Level (immuable, LOT-07).
Definition LevelDraft.h:43
Lecture d'échantillons courts à faible latence, avec volume global et repli muet.
Definition AudioEngine.h:36
Police bitmap chargée depuis Assets/Fonts/, avec repli procédural (EX-NFR-040).
Definition BitmapFont.h:39
Caméra 2D orthographique : projette le monde vers l'écran pour le rendu.
Definition Camera2D.h:79
Liste ordonnée des primitives d'une image, indépendante de Direct3D.
Definition ComposedScene.h:134
Dessine la grille d'un core::LevelDraft en cours d'édition.
Definition DraftRenderer.h:70
Interface pure implémentée par le contexte d'édition actif.
Definition EditContextTarget.h:24
Association action d'éditeur -> touche, avec persistance JSON (EX-CTRL-012, LOT-29).
Definition EditorKeyBindings.h:53
Moyenne glissante de la cadence de rendu, sur une fenêtre courte.
Definition DiagnosticsHud.h:36
Association action de jeu -> touche, avec persistance JSON (EX-CTRL-012, LOT-29).
Definition GameKeyBindings.h:50
void exitToMenuRequested()
Demande de retour au menu principal (fin de la séquence de niveaux – plus depuis LOT-59 TACHE-02 sur ...
hmi::EditorKeyBindings & editorBindings() noexcept
Accès modifiable aux touches d'éditeur (pour le remappage, LOT-57 TACHE-04), même principe que gameBi...
Definition GameViewport.h:142
core::GridPosition clampedCell(const QMouseEvent *event)
Case de grille sous event, bornée à la grille (jamais hors bornes) — pour les glissers rectangle/séle...
Definition GameViewport.cpp:233
core::LevelDraft _draft
Brouillon en cours d'édition (source de vérité).
Definition GameViewport.h:624
bool linkExists(core::GridPosition switchPosition, core::GridPosition targetPosition) const
Definition GameViewport.cpp:553
bool _diagnosticsEnabled
Compteur de diagnostic (F9, LOT-62 TACHE-02) : désactivé par défaut (EX-NFR-040, point de départ sans...
Definition GameViewport.h:612
void toolChanged(hmi::EditorTool tool)
L'outil actif vient de changer par un moyen autre que le panneau Outils (raccourci clavier,...
bool _manualCamera
true dès que la molette ou un glisser bouton droit a été utilisé : la caméra suit _manualZoom/_manual...
Definition GameViewport.h:630
void tick(float elapsedSeconds)
Avance la simulation d'une image (entrées, pas fixes, sons) — sans rien dessiner.
Definition GameViewport.cpp:615
bool _loopStarted
Definition GameViewport.h:607
float maxManualZoom() const
Definition GameViewport.cpp:200
void setTool(hmi::EditorTool tool)
Définit l'outil d'édition actif (pinceau, rectangle, sélection, lien, texture par instance).
Definition GameViewport.cpp:101
core::Vector2 _rightDragLastScreen
Dernière position écran du glisser droit en cours.
Definition GameViewport.h:637
void selectPlane(std::optional< std::size_t > index)
Sélectionne (ou désélectionne) un plan depuis le panneau.
Definition GameViewport.cpp:405
void setPlaneOpacity(std::size_t index, float opacity)
Change l'opacité du plan index.
Definition GameViewport.cpp:467
void openLevel(const std::filesystem::path &path)
Ouvre un fichier de niveau comme brouillon d'édition (remplace le brouillon courant).
Definition GameViewport.cpp:955
std::string _skinSet
Jeu de skins courant ; vide pour le jeu par défaut du catalogue.
Definition GameViewport.h:599
void startPlaytest()
Lance l'essai immédiat (P) sur un brouillon valide ; message d'erreur sinon.
Definition GameViewport.cpp:976
void loadGameMap()
Charge _gameMap et arme la session de jeu.
Definition GameViewport.cpp:1082
hmi::SceneResources _scene
Lot de sprites, atlas, police, textures et skins — communs au viewport de l'éditeur et à l'élément Qt...
Definition GameViewport.h:596
void pauseRequested()
Échap (ou le bouton B manette) en mode jeu réel, hors pause : demande l'ouverture de l'écran de pause...
hmi::EditorTool _tool
Outil d'édition actif (barre d'outils).
Definition GameViewport.h:646
bool _vsync
Synchronisation verticale demandée (cf. setVSyncEnabled).
Definition GameViewport.h:680
bool isDirty() const noexcept
Definition GameViewport.h:154
void hoveredCellChanged(std::optional< core::GridPosition > cell)
La case survolée vient de changer (déplacement de souris, ou sortie du viewport) — consommé par la ba...
bool _cameraPanned
true dès qu'un glisser bouton droit a dépassé le seuil de mouvement : distingue un pan d'un simple cl...
Definition GameViewport.h:636
bool _showGrid
Grille de repère (cases + salles) affichée (bascule F10).
Definition GameViewport.h:672
std::optional< std::size_t > selectedPlaneIndex() const noexcept
Definition GameViewport.h:283
hmi::Camera2D _camera
Caméra d'édition (cadre le niveau entier par défaut).
Definition GameViewport.h:625
void render(QRhiCommandBuffer *commandBuffer) override
Dessine une image : avance la simulation, compose la scène, puis la soumet.
Definition GameViewport.cpp:729
void setLayerVisible(RenderLayer layer, bool visible) noexcept
Affiche ou masque un calque du mode d'inspection (section « Calques » du panneau « Textures »,...
Definition GameViewport.h:375
std::optional< core::GridPosition > _pendingLink
Case du déclencheur/de la cible en attente d'appariement (outil Lien, premier clic).
Definition GameViewport.h:663
hmi::GameKeyBindings & gameBindings() noexcept
Accès modifiable aux touches de jeu (pour le remappage) : la session de jeu lit ces mêmes bindings,...
Definition GameViewport.h:130
void zoomChanged(float zoom)
Le zoom d'édition vient de changer (molette, pan, recadrage) — consommé par la barre d'état (LOT-57 T...
void setLocalization(const Localization *loc) noexcept
Fournit le catalogue de traduction (les messages d'état émis sont alors localisés).
Definition GameViewport.h:113
void showAllLayers() noexcept
Rétablit la visibilité de tous les calques (action « tout afficher », TACHE-03).
Definition GameViewport.h:380
void draftChanged()
Le brouillon vient d'être modifié (peinture, undo/redo, chargement, lien…) — le panneau « Liens » se ...
std::optional< std::pair< core::GridPosition, core::GridPosition > > _selectedLink
Liaison sélectionnée dans le panneau « Liens » (déclencheur, cible) : mise en surbrillance.
Definition GameViewport.h:665
bool canRedo() const override
Definition GameViewport.h:182
~GameViewport() override
void planeSelectionChanged(std::optional< std::size_t > index)
La sélection de plan vient de changer par un moyen autre que le panneau (retrait, réordonnancement) —...
Clock::time_point _previousFrame
Definition GameViewport.h:606
const LayerVisibility & layerVisibility() const noexcept
Jeu de visibilités par calque du mode d'inspection « définition des textures » (LOT-51,...
Definition GameViewport.h:366
void toggleGrid() noexcept
Bascule l'affichage de la grille de repère (F10).
Definition GameViewport.cpp:1014
bool canCopy() const override
Definition GameViewport.h:194
void save()
Enregistre le brouillon (Ctrl+S) : valide (LevelDraft::toLevel) puis écrit le fichier ; un brouillon ...
Definition GameViewport.cpp:902
void renderFrame(QRhiCommandBuffer *commandBuffer, float deltaSeconds)
Compose et soumet une image sur commandBuffer.
Definition GameViewport.cpp:749
void invalidateAsset(const std::string &fileName)
Rechargement à chaud ciblé d'un seul asset (LOT-43 TACHE-03).
Definition GameViewport.cpp:547
void releaseResources() override
Libère les ressources graphiques quand QRhiWidget défait son interface de rendu.
Definition GameViewport.cpp:719
std::optional< core::GridPosition > hoveredCell() const noexcept
Definition GameViewport.h:294
void initialize(QRhiCommandBuffer *commandBuffer) override
Crée (ou recrée) les ressources graphiques quand QRhiWidget fournit son interface de rendu,...
Definition GameViewport.cpp:685
int levelHeight() const
Definition GameViewport.cpp:1123
void resetCamera() noexcept
Réinitialise le cadrage manuel au cadrage automatique (touche 0).
Definition GameViewport.cpp:1018
void mouseReleaseEvent(QMouseEvent *event) override
Definition GameViewport.cpp:1188
void resizeLevel(int width, int height)
Redimensionne le niveau en cours d'édition (EX-EDIT-005).
Definition GameViewport.cpp:1108
void addCameraZoneFromDrag(core::GridPosition a, core::GridPosition b)
Ajoute une zone de caméra couvrant le rectangle (bornes a, b incluses, outil CameraZone,...
Definition GameViewport.cpp:262
bool _paused
Écran de pause affiché (LOT-59 TACHE-02) : tick() n'avance plus l'accumulateur de pas fixe tant que c...
Definition GameViewport.h:685
AudioEngine * _audioEngine
Moteur audio (LOT-60 TACHE-03), non possédé ; nul = sons de jeu désactivés (EX-NFR-040).
Definition GameViewport.h:659
void undo() override
Annule la dernière modification du brouillon (Ctrl+Z) ; sans effet si rien à annuler.
Definition GameViewport.cpp:1000
int levelWidth() const
Definition GameViewport.cpp:1119
std::optional< std::pair< core::GridPosition, core::GridPosition > > _selection
Definition GameViewport.h:661
bool renameOpenLevel(const std::string &newName)
Renomme le niveau ouvert (action Rename, F2, LOT-57 TACHE-04).
Definition GameViewport.cpp:924
int pixelHeight() const
Definition GameViewport.cpp:132
bool event(QEvent *event) override
Definition GameViewport.cpp:824
RenderMode renderMode() const noexcept
Definition GameViewport.h:357
std::optional< core::GridPosition > cellAt(const QMouseEvent *event)
Case de grille sous la position écran donnée (pixels physiques), si dans les bornes.
Definition GameViewport.cpp:211
bool _dirty
Modifications non enregistrées (garde-fou d'ouverture).
Definition GameViewport.h:671
void setAudioEngine(AudioEngine *engine) noexcept
Fournit le moteur audio (LOT-60 TACHE-03) : les événements de jeu détectés par hmi::GameSession (saut...
Definition GameViewport.h:124
std::optional< std::string > _activeTextureAsset
Asset assigné au clic par l'outil « Texture par instance » (LOT-45), vide si aucun n'est sélectionné ...
Definition GameViewport.h:641
hmi::GamepadPoller _gamepad
Definition GameViewport.h:604
void setRenderMode(RenderMode mode)
Choisit le mode de rendu et persiste le choix (EX-REN-046, EX-IHM-011).
Definition GameViewport.cpp:113
core::GridPosition _dragCurrent
Case courante du glisser (pour l'aperçu).
Definition GameViewport.h:650
std::optional< core::GridPosition > _highlightedOverride
Case sélectionnée dans la section « Objets » du panneau « Textures » (LOT-45) : mise en surbrillance,...
Definition GameViewport.h:668
void copy() override
Copie la sélection courante dans le presse-papiers local (Ctrl+C, EditContextTarget).
Definition GameViewport.h:186
void toggleRenderMode()
Bascule le mode de rendu Physique/Texture (F8, EX-REN-046) ; actif en édition, en essai et en jeu rée...
Definition GameViewport.cpp:1022
void renderDiagnosticsOverlay(int viewportWidth, int viewportHeight)
Compose et soumet le compteur de diagnostic (LOT-62 TACHE-02), coin haut-droit de l'écran – sans effe...
Definition GameViewport.cpp:787
LayerVisibility _layerVisibility
Jeu de visibilités par calque du mode d'inspection « définition des textures » (LOT-51) — tout visibl...
Definition GameViewport.h:679
void reloadAssets()
Rechargement à chaud global des assets graphiques (LOT-43 TACHE-03).
Definition GameViewport.cpp:526
void updateEditCamera()
Recale la caméra d'édition : cadrage automatique sur le niveau entier, sauf pan/zoom manuel actif (mo...
Definition GameViewport.cpp:171
std::optional< std::pair< core::GridPosition, core::GridPosition > > highlight() const
Zone à mettre en surbrillance (glisser en cours, sinon sélection mémorisée), le cas échéant.
Definition GameViewport.cpp:310
bool diagnosticsOverlayEnabled() const noexcept
Definition GameViewport.h:223
core::FixedTimestep _timestep
Definition GameViewport.h:605
void movePlane(std::size_t index, bool forward)
Déplace le plan index d'un rang ; forward le rapproche du dessus de la liste.
Definition GameViewport.cpp:436
void pasteClipboard()
Colle le presse-papiers à la case survolée (Ctrl+V).
Definition GameViewport.cpp:300
bool _rightDragging
Un glisser bouton droit est en cours (pan potentiel).
Definition GameViewport.h:633
core::Vector2 screenPosition(const QMouseEvent *event) const
Position écran (pixels physiques) d'un événement souris, convertie par le ratio d'affichage — même co...
Definition GameViewport.cpp:187
int pixelWidth() const
Definition GameViewport.cpp:128
void applyRectangle(core::GridPosition a, core::GridPosition b)
Remplit le rectangle (bornes a, b incluses) du type actif (outil Rectangle).
Definition GameViewport.cpp:245
GameViewport(const GameViewport &)=delete
const PlaneVisibility & planeVisibility() const noexcept
Definition GameViewport.h:288
bool simulationPaused() const noexcept
Definition GameViewport.h:250
void resumeSimulation()
Reprend la simulation après pauseSimulation() : réarme l'horloge de référence (_previousFrame) sur l'...
Definition GameViewport.cpp:1061
void setPlaneDensity(std::size_t index, int pixelsPerUnit)
Change la densité déclarée du plan index (le rééchantillonnage de l'image est fait par l'appelant,...
Definition GameViewport.cpp:455
const core::LevelDraft & draft() const noexcept
Definition GameViewport.h:278
void handleLinkClick(const QMouseEvent *event)
Résout le clic de l'outil Lien (hmi::resolveLinkClick) et l'applique (attente, liaison).
Definition GameViewport.cpp:564
GameViewport & operator=(const GameViewport &)=delete
void setPlaneVisible(std::size_t index, bool visible)
Masque ou réaffiche le plan index (aide d'édition).
Definition GameViewport.cpp:478
void wheelEvent(QWheelEvent *event) override
Definition GameViewport.cpp:1262
void setLevelParallaxEnabled(bool enabled)
Change le drapeau de parallaxe du niveau.
Definition GameViewport.cpp:473
bool canUndo() const override
Definition GameViewport.h:178
int _lastSimulationSteps
Nombre de pas de simulation consommés au dernier tick() – distinct de la cadence de rendu depuis le L...
Definition GameViewport.h:618
void setVSync(bool enabled) noexcept
Active/désactive la synchronisation verticale (EX-REN-022).
Definition GameViewport.cpp:1049
void paste() override
Colle le presse-papiers à la case survolée (Ctrl+V, EditContextTarget).
Definition GameViewport.h:190
void setActiveTile(core::TileType type) noexcept
Définit le type de tuile peint au clic (relié à la sélection de la palette).
Definition GameViewport.h:92
std::chrono::steady_clock Clock
Definition GameViewport.h:591
void addPlane(core::Plane plane)
Ajoute plane à la fin de la liste et le sélectionne.
Definition GameViewport.cpp:413
GameViewport(QWidget *parent=nullptr)
Definition GameViewport.cpp:82
void setDiagnosticsOverlayEnabled(bool enabled) noexcept
Affiche ou masque le compteur de diagnostic.
Definition GameViewport.cpp:1026
bool _painting
Un glisser de peinture (Pinceau) est en cours.
Definition GameViewport.h:647
RenderMode _renderMode
Mode de rendu courant (bascule F8, EX-REN-046), restauré des préférences au démarrage et réécrit à ch...
Definition GameViewport.h:676
void removeTextureOverride(core::GridPosition position)
Retire l'override de texture de position (bouton « Retirer » de la section « Objets »,...
Definition GameViewport.cpp:344
void copySelection()
Copie la zone sélectionnée dans le presse-papiers local (Ctrl+C).
Definition GameViewport.cpp:281
void setLevelSkinSet(std::optional< std::string > skinSet)
Assigne le jeu de skins du niveau courant (section « Fond », LOT-44).
Definition GameViewport.cpp:503
void removePlane(std::size_t index)
Retire l'entrée du plan index.
Definition GameViewport.cpp:420
hmi::InputState _input
Definition GameViewport.h:603
float _lastEmittedZoom
Dernier zoom notifié (zoomChanged), évite l'émission en boucle.
Definition GameViewport.h:654
std::vector< std::vector< core::TileType > > _clipboard
Presse-papiers local (types de tuiles, [ligne][colonne]), pour Ctrl+C/Ctrl+V.
Definition GameViewport.h:670
void setSkinSet(const std::string &setName)
Désigne le jeu de skins à utiliser pour le rendu (LOT-42).
Definition GameViewport.cpp:514
float zoom() const noexcept
Definition GameViewport.h:299
void updateMousePosition(const QMouseEvent *event)
Definition GameViewport.cpp:1140
void setActiveTextureAsset(std::optional< std::string > asset) noexcept
Définit l'asset assigné au clic par l'outil « Texture par instance » (LOT-45), relié à la sélection d...
Definition GameViewport.h:98
void markDraftMutated()
Invalide le rendu du brouillon et notifie les panneaux dépendants (draftChanged) — à appeler après to...
Definition GameViewport.cpp:323
core::Vector2 _manualCenter
Centre manuel courant, actif si _manualCamera.
Definition GameViewport.h:632
void quitGame() noexcept
Abandonne la partie en cours (« Quitter vers le menu » depuis la pause, LOT-59 TACHE-02,...
Definition GameViewport.cpp:1069
hmi::PlaneVisibility _planeVisibility
Visibilité des plans dans l'éditeur : aide d'édition, jamais persistée ni annulable.
Definition GameViewport.h:645
void handleTextureAssignClick(const QMouseEvent *event, bool rightClick)
Résout le clic de l'outil « Texture par instance » (hmi::resolveTextureAssignClick) et l'applique (as...
Definition GameViewport.cpp:357
void mousePressEvent(QMouseEvent *event) override
Definition GameViewport.cpp:1146
hmi::GamepadBindings _gamepadBindings
Definition GameViewport.h:601
hmi::ComposedScene _diagnosticsScene
Scène dédiée du compteur de diagnostic, jamais partagée avec _session (dont le HUD de jeu vit dans sa...
Definition GameViewport.h:622
void keyPressEvent(QKeyEvent *event) override
Definition GameViewport.cpp:843
core::Vector2 worldPositionAt(const QMouseEvent *event)
Convertit la position écran d'un événement souris en position monde, non calée sur la grille (EX-DEC-...
Definition GameViewport.cpp:398
void setLevelCameraFraming(core::CameraFramingConfig cameraFraming)
Change le cadrage de caméra du niveau courant (section « Cadrage », EX-EDIT-028, LOT-64).
Definition GameViewport.cpp:509
bool wouldResizeDrop(int width, int height) const
Definition GameViewport.cpp:1115
std::unique_ptr< hmi::DraftRenderer > _draftRenderer
Definition GameViewport.h:597
void setHighlightedLink(std::optional< std::pair< core::GridPosition, core::GridPosition > > link)
Met en surbrillance la liaison (déclencheur, cible) dans le viewport (sélection depuis le panneau « L...
Definition GameViewport.cpp:330
hmi::GameKeyBindings _gameBindings
Definition GameViewport.h:600
void setLevelBackground(std::optional< std::string > background)
Assigne l'asset de fond du niveau courant (section « Fond », LOT-44).
Definition GameViewport.cpp:497
void startGame(std::filesystem::path map)
Lance le jeu sur la carte map.
Definition GameViewport.cpp:1075
core::GridPosition _dragStart
Case de départ du glisser Rectangle/Sélection.
Definition GameViewport.h:649
void mouseMoveEvent(QMouseEvent *event) override
Definition GameViewport.cpp:1225
QString statusText(const char *key) const
Texte localisé d'une clé de statut (repli sur la clé si aucun catalogue).
Definition GameViewport.cpp:1127
std::optional< core::GridPosition > _hoverCell
Case actuellement survolée (cible du collage) ; absente hors de la grille ou après que le curseur a q...
Definition GameViewport.h:653
void createResources()
Crée l'atlas, la police, le cache de textures et le pipeline de dessin sur l'interface de rendu coura...
Definition GameViewport.cpp:136
bool canPaste() const override
Definition GameViewport.h:198
hmi::GamepadBindings & gamepadBindings() noexcept
Accès modifiable aux boutons manette (pour le remappage), même principe que gameBindings.
Definition GameViewport.h:136
void toggleDiagnosticsOverlay() noexcept
Bascule le compteur de diagnostic (cadence, primitives, passes, pas de simulation ; F9,...
Definition GameViewport.cpp:1033
void setPlaneParallax(std::size_t index, float parallaxX, float parallaxY)
Change les facteurs de parallaxe du plan index.
Definition GameViewport.cpp:461
float _manualZoom
Zoom manuel courant, actif si _manualCamera.
Definition GameViewport.h:631
void stopPlaytest()
Termine l'essai et restitue l'éditeur (brouillon intact).
Definition GameViewport.cpp:1038
std::filesystem::path _gameMap
Carte jouée par le mode jeu (LOT-67 : une, pas une séquence).
Definition GameViewport.h:686
void unlinkMechanism(core::GridPosition targetPosition)
Supprime la liaison dont la cible est targetPosition (bouton « Supprimer » du panneau « Liens ») ; sa...
Definition GameViewport.cpp:338
hmi::FrameRateAverage _frameRateAverage
Moyenne glissante de la cadence de rendu, alimentée uniquement quand _diagnosticsEnabled est vrai (ri...
Definition GameViewport.h:615
SkinCatalog & skinCatalog() noexcept
Catalogue des jeux de skins, édité par le panneau « Textures » (LOT-42).
Definition GameViewport.h:391
void setHighlightedTextureOverride(std::optional< core::GridPosition > position)
Met en surbrillance une case portant un override (sélection depuis la section « Objets »,...
Definition GameViewport.cpp:350
const Localization * _loc
Sélection mémorisée (bornes min/max incluses), pour copier (Ctrl+C).
Definition GameViewport.h:657
EditorTool activeTool() const noexcept
Definition GameViewport.h:304
void keyReleaseEvent(QKeyEvent *event) override
Definition GameViewport.cpp:1131
hmi::EditorKeyBindings _editorBindings
Raccourcis d'éditeur remappables (LOT-45).
Definition GameViewport.h:602
void resourcesReady()
Les ressources graphiques et le catalogue de skins viennent d'être (re)créés (QRhiWidget::initialize)...
void setPlaneDepth(std::size_t index, core::PlaneDepth depth)
Change la profondeur du plan index.
Definition GameViewport.cpp:449
core::TileType _activeTile
Type peint au clic (palette).
Definition GameViewport.h:638
void setPlaneIsolated(std::size_t index, bool isolate)
Isole le plan index, ou réaffiche tout si isolate est faux.
Definition GameViewport.cpp:486
float minManualZoom() const
Definition GameViewport.cpp:193
bool _dragging
Un glisser Rectangle/Sélection est en cours.
Definition GameViewport.h:648
void statusMessage(const QString &message)
Message d'état à afficher (enregistrement, essai, erreur de validation…).
std::optional< std::size_t > _selectedPlane
Plan sélectionné dans le panneau « Plans » (LOT-69), si un l'est.
Definition GameViewport.h:643
void paintAt(const QMouseEvent *event)
Peint le type actif à la case sous event, si valide (invalide la scène rendue).
Definition GameViewport.cpp:225
void removeCameraZone(std::size_t index)
Retire la zone de caméra au rang index (section « Cadrage », EX-LVL-007, EX-EDIT-029) ; sans effet si...
Definition GameViewport.cpp:275
bool _gameMode
La session courante est une partie (menu Jouer) et non un essai depuis l'éditeur (enchaînement/retour...
Definition GameViewport.h:681
bool vsyncEnabled() const noexcept
Definition GameViewport.h:263
void pauseSimulation() noexcept
Suspend la simulation (écran de pause, LOT-59 TACHE-02) : tick() cesse d'alimenter l'accumulateur de ...
Definition GameViewport.cpp:1057
std::optional< hmi::GameSession > _session
Session de jeu de l'essai immédiat ; nulle en mode édition (essai ajouté au LOT-35 TACHE-04).
Definition GameViewport.h:691
void redo() override
Refait la dernière modification annulée (Ctrl+Y) ; sans effet si rien à refaire.
Definition GameViewport.cpp:1007
void renderModeChanged(RenderMode mode)
Le mode de rendu vient de basculer (F8) — la palette met ses vignettes à jour pour rester fidèle au c...
Association action de jeu (GameAction, partagée avec GameKeyBindings) -> bouton manette,...
Definition GamepadBindings.h:31
Sonde la manette (XInput, joueur 0) et fusionne son état dans un InputState.
Definition GamepadPoller.h:57
État des entrées d'une frame, avec détection des fronts (pressée / relâchée).
Definition InputState.h:97
Jeu de visibilités par calque, pour le mode d'inspection « définition des textures » (LOT-51).
Definition LayerVisibility.h:48
Catalogue de traduction (i18n) : associe des clés stables à des chaînes selon la langue active,...
Definition Localization.h:29
Jeu de visibilités des plans picturaux d'un niveau, adressé par rang.
Definition PlaneVisibility.h:39
Lot de sprites, atlas, police bitmap, registre de textures et catalogue de skins — créés ensemble,...
Definition SceneResources.h:47
Catalogue des jeux de skins : (jeu, type de tuile) → { asset, mode }.
Definition SkinCatalog.h:100
Dessine des quads texturés au travers de QRhi, avec transparence et échantillonnage nearest (pixel ar...
Definition SpriteBatch.h:59
Texture d'atlas et table de régions, chargée depuis un fichier image avec repli procédural (EX-REN-04...
Definition TextureAtlas.h:40
Charge, valide et met en cache des textures GPU désignées par leur nom de fichier logique.
Definition TextureCache.h:60
PlaneDepth
Position d'un plan dans l'ordonnancement de rendu, relativement au personnage (EX-DEC-042).
Definition Plane.h:28
TileType
Type d'une tuile de la grille d'une carte (EX-GP-001).
Definition TileType.h:32
@ Solid
Definition TileType.h:34
Definition AudioEngine.cpp:15
EditorTool
Outil actif dans la grille de l'éditeur, changé via Tab ou la barre d'outils (hmi::EditorActions).
Definition EditorTool.h:35
@ Paint
Definition EditorTool.h:35
constexpr RenderMode DEFAULT_RENDER_MODE
Mode appliqué au premier lancement et à défaut de préférence exploitable.
Definition RenderMode.h:39
RenderLayer
Calques de dessin, du plus arrière au plus avant (EX-REN-014, EX-DEC-002).
Definition RenderLayer.h:42
RenderMode
Mode de rendu de la scène : lecture directe des collisions, ou habillage.
Definition RenderMode.h:23
Cadrage de caméra résolu d'un niveau : le mode retenu et ses paramètres.
Definition CameraFraming.h:71
Position d'une case dans la grille d'un niveau, en coordonnées entières.
Definition GridPosition.h:20
Plan pictural : image couvrant tout le niveau, avec sa densité, sa parallaxe et sa profondeur (EX-DEC...
Definition Plane.h:53
Vecteur bidimensionnel en coordonnées monde (composantes float).
Definition Vector2.h:21