Aller au contenu

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

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.