summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Pouzenc <ludovic@pouzenc.fr>2011-05-18 20:51:48 +0000
committerLudovic Pouzenc <ludovic@pouzenc.fr>2011-05-18 20:51:48 +0000
commitea5e9410fb2262cece0ba6af67616e292bdaaa1a (patch)
treeba48a006fffae9e8a574a7b6b37b522e3dca3b74
parenta78cf8caf05e0c8072bf8616585d0105fe5ab1e2 (diff)
download2010-netlemmings-ea5e9410fb2262cece0ba6af67616e292bdaaa1a.tar.gz
2010-netlemmings-ea5e9410fb2262cece0ba6af67616e292bdaaa1a.tar.bz2
2010-netlemmings-ea5e9410fb2262cece0ba6af67616e292bdaaa1a.zip
Ajout de quelques infos dans la doc, ajout de la procédure updateDriftOnEventReception() dans timing, et utilisantion sur le client netlem.c, ajout de qques commentaires
git-svn-id: file:///var/svn/2010-netlemmings/trunk@220 077b3477-7977-48bd-8428-443f22f7bfda
-rw-r--r--doc/conception.txt19
-rw-r--r--src/game.c2
-rw-r--r--src/include/timing.h1
-rw-r--r--src/netlem.c5
-rw-r--r--src/timing.c5
5 files changed, 30 insertions, 2 deletions
diff --git a/doc/conception.txt b/doc/conception.txt
index 6fe61cd..4376a64 100644
--- a/doc/conception.txt
+++ b/doc/conception.txt
@@ -19,6 +19,25 @@ Ce module regroupe toutes les fonctions "techniques" commune au serveur et au cl
=== 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).
diff --git a/src/game.c b/src/game.c
index a51b015..ce56b0e 100644
--- a/src/game.c
+++ b/src/game.c
@@ -4,6 +4,8 @@
#include "game.h"
#include "utils.h"
+//TODO : faire de sorte que ce module gère les retours dans le passé (garder une situation "commitée" qui est daté du dernier évènement envoyé par le serveur) et bonds dans le futur (skip frames ou recalcul si évènement du passé reçu à l'instant)
+
void play(tick_t tick, gameObjectsState_t *objStates) {
if (tick%100==0) { } //printf("tick==%i\n",tick); }
diff --git a/src/include/timing.h b/src/include/timing.h
index 927a30a..238d11d 100644
--- a/src/include/timing.h
+++ b/src/include/timing.h
@@ -8,5 +8,6 @@
tick_t getGameCurrentTick(Uint32 startTime_ms);
int waitForNextTick(Uint32 timeBefore_ms, Uint32 drift_ms);
+Uint32 updateDriftOnEventReception(tick_t localCurrentTick, tick_t eventServerTick);
#endif /*TIME_H*/
diff --git a/src/netlem.c b/src/netlem.c
index 63741d5..beb994d 100644
--- a/src/netlem.c
+++ b/src/netlem.c
@@ -287,11 +287,12 @@ int networkReadProc(void *a) {
if (result != 0) {
logs(LOG_WARN, "networkReadProc(), receiveEvents() error");
changeState(eEnd);
- continue; //TODO : je doute que ça skipe vriament la syncrho du temps :s
+ continue;
}
// logs(LOG_DEBUG, "Got event");
- *(args->drift_ms)=( *(args->tick) - e.serverTick );
+ //FIXME : WTF dans cette gestion de temps ??? Ou est l'implémentation réelle telle que décrite dans archi.txt
+ *(args->drift_ms)=updateDriftOnEventReception(*(args->tick), e.serverTick );
*(args->lastServerTick)=e.serverTick;
// sprintf(logMsg, "serverTick==%i, tick==%i, drift_ms==%i\n", e.serverTick, *(args->tick), *(args->drift_ms));
// logs(LOG_DEBUG, logMsg);
diff --git a/src/timing.c b/src/timing.c
index 896b973..fa05df4 100644
--- a/src/timing.c
+++ b/src/timing.c
@@ -17,3 +17,8 @@ inline int waitForNextTick(Uint32 timeBefore_ms, Uint32 drift_ms) {
}
return 0;
}
+
+inline Uint32 updateDriftOnEventReception(tick_t localCurrentTick, tick_t eventServerTick) {
+ //FIXME : WTF dans cette gestion de temps ??? Ou est l'implémentation réelle telle que décrite dans archi.txt ??
+ return localCurrentTick - eventServerTick;
+}