mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-30 14:09:19 +00:00
1
This commit is contained in:
@@ -0,0 +1,325 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================
|
||||
|
||||
#ifndef BASEGAMESPAGE_H
|
||||
#define BASEGAMESPAGE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tier1/utldict.h"
|
||||
|
||||
class CBaseGamesPage;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Acts like a regular ListPanel but forwards enter key presses
|
||||
// to its outer control.
|
||||
//-----------------------------------------------------------------------------
|
||||
class CGameListPanel : public vgui::ListPanel
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS_SIMPLE( CGameListPanel, vgui::ListPanel );
|
||||
|
||||
CGameListPanel( CBaseGamesPage *pOuter, const char *pName );
|
||||
|
||||
virtual void OnKeyCodePressed(vgui::KeyCode code);
|
||||
|
||||
private:
|
||||
CBaseGamesPage *m_pOuter;
|
||||
};
|
||||
|
||||
class CQuickListMapServerList : public CUtlVector< int >
|
||||
{
|
||||
public:
|
||||
CQuickListMapServerList() : CUtlVector< int >( 1, 0 )
|
||||
{
|
||||
}
|
||||
|
||||
CQuickListMapServerList( const CQuickListMapServerList& src )
|
||||
{
|
||||
CopyArray( src.Base(), src.Count() );
|
||||
}
|
||||
|
||||
CQuickListMapServerList &operator=( const CQuickListMapServerList &src )
|
||||
{
|
||||
CopyArray( src.Base(), src.Count() );
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class CCheckBoxWithStatus : public vgui::CheckButton
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS_SIMPLE( CCheckBoxWithStatus, vgui::CheckButton );
|
||||
|
||||
CCheckBoxWithStatus(Panel *parent, const char *panelName, const char *text) : vgui::CheckButton( parent, panelName, text )
|
||||
{
|
||||
}
|
||||
|
||||
virtual void OnCursorEntered();
|
||||
virtual void OnCursorExited();
|
||||
};
|
||||
|
||||
struct servermaps_t
|
||||
{
|
||||
const char *pOriginalName;
|
||||
const char *pFriendlyName;
|
||||
int iPanelIndex;
|
||||
bool bOnDisk;
|
||||
};
|
||||
|
||||
struct gametypes_t
|
||||
{
|
||||
const char *pPrefix;
|
||||
const char *pGametypeName;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Base property page for all the games lists (internet/favorites/lan/etc.)
|
||||
//-----------------------------------------------------------------------------
|
||||
class CBaseGamesPage : public vgui::PropertyPage, public IGameList, public ISteamMatchmakingServerListResponse, public ISteamMatchmakingPingResponse
|
||||
{
|
||||
DECLARE_CLASS_SIMPLE( CBaseGamesPage, vgui::PropertyPage );
|
||||
|
||||
public:
|
||||
enum EPageType
|
||||
{
|
||||
eInternetServer,
|
||||
eLANServer,
|
||||
eFriendsServer,
|
||||
eFavoritesServer,
|
||||
eHistoryServer,
|
||||
eSpectatorServer
|
||||
};
|
||||
|
||||
// Column indices
|
||||
enum
|
||||
{
|
||||
k_nColumn_Password = 0,
|
||||
k_nColumn_Secure = 1,
|
||||
k_nColumn_Replay = 2,
|
||||
k_nColumn_Name = 3,
|
||||
k_nColumn_IPAddr = 4,
|
||||
k_nColumn_GameDesc = 5,
|
||||
k_nColumn_Players = 6,
|
||||
k_nColumn_Bots = 7,
|
||||
k_nColumn_Map = 8,
|
||||
k_nColumn_Ping = 9,
|
||||
};
|
||||
|
||||
CBaseGamesPage( vgui::Panel *parent, const char *name, EPageType eType, const char *pCustomResFilename=NULL);
|
||||
~CBaseGamesPage();
|
||||
|
||||
virtual void PerformLayout();
|
||||
virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
|
||||
|
||||
// gets information about specified server
|
||||
virtual gameserveritem_t *GetServer(unsigned int serverID);
|
||||
virtual const char *GetConnectCode();
|
||||
|
||||
uint32 GetServerFilters( MatchMakingKeyValuePair_t **pFilters );
|
||||
|
||||
virtual void SetRefreshing(bool state);
|
||||
|
||||
// loads filter settings from disk
|
||||
virtual void LoadFilterSettings();
|
||||
|
||||
// Called by CGameList when the enter key is pressed.
|
||||
// This is overridden in the add server dialog - since there is no Connect button, the message
|
||||
// never gets handled, but we want to add a server when they dbl-click or press enter.
|
||||
virtual bool OnGameListEnterPressed();
|
||||
|
||||
int GetSelectedItemsCount();
|
||||
|
||||
// adds a server to the favorites
|
||||
MESSAGE_FUNC( OnAddToFavorites, "AddToFavorites" );
|
||||
MESSAGE_FUNC( OnAddToBlacklist, "AddToBlacklist" );
|
||||
|
||||
virtual void StartRefresh();
|
||||
|
||||
virtual void UpdateDerivedLayouts( void );
|
||||
|
||||
void PrepareQuickListMap( const char *pMapName, int iListID );
|
||||
void SelectQuickListServers( void );
|
||||
vgui::Panel *GetActiveList( void );
|
||||
virtual bool IsQuickListButtonChecked()
|
||||
{
|
||||
return m_pQuickListCheckButton ? m_pQuickListCheckButton->IsSelected() : false;
|
||||
}
|
||||
|
||||
STEAM_CALLBACK( CBaseGamesPage, OnFavoritesMsg, FavoritesListChanged_t, m_CallbackFavoritesMsg );
|
||||
|
||||
// applies games filters to current list
|
||||
void ApplyGameFilters();
|
||||
|
||||
void OnLoadingStarted()
|
||||
{
|
||||
StopRefresh();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void OnCommand(const char *command);
|
||||
virtual void OnKeyCodePressed(vgui::KeyCode code);
|
||||
virtual int GetRegionCodeToFilter() { return 255; }
|
||||
|
||||
MESSAGE_FUNC( OnItemSelected, "ItemSelected" );
|
||||
|
||||
// updates server count UI
|
||||
void UpdateStatus();
|
||||
|
||||
// ISteamMatchmakingServerListResponse callbacks
|
||||
virtual void ServerResponded( HServerListRequest hReq, int iServer );
|
||||
virtual void ServerResponded( int iServer, gameserveritem_t *pServerItem );
|
||||
virtual void ServerFailedToRespond( HServerListRequest hReq, int iServer );
|
||||
virtual void RefreshComplete( HServerListRequest hReq, EMatchMakingServerResponse response ) = 0;
|
||||
|
||||
// ISteamMatchmakingPingResponse callbacks
|
||||
virtual void ServerResponded( gameserveritem_t &server );
|
||||
virtual void ServerFailedToRespond() {}
|
||||
|
||||
// Removes server from list
|
||||
void RemoveServer( serverdisplay_t &server );
|
||||
|
||||
virtual bool BShowServer( serverdisplay_t &server ) { return server.m_bDoNotRefresh; }
|
||||
void ClearServerList();
|
||||
|
||||
// filtering methods
|
||||
// returns true if filters passed; false if failed
|
||||
virtual bool CheckPrimaryFilters( gameserveritem_t &server);
|
||||
virtual bool CheckSecondaryFilters( gameserveritem_t &server );
|
||||
virtual bool CheckTagFilter( gameserveritem_t &server ) { return true; }
|
||||
virtual bool CheckWorkshopFilter( gameserveritem_t &server ) { return true; }
|
||||
virtual int GetInvalidServerListID();
|
||||
|
||||
virtual void OnSaveFilter(KeyValues *filter);
|
||||
virtual void OnLoadFilter(KeyValues *filter);
|
||||
virtual void UpdateFilterSettings();
|
||||
|
||||
// whether filter settings limit which master server to query
|
||||
CGameID &GetFilterAppID() { return m_iLimitToAppID; }
|
||||
|
||||
virtual void GetNewServerList();
|
||||
virtual void StopRefresh();
|
||||
virtual bool IsRefreshing();
|
||||
virtual void OnPageShow();
|
||||
virtual void OnPageHide();
|
||||
|
||||
// called when Connect button is pressed
|
||||
MESSAGE_FUNC( OnBeginConnect, "ConnectToServer" );
|
||||
// called to look at game info
|
||||
MESSAGE_FUNC( OnViewGameInfo, "ViewGameInfo" );
|
||||
// refreshes a single server
|
||||
MESSAGE_FUNC_INT( OnRefreshServer, "RefreshServer", serverID );
|
||||
|
||||
// If true, then we automatically select the first item that comes into the games list.
|
||||
bool m_bAutoSelectFirstItemInGameList;
|
||||
|
||||
CGameListPanel *m_pGameList;
|
||||
vgui::PanelListPanel *m_pQuickList;
|
||||
|
||||
vgui::ComboBox *m_pLocationFilter;
|
||||
|
||||
// command buttons
|
||||
vgui::Button *m_pConnect;
|
||||
vgui::Button *m_pRefreshAll;
|
||||
vgui::Button *m_pRefreshQuick;
|
||||
vgui::Button *m_pAddServer;
|
||||
vgui::Button *m_pAddCurrentServer;
|
||||
vgui::Button *m_pAddToFavoritesButton;
|
||||
vgui::ToggleButton *m_pFilter;
|
||||
|
||||
CUtlMap<uint64, int> m_mapGamesFilterItem;
|
||||
CUtlMap<int, serverdisplay_t> m_mapServers;
|
||||
CUtlMap<netadr_t, int> m_mapServerIP;
|
||||
CUtlVector<MatchMakingKeyValuePair_t> m_vecServerFilters;
|
||||
CUtlDict< CQuickListMapServerList, int > m_quicklistserverlist;
|
||||
int m_iServerRefreshCount;
|
||||
CUtlVector< servermaps_t > m_vecMapNamesFound;
|
||||
|
||||
|
||||
EPageType m_eMatchMakingType;
|
||||
HServerListRequest m_hRequest;
|
||||
|
||||
int GetSelectedServerID( KeyValues **pKV = NULL );
|
||||
|
||||
void ClearQuickList( void );
|
||||
|
||||
bool TagsExclude( void );
|
||||
|
||||
enum eWorkshopMode {
|
||||
// These correspond to the dropdown indices
|
||||
eWorkshop_None = 0,
|
||||
eWorkshop_WorkshopOnly = 1,
|
||||
eWorkshop_SubscribedOnly = 2
|
||||
};
|
||||
eWorkshopMode WorkshopMode();
|
||||
|
||||
void HideReplayFilter( void );
|
||||
|
||||
protected:
|
||||
virtual void CreateFilters();
|
||||
virtual void UpdateGameFilter();
|
||||
|
||||
MESSAGE_FUNC_PTR_CHARPTR( OnTextChanged, "TextChanged", panel, text );
|
||||
MESSAGE_FUNC_PTR_INT( OnButtonToggled, "ButtonToggled", panel, state );
|
||||
|
||||
void UpdateFilterAndQuickListVisibility();
|
||||
bool BFiltersVisible() { return m_bFiltersVisible; }
|
||||
|
||||
private:
|
||||
void RequestServersResponse( int iServer, EMatchMakingServerResponse response, bool bLastServer ); // callback for matchmaking interface
|
||||
|
||||
void RecalculateFilterString();
|
||||
|
||||
void SetQuickListEnabled( bool bEnabled );
|
||||
void SetFiltersVisible( bool bVisible );
|
||||
|
||||
// If set, it uses the specified resfile name instead of its default one.
|
||||
const char *m_pCustomResFilename;
|
||||
|
||||
// filter controls
|
||||
vgui::ComboBox *m_pGameFilter;
|
||||
vgui::TextEntry *m_pMapFilter;
|
||||
vgui::TextEntry *m_pMaxPlayerFilter;
|
||||
vgui::ComboBox *m_pPingFilter;
|
||||
vgui::ComboBox *m_pSecureFilter;
|
||||
vgui::ComboBox *m_pTagsIncludeFilter;
|
||||
vgui::ComboBox *m_pWorkshopFilter;
|
||||
vgui::CheckButton *m_pNoFullServersFilterCheck;
|
||||
vgui::CheckButton *m_pNoEmptyServersFilterCheck;
|
||||
vgui::CheckButton *m_pNoPasswordFilterCheck;
|
||||
CCheckBoxWithStatus *m_pQuickListCheckButton;
|
||||
vgui::Label *m_pFilterString;
|
||||
char m_szComboAllText[64];
|
||||
vgui::CheckButton *m_pReplayFilterCheck;
|
||||
|
||||
KeyValues *m_pFilters; // base filter data
|
||||
bool m_bFiltersVisible; // true if filter section is currently visible
|
||||
vgui::HFont m_hFont;
|
||||
|
||||
int m_nImageIndexPassword;
|
||||
int m_nImageIndexSecure;
|
||||
int m_nImageIndexSecureVacBanned;
|
||||
int m_nImageIndexReplay;
|
||||
|
||||
// filter data
|
||||
char m_szGameFilter[32];
|
||||
char m_szMapFilter[32];
|
||||
int m_iMaxPlayerFilter;
|
||||
int m_iPingFilter;
|
||||
bool m_bFilterNoFullServers;
|
||||
bool m_bFilterNoEmptyServers;
|
||||
bool m_bFilterNoPasswordedServers;
|
||||
int m_iSecureFilter;
|
||||
int m_iServersBlacklisted;
|
||||
bool m_bFilterReplayServers;
|
||||
|
||||
CGameID m_iLimitToAppID;
|
||||
};
|
||||
|
||||
#endif // BASEGAMESPAGE_H
|
||||
Reference in New Issue
Block a user