JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
hmi::ScreenRouter Class Reference

Pilote la machine à états des écrans, et publie l'écran courant. More...

#include <ScreenRouter.h>

Inheritance diagram for hmi::ScreenRouter:

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

Detailed Description

Pilote la machine à états des écrans, et publie l'écran courant.

Ce qu'il n'est pas

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.

Pourquoi une énumération et non un nom de fichier

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.

Member Enumeration Documentation

◆ RpgScreen

enum class hmi::ScreenRouter::RpgScreen
strong

Lequel des neuf écrans du RPG est ouvert, quand currentScreen vaut RpgScreen.

Enumerator
CharacterSheet 
Inventory 
QuestJournal 
WorldMap 
Dialogue 
Merchant 
GuildBoard 
CombatHud 
TeamSheet 

◆ Screen

enum class hmi::ScreenRouter::Screen
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 

Constructor & Destructor Documentation

◆ ScreenRouter()

hmi::ScreenRouter::ScreenRouter ( QObject * parent = nullptr)
explicit

Member Function Documentation

◆ apply()

bool hmi::ScreenRouter::apply ( ScreenEvent event)
private

Applique event si la table l'autorise.

Returns
true si l'état a changé.

◆ changed

void hmi::ScreenRouter::changed ( )
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.

◆ closeCredits()

void hmi::ScreenRouter::closeCredits ( )

◆ closeOptions()

void hmi::ScreenRouter::closeOptions ( )

◆ closeRpgScreen()

void hmi::ScreenRouter::closeRpgScreen ( )

◆ currentRpgScreen()

ScreenRouter::RpgScreen hmi::ScreenRouter::currentRpgScreen ( ) const
nodiscardnoexcept

◆ currentScreen()

ScreenRouter::Screen hmi::ScreenRouter::currentScreen ( ) const
nodiscardnoexcept

◆ developerBuild()

bool hmi::ScreenRouter::developerBuild ( )
staticnodiscardnoexcept

◆ nextRpgScreen()

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.

◆ openCredits()

void hmi::ScreenRouter::openCredits ( )

◆ openGame()

void hmi::ScreenRouter::openGame ( )

◆ openMenu()

void hmi::ScreenRouter::openMenu ( )

◆ openOptions()

void hmi::ScreenRouter::openOptions ( )

◆ openPause()

void hmi::ScreenRouter::openPause ( )

◆ openRpgScreen()

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.

◆ previousRpgScreen()

void hmi::ScreenRouter::previousRpgScreen ( )

◆ quitToMenu()

void hmi::ScreenRouter::quitToMenu ( )

◆ resume()

void hmi::ScreenRouter::resume ( )

Member Data Documentation

◆ _rpgScreen

RpgScreenId hmi::ScreenRouter::_rpgScreen = RpgScreenId::CharacterSheet
private

◆ _state

ScreenState hmi::ScreenRouter::_state {}
private

Property Documentation

◆ currentRpgScreen

RpgScreen hmi::ScreenRouter::currentRpgScreen
read

◆ currentScreen

QML_SINGLETONScreen hmi::ScreenRouter::currentScreen
read

◆ developerBuild

bool hmi::ScreenRouter::developerBuild
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.


The documentation for this class was generated from the following files:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Presentation/ScreenRouter.h
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Presentation/ScreenRouter.cpp