diff options
Diffstat (limited to 'src/game.h')
-rw-r--r-- | src/game.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/game.h b/src/game.h new file mode 100644 index 0000000..a8b68c4 --- /dev/null +++ b/src/game.h @@ -0,0 +1,85 @@ +#ifndef GAME_H +#define GAME_H + +#define DEFAULT_LISTEN_PORT 9999 +#define TICK_DURATION_MS 30 + +#include "SDL/SDL_net.h" + +typedef int tick_t; +typedef unsigned int id_t; +typedef struct { + unsigned int x,y; +} pos_t; + +enum eventType_t { eReady, eTimeSync, eLemAction }; + +typedef struct { + unsigned int dead : 1; + unsigned int side : 1; + unsigned int flotter : 1; + unsigned int climber : 1; + unsigned int remainCount: 4; + unsigned int currRole: 4; + unsigned int animState: 4; + pos_t pos; +} stateLem_t; + +enum gameState { gameNew, gameRunning, gameEnded }; + +typedef struct { + enum gameState state; + int startTime_ms; + int clientCount; + struct _client_t **clients; +} game_t; + +typedef struct _event_t { + id_t playerId; + tick_t eventTick; + tick_t serverTick; + + enum eventType_t type; + + id_t lemId; + unsigned int newRole: 4; + + struct _event_t *prev, *next; +} event_t; + +typedef struct { + event_t *first, *last; + SDL_mutex *lock; +} eventList_t; + +enum clientState { clientNew, clientReady }; + +typedef struct _client_t { + int numClient; + enum clientState state; + TCPsocket sockClient; + eventList_t events; + SDL_sem *semEventAvailable; + SDL_sem *semGameStart; + int lastEventSendTime_ms; + game_t *game; + stateLem_t *lems; +} client_t; + +typedef struct { + id_t lemCount; + eventList_t elist; + client_t local, net; //TODO : reprendre un peu, bcp de champs dupliqué pour rien +} netGame_t; + + +tick_t getGameCurrentTick(Uint32 startTime_ms); +int initNetGame(netGame_t *ng, id_t lemCount); +void freeNetGame(netGame_t *ng); +int sendEvent(TCPsocket sockDest, const event_t *e); +int receiveEvent(client_t *c, event_t *e); + +int init(); +void play(int tick); + +#endif //GAME_H |