/* core/application.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_APPLICATION_H__ #define __INCLUDED_CORE_APPLICATION_H__ #include "sys/sys.h" #include "core/commandbuffer.h" #include "core/cvar.h" #include "core/func.h" #include "core/message.h" #include "core/gameinterface.h" namespace core { /// core interface for the client and server Application classes class Application { public: /// default constructor Application(); /// default destructor virtual ~Application(); /*----- inspectors ----------------------------------------------- */ /// the current application time, in microseconds inline unsigned long timestamp() const { return application_timestamp; } /// the current application time, in seconds float time() const { return ((float)(timestamp()) / 1000.0f); } /// true if the core is connected to a running game interface inline bool connected() const { return (application_game && application_game->running()); } /// return the game interface, returns 0 if the application is not connected to a game inline GameInterface *game() { return application_game; } /*----- mutators ------------------------------------------------- */ /// start the server or connect to remote host void connect(std::string const &host); /// disconnect from the game module void disconnect(); /// load a module bool load(std::string const &module_name); /*----- virtual mutators ------------------------------------------ */ /// initialize the application virtual void init(int count, char **arguments); /// shutdown the application virtual void shutdown(); /// quit the application without proper shutdown virtual void quit(int status); /*----- notifications --------------------------------------------- */ /// sound notifications from the core to the application virtual void notify_sound(const char * name); /// text notifications from the core to the application virtual void notify_message(const core::Message::Channel channel, const std::string &message); /// loading message notification virtual void notify_loader(const std::string &message); /// connect notification virtual void notify_connect(); /// disconnect notification virtual void notify_disconnect(); /// zone change notification virtual void notify_zonechange(); /// a pointer to the current application instance static inline Application *instance() { return application_instance; } protected: /// run a core frame virtual void frame(unsigned long timestamp); /// load cvar config void load_config(); /// load exra config void load_autoexec(); /// save cvar config void save_config(); /// load command line arguments void load_commandline(int count, char **argments); private: /// time the core has been running unsigned long application_timestamp; GameInterface *application_game; static Application *application_instance; /*-- engine functions --*/ static void func_help(std::string const &args); static void func_quit(std::string const &args); static void func_connect(std::string const &args); static void func_disconnect(std::string const &args); static void func_say(std::string const &args); static void func_msg(std::string const &args); static void func_load(std::string const &args); static void func_rcon(std::string const &args); static void func_info(std::string const &args); }; /// pointer to the application inline Application *application() { return Application::instance(); } /// pointer to the console inline sys::ConsoleInterface *console() { return sys::ConsoleInterface::instance(); } /// pointer to the game interface inline GameInterface *game() { return Application::instance()->game(); } } #endif // __INCLUDED_CORE_APPLICATION_H__