/* 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/message.h" #include "core/netserver.h" #include "core/netconnection.h" #include "core/gameinterface.h" #include "core/module.h" namespace core { /// core interface for the client and server Application classes class Application { public: /// default constructor Application(); /// default destructor virtual ~Application(); /*----- inspectors ----------------------------------------------- */ /// time the application has been running inline float time() const { return application_time; } /// 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 pplication 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 Module *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(Message::Channel const channel, std::string const message); /// connect notification virtual void notify_connect(); /// disconnect notification virtual void notify_disconnect(); /// zone change notification virtual void notify_zonechange(); /// remove sound source notification virtual void notify_remove_sound(size_t source); /*----- static --------------------------------------------------- */ /// a pointer to the current application instance static inline Application *instance() { return application_instance; } protected: /// run a core frame virtual void frame(float seconds); /// 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 float application_time; GameInterface *application_game; static Application *application_instance; /// last loaded interactive module Module *module_interactive; }; /// pointer to the current Application inline Application *application() { return Application::instance(); } /// pointer to the current GameInterface inline GameInterface *game() { return Application::instance()->game(); } /// pointer to the console inline sys::ConsoleInterface *console() { return sys::ConsoleInterface::instance(); }; } // namespace core #endif // __INCLUDED_CORE_APPLICATION_H__