JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
LevelDraft.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 <cstddef>
7#include <optional>
8#include <string>
9#include <vector>
10
13#include "Core/Levels/Level.h"
17#include "Core/Levels/TileMap.h"
19
24
25namespace core {
26
44public:
51 [[nodiscard]] static LevelDraft empty(std::string name, int width, int height);
52
57 [[nodiscard]] static LevelDraft fromLevel(const Level& level);
58
70 void paintTile(int column, int row, TileType type);
71
86 void paintRegion(int originColumn, int originRow,
87 const std::vector<std::vector<TileType>>& block);
88
93 void setEntry(int column, int row);
94
99 void setExit(int column, int row);
100
111 void linkMechanism(GridPosition switchPosition, GridPosition targetPosition);
112
115 void unlinkMechanism(GridPosition targetPosition);
125 void setTextureOverride(GridPosition position, std::string assetName);
126
128 void removeTextureOverride(GridPosition position);
129
143
145 void addPlane(Plane plane);
146
149 void removePlane(std::size_t index);
150
154 bool setPlaneDensity(std::size_t index, int pixelsPerUnit);
155
158 bool setPlaneParallax(std::size_t index, float parallaxX, float parallaxY);
159
162 bool setPlaneOpacity(std::size_t index, float opacity);
163
166 bool setPlaneDepth(std::size_t index, PlaneDepth depth);
167
170 std::optional<std::size_t> movePlaneForward(std::size_t index);
171
173 std::optional<std::size_t> movePlaneBackward(std::size_t index);
174
176 std::optional<std::size_t> movePlaneToFront(std::size_t index);
177
179 std::optional<std::size_t> movePlaneToBack(std::size_t index);
180
182 void setParallaxEnabled(bool enabled);
183
185
196 void resize(int width, int height);
197
209 [[nodiscard]] bool wouldResizeDropContent(int width, int height) const noexcept;
210
215 bool undo();
216
225 bool redo();
226
228 [[nodiscard]] bool canUndo() const noexcept {
229 return !_undoHistory.empty();
230 }
231
233 [[nodiscard]] bool canRedo() const noexcept {
234 return !_redoHistory.empty();
235 }
236
238 void setName(std::string name) {
239 _name = std::move(name);
240 }
241
247 void setBackground(std::optional<std::string> background);
248
253 void setSkinSet(std::optional<std::string> skinSet);
254
260
270 void addCameraZone(CameraZone zone);
271
276 void removeCameraZone(std::size_t index);
277
279 [[nodiscard]] const std::string& name() const noexcept {
280 return _name;
281 }
282
284 [[nodiscard]] const TileMap& tileMap() const noexcept {
285 return _tileMap;
286 }
287
289 [[nodiscard]] std::optional<GridPosition> entry() const noexcept {
290 return _entry;
291 }
292
294 [[nodiscard]] std::optional<GridPosition> exit() const noexcept {
295 return _exit;
296 }
297
299 [[nodiscard]] const std::vector<Mechanism>& mechanisms() const noexcept {
300 return _mechanisms;
301 }
302
303 [[nodiscard]] const std::vector<TileTextureOverride>& textureOverrides() const noexcept {
304 return _textureOverrides;
305 }
306
308 [[nodiscard]] const std::vector<Plane>& planes() const noexcept {
309 return _planes;
310 }
311
318 [[nodiscard]] const std::vector<TileLayer>& layers() const noexcept {
319 return _layers;
320 }
321
324 [[nodiscard]] const std::vector<MapEntity>& entities() const noexcept {
325 return _entities;
326 }
327
329 [[nodiscard]] bool parallaxEnabled() const noexcept {
330 return _parallaxEnabled;
331 }
332
334 [[nodiscard]] const std::optional<std::string>& background() const noexcept {
335 return _background;
336 }
337
339 [[nodiscard]] const std::optional<std::string>& skinSet() const noexcept {
340 return _skinSet;
341 }
342
344 [[nodiscard]] const CameraFramingConfig& cameraFraming() const noexcept {
345 return _cameraFraming;
346 }
347
355 [[nodiscard]] LevelLoadResult toLevel() const;
356
357private:
358 LevelDraft(std::string name, TileMap tileMap);
359
362 void paintTileInternal(int column, int row, TileType type);
363
365 void setEntryInternal(int column, int row);
366
368 void setExitInternal(int column, int row);
369
376 void removeLinkedDataAt(GridPosition position, bool keepTextureOverride = false);
377
381
383 struct State {
384 std::string name;
386 std::optional<GridPosition> entry;
387 std::optional<GridPosition> exit;
388 std::vector<Mechanism> mechanisms;
389 std::vector<TileLayer> layers;
390 std::vector<MapEntity> entities;
391 std::optional<std::string> background;
392 std::optional<std::string> skinSet;
393 std::vector<TileTextureOverride> textureOverrides;
395 std::vector<Plane> planes;
397 };
398
400 [[nodiscard]] State snapshot() const;
401
403 void restore(State state);
404
407 void pushUndo();
408
409 std::string _name;
411 std::optional<GridPosition> _entry;
412 std::optional<GridPosition> _exit;
413 std::vector<Mechanism> _mechanisms;
414 std::vector<TileLayer> _layers;
415 std::vector<MapEntity> _entities;
416 std::optional<std::string> _background;
417 std::optional<std::string> _skinSet;
418 std::vector<TileTextureOverride> _textureOverrides;
420 std::vector<Plane> _planes;
421 bool _parallaxEnabled = true;
422 std::vector<State> _undoHistory;
423 std::vector<State> _redoHistory;
424};
425
426} // namespace core
Mode de cadrage de caméra porté par le niveau (EX-LVL-006, EX-REN-016, LOT-64).
Position entière dans la grille d'un niveau (colonne, ligne).
Chargement d'un niveau depuis le format JSON (liste de tuiles-objets).
Niveau chargé : grille de tuiles, entrée/sortie et mécanismes.
Entité placée sur une carte : PNJ, coffre, panneau, portail, déclencheur (LOT-04).
Couche de tuiles typée d'une carte (LOT-04).
Grille de tuiles typées d'un niveau.
Types de tuiles d'une carte et utilitaires associés.
LevelLoadResult toLevel() const
Convertit le brouillon en Level validé (EX-EDIT-007), en repassant par la même validation que LevelLo...
Definition LevelDraft.cpp:466
bool parallaxEnabled() const noexcept
Definition LevelDraft.h:329
std::optional< std::string > _background
Definition LevelDraft.h:416
std::optional< std::size_t > movePlaneBackward(std::size_t index)
Recule le plan au rang index d'un cran ; sans effet s'il est déjà le premier.
Definition LevelDraft.cpp:274
const CameraFramingConfig & cameraFraming() const noexcept
Definition LevelDraft.h:344
bool setPlaneParallax(std::size_t index, float parallaxX, float parallaxY)
Change les facteurs de parallaxe du plan au rang index (EX-DEC-043).
Definition LevelDraft.cpp:233
void paintTileInternal(int column, int row, TileType type)
Logique de paintTile, sans pushUndo() : réutilisée cellule par cellule par paintRegion pour n'empiler...
Definition LevelDraft.cpp:88
void unlinkMechanism(GridPosition targetPosition)
Retire la liaison de porte à targetPosition, si elle en a une.
Definition LevelDraft.cpp:179
std::vector< TileTextureOverride > _textureOverrides
Definition LevelDraft.h:418
void addCameraZone(CameraZone zone)
Ajoute une zone de caméra dessinée à la main en fin de liste (mode PerRoom, EX-LVL-007,...
Definition LevelDraft.cpp:335
bool setPlaneDensity(std::size_t index, int pixelsPerUnit)
Change la densité du plan au rang index (EX-DEC-041).
Definition LevelDraft.cpp:224
void setExitInternal(int column, int row)
Logique de setExit, sans pushUndo().
Definition LevelDraft.cpp:138
std::vector< TileLayer > _layers
Definition LevelDraft.h:414
std::optional< std::size_t > movePlaneForward(std::size_t index)
Avance le plan au rang index d'un cran ; sans effet s'il est déjà le dernier.
Definition LevelDraft.cpp:262
void restore(State state)
Restitue un état capturé précédemment.
Definition LevelDraft.cpp:445
std::optional< GridPosition > _exit
Definition LevelDraft.h:412
bool _parallaxEnabled
Definition LevelDraft.h:421
void setExit(int column, int row)
Place la sortie en (column, row) ; déplace l'occurrence existante s'il y en avait une (unicité,...
Definition LevelDraft.cpp:133
static LevelDraft fromLevel(const Level &level)
Crée un brouillon à partir d'un niveau déjà chargé (édition d'un fichier existant).
Definition LevelDraft.cpp:42
void setCameraFraming(CameraFramingConfig cameraFraming)
Change le cadrage de caméra du niveau (EX-LVL-006, EX-EDIT-028), annulable.
Definition LevelDraft.cpp:330
void removeCameraZone(std::size_t index)
Retire la zone de caméra au rang index (EX-LVL-007, EX-EDIT-029), annulable.
Definition LevelDraft.cpp:340
bool redo()
Refait la dernière mutation annulée.
Definition LevelDraft.cpp:419
std::optional< GridPosition > exit() const noexcept
Definition LevelDraft.h:294
const std::vector< TileLayer > & layers() const noexcept
Definition LevelDraft.h:318
const std::optional< std::string > & skinSet() const noexcept
Definition LevelDraft.h:339
void setTextureOverride(GridPosition position, std::string assetName)
Assigne (ou remplace) la texture affichée pour une case précise (EX-EDIT-043), prioritaire sur le ski...
Definition LevelDraft.cpp:186
void removeTextureOverride(GridPosition position)
Retire l'override de texture de position, s'il y en a un. Sans effet sinon.
Definition LevelDraft.cpp:195
const std::vector< MapEntity > & entities() const noexcept
Definition LevelDraft.h:324
std::optional< GridPosition > entry() const noexcept
Definition LevelDraft.h:289
std::vector< Plane > _planes
Definition LevelDraft.h:420
bool canRedo() const noexcept
Definition LevelDraft.h:233
const std::string & name() const noexcept
Definition LevelDraft.h:279
bool wouldResizeDropContent(int width, int height) const noexcept
Indique si redimensionner à (width, height) supprimerait du contenu déjà posé.
Definition LevelDraft.cpp:380
void paintRegion(int originColumn, int originRow, const std::vector< std::vector< TileType > > &block)
Applique un bloc rectangulaire de types de tuiles à partir de (originColumn, originRow).
Definition LevelDraft.cpp:69
std::vector< State > _undoHistory
Definition LevelDraft.h:422
std::vector< State > _redoHistory
Definition LevelDraft.h:423
State snapshot() const
Capture l'état courant (pour empiler dans l'historique undo/redo).
Definition LevelDraft.cpp:429
const std::vector< Plane > & planes() const noexcept
Definition LevelDraft.h:308
void pushUndo()
Empile l'état courant sur la pile d'annulation ; à appeler avant toute mutation undoable.
Definition LevelDraft.cpp:461
CameraFramingConfig _cameraFraming
Definition LevelDraft.h:419
void removePlane(std::size_t index)
Retire le plan au rang index.
Definition LevelDraft.cpp:216
bool setPlaneDepth(std::size_t index, PlaneDepth depth)
Change la profondeur du plan au rang index (EX-DEC-042).
Definition LevelDraft.cpp:253
void setEntryInternal(int column, int row)
Logique de setEntry, sans pushUndo().
Definition LevelDraft.cpp:123
std::vector< MapEntity > _entities
Definition LevelDraft.h:415
void paintTile(int column, int row, TileType type)
Peint le type de tuile type en (column, row).
Definition LevelDraft.cpp:64
std::vector< Mechanism > _mechanisms
Definition LevelDraft.h:413
std::optional< std::size_t > movePlaneToFront(std::size_t index)
Amène le plan au rang index au dernier rang (le plus en avant).
Definition LevelDraft.cpp:286
void removeLinkedDataAt(GridPosition position, bool keepTextureOverride=false)
Retire toute liaison/configuration référençant position (déclencheur, porte, danger commuté,...
Definition LevelDraft.cpp:491
void setParallaxEnabled(bool enabled)
Active ou désactive la parallaxe des plans pour ce niveau (EX-DEC-043).
Definition LevelDraft.cpp:315
const TileMap & tileMap() const noexcept
Definition LevelDraft.h:284
LevelDraft(std::string name, TileMap tileMap)
Definition LevelDraft.cpp:35
std::optional< GridPosition > _entry
Definition LevelDraft.h:411
void setEntry(int column, int row)
Place l'entrée en (column, row) ; déplace l'occurrence existante s'il y en avait une (unicité,...
Definition LevelDraft.cpp:118
static LevelDraft empty(std::string name, int width, int height)
Crée un brouillon vierge (grille entièrement Empty), sans entrée ni sortie.
Definition LevelDraft.cpp:38
void resize(int width, int height)
Redimensionne la grille (EX-EDIT-005).
Definition LevelDraft.cpp:348
bool canUndo() const noexcept
Definition LevelDraft.h:228
bool undo()
Annule la dernière mutation (EX-EDIT-005).
Definition LevelDraft.cpp:409
const std::optional< std::string > & background() const noexcept
Definition LevelDraft.h:334
void setSkinSet(std::optional< std::string > skinSet)
Assigne le jeu de skins du niveau (EX-EDIT-024), annulable.
Definition LevelDraft.cpp:325
std::optional< std::string > _skinSet
Definition LevelDraft.h:417
std::string _name
Definition LevelDraft.h:409
bool setPlaneOpacity(std::size_t index, float opacity)
Change l'opacité du plan au rang index.
Definition LevelDraft.cpp:243
std::optional< std::size_t > movePlaneToBack(std::size_t index)
Envoie le plan au rang index au premier rang (le plus en arrière).
Definition LevelDraft.cpp:301
TileMap _tileMap
Definition LevelDraft.h:410
void setName(std::string name)
Renomme le niveau.
Definition LevelDraft.h:238
const std::vector< TileTextureOverride > & textureOverrides() const noexcept
Definition LevelDraft.h:303
void linkMechanism(GridPosition switchPosition, GridPosition targetPosition)
Lie un interrupteur/plaque de pression à une porte ou à un danger commuté (EX-EDIT-003,...
Definition LevelDraft.cpp:148
void addPlane(Plane plane)
Ajoute plane en fin de liste (le plus en avant).
Definition LevelDraft.cpp:211
void setBackground(std::optional< std::string > background)
Assigne l'asset de fond du niveau (EX-REN-044), annulable.
Definition LevelDraft.cpp:320
const std::vector< Mechanism > & mechanisms() const noexcept
Definition LevelDraft.h:299
Definition Level.h:125
Grille dense de tuiles typées (EX-GP-001), origine haut-gauche.
Definition TileMap.h:25
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
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
Cadrage de caméra résolu d'un niveau : le mode retenu et ses paramètres.
Definition CameraFraming.h:71
Rectangle de caméra dessiné à la main par le level designer (mode par salle), en cases.
Definition CameraFraming.h:53
Position d'une case dans la grille d'un niveau, en coordonnées entières.
Definition GridPosition.h:20
Configuration de la plateforme en position, créée aux valeurs par défaut si absente.
Definition LevelDraft.h:383
std::vector< TileLayer > layers
Definition LevelDraft.h:389
std::optional< GridPosition > exit
Definition LevelDraft.h:387
std::optional< std::string > background
Definition LevelDraft.h:391
std::string name
Definition LevelDraft.h:384
std::vector< MapEntity > entities
Definition LevelDraft.h:390
std::vector< Mechanism > mechanisms
Definition LevelDraft.h:388
std::vector< TileTextureOverride > textureOverrides
Definition LevelDraft.h:393
std::vector< Plane > planes
Definition LevelDraft.h:395
CameraFramingConfig cameraFraming
Definition LevelDraft.h:394
std::optional< std::string > skinSet
Definition LevelDraft.h:392
bool parallaxEnabled
Definition LevelDraft.h:396
std::optional< GridPosition > entry
Definition LevelDraft.h:386
TileMap tileMap
Definition LevelDraft.h:385
Résultat d'un chargement de niveau : soit un Level, soit une erreur décrite.
Definition LevelLoader.h:81
Plan pictural : image couvrant tout le niveau, avec sa densité, sa parallaxe et sa profondeur (EX-DEC...
Definition Plane.h:53