r5sdk/r5dev/gameui/IBrowser.h
r-ex b366e4ce82
sq server browser clean up (#63)
* sq server browser clean up

* Properly loop through std::vector on GetAvailableMaps.

Co-authored-by: IcePixelx <41352111+PixieCore@users.noreply.github.com>
2022-01-15 18:57:18 +01:00

129 lines
3.4 KiB
C++

#pragma once
#ifndef DEDICATED
#include "networksystem/serverlisting.h"
#include "networksystem/r5net.h"
enum class ESection
{
SERVER_BROWSER,
HOST_SERVER,
SETTINGS
};
enum class EHostStatus
{
NOT_HOSTING,
HOSTING
};
enum class EServerVisibility
{
OFFLINE,
HIDDEN,
PUBLIC
};
class IBrowser
{
private:
bool m_bInitialized = false;
public:
////////////////////
// Enum Vars //
////////////////////
ESection eCurrentSection = ESection::SERVER_BROWSER;
EHostStatus eHostingStatus = EHostStatus::NOT_HOSTING;
EServerVisibility eServerVisibility = EServerVisibility::OFFLINE;
public:
////////////////////
// Funcs //
////////////////////
IBrowser();
~IBrowser();
void Draw(const char* title, bool* bDraw);
void CompMenu();
void ServerBrowserSection();
void RefreshServerList();
void GetServerList();
void ConnectToServer(const std::string ip, const std::string port, const std::string encKey);
void ConnectToServer(const std::string connString, const std::string encKey);
void SetMenuVars(std::string name, EServerVisibility vis);
void HiddenServersModal();
void HostServerSection();
void UpdateHostingStatus();
void SendHostingPostRequest();
void ProcessCommand(const char* command_line);
void LoadPlaylist(const char* playlistName);
void SettingsSection();
void RegenerateEncryptionKey();
void ChangeEncryptionKeyTo(const std::string str);
void SetStyleVar();
////////////////////
// Server Browser //
////////////////////
public:
bool m_bActivate = false;
std::vector<ServerListing> m_vServerList;
ImGuiTextFilter m_imServerBrowserFilter;
char m_chServerConnStringBuffer[256] = { 0 };
char m_chServerEncKeyBuffer[30] = { 0 };
std::string m_szServerListMessage = std::string();
std::map<std::string, std::string> mapArray =
{
{ "mp_rr_canyonlands_64k_x_64k", "King's Canyon Season 0" },
{ "mp_rr_desertlands_64k_x_64k", "World's Edge Season 3" },
{ "mp_rr_canyonlands_mu1", "King's Canyon Season 2" },
{ "mp_rr_canyonlands_mu1_night", "King's Canyon Season 2 After Dark" },
{ "mp_rr_desertlands_64k_x_64k_nx", "World's Edge Season 3 After Dark" },
{ "mp_lobby", "Lobby Season 3" },
{ "mp_rr_canyonlands_staging", "King's Canyon Firing Range" }
};
////////////////////
// Settings //
////////////////////
std::string m_szMatchmakingHostName;
////////////////////
// Host Server //
////////////////////
ServerListing m_Server;
std::vector<std::string> m_vszMapsList;
std::vector<std::string> m_vszMapFileNameList;
std::string m_szHostRequestMessage = "";
std::string m_szHostToken = "";
ImVec4 m_iv4HostRequestMessageColor = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
////////////////////
// Private Server //
////////////////////
std::string m_szHiddenServerToken = "";
std::string m_szHiddenServerRequestMessage = "";
ImVec4 m_ivHiddenServerMessageColor = ImVec4(0.00f, 1.00f, 0.00f, 1.00f);
/* Texture */
ID3D11ShaderResourceView* m_idLockedIcon = nullptr;
std::vector<unsigned char>* m_vucLockedIconBlob;
int m_nLockedIconWidth = 0;
int m_nLockedIconHeight = 0;
void SetSection(ESection section)
{
eCurrentSection = section;
}
};
extern IBrowser* g_pIBrowser;
#endif