/* core/module.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_MODULE_H__ #define __INCLUDED_CORE_MODULE_H__ #include #include "core/player.h" namespace core { // a loadable game module class Module { public: Module(const char *name); virtual ~Module(); /*----- inspectors ------------------------------------------------ */ /// return true if the game module can run a timeframe inline bool running() const { return module_running; } /// return true if the game module can not run a timeframe inline bool error() const { return !module_running; } /// return the name of the module inline std::string const & name() const { return module_name; } /*----- mutators -------------------------------------------------- */ /// initialize the game module virtual void init() = 0; /// shutdown the game module virtual void shutdown() = 0; /// run one timeframe virtual void frame(float seconds) = 0; /// is called when a player connects virtual void player_connect(Player *player) = 0; /// is called when a player disconnects virtual void player_disconnect(Player *player) = 0; /*----- static ---------------------------------------------------- */ /// load a game module static void load(Module *module); /// unload the preloaded module static void unload(); /// the preloaded module inline static Module *preload() { return module_preload; }; protected: /// set the disconnected state void abort(); bool module_running; private: static Module *module_preload; std::string module_name; }; } #endif // __INCLUDED_CORE_MODULE_H__