/* client/client.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_H__ #define __INCLUDED_CLIENT_H__ #include "core/application.h" #include "core/extension.h" #include "core/entity.h" #include "client/clientext.h" #include "client/soundext.h" #include "client/testmodelwindow.h" #include "client/mainwindow.h" #include "client/messagebox.h" #include "render/renderext.h" /// client part of the engine namespace client { /// run the client application void run(int count, char **arguments); /// client application implementation class Client : public core::Application { public: /// initialize the client virtual void init(int count, char **arguments); /// run the client virtual void run(); /// shutdown the client virtual void shutdown(); /// quit the client virtual void quit(int status); /// text notifications from the core virtual void notify_message(const core::Message::Channel channel, const std::string &message); /// messagebox notifications virtual void notify_messagebox(const std::string & text, const std::string &label1, const std::string command1, const std::string &label2, const std::string command2); /// loading message notification virtual void notify_loader(const std::string &message); /// text notifications from the client void notify_message(const std::string &message); /// text notifications from the client void notify_message(const char *message); /// clear zone notification virtual void notify_zonechange(); /// connect notification virtual void notify_connect(); /// disconnect notification virtual void notify_disconnect(); /// the main client widget inline MainWindow *mainwindow() { return client_mainwindow; } /// model test widget inline TestModelWindow *testmodelwindow() { return client_testmodelwindow; } /// local client sends a chat message inline void say(std::string const &text) { func_say(text); } static void show_menu(const char *menu); protected: /// run a client frame virtual void frame(); private: static void func_loadgame(std::string const &args); static void func_savegame(std::string const &args); static void func_snd_restart(std::string const &args); static void func_r_restart(std::string const &args); static void func_list_ui(std::string const &args); static void func_ui_restart(std::string const &args); static void func_ui_console(std::string const &args); static void func_list_menu(std::string const &args); static void func_ui_help(); static void func_menu_help(); static void func_ui(std::string const &args); static void func_ui_chat(std::string const &args); static void func_ui_chatbar(std::string const &args); static void func_ui_inventory(std::string const &args); static void func_ui_reputation(std::string const &args); static void func_ui_map(std::string const &args); static void func_ui_menu(std::string const &args); static void func_testmodel(std::string const &args); static void func_menu(std::string const &args); static void func_view(std::string const &args); MainWindow *client_mainwindow; TestModelWindow *client_testmodelwindow; Messagebox *client_messagebox; unsigned long previous_timestamp; }; Client *client(); inline ClientExt *ext_client(const core::Entity *entity) { return static_cast(entity->extension(core::Extension::Client)); } inline SoundExt *ext_sound(const core::Entity *entity) { return static_cast(entity->extension(core::Extension::Sound)); } inline render::RenderExt *ext_render(const core::Entity *entity) { return static_cast(entity->extension(core::Extension::Render)); } } #endif // __INCLUDED_CLIENT_H__