|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Pilote la machine à états des écrans, et publie l'écran courant. More...
#include <ScreenRouter.h>
Public Types | |
| enum class | Screen { Menu , Game , Options , Pause , Credits , RpgScreen } |
| Écran affiché. More... | |
| enum class | RpgScreen { CharacterSheet , Inventory , QuestJournal , WorldMap , Dialogue , Merchant , GuildBoard , CombatHud , TeamSheet } |
| Lequel des neuf écrans du RPG est ouvert, quand currentScreen vaut RpgScreen. More... | |
Signals | |
| void | changed () |
| Émis quand l'écran courant change. | |
Public Member Functions | |
| ScreenRouter (QObject *parent=nullptr) | |
| Screen | currentScreen () const noexcept |
| RpgScreen | currentRpgScreen () const noexcept |
| Q_INVOKABLE void | openMenu () |
| Q_INVOKABLE void | openGame () |
| Q_INVOKABLE void | openOptions () |
| Q_INVOKABLE void | closeOptions () |
| Q_INVOKABLE void | openPause () |
| Q_INVOKABLE void | resume () |
| Q_INVOKABLE void | quitToMenu () |
| Q_INVOKABLE void | openCredits () |
| Q_INVOKABLE void | closeCredits () |
| Q_INVOKABLE void | openRpgScreen (RpgScreen screen) |
| Ouvre un écran du RPG. | |
| Q_INVOKABLE void | closeRpgScreen () |
| Q_INVOKABLE void | nextRpgScreen () |
| Passe à l'écran suivant/précédent du RPG sans repasser par le menu (EX-IHM-090). | |
| Q_INVOKABLE void | previousRpgScreen () |
Static Public Member Functions | |
| static bool | developerBuild () noexcept |
Properties | |
| QML_SINGLETONScreen | currentScreen |
| RpgScreen | currentRpgScreen |
| bool | developerBuild |
| Vrai dans un binaire de developpement, faux dans un binaire livre. | |
Private Member Functions | |
| bool | apply (ScreenEvent event) |
Applique event si la table l'autorise. | |
Private Attributes | |
| ScreenState | _state {} |
| RpgScreenId | _rpgScreen = RpgScreenId::CharacterSheet |
Pilote la machine à états des écrans, et publie l'écran courant.
Il ne décide rien. Toute la règle vit dans hmi::resolveTransition — table pure, sans Qt, couverte par ses tests — et ce routeur ne fait que l'appeler et diffuser le résultat. C'est ce qui permet de vérifier la navigation sans ouvrir une fenêtre, et qui l'a déjà été.
Une transition non déclarée est refusée, jamais silencieusement acceptée : resolveTransition rend alors std::nullopt et l'état ne bouge pas. Sans cette discipline, un openOptions() appelé depuis un écran d'où les options ne s'ouvrent pas produirait un état que la table ne décrit pas, et dont personne ne saurait comment revenir.
Le routeur publie un état, pas un chemin. Faire transiter « Screens/MainMenu.qml » ferait connaître à la présentation le nom des fichiers de la conception — que l'artiste doit pouvoir renommer sans toucher au C++. La correspondance entre état et fichier vit donc en QML, dans Logic/ScreenStack.qml, du côté développeur mais du bon côté de la frontière.
|
strong |
Lequel des neuf écrans du RPG est ouvert, quand currentScreen vaut RpgScreen.
| Enumerator | |
|---|---|
| CharacterSheet | |
| Inventory | |
| QuestJournal | |
| WorldMap | |
| Dialogue | |
| Merchant | |
| GuildBoard | |
| CombatHud | |
| TeamSheet | |
|
strong |
Écran affiché.
Reprend hmi::ScreenId, moins Editor : l'éditeur de niveaux est un binaire séparé depuis le LOT-86, et le jeu n'a aucun chemin qui y mène.
| Enumerator | |
|---|---|
| Menu | |
| Game | |
| Options | |
| Pause | |
| Credits | |
| RpgScreen | |
|
explicit |
|
private |
Applique event si la table l'autorise.
|
signal |
Émis quand l'écran courant change.
Rien n'est émis si la transition a été refusée : l'interface ne doit pas se rafraîchir pour un geste que la table n'autorise pas.
| void hmi::ScreenRouter::closeCredits | ( | ) |
| void hmi::ScreenRouter::closeOptions | ( | ) |
| void hmi::ScreenRouter::closeRpgScreen | ( | ) |
|
nodiscardnoexcept |
|
nodiscardnoexcept |
|
staticnodiscardnoexcept |
| void hmi::ScreenRouter::nextRpgScreen | ( | ) |
Passe à l'écran suivant/précédent du RPG sans repasser par le menu (EX-IHM-090).
C'est le geste des gâchettes de la manette.
| void hmi::ScreenRouter::openCredits | ( | ) |
| void hmi::ScreenRouter::openGame | ( | ) |
| void hmi::ScreenRouter::openMenu | ( | ) |
| void hmi::ScreenRouter::openOptions | ( | ) |
| void hmi::ScreenRouter::openPause | ( | ) |
| void hmi::ScreenRouter::openRpgScreen | ( | RpgScreen | screen | ) |
Ouvre un écran du RPG.
L'écran d'où l'on vient est retenu par la table : refermer y revient, qu'on soit venu du menu, du jeu ou de la pause.
| void hmi::ScreenRouter::previousRpgScreen | ( | ) |
| void hmi::ScreenRouter::quitToMenu | ( | ) |
| void hmi::ScreenRouter::resume | ( | ) |
|
private |
|
private |
|
read |
|
read |
|
readnoexcept |
Vrai dans un binaire de developpement, faux dans un binaire livre.
Ce qui s'y adosse est un outil de verification – le selecteur d'ecrans de Logic/ScreenProbe.qml –, et un outil de verification ne doit pas pouvoir partir avec le jeu. Une liaison QML sur cette propriete le garantit a la construction, la ou une consigne de relecture ne garantit rien.