networking
This commit is contained in:
180
external/steamworks/steamworksexample/RemotePlay.cpp
vendored
Normal file
180
external/steamworks/steamworksexample/RemotePlay.cpp
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
//========= Copyright <20> 1996-2009, Valve LLC, All rights reserved. ============
|
||||
//
|
||||
// Purpose: Class for Remote Play session list
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "RemotePlay.h"
|
||||
#include "BaseMenu.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Menu that shows your Remote Play session
|
||||
//-----------------------------------------------------------------------------
|
||||
class CRemotePlayListMenu : public CBaseMenu<RemotePlayListMenuItem_t>
|
||||
{
|
||||
static const RemotePlayListMenuItem_t k_menuItemEmpty;
|
||||
|
||||
public:
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CRemotePlayListMenu( IGameEngine *pGameEngine ) : CBaseMenu<RemotePlayListMenuItem_t>( pGameEngine )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Creates Remote Play session list menu
|
||||
//-----------------------------------------------------------------------------
|
||||
void Rebuild()
|
||||
{
|
||||
PushSelectedItem();
|
||||
ClearMenuItems();
|
||||
|
||||
AddMenuItem( CRemotePlayListMenu::MenuItem_t( "Remote Play Session List", k_menuItemEmpty ) );
|
||||
|
||||
InputHandle_t arrInputHandles[ STEAM_INPUT_MAX_COUNT ];
|
||||
int nNumControllers = SteamInput()->GetConnectedControllers( arrInputHandles );
|
||||
|
||||
uint32 unSessionCount = SteamRemotePlay()->GetSessionCount();
|
||||
for ( uint32 iIndex = 0; iIndex < unSessionCount; iIndex++ )
|
||||
{
|
||||
RemotePlaySessionID_t unSessionID = SteamRemotePlay()->GetSessionID( iIndex );
|
||||
if ( !unSessionID )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
RemotePlayListMenuItem_t item;
|
||||
item.m_unSessionID = unSessionID;
|
||||
|
||||
const char *pszSessionPersonaName = SteamFriends()->GetFriendPersonaName( SteamRemotePlay()->GetSessionSteamID( unSessionID ) );
|
||||
const char *pszSessionClientName = SteamRemotePlay()->GetSessionClientName( unSessionID );
|
||||
const char *pszSessionClientFormFactor = GetFormFactor( SteamRemotePlay()->GetSessionClientFormFactor( unSessionID ) );
|
||||
|
||||
int nResolutionX, nResolutionY;
|
||||
SteamRemotePlay()->BGetSessionClientResolution( unSessionID, &nResolutionX, &nResolutionY );
|
||||
|
||||
char szLabel[ 1024 ];
|
||||
snprintf( szLabel, sizeof( szLabel ), "%s streaming to %s: %s %dx%d", pszSessionPersonaName, pszSessionClientName, pszSessionClientFormFactor, nResolutionX, nResolutionY );
|
||||
|
||||
for ( int iController = 0; iController < nNumControllers; ++iController )
|
||||
{
|
||||
if ( SteamInput()->GetRemotePlaySessionID( arrInputHandles[ iController ] ) == unSessionID )
|
||||
{
|
||||
strncat( szLabel, ", has ", sizeof( szLabel ) - strlen( szLabel ) - 1 );
|
||||
strncat( szLabel, GetControllerType( SteamInput()->GetInputTypeForHandle( arrInputHandles[ iController ] ) ), sizeof( szLabel ) - strlen( szLabel ) - 1 );
|
||||
}
|
||||
}
|
||||
AddMenuItem( CRemotePlayListMenu::MenuItem_t( szLabel, item ) );
|
||||
}
|
||||
|
||||
PopSelectedItem();
|
||||
}
|
||||
|
||||
private:
|
||||
const char *GetFormFactor( ESteamDeviceFormFactor eFormFactor )
|
||||
{
|
||||
switch ( eFormFactor )
|
||||
{
|
||||
case k_ESteamDeviceFormFactorPhone:
|
||||
return "[PHONE]";
|
||||
case k_ESteamDeviceFormFactorTablet:
|
||||
return "[TABLET]";
|
||||
case k_ESteamDeviceFormFactorComputer:
|
||||
return "[COMPUTER]";
|
||||
case k_ESteamDeviceFormFactorTV:
|
||||
return "[TV]";
|
||||
default:
|
||||
return "[UNKNOWN]";
|
||||
}
|
||||
}
|
||||
|
||||
const char *GetControllerType( ESteamInputType eInputType )
|
||||
{
|
||||
switch ( eInputType )
|
||||
{
|
||||
case k_ESteamInputType_SteamController:
|
||||
return "Steam Controller";
|
||||
case k_ESteamInputType_XBox360Controller:
|
||||
return "XBox 360 Controller";
|
||||
case k_ESteamInputType_XBoxOneController:
|
||||
return "XBox One Controller";
|
||||
case k_ESteamInputType_PS4Controller:
|
||||
return "PS4 Controller";
|
||||
case k_ESteamInputType_MobileTouch:
|
||||
return "Touch Controller";
|
||||
default:
|
||||
return "Game Controller";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const RemotePlayListMenuItem_t CRemotePlayListMenu::k_menuItemEmpty = { 0 };
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CRemotePlayList::CRemotePlayList( IGameEngine *pGameEngine ) : m_pGameEngine( pGameEngine )
|
||||
{
|
||||
m_pRemotePlayListMenu = new CRemotePlayListMenu( pGameEngine );
|
||||
m_nNumControllers = 0;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Run a frame for the CRemotePlayList
|
||||
//-----------------------------------------------------------------------------
|
||||
void CRemotePlayList::RunFrame()
|
||||
{
|
||||
InputHandle_t arrInputHandles[ STEAM_INPUT_MAX_COUNT ];
|
||||
int nNumControllers = SteamInput()->GetConnectedControllers( arrInputHandles );
|
||||
if ( nNumControllers != m_nNumControllers )
|
||||
{
|
||||
m_nNumControllers = nNumControllers;
|
||||
|
||||
m_pRemotePlayListMenu->Rebuild();
|
||||
}
|
||||
|
||||
m_pRemotePlayListMenu->RunFrame();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handles menu actions when viewing a Remote Play session list
|
||||
//-----------------------------------------------------------------------------
|
||||
void CRemotePlayList::OnMenuSelection( RemotePlayListMenuItem_t selection )
|
||||
{
|
||||
// Do nothing (yet)
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Shows / Refreshes the Remote Play session list
|
||||
//-----------------------------------------------------------------------------
|
||||
void CRemotePlayList::Show()
|
||||
{
|
||||
m_pRemotePlayListMenu->Rebuild();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handle Remote Play session connected
|
||||
//-----------------------------------------------------------------------------
|
||||
void CRemotePlayList::OnRemotePlaySessionConnected( SteamRemotePlaySessionConnected_t *pParam )
|
||||
{
|
||||
m_pRemotePlayListMenu->Rebuild();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handle Remote Play session disconnected
|
||||
//-----------------------------------------------------------------------------
|
||||
void CRemotePlayList::OnRemotePlaySessionDisconnected( SteamRemotePlaySessionDisconnected_t *pParam )
|
||||
{
|
||||
m_pRemotePlayListMenu->Rebuild();
|
||||
}
|
||||
Reference in New Issue
Block a user