GUI (Raylib) — Vue d'ensemble¶
Le client graphique de Zappy (gui/) est un visualiseur 3D temps réel écrit en
C++17 avec Raylib. Il se connecte au serveur Zappy
comme un client GRAPHIC : il ne joue pas, il n'envoie aucune commande de jeu,
il se contente d'afficher le monde que le serveur lui décrit.
La scène utilise une caméra en perspective orbitant autour de la carte ; chaque joueur, œuf et ressource est dessiné comme un sprite en billboard (un quad toujours orienté face à la caméra), au-dessus d'un damier de tuiles 3D.
En une phrase
Le GUI lit le flux protocolaire du serveur, reconstruit en mémoire l'état du
monde (GameState), puis le restitue à 60 FPS dans une fenêtre 1280×720.
Caractéristiques principales¶
- Mono-processus, mono-thread. Une seule boucle fait tout : réseau, parsing,
mise à jour, rendu (
gui/src/core/main.cpp:67). - Socket non bloquante. Le réseau est interrogé sans jamais bloquer la boucle de
rendu (
gui/src/network/NetworkClient.cpp:79). - Aucune saisie de commande. Le GUI n'émet que le handshake
GRAPHIC\n(gui/src/core/main.cpp:55) ; ensuite il ne fait qu'écouter. - Rendu 3D billboard. Sprites animés, recoloration d'équipe par shader GLSL, interpolation de déplacement.
Arborescence des sources¶
Le code est découpé par responsabilité (gui/src/) :
src/
├── core/ # main.cpp (boucle, CLI, handshake) + GameState.hpp (état du monde)
├── network/ # NetworkClient (socket) + MessageParser (décodage protocole)
├── player/ # Direction, PlayerData, PlayerMotion(Tracker) — interpolation
├── renderer/ # Renderer3D, IsoCamera, AnimatedSprite, PlayerCard
└── world/ # ResourceType, TileData, EggData
La compilation produit le binaire build/zappy_gui (gui/Makefile:12).
Code mort
Le dossier gui/raylib/ (Window.hpp/Window.cpp) est un ancien wrapper
non compilé (absent des SRCS du Makefile). Ne pas s'y fier.
Chaîne de traitement¶
Les quatre composants centraux forment un pipeline unidirectionnel : les octets du serveur deviennent des lignes, les lignes deviennent des mutations d'état, l'état est restitué à l'écran.
flowchart LR
S[Serveur Zappy] -->|TCP| NC[NetworkClient]
NC -->|lignes| MP[MessageParser]
MP -->|mutations| GS[GameState]
GS -->|lecture| R[Renderer3D]
R -->|frames| W[Fenêtre Raylib]
| Composant | Rôle | Fichier |
|---|---|---|
NetworkClient |
Connexion TCP non bloquante, découpage en lignes | gui/src/network/NetworkClient.cpp |
MessageParser |
Décodage des 21 commandes protocolaires | gui/src/network/MessageParser.cpp |
GameState |
État du monde (carte, joueurs, œufs, timers) | gui/src/core/GameState.hpp |
Renderer3D |
Caméra, tuiles, sprites, shader, HUD | gui/src/renderer/Renderer3D.cpp |
Par où continuer¶
-
Installation de Raylib La dépendance la plus importante. Raylib doit être présent sur le système — commencez par là.
-
Build & lancement Compiler avec
make, lancerzappy_gui -h <host> -p <port>. -
Rendu graphique La boucle de rendu, la caméra, les sprites animés, le shader d'équipe.
-
Protocole GUI ↔ Serveur Les commandes que le GUI sait interpréter.
Limitations
Certains aspects sont incomplets (carte d'information joueur figée, commandes
sst/mct non gérées, version de Raylib non figée). Voir
Limitations connues.