Documentation on displays

This commit is contained in:
Yohann D'ANELLO 2021-01-10 17:33:06 +01:00
parent 0ef5875a72
commit 568b8f3eba
5 changed files with 78 additions and 19 deletions

View File

@ -3,13 +3,6 @@ Gestion de l'affichage
.. _curses: https://docs.python.org/3/howto/curses.html .. _curses: https://docs.python.org/3/howto/curses.html
L'intégralité de l'affichage du jeu est géré grâce à la bibliothèque native de
Python curses_.
.. warning::
Plus de documentation à venir.
.. toctree:: .. toctree::
:maxdepth: 3 :maxdepth: 3
@ -19,3 +12,51 @@ Python curses_.
map map
stats stats
logs logs
L'intégralité de l'affichage du jeu est géré grâce à la bibliothèque native de Python curses_.
Initialisation du terminal
--------------------------
Au lancement du jeu, le terminal est initialisé, les caractères spéciaux sont traduits en abstraction curses, les
caractères tapés par l'utilisateur ne sont plus affichés sur le terminal, on envoie les touches tapées à curses en
permanence sans avoir à taper sur Entrée, le curseur est rendu invisible, on active le support des couleurs et enfin
on déclare vouloir attraper tous les clics de souris. Tout cela est fait dans un contexte Python, qui permet
d'effectuer les opérations inverses lors de la fermeture du programme, même en cas de crash, afin de retrouver un
terminal utilisable.
Pads
----
Chaque morceau d'affichage est géré dans un *pad*. Un pad est un objet défini par curses, représentant une sous-fenêtre,
qui a l'avantage d'être un peu plus flexible qu'une simple fenêtre. Un pad peut en effet dépasser de l'écran, et on
peut choisir où placer le coin avant gauche et quelle partie du pad il faut dessiner sur la fenêtre.
Ce projet implémente une couche d'abstraction supplémentaire, afin d'avoir des objets plus utilisables. Chaque partie
d'affichage est réprésentée dans une classé étendant ``Display``. Chaque ``Display`` contient un (ou plusieurs) pads,
et propose une surcouche de certaines fonctions de curses.
L'affichage de texte par exemple sur un pad est plus sécurisée que celle proposée par curses. Le comportement par défaut
est d'afficher un message à partir d'une position donnée avec des attributs (gras, couleur, ...) donnés sous
forme numérique. Cette implémentation permet de passer les attributs voulus sous forme de paramètres booléens, de
choisir la couleur de front/de fond sans définir de paire curses, mais surtout de tronquer le texte à la place
disponible, afin de ne pas avoir à se soucier d'avoir un message trop grand et éviter des crashs non désirés.
Les ``Display`` sont gérés par un ``DisplayManager``. C'est lui qui décide, en fonction de l'état actuel du jeu,
d'afficher les bons ``Display`` aux bons endroits et de les redimensionner correctement en fonction de la taille du
terminal. C'est aussi lui qui propage l'information de modifier les attributs d'un ``Display``, si par exemple
l'inventaire du joueur a été mis à jour.
Il s'occupe enfin de tout redimensionner si jamais le terminal a changé de taille, après une intervention
de l'utilisateur.
Interactions avec la souris
---------------------------
Le jeu attrape les clics de souris. C'est le ``DisplayManager``, connaissant l'état du jeu et ce qui est affiché à
quel endroit, qui va chercher sur quel ``Display`` on a cliqué. L'information est propagée au bon ``Display``, en
adaptant les coordonnées.
Tout ``Display`` qui contient un menu procède de la même façon pour propager l'information au bon menu.

View File

@ -1,4 +1,7 @@
Affichage de l'historique Affichage de l'historique
========================= =========================
L'historique des actions est affiché en bas de l'écran. À chaque action d'une entité, comme frapper quelqu'un, ou lorsque le joueur parle à une entité, cela s'affiche dans l'historique. L'historique des actions est affiché en bas de l'écran. À chaque action d'une entité, comme frapper quelqu'un,
ou lorsque le joueur parle à une entité, cela s'affiche dans l'historique.
Il est affiché sur l'écran de jeu, en bas à gauche, occupant 1/5 de la hauteur et 4/5 de la largeur.

View File

@ -1,6 +1,13 @@
Affichage de la carte Affichage de la carte
===================== =====================
La carte s'affiche dans la partie en haut à gauche de l'écran, sur la plus grande partie de l'écran. On affiche les tuiles une par une, selon le texture pack sélectionné. La map est actualisée à chaque action d'une entité. La carte s'affiche dans la partie en haut à gauche de l'écran, sur la plus grande partie de l'écran.
On affiche les tuiles une par une. Selon le pack de textures utilisé, les tuiles prennent un ou deux caractères de large.
Selon la visibilité de la case en fonction de la position du joueur, la couleur de la case sera plus ou moins sombre,
voire masquée si le joueur n'a jamais vu la case. Les entités sont ensuite affichées, si elles sont dans le champ de
vision du joueur.
L'afffichage de la carte suit les déplacements du joueur. La carte est actualisée lorsque cela est nécessaire, à chaque tick de jeu.
L'afffichage de la carte suit les déplacements du joueur, dans le sens où la caméra est toujours centrée sur lui.
La carte prend 4/5 de l'affichage aussi bien en largeur qu'en hauteur.

View File

@ -2,13 +2,16 @@ Affichage des menus
=================== ===================
Les menus sont affichés dans une boîte. On peut naviguer dedans avec les flèches haut et bas, Les menus sont affichés dans une boîte. On peut naviguer dedans avec les flèches haut et bas,
et valider avec la touche entrée. et valider avec la touche entrée. Il est également possible d'intéragir avec la souris.
Il y a plusieurs menus dans le jeu : Il y a plusieurs menus dans le jeu :
* Le main menu, qui s'affiche au lancement du jeu. * **Le menu principal**, qui s'affiche au lancement du jeu.
* Le menu des paramètres : si on sélectionne un choix de touche et qu'on appuie sur entrée, on peut ensuite appuyer sur une touche pour remplacer la touche utilisée. * **Le menu des paramètres** : si on sélectionne un choix de touche et qu'on appuie sur entrée,
* Le menu des crédits : ce menu fonctionne avec la souris. En cliquant on affiche une image. on peut ensuite appuyer sur une touche pour remplacer la touche utilisée.
* Le menu d'inventaire : dans l'inventaire, on peut utiliser les touches pour utiliser un item ou l'équiper... * **Le menu des crédits** : ce menu fonctionne avec la souris. En cliquant on affiche une image.
* Le menu de vente : on peut utiliser les touches gauche et droite pour switcher entre l'inventaire du joueur et celui du marchand. * **Le menu d'inventaire** : dans l'inventaire, on peut utiliser les touches pour utiliser un item ou l'équiper...
* Menu des warnings : Pas vraiment un menu, mais affiche juste un message dans une petite boite pour prévenir le joueur que quelquechose ne va pas. * **Le menu de vente** : on peut utiliser les touches gauche et droite pour switcher entre l'inventaire du joueur
et celui du marchand.
* **Menu des warnings** : Pas vraiment un menu, mais affiche juste un message dans une petite boite pour prévenir
le joueur que quelque chose ne va pas.

View File

@ -4,7 +4,7 @@ Affichage des statistiques
.. _Hazel: ../index.html .. _Hazel: ../index.html
Les statistiques du joueur sont affichées en haut à droite de l'écran Les statistiques du joueur sont affichées en haut à droite de l'écran
et séparées du reste de l'affichage par une barre verticale. et séparées du reste de l'affichage par une barre verticale, occupant 1/5 de la place horizontale.
Les informations affichées sont : Les informations affichées sont :
@ -23,4 +23,9 @@ Les informations affichées sont :
* **Equipped armor** - le plastron porté par le joueur. * **Equipped armor** - le plastron porté par le joueur.
* **Equipped helmet** - le casque porté par le joueur. * **Equipped helmet** - le casque porté par le joueur.
* **Hazel** - le nombre d'Hazel_ que le joueur possède. * **Hazel** - le nombre d'Hazel_ que le joueur possède.
* **Vous êtes mort** - Éventuellement, si le joueur est mort. * **Vous êtes mort** - Éventuellement, si le joueur est mort.
Si le joueur possède un `monocle <../entities/items.html#monocle>`_, alors les statistiques d'une entité proche sont
également affichées dessous.
Des aides de jeu peuvent enfin être affichées en bas, telles que la touche sur laquelle il faut appuyer.