/* $Id: client.hpp,v 1.60.2.1 2006/01/24 10:08:10 chfreund Exp $ */ #ifndef _CLIENT_HPP_ #define _CLIENT_HPP_ #include #include #include #include "wopsettings.hpp" #include "loader.hpp" #include "video.hpp" #include "audio.hpp" #include "input.hpp" #include "event.hpp" #include "clientcommunicator.hpp" #include "world.hpp" #include "player.hpp" #include "wopgui.hpp" #include "wopbackground.hpp" #include "messages.hpp" #include "keyboardconfig.hpp" #include "bot.hpp" #include "tcpconnection.hpp" struct EchoMessage; class Server; /**********************************************************/ class Client : public PlayerInput, public MessageSink { private: Video m_video; Audio* m_audio; Input m_input; ClientCommunicator m_communicator; World *m_world; Server *m_server; ProgressLog m_ProgressLog; //!< Logging Object for various progesses volatile Status m_status; Event m_myEvent; KeyboardConfig m_keyboardConfig; SDL_Surface *m_mapSurface; SDL_Rect m_mapRect; WopBackground *m_background; SDL_Surface *m_logo; SDL_Rect m_logoRect; Player *m_player; Bot* m_bot; WopGUI *m_gui; bool m_showWorld; real m_viewX, m_viewY, m_viewVelX, m_viewVelY; SDL_Thread *m_displayThread; SDL_cond *m_displayLoopCond; SDL_mutex *m_displayLoopMutex; bool m_doScreenshot; bool m_limitFps; public: Client( Server* server = 0 ); virtual ~Client(); Video& getVideo() { return m_video; } Event getEvent() const { return m_myEvent; } void init(); std::vector lookForServers() { return m_communicator.lookForServers(); } void startLocalServer(); bool connectToLocalServer(); bool connectToServer( ServerEntry& server ); bool connectToServer( const std::string& name ); void setActive( Player* player, std::vector bots ); void disconnect(); void lostConnection(); void updateGraphics(); void displayLoop(); void run(); int exit(); int eventLoop(); void joinPlayer( Player* player ); void leavePlayer( Player* player ); void sendChatMessage( String& message ); void showMessage( String& message, const SDL_Color& color ); void setStatus( Status status ) { m_status = status; } Status getStatus() const { return m_status; } bool handleEvent( SDL_Event* event ); virtual void addMessage( std::string s ); void signalDisplayCond(); KeyboardConfig* getKeyboardConfig() { return &m_keyboardConfig; } void initializeConnectProgress(); void updateConnectProgress( Sint32 total, Sint32 received ); void hideConnectProgress(); void showJoinProgress( Sint32 total, Sint32 sent ); void hideJoinProgress(); }; /**********************************************************/ int filterAllEvents( const SDL_Event *event ); int displayLoopWrapper( void* data ); /**********************************************************/ #endif