====== Conception ====== ===== Modules ===== ==== Communs ==== === Events === Le module events permet de gérer une liste d'évènements qui correspondent a des actions d'un joueur. A un instant donné e.eventTick (daté par le client source de l'évènement), le client e.clientId a généré un évènement de type e.type. Les informations complémentaires de l'évènement dépendent de son type : * eReady : Signifie que le joueur sur le client en question signale qu'il est prêt à commencer une partie * eTimeSync : Le client signale l'état de son horloge et attends une réponse du serveur pour se synchroniser. Ces évènements sont gérés si la fréquence des actions de l'utilisateur ne suffit pas à garder une synchronisation suffisante. * eLemAction : Signifie que le joueur a donné un ordre a un des ses lemmings * le champ e.lemId désigne le lemming sur lequel l'action porte * le champ e.nomRole désigne le nouveau rôle (ou skill) affecté au lemming Le module permet de gérer la liste d'évènements, de la trier chronologiquement (utilisé par le serveur), de la sérialiser et désérialiser pour la transférer via le réseau et comporte un méchanisme d'accès exclusif (eventListLock/eventListUnlock). === Utils === Ce module regroupe toutes les fonctions "techniques" commune au serveur et au client : gestion des logs, fonctions mathématiques. === Timing === Fonctions communes à l'algorithme de synchronisation des horloges des clients par rapport au serveur. Chaque client respecte le pseudo-algorithme suivant pour sa boucle principale de jeu : TANTQUE (partie_en_cours) timeBefore_ms = SDL_GetTicks(); // code princpal d'une frame wantWait=waitForNextTick(timeBefore_ms, drift_ms); FIN TANTQUE drift_ms est une variable partagée entre le thread principal de jeu (lecture uniquement) et le thread de réception des messages réseaux (mise à jour selon les champs e.eventTick et e.serverTick) via la fonction updateDriftOnEventReception() du module timing. wantWait est une variable pouvant être affichée pour suivre le comportement de l'algo de synchronisation du temps, mais n'est pas nécessaire au fonctionnement. === Game === Module contenant la logique du jeu pour passer d'un instant (tick) au suivant. L'état des animations et lemmings sont mis à jour. === Netgame === Module embarquant les primitives qui vont bien pour manipuler les structures de données de data_network.h permettant de gérer l'état des parties réseau. Ce module continent aussi les primitives d'envoi et de réception des évènements réseau ==== Serveur ==== ==== Client ==== === Graphic === Toute la gestion de l'affichage, les primitives pour plaquer les sprites et des tests au pixel. === Loader === Module gérant le chargement d'un niveau (utilisé dans un thread par le client pour être asynchrone avec thread d'affichage).