//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============ // // Purpose: Class for handling finding & creating lobbies, getting their details, // and seeing other users in the current lobby // //============================================================================= #ifndef LOBBY_H #define LOBBY_H #include "SpaceWar.h" #include "GameEngine.h" #include "BaseMenu.h" #include class CSpaceWarClient; class CLobbyBrowserMenu; class CLobbyMenu; //----------------------------------------------------------------------------- // Purpose: Displays the other users in a lobby and allows the game to be started //----------------------------------------------------------------------------- class CLobby { public: CLobby( IGameEngine *pGameEngine ); ~CLobby(); // sets which lobby to display void SetLobbySteamID( const CSteamID &steamIDLobby ); // Run a frame (to handle KB input and such as well as render) void RunFrame(); private: CSteamID m_steamIDLobby; // Pointer to engine instance (so we can draw stuff) IGameEngine *m_pGameEngine; // Menu object CLobbyMenu *m_pMenu; // user state change handler STEAM_CALLBACK( CLobby, OnPersonaStateChange, PersonaStateChange_t, m_CallbackPersonaStateChange ); // lobby state change handler STEAM_CALLBACK( CLobby, OnLobbyDataUpdate, LobbyDataUpdate_t, m_CallbackLobbyDataUpdate ); STEAM_CALLBACK( CLobby, OnLobbyChatUpdate, LobbyChatUpdate_t, m_CallbackChatDataUpdate ); }; // an item in the list of lobbies we've found to display struct Lobby_t { CSteamID m_steamIDLobby; char m_rgchName[256]; }; //----------------------------------------------------------------------------- // Purpose: Displaying and allows selection from a list of lobbies //----------------------------------------------------------------------------- class CLobbyBrowser { public: CLobbyBrowser( IGameEngine *pGameEngine ); ~CLobbyBrowser(); // rebuild the list void Refresh(); // Run a frame (to handle KB input and such as well as render) void RunFrame(); private: // Pointer to engine instance (so we can draw stuff) IGameEngine *m_pGameEngine; // Track whether we are in the middle of a refresh or not bool m_bRequestingLobbies; // Menu object CLobbyBrowserMenu *m_pMenu; CCallResult m_SteamCallResultLobbyMatchList; void OnLobbyMatchListCallback( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure ); STEAM_CALLBACK( CLobbyBrowser, OnLobbyDataUpdatedCallback, LobbyDataUpdate_t, m_CallbackLobbyDataUpdated ); std::list< Lobby_t > m_ListLobbies; }; #endif //LOBBY_H