Files
2025-07-13 15:47:42 +03:00

95 lines
2.6 KiB
C++

//========= 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 <list>
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<CLobbyBrowser, LobbyMatchList_t> 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