/* core/gameinterface.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CORE_GAMEINTERFACE_H__ #define __INCLUDED_CORE_GAMEINTERFACE_H__ #include "core/player.h" namespace core { /// abstract interface from the core to the game-specific code class GameInterface { public: /// create a new game GameInterface(); /// destroy the game virtual ~GameInterface(); /// type definition for the Players collection typedef std::list Players; /*----- inspectors ---------------------------------------------- */ /// return the local player inline Player *localplayer() { return &game_localplayer; } /// return the server time of the last received server frame inline float serverframetime() const { return game_serverframetime; } /// return the server time of the previous received server frame inline float previousframetime() const { return game_previousframetime; } /// return the server time of the previous received server frame inline float clientframetime() const { return game_clientframetime; } /// client frame time between previousframetime and serverframetime, from 0 - 1 float timeoffset(); inline float timestep() const { return game_timestep; } inline Players & players() { return game_players; } /// show a list of connected players void list_players(); /*----- virtual inspectors --------------------------------------- */ /// returns true if the game server can run a time frime virtual bool running() = 0; /// returns true if the game is running an interactive module virtual bool interactive() = 0; /*----- mutators ------------------------------------------------- */ /// clear all game variables, game functions and entities void clear(); /// reset the client state void reset_clientstate(float timestamp, float prevtimestamp); /// update the client state timers void update_clientstate(float seconds); void update_entity_clientstate(Entity *entity); /*----- virtual mutators ------------------------------------------ */ /// run one game time frame /// @param seconds time since the previous frame, in seconds virtual void frame(float seconds) = 0; protected: /// the local player static Player game_localplayer; /// all the players Players game_players; float game_serverframetime; float game_previousframetime; float game_timestep; float game_clientframetime; unsigned int game_serverframelength; }; /// global local player instance Player *localplayer(); /// global local control instance EntityControlable *localcontrol(); } #endif // __INCLUDED_CORE_GAMEINTERFACE_H__