2020-08-20 10:17:44 +00:00
|
|
|
#include <engine/steam.h>
|
|
|
|
|
|
|
|
#include <steam/steam_api_flat.h>
|
|
|
|
|
|
|
|
class CSteam : public ISteam
|
|
|
|
{
|
2020-09-01 22:32:22 +00:00
|
|
|
ISteamApps *m_pSteamApps;
|
|
|
|
ISteamFriends *m_pSteamFriends;
|
2020-08-20 10:19:03 +00:00
|
|
|
char m_aPlayerName[16];
|
2020-09-06 11:37:48 +00:00
|
|
|
bool m_GotConnectAddr;
|
|
|
|
NETADDR m_ConnectAddr;
|
2020-08-20 10:17:44 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
CSteam()
|
|
|
|
{
|
2020-09-01 22:32:22 +00:00
|
|
|
m_pSteamApps = SteamAPI_SteamApps_v008();
|
|
|
|
m_pSteamFriends = SteamAPI_SteamFriends_v017();
|
|
|
|
|
2020-09-06 11:37:48 +00:00
|
|
|
char aConnect[NETADDR_MAXSTRSIZE];
|
|
|
|
int ConnectSize = SteamAPI_ISteamApps_GetLaunchCommandLine(m_pSteamApps, aConnect, sizeof(aConnect));
|
|
|
|
if(ConnectSize >= NETADDR_MAXSTRSIZE)
|
2020-09-01 22:32:22 +00:00
|
|
|
{
|
2020-09-06 11:37:48 +00:00
|
|
|
ConnectSize = NETADDR_MAXSTRSIZE - 1;
|
|
|
|
}
|
|
|
|
aConnect[ConnectSize] = 0;
|
|
|
|
m_GotConnectAddr = false;
|
|
|
|
if(aConnect[0])
|
|
|
|
{
|
|
|
|
if(net_addr_from_str(&m_ConnectAddr, aConnect) == 0)
|
|
|
|
{
|
|
|
|
m_GotConnectAddr = true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
dbg_msg("steam", "got unparsable launch connect string: '%s'", aConnect);
|
|
|
|
}
|
2020-09-01 22:32:22 +00:00
|
|
|
}
|
|
|
|
str_copy(m_aPlayerName, SteamAPI_ISteamFriends_GetPersonaName(m_pSteamFriends), sizeof(m_aPlayerName));
|
2020-08-20 10:17:44 +00:00
|
|
|
}
|
|
|
|
~CSteam()
|
|
|
|
{
|
|
|
|
SteamAPI_Shutdown();
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *GetPlayerName()
|
|
|
|
{
|
2020-08-20 10:19:03 +00:00
|
|
|
return m_aPlayerName;
|
2020-08-20 10:17:44 +00:00
|
|
|
}
|
2020-09-01 22:32:22 +00:00
|
|
|
|
2020-09-06 11:37:48 +00:00
|
|
|
const NETADDR *GetLaunchConnectAddress()
|
|
|
|
{
|
|
|
|
if(m_GotConnectAddr)
|
|
|
|
{
|
|
|
|
return &m_ConnectAddr;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-01 22:32:22 +00:00
|
|
|
void ClearGameInfo()
|
|
|
|
{
|
|
|
|
SteamAPI_ISteamFriends_ClearRichPresence(m_pSteamFriends);
|
|
|
|
}
|
|
|
|
void SetGameInfo(NETADDR ServerAddr, const char *pMapName)
|
|
|
|
{
|
2020-09-06 11:37:48 +00:00
|
|
|
char aServerAddr[NETADDR_MAXSTRSIZE];
|
|
|
|
net_addr_str(&ServerAddr, aServerAddr, sizeof(aServerAddr), true);
|
|
|
|
|
|
|
|
SteamAPI_ISteamFriends_SetRichPresence(m_pSteamFriends, "connect", aServerAddr);
|
|
|
|
SteamAPI_ISteamFriends_SetRichPresence(m_pSteamFriends, "map", pMapName);
|
2020-09-01 22:32:22 +00:00
|
|
|
SteamAPI_ISteamFriends_SetRichPresence(m_pSteamFriends, "status", pMapName);
|
|
|
|
SteamAPI_ISteamFriends_SetRichPresence(m_pSteamFriends, "steam_display", "#Status");
|
|
|
|
}
|
2020-08-20 10:17:44 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class CSteamStub : public ISteam
|
|
|
|
{
|
2020-09-01 22:32:22 +00:00
|
|
|
const char *GetPlayerName() { return 0; }
|
2020-09-06 11:37:48 +00:00
|
|
|
const NETADDR *GetLaunchConnectAddress() { return 0; }
|
2020-09-01 22:32:22 +00:00
|
|
|
void ClearGameInfo() { }
|
|
|
|
void SetGameInfo(NETADDR ServerAddr, const char *pMapName) { }
|
2020-08-20 10:17:44 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
ISteam *CreateSteam()
|
|
|
|
{
|
|
|
|
if(!SteamAPI_Init())
|
|
|
|
{
|
|
|
|
return new CSteamStub();
|
|
|
|
}
|
|
|
|
return new CSteam();
|
|
|
|
}
|