#include #include "netlem_state_machine.h" #include "events.h" #include "netgame.h" #include "utils.h" //FIXME #include netlem.h ? extern int startLoadLevel(); state_t _getOrChangeState(state_t newState, TCPsocket sockClient) { const event_t evReady = {0,0,0,eReady,0,0,NULL,NULL}; static state_t state=eLaunching; int result; switch(newState) { case eNull: break; case eMultiLoading: //TODO : check current state before switching if (state != eMultiWaitLoading && state != eLaunching) { return eNull; } result=startLoadLevel(); if (result!=0) { logs2(LOG_ERROR, "getOrChangeState()", SDL_GetError()); return eNull; } state=newState; logs2(LOG_INFO, "changing state", "eMultiLoading"); break; case eMultiWaitLoading: //TODO : check current state before switching // Say to the server that we are ready to start the game and wait game start result=sendEvent(sockClient, &evReady); if (result!=0) return eNull; state=newState; logs2(LOG_INFO, "changing state", "eMultiWaitLoading"); break; case eMultiGame: //TODO : check current state before switching state=newState; logs2(LOG_INFO, "changing state", "eMultiGame"); break; case eEnd: state=newState; logs2(LOG_INFO, "changing state", "eEnd"); break; default: return eNull; } return state; } state_t getState() { return _getOrChangeState(eNull, NULL); } state_t changeState(state_t newState) { return _getOrChangeState(newState, NULL); } state_t changeStateAndNotify(state_t newState, TCPsocket sockClient) { return _getOrChangeState(newState, sockClient); }