From 34c5334fda6dbd5153df7f25eccb64cc5dad6b23 Mon Sep 17 00:00:00 2001 From: Elias Date: Sat, 22 Dec 2018 15:40:24 +0100 Subject: [PATCH] Remove anything steam relative to be completely FOSS --- ScreenPlay/Resources.qrc | 3 - ScreenPlay/ScreenPlay.pro | 34 +- ScreenPlay/ThirdParty/qt-google-analytics | 1 - ScreenPlay/ThirdParty/steam/isteamapplist.h | 63 - ScreenPlay/ThirdParty/steam/isteamapps.h | 176 - ScreenPlay/ThirdParty/steam/isteamappticket.h | 28 - ScreenPlay/ThirdParty/steam/isteamclient.h | 526 - .../ThirdParty/steam/isteamcontroller.h | 461 - ScreenPlay/ThirdParty/steam/isteamfriends.h | 639 - .../ThirdParty/steam/isteamgamecoordinator.h | 75 - .../ThirdParty/steam/isteamgameserver.h | 387 - .../ThirdParty/steam/isteamgameserverstats.h | 101 - .../ThirdParty/steam/isteamhtmlsurface.h | 466 - ScreenPlay/ThirdParty/steam/isteamhttp.h | 210 - ScreenPlay/ThirdParty/steam/isteaminventory.h | 429 - .../steam/isteammasterserverupdater.h | 1 - .../ThirdParty/steam/isteammatchmaking.h | 751 - ScreenPlay/ThirdParty/steam/isteammusic.h | 67 - .../ThirdParty/steam/isteammusicremote.h | 129 - .../ThirdParty/steam/isteamnetworking.h | 306 - .../ThirdParty/steam/isteamparentalsettings.h | 57 - .../steam/isteamps3overlayrenderer.h | 91 - .../ThirdParty/steam/isteamremotestorage.h | 681 - .../ThirdParty/steam/isteamscreenshots.h | 116 - ScreenPlay/ThirdParty/steam/isteamugc.h | 545 - .../ThirdParty/steam/isteamunifiedmessages.h | 63 - ScreenPlay/ThirdParty/steam/isteamuser.h | 369 - ScreenPlay/ThirdParty/steam/isteamuserstats.h | 476 - ScreenPlay/ThirdParty/steam/isteamutils.h | 264 - ScreenPlay/ThirdParty/steam/isteamvideo.h | 71 - .../lib/linux32/libsdkencryptedappticket.so | Bin 1063483 -> 0 bytes .../lib/linux64/libsdkencryptedappticket.so | Bin 961011 -> 0 bytes .../lib/osx32/libsdkencryptedappticket.dylib | Bin 2127952 -> 0 bytes .../steam/lib/win32/sdkencryptedappticket.dll | 3 - .../steam/lib/win32/sdkencryptedappticket.lib | Bin 4542 -> 0 bytes .../lib/win64/sdkencryptedappticket64.dll | 3 - .../lib/win64/sdkencryptedappticket64.lib | Bin 4554 -> 0 bytes .../ThirdParty/steam/matchmakingtypes.h | 251 - .../linux32/libsteam_api.so | Bin 365412 -> 0 bytes .../linux64/libsteam_api.so | Bin 370330 -> 0 bytes .../osx32/libsteam_api.dylib | Bin 609216 -> 0 bytes .../steam/redistributable_bin/steam_api.dll | 3 - .../steam/redistributable_bin/steam_api.lib | Bin 297550 -> 0 bytes .../redistributable_bin/win64/steam_api64.dll | 3 - .../redistributable_bin/win64/steam_api64.lib | Bin 294986 -> 0 bytes ScreenPlay/ThirdParty/steam/steam_api.h | 394 - ScreenPlay/ThirdParty/steam/steam_api.json | 8100 ----------- ScreenPlay/ThirdParty/steam/steam_api_flat.h | 844 -- .../ThirdParty/steam/steam_api_internal.h | 328 - .../ThirdParty/steam/steam_api_interop.cs | 11339 ---------------- .../ThirdParty/steam/steam_gameserver.h | 243 - .../ThirdParty/steam/steamclientpublic.h | 1270 -- .../steam/steamencryptedappticket.h | 32 - ScreenPlay/ThirdParty/steam/steamhttpenums.h | 98 - ScreenPlay/ThirdParty/steam/steamps3params.h | 112 - ScreenPlay/ThirdParty/steam/steamtypes.h | 184 - ScreenPlay/ThirdParty/steam/steamuniverse.h | 27 - ScreenPlay/main.cpp | 20 +- ScreenPlay/main.qml | 1 - ScreenPlay/qml/Navigation.qml | 7 +- .../qml/Workshop/WorkshopAlertBanner.qml | 114 - ScreenPlay/qml/Workshop/WorkshopBanner.qml | 51 - ScreenPlay/qml/Workshop/WorkshopItem.qml | 486 - ScreenPlay/qml/Workshop/WorkshopLoader.qml | 6 - ScreenPlay/src/settings.cpp | 3 +- ScreenPlay/src/settings.h | 5 +- ScreenPlay/src/startuperror.cpp | 13 - ScreenPlay/src/startuperror.h | 25 - ScreenPlay/src/steamworkshop.cpp | 242 - ScreenPlay/src/steamworkshop.h | 133 - ScreenPlay/src/steamworkshoplistmodel.cpp | 142 - ScreenPlay/src/steamworkshoplistmodel.h | 67 - ScreenPlay/src/workshopitem.cpp | 18 - ScreenPlay/src/workshopitem.h | 26 - ScreenPlay/steam_appid.txt | 1 - 75 files changed, 9 insertions(+), 32171 deletions(-) delete mode 160000 ScreenPlay/ThirdParty/qt-google-analytics delete mode 100644 ScreenPlay/ThirdParty/steam/isteamapplist.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamapps.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamappticket.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamclient.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamcontroller.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamfriends.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamgamecoordinator.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamgameserver.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamgameserverstats.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamhtmlsurface.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamhttp.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteaminventory.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteammasterserverupdater.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteammatchmaking.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteammusic.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteammusicremote.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamnetworking.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamparentalsettings.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamps3overlayrenderer.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamremotestorage.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamscreenshots.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamugc.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamunifiedmessages.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamuser.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamuserstats.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamutils.h delete mode 100644 ScreenPlay/ThirdParty/steam/isteamvideo.h delete mode 100644 ScreenPlay/ThirdParty/steam/lib/linux32/libsdkencryptedappticket.so delete mode 100644 ScreenPlay/ThirdParty/steam/lib/linux64/libsdkencryptedappticket.so delete mode 100644 ScreenPlay/ThirdParty/steam/lib/osx32/libsdkencryptedappticket.dylib delete mode 100644 ScreenPlay/ThirdParty/steam/lib/win32/sdkencryptedappticket.dll delete mode 100644 ScreenPlay/ThirdParty/steam/lib/win32/sdkencryptedappticket.lib delete mode 100644 ScreenPlay/ThirdParty/steam/lib/win64/sdkencryptedappticket64.dll delete mode 100644 ScreenPlay/ThirdParty/steam/lib/win64/sdkencryptedappticket64.lib delete mode 100644 ScreenPlay/ThirdParty/steam/matchmakingtypes.h delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/linux32/libsteam_api.so delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/linux64/libsteam_api.so delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/osx32/libsteam_api.dylib delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/steam_api.dll delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/steam_api.lib delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/win64/steam_api64.dll delete mode 100644 ScreenPlay/ThirdParty/steam/redistributable_bin/win64/steam_api64.lib delete mode 100644 ScreenPlay/ThirdParty/steam/steam_api.h delete mode 100644 ScreenPlay/ThirdParty/steam/steam_api.json delete mode 100644 ScreenPlay/ThirdParty/steam/steam_api_flat.h delete mode 100644 ScreenPlay/ThirdParty/steam/steam_api_internal.h delete mode 100644 ScreenPlay/ThirdParty/steam/steam_api_interop.cs delete mode 100644 ScreenPlay/ThirdParty/steam/steam_gameserver.h delete mode 100644 ScreenPlay/ThirdParty/steam/steamclientpublic.h delete mode 100644 ScreenPlay/ThirdParty/steam/steamencryptedappticket.h delete mode 100644 ScreenPlay/ThirdParty/steam/steamhttpenums.h delete mode 100644 ScreenPlay/ThirdParty/steam/steamps3params.h delete mode 100644 ScreenPlay/ThirdParty/steam/steamtypes.h delete mode 100644 ScreenPlay/ThirdParty/steam/steamuniverse.h delete mode 100644 ScreenPlay/qml/Workshop/WorkshopAlertBanner.qml delete mode 100644 ScreenPlay/qml/Workshop/WorkshopBanner.qml delete mode 100644 ScreenPlay/qml/Workshop/WorkshopItem.qml delete mode 100644 ScreenPlay/src/startuperror.cpp delete mode 100644 ScreenPlay/src/startuperror.h delete mode 100644 ScreenPlay/src/steamworkshop.cpp delete mode 100644 ScreenPlay/src/steamworkshop.h delete mode 100644 ScreenPlay/src/steamworkshoplistmodel.cpp delete mode 100644 ScreenPlay/src/steamworkshoplistmodel.h delete mode 100644 ScreenPlay/src/workshopitem.cpp delete mode 100644 ScreenPlay/src/workshopitem.h delete mode 100644 ScreenPlay/steam_appid.txt diff --git a/ScreenPlay/Resources.qrc b/ScreenPlay/Resources.qrc index 0a87e5b1..01ba9345 100644 --- a/ScreenPlay/Resources.qrc +++ b/ScreenPlay/Resources.qrc @@ -112,9 +112,6 @@ qml/StartupErrorWindow.qml qml/Widgets/Window.qml qml/Workshop/Workshop.qml - qml/Workshop/WorkshopAlertBanner.qml - qml/Workshop/WorkshopBanner.qml - qml/Workshop/WorkshopItem.qml qtquickcontrols2.conf settings.json translations/ScreenPlay_de.qm diff --git a/ScreenPlay/ScreenPlay.pro b/ScreenPlay/ScreenPlay.pro index 47ce24fd..abf3ebd0 100644 --- a/ScreenPlay/ScreenPlay.pro +++ b/ScreenPlay/ScreenPlay.pro @@ -10,20 +10,16 @@ TARGETPATH = ScreenPlay ICON = favicon.ico SOURCES += main.cpp \ - src/steamworkshop.cpp \ src/installedlistmodel.cpp \ src/monitorlistmodel.cpp \ src/settings.cpp \ src/profilelistmodel.cpp \ src/profile.cpp \ src/projectfile.cpp \ - src/steamworkshoplistmodel.cpp \ - src/workshopitem.cpp \ src/installedlistfilter.cpp \ src/sdkconnector.cpp \ src/projectsettingslistitem.cpp \ src/projectsettingslistmodel.cpp \ - src/startuperror.cpp \ src/screenplay.cpp \ src/qmlutilities.cpp \ src/create.cpp @@ -34,20 +30,16 @@ TRANSLATIONS = translations/ScreenPlay_en.ts \ translations/ScreenPlay_de.ts HEADERS += \ - src/steamworkshop.h \ src/installedlistmodel.h \ src/monitorlistmodel.h \ src/settings.h \ src/profilelistmodel.h \ src/profile.h \ src/projectfile.h \ - src/steamworkshoplistmodel.h \ - src/workshopitem.h \ src/installedlistfilter.h \ src/sdkconnector.h \ src/projectsettingslistitem.h \ src/projectsettingslistmodel.h \ - src/startuperror.h \ src/screenplay.h \ src/qmlutilities.h \ src/create.h @@ -62,12 +54,8 @@ CONFIG(debug, debug|release) { install_it.path = $${OUT_PWD}/release/ } -installOut.path = $${OUT_PWD}/ -installOut.files += steam_appid.txt \ - install_it.files += assets/templates/config.json \ - assets/icons/favicon.ico \ - steam_appid.txt \ + assets/icons/favicon.ico win32 { install_it.files += ThirdParty/ffmpeg/Windows/avcodec-58.dll \ @@ -86,7 +74,6 @@ win32 { } INSTALLS += install_it -INSTALLS += installOut # Additional import path used to resolve QML modules in Qt Creator's code model QML_IMPORT_PATH = @@ -101,25 +88,6 @@ QT_QUICK_CONTROLS_STYLE = "Material" # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS -win32 { - win32: LIBS += -L$$PWD/ThirdParty/Steam/redistributable_bin/win64/ -lsteam_api64 - DEPENDPATH += $$PWD/ThirdParty/Steam/redistributable_bin/win64 - - install_it.files += ThirdParty\steam\redistributable_bin\win64\steam_api64.dll -} - -unix:!macx { - LIBS += -L$$PWD/ThirdParty/steam/redistributable_bin/linux64/ -lsteam_api - DEPENDPATH += $$PWD/ThirdParty/steam/redistributable_bin/linux64 - - INCLUDEPATH += $$PWD/ThirdParty/steam/lib/linux64 - DEPENDPATH += $$PWD/ThirdParty/steam/lib/linux64s - - LIBS += -L$$PWD/ThirdParty/steam/lib/linux64/ -lsdkencryptedappticket - - install_it.files += ThirdParty\steam\redistributable_bin\linux64\libsteam_api.so -} - macx: { LIBS += -L$$PWD/ThirdParty/steam/redistributable_bin/osx32/ -lsteam_api DEPENDPATH += $$PWD/ThirdParty/steam/redistributable_bin/osx32 diff --git a/ScreenPlay/ThirdParty/qt-google-analytics b/ScreenPlay/ThirdParty/qt-google-analytics deleted file mode 160000 index fa90c92f..00000000 --- a/ScreenPlay/ThirdParty/qt-google-analytics +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fa90c92fec84bd7ec4a04f09ff50c47eee5e1104 diff --git a/ScreenPlay/ThirdParty/steam/isteamapplist.h b/ScreenPlay/ThirdParty/steam/isteamapplist.h deleted file mode 100644 index d6789095..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamapplist.h +++ /dev/null @@ -1,63 +0,0 @@ -//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to app data in Steam -// -//============================================================================= - -#ifndef ISTEAMAPPLIST_H -#define ISTEAMAPPLIST_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" -#include "steamtypes.h" - -//----------------------------------------------------------------------------- -// Purpose: This is a restricted interface that can only be used by previously approved apps, -// contact your Steam Account Manager if you believe you need access to this API. -// This interface lets you detect installed apps for the local Steam client, useful for debugging tools -// to offer lists of apps to debug via Steam. -//----------------------------------------------------------------------------- -class ISteamAppList -{ -public: - virtual uint32 GetNumInstalledApps() = 0; - virtual uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) = 0; - - virtual int GetAppName( AppId_t nAppID, OUT_STRING() char *pchName, int cchNameMax ) = 0; // returns -1 if no name was found - virtual int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) = 0; // returns -1 if no dir was found - - virtual int GetAppBuildId( AppId_t nAppID ) = 0; // return the buildid of this app, may change at any time based on backend updates to the game -}; - -#define STEAMAPPLIST_INTERFACE_VERSION "STEAMAPPLIST_INTERFACE_VERSION001" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -//--------------------------------------------------------------------------------- -// Purpose: Sent when a new app is installed -//--------------------------------------------------------------------------------- -DEFINE_CALLBACK( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 ); - CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs -END_DEFINE_CALLBACK_1() - - -//--------------------------------------------------------------------------------- -// Purpose: Sent when an app is uninstalled -//--------------------------------------------------------------------------------- -DEFINE_CALLBACK( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 ); - CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs -END_DEFINE_CALLBACK_1() - - -#pragma pack( pop ) -#endif // ISTEAMAPPLIST_H diff --git a/ScreenPlay/ThirdParty/steam/isteamapps.h b/ScreenPlay/ThirdParty/steam/isteamapps.h deleted file mode 100644 index 9a97b4a3..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamapps.h +++ /dev/null @@ -1,176 +0,0 @@ -//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to app data in Steam -// -//============================================================================= - -#ifndef ISTEAMAPPS_H -#define ISTEAMAPPS_H -#ifdef _WIN32 -#pragma once -#endif - -const int k_cubAppProofOfPurchaseKeyMax = 240; // max supported length of a legacy cd key - - -//----------------------------------------------------------------------------- -// Purpose: interface to app data -//----------------------------------------------------------------------------- -class ISteamApps -{ -public: - virtual bool BIsSubscribed() = 0; - virtual bool BIsLowViolence() = 0; - virtual bool BIsCybercafe() = 0; - virtual bool BIsVACBanned() = 0; - virtual const char *GetCurrentGameLanguage() = 0; - virtual const char *GetAvailableGameLanguages() = 0; - - // only use this member if you need to check ownership of another game related to yours, a demo for example - virtual bool BIsSubscribedApp( AppId_t appID ) = 0; - - // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed - virtual bool BIsDlcInstalled( AppId_t appID ) = 0; - - // returns the Unix time of the purchase of the app - virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0; - - // Checks if the user is subscribed to the current app through a free weekend - // This function will return false for users who have a retail or other type of license - // Before using, please ask your Valve technical contact how to package and secure your free weekened - virtual bool BIsSubscribedFromFreeWeekend() = 0; - - // Returns the number of DLC pieces for the running app - virtual int GetDLCCount() = 0; - - // Returns metadata for DLC by index, of range [0, GetDLCCount()] - virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0; - - // Install/Uninstall control for optional DLC - virtual void InstallDLC( AppId_t nAppID ) = 0; - virtual void UninstallDLC( AppId_t nAppID ) = 0; - - // Request legacy cd-key for yourself or owned DLC. If you are interested in this - // data then make sure you provide us with a list of valid keys to be distributed - // to users when they purchase the game, before the game ships. - // You'll receive an AppProofOfPurchaseKeyResponse_t callback when - // the key is available (which may be immediately). - virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0; - - virtual bool GetCurrentBetaName( char *pchName, int cchNameBufferSize ) = 0; // returns current beta branch name, 'public' is the default branch - virtual bool MarkContentCorrupt( bool bMissingFilesOnly ) = 0; // signal Steam that game files seems corrupt or missing - virtual uint32 GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uint32 cMaxDepots ) = 0; // return installed depots in mount order - - // returns current app install folder for AppID, returns folder name length - virtual uint32 GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchFolderBufferSize ) = 0; - virtual bool BIsAppInstalled( AppId_t appID ) = 0; // returns true if that app is installed (not necessarily owned) - - virtual CSteamID GetAppOwner() = 0; // returns the SteamID of the original owner. If different from current user, it's borrowed - - // Returns the associated launch param if the game is run via steam://run///?param1=value1;param2=value2;param3=value3 etc. - // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string. - // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game, - // but it is advised that you not param names beginning with an underscore for your own features. - virtual const char *GetLaunchQueryParam( const char *pchKey ) = 0; - - // get download progress for optional DLC - virtual bool GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0; - - // return the buildid of this app, may change at any time based on backend updates to the game - virtual int GetAppBuildId() = 0; - - // Request all proof of purchase keys for the calling appid and asociated DLC. - // A series of AppProofOfPurchaseKeyResponse_t callbacks will be sent with - // appropriate appid values, ending with a final callback where the m_nAppId - // member is k_uAppIdInvalid (zero). - virtual void RequestAllProofOfPurchaseKeys() = 0; - - CALL_RESULT( FileDetailsResult_t ) - virtual SteamAPICall_t GetFileDetails( const char* pszFileName ) = 0; -}; - -#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif -//----------------------------------------------------------------------------- -// Purpose: posted after the user gains ownership of DLC & that DLC is installed -//----------------------------------------------------------------------------- -struct DlcInstalled_t -{ - enum { k_iCallback = k_iSteamAppsCallbacks + 5 }; - AppId_t m_nAppID; // AppID of the DLC -}; - - -//----------------------------------------------------------------------------- -// Purpose: possible results when registering an activation code -//----------------------------------------------------------------------------- -enum ERegisterActivationCodeResult -{ - k_ERegisterActivationCodeResultOK = 0, - k_ERegisterActivationCodeResultFail = 1, - k_ERegisterActivationCodeResultAlreadyRegistered = 2, - k_ERegisterActivationCodeResultTimeout = 3, - k_ERegisterActivationCodeAlreadyOwned = 4, -}; - - -//----------------------------------------------------------------------------- -// Purpose: response to RegisterActivationCode() -//----------------------------------------------------------------------------- -struct RegisterActivationCodeResponse_t -{ - enum { k_iCallback = k_iSteamAppsCallbacks + 8 }; - ERegisterActivationCodeResult m_eResult; - uint32 m_unPackageRegistered; // package that was registered. Only set on success -}; - - -//--------------------------------------------------------------------------------- -// Purpose: posted after the user gains executes a steam url with query parameters -// such as steam://run///?param1=value1;param2=value2;param3=value3; etc -// while the game is already running. The new params can be queried -// with GetLaunchQueryParam. -//--------------------------------------------------------------------------------- -struct NewLaunchQueryParameters_t -{ - enum { k_iCallback = k_iSteamAppsCallbacks + 14 }; -}; - - -//----------------------------------------------------------------------------- -// Purpose: response to RequestAppProofOfPurchaseKey/RequestAllProofOfPurchaseKeys -// for supporting third-party CD keys, or other proof-of-purchase systems. -//----------------------------------------------------------------------------- -struct AppProofOfPurchaseKeyResponse_t -{ - enum { k_iCallback = k_iSteamAppsCallbacks + 21 }; - EResult m_eResult; - uint32 m_nAppID; - uint32 m_cchKeyLength; - char m_rgchKey[k_cubAppProofOfPurchaseKeyMax]; -}; - - -//----------------------------------------------------------------------------- -// Purpose: response to GetFileDetails -//----------------------------------------------------------------------------- -struct FileDetailsResult_t -{ - enum { k_iCallback = k_iSteamAppsCallbacks + 23 }; - EResult m_eResult; - uint64 m_ulFileSize; // original file size in bytes - uint8 m_FileSHA[20]; // original file SHA1 hash - uint32 m_unFlags; // -}; - - -#pragma pack( pop ) -#endif // ISTEAMAPPS_H diff --git a/ScreenPlay/ThirdParty/steam/isteamappticket.h b/ScreenPlay/ThirdParty/steam/isteamappticket.h deleted file mode 100644 index 21fb9e13..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamappticket.h +++ /dev/null @@ -1,28 +0,0 @@ -//====== Copyright 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: a private, but well versioned, interface to get at critical bits -// of a steam3 appticket - consumed by the simple drm wrapper to let it -// ask about ownership with greater confidence. -// -//============================================================================= - -#ifndef ISTEAMAPPTICKET_H -#define ISTEAMAPPTICKET_H -#pragma once - -//----------------------------------------------------------------------------- -// Purpose: hand out a reasonable "future proof" view of an app ownership ticket -// the raw (signed) buffer, and indices into that buffer where the appid and -// steamid are located. the sizes of the appid and steamid are implicit in -// (each version of) the interface - currently uin32 appid and uint64 steamid -//----------------------------------------------------------------------------- -class ISteamAppTicket -{ -public: - virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0; -}; - -#define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001" - - -#endif // ISTEAMAPPTICKET_H diff --git a/ScreenPlay/ThirdParty/steam/isteamclient.h b/ScreenPlay/ThirdParty/steam/isteamclient.h deleted file mode 100644 index af8828d0..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamclient.h +++ /dev/null @@ -1,526 +0,0 @@ -//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: Main interface for loading and accessing Steamworks API's from the -// Steam client. -// For most uses, this code is wrapped inside of SteamAPI_Init() -//============================================================================= - -#ifndef ISTEAMCLIENT_H -#define ISTEAMCLIENT_H -#ifdef _WIN32 -#pragma once -#endif - -#include "steamtypes.h" -#include "steamclientpublic.h" - -// Define compile time assert macros to let us validate the structure sizes. -#define VALVE_COMPILE_TIME_ASSERT( pred ) typedef char compile_time_assert_type[(pred) ? 1 : -1]; - -#ifndef REFERENCE -#define REFERENCE(arg) ((void)arg) -#endif - -#if ( defined(STEAM_API_EXPORTS) || defined(STEAM_API_NODLL) ) && !defined(API_GEN) -#define STEAM_PRIVATE_API( ... ) __VA_ARGS__ -#elif defined(STEAM_API_EXPORTS) && defined(API_GEN) -#define STEAM_PRIVATE_API( ... ) -#else -#define STEAM_PRIVATE_API( ... ) protected: __VA_ARGS__ public: -#endif - -#if defined(__linux__) || defined(__APPLE__) -// The 32-bit version of gcc has the alignment requirement for uint64 and double set to -// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned. -// The 64-bit version of gcc has the alignment requirement for these types set to -// 8 meaning that unless we use #pragma pack(4) our structures will get bigger. -// The 64-bit structure packing has to match the 32-bit structure packing for each platform. -#define VALVE_CALLBACK_PACK_SMALL -#else -#define VALVE_CALLBACK_PACK_LARGE -#endif - -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error ??? -#endif - -typedef struct ValvePackingSentinel_t -{ - uint32 m_u32; - uint64 m_u64; - uint16 m_u16; - double m_d; -} ValvePackingSentinel_t; - -#pragma pack( pop ) - - -#if defined(VALVE_CALLBACK_PACK_SMALL) -VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 24 ) -#elif defined(VALVE_CALLBACK_PACK_LARGE) -VALVE_COMPILE_TIME_ASSERT( sizeof(ValvePackingSentinel_t) == 32 ) -#else -#error ??? -#endif - - -// handle to a communication pipe to the Steam client -typedef int32 HSteamPipe; -// handle to single instance of a steam user -typedef int32 HSteamUser; -// function prototype -#if defined( POSIX ) -#define __cdecl -#endif -extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *); -extern "C" typedef uint32 ( *SteamAPI_CheckCallbackRegistered_t )( int iCallbackNum ); -#if defined( __SNC__ ) - #pragma diag_suppress=1700 // warning 1700: class "%s" has virtual functions but non-virtual destructor -#endif - -// interface predec -class ISteamUser; -class ISteamGameServer; -class ISteamFriends; -class ISteamUtils; -class ISteamMatchmaking; -class ISteamContentServer; -class ISteamMatchmakingServers; -class ISteamUserStats; -class ISteamApps; -class ISteamNetworking; -class ISteamRemoteStorage; -class ISteamScreenshots; -class ISteamMusic; -class ISteamMusicRemote; -class ISteamGameServerStats; -class ISteamPS3OverlayRender; -class ISteamHTTP; -class ISteamController; -class ISteamUGC; -class ISteamAppList; -class ISteamHTMLSurface; -class ISteamInventory; -class ISteamVideo; -class ISteamParentalSettings; - -//----------------------------------------------------------------------------- -// Purpose: Interface to creating a new steam instance, or to -// connect to an existing steam instance, whether it's in a -// different process or is local. -// -// For most scenarios this is all handled automatically via SteamAPI_Init(). -// You'll only need these APIs if you have a more complex versioning scheme, -// or if you want to implement a multiplexed gameserver where a single process -// is handling multiple games at once with independent gameserver SteamIDs. -//----------------------------------------------------------------------------- -class ISteamClient -{ -public: - // Creates a communication pipe to the Steam client. - // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling - virtual HSteamPipe CreateSteamPipe() = 0; - - // Releases a previously created communications pipe - // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling - virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0; - - // connects to an existing global user, failing if none exists - // used by the game to coordinate with the steamUI - // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling - virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0; - - // used by game servers, create a steam user that won't be shared with anyone else - // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling - virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0; - - // removes an allocated user - // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling - virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0; - - // retrieves the ISteamUser interface associated with the handle - virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // retrieves the ISteamGameServer interface associated with the handle - virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // set the local IP and Port to bind to - // this must be set before CreateLocalUser() - virtual void SetLocalIPBinding( uint32 unIP, uint16 usPort ) = 0; - - // returns the ISteamFriends interface - virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns the ISteamUtils interface - virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns the ISteamMatchmaking interface - virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns the ISteamMatchmakingServers interface - virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns the a generic interface - virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns the ISteamUserStats interface - virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns the ISteamGameServerStats interface - virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns apps interface - virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // networking - virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // remote storage - virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // user screenshots - virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead. - STEAM_PRIVATE_API( virtual void RunFrame() = 0; ) - - // returns the number of IPC calls made since the last time this function was called - // Used for perf debugging so you can understand how many IPC calls your game makes per frame - // Every IPC call is at minimum a thread context switch if not a process one so you want to rate - // control how often you do them. - virtual uint32 GetIPCCallCount() = 0; - - // API warning handling - // 'int' is the severity; 0 for msg, 1 for warning - // 'const char *' is the text of the message - // callbacks will occur directly after the API function is called that generated the warning or message. - virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0; - - // Trigger global shutdown for the DLL - virtual bool BShutdownIfAllPipesClosed() = 0; - - // Expose HTTP interface - virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Deprecated - the ISteamUnifiedMessages interface is no longer intended for public consumption. - STEAM_PRIVATE_API( virtual void *DEPRECATED_GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0 ; ) - - // Exposes the ISteamController interface - virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Exposes the ISteamUGC interface - virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // returns app list interface, only available on specially registered apps - virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Music Player - virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Music Player Remote - virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0; - - // html page display - virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0; - - // Helper functions for internal Steam usage - STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; ) - STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; ) - STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; ) - - // inventory - virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Video - virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; - - // Parental controls - virtual ISteamParentalSettings *GetISteamParentalSettings( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0; -}; - - -#define STEAMCLIENT_INTERFACE_VERSION "SteamClient017" - -//----------------------------------------------------------------------------- -// Purpose: Base values for callback identifiers, each callback must -// have a unique ID. -//----------------------------------------------------------------------------- -enum { k_iSteamUserCallbacks = 100 }; -enum { k_iSteamGameServerCallbacks = 200 }; -enum { k_iSteamFriendsCallbacks = 300 }; -enum { k_iSteamBillingCallbacks = 400 }; -enum { k_iSteamMatchmakingCallbacks = 500 }; -enum { k_iSteamContentServerCallbacks = 600 }; -enum { k_iSteamUtilsCallbacks = 700 }; -enum { k_iClientFriendsCallbacks = 800 }; -enum { k_iClientUserCallbacks = 900 }; -enum { k_iSteamAppsCallbacks = 1000 }; -enum { k_iSteamUserStatsCallbacks = 1100 }; -enum { k_iSteamNetworkingCallbacks = 1200 }; -enum { k_iClientRemoteStorageCallbacks = 1300 }; -enum { k_iClientDepotBuilderCallbacks = 1400 }; -enum { k_iSteamGameServerItemsCallbacks = 1500 }; -enum { k_iClientUtilsCallbacks = 1600 }; -enum { k_iSteamGameCoordinatorCallbacks = 1700 }; -enum { k_iSteamGameServerStatsCallbacks = 1800 }; -enum { k_iSteam2AsyncCallbacks = 1900 }; -enum { k_iSteamGameStatsCallbacks = 2000 }; -enum { k_iClientHTTPCallbacks = 2100 }; -enum { k_iClientScreenshotsCallbacks = 2200 }; -enum { k_iSteamScreenshotsCallbacks = 2300 }; -enum { k_iClientAudioCallbacks = 2400 }; -enum { k_iClientUnifiedMessagesCallbacks = 2500 }; -enum { k_iSteamStreamLauncherCallbacks = 2600 }; -enum { k_iClientControllerCallbacks = 2700 }; -enum { k_iSteamControllerCallbacks = 2800 }; -enum { k_iClientParentalSettingsCallbacks = 2900 }; -enum { k_iClientDeviceAuthCallbacks = 3000 }; -enum { k_iClientNetworkDeviceManagerCallbacks = 3100 }; -enum { k_iClientMusicCallbacks = 3200 }; -enum { k_iClientRemoteClientManagerCallbacks = 3300 }; -enum { k_iClientUGCCallbacks = 3400 }; -enum { k_iSteamStreamClientCallbacks = 3500 }; -enum { k_IClientProductBuilderCallbacks = 3600 }; -enum { k_iClientShortcutsCallbacks = 3700 }; -enum { k_iClientRemoteControlManagerCallbacks = 3800 }; -enum { k_iSteamAppListCallbacks = 3900 }; -enum { k_iSteamMusicCallbacks = 4000 }; -enum { k_iSteamMusicRemoteCallbacks = 4100 }; -enum { k_iClientVRCallbacks = 4200 }; -enum { k_iClientGameNotificationCallbacks = 4300 }; -enum { k_iSteamGameNotificationCallbacks = 4400 }; -enum { k_iSteamHTMLSurfaceCallbacks = 4500 }; -enum { k_iClientVideoCallbacks = 4600 }; -enum { k_iClientInventoryCallbacks = 4700 }; -enum { k_iClientBluetoothManagerCallbacks = 4800 }; -enum { k_iClientSharedConnectionCallbacks = 4900 }; -enum { k_ISteamParentalSettingsCallbacks = 5000 }; -enum { k_iClientShaderCallbacks = 5100 }; - -//----------------------------------------------------------------------------- -// The CALLBACK macros are for client side callback logging enabled with -// log_callback -// Do not change any of these. -//----------------------------------------------------------------------------- - -#ifdef STEAM_CALLBACK_INSPECTION_ENABLED - -#define DEFINE_CALLBACK( callbackname, callbackid ) \ -struct callbackname { \ - typedef callbackname SteamCallback_t; \ - enum { k_iCallback = callbackid }; \ - static callbackname *GetNullPointer() { return 0; } \ - static const char *GetCallbackName() { return #callbackname; } \ - static uint32 GetCallbackID() { return callbackname::k_iCallback; } - -#define CALLBACK_MEMBER( varidx, vartype, varname ) \ - public: vartype varname ; \ - static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \ - varOffset = (unsigned int)(size_t)&GetNullPointer()->varname; \ - varSize = sizeof( vartype ); \ - varCount = 1; \ - *pszName = #varname; *pszType = #vartype; } - -#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) \ - public: vartype varname [ varcount ]; \ - static void GetMemberVar_##varidx( unsigned int &varOffset, unsigned int &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \ - varOffset = (unsigned int)(size_t)&GetNullPointer()->varname[0]; \ - varSize = sizeof( vartype ); \ - varCount = varcount; \ - *pszName = #varname; *pszType = #vartype; } - - -#define END_CALLBACK_INTERNAL_BEGIN( numvars ) \ - static uint32 GetNumMemberVariables() { return numvars; } \ - static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { \ - switch ( index ) { default : return false; - - -#define END_CALLBACK_INTERNAL_SWITCH( varidx ) case varidx : GetMemberVar_##varidx( varOffset, varSize, varCount, pszName, pszType ); return true; - -#define END_CALLBACK_INTERNAL_END() }; } }; - -#define END_DEFINE_CALLBACK_0() \ - static uint32 GetNumMemberVariables() { return 0; } \ - static bool GetMemberVariable( uint32 index, uint32 &varOffset, uint32 &varSize, uint32 &varCount, const char **pszName, const char **pszType ) { REFERENCE( pszType ); REFERENCE( pszName ); REFERENCE( varCount ); REFERENCE( varSize ); REFERENCE( varOffset ); REFERENCE( index ); return false; } \ - }; - -#else - -#define DEFINE_CALLBACK( callbackname, callbackid ) struct callbackname { typedef callbackname SteamCallback_t; enum { k_iCallback = callbackid }; -#define CALLBACK_MEMBER( varidx, vartype, varname ) public: vartype varname ; -#define CALLBACK_ARRAY( varidx, vartype, varname, varcount ) public: vartype varname [ varcount ]; -#define END_CALLBACK_INTERNAL_BEGIN( numvars ) -#define END_CALLBACK_INTERNAL_SWITCH( varidx ) -#define END_CALLBACK_INTERNAL_END() }; -#define END_DEFINE_CALLBACK_0() }; - -#endif - -#define END_DEFINE_CALLBACK_1() \ - END_CALLBACK_INTERNAL_BEGIN( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_2() \ - END_CALLBACK_INTERNAL_BEGIN( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_3() \ - END_CALLBACK_INTERNAL_BEGIN( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_4() \ - END_CALLBACK_INTERNAL_BEGIN( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_5() \ - END_CALLBACK_INTERNAL_BEGIN( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_END() - - -#define END_DEFINE_CALLBACK_6() \ - END_CALLBACK_INTERNAL_BEGIN( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_7() \ - END_CALLBACK_INTERNAL_BEGIN( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_8() \ - END_CALLBACK_INTERNAL_BEGIN( 8 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_9() \ - END_CALLBACK_INTERNAL_BEGIN( 9 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 8 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_10() \ - END_CALLBACK_INTERNAL_BEGIN( 10 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 8 ) \ - END_CALLBACK_INTERNAL_SWITCH( 9 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_11() \ - END_CALLBACK_INTERNAL_BEGIN( 11 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 8 ) \ - END_CALLBACK_INTERNAL_SWITCH( 9 ) \ - END_CALLBACK_INTERNAL_SWITCH( 10 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_12() \ - END_CALLBACK_INTERNAL_BEGIN( 12 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 8 ) \ - END_CALLBACK_INTERNAL_SWITCH( 9 ) \ - END_CALLBACK_INTERNAL_SWITCH( 10 ) \ - END_CALLBACK_INTERNAL_SWITCH( 11 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_13() \ - END_CALLBACK_INTERNAL_BEGIN( 13 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 8 ) \ - END_CALLBACK_INTERNAL_SWITCH( 9 ) \ - END_CALLBACK_INTERNAL_SWITCH( 10 ) \ - END_CALLBACK_INTERNAL_SWITCH( 11 ) \ - END_CALLBACK_INTERNAL_SWITCH( 12 ) \ - END_CALLBACK_INTERNAL_END() - -#define END_DEFINE_CALLBACK_14() \ - END_CALLBACK_INTERNAL_BEGIN( 14 ) \ - END_CALLBACK_INTERNAL_SWITCH( 0 ) \ - END_CALLBACK_INTERNAL_SWITCH( 1 ) \ - END_CALLBACK_INTERNAL_SWITCH( 2 ) \ - END_CALLBACK_INTERNAL_SWITCH( 3 ) \ - END_CALLBACK_INTERNAL_SWITCH( 4 ) \ - END_CALLBACK_INTERNAL_SWITCH( 5 ) \ - END_CALLBACK_INTERNAL_SWITCH( 6 ) \ - END_CALLBACK_INTERNAL_SWITCH( 7 ) \ - END_CALLBACK_INTERNAL_SWITCH( 8 ) \ - END_CALLBACK_INTERNAL_SWITCH( 9 ) \ - END_CALLBACK_INTERNAL_SWITCH( 10 ) \ - END_CALLBACK_INTERNAL_SWITCH( 11 ) \ - END_CALLBACK_INTERNAL_SWITCH( 12 ) \ - END_CALLBACK_INTERNAL_SWITCH( 13 ) \ - END_CALLBACK_INTERNAL_END() - -#endif // ISTEAMCLIENT_H diff --git a/ScreenPlay/ThirdParty/steam/isteamcontroller.h b/ScreenPlay/ThirdParty/steam/isteamcontroller.h deleted file mode 100644 index 6f31b750..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamcontroller.h +++ /dev/null @@ -1,461 +0,0 @@ -//====== Copyright 1996-2013, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to valve controller -// -//============================================================================= - -#ifndef ISTEAMCONTROLLER_H -#define ISTEAMCONTROLLER_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -#define STEAM_CONTROLLER_MAX_COUNT 16 - -#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16 - -#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128 - -#define STEAM_CONTROLLER_MAX_ORIGINS 8 - -// When sending an option to a specific controller handle, you can send to all controllers via this command -#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX - -#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f -#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f - -enum ESteamControllerPad -{ - k_ESteamControllerPad_Left, - k_ESteamControllerPad_Right -}; - -enum EControllerSource -{ - k_EControllerSource_None, - k_EControllerSource_LeftTrackpad, - k_EControllerSource_RightTrackpad, - k_EControllerSource_Joystick, - k_EControllerSource_ABXY, - k_EControllerSource_Switch, - k_EControllerSource_LeftTrigger, - k_EControllerSource_RightTrigger, - k_EControllerSource_Gyro, - k_EControllerSource_CenterTrackpad, // PS4 - k_EControllerSource_RightJoystick, // Traditional Controllers - k_EControllerSource_DPad, // Traditional Controllers - k_EControllerSource_Key, // Keyboards with scan codes - k_EControllerSource_Mouse, // Traditional mouse - k_EControllerSource_Count -}; - -enum EControllerSourceMode -{ - k_EControllerSourceMode_None, - k_EControllerSourceMode_Dpad, - k_EControllerSourceMode_Buttons, - k_EControllerSourceMode_FourButtons, - k_EControllerSourceMode_AbsoluteMouse, - k_EControllerSourceMode_RelativeMouse, - k_EControllerSourceMode_JoystickMove, - k_EControllerSourceMode_JoystickMouse, - k_EControllerSourceMode_JoystickCamera, - k_EControllerSourceMode_ScrollWheel, - k_EControllerSourceMode_Trigger, - k_EControllerSourceMode_TouchMenu, - k_EControllerSourceMode_MouseJoystick, - k_EControllerSourceMode_MouseRegion, - k_EControllerSourceMode_RadialMenu, - k_EControllerSourceMode_SingleButton, - k_EControllerSourceMode_Switches -}; - -enum EControllerActionOrigin -{ - // Steam Controller - k_EControllerActionOrigin_None, - k_EControllerActionOrigin_A, - k_EControllerActionOrigin_B, - k_EControllerActionOrigin_X, - k_EControllerActionOrigin_Y, - k_EControllerActionOrigin_LeftBumper, - k_EControllerActionOrigin_RightBumper, - k_EControllerActionOrigin_LeftGrip, - k_EControllerActionOrigin_RightGrip, - k_EControllerActionOrigin_Start, - k_EControllerActionOrigin_Back, - k_EControllerActionOrigin_LeftPad_Touch, - k_EControllerActionOrigin_LeftPad_Swipe, - k_EControllerActionOrigin_LeftPad_Click, - k_EControllerActionOrigin_LeftPad_DPadNorth, - k_EControllerActionOrigin_LeftPad_DPadSouth, - k_EControllerActionOrigin_LeftPad_DPadWest, - k_EControllerActionOrigin_LeftPad_DPadEast, - k_EControllerActionOrigin_RightPad_Touch, - k_EControllerActionOrigin_RightPad_Swipe, - k_EControllerActionOrigin_RightPad_Click, - k_EControllerActionOrigin_RightPad_DPadNorth, - k_EControllerActionOrigin_RightPad_DPadSouth, - k_EControllerActionOrigin_RightPad_DPadWest, - k_EControllerActionOrigin_RightPad_DPadEast, - k_EControllerActionOrigin_LeftTrigger_Pull, - k_EControllerActionOrigin_LeftTrigger_Click, - k_EControllerActionOrigin_RightTrigger_Pull, - k_EControllerActionOrigin_RightTrigger_Click, - k_EControllerActionOrigin_LeftStick_Move, - k_EControllerActionOrigin_LeftStick_Click, - k_EControllerActionOrigin_LeftStick_DPadNorth, - k_EControllerActionOrigin_LeftStick_DPadSouth, - k_EControllerActionOrigin_LeftStick_DPadWest, - k_EControllerActionOrigin_LeftStick_DPadEast, - k_EControllerActionOrigin_Gyro_Move, - k_EControllerActionOrigin_Gyro_Pitch, - k_EControllerActionOrigin_Gyro_Yaw, - k_EControllerActionOrigin_Gyro_Roll, - - // PS4 Dual Shock - k_EControllerActionOrigin_PS4_X, - k_EControllerActionOrigin_PS4_Circle, - k_EControllerActionOrigin_PS4_Triangle, - k_EControllerActionOrigin_PS4_Square, - k_EControllerActionOrigin_PS4_LeftBumper, - k_EControllerActionOrigin_PS4_RightBumper, - k_EControllerActionOrigin_PS4_Options, //Start - k_EControllerActionOrigin_PS4_Share, //Back - k_EControllerActionOrigin_PS4_LeftPad_Touch, - k_EControllerActionOrigin_PS4_LeftPad_Swipe, - k_EControllerActionOrigin_PS4_LeftPad_Click, - k_EControllerActionOrigin_PS4_LeftPad_DPadNorth, - k_EControllerActionOrigin_PS4_LeftPad_DPadSouth, - k_EControllerActionOrigin_PS4_LeftPad_DPadWest, - k_EControllerActionOrigin_PS4_LeftPad_DPadEast, - k_EControllerActionOrigin_PS4_RightPad_Touch, - k_EControllerActionOrigin_PS4_RightPad_Swipe, - k_EControllerActionOrigin_PS4_RightPad_Click, - k_EControllerActionOrigin_PS4_RightPad_DPadNorth, - k_EControllerActionOrigin_PS4_RightPad_DPadSouth, - k_EControllerActionOrigin_PS4_RightPad_DPadWest, - k_EControllerActionOrigin_PS4_RightPad_DPadEast, - k_EControllerActionOrigin_PS4_CenterPad_Touch, - k_EControllerActionOrigin_PS4_CenterPad_Swipe, - k_EControllerActionOrigin_PS4_CenterPad_Click, - k_EControllerActionOrigin_PS4_CenterPad_DPadNorth, - k_EControllerActionOrigin_PS4_CenterPad_DPadSouth, - k_EControllerActionOrigin_PS4_CenterPad_DPadWest, - k_EControllerActionOrigin_PS4_CenterPad_DPadEast, - k_EControllerActionOrigin_PS4_LeftTrigger_Pull, - k_EControllerActionOrigin_PS4_LeftTrigger_Click, - k_EControllerActionOrigin_PS4_RightTrigger_Pull, - k_EControllerActionOrigin_PS4_RightTrigger_Click, - k_EControllerActionOrigin_PS4_LeftStick_Move, - k_EControllerActionOrigin_PS4_LeftStick_Click, - k_EControllerActionOrigin_PS4_LeftStick_DPadNorth, - k_EControllerActionOrigin_PS4_LeftStick_DPadSouth, - k_EControllerActionOrigin_PS4_LeftStick_DPadWest, - k_EControllerActionOrigin_PS4_LeftStick_DPadEast, - k_EControllerActionOrigin_PS4_RightStick_Move, - k_EControllerActionOrigin_PS4_RightStick_Click, - k_EControllerActionOrigin_PS4_RightStick_DPadNorth, - k_EControllerActionOrigin_PS4_RightStick_DPadSouth, - k_EControllerActionOrigin_PS4_RightStick_DPadWest, - k_EControllerActionOrigin_PS4_RightStick_DPadEast, - k_EControllerActionOrigin_PS4_DPad_North, - k_EControllerActionOrigin_PS4_DPad_South, - k_EControllerActionOrigin_PS4_DPad_West, - k_EControllerActionOrigin_PS4_DPad_East, - k_EControllerActionOrigin_PS4_Gyro_Move, - k_EControllerActionOrigin_PS4_Gyro_Pitch, - k_EControllerActionOrigin_PS4_Gyro_Yaw, - k_EControllerActionOrigin_PS4_Gyro_Roll, - - // XBox One - k_EControllerActionOrigin_XBoxOne_A, - k_EControllerActionOrigin_XBoxOne_B, - k_EControllerActionOrigin_XBoxOne_X, - k_EControllerActionOrigin_XBoxOne_Y, - k_EControllerActionOrigin_XBoxOne_LeftBumper, - k_EControllerActionOrigin_XBoxOne_RightBumper, - k_EControllerActionOrigin_XBoxOne_Menu, //Start - k_EControllerActionOrigin_XBoxOne_View, //Back - k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull, - k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click, - k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull, - k_EControllerActionOrigin_XBoxOne_RightTrigger_Click, - k_EControllerActionOrigin_XBoxOne_LeftStick_Move, - k_EControllerActionOrigin_XBoxOne_LeftStick_Click, - k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth, - k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth, - k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest, - k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast, - k_EControllerActionOrigin_XBoxOne_RightStick_Move, - k_EControllerActionOrigin_XBoxOne_RightStick_Click, - k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth, - k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth, - k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest, - k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast, - k_EControllerActionOrigin_XBoxOne_DPad_North, - k_EControllerActionOrigin_XBoxOne_DPad_South, - k_EControllerActionOrigin_XBoxOne_DPad_West, - k_EControllerActionOrigin_XBoxOne_DPad_East, - - // XBox 360 - k_EControllerActionOrigin_XBox360_A, - k_EControllerActionOrigin_XBox360_B, - k_EControllerActionOrigin_XBox360_X, - k_EControllerActionOrigin_XBox360_Y, - k_EControllerActionOrigin_XBox360_LeftBumper, - k_EControllerActionOrigin_XBox360_RightBumper, - k_EControllerActionOrigin_XBox360_Start, //Start - k_EControllerActionOrigin_XBox360_Back, //Back - k_EControllerActionOrigin_XBox360_LeftTrigger_Pull, - k_EControllerActionOrigin_XBox360_LeftTrigger_Click, - k_EControllerActionOrigin_XBox360_RightTrigger_Pull, - k_EControllerActionOrigin_XBox360_RightTrigger_Click, - k_EControllerActionOrigin_XBox360_LeftStick_Move, - k_EControllerActionOrigin_XBox360_LeftStick_Click, - k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth, - k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth, - k_EControllerActionOrigin_XBox360_LeftStick_DPadWest, - k_EControllerActionOrigin_XBox360_LeftStick_DPadEast, - k_EControllerActionOrigin_XBox360_RightStick_Move, - k_EControllerActionOrigin_XBox360_RightStick_Click, - k_EControllerActionOrigin_XBox360_RightStick_DPadNorth, - k_EControllerActionOrigin_XBox360_RightStick_DPadSouth, - k_EControllerActionOrigin_XBox360_RightStick_DPadWest, - k_EControllerActionOrigin_XBox360_RightStick_DPadEast, - k_EControllerActionOrigin_XBox360_DPad_North, - k_EControllerActionOrigin_XBox360_DPad_South, - k_EControllerActionOrigin_XBox360_DPad_West, - k_EControllerActionOrigin_XBox360_DPad_East, - - // SteamController V2 - k_EControllerActionOrigin_SteamV2_A, - k_EControllerActionOrigin_SteamV2_B, - k_EControllerActionOrigin_SteamV2_X, - k_EControllerActionOrigin_SteamV2_Y, - k_EControllerActionOrigin_SteamV2_LeftBumper, - k_EControllerActionOrigin_SteamV2_RightBumper, - k_EControllerActionOrigin_SteamV2_LeftGrip, - k_EControllerActionOrigin_SteamV2_RightGrip, - k_EControllerActionOrigin_SteamV2_LeftGrip_Upper, - k_EControllerActionOrigin_SteamV2_RightGrip_Upper, - k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure, - k_EControllerActionOrigin_SteamV2_RightBumper_Pressure, - k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure, - k_EControllerActionOrigin_SteamV2_RightGrip_Pressure, - k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure, - k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure, - k_EControllerActionOrigin_SteamV2_Start, - k_EControllerActionOrigin_SteamV2_Back, - k_EControllerActionOrigin_SteamV2_LeftPad_Touch, - k_EControllerActionOrigin_SteamV2_LeftPad_Swipe, - k_EControllerActionOrigin_SteamV2_LeftPad_Click, - k_EControllerActionOrigin_SteamV2_LeftPad_Pressure, - k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth, - k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth, - k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest, - k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast, - k_EControllerActionOrigin_SteamV2_RightPad_Touch, - k_EControllerActionOrigin_SteamV2_RightPad_Swipe, - k_EControllerActionOrigin_SteamV2_RightPad_Click, - k_EControllerActionOrigin_SteamV2_RightPad_Pressure, - k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth, - k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth, - k_EControllerActionOrigin_SteamV2_RightPad_DPadWest, - k_EControllerActionOrigin_SteamV2_RightPad_DPadEast, - k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull, - k_EControllerActionOrigin_SteamV2_LeftTrigger_Click, - k_EControllerActionOrigin_SteamV2_RightTrigger_Pull, - k_EControllerActionOrigin_SteamV2_RightTrigger_Click, - k_EControllerActionOrigin_SteamV2_LeftStick_Move, - k_EControllerActionOrigin_SteamV2_LeftStick_Click, - k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth, - k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth, - k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest, - k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast, - k_EControllerActionOrigin_SteamV2_Gyro_Move, - k_EControllerActionOrigin_SteamV2_Gyro_Pitch, - k_EControllerActionOrigin_SteamV2_Gyro_Yaw, - k_EControllerActionOrigin_SteamV2_Gyro_Roll, - - k_EControllerActionOrigin_Count -}; - -enum ESteamControllerLEDFlag -{ - k_ESteamControllerLEDFlag_SetColor, - k_ESteamControllerLEDFlag_RestoreUserDefault -}; - -enum ESteamInputType -{ - k_ESteamInputType_Unknown, - k_ESteamInputType_SteamController, - k_ESteamInputType_XBox360Controller, - k_ESteamInputType_XBoxOneController, - k_ESteamInputType_GenericXInput, - k_ESteamInputType_PS4Controller, -}; - -// ControllerHandle_t is used to refer to a specific controller. -// This handle will consistently identify a controller, even if it is disconnected and re-connected -typedef uint64 ControllerHandle_t; - - -// These handles are used to refer to a specific in-game action or action set -// All action handles should be queried during initialization for performance reasons -typedef uint64 ControllerActionSetHandle_t; -typedef uint64 ControllerDigitalActionHandle_t; -typedef uint64 ControllerAnalogActionHandle_t; - -#pragma pack( push, 1 ) - -struct ControllerAnalogActionData_t -{ - // Type of data coming from this action, this will match what got specified in the action set - EControllerSourceMode eMode; - - // The current state of this action; will be delta updates for mouse actions - float x, y; - - // Whether or not this action is currently available to be bound in the active action set - bool bActive; -}; - -struct ControllerDigitalActionData_t -{ - // The current state of this action; will be true if currently pressed - bool bState; - - // Whether or not this action is currently available to be bound in the active action set - bool bActive; -}; - -struct ControllerMotionData_t -{ - // Sensor-fused absolute rotation; will drift in heading - float rotQuatX; - float rotQuatY; - float rotQuatZ; - float rotQuatW; - - // Positional acceleration - float posAccelX; - float posAccelY; - float posAccelZ; - - // Angular velocity - float rotVelX; - float rotVelY; - float rotVelZ; -}; - -#pragma pack( pop ) - - -//----------------------------------------------------------------------------- -// Purpose: Native Steam controller support API -//----------------------------------------------------------------------------- -class ISteamController -{ -public: - - // Init and Shutdown must be called when starting/ending use of this interface - virtual bool Init() = 0; - virtual bool Shutdown() = 0; - - // Synchronize API state with the latest Steam Controller inputs available. This - // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest - // possible latency, you call this directly before reading controller state. - virtual void RunFrame() = 0; - - // Enumerate currently connected controllers - // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles - // Returns the number of handles written to handlesOut - virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0; - - // Invokes the Steam overlay and brings up the binding screen - // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode - virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0; - - // ACTION SETS - // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls. - virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0; - - // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive') - // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in - // your state loops, instead of trying to place it in all of your state transitions. - virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0; - virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0; - - virtual void ActivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle ) = 0; - virtual void DeactivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle ) = 0; - virtual void DeactivateAllActionSetLayers( ControllerHandle_t controllerHandle ) = 0; - virtual int GetActiveActionSetLayers( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t *handlesOut ) = 0; - - - // ACTIONS - // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls. - virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0; - - // Returns the current state of the supplied digital game action - virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0; - - // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. - // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles - virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0; - - // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls. - virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0; - - // Returns the current state of these supplied analog game action - virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0; - - // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. - // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles - virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0; - - virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0; - - // Trigger a haptic pulse on a controller - virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0; - - // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times. - // nFlags is currently unused and reserved for future use. - virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0; - - // Tigger a vibration event on supported controllers. - virtual void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed ) = 0; - - // Set the controller LED color on supported controllers. - virtual void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0; - - // Returns the associated gamepad index for the specified controller, if emulating a gamepad - virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0; - - // Returns the associated controller handle for the specified emulated gamepad - virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0; - - // Returns raw motion data from the specified controller - virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0; - - // Attempt to display origins of given action in the controller HUD, for the currently active action set - // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode - virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0; - virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0; - - // Returns a localized string (from Steam's language setting) for the specified origin - virtual const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin ) = 0; - - // Get a local path to art for on-screen glyph for a particular origin - virtual const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin ) = 0; - - // Returns the input type for a particular handle - virtual ESteamInputType GetInputTypeForHandle( ControllerHandle_t controllerHandle ) = 0; -}; - -#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController006" - -#endif // ISTEAMCONTROLLER_H diff --git a/ScreenPlay/ThirdParty/steam/isteamfriends.h b/ScreenPlay/ThirdParty/steam/isteamfriends.h deleted file mode 100644 index c1754c26..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamfriends.h +++ /dev/null @@ -1,639 +0,0 @@ -//====== Copyright (C) 1996-2008, Valve Corporation, All rights reserved. ===== -// -// Purpose: interface to both friends list data and general information about users -// -//============================================================================= - -#ifndef ISTEAMFRIENDS_H -#define ISTEAMFRIENDS_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" -#include "steamclientpublic.h" - - -//----------------------------------------------------------------------------- -// Purpose: set of relationships to other users -//----------------------------------------------------------------------------- -enum EFriendRelationship -{ - k_EFriendRelationshipNone = 0, - k_EFriendRelationshipBlocked = 1, // this doesn't get stored; the user has just done an Ignore on an friendship invite - k_EFriendRelationshipRequestRecipient = 2, - k_EFriendRelationshipFriend = 3, - k_EFriendRelationshipRequestInitiator = 4, - k_EFriendRelationshipIgnored = 5, // this is stored; the user has explicit blocked this other user from comments/chat/etc - k_EFriendRelationshipIgnoredFriend = 6, - k_EFriendRelationshipSuggested_DEPRECATED = 7, // was used by the original implementation of the facebook linking feature, but now unused. - - // keep this updated - k_EFriendRelationshipMax = 8, -}; - -// maximum length of friend group name (not including terminating nul!) -const int k_cchMaxFriendsGroupName = 64; - -// maximum number of groups a single user is allowed -const int k_cFriendsGroupLimit = 100; - -// friends group identifier type -typedef int16 FriendsGroupID_t; - -// invalid friends group identifier constant -const FriendsGroupID_t k_FriendsGroupID_Invalid = -1; - -const int k_cEnumerateFollowersMax = 50; - - -//----------------------------------------------------------------------------- -// Purpose: list of states a friend can be in -//----------------------------------------------------------------------------- -enum EPersonaState -{ - k_EPersonaStateOffline = 0, // friend is not currently logged on - k_EPersonaStateOnline = 1, // friend is logged on - k_EPersonaStateBusy = 2, // user is on, but busy - k_EPersonaStateAway = 3, // auto-away feature - k_EPersonaStateSnooze = 4, // auto-away for a long time - k_EPersonaStateLookingToTrade = 5, // Online, trading - k_EPersonaStateLookingToPlay = 6, // Online, wanting to play - k_EPersonaStateMax, -}; - - -//----------------------------------------------------------------------------- -// Purpose: flags for enumerating friends list, or quickly checking a the relationship between users -//----------------------------------------------------------------------------- -enum EFriendFlags -{ - k_EFriendFlagNone = 0x00, - k_EFriendFlagBlocked = 0x01, - k_EFriendFlagFriendshipRequested = 0x02, - k_EFriendFlagImmediate = 0x04, // "regular" friend - k_EFriendFlagClanMember = 0x08, - k_EFriendFlagOnGameServer = 0x10, - // k_EFriendFlagHasPlayedWith = 0x20, // not currently used - // k_EFriendFlagFriendOfFriend = 0x40, // not currently used - k_EFriendFlagRequestingFriendship = 0x80, - k_EFriendFlagRequestingInfo = 0x100, - k_EFriendFlagIgnored = 0x200, - k_EFriendFlagIgnoredFriend = 0x400, - // k_EFriendFlagSuggested = 0x800, // not used - k_EFriendFlagChatMember = 0x1000, - k_EFriendFlagAll = 0xFFFF, -}; - - -// friend game played information -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif -struct FriendGameInfo_t -{ - CGameID m_gameID; - uint32 m_unGameIP; - uint16 m_usGamePort; - uint16 m_usQueryPort; - CSteamID m_steamIDLobby; -}; -#pragma pack( pop ) - -// maximum number of characters in a user's name. Two flavors; one for UTF-8 and one for UTF-16. -// The UTF-8 version has to be very generous to accomodate characters that get large when encoded -// in UTF-8. -enum -{ - k_cchPersonaNameMax = 128, - k_cwchPersonaNameMax = 32, -}; - -//----------------------------------------------------------------------------- -// Purpose: user restriction flags -//----------------------------------------------------------------------------- -enum EUserRestriction -{ - k_nUserRestrictionNone = 0, // no known chat/content restriction - k_nUserRestrictionUnknown = 1, // we don't know yet (user offline) - k_nUserRestrictionAnyChat = 2, // user is not allowed to (or can't) send/recv any chat - k_nUserRestrictionVoiceChat = 4, // user is not allowed to (or can't) send/recv voice chat - k_nUserRestrictionGroupChat = 8, // user is not allowed to (or can't) send/recv group chat - k_nUserRestrictionRating = 16, // user is too young according to rating in current region - k_nUserRestrictionGameInvites = 32, // user cannot send or recv game invites (e.g. mobile) - k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile) -}; - -//----------------------------------------------------------------------------- -// Purpose: information about user sessions -//----------------------------------------------------------------------------- -struct FriendSessionStateInfo_t -{ - uint32 m_uiOnlineSessionInstances; - uint8 m_uiPublishedToFriendsSessionInstance; -}; - - - -// size limit on chat room or member metadata -const uint32 k_cubChatMetadataMax = 8192; - -// size limits on Rich Presence data -enum { k_cchMaxRichPresenceKeys = 20 }; -enum { k_cchMaxRichPresenceKeyLength = 64 }; -enum { k_cchMaxRichPresenceValueLength = 256 }; - -// These values are passed as parameters to the store -enum EOverlayToStoreFlag -{ - k_EOverlayToStoreFlag_None = 0, - k_EOverlayToStoreFlag_AddToCart = 1, - k_EOverlayToStoreFlag_AddToCartAndShow = 2, -}; - -//----------------------------------------------------------------------------- -// Purpose: interface to accessing information about individual users, -// that can be a friend, in a group, on a game server or in a lobby with the local user -//----------------------------------------------------------------------------- -class ISteamFriends -{ -public: - // returns the local players name - guaranteed to not be NULL. - // this is the same name as on the users community profile page - // this is stored in UTF-8 format - // like all the other interface functions that return a char *, it's important that this pointer is not saved - // off; it will eventually be free'd or re-allocated - virtual const char *GetPersonaName() = 0; - - // Sets the player name, stores it on the server and publishes the changes to all friends who are online. - // Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success. - // - // The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t. - // - // If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted - // to change the name back, in addition to the SetPersonaNameResponse_t callback. - CALL_RESULT( SetPersonaNameResponse_t ) - virtual SteamAPICall_t SetPersonaName( const char *pchPersonaName ) = 0; - - // gets the status of the current user - virtual EPersonaState GetPersonaState() = 0; - - // friend iteration - // takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria - // then GetFriendByIndex() can then be used to return the id's of each of those users - virtual int GetFriendCount( int iFriendFlags ) = 0; - - // returns the steamID of a user - // iFriend is a index of range [0, GetFriendCount()) - // iFriendsFlags must be the same value as used in GetFriendCount() - // the returned CSteamID can then be used by all the functions below to access details about the user - virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0; - - // returns a relationship to a user - virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0; - - // returns the current status of the specified user - // this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user - virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0; - - // returns the name another user - guaranteed to not be NULL. - // same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user - // note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously - // - virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0; - - // returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details - virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, OUT_STRUCT() FriendGameInfo_t *pFriendGameInfo ) = 0; - // accesses old friends names - returns an empty string when their are no more items in the history - virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0; - // friends steam level - virtual int GetFriendSteamLevel( CSteamID steamIDFriend ) = 0; - - // Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player. - virtual const char *GetPlayerNickname( CSteamID steamIDPlayer ) = 0; - - // friend grouping (tag) apis - // returns the number of friends groups - virtual int GetFriendsGroupCount() = 0; - // returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid) - virtual FriendsGroupID_t GetFriendsGroupIDByIndex( int iFG ) = 0; - // returns the name for the given friends group (NULL in the case of invalid friends group IDs) - virtual const char *GetFriendsGroupName( FriendsGroupID_t friendsGroupID ) = 0; - // returns the number of members in a given friends group - virtual int GetFriendsGroupMembersCount( FriendsGroupID_t friendsGroupID ) = 0; - // gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid - virtual void GetFriendsGroupMembersList( FriendsGroupID_t friendsGroupID, OUT_ARRAY_CALL(nMembersCount, GetFriendsGroupMembersCount, friendsGroupID ) CSteamID *pOutSteamIDMembers, int nMembersCount ) = 0; - - // returns true if the specified user meets any of the criteria specified in iFriendFlags - // iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values - virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0; - - // clan (group) iteration and access functions - virtual int GetClanCount() = 0; - virtual CSteamID GetClanByIndex( int iClan ) = 0; - virtual const char *GetClanName( CSteamID steamIDClan ) = 0; - virtual const char *GetClanTag( CSteamID steamIDClan ) = 0; - // returns the most recent information we have about what's happening in a clan - virtual bool GetClanActivityCounts( CSteamID steamIDClan, int *pnOnline, int *pnInGame, int *pnChatting ) = 0; - // for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest - virtual SteamAPICall_t DownloadClanActivityCounts( ARRAY_COUNT(cClansToRequest) CSteamID *psteamIDClans, int cClansToRequest ) = 0; - - // iterators for getting users in a chat room, lobby, game server or clan - // note that large clans that cannot be iterated by the local user - // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby - // steamIDSource can be the steamID of a group, game server, lobby or chat room - virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0; - virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0; - - // returns true if the local user can see that steamIDUser is a member or in steamIDSource - virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0; - - // User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI) - virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0; - - // activates the game overlay, with an optional dialog to open - // valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements" - virtual void ActivateGameOverlay( const char *pchDialog ) = 0; - - // activates game overlay to a specific place - // valid options are - // "steamid" - opens the overlay web browser to the specified user or groups profile - // "chat" - opens a chat window to the specified user, or joins the group chat - // "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API - // "stats" - opens the overlay web browser to the specified user's stats - // "achievements" - opens the overlay web browser to the specified user's achievements - // "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend - // "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend - // "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite - // "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite - virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0; - - // activates game overlay web browser directly to the specified URL - // full address with protocol type is required, e.g. http://www.steamgames.com/ - virtual void ActivateGameOverlayToWebPage( const char *pchURL ) = 0; - - // activates game overlay to store page for app - virtual void ActivateGameOverlayToStore( AppId_t nAppID, EOverlayToStoreFlag eFlag ) = 0; - - // Mark a target user as 'played with'. This is a client-side only feature that requires that the calling user is - // in game - virtual void SetPlayedWith( CSteamID steamIDUserPlayedWith ) = 0; - - // activates game overlay to open the invite dialog. Invitations will be sent for the provided lobby. - virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0; - - // gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set - virtual int GetSmallFriendAvatar( CSteamID steamIDFriend ) = 0; - - // gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set - virtual int GetMediumFriendAvatar( CSteamID steamIDFriend ) = 0; - - // gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set - // returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again - virtual int GetLargeFriendAvatar( CSteamID steamIDFriend ) = 0; - - // requests information about a user - persona name & avatar - // if bRequireNameOnly is set, then the avatar of a user isn't downloaded - // - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them - // if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved - // if returns false, it means that we already have all the details about that user, and functions can be called immediately - virtual bool RequestUserInformation( CSteamID steamIDUser, bool bRequireNameOnly ) = 0; - - // requests information about a clan officer list - // when complete, data is returned in ClanOfficerListResponse_t call result - // this makes available the calls below - // you can only ask about clans that a user is a member of - // note that this won't download avatars automatically; if you get an officer, - // and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar - CALL_RESULT( ClanOfficerListResponse_t ) - virtual SteamAPICall_t RequestClanOfficerList( CSteamID steamIDClan ) = 0; - - // iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed - - // returns the steamID of the clan owner - virtual CSteamID GetClanOwner( CSteamID steamIDClan ) = 0; - // returns the number of officers in a clan (including the owner) - virtual int GetClanOfficerCount( CSteamID steamIDClan ) = 0; - // returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount) - virtual CSteamID GetClanOfficerByIndex( CSteamID steamIDClan, int iOfficer ) = 0; - // if current user is chat restricted, he can't send or receive any text/voice chat messages. - // the user can't see custom avatars. But the user can be online and send/recv game invites. - // a chat restricted user can't add friends or join any groups. - virtual uint32 GetUserRestrictions() = 0; - - // Rich Presence data is automatically shared between friends who are in the same game - // Each user has a set of Key/Value pairs - // Note the following limits: k_cchMaxRichPresenceKeys, k_cchMaxRichPresenceKeyLength, k_cchMaxRichPresenceValueLength - // There are two magic keys: - // "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list - // "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game - // GetFriendRichPresence() returns an empty string "" if no value is set - // SetRichPresence() to a NULL or an empty string deletes the key - // You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount() - // and GetFriendRichPresenceKeyByIndex() (typically only used for debugging) - virtual bool SetRichPresence( const char *pchKey, const char *pchValue ) = 0; - virtual void ClearRichPresence() = 0; - virtual const char *GetFriendRichPresence( CSteamID steamIDFriend, const char *pchKey ) = 0; - virtual int GetFriendRichPresenceKeyCount( CSteamID steamIDFriend ) = 0; - virtual const char *GetFriendRichPresenceKeyByIndex( CSteamID steamIDFriend, int iKey ) = 0; - // Requests rich presence for a specific user. - virtual void RequestFriendRichPresence( CSteamID steamIDFriend ) = 0; - - // rich invite support - // if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game - // if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string - // invites can only be sent to friends - virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0; - - // recently-played-with friends iteration - // this iterates the entire list of users recently played with, across games - // GetFriendCoplayTime() returns as a unix time - virtual int GetCoplayFriendCount() = 0; - virtual CSteamID GetCoplayFriend( int iCoplayFriend ) = 0; - virtual int GetFriendCoplayTime( CSteamID steamIDFriend ) = 0; - virtual AppId_t GetFriendCoplayGame( CSteamID steamIDFriend ) = 0; - - // chat interface for games - // this allows in-game access to group (clan) chats from in the game - // the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay - // use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat - CALL_RESULT( JoinClanChatRoomCompletionResult_t ) - virtual SteamAPICall_t JoinClanChatRoom( CSteamID steamIDClan ) = 0; - virtual bool LeaveClanChatRoom( CSteamID steamIDClan ) = 0; - virtual int GetClanChatMemberCount( CSteamID steamIDClan ) = 0; - virtual CSteamID GetChatMemberByIndex( CSteamID steamIDClan, int iUser ) = 0; - virtual bool SendClanChatMessage( CSteamID steamIDClanChat, const char *pchText ) = 0; - virtual int GetClanChatMessage( CSteamID steamIDClanChat, int iMessage, void *prgchText, int cchTextMax, EChatEntryType *peChatEntryType, OUT_STRUCT() CSteamID *psteamidChatter ) = 0; - virtual bool IsClanChatAdmin( CSteamID steamIDClanChat, CSteamID steamIDUser ) = 0; - - // interact with the Steam (game overlay / desktop) - virtual bool IsClanChatWindowOpenInSteam( CSteamID steamIDClanChat ) = 0; - virtual bool OpenClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0; - virtual bool CloseClanChatWindowInSteam( CSteamID steamIDClanChat ) = 0; - - // peer-to-peer chat interception - // this is so you can show P2P chats inline in the game - virtual bool SetListenForFriendsMessages( bool bInterceptEnabled ) = 0; - virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0; - virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0; - - // following apis - CALL_RESULT( FriendsGetFollowerCount_t ) - virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0; - CALL_RESULT( FriendsIsFollowing_t ) - virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0; - CALL_RESULT( FriendsEnumerateFollowingList_t ) - virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0; - - virtual bool IsClanPublic( CSteamID steamIDClan ) = 0; - virtual bool IsClanOfficialGameGroup( CSteamID steamIDClan ) = 0; -}; - -#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends015" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: called when a friends' status changes -//----------------------------------------------------------------------------- -struct PersonaStateChange_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 4 }; - - uint64 m_ulSteamID; // steamID of the friend who changed - int m_nChangeFlags; // what's changed -}; - - -// used in PersonaStateChange_t::m_nChangeFlags to describe what's changed about a user -// these flags describe what the client has learned has changed recently, so on startup you'll see a name, avatar & relationship change for every friend -enum EPersonaChange -{ - k_EPersonaChangeName = 0x0001, - k_EPersonaChangeStatus = 0x0002, - k_EPersonaChangeComeOnline = 0x0004, - k_EPersonaChangeGoneOffline = 0x0008, - k_EPersonaChangeGamePlayed = 0x0010, - k_EPersonaChangeGameServer = 0x0020, - k_EPersonaChangeAvatar = 0x0040, - k_EPersonaChangeJoinedSource= 0x0080, - k_EPersonaChangeLeftSource = 0x0100, - k_EPersonaChangeRelationshipChanged = 0x0200, - k_EPersonaChangeNameFirstSet = 0x0400, - k_EPersonaChangeFacebookInfo = 0x0800, - k_EPersonaChangeNickname = 0x1000, - k_EPersonaChangeSteamLevel = 0x2000, -}; - - -//----------------------------------------------------------------------------- -// Purpose: posted when game overlay activates or deactivates -// the game can use this to be pause or resume single player games -//----------------------------------------------------------------------------- -struct GameOverlayActivated_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 31 }; - uint8 m_bActive; // true if it's just been activated, false otherwise -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when the user tries to join a different game server from their friends list -// game client should attempt to connect to specified server when this is received -//----------------------------------------------------------------------------- -struct GameServerChangeRequested_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 32 }; - char m_rgchServer[64]; // server address ("127.0.0.1:27015", "tf2.valvesoftware.com") - char m_rgchPassword[64]; // server password, if any -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when the user tries to join a lobby from their friends list -// game client should attempt to connect to specified lobby when this is received -//----------------------------------------------------------------------------- -struct GameLobbyJoinRequested_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 33 }; - CSteamID m_steamIDLobby; - - // The friend they did the join via (will be invalid if not directly via a friend) - // - // On PS3, the friend will be invalid if this was triggered by a PSN invite via the XMB, but - // the account type will be console user so you can tell at least that this was from a PSN friend - // rather than a Steam friend. - CSteamID m_steamIDFriend; -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when an avatar is loaded in from a previous GetLargeFriendAvatar() call -// if the image wasn't already available -//----------------------------------------------------------------------------- -struct AvatarImageLoaded_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 34 }; - CSteamID m_steamID; // steamid the avatar has been loaded for - int m_iImage; // the image index of the now loaded image - int m_iWide; // width of the loaded image - int m_iTall; // height of the loaded image -}; - - -//----------------------------------------------------------------------------- -// Purpose: marks the return of a request officer list call -//----------------------------------------------------------------------------- -struct ClanOfficerListResponse_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 35 }; - CSteamID m_steamIDClan; - int m_cOfficers; - uint8 m_bSuccess; -}; - - -//----------------------------------------------------------------------------- -// Purpose: callback indicating updated data about friends rich presence information -//----------------------------------------------------------------------------- -struct FriendRichPresenceUpdate_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 36 }; - CSteamID m_steamIDFriend; // friend who's rich presence has changed - AppId_t m_nAppID; // the appID of the game (should always be the current game) -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when the user tries to join a game from their friends list -// rich presence will have been set with the "connect" key which is set here -//----------------------------------------------------------------------------- -struct GameRichPresenceJoinRequested_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 37 }; - CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend) - char m_rgchConnect[k_cchMaxRichPresenceValueLength]; -}; - - -//----------------------------------------------------------------------------- -// Purpose: a chat message has been received for a clan chat the game has joined -//----------------------------------------------------------------------------- -struct GameConnectedClanChatMsg_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 38 }; - CSteamID m_steamIDClanChat; - CSteamID m_steamIDUser; - int m_iMessageID; -}; - - -//----------------------------------------------------------------------------- -// Purpose: a user has joined a clan chat -//----------------------------------------------------------------------------- -struct GameConnectedChatJoin_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 39 }; - CSteamID m_steamIDClanChat; - CSteamID m_steamIDUser; -}; - - -//----------------------------------------------------------------------------- -// Purpose: a user has left the chat we're in -//----------------------------------------------------------------------------- -struct GameConnectedChatLeave_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 40 }; - CSteamID m_steamIDClanChat; - CSteamID m_steamIDUser; - bool m_bKicked; // true if admin kicked - bool m_bDropped; // true if Steam connection dropped -}; - - -//----------------------------------------------------------------------------- -// Purpose: a DownloadClanActivityCounts() call has finished -//----------------------------------------------------------------------------- -struct DownloadClanActivityCountsResult_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 41 }; - bool m_bSuccess; -}; - - -//----------------------------------------------------------------------------- -// Purpose: a JoinClanChatRoom() call has finished -//----------------------------------------------------------------------------- -struct JoinClanChatRoomCompletionResult_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 42 }; - CSteamID m_steamIDClanChat; - EChatRoomEnterResponse m_eChatRoomEnterResponse; -}; - -//----------------------------------------------------------------------------- -// Purpose: a chat message has been received from a user -//----------------------------------------------------------------------------- -struct GameConnectedFriendChatMsg_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 43 }; - CSteamID m_steamIDUser; - int m_iMessageID; -}; - - -struct FriendsGetFollowerCount_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 44 }; - EResult m_eResult; - CSteamID m_steamID; - int m_nCount; -}; - - -struct FriendsIsFollowing_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 45 }; - EResult m_eResult; - CSteamID m_steamID; - bool m_bIsFollowing; -}; - - -struct FriendsEnumerateFollowingList_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 46 }; - EResult m_eResult; - CSteamID m_rgSteamID[ k_cEnumerateFollowersMax ]; - int32 m_nResultsReturned; - int32 m_nTotalResultCount; -}; - -//----------------------------------------------------------------------------- -// Purpose: reports the result of an attempt to change the user's persona name -//----------------------------------------------------------------------------- -struct SetPersonaNameResponse_t -{ - enum { k_iCallback = k_iSteamFriendsCallbacks + 47 }; - - bool m_bSuccess; // true if name change succeeded completely. - bool m_bLocalSuccess; // true if name change was retained locally. (We might not have been able to communicate with Steam) - EResult m_result; // detailed result code -}; - - -#pragma pack( pop ) - -#endif // ISTEAMFRIENDS_H diff --git a/ScreenPlay/ThirdParty/steam/isteamgamecoordinator.h b/ScreenPlay/ThirdParty/steam/isteamgamecoordinator.h deleted file mode 100644 index 5ab0637f..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamgamecoordinator.h +++ /dev/null @@ -1,75 +0,0 @@ -//====== Copyright ©, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to the game coordinator for this application -// -//============================================================================= - -#ifndef ISTEAMGAMECOORDINATOR -#define ISTEAMGAMECOORDINATOR -#ifdef _WIN32 -#pragma once -#endif - -#include "steamtypes.h" -#include "steamclientpublic.h" - - -// list of possible return values from the ISteamGameCoordinator API -enum EGCResults -{ - k_EGCResultOK = 0, - k_EGCResultNoMessage = 1, // There is no message in the queue - k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message - k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam - k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage -}; - - -//----------------------------------------------------------------------------- -// Purpose: Functions for sending and receiving messages from the Game Coordinator -// for this application -//----------------------------------------------------------------------------- -class ISteamGameCoordinator -{ -public: - - // sends a message to the Game Coordinator - virtual EGCResults SendMessage( uint32 unMsgType, const void *pubData, uint32 cubData ) = 0; - - // returns true if there is a message waiting from the game coordinator - virtual bool IsMessageAvailable( uint32 *pcubMsgSize ) = 0; - - // fills the provided buffer with the first message in the queue and returns k_EGCResultOK or - // returns k_EGCResultNoMessage if there is no message waiting. pcubMsgSize is filled with the message size. - // If the provided buffer is not large enough to fit the entire message, k_EGCResultBufferTooSmall is returned - // and the message remains at the head of the queue. - virtual EGCResults RetrieveMessage( uint32 *punMsgType, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0; - -}; -#define STEAMGAMECOORDINATOR_INTERFACE_VERSION "SteamGameCoordinator001" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -// callback notification - A new message is available for reading from the message queue -struct GCMessageAvailable_t -{ - enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 1 }; - uint32 m_nMessageSize; -}; - -// callback notification - A message failed to make it to the GC. It may be down temporarily -struct GCMessageFailed_t -{ - enum { k_iCallback = k_iSteamGameCoordinatorCallbacks + 2 }; -}; - -#pragma pack( pop ) - -#endif // ISTEAMGAMECOORDINATOR diff --git a/ScreenPlay/ThirdParty/steam/isteamgameserver.h b/ScreenPlay/ThirdParty/steam/isteamgameserver.h deleted file mode 100644 index e19f1dda..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamgameserver.h +++ /dev/null @@ -1,387 +0,0 @@ -//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to steam for game servers -// -//============================================================================= - -#ifndef ISTEAMGAMESERVER_H -#define ISTEAMGAMESERVER_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1) - -//----------------------------------------------------------------------------- -// Purpose: Functions for authenticating users via Steam to play on a game server -//----------------------------------------------------------------------------- -class ISteamGameServer -{ -public: - -// -// Basic server data. These properties, if set, must be set before before calling LogOn. They -// may not be changed after logged in. -// - - /// This is called by SteamGameServer_Init, and you will usually not need to call it directly - virtual bool InitGameServer( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, uint32 unFlags, AppId_t nGameAppId, const char *pchVersionString ) = 0; - - /// Game product identifier. This is currently used by the master server for version checking purposes. - /// It's a required field, but will eventually will go away, and the AppID will be used for this purpose. - virtual void SetProduct( const char *pszProduct ) = 0; - - /// Description of the game. This is a required field and is displayed in the steam server browser....for now. - /// This is a required field, but it will go away eventually, as the data should be determined from the AppID. - virtual void SetGameDescription( const char *pszGameDescription ) = 0; - - /// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning - /// this application is the original game, not a mod. - /// - /// @see k_cbMaxGameServerGameDir - virtual void SetModDir( const char *pszModDir ) = 0; - - /// Is this is a dedicated server? The default value is false. - virtual void SetDedicatedServer( bool bDedicated ) = 0; - -// -// Login -// - - /// Begin process to login to a persistent game server account - /// - /// You need to register for callbacks to determine the result of this operation. - /// @see SteamServersConnected_t - /// @see SteamServerConnectFailure_t - /// @see SteamServersDisconnected_t - virtual void LogOn( const char *pszToken ) = 0; - - /// Login to a generic, anonymous account. - /// - /// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init, - /// but this is no longer the case. - virtual void LogOnAnonymous() = 0; - - /// Begin process of logging game server out of steam - virtual void LogOff() = 0; - - // status functions - virtual bool BLoggedOn() = 0; - virtual bool BSecure() = 0; - virtual CSteamID GetSteamID() = 0; - - /// Returns true if the master server has requested a restart. - /// Only returns true once per request. - virtual bool WasRestartRequested() = 0; - -// -// Server state. These properties may be changed at any time. -// - - /// Max player count that will be reported to server browser and client queries - virtual void SetMaxPlayerCount( int cPlayersMax ) = 0; - - /// Number of bots. Default value is zero - virtual void SetBotPlayerCount( int cBotplayers ) = 0; - - /// Set the name of server as it will appear in the server browser - /// - /// @see k_cbMaxGameServerName - virtual void SetServerName( const char *pszServerName ) = 0; - - /// Set name of map to report in the server browser - /// - /// @see k_cbMaxGameServerName - virtual void SetMapName( const char *pszMapName ) = 0; - - /// Let people know if your server will require a password - virtual void SetPasswordProtected( bool bPasswordProtected ) = 0; - - /// Spectator server. The default value is zero, meaning the service - /// is not used. - virtual void SetSpectatorPort( uint16 unSpectatorPort ) = 0; - - /// Name of the spectator server. (Only used if spectator port is nonzero.) - /// - /// @see k_cbMaxGameServerMapName - virtual void SetSpectatorServerName( const char *pszSpectatorServerName ) = 0; - - /// Call this to clear the whole list of key/values that are sent in rules queries. - virtual void ClearAllKeyValues() = 0; - - /// Call this to add/update a key/value pair. - virtual void SetKeyValue( const char *pKey, const char *pValue ) = 0; - - /// Sets a string defining the "gametags" for this server, this is optional, but if it is set - /// it allows users to filter in the matchmaking/server-browser interfaces based on the value - /// - /// @see k_cbMaxGameServerTags - virtual void SetGameTags( const char *pchGameTags ) = 0; - - /// Sets a string defining the "gamedata" for this server, this is optional, but if it is set - /// it allows users to filter in the matchmaking/server-browser interfaces based on the value - /// don't set this unless it actually changes, its only uploaded to the master once (when - /// acknowledged) - /// - /// @see k_cbMaxGameServerGameData - virtual void SetGameData( const char *pchGameData ) = 0; - - /// Region identifier. This is an optional field, the default value is empty, meaning the "world" region - virtual void SetRegion( const char *pszRegion ) = 0; - -// -// Player list management / authentication -// - - // Handles receiving a new connection from a Steam user. This call will ask the Steam - // servers to validate the users identity, app ownership, and VAC status. If the Steam servers - // are off-line, then it will validate the cached ticket itself which will validate app ownership - // and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection() - // and must then be sent up to the game server for authentication. - // - // Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL - // If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication - // for the user has succeeded or failed (the steamid in the callback will match the one returned by this call) - virtual bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser ) = 0; - - // Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation. - // - // Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect() - // when this user leaves the server just like you would for a real user. - virtual CSteamID CreateUnauthenticatedUserConnection() = 0; - - // Should be called whenever a user leaves our game server, this lets Steam internally - // track which users are currently on which servers for the purposes of preventing a single - // account being logged into multiple servers, showing who is currently on a server, etc. - virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0; - - // Update the data to be displayed in the server browser and matchmaking interfaces for a user - // currently connected to the server. For regular users you must call this after you receive a - // GSUserValidationSuccess callback. - // - // Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player) - virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0; - - // New auth system APIs - do not mix with the old auth system APIs. - // ---------------------------------------------------------------- - - // Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ). - // pcbTicket retrieves the length of the actual ticket. - virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0; - - // Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused - // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse ) - virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0; - - // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity - virtual void EndAuthSession( CSteamID steamID ) = 0; - - // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to - virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0; - - // After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function - // to determine if the user owns downloadable content specified by the provided AppID. - virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0; - - // Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t - // returns false if we're not connected to the steam servers and thus cannot ask - virtual bool RequestUserGroupStatus( CSteamID steamIDUser, CSteamID steamIDGroup ) = 0; - - - // these two functions s are deprecated, and will not return results - // they will be removed in a future version of the SDK - virtual void GetGameplayStats( ) = 0; - CALL_RESULT( GSReputation_t ) - virtual SteamAPICall_t GetServerReputation() = 0; - - // Returns the public IP of the server according to Steam, useful when the server is - // behind NAT and you want to advertise its IP in a lobby for other clients to directly - // connect to - virtual uint32 GetPublicIP() = 0; - -// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own -// socket to talk to the master server on, it lets the game use its socket to forward messages -// back and forth. This prevents us from requiring server ops to open up yet another port -// in their firewalls. -// -// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001 - - // These are used when you've elected to multiplex the game server's UDP socket - // rather than having the master server updater use its own sockets. - // - // Source games use this to simplify the job of the server admins, so they - // don't have to open up more ports on their firewalls. - - // Call this when a packet that starts with 0xFFFFFFFF comes in. That means - // it's for us. - virtual bool HandleIncomingPacket( const void *pData, int cbData, uint32 srcIP, uint16 srcPort ) = 0; - - // AFTER calling HandleIncomingPacket for any packets that came in that frame, call this. - // This gets a packet that the master server updater needs to send out on UDP. - // It returns the length of the packet it wants to send, or 0 if there are no more packets to send. - // Call this each frame until it returns 0. - virtual int GetNextOutgoingPacket( void *pOut, int cbMaxOut, uint32 *pNetAdr, uint16 *pPort ) = 0; - -// -// Control heartbeats / advertisement with master server -// - - // Call this as often as you like to tell the master server updater whether or not - // you want it to be active (default: off). - virtual void EnableHeartbeats( bool bActive ) = 0; - - // You usually don't need to modify this. - // Pass -1 to use the default value for iHeartbeatInterval. - // Some mods change this. - virtual void SetHeartbeatInterval( int iHeartbeatInterval ) = 0; - - // Force a heartbeat to steam at the next opportunity - virtual void ForceHeartbeat() = 0; - - // associate this game server with this clan for the purposes of computing player compat - CALL_RESULT( AssociateWithClanResult_t ) - virtual SteamAPICall_t AssociateWithClan( CSteamID steamIDClan ) = 0; - - // ask if any of the current players dont want to play with this new player - or vice versa - CALL_RESULT( ComputeNewPlayerCompatibilityResult_t ) - virtual SteamAPICall_t ComputeNewPlayerCompatibility( CSteamID steamIDNewPlayer ) = 0; - -}; - -#define STEAMGAMESERVER_INTERFACE_VERSION "SteamGameServer012" - -// game server flags -const uint32 k_unServerFlagNone = 0x00; -const uint32 k_unServerFlagActive = 0x01; // server has users playing -const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure -const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated -const uint32 k_unServerFlagLinux = 0x08; // linux build -const uint32 k_unServerFlagPassworded = 0x10; // password protected -const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and - // won't enforce authentication of users that connect to the server. - // Useful when you run a server where the clients may not - // be connected to the internet but you want them to play (i.e LANs) - - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -// client has been approved to connect to this game server -struct GSClientApprove_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 1 }; - CSteamID m_SteamID; // SteamID of approved player - CSteamID m_OwnerSteamID; // SteamID of original owner for game license -}; - - -// client has been denied to connection to this game server -struct GSClientDeny_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 2 }; - CSteamID m_SteamID; - EDenyReason m_eDenyReason; - char m_rgchOptionalText[128]; -}; - - -// request the game server should kick the user -struct GSClientKick_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 3 }; - CSteamID m_SteamID; - EDenyReason m_eDenyReason; -}; - -// NOTE: callback values 4 and 5 are skipped because they are used for old deprecated callbacks, -// do not reuse them here. - - -// client achievement info -struct GSClientAchievementStatus_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 6 }; - uint64 m_SteamID; - char m_pchAchievement[128]; - bool m_bUnlocked; -}; - -// received when the game server requests to be displayed as secure (VAC protected) -// m_bSecure is true if the game server should display itself as secure to users, false otherwise -struct GSPolicyResponse_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 15 }; - uint8 m_bSecure; -}; - -// GS gameplay stats info -struct GSGameplayStats_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 7 }; - EResult m_eResult; // Result of the call - int32 m_nRank; // Overall rank of the server (0-based) - uint32 m_unTotalConnects; // Total number of clients who have ever connected to the server - uint32 m_unTotalMinutesPlayed; // Total number of minutes ever played on the server -}; - -// send as a reply to RequestUserGroupStatus() -struct GSClientGroupStatus_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 8 }; - CSteamID m_SteamIDUser; - CSteamID m_SteamIDGroup; - bool m_bMember; - bool m_bOfficer; -}; - -// Sent as a reply to GetServerReputation() -struct GSReputation_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 9 }; - EResult m_eResult; // Result of the call; - uint32 m_unReputationScore; // The reputation score for the game server - bool m_bBanned; // True if the server is banned from the Steam - // master servers - - // The following members are only filled out if m_bBanned is true. They will all - // be set to zero otherwise. Master server bans are by IP so it is possible to be - // banned even when the score is good high if there is a bad server on another port. - // This information can be used to determine which server is bad. - - uint32 m_unBannedIP; // The IP of the banned server - uint16 m_usBannedPort; // The port of the banned server - uint64 m_ulBannedGameID; // The game ID the banned server is serving - uint32 m_unBanExpires; // Time the ban expires, expressed in the Unix epoch (seconds since 1/1/1970) -}; - -// Sent as a reply to AssociateWithClan() -struct AssociateWithClanResult_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 10 }; - EResult m_eResult; // Result of the call; -}; - -// Sent as a reply to ComputeNewPlayerCompatibility() -struct ComputeNewPlayerCompatibilityResult_t -{ - enum { k_iCallback = k_iSteamGameServerCallbacks + 11 }; - EResult m_eResult; // Result of the call; - int m_cPlayersThatDontLikeCandidate; - int m_cPlayersThatCandidateDoesntLike; - int m_cClanPlayersThatDontLikeCandidate; - CSteamID m_SteamIDCandidate; -}; - - -#pragma pack( pop ) - -#endif // ISTEAMGAMESERVER_H diff --git a/ScreenPlay/ThirdParty/steam/isteamgameserverstats.h b/ScreenPlay/ThirdParty/steam/isteamgameserverstats.h deleted file mode 100644 index e7922c9c..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamgameserverstats.h +++ /dev/null @@ -1,101 +0,0 @@ -//====== Copyright © Valve Corporation, All rights reserved. ======= -// -// Purpose: interface for game servers to steam stats and achievements -// -//============================================================================= - -#ifndef ISTEAMGAMESERVERSTATS_H -#define ISTEAMGAMESERVERSTATS_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -//----------------------------------------------------------------------------- -// Purpose: Functions for authenticating users via Steam to play on a game server -//----------------------------------------------------------------------------- -class ISteamGameServerStats -{ -public: - // downloads stats for the user - // returns a GSStatsReceived_t callback when completed - // if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail - // these stats will only be auto-updated for clients playing on the server. For other - // users you'll need to call RequestUserStats() again to refresh any data - CALL_RESULT( GSStatsReceived_t ) - virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0; - - // requests stat information for a user, usable after a successful call to RequestUserStats() - virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0; - virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0; - virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0; - - // Set / update stats and achievements. - // Note: These updates will work only on stats game servers are allowed to edit and only for - // game servers that have been declared as officially controlled by the game creators. - // Set the IP range of your official servers on the Steamworks page - virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, int32 nData ) = 0; - virtual bool SetUserStat( CSteamID steamIDUser, const char *pchName, float fData ) = 0; - virtual bool UpdateUserAvgRateStat( CSteamID steamIDUser, const char *pchName, float flCountThisSession, double dSessionLength ) = 0; - - virtual bool SetUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0; - virtual bool ClearUserAchievement( CSteamID steamIDUser, const char *pchName ) = 0; - - // Store the current data on the server, will get a GSStatsStored_t callback when set. - // - // If the callback has a result of k_EResultInvalidParam, one or more stats - // uploaded has been rejected, either because they broke constraints - // or were out of date. In this case the server sends back updated values. - // The stats should be re-iterated to keep in sync. - CALL_RESULT( GSStatsStored_t ) - virtual SteamAPICall_t StoreUserStats( CSteamID steamIDUser ) = 0; -}; - -#define STEAMGAMESERVERSTATS_INTERFACE_VERSION "SteamGameServerStats001" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: called when the latests stats and achievements have been received -// from the server -//----------------------------------------------------------------------------- -struct GSStatsReceived_t -{ - enum { k_iCallback = k_iSteamGameServerStatsCallbacks }; - EResult m_eResult; // Success / error fetching the stats - CSteamID m_steamIDUser; // The user for whom the stats are retrieved for -}; - - -//----------------------------------------------------------------------------- -// Purpose: result of a request to store the user stats for a game -//----------------------------------------------------------------------------- -struct GSStatsStored_t -{ - enum { k_iCallback = k_iSteamGameServerStatsCallbacks + 1 }; - EResult m_eResult; // success / error - CSteamID m_steamIDUser; // The user for whom the stats were stored -}; - -//----------------------------------------------------------------------------- -// Purpose: Callback indicating that a user's stats have been unloaded. -// Call RequestUserStats again to access stats for this user -//----------------------------------------------------------------------------- -struct GSStatsUnloaded_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 }; - CSteamID m_steamIDUser; // User whose stats have been unloaded -}; - -#pragma pack( pop ) - - -#endif // ISTEAMGAMESERVERSTATS_H diff --git a/ScreenPlay/ThirdParty/steam/isteamhtmlsurface.h b/ScreenPlay/ThirdParty/steam/isteamhtmlsurface.h deleted file mode 100644 index 117599ce..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamhtmlsurface.h +++ /dev/null @@ -1,466 +0,0 @@ -//====== Copyright 1996-2013, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to display html pages in a texture -// -//============================================================================= - -#ifndef ISTEAMHTMLSURFACE_H -#define ISTEAMHTMLSURFACE_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -typedef uint32 HHTMLBrowser; -const uint32 INVALID_HTMLBROWSER = 0; - -//----------------------------------------------------------------------------- -// Purpose: Functions for displaying HTML pages and interacting with them -//----------------------------------------------------------------------------- -class ISteamHTMLSurface -{ -public: - virtual ~ISteamHTMLSurface() {} - - // Must call init and shutdown when starting/ending use of the interface - virtual bool Init() = 0; - virtual bool Shutdown() = 0; - - // Create a browser object for display of a html page, when creation is complete the call handle - // will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser. - // The user agent string is a substring to be added to the general user agent string so you can - // identify your client on web servers. - // The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if - // you do not require this functionality. - // - // YOU MUST HAVE IMPLEMENTED HANDLERS FOR HTML_BrowserReady_t, HTML_StartRequest_t, - // HTML_JSAlert_t, HTML_JSConfirm_t, and HTML_FileOpenDialog_t! See the CALLBACKS - // section of this interface (AllowStartRequest, etc) for more details. If you do - // not implement these callback handlers, the browser may appear to hang instead of - // navigating to new pages or triggering javascript popups. - // - CALL_RESULT( HTML_BrowserReady_t ) - virtual SteamAPICall_t CreateBrowser( const char *pchUserAgent, const char *pchUserCSS ) = 0; - - // Call this when you are done with a html surface, this lets us free the resources being used by it - virtual void RemoveBrowser( HHTMLBrowser unBrowserHandle ) = 0; - - // Navigate to this URL, results in a HTML_StartRequest_t as the request commences - virtual void LoadURL( HHTMLBrowser unBrowserHandle, const char *pchURL, const char *pchPostData ) = 0; - - // Tells the surface the size in pixels to display the surface - virtual void SetSize( HHTMLBrowser unBrowserHandle, uint32 unWidth, uint32 unHeight ) = 0; - - // Stop the load of the current html page - virtual void StopLoad( HHTMLBrowser unBrowserHandle ) = 0; - // Reload (most likely from local cache) the current page - virtual void Reload( HHTMLBrowser unBrowserHandle ) = 0; - // navigate back in the page history - virtual void GoBack( HHTMLBrowser unBrowserHandle ) = 0; - // navigate forward in the page history - virtual void GoForward( HHTMLBrowser unBrowserHandle ) = 0; - - // add this header to any url requests from this browser - virtual void AddHeader( HHTMLBrowser unBrowserHandle, const char *pchKey, const char *pchValue ) = 0; - // run this javascript script in the currently loaded page - virtual void ExecuteJavascript( HHTMLBrowser unBrowserHandle, const char *pchScript ) = 0; - - enum EHTMLMouseButton - { - eHTMLMouseButton_Left = 0, - eHTMLMouseButton_Right = 1, - eHTMLMouseButton_Middle = 2, - }; - - // Mouse click and mouse movement commands - virtual void MouseUp( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0; - virtual void MouseDown( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0; - virtual void MouseDoubleClick( HHTMLBrowser unBrowserHandle, EHTMLMouseButton eMouseButton ) = 0; - // x and y are relative to the HTML bounds - virtual void MouseMove( HHTMLBrowser unBrowserHandle, int x, int y ) = 0; - // nDelta is pixels of scroll - virtual void MouseWheel( HHTMLBrowser unBrowserHandle, int32 nDelta ) = 0; - - enum EMouseCursor - { - dc_user = 0, - dc_none, - dc_arrow, - dc_ibeam, - dc_hourglass, - dc_waitarrow, - dc_crosshair, - dc_up, - dc_sizenw, - dc_sizese, - dc_sizene, - dc_sizesw, - dc_sizew, - dc_sizee, - dc_sizen, - dc_sizes, - dc_sizewe, - dc_sizens, - dc_sizeall, - dc_no, - dc_hand, - dc_blank, // don't show any custom cursor, just use your default - dc_middle_pan, - dc_north_pan, - dc_north_east_pan, - dc_east_pan, - dc_south_east_pan, - dc_south_pan, - dc_south_west_pan, - dc_west_pan, - dc_north_west_pan, - dc_alias, - dc_cell, - dc_colresize, - dc_copycur, - dc_verticaltext, - dc_rowresize, - dc_zoomin, - dc_zoomout, - dc_help, - dc_custom, - - dc_last, // custom cursors start from this value and up - }; - - enum EHTMLKeyModifiers - { - k_eHTMLKeyModifier_None = 0, - k_eHTMLKeyModifier_AltDown = 1 << 0, - k_eHTMLKeyModifier_CtrlDown = 1 << 1, - k_eHTMLKeyModifier_ShiftDown = 1 << 2, - }; - - // keyboard interactions, native keycode is the virtual key code value from your OS - virtual void KeyDown( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0; - virtual void KeyUp( HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0; - // cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press) - virtual void KeyChar( HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, EHTMLKeyModifiers eHTMLKeyModifiers ) = 0; - - // programmatically scroll this many pixels on the page - virtual void SetHorizontalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0; - virtual void SetVerticalScroll( HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll ) = 0; - - // tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things - virtual void SetKeyFocus( HHTMLBrowser unBrowserHandle, bool bHasKeyFocus ) = 0; - - // open the current pages html code in the local editor of choice, used for debugging - virtual void ViewSource( HHTMLBrowser unBrowserHandle ) = 0; - // copy the currently selected text on the html page to the local clipboard - virtual void CopyToClipboard( HHTMLBrowser unBrowserHandle ) = 0; - // paste from the local clipboard to the current html page - virtual void PasteFromClipboard( HHTMLBrowser unBrowserHandle ) = 0; - - // find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element - virtual void Find( HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse ) = 0; - // cancel a currently running find - virtual void StopFind( HHTMLBrowser unBrowserHandle ) = 0; - - // return details about the link at position x,y on the current page - virtual void GetLinkAtPosition( HHTMLBrowser unBrowserHandle, int x, int y ) = 0; - - // set a webcookie for the hostname in question - virtual void SetCookie( const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath = "/", RTime32 nExpires = 0, bool bSecure = false, bool bHTTPOnly = false ) = 0; - - // Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care) - virtual void SetPageScaleFactor( HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY ) = 0; - - // Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are - // more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled, - // all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1". - // When background mode is disabled, any video or audio objects with that property will resume with ".play()". - virtual void SetBackgroundMode( HHTMLBrowser unBrowserHandle, bool bBackgroundMode ) = 0; - - // Scale the output display space by this factor, this is useful when displaying content on high dpi devices. - // Specifies the ratio between physical and logical pixels. - virtual void SetDPIScalingFactor( HHTMLBrowser unBrowserHandle, float flDPIScaling ) = 0; - - // CALLBACKS - // - // These set of functions are used as responses to callback requests - // - - // You MUST call this in response to a HTML_StartRequest_t callback - // Set bAllowed to true to allow this navigation, false to cancel it and stay - // on the current page. You can use this feature to limit the valid pages - // allowed in your HTML surface. - virtual void AllowStartRequest( HHTMLBrowser unBrowserHandle, bool bAllowed ) = 0; - - // You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback - // Set bResult to true for the OK option of a confirm, use false otherwise - virtual void JSDialogResponse( HHTMLBrowser unBrowserHandle, bool bResult ) = 0; - - // You MUST call this in response to a HTML_FileOpenDialog_t callback - IGNOREATTR() - virtual void FileLoadDialogResponse( HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles ) = 0; -}; - -#define STEAMHTMLSURFACE_INTERFACE_VERSION "STEAMHTMLSURFACE_INTERFACE_VERSION_004" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -//----------------------------------------------------------------------------- -// Purpose: The browser is ready for use -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_BrowserReady_t, k_iSteamHTMLSurfaceCallbacks + 1 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this browser is now fully created and ready to navigate to pages -END_DEFINE_CALLBACK_1() - - -//----------------------------------------------------------------------------- -// Purpose: the browser has a pending paint -//----------------------------------------------------------------------------- -DEFINE_CALLBACK(HTML_NeedsPaint_t, k_iSteamHTMLSurfaceCallbacks + 2) -CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint -CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called -CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture -CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture -CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update -CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update -CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update -CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update -CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered -CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered -CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered -CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages -END_DEFINE_CALLBACK_12() - - -//----------------------------------------------------------------------------- -// Purpose: The browser wanted to navigate to a new page -// NOTE - you MUST call AllowStartRequest in response to this callback -//----------------------------------------------------------------------------- -DEFINE_CALLBACK(HTML_StartRequest_t, k_iSteamHTMLSurfaceCallbacks + 3) -CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface navigating -CALLBACK_MEMBER(1, const char *, pchURL) // the url they wish to navigate to -CALLBACK_MEMBER(2, const char *, pchTarget) // the html link target type (i.e _blank, _self, _parent, _top ) -CALLBACK_MEMBER(3, const char *, pchPostData ) // any posted data for the request -CALLBACK_MEMBER(4, bool, bIsRedirect) // true if this was a http/html redirect from the last load request -END_DEFINE_CALLBACK_5() - - -//----------------------------------------------------------------------------- -// Purpose: The browser has been requested to close due to user interaction (usually from a javascript window.close() call) -//----------------------------------------------------------------------------- -DEFINE_CALLBACK(HTML_CloseBrowser_t, k_iSteamHTMLSurfaceCallbacks + 4) -CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the handle of the surface -END_DEFINE_CALLBACK_1() - - -//----------------------------------------------------------------------------- -// Purpose: the browser is navigating to a new url -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_URLChanged_t, k_iSteamHTMLSurfaceCallbacks + 5 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface navigating -CALLBACK_MEMBER( 1, const char *, pchURL ) // the url they wish to navigate to -CALLBACK_MEMBER( 2, const char *, pchPostData ) // any posted data for the request -CALLBACK_MEMBER( 3, bool, bIsRedirect ) // true if this was a http/html redirect from the last load request -CALLBACK_MEMBER( 4, const char *, pchPageTitle ) // the title of the page -CALLBACK_MEMBER( 5, bool, bNewNavigation ) // true if this was from a fresh tab and not a click on an existing page -END_DEFINE_CALLBACK_6() - - -//----------------------------------------------------------------------------- -// Purpose: A page is finished loading -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_FinishedRequest_t, k_iSteamHTMLSurfaceCallbacks + 6 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchURL ) // -CALLBACK_MEMBER( 2, const char *, pchPageTitle ) // -END_DEFINE_CALLBACK_3() - - -//----------------------------------------------------------------------------- -// Purpose: a request to load this url in a new tab -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_OpenLinkInNewTab_t, k_iSteamHTMLSurfaceCallbacks + 7 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchURL ) // -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: the page has a new title now -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_ChangedTitle_t, k_iSteamHTMLSurfaceCallbacks + 8 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchTitle ) // -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: results from a search -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_SearchResults_t, k_iSteamHTMLSurfaceCallbacks + 9 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, uint32, unResults ) // -CALLBACK_MEMBER( 2, uint32, unCurrentMatch ) // -END_DEFINE_CALLBACK_3() - - -//----------------------------------------------------------------------------- -// Purpose: page history status changed on the ability to go backwards and forward -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_CanGoBackAndForward_t, k_iSteamHTMLSurfaceCallbacks + 10 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, bool, bCanGoBack ) // -CALLBACK_MEMBER( 2, bool, bCanGoForward ) // -END_DEFINE_CALLBACK_3() - - -//----------------------------------------------------------------------------- -// Purpose: details on the visibility and size of the horizontal scrollbar -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_HorizontalScroll_t, k_iSteamHTMLSurfaceCallbacks + 11 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, uint32, unScrollMax ) // -CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) // -CALLBACK_MEMBER( 3, float, flPageScale ) // -CALLBACK_MEMBER( 4, bool , bVisible ) // -CALLBACK_MEMBER( 5, uint32, unPageSize ) // -END_DEFINE_CALLBACK_6() - - -//----------------------------------------------------------------------------- -// Purpose: details on the visibility and size of the vertical scrollbar -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_VerticalScroll_t, k_iSteamHTMLSurfaceCallbacks + 12 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, uint32, unScrollMax ) // -CALLBACK_MEMBER( 2, uint32, unScrollCurrent ) // -CALLBACK_MEMBER( 3, float, flPageScale ) // -CALLBACK_MEMBER( 4, bool, bVisible ) // -CALLBACK_MEMBER( 5, uint32, unPageSize ) // -END_DEFINE_CALLBACK_6() - - -//----------------------------------------------------------------------------- -// Purpose: response to GetLinkAtPosition call -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_LinkAtPosition_t, k_iSteamHTMLSurfaceCallbacks + 13 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, uint32, x ) // NOTE - Not currently set -CALLBACK_MEMBER( 2, uint32, y ) // NOTE - Not currently set -CALLBACK_MEMBER( 3, const char *, pchURL ) // -CALLBACK_MEMBER( 4, bool, bInput ) // -CALLBACK_MEMBER( 5, bool, bLiveLink ) // -END_DEFINE_CALLBACK_6() - - - -//----------------------------------------------------------------------------- -// Purpose: show a Javascript alert dialog, call JSDialogResponse -// when the user dismisses this dialog (or right away to ignore it) -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_JSAlert_t, k_iSteamHTMLSurfaceCallbacks + 14 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchMessage ) // -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: show a Javascript confirmation dialog, call JSDialogResponse -// when the user dismisses this dialog (or right away to ignore it) -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_JSConfirm_t, k_iSteamHTMLSurfaceCallbacks + 15 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchMessage ) // -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: when received show a file open dialog -// then call FileLoadDialogResponse with the file(s) the user selected. -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_FileOpenDialog_t, k_iSteamHTMLSurfaceCallbacks + 16 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchTitle ) // -CALLBACK_MEMBER( 2, const char *, pchInitialFile ) // -END_DEFINE_CALLBACK_3() - - -//----------------------------------------------------------------------------- -// Purpose: a new html window has been created -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_NewWindow_t, k_iSteamHTMLSurfaceCallbacks + 21 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the current surface -CALLBACK_MEMBER( 1, const char *, pchURL ) // the page to load -CALLBACK_MEMBER( 2, uint32, unX ) // the x pos into the page to display the popup -CALLBACK_MEMBER( 3, uint32, unY ) // the y pos into the page to display the popup -CALLBACK_MEMBER( 4, uint32, unWide ) // the total width of the pBGRA texture -CALLBACK_MEMBER( 5, uint32, unTall ) // the total height of the pBGRA texture -CALLBACK_MEMBER( 6, HHTMLBrowser, unNewWindow_BrowserHandle ) // the handle of the new window surface -END_DEFINE_CALLBACK_7() - - -//----------------------------------------------------------------------------- -// Purpose: change the cursor to display -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_SetCursor_t, k_iSteamHTMLSurfaceCallbacks + 22 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, uint32, eMouseCursor ) // the EMouseCursor to display -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: informational message from the browser -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_StatusText_t, k_iSteamHTMLSurfaceCallbacks + 23 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: show a tooltip -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_ShowToolTip_t, k_iSteamHTMLSurfaceCallbacks + 24 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: update the text of an existing tooltip -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_UpdateToolTip_t, k_iSteamHTMLSurfaceCallbacks + 25 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -CALLBACK_MEMBER( 1, const char *, pchMsg ) // the EMouseCursor to display -END_DEFINE_CALLBACK_2() - - -//----------------------------------------------------------------------------- -// Purpose: hide the tooltip you are showing -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_HideToolTip_t, k_iSteamHTMLSurfaceCallbacks + 26 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // the handle of the surface -END_DEFINE_CALLBACK_1() - - -//----------------------------------------------------------------------------- -// Purpose: The browser has restarted due to an internal failure, use this new handle value -//----------------------------------------------------------------------------- -DEFINE_CALLBACK( HTML_BrowserRestarted_t, k_iSteamHTMLSurfaceCallbacks + 27 ) -CALLBACK_MEMBER( 0, HHTMLBrowser, unBrowserHandle ) // this is the new browser handle after the restart -CALLBACK_MEMBER( 1, HHTMLBrowser, unOldBrowserHandle ) // the handle for the browser before the restart, if your handle was this then switch to using unBrowserHandle for API calls -END_DEFINE_CALLBACK_2() - - -#pragma pack( pop ) - - -#endif // ISTEAMHTMLSURFACE_H diff --git a/ScreenPlay/ThirdParty/steam/isteamhttp.h b/ScreenPlay/ThirdParty/steam/isteamhttp.h deleted file mode 100644 index 8fab537d..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamhttp.h +++ /dev/null @@ -1,210 +0,0 @@ -//====== Copyright © 1996-2009, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to http client -// -//============================================================================= - -#ifndef ISTEAMHTTP_H -#define ISTEAMHTTP_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" -#include "steamhttpenums.h" - -// Handle to a HTTP Request handle -typedef uint32 HTTPRequestHandle; -#define INVALID_HTTPREQUEST_HANDLE 0 - -typedef uint32 HTTPCookieContainerHandle; -#define INVALID_HTTPCOOKIE_HANDLE 0 - -//----------------------------------------------------------------------------- -// Purpose: interface to http client -//----------------------------------------------------------------------------- -class ISteamHTTP -{ -public: - - // Initializes a new HTTP request, returning a handle to use in further operations on it. Requires - // the method (GET or POST) and the absolute URL for the request. Both http and https are supported, - // so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/ - // or such. - virtual HTTPRequestHandle CreateHTTPRequest( EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL ) = 0; - - // Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after - // sending the request. This is just so the caller can easily keep track of which callbacks go with which request data. - virtual bool SetHTTPRequestContextValue( HTTPRequestHandle hRequest, uint64 ulContextValue ) = 0; - - // Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default - // timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request - // has already been sent. - virtual bool SetHTTPRequestNetworkActivityTimeout( HTTPRequestHandle hRequest, uint32 unTimeoutSeconds ) = 0; - - // Set a request header value for the request, must be called prior to sending the request. Will - // return false if the handle is invalid or the request is already sent. - virtual bool SetHTTPRequestHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue ) = 0; - - // Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified - // when creating the request. Must be called prior to sending the request. Will return false if the - // handle is invalid or the request is already sent. - virtual bool SetHTTPRequestGetOrPostParameter( HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue ) = 0; - - // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on - // asynchronous response via callback. - // - // Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control - // header and only do a local cache lookup rather than sending any actual remote request. - virtual bool SendHTTPRequest( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0; - - // Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on - // asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and - // HTTPRequestDataReceived_t callbacks while streaming. - virtual bool SendHTTPRequestAndStreamResponse( HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle ) = 0; - - // Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move - // the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent. - virtual bool DeferHTTPRequest( HTTPRequestHandle hRequest ) = 0; - - // Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move - // the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent. - virtual bool PrioritizeHTTPRequest( HTTPRequestHandle hRequest ) = 0; - - // Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also - // returns the size of the header value if present so the caller and allocate a correctly sized buffer for - // GetHTTPResponseHeaderValue. - virtual bool GetHTTPResponseHeaderSize( HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize ) = 0; - - // Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the - // header is not present or if your buffer is too small to contain it's value. You should first call - // BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed. - virtual bool GetHTTPResponseHeaderValue( HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize ) = 0; - - // Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the - // handle is invalid. - virtual bool GetHTTPResponseBodySize( HTTPRequestHandle hRequest, uint32 *unBodySize ) = 0; - - // Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the - // handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out - // the correct buffer size to use. - virtual bool GetHTTPResponseBodyData( HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0; - - // Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the - // handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset - // do not match the size and offset sent in HTTPRequestDataReceived_t. - virtual bool GetHTTPStreamingResponseBodyData( HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize ) = 0; - - // Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t - // callback and finishing using the response. - virtual bool ReleaseHTTPRequest( HTTPRequestHandle hRequest ) = 0; - - // Gets progress on downloading the body for the request. This will be zero unless a response header has already been - // received which included a content-length field. For responses that contain no content-length it will report - // zero for the duration of the request as the size is unknown until the connection closes. - virtual bool GetHTTPDownloadProgressPct( HTTPRequestHandle hRequest, float *pflPercentOut ) = 0; - - // Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params - // have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType - // parameter will set the content-type header for the request so the server may know how to interpret the body. - virtual bool SetHTTPRequestRawPostBody( HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen ) = 0; - - // Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true - // than any response to your requests using this cookie container may add new cookies which may be transmitted with - // future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for - // during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across - // repeat executions of your process. - virtual HTTPCookieContainerHandle CreateCookieContainer( bool bAllowResponsesToModify ) = 0; - - // Release a cookie container you are finished using, freeing it's memory - virtual bool ReleaseCookieContainer( HTTPCookieContainerHandle hCookieContainer ) = 0; - - // Adds a cookie to the specified cookie container that will be used with future requests. - virtual bool SetCookie( HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie ) = 0; - - // Set the cookie container to use for a HTTP request - virtual bool SetHTTPRequestCookieContainer( HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer ) = 0; - - // Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end - virtual bool SetHTTPRequestUserAgentInfo( HTTPRequestHandle hRequest, const char *pchUserAgentInfo ) = 0; - - // Set that https request should require verified SSL certificate via machines certificate trust store - virtual bool SetHTTPRequestRequiresVerifiedCertificate( HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate ) = 0; - - // Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout - // which can bump everytime we get more data - virtual bool SetHTTPRequestAbsoluteTimeoutMS( HTTPRequestHandle hRequest, uint32 unMilliseconds ) = 0; - - // Check if the reason the request failed was because we timed it out (rather than some harder failure) - virtual bool GetHTTPRequestWasTimedOut( HTTPRequestHandle hRequest, bool *pbWasTimedOut ) = 0; -}; - -#define STEAMHTTP_INTERFACE_VERSION "STEAMHTTP_INTERFACE_VERSION002" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -struct HTTPRequestCompleted_t -{ - enum { k_iCallback = k_iClientHTTPCallbacks + 1 }; - - // Handle value for the request that has completed. - HTTPRequestHandle m_hRequest; - - // Context value that the user defined on the request that this callback is associated with, 0 if - // no context value was set. - uint64 m_ulContextValue; - - // This will be true if we actually got any sort of response from the server (even an error). - // It will be false if we failed due to an internal error or client side network failure. - bool m_bRequestSuccessful; - - // Will be the HTTP status code value returned by the server, k_EHTTPStatusCode200OK is the normal - // OK response, if you get something else you probably need to treat it as a failure. - EHTTPStatusCode m_eStatusCode; - - uint32 m_unBodySize; // Same as GetHTTPResponseBodySize() -}; - - -struct HTTPRequestHeadersReceived_t -{ - enum { k_iCallback = k_iClientHTTPCallbacks + 2 }; - - // Handle value for the request that has received headers. - HTTPRequestHandle m_hRequest; - - // Context value that the user defined on the request that this callback is associated with, 0 if - // no context value was set. - uint64 m_ulContextValue; -}; - -struct HTTPRequestDataReceived_t -{ - enum { k_iCallback = k_iClientHTTPCallbacks + 3 }; - - // Handle value for the request that has received data. - HTTPRequestHandle m_hRequest; - - // Context value that the user defined on the request that this callback is associated with, 0 if - // no context value was set. - uint64 m_ulContextValue; - - - // Offset to provide to GetHTTPStreamingResponseBodyData to get this chunk of data - uint32 m_cOffset; - - // Size to provide to GetHTTPStreamingResponseBodyData to get this chunk of data - uint32 m_cBytesReceived; -}; - - -#pragma pack( pop ) - -#endif // ISTEAMHTTP_H \ No newline at end of file diff --git a/ScreenPlay/ThirdParty/steam/isteaminventory.h b/ScreenPlay/ThirdParty/steam/isteaminventory.h deleted file mode 100644 index 85090a2f..00000000 --- a/ScreenPlay/ThirdParty/steam/isteaminventory.h +++ /dev/null @@ -1,429 +0,0 @@ -//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to Steam Inventory -// -//============================================================================= - -#ifndef ISTEAMINVENTORY_H -#define ISTEAMINVENTORY_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -// Every individual instance of an item has a globally-unique ItemInstanceID. -// This ID is unique to the combination of (player, specific item instance) -// and will not be transferred to another player or re-used for another item. -typedef uint64 SteamItemInstanceID_t; - -static const SteamItemInstanceID_t k_SteamItemInstanceIDInvalid = (SteamItemInstanceID_t)~0; - -// Types of items in your game are identified by a 32-bit "item definition number". -// Valid definition numbers are between 1 and 999999999; numbers less than or equal to -// zero are invalid, and numbers greater than or equal to one billion (1x10^9) are -// reserved for internal Steam use. -typedef int32 SteamItemDef_t; - - -enum ESteamItemFlags -{ - // Item status flags - these flags are permanently attached to specific item instances - k_ESteamItemNoTrade = 1 << 0, // This item is account-locked and cannot be traded or given away. - - // Action confirmation flags - these flags are set one time only, as part of a result set - k_ESteamItemRemoved = 1 << 8, // The item has been destroyed, traded away, expired, or otherwise invalidated - k_ESteamItemConsumed = 1 << 9, // The item quantity has been decreased by 1 via ConsumeItem API. - - // All other flag bits are currently reserved for internal Steam use at this time. - // Do not assume anything about the state of other flags which are not defined here. -}; - -struct SteamItemDetails_t -{ - SteamItemInstanceID_t m_itemId; - SteamItemDef_t m_iDefinition; - uint16 m_unQuantity; - uint16 m_unFlags; // see ESteamItemFlags -}; - -typedef int32 SteamInventoryResult_t; - -static const SteamInventoryResult_t k_SteamInventoryResultInvalid = -1; - -typedef uint64 SteamInventoryUpdateHandle_t; -const SteamInventoryUpdateHandle_t k_SteamInventoryUpdateHandleInvalid = 0xffffffffffffffffull; - -//----------------------------------------------------------------------------- -// Purpose: Steam Inventory query and manipulation API -//----------------------------------------------------------------------------- -class ISteamInventory -{ -public: - - // INVENTORY ASYNC RESULT MANAGEMENT - // - // Asynchronous inventory queries always output a result handle which can be used with - // GetResultStatus, GetResultItems, etc. A SteamInventoryResultReady_t callback will - // be triggered when the asynchronous result becomes ready (or fails). - // - - // Find out the status of an asynchronous inventory result handle. Possible values: - // k_EResultPending - still in progress - // k_EResultOK - done, result ready - // k_EResultExpired - done, result ready, maybe out of date (see DeserializeResult) - // k_EResultInvalidParam - ERROR: invalid API call parameters - // k_EResultServiceUnavailable - ERROR: service temporarily down, you may retry later - // k_EResultLimitExceeded - ERROR: operation would exceed per-user inventory limits - // k_EResultFail - ERROR: unknown / generic error - METHOD_DESC(Find out the status of an asynchronous inventory result handle.) - virtual EResult GetResultStatus( SteamInventoryResult_t resultHandle ) = 0; - - // Copies the contents of a result set into a flat array. The specific - // contents of the result set depend on which query which was used. - METHOD_DESC(Copies the contents of a result set into a flat array. The specific contents of the result set depend on which query which was used.) - virtual bool GetResultItems( SteamInventoryResult_t resultHandle, - OUT_ARRAY_COUNT( punOutItemsArraySize,Output array) SteamItemDetails_t *pOutItemsArray, - uint32 *punOutItemsArraySize ) = 0; - - // In combination with GetResultItems, you can use GetResultItemProperty to retrieve - // dynamic string properties for a given item returned in the result set. - // - // Property names are always composed of ASCII letters, numbers, and/or underscores. - // - // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available - // property names. - // - // If pchValueBuffer is NULL, *punValueBufferSize will contain the - // suggested buffer size. Otherwise it will be the number of bytes actually copied - // to pchValueBuffer. If the results do not fit in the given buffer, partial - // results may be copied. - virtual bool GetResultItemProperty( SteamInventoryResult_t resultHandle, - uint32 unItemIndex, - const char *pchPropertyName, - OUT_STRING_COUNT( punValueBufferSizeOut ) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0; - - // Returns the server time at which the result was generated. Compare against - // the value of IClientUtils::GetServerRealTime() to determine age. - METHOD_DESC(Returns the server time at which the result was generated. Compare against the value of IClientUtils::GetServerRealTime() to determine age.) - virtual uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle ) = 0; - - // Returns true if the result belongs to the target steam ID, false if the - // result does not. This is important when using DeserializeResult, to verify - // that a remote player is not pretending to have a different user's inventory. - METHOD_DESC(Returns true if the result belongs to the target steam ID or false if the result does not. This is important when using DeserializeResult to verify that a remote player is not pretending to have a different users inventory.) - virtual bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected ) = 0; - - // Destroys a result handle and frees all associated memory. - METHOD_DESC(Destroys a result handle and frees all associated memory.) - virtual void DestroyResult( SteamInventoryResult_t resultHandle ) = 0; - - - // INVENTORY ASYNC QUERY - // - - // Captures the entire state of the current user's Steam inventory. - // You must call DestroyResult on this handle when you are done with it. - // Returns false and sets *pResultHandle to zero if inventory is unavailable. - // Note: calls to this function are subject to rate limits and may return - // cached results if called too frequently. It is suggested that you call - // this function only when you are about to display the user's full inventory, - // or if you expect that the inventory may have changed. - METHOD_DESC(Captures the entire state of the current users Steam inventory.) - virtual bool GetAllItems( SteamInventoryResult_t *pResultHandle ) = 0; - - - // Captures the state of a subset of the current user's Steam inventory, - // identified by an array of item instance IDs. The results from this call - // can be serialized and passed to other players to "prove" that the current - // user owns specific items, without exposing the user's entire inventory. - // For example, you could call GetItemsByID with the IDs of the user's - // currently equipped cosmetic items and serialize this to a buffer, and - // then transmit this buffer to other players upon joining a game. - METHOD_DESC(Captures the state of a subset of the current users Steam inventory identified by an array of item instance IDs.) - virtual bool GetItemsByID( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT( unCountInstanceIDs ) const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs ) = 0; - - - // RESULT SERIALIZATION AND AUTHENTICATION - // - // Serialized result sets contain a short signature which can't be forged - // or replayed across different game sessions. A result set can be serialized - // on the local client, transmitted to other players via your game networking, - // and deserialized by the remote players. This is a secure way of preventing - // hackers from lying about posessing rare/high-value items. - - // Serializes a result set with signature bytes to an output buffer. Pass - // NULL as an output buffer to get the required size via punOutBufferSize. - // The size of a serialized result depends on the number items which are being - // serialized. When securely transmitting items to other players, it is - // recommended to use "GetItemsByID" first to create a minimal result set. - // Results have a built-in timestamp which will be considered "expired" after - // an hour has elapsed. See DeserializeResult for expiration handling. - virtual bool SerializeResult( SteamInventoryResult_t resultHandle, OUT_BUFFER_COUNT(punOutBufferSize) void *pOutBuffer, uint32 *punOutBufferSize ) = 0; - - // Deserializes a result set and verifies the signature bytes. Returns false - // if bRequireFullOnlineVerify is set but Steam is running in Offline mode. - // Otherwise returns true and then delivers error codes via GetResultStatus. - // - // The bRESERVED_MUST_BE_FALSE flag is reserved for future use and should not - // be set to true by your game at this time. - // - // DeserializeResult has a potential soft-failure mode where the handle status - // is set to k_EResultExpired. GetResultItems() still succeeds in this mode. - // The "expired" result could indicate that the data may be out of date - not - // just due to timed expiration (one hour), but also because one of the items - // in the result set may have been traded or consumed since the result set was - // generated. You could compare the timestamp from GetResultTimestamp() to - // ISteamUtils::GetServerRealTime() to determine how old the data is. You could - // simply ignore the "expired" result code and continue as normal, or you - // could challenge the player with expired data to send an updated result set. - virtual bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, BUFFER_COUNT(punOutBufferSize) const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false ) = 0; - - - // INVENTORY ASYNC MODIFICATION - // - - // GenerateItems() creates one or more items and then generates a SteamInventoryCallback_t - // notification with a matching nCallbackContext parameter. This API is only intended - // for prototyping - it is only usable by Steam accounts that belong to the publisher group - // for your game. - // If punArrayQuantity is not NULL, it should be the same length as pArrayItems and should - // describe the quantity of each item to generate. - virtual bool GenerateItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0; - - // GrantPromoItems() checks the list of promotional items for which the user may be eligible - // and grants the items (one time only). On success, the result set will include items which - // were granted, if any. If no items were granted because the user isn't eligible for any - // promotions, this is still considered a success. - METHOD_DESC(GrantPromoItems() checks the list of promotional items for which the user may be eligible and grants the items (one time only).) - virtual bool GrantPromoItems( SteamInventoryResult_t *pResultHandle ) = 0; - - // AddPromoItem() / AddPromoItems() are restricted versions of GrantPromoItems(). Instead of - // scanning for all eligible promotional items, the check is restricted to a single item - // definition or set of item definitions. This can be useful if your game has custom UI for - // showing a specific promo item to the user. - virtual bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef ) = 0; - virtual bool AddPromoItems( SteamInventoryResult_t *pResultHandle, ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength ) = 0; - - // ConsumeItem() removes items from the inventory, permanently. They cannot be recovered. - // Not for the faint of heart - if your game implements item removal at all, a high-friction - // UI confirmation process is highly recommended. - METHOD_DESC(ConsumeItem() removes items from the inventory permanently.) - virtual bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity ) = 0; - - // ExchangeItems() is an atomic combination of item generation and consumption. - // It can be used to implement crafting recipes or transmutations, or items which unpack - // themselves into other items (e.g., a chest). - // Exchange recipes are defined in the ItemDef, and explicitly list the required item - // types and resulting generated type. - // Exchange recipes are evaluated atomically by the Inventory Service; if the supplied - // components do not match the recipe, or do not contain sufficient quantity, the - // exchange will fail. - virtual bool ExchangeItems( SteamInventoryResult_t *pResultHandle, - ARRAY_COUNT(unArrayGenerateLength) const SteamItemDef_t *pArrayGenerate, ARRAY_COUNT(unArrayGenerateLength) const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength, - ARRAY_COUNT(unArrayDestroyLength) const SteamItemInstanceID_t *pArrayDestroy, ARRAY_COUNT(unArrayDestroyLength) const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength ) = 0; - - - // TransferItemQuantity() is intended for use with items which are "stackable" (can have - // quantity greater than one). It can be used to split a stack into two, or to transfer - // quantity from one stack into another stack of identical items. To split one stack into - // two, pass k_SteamItemInstanceIDInvalid for itemIdDest and a new item will be generated. - virtual bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest ) = 0; - - - // TIMED DROPS AND PLAYTIME CREDIT - // - - // Deprecated. Calling this method is not required for proper playtime accounting. - METHOD_DESC( Deprecated method. Playtime accounting is performed on the Steam servers. ) - virtual void SendItemDropHeartbeat() = 0; - - // Playtime credit must be consumed and turned into item drops by your game. Only item - // definitions which are marked as "playtime item generators" can be spawned. The call - // will return an empty result set if there is not enough playtime credit for a drop. - // Your game should call TriggerItemDrop at an appropriate time for the user to receive - // new items, such as between rounds or while the player is dead. Note that players who - // hack their clients could modify the value of "dropListDefinition", so do not use it - // to directly control rarity. - // See your Steamworks configuration to set playtime drop rates for individual itemdefs. - // The client library will suppress too-frequent calls to this method. - METHOD_DESC(Playtime credit must be consumed and turned into item drops by your game.) - virtual bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition ) = 0; - - - // Deprecated. This method is not supported. - virtual bool TradeItems( SteamInventoryResult_t *pResultHandle, CSteamID steamIDTradePartner, - ARRAY_COUNT(nArrayGiveLength) const SteamItemInstanceID_t *pArrayGive, ARRAY_COUNT(nArrayGiveLength) const uint32 *pArrayGiveQuantity, uint32 nArrayGiveLength, - ARRAY_COUNT(nArrayGetLength) const SteamItemInstanceID_t *pArrayGet, ARRAY_COUNT(nArrayGetLength) const uint32 *pArrayGetQuantity, uint32 nArrayGetLength ) = 0; - - - // ITEM DEFINITIONS - // - // Item definitions are a mapping of "definition IDs" (integers between 1 and 1000000) - // to a set of string properties. Some of these properties are required to display items - // on the Steam community web site. Other properties can be defined by applications. - // Use of these functions is optional; there is no reason to call LoadItemDefinitions - // if your game hardcodes the numeric definition IDs (eg, purple face mask = 20, blue - // weapon mod = 55) and does not allow for adding new item types without a client patch. - // - - // LoadItemDefinitions triggers the automatic load and refresh of item definitions. - // Every time new item definitions are available (eg, from the dynamic addition of new - // item types while players are still in-game), a SteamInventoryDefinitionUpdate_t - // callback will be fired. - METHOD_DESC(LoadItemDefinitions triggers the automatic load and refresh of item definitions.) - virtual bool LoadItemDefinitions() = 0; - - // GetItemDefinitionIDs returns the set of all defined item definition IDs (which are - // defined via Steamworks configuration, and not necessarily contiguous integers). - // If pItemDefIDs is null, the call will return true and *punItemDefIDsArraySize will - // contain the total size necessary for a subsequent call. Otherwise, the call will - // return false if and only if there is not enough space in the output array. - virtual bool GetItemDefinitionIDs( - OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs, - DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0; - - // GetItemDefinitionProperty returns a string property from a given item definition. - // Note that some properties (for example, "name") may be localized and will depend - // on the current Steam language settings (see ISteamApps::GetCurrentGameLanguage). - // Property names are always composed of ASCII letters, numbers, and/or underscores. - // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available - // property names. If pchValueBuffer is NULL, *punValueBufferSize will contain the - // suggested buffer size. Otherwise it will be the number of bytes actually copied - // to pchValueBuffer. If the results do not fit in the given buffer, partial - // results may be copied. - virtual bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName, - OUT_STRING_COUNT(punValueBufferSizeOut) char *pchValueBuffer, uint32 *punValueBufferSizeOut ) = 0; - - // Request the list of "eligible" promo items that can be manually granted to the given - // user. These are promo items of type "manual" that won't be granted automatically. - // An example usage of this is an item that becomes available every week. - CALL_RESULT( SteamInventoryEligiblePromoItemDefIDs_t ) - virtual SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs( CSteamID steamID ) = 0; - - // After handling a SteamInventoryEligiblePromoItemDefIDs_t call result, use this - // function to pull out the list of item definition ids that the user can be - // manually granted via the AddPromoItems() call. - virtual bool GetEligiblePromoItemDefinitionIDs( - CSteamID steamID, - OUT_ARRAY_COUNT(punItemDefIDsArraySize,List of item definition IDs) SteamItemDef_t *pItemDefIDs, - DESC(Size of array is passed in and actual size used is returned in this param) uint32 *punItemDefIDsArraySize ) = 0; - - // Starts the purchase process for the given item definitions. The callback SteamInventoryStartPurchaseResult_t - // will be posted if Steam was able to initialize the transaction. - // - // Once the purchase has been authorized and completed by the user, the callback SteamInventoryResultReady_t - // will be posted. - CALL_RESULT( SteamInventoryStartPurchaseResult_t ) - virtual SteamAPICall_t StartPurchase( ARRAY_COUNT(unArrayLength) const SteamItemDef_t *pArrayItemDefs, ARRAY_COUNT(unArrayLength) const uint32 *punArrayQuantity, uint32 unArrayLength ) = 0; - - // Request current prices for all applicable item definitions - CALL_RESULT( SteamInventoryRequestPricesResult_t ) - virtual SteamAPICall_t RequestPrices() = 0; - - // Returns the number of items with prices. Need to call RequestPrices() first. - virtual uint32 GetNumItemsWithPrices() = 0; - - // Returns item definition ids and their prices in the user's local currency. - // Need to call RequestPrices() first. - virtual bool GetItemsWithPrices( ARRAY_COUNT(unArrayLength) OUT_ARRAY_COUNT(pArrayItemDefs, Items with prices) SteamItemDef_t *pArrayItemDefs, - ARRAY_COUNT(unArrayLength) OUT_ARRAY_COUNT(pPrices, List of prices for the given item defs) uint64 *pPrices, - uint32 unArrayLength ) = 0; - - // Retrieves the price for the item definition id - // Returns false if there is no price stored for the item definition. - virtual bool GetItemPrice( SteamItemDef_t iDefinition, uint64 *pPrice ) = 0; - - // Create a request to update properties on items - virtual SteamInventoryUpdateHandle_t StartUpdateProperties() = 0; - // Remove the property on the item - virtual bool RemoveProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName ) = 0; - // Accessor methods to set properties on items - virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, const char *pchPropertyValue ) = 0; - virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, bool bValue ) = 0; - virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, int64 nValue ) = 0; - virtual bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, float flValue ) = 0; - // Submit the update request by handle - virtual bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle ) = 0; - -}; - -#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V002" - - -// SteamInventoryResultReady_t callbacks are fired whenever asynchronous -// results transition from "Pending" to "OK" or an error state. There will -// always be exactly one callback per handle. -struct SteamInventoryResultReady_t -{ - enum { k_iCallback = k_iClientInventoryCallbacks + 0 }; - SteamInventoryResult_t m_handle; - EResult m_result; -}; - - -// SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems -// successfully returns a result which is newer / fresher than the last -// known result. (It will not trigger if the inventory hasn't changed, -// or if results from two overlapping calls are reversed in flight and -// the earlier result is already known to be stale/out-of-date.) -// The normal ResultReady callback will still be triggered immediately -// afterwards; this is an additional notification for your convenience. -struct SteamInventoryFullUpdate_t -{ - enum { k_iCallback = k_iClientInventoryCallbacks + 1 }; - SteamInventoryResult_t m_handle; -}; - - -// A SteamInventoryDefinitionUpdate_t callback is triggered whenever -// item definitions have been updated, which could be in response to -// LoadItemDefinitions() or any other async request which required -// a definition update in order to process results from the server. -struct SteamInventoryDefinitionUpdate_t -{ - enum { k_iCallback = k_iClientInventoryCallbacks + 2 }; -}; - -// Returned -struct SteamInventoryEligiblePromoItemDefIDs_t -{ - enum { k_iCallback = k_iClientInventoryCallbacks + 3 }; - EResult m_result; - CSteamID m_steamID; - int m_numEligiblePromoItemDefs; - bool m_bCachedData; // indicates that the data was retrieved from the cache and not the server -}; - -// Triggered from StartPurchase call -struct SteamInventoryStartPurchaseResult_t -{ - enum { k_iCallback = k_iClientInventoryCallbacks + 4 }; - EResult m_result; - uint64 m_ulOrderID; - uint64 m_ulTransID; -}; - - -// Triggered from RequestPrices -struct SteamInventoryRequestPricesResult_t -{ - enum { k_iCallback = k_iClientInventoryCallbacks + 5 }; - EResult m_result; - char m_rgchCurrency[4]; -}; - -#pragma pack( pop ) - - -#endif // ISTEAMCONTROLLER_H diff --git a/ScreenPlay/ThirdParty/steam/isteammasterserverupdater.h b/ScreenPlay/ThirdParty/steam/isteammasterserverupdater.h deleted file mode 100644 index 4be0ca5c..00000000 --- a/ScreenPlay/ThirdParty/steam/isteammasterserverupdater.h +++ /dev/null @@ -1 +0,0 @@ -#error "This file isn't used any more" diff --git a/ScreenPlay/ThirdParty/steam/isteammatchmaking.h b/ScreenPlay/ThirdParty/steam/isteammatchmaking.h deleted file mode 100644 index 837d98bd..00000000 --- a/ScreenPlay/ThirdParty/steam/isteammatchmaking.h +++ /dev/null @@ -1,751 +0,0 @@ -//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to steam managing game server/client match making -// -//============================================================================= - -#ifndef ISTEAMMATCHMAKING -#define ISTEAMMATCHMAKING -#ifdef _WIN32 -#pragma once -#endif - -#include "steamtypes.h" -#include "steamclientpublic.h" -#include "matchmakingtypes.h" -#include "isteamclient.h" -#include "isteamfriends.h" - -// lobby type description -enum ELobbyType -{ - k_ELobbyTypePrivate = 0, // only way to join the lobby is to invite to someone else - k_ELobbyTypeFriendsOnly = 1, // shows for friends or invitees, but not in lobby list - k_ELobbyTypePublic = 2, // visible for friends and in lobby list - k_ELobbyTypeInvisible = 3, // returned by search, but not visible to other friends - // useful if you want a user in two lobbies, for example matching groups together - // a user can be in only one regular lobby, and up to two invisible lobbies -}; - -// lobby search filter tools -enum ELobbyComparison -{ - k_ELobbyComparisonEqualToOrLessThan = -2, - k_ELobbyComparisonLessThan = -1, - k_ELobbyComparisonEqual = 0, - k_ELobbyComparisonGreaterThan = 1, - k_ELobbyComparisonEqualToOrGreaterThan = 2, - k_ELobbyComparisonNotEqual = 3, -}; - -// lobby search distance. Lobby results are sorted from closest to farthest. -enum ELobbyDistanceFilter -{ - k_ELobbyDistanceFilterClose, // only lobbies in the same immediate region will be returned - k_ELobbyDistanceFilterDefault, // only lobbies in the same region or near by regions - k_ELobbyDistanceFilterFar, // for games that don't have many latency requirements, will return lobbies about half-way around the globe - k_ELobbyDistanceFilterWorldwide, // no filtering, will match lobbies as far as India to NY (not recommended, expect multiple seconds of latency between the clients) -}; - -// maximum number of characters a lobby metadata key can be -#define k_nMaxLobbyKeyLength 255 - -//----------------------------------------------------------------------------- -// Purpose: Functions for match making services for clients to get to favorites -// and to operate on game lobbies. -//----------------------------------------------------------------------------- -class ISteamMatchmaking -{ -public: - // game server favorites storage - // saves basic details about a multiplayer game server locally - - // returns the number of favorites servers the user has stored - virtual int GetFavoriteGameCount() = 0; - - // returns the details of the game server - // iGame is of range [0,GetFavoriteGameCount()) - // *pnIP, *pnConnPort are filled in the with IP:port of the game server - // *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections - // *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added - virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0; - - // adds the game server to the local list; updates the time played of the server if it already exists in the list - virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) = 0; - - // removes the game server from the local storage; returns true if one was removed - virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0; - - /////// - // Game lobby functions - - // Get a list of relevant lobbies - // this is an asynchronous request - // results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found - // this will never return lobbies that are full - // to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call - // use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g. - /* - class CMyLobbyListManager - { - CCallResult m_CallResultLobbyMatchList; - void FindLobbies() - { - // SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList() - SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList(); - m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList ); - } - - void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure ) - { - // lobby list has be retrieved from Steam back-end, use results - } - } - */ - // - CALL_RESULT( LobbyMatchList_t ) - virtual SteamAPICall_t RequestLobbyList() = 0; - // filters for lobbies - // this needs to be called before RequestLobbyList() to take effect - // these are cleared on each call to RequestLobbyList() - virtual void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType ) = 0; - // numerical comparison - virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType ) = 0; - // returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence - virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0; - // returns only lobbies with the specified number of slots available - virtual void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable ) = 0; - // sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed) - virtual void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter ) = 0; - // sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client - virtual void AddRequestLobbyListResultCountFilter( int cMaxResults ) = 0; - - virtual void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby ) = 0; - - // returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call - // should only be called after a LobbyMatchList_t callback is received - // iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching) - // the returned CSteamID::IsValid() will be false if iLobby is out of range - virtual CSteamID GetLobbyByIndex( int iLobby ) = 0; - - // Create a lobby on the Steam servers. - // If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID - // of the lobby will need to be communicated via game channels or via InviteUserToLobby() - // this is an asynchronous request - // results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point - // a LobbyEnter_t callback will also be received (since the local user is joining their own lobby) - CALL_RESULT( LobbyCreated_t ) - virtual SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers ) = 0; - - // Joins an existing lobby - // this is an asynchronous request - // results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful - // lobby metadata is available to use immediately on this call completing - CALL_RESULT( LobbyEnter_t ) - virtual SteamAPICall_t JoinLobby( CSteamID steamIDLobby ) = 0; - - // Leave a lobby; this will take effect immediately on the client side - // other users in the lobby will be notified by a LobbyChatUpdate_t callback - virtual void LeaveLobby( CSteamID steamIDLobby ) = 0; - - // Invite another user to the lobby - // the target user will receive a LobbyInvite_t callback - // will return true if the invite is successfully sent, whether or not the target responds - // returns false if the local user is not connected to the Steam servers - // if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game, - // or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id> - virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0; - - // Lobby iteration, for viewing details of users in a lobby - // only accessible if the lobby user is a member of the specified lobby - // persona information for other lobby members (name, avatar, etc.) will be asynchronously received - // and accessible via ISteamFriends interface - - // returns the number of users in the specified lobby - virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0; - // returns the CSteamID of a user in the lobby - // iMember is of range [0,GetNumLobbyMembers()) - // note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby - virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0; - - // Get data associated with this lobby - // takes a simple key, and returns the string associated with it - // "" will be returned if no value is set, or if steamIDLobby is invalid - virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0; - // Sets a key/value pair in the lobby metadata - // each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data - // this can be used to set lobby names, map, etc. - // to reset a key, just set it to "" - // other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback - virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0; - - // returns the number of metadata keys set on the specified lobby - virtual int GetLobbyDataCount( CSteamID steamIDLobby ) = 0; - - // returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount()) - virtual bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize ) = 0; - - // removes a metadata key from the lobby - virtual bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0; - - // Gets per-user metadata for someone in this lobby - virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0; - // Sets per-user metadata (for the local user implicitly) - virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0; - - // Broadcasts a chat message to the all the users in the lobby - // users in the lobby (including the local user) will receive a LobbyChatMsg_t callback - // returns true if the message is successfully sent - // pvMsgBody can be binary or text data, up to 4k - // if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator - virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0; - // Get a chat message as specified in a LobbyChatMsg_t callback - // iChatID is the LobbyChatMsg_t::m_iChatID value in the callback - // *pSteamIDUser is filled in with the CSteamID of the member - // *pvData is filled in with the message itself - // return value is the number of bytes written into the buffer - virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, OUT_STRUCT() CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0; - - // Refreshes metadata for a lobby you're not necessarily in right now - // you never do this for lobbies you're a member of, only if your - // this will send down all the metadata associated with a lobby - // this is an asynchronous call - // returns false if the local user is not connected to the Steam servers - // results will be returned by a LobbyDataUpdate_t callback - // if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false - virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0; - - // sets the game server associated with the lobby - // usually at this point, the users will join the specified game server - // either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect - virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0; - // returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist - virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID *psteamIDGameServer ) = 0; - - // set the limit on the # of users who can join the lobby - virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0; - // returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined - virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0; - - // updates which type of lobby it is - // only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls - virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0; - - // sets whether or not a lobby is joinable - defaults to true for a new lobby - // if set to false, no user can join, even if they are a friend or have been invited - virtual bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable ) = 0; - - // returns the current lobby owner - // you must be a member of the lobby to access this - // there always one lobby owner - if the current owner leaves, another user will become the owner - // it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner - virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0; - - // changes who the lobby owner is - // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby - // after completion, the local user will no longer be the owner - virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0; - - // link two lobbies for the purposes of checking player compatibility - // you must be the lobby owner of both lobbies - virtual bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) = 0; - -#ifdef _PS3 - // changes who the lobby owner is - // you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby - // after completion, the local user will no longer be the owner - virtual void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes ) = 0; -#endif - CALL_BACK( LobbyChatUpdate_t ) -}; -#define STEAMMATCHMAKING_INTERFACE_VERSION "SteamMatchMaking009" - - -//----------------------------------------------------------------------------- -// Callback interfaces for server list functions (see ISteamMatchmakingServers below) -// -// The idea here is that your game code implements objects that implement these -// interfaces to receive callback notifications after calling asynchronous functions -// inside the ISteamMatchmakingServers() interface below. -// -// This is different than normal Steam callback handling due to the potentially -// large size of server lists. -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -// Typedef for handle type you will receive when requesting server list. -//----------------------------------------------------------------------------- -typedef void* HServerListRequest; - -//----------------------------------------------------------------------------- -// Purpose: Callback interface for receiving responses after a server list refresh -// or an individual server update. -// -// Since you get these callbacks after requesting full list refreshes you will -// usually implement this interface inside an object like CServerBrowser. If that -// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery() -// to cancel any in-progress queries so you don't get a callback into the destructed -// object and crash. -//----------------------------------------------------------------------------- -class ISteamMatchmakingServerListResponse -{ -public: - // Server has responded ok with updated data - virtual void ServerResponded( HServerListRequest hRequest, int iServer ) = 0; - - // Server has failed to respond - virtual void ServerFailedToRespond( HServerListRequest hRequest, int iServer ) = 0; - - // A list refresh you had initiated is now 100% completed - virtual void RefreshComplete( HServerListRequest hRequest, EMatchMakingServerResponse response ) = 0; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Callback interface for receiving responses after pinging an individual server -// -// These callbacks all occur in response to querying an individual server -// via the ISteamMatchmakingServers()->PingServer() call below. If you are -// destructing an object that implements this interface then you should call -// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query -// which is in progress. Failure to cancel in progress queries when destructing -// a callback handler may result in a crash when a callback later occurs. -//----------------------------------------------------------------------------- -class ISteamMatchmakingPingResponse -{ -public: - // Server has responded successfully and has updated data - virtual void ServerResponded( gameserveritem_t &server ) = 0; - - // Server failed to respond to the ping request - virtual void ServerFailedToRespond() = 0; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Callback interface for receiving responses after requesting details on -// who is playing on a particular server. -// -// These callbacks all occur in response to querying an individual server -// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are -// destructing an object that implements this interface then you should call -// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query -// which is in progress. Failure to cancel in progress queries when destructing -// a callback handler may result in a crash when a callback later occurs. -//----------------------------------------------------------------------------- -class ISteamMatchmakingPlayersResponse -{ -public: - // Got data on a new player on the server -- you'll get this callback once per player - // on the server which you have requested player data on. - virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0; - - // The server failed to respond to the request for player details - virtual void PlayersFailedToRespond() = 0; - - // The server has finished responding to the player details request - // (ie, you won't get anymore AddPlayerToList callbacks) - virtual void PlayersRefreshComplete() = 0; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Callback interface for receiving responses after requesting rules -// details on a particular server. -// -// These callbacks all occur in response to querying an individual server -// via the ISteamMatchmakingServers()->ServerRules() call below. If you are -// destructing an object that implements this interface then you should call -// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query -// which is in progress. Failure to cancel in progress queries when destructing -// a callback handler may result in a crash when a callback later occurs. -//----------------------------------------------------------------------------- -class ISteamMatchmakingRulesResponse -{ -public: - // Got data on a rule on the server -- you'll get one of these per rule defined on - // the server you are querying - virtual void RulesResponded( const char *pchRule, const char *pchValue ) = 0; - - // The server failed to respond to the request for rule details - virtual void RulesFailedToRespond() = 0; - - // The server has finished responding to the rule details request - // (ie, you won't get anymore RulesResponded callbacks) - virtual void RulesRefreshComplete() = 0; -}; - - -//----------------------------------------------------------------------------- -// Typedef for handle type you will receive when querying details on an individual server. -//----------------------------------------------------------------------------- -typedef int HServerQuery; -const int HSERVERQUERY_INVALID = 0xffffffff; - -//----------------------------------------------------------------------------- -// Purpose: Functions for match making services for clients to get to game lists and details -//----------------------------------------------------------------------------- -class ISteamMatchmakingServers -{ -public: - // Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values. - // Each call allocates a new asynchronous request object. - // Request object must be released by calling ReleaseRequest( hServerListRequest ) - virtual HServerListRequest RequestInternetServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0; - virtual HServerListRequest RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0; - virtual HServerListRequest RequestFriendsServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0; - virtual HServerListRequest RequestFavoritesServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0; - virtual HServerListRequest RequestHistoryServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0; - virtual HServerListRequest RequestSpectatorServerList( AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse ) = 0; - - // Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress. - // RefreshComplete callback is not posted when request is released. - virtual void ReleaseRequest( HServerListRequest hServerListRequest ) = 0; - - /* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these: - - "map" - - Server passes the filter if the server is playing the specified map. - "gamedataand" - - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the - specified strings. The value field is a comma-delimited list of strings to match. - "gamedataor" - - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the - specified strings. The value field is a comma-delimited list of strings to match. - "gamedatanor" - - Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any - of the specified strings. The value field is a comma-delimited list of strings to check. - "gametagsand" - - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all - of the specified strings. The value field is a comma-delimited list of strings to check. - "gametagsnor" - - Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any - of the specified strings. The value field is a comma-delimited list of strings to check. - "and" (x1 && x2 && ... && xn) - "or" (x1 || x2 || ... || xn) - "nand" !(x1 && x2 && ... && xn) - "nor" !(x1 || x2 || ... || xn) - - Performs Boolean operation on the following filters. The operand to this filter specifies - the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue - pairs must immediately follow, i.e. this is a prefix logical operator notation.) - In the simplest case where Boolean expressions are not nested, this is simply - the number of operands. - - For example, to match servers on a particular map or with a particular tag, would would - use these filters. - - ( server.map == "cp_dustbowl" || server.gametags.contains("payload") ) - "or", "2" - "map", "cp_dustbowl" - "gametagsand", "payload" - - If logical inputs are nested, then the operand specifies the size of the entire - "length" of its operands, not the number of immediate children. - - ( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) ) - "or", "4" - "map", "cp_dustbowl" - "and", "2" - "gametagsand", "payload" - "gametagsnor", "payloadrace" - - Unary NOT can be achieved using either "nand" or "nor" with a single operand. - - "addr" - - Server passes the filter if the server's query address matches the specified IP or IP:port. - "gameaddr" - - Server passes the filter if the server's game address matches the specified IP or IP:port. - - The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t - - "dedicated" - - Server passes the filter if it passed true to SetDedicatedServer. - "secure" - - Server passes the filter if the server is VAC-enabled. - "notfull" - - Server passes the filter if the player count is less than the reported max player count. - "hasplayers" - - Server passes the filter if the player count is greater than zero. - "noplayers" - - Server passes the filter if it doesn't have any players. - "linux" - - Server passes the filter if it's a linux server - */ - - // Get details on a given server in the list, you can get the valid range of index - // values by calling GetServerCount(). You will also receive index values in - // ISteamMatchmakingServerListResponse::ServerResponded() callbacks - virtual gameserveritem_t *GetServerDetails( HServerListRequest hRequest, int iServer ) = 0; - - // Cancel an request which is operation on the given list type. You should call this to cancel - // any in-progress requests before destructing a callback object that may have been passed - // to one of the above list request calls. Not doing so may result in a crash when a callback - // occurs on the destructed object. - // Canceling a query does not release the allocated request handle. - // The request handle must be released using ReleaseRequest( hRequest ) - virtual void CancelQuery( HServerListRequest hRequest ) = 0; - - // Ping every server in your list again but don't update the list of servers - // Query callback installed when the server list was requested will be used - // again to post notifications and RefreshComplete, so the callback must remain - // valid until another RefreshComplete is called on it or the request - // is released with ReleaseRequest( hRequest ) - virtual void RefreshQuery( HServerListRequest hRequest ) = 0; - - // Returns true if the list is currently refreshing its server list - virtual bool IsRefreshing( HServerListRequest hRequest ) = 0; - - // How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1 - virtual int GetServerCount( HServerListRequest hRequest ) = 0; - - // Refresh a single server inside of a query (rather than all the servers ) - virtual void RefreshServer( HServerListRequest hRequest, int iServer ) = 0; - - - //----------------------------------------------------------------------------- - // Queries to individual servers directly via IP/Port - //----------------------------------------------------------------------------- - - // Request updated ping time and other details from a single server - virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0; - - // Request the list of players currently playing on a server - virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0; - - // Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side) - virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0; - - // Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel - // any in-progress requests before destructing a callback object that may have been passed - // to one of the above calls to avoid crashing when callbacks occur. - virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0; -}; -#define STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION "SteamMatchMakingServers002" - -// game server flags -const uint32 k_unFavoriteFlagNone = 0x00; -const uint32 k_unFavoriteFlagFavorite = 0x01; // this game favorite entry is for the favorites list -const uint32 k_unFavoriteFlagHistory = 0x02; // this game favorite entry is for the history list - - -//----------------------------------------------------------------------------- -// Purpose: Used in ChatInfo messages - fields specific to a chat member - must fit in a uint32 -//----------------------------------------------------------------------------- -enum EChatMemberStateChange -{ - // Specific to joining / leaving the chatroom - k_EChatMemberStateChangeEntered = 0x0001, // This user has joined or is joining the chat room - k_EChatMemberStateChangeLeft = 0x0002, // This user has left or is leaving the chat room - k_EChatMemberStateChangeDisconnected = 0x0004, // User disconnected without leaving the chat first - k_EChatMemberStateChangeKicked = 0x0008, // User kicked - k_EChatMemberStateChangeBanned = 0x0010, // User kicked and banned -}; - -// returns true of the flags indicate that a user has been removed from the chat -#define BChatMemberStateChangeRemoved( rgfChatMemberStateChangeFlags ) ( rgfChatMemberStateChangeFlags & ( k_EChatMemberStateChangeDisconnected | k_EChatMemberStateChangeLeft | k_EChatMemberStateChangeKicked | k_EChatMemberStateChangeBanned ) ) - - -//----------------------------------------------------------------------------- -// Callbacks for ISteamMatchmaking (which go through the regular Steam callback registration system) -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: a server was added/removed from the favorites list, you should refresh now -//----------------------------------------------------------------------------- -struct FavoritesListChanged_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 2 }; - uint32 m_nIP; // an IP of 0 means reload the whole list, any other value means just one server - uint32 m_nQueryPort; - uint32 m_nConnPort; - uint32 m_nAppID; - uint32 m_nFlags; - bool m_bAdd; // true if this is adding the entry, otherwise it is a remove - AccountID_t m_unAccountId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Someone has invited you to join a Lobby -// normally you don't need to do anything with this, since -// the Steam UI will also display a ' has invited you to the lobby, join?' dialog -// -// if the user outside a game chooses to join, your game will be launched with the parameter "+connect_lobby <64-bit lobby id>", -// or with the callback GameLobbyJoinRequested_t if they're already in-game -//----------------------------------------------------------------------------- -struct LobbyInvite_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 3 }; - - uint64 m_ulSteamIDUser; // Steam ID of the person making the invite - uint64 m_ulSteamIDLobby; // Steam ID of the Lobby - uint64 m_ulGameID; // GameID of the Lobby -}; - - -//----------------------------------------------------------------------------- -// Purpose: Sent on entering a lobby, or on failing to enter -// m_EChatRoomEnterResponse will be set to k_EChatRoomEnterResponseSuccess on success, -// or a higher value on failure (see enum EChatRoomEnterResponse) -//----------------------------------------------------------------------------- -struct LobbyEnter_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 4 }; - - uint64 m_ulSteamIDLobby; // SteamID of the Lobby you have entered - uint32 m_rgfChatPermissions; // Permissions of the current user - bool m_bLocked; // If true, then only invited users may join - uint32 m_EChatRoomEnterResponse; // EChatRoomEnterResponse -}; - - -//----------------------------------------------------------------------------- -// Purpose: The lobby metadata has changed -// if m_ulSteamIDMember is the steamID of a lobby member, use GetLobbyMemberData() to access per-user details -// if m_ulSteamIDMember == m_ulSteamIDLobby, use GetLobbyData() to access lobby metadata -//----------------------------------------------------------------------------- -struct LobbyDataUpdate_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 5 }; - - uint64 m_ulSteamIDLobby; // steamID of the Lobby - uint64 m_ulSteamIDMember; // steamID of the member whose data changed, or the room itself - uint8 m_bSuccess; // true if we lobby data was successfully changed; - // will only be false if RequestLobbyData() was called on a lobby that no longer exists -}; - - -//----------------------------------------------------------------------------- -// Purpose: The lobby chat room state has changed -// this is usually sent when a user has joined or left the lobby -//----------------------------------------------------------------------------- -struct LobbyChatUpdate_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 6 }; - - uint64 m_ulSteamIDLobby; // Lobby ID - uint64 m_ulSteamIDUserChanged; // user who's status in the lobby just changed - can be recipient - uint64 m_ulSteamIDMakingChange; // Chat member who made the change (different from SteamIDUserChange if kicking, muting, etc.) - // for example, if one user kicks another from the lobby, this will be set to the id of the user who initiated the kick - uint32 m_rgfChatMemberStateChange; // bitfield of EChatMemberStateChange values -}; - - -//----------------------------------------------------------------------------- -// Purpose: A chat message for this lobby has been sent -// use GetLobbyChatEntry( m_iChatID ) to retrieve the contents of this message -//----------------------------------------------------------------------------- -struct LobbyChatMsg_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 7 }; - - uint64 m_ulSteamIDLobby; // the lobby id this is in - uint64 m_ulSteamIDUser; // steamID of the user who has sent this message - uint8 m_eChatEntryType; // type of message - uint32 m_iChatID; // index of the chat entry to lookup -}; - - -//----------------------------------------------------------------------------- -// Purpose: A game created a game for all the members of the lobby to join, -// as triggered by a SetLobbyGameServer() -// it's up to the individual clients to take action on this; the usual -// game behavior is to leave the lobby and connect to the specified game server -//----------------------------------------------------------------------------- -struct LobbyGameCreated_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 9 }; - - uint64 m_ulSteamIDLobby; // the lobby we were in - uint64 m_ulSteamIDGameServer; // the new game server that has been created or found for the lobby members - uint32 m_unIP; // IP & Port of the game server (if any) - uint16 m_usPort; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Number of matching lobbies found -// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1 -//----------------------------------------------------------------------------- -struct LobbyMatchList_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 10 }; - uint32 m_nLobbiesMatching; // Number of lobbies that matched search criteria and we have SteamIDs for -}; - - -//----------------------------------------------------------------------------- -// Purpose: posted if a user is forcefully removed from a lobby -// can occur if a user loses connection to Steam -//----------------------------------------------------------------------------- -struct LobbyKicked_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 12 }; - uint64 m_ulSteamIDLobby; // Lobby - uint64 m_ulSteamIDAdmin; // User who kicked you - possibly the ID of the lobby itself - uint8 m_bKickedDueToDisconnect; // true if you were kicked from the lobby due to the user losing connection to Steam (currently always true) -}; - - -//----------------------------------------------------------------------------- -// Purpose: Result of our request to create a Lobby -// m_eResult == k_EResultOK on success -// at this point, the lobby has been joined and is ready for use -// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby) -//----------------------------------------------------------------------------- -struct LobbyCreated_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 13 }; - - EResult m_eResult; // k_EResultOK - the lobby was successfully created - // k_EResultNoConnection - your Steam client doesn't have a connection to the back-end - // k_EResultTimeout - you the message to the Steam servers, but it didn't respond - // k_EResultFail - the server responded, but with an unknown internal error - // k_EResultAccessDenied - your game isn't set to allow lobbies, or your client does haven't rights to play the game - // k_EResultLimitExceeded - your game client has created too many lobbies - - uint64 m_ulSteamIDLobby; // chat room, zero if failed -}; - -// used by now obsolete RequestFriendsLobbiesResponse_t -// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 }; - - -//----------------------------------------------------------------------------- -// Purpose: Result of CheckForPSNGameBootInvite -// m_eResult == k_EResultOK on success -// at this point, the local user may not have finishing joining this lobby; -// game code should wait until the subsequent LobbyEnter_t callback is received -//----------------------------------------------------------------------------- -struct PSNGameBootInviteResult_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 15 }; - - bool m_bGameBootInviteExists; - CSteamID m_steamIDLobby; // Should be valid if m_bGameBootInviteExists == true -}; - - -//----------------------------------------------------------------------------- -// Purpose: Result of our request to create a Lobby -// m_eResult == k_EResultOK on success -// at this point, the lobby has been joined and is ready for use -// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby) -//----------------------------------------------------------------------------- -struct FavoritesListAccountsUpdated_t -{ - enum { k_iCallback = k_iSteamMatchmakingCallbacks + 16 }; - - EResult m_eResult; -}; - -#pragma pack( pop ) - - -#endif // ISTEAMMATCHMAKING diff --git a/ScreenPlay/ThirdParty/steam/isteammusic.h b/ScreenPlay/ThirdParty/steam/isteammusic.h deleted file mode 100644 index 779a4c2e..00000000 --- a/ScreenPlay/ThirdParty/steam/isteammusic.h +++ /dev/null @@ -1,67 +0,0 @@ -//============ Copyright (c) Valve Corporation, All rights reserved. ============ - -#ifndef ISTEAMMUSIC_H -#define ISTEAMMUSIC_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -//----------------------------------------------------------------------------- -// Purpose: -//----------------------------------------------------------------------------- -enum AudioPlayback_Status -{ - AudioPlayback_Undefined = 0, - AudioPlayback_Playing = 1, - AudioPlayback_Paused = 2, - AudioPlayback_Idle = 3 -}; - - -//----------------------------------------------------------------------------- -// Purpose: Functions to control music playback in the steam client -//----------------------------------------------------------------------------- -class ISteamMusic -{ -public: - virtual bool BIsEnabled() = 0; - virtual bool BIsPlaying() = 0; - - virtual AudioPlayback_Status GetPlaybackStatus() = 0; - - virtual void Play() = 0; - virtual void Pause() = 0; - virtual void PlayPrevious() = 0; - virtual void PlayNext() = 0; - - // volume is between 0.0 and 1.0 - virtual void SetVolume( float flVolume ) = 0; - virtual float GetVolume() = 0; - -}; - -#define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -DEFINE_CALLBACK( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 ) - CALLBACK_MEMBER( 0, float, m_flNewVolume ) -END_DEFINE_CALLBACK_1() - -#pragma pack( pop ) - - -#endif // #define ISTEAMMUSIC_H diff --git a/ScreenPlay/ThirdParty/steam/isteammusicremote.h b/ScreenPlay/ThirdParty/steam/isteammusicremote.h deleted file mode 100644 index ea29a7de..00000000 --- a/ScreenPlay/ThirdParty/steam/isteammusicremote.h +++ /dev/null @@ -1,129 +0,0 @@ -//============ Copyright (c) Valve Corporation, All rights reserved. ============ - -#ifndef ISTEAMMUSICREMOTE_H -#define ISTEAMMUSICREMOTE_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" -#include "isteammusic.h" - -#define k_SteamMusicNameMaxLength 255 -#define k_SteamMusicPNGMaxLength 65535 - - -class ISteamMusicRemote -{ -public: - // Service Definition - virtual bool RegisterSteamMusicRemote( const char *pchName ) = 0; - virtual bool DeregisterSteamMusicRemote() = 0; - virtual bool BIsCurrentMusicRemote() = 0; - virtual bool BActivationSuccess( bool bValue ) = 0; - - virtual bool SetDisplayName( const char *pchDisplayName ) = 0; - virtual bool SetPNGIcon_64x64( void *pvBuffer, uint32 cbBufferLength ) = 0; - - // Abilities for the user interface - virtual bool EnablePlayPrevious(bool bValue) = 0; - virtual bool EnablePlayNext( bool bValue ) = 0; - virtual bool EnableShuffled( bool bValue ) = 0; - virtual bool EnableLooped( bool bValue ) = 0; - virtual bool EnableQueue( bool bValue ) = 0; - virtual bool EnablePlaylists( bool bValue ) = 0; - - // Status - virtual bool UpdatePlaybackStatus( AudioPlayback_Status nStatus ) = 0; - virtual bool UpdateShuffled( bool bValue ) = 0; - virtual bool UpdateLooped( bool bValue ) = 0; - virtual bool UpdateVolume( float flValue ) = 0; // volume is between 0.0 and 1.0 - - // Current Entry - virtual bool CurrentEntryWillChange() = 0; - virtual bool CurrentEntryIsAvailable( bool bAvailable ) = 0; - virtual bool UpdateCurrentEntryText( const char *pchText ) = 0; - virtual bool UpdateCurrentEntryElapsedSeconds( int nValue ) = 0; - virtual bool UpdateCurrentEntryCoverArt( void *pvBuffer, uint32 cbBufferLength ) = 0; - virtual bool CurrentEntryDidChange() = 0; - - // Queue - virtual bool QueueWillChange() = 0; - virtual bool ResetQueueEntries() = 0; - virtual bool SetQueueEntry( int nID, int nPosition, const char *pchEntryText ) = 0; - virtual bool SetCurrentQueueEntry( int nID ) = 0; - virtual bool QueueDidChange() = 0; - - // Playlist - virtual bool PlaylistWillChange() = 0; - virtual bool ResetPlaylistEntries() = 0; - virtual bool SetPlaylistEntry( int nID, int nPosition, const char *pchEntryText ) = 0; - virtual bool SetCurrentPlaylistEntry( int nID ) = 0; - virtual bool PlaylistDidChange() = 0; -}; - -#define STEAMMUSICREMOTE_INTERFACE_VERSION "STEAMMUSICREMOTE_INTERFACE_VERSION001" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -DEFINE_CALLBACK( MusicPlayerRemoteWillActivate_t, k_iSteamMusicRemoteCallbacks + 1) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerRemoteWillDeactivate_t, k_iSteamMusicRemoteCallbacks + 2 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerRemoteToFront_t, k_iSteamMusicRemoteCallbacks + 3 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerWillQuit_t, k_iSteamMusicRemoteCallbacks + 4 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerWantsPlay_t, k_iSteamMusicRemoteCallbacks + 5 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerWantsPause_t, k_iSteamMusicRemoteCallbacks + 6 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerWantsPlayPrevious_t, k_iSteamMusicRemoteCallbacks + 7 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerWantsPlayNext_t, k_iSteamMusicRemoteCallbacks + 8 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( MusicPlayerWantsShuffled_t, k_iSteamMusicRemoteCallbacks + 9 ) - CALLBACK_MEMBER( 0, bool, m_bShuffled ) -END_DEFINE_CALLBACK_1() - -DEFINE_CALLBACK( MusicPlayerWantsLooped_t, k_iSteamMusicRemoteCallbacks + 10 ) - CALLBACK_MEMBER(0, bool, m_bLooped ) -END_DEFINE_CALLBACK_1() - -DEFINE_CALLBACK( MusicPlayerWantsVolume_t, k_iSteamMusicCallbacks + 11 ) - CALLBACK_MEMBER(0, float, m_flNewVolume) -END_DEFINE_CALLBACK_1() - -DEFINE_CALLBACK( MusicPlayerSelectsQueueEntry_t, k_iSteamMusicCallbacks + 12 ) - CALLBACK_MEMBER(0, int, nID ) -END_DEFINE_CALLBACK_1() - -DEFINE_CALLBACK( MusicPlayerSelectsPlaylistEntry_t, k_iSteamMusicCallbacks + 13 ) - CALLBACK_MEMBER(0, int, nID ) -END_DEFINE_CALLBACK_1() - -DEFINE_CALLBACK( MusicPlayerWantsPlayingRepeatStatus_t, k_iSteamMusicRemoteCallbacks + 14 ) - CALLBACK_MEMBER(0, int, m_nPlayingRepeatStatus ) -END_DEFINE_CALLBACK_1() - -#pragma pack( pop ) - - - -#endif // #define ISTEAMMUSICREMOTE_H diff --git a/ScreenPlay/ThirdParty/steam/isteamnetworking.h b/ScreenPlay/ThirdParty/steam/isteamnetworking.h deleted file mode 100644 index 8f70819d..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamnetworking.h +++ /dev/null @@ -1,306 +0,0 @@ -//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to steam managing network connections between game clients & servers -// -//============================================================================= - -#ifndef ISTEAMNETWORKING -#define ISTEAMNETWORKING -#ifdef _WIN32 -#pragma once -#endif - -#include "steamtypes.h" -#include "steamclientpublic.h" - - -// list of possible errors returned by SendP2PPacket() API -// these will be posted in the P2PSessionConnectFail_t callback -enum EP2PSessionError -{ - k_EP2PSessionErrorNone = 0, - k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game - k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running - k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam - k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser() - // corporate firewalls can also block this (NAT traversal is not firewall traversal) - // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction - k_EP2PSessionErrorMax = 5 -}; - -// SendP2PPacket() send types -// Typically k_EP2PSendUnreliable is what you want for UDP-like packets, k_EP2PSendReliable for TCP-like packets -enum EP2PSend -{ - // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare). - // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or - // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again. - k_EP2PSendUnreliable = 0, - - // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first - // packet sent to a remote host almost guarantees the packet will be dropped. - // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets - k_EP2PSendUnreliableNoDelay = 1, - - // Reliable message send. Can send up to 1MB of data in a single message. - // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data. - k_EP2PSendReliable = 2, - - // As above, but applies the Nagle algorithm to the send - sends will accumulate - // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm). - // Useful if you want to send a set of smaller messages but have the coalesced into a single packet - // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then - // do a normal k_EP2PSendReliable to force all the buffered data to be sent. - k_EP2PSendReliableWithBuffering = 3, - -}; - - -// connection state to a specified user, returned by GetP2PSessionState() -// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif -struct P2PSessionState_t -{ - uint8 m_bConnectionActive; // true if we've got an active open connection - uint8 m_bConnecting; // true if we're currently trying to establish a connection - uint8 m_eP2PSessionError; // last error recorded (see enum above) - uint8 m_bUsingRelay; // true if it's going through a relay server (TURN) - int32 m_nBytesQueuedForSend; - int32 m_nPacketsQueuedForSend; - uint32 m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server. - uint16 m_nRemotePort; // Only exists for compatibility with older authentication api's -}; -#pragma pack( pop ) - - -// handle to a socket -typedef uint32 SNetSocket_t; // CreateP2PConnectionSocket() -typedef uint32 SNetListenSocket_t; // CreateListenSocket() - -// connection progress indicators, used by CreateP2PConnectionSocket() -enum ESNetSocketState -{ - k_ESNetSocketStateInvalid = 0, - - // communication is valid - k_ESNetSocketStateConnected = 1, - - // states while establishing a connection - k_ESNetSocketStateInitiated = 10, // the connection state machine has started - - // p2p connections - k_ESNetSocketStateLocalCandidatesFound = 11, // we've found our local IP info - k_ESNetSocketStateReceivedRemoteCandidates = 12,// we've received information from the remote machine, via the Steam back-end, about their IP info - - // direct connections - k_ESNetSocketStateChallengeHandshake = 15, // we've received a challenge packet from the server - - // failure states - k_ESNetSocketStateDisconnecting = 21, // the API shut it down, and we're in the process of telling the other end - k_ESNetSocketStateLocalDisconnect = 22, // the API shut it down, and we've completed shutdown - k_ESNetSocketStateTimeoutDuringConnect = 23, // we timed out while trying to creating the connection - k_ESNetSocketStateRemoteEndDisconnected = 24, // the remote end has disconnected from us - k_ESNetSocketStateConnectionBroken = 25, // connection has been broken; either the other end has disappeared or our local network connection has broke - -}; - -// describes how the socket is currently connected -enum ESNetSocketConnectionType -{ - k_ESNetSocketConnectionTypeNotConnected = 0, - k_ESNetSocketConnectionTypeUDP = 1, - k_ESNetSocketConnectionTypeUDPRelay = 2, -}; - - -//----------------------------------------------------------------------------- -// Purpose: Functions for making connections and sending data between clients, -// traversing NAT's where possible -//----------------------------------------------------------------------------- -class ISteamNetworking -{ -public: - //////////////////////////////////////////////////////////////////////////////////////////// - // Session-less connection functions - // automatically establishes NAT-traversing or Relay server connections - - // Sends a P2P packet to the specified user - // UDP-like, unreliable and a max packet size of 1200 bytes - // the first packet send may be delayed as the NAT-traversal code runs - // if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t - // see EP2PSend enum above for the descriptions of the different ways of sending packets - // - // nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket() - // with the same channel number in order to retrieve the data on the other end - // using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources - virtual bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 ) = 0; - - // returns true if any data is available for read, and the amount of data that will need to be read - virtual bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 ) = 0; - - // reads in a packet that has been sent from another user via SendP2PPacket() - // returns the size of the message and the steamID of the user who sent it in the last two parameters - // if the buffer passed in is too small, the message will be truncated - // this call is not blocking, and will return false if no data is available - virtual bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 ) = 0; - - // AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback - // P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet - // if you don't want to talk to the user, just ignore the request - // if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically - // this may be called multiple times for a single user - // (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request) - virtual bool AcceptP2PSessionWithUser( CSteamID steamIDRemote ) = 0; - - // call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood - // if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted - virtual bool CloseP2PSessionWithUser( CSteamID steamIDRemote ) = 0; - - // call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels - // open channels to a user have been closed, the open session to the user will be closed and new data from this - // user will trigger a P2PSessionRequest_t callback - virtual bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel ) = 0; - - // fills out P2PSessionState_t structure with details about the underlying connection to the user - // should only needed for debugging purposes - // returns false if no connection exists to the specified user - virtual bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState ) = 0; - - // Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection - // or NAT-traversal cannot be established. Only applies to connections created after setting this value, - // or to existing connections that need to automatically reconnect after this value is set. - // - // P2P packet relay is allowed by default - virtual bool AllowP2PPacketRelay( bool bAllow ) = 0; - - - //////////////////////////////////////////////////////////////////////////////////////////// - // LISTEN / CONNECT style interface functions - // - // This is an older set of functions designed around the Berkeley TCP sockets model - // it's preferential that you use the above P2P functions, they're more robust - // and these older functions will be removed eventually - // - //////////////////////////////////////////////////////////////////////////////////////////// - - - // creates a socket and listens others to connect - // will trigger a SocketStatusCallback_t callback on another client connecting - // nVirtualP2PPort is the unique ID that the client will connect to, in case you have multiple ports - // this can usually just be 0 unless you want multiple sets of connections - // unIP is the local IP address to bind to - // pass in 0 if you just want the default local IP - // unPort is the port to use - // pass in 0 if you don't want users to be able to connect via IP/Port, but expect to be always peer-to-peer connections only - virtual SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay ) = 0; - - // creates a socket and begin connection to a remote destination - // can connect via a known steamID (client or game server), or directly to an IP - // on success will trigger a SocketStatusCallback_t callback - // on failure or timeout will trigger a SocketStatusCallback_t callback with a failure code in m_eSNetSocketState - virtual SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay ) = 0; - virtual SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec ) = 0; - - // disconnects the connection to the socket, if any, and invalidates the handle - // any unread data on the socket will be thrown away - // if bNotifyRemoteEnd is set, socket will not be completely destroyed until the remote end acknowledges the disconnect - virtual bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd ) = 0; - // destroying a listen socket will automatically kill all the regular sockets generated from it - virtual bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd ) = 0; - - // sending data - // must be a handle to a connected socket - // data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets - // use the reliable flag with caution; although the resend rate is pretty aggressive, - // it can still cause stalls in receiving data (like TCP) - virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0; - - // receiving data - // returns false if there is no data remaining - // fills out *pcubMsgSize with the size of the next message, in bytes - virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0; - - // fills in pubDest with the contents of the message - // messages are always complete, of the same size as was sent (i.e. packetized, not streaming) - // if *pcubMsgSize < cubDest, only partial data is written - // returns false if no data is available - virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0; - - // checks for data from any socket that has been connected off this listen socket - // returns false if there is no data remaining - // fills out *pcubMsgSize with the size of the next message, in bytes - // fills out *phSocket with the socket that data is available on - virtual bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0; - - // retrieves data from any socket that has been connected off this listen socket - // fills in pubDest with the contents of the message - // messages are always complete, of the same size as was sent (i.e. packetized, not streaming) - // if *pcubMsgSize < cubDest, only partial data is written - // returns false if no data is available - // fills out *phSocket with the socket that data is available on - virtual bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket ) = 0; - - // returns information about the specified socket, filling out the contents of the pointers - virtual bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote ) = 0; - - // returns which local port the listen socket is bound to - // *pnIP and *pnPort will be 0 if the socket is set to listen for P2P connections only - virtual bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort ) = 0; - - // returns true to describe how the socket ended up connecting - virtual ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket ) = 0; - - // max packet size, in bytes - virtual int GetMaxPacketSize( SNetSocket_t hSocket ) = 0; -}; -#define STEAMNETWORKING_INTERFACE_VERSION "SteamNetworking005" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API -// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them -struct P2PSessionRequest_t -{ - enum { k_iCallback = k_iSteamNetworkingCallbacks + 2 }; - CSteamID m_steamIDRemote; // user who wants to talk to us -}; - - -// callback notification - packets can't get through to the specified user via the SendP2PPacket() API -// all packets queued packets unsent at this point will be dropped -// further attempts to send will retry making the connection (but will be dropped if we fail again) -struct P2PSessionConnectFail_t -{ - enum { k_iCallback = k_iSteamNetworkingCallbacks + 3 }; - CSteamID m_steamIDRemote; // user we were sending packets to - uint8 m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble -}; - - -// callback notification - status of a socket has changed -// used as part of the CreateListenSocket() / CreateP2PConnectionSocket() -struct SocketStatusCallback_t -{ - enum { k_iCallback = k_iSteamNetworkingCallbacks + 1 }; - SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host - SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection - CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one - int m_eSNetSocketState; // socket state, ESNetSocketState -}; - -#pragma pack( pop ) - -#endif // ISTEAMNETWORKING diff --git a/ScreenPlay/ThirdParty/steam/isteamparentalsettings.h b/ScreenPlay/ThirdParty/steam/isteamparentalsettings.h deleted file mode 100644 index 1b6ba9f8..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamparentalsettings.h +++ /dev/null @@ -1,57 +0,0 @@ -//====== Copyright � 2013-, Valve Corporation, All rights reserved. ======= -// -// Purpose: Interface to Steam parental settings (Family View) -// -//============================================================================= - -#ifndef ISTEAMPARENTALSETTINGS_H -#define ISTEAMPARENTALSETTINGS_H -#ifdef _WIN32 -#pragma once -#endif - -// Feature types for parental settings -enum EParentalFeature -{ - k_EFeatureInvalid = 0, - k_EFeatureStore = 1, - k_EFeatureCommunity = 2, - k_EFeatureProfile = 3, - k_EFeatureFriends = 4, - k_EFeatureNews = 5, - k_EFeatureTrading = 6, - k_EFeatureSettings = 7, - k_EFeatureConsole = 8, - k_EFeatureBrowser = 9, - k_EFeatureParentalSetup = 10, - k_EFeatureLibrary = 11, - k_EFeatureTest = 12, - k_EFeatureMax -}; - -class ISteamParentalSettings -{ -public: - virtual bool BIsParentalLockEnabled() = 0; - virtual bool BIsParentalLockLocked() = 0; - - virtual bool BIsAppBlocked( AppId_t nAppID ) = 0; - virtual bool BIsAppInBlockList( AppId_t nAppID ) = 0; - - virtual bool BIsFeatureBlocked( EParentalFeature eFeature ) = 0; - virtual bool BIsFeatureInBlockList( EParentalFeature eFeature ) = 0; -}; - -#define STEAMPARENTALSETTINGS_INTERFACE_VERSION "STEAMPARENTALSETTINGS_INTERFACE_VERSION001" - - -//----------------------------------------------------------------------------- -// Purpose: Callback for querying UGC -//----------------------------------------------------------------------------- -struct SteamParentalSettingsChanged_t -{ - enum { k_iCallback = k_ISteamParentalSettingsCallbacks + 1 }; -}; - - -#endif // ISTEAMPARENTALSETTINGS_H diff --git a/ScreenPlay/ThirdParty/steam/isteamps3overlayrenderer.h b/ScreenPlay/ThirdParty/steam/isteamps3overlayrenderer.h deleted file mode 100644 index 4e07d4a1..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamps3overlayrenderer.h +++ /dev/null @@ -1,91 +0,0 @@ -//====== Copyright © 1996-2010, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface the game must provide Steam with on PS3 in order for the -// Steam overlay to render. -// -//============================================================================= - -#ifndef ISTEAMPS3OVERLAYRENDERER_H -#define ISTEAMPS3OVERLAYRENDERER_H -#ifdef _WIN32 -#pragma once -#endif - -#include "cell/pad.h" - -//----------------------------------------------------------------------------- -// Purpose: Enum for supported gradient directions -//----------------------------------------------------------------------------- -enum EOverlayGradientDirection -{ - k_EOverlayGradientHorizontal = 1, - k_EOverlayGradientVertical = 2, - k_EOverlayGradientNone = 3, -}; - -// Helpers for fetching individual color components from ARGB packed DWORD colors Steam PS3 overlay renderer uses. -#define STEAM_COLOR_RED( color ) \ - (int)(((color)>>16)&0xff) - -#define STEAM_COLOR_GREEN( color ) \ - (int)(((color)>>8)&0xff) - -#define STEAM_COLOR_BLUE( color ) \ - (int)((color)&0xff) - -#define STEAM_COLOR_ALPHA( color ) \ - (int)(((color)>>24)&0xff) - - -//----------------------------------------------------------------------------- -// Purpose: Interface the game must expose to Steam for rendering -//----------------------------------------------------------------------------- -class ISteamPS3OverlayRenderHost -{ -public: - - // Interface for game engine to implement which Steam requires to render. - - // Draw a textured rect. This may use only part of the texture and will pass texture coords, it will also possibly request a gradient and will specify colors for vertexes. - virtual void DrawTexturedRect( int x0, int y0, int x1, int y1, float u0, float v0, float u1, float v1, int32 iTextureID, DWORD colorStart, DWORD colorEnd, EOverlayGradientDirection eDirection ) = 0; - - // Load a RGBA texture for Steam, or update a previously loaded one. Updates may be partial. You must not evict or remove this texture once Steam has uploaded it. - virtual void LoadOrUpdateTexture( int32 iTextureID, bool bIsFullTexture, int x0, int y0, uint32 uWidth, uint32 uHeight, int32 iBytes, char *pData ) = 0; - - // Delete a texture Steam previously uploaded - virtual void DeleteTexture( int32 iTextureID ) = 0; - - // Delete all previously uploaded textures - virtual void DeleteAllTextures() = 0; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Interface Steam exposes for the game to tell it when to render, etc. -//----------------------------------------------------------------------------- -class ISteamPS3OverlayRender -{ -public: - - // Call once at startup to initialize the Steam overlay and pass it your host interface ptr - virtual bool BHostInitialize( uint32 unScreenWidth, uint32 unScreenHeight, uint32 unRefreshRate, ISteamPS3OverlayRenderHost *pRenderHost, void *CellFontLib ) = 0; - - // Call this once a frame when you are ready for the Steam overlay to render (ie, right before flipping buffers, after all your rendering) - virtual void Render() = 0; - - // Call this everytime you read input on PS3. - // - // If this returns true, then the overlay is active and has consumed the input, your game - // should then ignore all the input until BHandleCellPadData once again returns false, which - // will mean the overlay is deactivated. - virtual bool BHandleCellPadData( const CellPadData &padData ) = 0; - - // Call this if you detect no controllers connected or that the XMB is intercepting input - // - // This is important to clear input state for the overlay, so keys left down during XMB activation - // are not continued to be processed. - virtual bool BResetInputState() = 0; -}; - - -#endif // ISTEAMPS3OVERLAYRENDERER_H \ No newline at end of file diff --git a/ScreenPlay/ThirdParty/steam/isteamremotestorage.h b/ScreenPlay/ThirdParty/steam/isteamremotestorage.h deleted file mode 100644 index 3ac28719..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamremotestorage.h +++ /dev/null @@ -1,681 +0,0 @@ -//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: public interface to user remote file storage in Steam -// -//============================================================================= - -#ifndef ISTEAMREMOTESTORAGE_H -#define ISTEAMREMOTESTORAGE_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - - -//----------------------------------------------------------------------------- -// Purpose: Defines the largest allowed file size. Cloud files cannot be written -// in a single chunk over 100MB (and cannot be over 200MB total.) -//----------------------------------------------------------------------------- -const uint32 k_unMaxCloudFileChunkSize = 100 * 1024 * 1024; - - -//----------------------------------------------------------------------------- -// Purpose: Structure that contains an array of const char * strings and the number of those strings -//----------------------------------------------------------------------------- -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif -struct SteamParamStringArray_t -{ - const char ** m_ppStrings; - int32 m_nNumStrings; -}; -#pragma pack( pop ) - -// A handle to a piece of user generated content -typedef uint64 UGCHandle_t; -typedef uint64 PublishedFileUpdateHandle_t; -typedef uint64 PublishedFileId_t; -const PublishedFileId_t k_PublishedFileIdInvalid = 0; -const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull; -const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull; - -// Handle for writing to Steam Cloud -typedef uint64 UGCFileWriteStreamHandle_t; -const UGCFileWriteStreamHandle_t k_UGCFileStreamHandleInvalid = 0xffffffffffffffffull; - -const uint32 k_cchPublishedDocumentTitleMax = 128 + 1; -const uint32 k_cchPublishedDocumentDescriptionMax = 8000; -const uint32 k_cchPublishedDocumentChangeDescriptionMax = 8000; -const uint32 k_unEnumeratePublishedFilesMaxResults = 50; -const uint32 k_cchTagListMax = 1024 + 1; -const uint32 k_cchFilenameMax = 260; -const uint32 k_cchPublishedFileURLMax = 256; - - -enum ERemoteStoragePlatform -{ - k_ERemoteStoragePlatformNone = 0, - k_ERemoteStoragePlatformWindows = (1 << 0), - k_ERemoteStoragePlatformOSX = (1 << 1), - k_ERemoteStoragePlatformPS3 = (1 << 2), - k_ERemoteStoragePlatformLinux = (1 << 3), - k_ERemoteStoragePlatformReserved2 = (1 << 4), - - k_ERemoteStoragePlatformAll = 0xffffffff -}; - -enum ERemoteStoragePublishedFileVisibility -{ - k_ERemoteStoragePublishedFileVisibilityPublic = 0, - k_ERemoteStoragePublishedFileVisibilityFriendsOnly = 1, - k_ERemoteStoragePublishedFileVisibilityPrivate = 2, -}; - - -enum EWorkshopFileType -{ - k_EWorkshopFileTypeFirst = 0, - - k_EWorkshopFileTypeCommunity = 0, // normal Workshop item that can be subscribed to - k_EWorkshopFileTypeMicrotransaction = 1, // Workshop item that is meant to be voted on for the purpose of selling in-game - k_EWorkshopFileTypeCollection = 2, // a collection of Workshop or Greenlight items - k_EWorkshopFileTypeArt = 3, // artwork - k_EWorkshopFileTypeVideo = 4, // external video - k_EWorkshopFileTypeScreenshot = 5, // screenshot - k_EWorkshopFileTypeGame = 6, // Greenlight game entry - k_EWorkshopFileTypeSoftware = 7, // Greenlight software entry - k_EWorkshopFileTypeConcept = 8, // Greenlight concept - k_EWorkshopFileTypeWebGuide = 9, // Steam web guide - k_EWorkshopFileTypeIntegratedGuide = 10, // application integrated guide - k_EWorkshopFileTypeMerch = 11, // Workshop merchandise meant to be voted on for the purpose of being sold - k_EWorkshopFileTypeControllerBinding = 12, // Steam Controller bindings - k_EWorkshopFileTypeSteamworksAccessInvite = 13, // internal - k_EWorkshopFileTypeSteamVideo = 14, // Steam video - k_EWorkshopFileTypeGameManagedItem = 15, // managed completely by the game, not the user, and not shown on the web - - // Update k_EWorkshopFileTypeMax if you add values. - k_EWorkshopFileTypeMax = 16 - -}; - -enum EWorkshopVote -{ - k_EWorkshopVoteUnvoted = 0, - k_EWorkshopVoteFor = 1, - k_EWorkshopVoteAgainst = 2, - k_EWorkshopVoteLater = 3, -}; - -enum EWorkshopFileAction -{ - k_EWorkshopFileActionPlayed = 0, - k_EWorkshopFileActionCompleted = 1, -}; - -enum EWorkshopEnumerationType -{ - k_EWorkshopEnumerationTypeRankedByVote = 0, - k_EWorkshopEnumerationTypeRecent = 1, - k_EWorkshopEnumerationTypeTrending = 2, - k_EWorkshopEnumerationTypeFavoritesOfFriends = 3, - k_EWorkshopEnumerationTypeVotedByFriends = 4, - k_EWorkshopEnumerationTypeContentByFriends = 5, - k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6, -}; - -enum EWorkshopVideoProvider -{ - k_EWorkshopVideoProviderNone = 0, - k_EWorkshopVideoProviderYoutube = 1 -}; - - -enum EUGCReadAction -{ - // Keeps the file handle open unless the last byte is read. You can use this when reading large files (over 100MB) in sequential chunks. - // If the last byte is read, this will behave the same as k_EUGCRead_Close. Otherwise, it behaves the same as k_EUGCRead_ContinueReading. - // This value maintains the same behavior as before the EUGCReadAction parameter was introduced. - k_EUGCRead_ContinueReadingUntilFinished = 0, - - // Keeps the file handle open. Use this when using UGCRead to seek to different parts of the file. - // When you are done seeking around the file, make a final call with k_EUGCRead_Close to close it. - k_EUGCRead_ContinueReading = 1, - - // Frees the file handle. Use this when you're done reading the content. - // To read the file from Steam again you will need to call UGCDownload again. - k_EUGCRead_Close = 2, -}; - - -//----------------------------------------------------------------------------- -// Purpose: Functions for accessing, reading and writing files stored remotely -// and cached locally -//----------------------------------------------------------------------------- -class ISteamRemoteStorage -{ - public: - // NOTE - // - // Filenames are case-insensitive, and will be converted to lowercase automatically. - // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then - // iterate the files, the filename returned will be "foo.bar". - // - - // file operations - virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0; - virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0; - - CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t ) - virtual SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) = 0; - - CALL_RESULT( RemoteStorageFileReadAsyncComplete_t ) - virtual SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToRead ) = 0; - virtual bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cubToRead ) = 0; - - virtual bool FileForget( const char *pchFile ) = 0; - virtual bool FileDelete( const char *pchFile ) = 0; - CALL_RESULT( RemoteStorageFileShareResult_t ) - virtual SteamAPICall_t FileShare( const char *pchFile ) = 0; - virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0; - - // file operations that cause network IO - virtual UGCFileWriteStreamHandle_t FileWriteStreamOpen( const char *pchFile ) = 0; - virtual bool FileWriteStreamWriteChunk( UGCFileWriteStreamHandle_t writeHandle, const void *pvData, int32 cubData ) = 0; - virtual bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) = 0; - virtual bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) = 0; - - // file information - virtual bool FileExists( const char *pchFile ) = 0; - virtual bool FilePersisted( const char *pchFile ) = 0; - virtual int32 GetFileSize( const char *pchFile ) = 0; - virtual int64 GetFileTimestamp( const char *pchFile ) = 0; - virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0; - - // iteration - virtual int32 GetFileCount() = 0; - virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0; - - // configuration management - virtual bool GetQuota( uint64 *pnTotalBytes, uint64 *puAvailableBytes ) = 0; - virtual bool IsCloudEnabledForAccount() = 0; - virtual bool IsCloudEnabledForApp() = 0; - virtual void SetCloudEnabledForApp( bool bEnabled ) = 0; - - // user generated content - - // Downloads a UGC file. A priority value of 0 will download the file immediately, - // otherwise it will wait to download the file until all downloads with a lower priority - // value are completed. Downloads with equal priority will occur simultaneously. - CALL_RESULT( RemoteStorageDownloadUGCResult_t ) - virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) = 0; - - // Gets the amount of data downloaded so far for a piece of content. pnBytesExpected can be 0 if function returns false - // or if the transfer hasn't started yet, so be careful to check for that before dividing to get a percentage - virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, int32 *pnBytesDownloaded, int32 *pnBytesExpected ) = 0; - - // Gets metadata for a file after it has been downloaded. This is the same metadata given in the RemoteStorageDownloadUGCResult_t call result - virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, OUT_STRING() char **ppchName, int32 *pnFileSizeInBytes, OUT_STRUCT() CSteamID *pSteamIDOwner ) = 0; - - // After download, gets the content of the file. - // Small files can be read all at once by calling this function with an offset of 0 and cubDataToRead equal to the size of the file. - // Larger files can be read in chunks to reduce memory usage (since both sides of the IPC client and the game itself must allocate - // enough memory for each chunk). Once the last byte is read, the file is implicitly closed and further calls to UGCRead will fail - // unless UGCDownload is called again. - // For especially large files (anything over 100MB) it is a requirement that the file is read in chunks. - virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 cOffset, EUGCReadAction eAction ) = 0; - - // Functions to iterate through UGC that has finished downloading but has not yet been read via UGCRead() - virtual int32 GetCachedUGCCount() = 0; - virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0; - - // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you - // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget. - -#if defined(_PS3) || defined(_SERVER) - // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback - virtual void GetFileListFromServer() = 0; - // Indicate this file should be downloaded in the next sync - virtual bool FileFetch( const char *pchFile ) = 0; - // Indicate this file should be persisted in the next sync - virtual bool FilePersist( const char *pchFile ) = 0; - // Pull any requested files down from the Cloud - results in a RemoteStorageAppSyncedClient_t callback - virtual bool SynchronizeToClient() = 0; - // Upload any requested files to the Cloud - results in a RemoteStorageAppSyncedServer_t callback - virtual bool SynchronizeToServer() = 0; - // Reset any fetch/persist/etc requests - virtual bool ResetFileRequestState() = 0; -#endif - - // publishing UGC - CALL_RESULT( RemoteStoragePublishFileProgress_t ) - virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0; - virtual PublishedFileUpdateHandle_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0; - virtual bool UpdatePublishedFileFile( PublishedFileUpdateHandle_t updateHandle, const char *pchFile ) = 0; - virtual bool UpdatePublishedFilePreviewFile( PublishedFileUpdateHandle_t updateHandle, const char *pchPreviewFile ) = 0; - virtual bool UpdatePublishedFileTitle( PublishedFileUpdateHandle_t updateHandle, const char *pchTitle ) = 0; - virtual bool UpdatePublishedFileDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchDescription ) = 0; - virtual bool UpdatePublishedFileVisibility( PublishedFileUpdateHandle_t updateHandle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; - virtual bool UpdatePublishedFileTags( PublishedFileUpdateHandle_t updateHandle, SteamParamStringArray_t *pTags ) = 0; - CALL_RESULT( RemoteStorageUpdatePublishedFileResult_t ) - virtual SteamAPICall_t CommitPublishedFileUpdate( PublishedFileUpdateHandle_t updateHandle ) = 0; - // Gets published file details for the given publishedfileid. If unMaxSecondsOld is greater than 0, - // cached data may be returned, depending on how long ago it was cached. A value of 0 will force a refresh. - // A value of k_WorkshopForceLoadPublishedFileDetailsFromCache will use cached data if it exists, no matter how old it is. - CALL_RESULT( RemoteStorageGetPublishedFileDetailsResult_t ) - virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 unMaxSecondsOld ) = 0; - CALL_RESULT( RemoteStorageDeletePublishedFileResult_t ) - virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0; - // enumerate the files that the current user published with this app - CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t ) - virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 unStartIndex ) = 0; - CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t ) - virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0; - CALL_RESULT( RemoteStorageEnumerateUserSubscribedFilesResult_t ) - virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 unStartIndex ) = 0; - CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t ) - virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0; - virtual bool UpdatePublishedFileSetChangeDescription( PublishedFileUpdateHandle_t updateHandle, const char *pchChangeDescription ) = 0; - CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t ) - virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0; - CALL_RESULT( RemoteStorageUpdateUserPublishedItemVoteResult_t ) - virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0; - CALL_RESULT( RemoteStorageGetPublishedItemVoteDetailsResult_t ) - virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0; - CALL_RESULT( RemoteStorageEnumerateUserPublishedFilesResult_t ) - virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( CSteamID steamId, uint32 unStartIndex, SteamParamStringArray_t *pRequiredTags, SteamParamStringArray_t *pExcludedTags ) = 0; - CALL_RESULT( RemoteStoragePublishFileProgress_t ) - virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *pchVideoAccount, const char *pchVideoIdentifier, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0; - CALL_RESULT( RemoteStorageSetUserPublishedFileActionResult_t ) - virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0; - CALL_RESULT( RemoteStorageEnumeratePublishedFilesByUserActionResult_t ) - virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 unStartIndex ) = 0; - // this method enumerates the public view of workshop files - CALL_RESULT( RemoteStorageEnumerateWorkshopFilesResult_t ) - virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eEnumerationType, uint32 unStartIndex, uint32 unCount, uint32 unDays, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0; - - CALL_RESULT( RemoteStorageDownloadUGCResult_t ) - virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *pchLocation, uint32 unPriority ) = 0; -}; - -#define STEAMREMOTESTORAGE_INTERFACE_VERSION "STEAMREMOTESTORAGE_INTERFACE_VERSION014" - - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: sent when the local file cache is fully synced with the server for an app -// That means that an application can be started and has all latest files -//----------------------------------------------------------------------------- -struct RemoteStorageAppSyncedClient_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 1 }; - AppId_t m_nAppID; - EResult m_eResult; - int m_unNumDownloads; -}; - -//----------------------------------------------------------------------------- -// Purpose: sent when the server is fully synced with the local file cache for an app -// That means that we can shutdown Steam and our data is stored on the server -//----------------------------------------------------------------------------- -struct RemoteStorageAppSyncedServer_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 2 }; - AppId_t m_nAppID; - EResult m_eResult; - int m_unNumUploads; -}; - -//----------------------------------------------------------------------------- -// Purpose: Status of up and downloads during a sync session -// -//----------------------------------------------------------------------------- -struct RemoteStorageAppSyncProgress_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 3 }; - char m_rgchCurrentFile[k_cchFilenameMax]; // Current file being transferred - AppId_t m_nAppID; // App this info relates to - uint32 m_uBytesTransferredThisChunk; // Bytes transferred this chunk - double m_dAppPercentComplete; // Percent complete that this app's transfers are - bool m_bUploading; // if false, downloading -}; - -// -// IMPORTANT! k_iClientRemoteStorageCallbacks + 4 is used, see iclientremotestorage.h -// - - -//----------------------------------------------------------------------------- -// Purpose: Sent after we've determined the list of files that are out of sync -// with the server. -//----------------------------------------------------------------------------- -struct RemoteStorageAppSyncStatusCheck_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 5 }; - AppId_t m_nAppID; - EResult m_eResult; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to FileShare() -//----------------------------------------------------------------------------- -struct RemoteStorageFileShareResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 7 }; - EResult m_eResult; // The result of the operation - UGCHandle_t m_hFile; // The handle that can be shared with users and features - char m_rgchFilename[k_cchFilenameMax]; // The name of the file that was shared -}; - - -// k_iClientRemoteStorageCallbacks + 8 is deprecated! Do not reuse - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to PublishFile() -//----------------------------------------------------------------------------- -struct RemoteStoragePublishFileResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 9 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; - bool m_bUserNeedsToAcceptWorkshopLegalAgreement; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to DeletePublishedFile() -//----------------------------------------------------------------------------- -struct RemoteStorageDeletePublishedFileResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 11 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to EnumerateUserPublishedFiles() -//----------------------------------------------------------------------------- -struct RemoteStorageEnumerateUserPublishedFilesResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 12 }; - EResult m_eResult; // The result of the operation. - int32 m_nResultsReturned; - int32 m_nTotalResultCount; - PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ]; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to SubscribePublishedFile() -//----------------------------------------------------------------------------- -struct RemoteStorageSubscribePublishedFileResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 13 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to EnumerateSubscribePublishedFiles() -//----------------------------------------------------------------------------- -struct RemoteStorageEnumerateUserSubscribedFilesResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 14 }; - EResult m_eResult; // The result of the operation. - int32 m_nResultsReturned; - int32 m_nTotalResultCount; - PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ]; - uint32 m_rgRTimeSubscribed[ k_unEnumeratePublishedFilesMaxResults ]; -}; - -#if defined(VALVE_CALLBACK_PACK_SMALL) - VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 ); -#elif defined(VALVE_CALLBACK_PACK_LARGE) - VALVE_COMPILE_TIME_ASSERT( sizeof( RemoteStorageEnumerateUserSubscribedFilesResult_t ) == (1 + 1 + 1 + 50 + 100) * 4 + 4 ); -#else -#warning You must first include isteamclient.h -#endif - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to UnsubscribePublishedFile() -//----------------------------------------------------------------------------- -struct RemoteStorageUnsubscribePublishedFileResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 15 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to CommitPublishedFileUpdate() -//----------------------------------------------------------------------------- -struct RemoteStorageUpdatePublishedFileResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 16 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; - bool m_bUserNeedsToAcceptWorkshopLegalAgreement; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to UGCDownload() -//----------------------------------------------------------------------------- -struct RemoteStorageDownloadUGCResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 17 }; - EResult m_eResult; // The result of the operation. - UGCHandle_t m_hFile; // The handle to the file that was attempted to be downloaded. - AppId_t m_nAppID; // ID of the app that created this file. - int32 m_nSizeInBytes; // The size of the file that was downloaded, in bytes. - char m_pchFileName[k_cchFilenameMax]; // The name of the file that was downloaded. - uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content. -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to GetPublishedFileDetails() -//----------------------------------------------------------------------------- -struct RemoteStorageGetPublishedFileDetailsResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 18 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; - AppId_t m_nCreatorAppID; // ID of the app that created this file. - AppId_t m_nConsumerAppID; // ID of the app that will consume this file. - char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document - char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document - UGCHandle_t m_hFile; // The handle of the primary file - UGCHandle_t m_hPreviewFile; // The handle of the preview file - uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content. - uint32 m_rtimeCreated; // time when the published file was created - uint32 m_rtimeUpdated; // time when the published file was last updated - ERemoteStoragePublishedFileVisibility m_eVisibility; - bool m_bBanned; - char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file - bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer - char m_pchFileName[k_cchFilenameMax]; // The name of the primary file - int32 m_nFileSize; // Size of the primary file - int32 m_nPreviewFileSize; // Size of the preview file - char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website) - EWorkshopFileType m_eFileType; // Type of the file - bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop -}; - - -struct RemoteStorageEnumerateWorkshopFilesResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 19 }; - EResult m_eResult; - int32 m_nResultsReturned; - int32 m_nTotalResultCount; - PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ]; - float m_rgScore[ k_unEnumeratePublishedFilesMaxResults ]; - AppId_t m_nAppId; - uint32 m_unStartIndex; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of GetPublishedItemVoteDetails -//----------------------------------------------------------------------------- -struct RemoteStorageGetPublishedItemVoteDetailsResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 20 }; - EResult m_eResult; - PublishedFileId_t m_unPublishedFileId; - int32 m_nVotesFor; - int32 m_nVotesAgainst; - int32 m_nReports; - float m_fScore; -}; - - -//----------------------------------------------------------------------------- -// Purpose: User subscribed to a file for the app (from within the app or on the web) -//----------------------------------------------------------------------------- -struct RemoteStoragePublishedFileSubscribed_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 21 }; - PublishedFileId_t m_nPublishedFileId; // The published file id - AppId_t m_nAppID; // ID of the app that will consume this file. -}; - -//----------------------------------------------------------------------------- -// Purpose: User unsubscribed from a file for the app (from within the app or on the web) -//----------------------------------------------------------------------------- -struct RemoteStoragePublishedFileUnsubscribed_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 22 }; - PublishedFileId_t m_nPublishedFileId; // The published file id - AppId_t m_nAppID; // ID of the app that will consume this file. -}; - - -//----------------------------------------------------------------------------- -// Purpose: Published file that a user owns was deleted (from within the app or the web) -//----------------------------------------------------------------------------- -struct RemoteStoragePublishedFileDeleted_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 23 }; - PublishedFileId_t m_nPublishedFileId; // The published file id - AppId_t m_nAppID; // ID of the app that will consume this file. -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to UpdateUserPublishedItemVote() -//----------------------------------------------------------------------------- -struct RemoteStorageUpdateUserPublishedItemVoteResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 24 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; // The published file id -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to GetUserPublishedItemVoteDetails() -//----------------------------------------------------------------------------- -struct RemoteStorageUserVoteDetails_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 25 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; // The published file id - EWorkshopVote m_eVote; // what the user voted -}; - -struct RemoteStorageEnumerateUserSharedWorkshopFilesResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 26 }; - EResult m_eResult; // The result of the operation. - int32 m_nResultsReturned; - int32 m_nTotalResultCount; - PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ]; -}; - -struct RemoteStorageSetUserPublishedFileActionResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 27 }; - EResult m_eResult; // The result of the operation. - PublishedFileId_t m_nPublishedFileId; // The published file id - EWorkshopFileAction m_eAction; // the action that was attempted -}; - -struct RemoteStorageEnumeratePublishedFilesByUserActionResult_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 28 }; - EResult m_eResult; // The result of the operation. - EWorkshopFileAction m_eAction; // the action that was filtered on - int32 m_nResultsReturned; - int32 m_nTotalResultCount; - PublishedFileId_t m_rgPublishedFileId[ k_unEnumeratePublishedFilesMaxResults ]; - uint32 m_rgRTimeUpdated[ k_unEnumeratePublishedFilesMaxResults ]; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Called periodically while a PublishWorkshopFile is in progress -//----------------------------------------------------------------------------- -struct RemoteStoragePublishFileProgress_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 29 }; - double m_dPercentFile; - bool m_bPreview; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Called when the content for a published file is updated -//----------------------------------------------------------------------------- -struct RemoteStoragePublishedFileUpdated_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 30 }; - PublishedFileId_t m_nPublishedFileId; // The published file id - AppId_t m_nAppID; // ID of the app that will consume this file. - uint64 m_ulUnused; // not used anymore -}; - -//----------------------------------------------------------------------------- -// Purpose: Called when a FileWriteAsync completes -//----------------------------------------------------------------------------- -struct RemoteStorageFileWriteAsyncComplete_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 31 }; - EResult m_eResult; // result -}; - -//----------------------------------------------------------------------------- -// Purpose: Called when a FileReadAsync completes -//----------------------------------------------------------------------------- -struct RemoteStorageFileReadAsyncComplete_t -{ - enum { k_iCallback = k_iClientRemoteStorageCallbacks + 32 }; - SteamAPICall_t m_hFileReadAsync; // call handle of the async read which was made - EResult m_eResult; // result - uint32 m_nOffset; // offset in the file this read was at - uint32 m_cubRead; // amount read - will the <= the amount requested -}; - -#pragma pack( pop ) - - -#endif // ISTEAMREMOTESTORAGE_H diff --git a/ScreenPlay/ThirdParty/steam/isteamscreenshots.h b/ScreenPlay/ThirdParty/steam/isteamscreenshots.h deleted file mode 100644 index 60957056..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamscreenshots.h +++ /dev/null @@ -1,116 +0,0 @@ -//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: public interface to user remote file storage in Steam -// -//============================================================================= - -#ifndef ISTEAMSCREENSHOTS_H -#define ISTEAMSCREENSHOTS_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -const uint32 k_nScreenshotMaxTaggedUsers = 32; -const uint32 k_nScreenshotMaxTaggedPublishedFiles = 32; -const int k_cubUFSTagTypeMax = 255; -const int k_cubUFSTagValueMax = 255; - -// Required with of a thumbnail provided to AddScreenshotToLibrary. If you do not provide a thumbnail -// one will be generated. -const int k_ScreenshotThumbWidth = 200; - -// Handle is valid for the lifetime of your process and no longer -typedef uint32 ScreenshotHandle; -#define INVALID_SCREENSHOT_HANDLE 0 - -enum EVRScreenshotType -{ - k_EVRScreenshotType_None = 0, - k_EVRScreenshotType_Mono = 1, - k_EVRScreenshotType_Stereo = 2, - k_EVRScreenshotType_MonoCubemap = 3, - k_EVRScreenshotType_MonoPanorama = 4, - k_EVRScreenshotType_StereoPanorama = 5 -}; - -//----------------------------------------------------------------------------- -// Purpose: Functions for adding screenshots to the user's screenshot library -//----------------------------------------------------------------------------- -class ISteamScreenshots -{ -public: - // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format. - // The return value is a handle that is valid for the duration of the game process and can be used to apply tags. - virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0; - - // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio - // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format. - // The return value is a handle that is valid for the duration of the game process and can be used to apply tags. - // JPEG, TGA, and PNG formats are supported. - virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchFilename, const char *pchThumbnailFilename, int nWidth, int nHeight ) = 0; - - // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead. - virtual void TriggerScreenshot() = 0; - - // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots, - // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary - // in response. - virtual void HookScreenshots( bool bHook ) = 0; - - // Sets metadata about a screenshot's location (for example, the name of the map) - virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0; - - // Tags a user as being visible in the screenshot - virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0; - - // Tags a published file as being visible in the screenshot - virtual bool TagPublishedFile( ScreenshotHandle hScreenshot, PublishedFileId_t unPublishedFileID ) = 0; - - // Returns true if the app has hooked the screenshot - virtual bool IsScreenshotsHooked() = 0; - - // Adds a VR screenshot to the user's screenshot library from disk in the supported type. - // pchFilename should be the normal 2D image used in the library view - // pchVRFilename should contain the image that matches the correct type - // The return value is a handle that is valid for the duration of the game process and can be used to apply tags. - // JPEG, TGA, and PNG formats are supported. - virtual ScreenshotHandle AddVRScreenshotToLibrary( EVRScreenshotType eType, const char *pchFilename, const char *pchVRFilename ) = 0; -}; - -#define STEAMSCREENSHOTS_INTERFACE_VERSION "STEAMSCREENSHOTS_INTERFACE_VERSION003" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif -//----------------------------------------------------------------------------- -// Purpose: Screenshot successfully written or otherwise added to the library -// and can now be tagged -//----------------------------------------------------------------------------- -struct ScreenshotReady_t -{ - enum { k_iCallback = k_iSteamScreenshotsCallbacks + 1 }; - ScreenshotHandle m_hLocal; - EResult m_eResult; -}; - -//----------------------------------------------------------------------------- -// Purpose: Screenshot has been requested by the user. Only sent if -// HookScreenshots() has been called, in which case Steam will not take -// the screenshot itself. -//----------------------------------------------------------------------------- -struct ScreenshotRequested_t -{ - enum { k_iCallback = k_iSteamScreenshotsCallbacks + 2 }; -}; - -#pragma pack( pop ) - -#endif // ISTEAMSCREENSHOTS_H - diff --git a/ScreenPlay/ThirdParty/steam/isteamugc.h b/ScreenPlay/ThirdParty/steam/isteamugc.h deleted file mode 100644 index 4a7d2964..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamugc.h +++ /dev/null @@ -1,545 +0,0 @@ -//====== Copyright 1996-2013, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to steam ugc -// -//============================================================================= - -#ifndef ISTEAMUGC_H -#define ISTEAMUGC_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - -typedef uint64 UGCQueryHandle_t; -typedef uint64 UGCUpdateHandle_t; - - -const UGCQueryHandle_t k_UGCQueryHandleInvalid = 0xffffffffffffffffull; -const UGCUpdateHandle_t k_UGCUpdateHandleInvalid = 0xffffffffffffffffull; - - -// Matching UGC types for queries -enum EUGCMatchingUGCType -{ - k_EUGCMatchingUGCType_Items = 0, // both mtx items and ready-to-use items - k_EUGCMatchingUGCType_Items_Mtx = 1, - k_EUGCMatchingUGCType_Items_ReadyToUse = 2, - k_EUGCMatchingUGCType_Collections = 3, - k_EUGCMatchingUGCType_Artwork = 4, - k_EUGCMatchingUGCType_Videos = 5, - k_EUGCMatchingUGCType_Screenshots = 6, - k_EUGCMatchingUGCType_AllGuides = 7, // both web guides and integrated guides - k_EUGCMatchingUGCType_WebGuides = 8, - k_EUGCMatchingUGCType_IntegratedGuides = 9, - k_EUGCMatchingUGCType_UsableInGame = 10, // ready-to-use items and integrated guides - k_EUGCMatchingUGCType_ControllerBindings = 11, - k_EUGCMatchingUGCType_GameManagedItems = 12, // game managed items (not managed by users) - k_EUGCMatchingUGCType_All = ~0, // return everything -}; - -// Different lists of published UGC for a user. -// If the current logged in user is different than the specified user, then some options may not be allowed. -enum EUserUGCList -{ - k_EUserUGCList_Published, - k_EUserUGCList_VotedOn, - k_EUserUGCList_VotedUp, - k_EUserUGCList_VotedDown, - k_EUserUGCList_WillVoteLater, - k_EUserUGCList_Favorited, - k_EUserUGCList_Subscribed, - k_EUserUGCList_UsedOrPlayed, - k_EUserUGCList_Followed, -}; - -// Sort order for user published UGC lists (defaults to creation order descending) -enum EUserUGCListSortOrder -{ - k_EUserUGCListSortOrder_CreationOrderDesc, - k_EUserUGCListSortOrder_CreationOrderAsc, - k_EUserUGCListSortOrder_TitleAsc, - k_EUserUGCListSortOrder_LastUpdatedDesc, - k_EUserUGCListSortOrder_SubscriptionDateDesc, - k_EUserUGCListSortOrder_VoteScoreDesc, - k_EUserUGCListSortOrder_ForModeration, -}; - -// Combination of sorting and filtering for queries across all UGC -enum EUGCQuery -{ - k_EUGCQuery_RankedByVote = 0, - k_EUGCQuery_RankedByPublicationDate = 1, - k_EUGCQuery_AcceptedForGameRankedByAcceptanceDate = 2, - k_EUGCQuery_RankedByTrend = 3, - k_EUGCQuery_FavoritedByFriendsRankedByPublicationDate = 4, - k_EUGCQuery_CreatedByFriendsRankedByPublicationDate = 5, - k_EUGCQuery_RankedByNumTimesReported = 6, - k_EUGCQuery_CreatedByFollowedUsersRankedByPublicationDate = 7, - k_EUGCQuery_NotYetRated = 8, - k_EUGCQuery_RankedByTotalVotesAsc = 9, - k_EUGCQuery_RankedByVotesUp = 10, - k_EUGCQuery_RankedByTextSearch = 11, - k_EUGCQuery_RankedByTotalUniqueSubscriptions = 12, - k_EUGCQuery_RankedByPlaytimeTrend = 13, - k_EUGCQuery_RankedByTotalPlaytime = 14, - k_EUGCQuery_RankedByAveragePlaytimeTrend = 15, - k_EUGCQuery_RankedByLifetimeAveragePlaytime = 16, - k_EUGCQuery_RankedByPlaytimeSessionsTrend = 17, - k_EUGCQuery_RankedByLifetimePlaytimeSessions = 18, -}; - -enum EItemUpdateStatus -{ - k_EItemUpdateStatusInvalid = 0, // The item update handle was invalid, job might be finished, listen too SubmitItemUpdateResult_t - k_EItemUpdateStatusPreparingConfig = 1, // The item update is processing configuration data - k_EItemUpdateStatusPreparingContent = 2, // The item update is reading and processing content files - k_EItemUpdateStatusUploadingContent = 3, // The item update is uploading content changes to Steam - k_EItemUpdateStatusUploadingPreviewFile = 4, // The item update is uploading new preview file image - k_EItemUpdateStatusCommittingChanges = 5 // The item update is committing all changes -}; - -enum EItemState -{ - k_EItemStateNone = 0, // item not tracked on client - k_EItemStateSubscribed = 1, // current user is subscribed to this item. Not just cached. - k_EItemStateLegacyItem = 2, // item was created with ISteamRemoteStorage - k_EItemStateInstalled = 4, // item is installed and usable (but maybe out of date) - k_EItemStateNeedsUpdate = 8, // items needs an update. Either because it's not installed yet or creator updated content - k_EItemStateDownloading = 16, // item update is currently downloading - k_EItemStateDownloadPending = 32, // DownloadItem() was called for this item, content isn't available until DownloadItemResult_t is fired -}; - -enum EItemStatistic -{ - k_EItemStatistic_NumSubscriptions = 0, - k_EItemStatistic_NumFavorites = 1, - k_EItemStatistic_NumFollowers = 2, - k_EItemStatistic_NumUniqueSubscriptions = 3, - k_EItemStatistic_NumUniqueFavorites = 4, - k_EItemStatistic_NumUniqueFollowers = 5, - k_EItemStatistic_NumUniqueWebsiteViews = 6, - k_EItemStatistic_ReportScore = 7, - k_EItemStatistic_NumSecondsPlayed = 8, - k_EItemStatistic_NumPlaytimeSessions = 9, - k_EItemStatistic_NumComments = 10, - k_EItemStatistic_NumSecondsPlayedDuringTimePeriod = 11, - k_EItemStatistic_NumPlaytimeSessionsDuringTimePeriod = 12, -}; - -enum EItemPreviewType -{ - k_EItemPreviewType_Image = 0, // standard image file expected (e.g. jpg, png, gif, etc.) - k_EItemPreviewType_YouTubeVideo = 1, // video id is stored - k_EItemPreviewType_Sketchfab = 2, // model id is stored - k_EItemPreviewType_EnvironmentMap_HorizontalCross = 3, // standard image file expected - cube map in the layout - // +---+---+-------+ - // | |Up | | - // +---+---+---+---+ - // | L | F | R | B | - // +---+---+---+---+ - // | |Dn | | - // +---+---+---+---+ - k_EItemPreviewType_EnvironmentMap_LatLong = 4, // standard image file expected - k_EItemPreviewType_ReservedMax = 255, // you can specify your own types above this value -}; - -const uint32 kNumUGCResultsPerPage = 50; -const uint32 k_cchDeveloperMetadataMax = 5000; - -// Details for a single published file/UGC -struct SteamUGCDetails_t -{ - PublishedFileId_t m_nPublishedFileId; - EResult m_eResult; // The result of the operation. - EWorkshopFileType m_eFileType; // Type of the file - AppId_t m_nCreatorAppID; // ID of the app that created this file. - AppId_t m_nConsumerAppID; // ID of the app that will consume this file. - char m_rgchTitle[k_cchPublishedDocumentTitleMax]; // title of document - char m_rgchDescription[k_cchPublishedDocumentDescriptionMax]; // description of document - uint64 m_ulSteamIDOwner; // Steam ID of the user who created this content. - uint32 m_rtimeCreated; // time when the published file was created - uint32 m_rtimeUpdated; // time when the published file was last updated - uint32 m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable) - ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility - bool m_bBanned; // whether the file was banned - bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop - bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer - char m_rgchTags[k_cchTagListMax]; // comma separated list of all tags associated with this file - // file/url information - UGCHandle_t m_hFile; // The handle of the primary file - UGCHandle_t m_hPreviewFile; // The handle of the preview file - char m_pchFileName[k_cchFilenameMax]; // The cloud filename of the primary file - int32 m_nFileSize; // Size of the primary file - int32 m_nPreviewFileSize; // Size of the preview file - char m_rgchURL[k_cchPublishedFileURLMax]; // URL (for a video or a website) - // voting information - uint32 m_unVotesUp; // number of votes up - uint32 m_unVotesDown; // number of votes down - float m_flScore; // calculated score - // collection details - uint32 m_unNumChildren; -}; - -//----------------------------------------------------------------------------- -// Purpose: Steam UGC support API -//----------------------------------------------------------------------------- -class ISteamUGC -{ -public: - - // Query UGC associated with a user. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1. - virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0; - - // Query for all matching UGC. Creator app id or consumer app id must be valid and be set to the current running app. unPage should start at 1. - virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0; - - // Query for the details of the given published file ids (the RequestUGCDetails call is deprecated and replaced with this) - virtual UGCQueryHandle_t CreateQueryUGCDetailsRequest( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0; - - // Send the query to Steam - CALL_RESULT( SteamUGCQueryCompleted_t ) - virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0; - - // Retrieve an individual result after receiving the callback for querying UGC - virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0; - virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0; - virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0; - virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; - virtual bool GetQueryUGCStatistic( UGCQueryHandle_t handle, uint32 index, EItemStatistic eStatType, uint64 *pStatValue ) = 0; - virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0; - virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0; - virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0; - virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0; - - // Release the request to free up memory, after retrieving results - virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0; - - // Options to set for querying UGC - virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0; - virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0; - virtual bool SetReturnOnlyIDs( UGCQueryHandle_t handle, bool bReturnOnlyIDs ) = 0; - virtual bool SetReturnKeyValueTags( UGCQueryHandle_t handle, bool bReturnKeyValueTags ) = 0; - virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0; - virtual bool SetReturnMetadata( UGCQueryHandle_t handle, bool bReturnMetadata ) = 0; - virtual bool SetReturnChildren( UGCQueryHandle_t handle, bool bReturnChildren ) = 0; - virtual bool SetReturnAdditionalPreviews( UGCQueryHandle_t handle, bool bReturnAdditionalPreviews ) = 0; - virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0; - virtual bool SetReturnPlaytimeStats( UGCQueryHandle_t handle, uint32 unDays ) = 0; - virtual bool SetLanguage( UGCQueryHandle_t handle, const char *pchLanguage ) = 0; - virtual bool SetAllowCachedResponse( UGCQueryHandle_t handle, uint32 unMaxAgeSeconds ) = 0; - - // Options only for querying user UGC - virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0; - - // Options only for querying all UGC - virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0; - virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0; - virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0; - virtual bool AddRequiredKeyValueTag( UGCQueryHandle_t handle, const char *pKey, const char *pValue ) = 0; - - // DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead! - virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID, uint32 unMaxAgeSeconds ) = 0; - - // Steam Workshop Creator API - CALL_RESULT( CreateItemResult_t ) - virtual SteamAPICall_t CreateItem( AppId_t nConsumerAppId, EWorkshopFileType eFileType ) = 0; // create new item for this app with no content attached yet - - virtual UGCUpdateHandle_t StartItemUpdate( AppId_t nConsumerAppId, PublishedFileId_t nPublishedFileID ) = 0; // start an UGC item update. Set changed properties before commiting update with CommitItemUpdate() - - virtual bool SetItemTitle( UGCUpdateHandle_t handle, const char *pchTitle ) = 0; // change the title of an UGC item - virtual bool SetItemDescription( UGCUpdateHandle_t handle, const char *pchDescription ) = 0; // change the description of an UGC item - virtual bool SetItemUpdateLanguage( UGCUpdateHandle_t handle, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set - virtual bool SetItemMetadata( UGCUpdateHandle_t handle, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax) - virtual bool SetItemVisibility( UGCUpdateHandle_t handle, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item - virtual bool SetItemTags( UGCUpdateHandle_t updateHandle, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item - virtual bool SetItemContent( UGCUpdateHandle_t handle, const char *pszContentFolder ) = 0; // update item content from this local folder - virtual bool SetItemPreview( UGCUpdateHandle_t handle, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size - virtual bool RemoveItemKeyValueTags( UGCUpdateHandle_t handle, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key - virtual bool AddItemKeyValueTag( UGCUpdateHandle_t handle, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag. - virtual bool AddItemPreviewFile( UGCUpdateHandle_t handle, const char *pszPreviewFile, EItemPreviewType type ) = 0; // add preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size - virtual bool AddItemPreviewVideo( UGCUpdateHandle_t handle, const char *pszVideoID ) = 0; // add preview video for this item - virtual bool UpdateItemPreviewFile( UGCUpdateHandle_t handle, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size - virtual bool UpdateItemPreviewVideo( UGCUpdateHandle_t handle, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item - virtual bool RemoveItemPreview( UGCUpdateHandle_t handle, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted) - - CALL_RESULT( SubmitItemUpdateResult_t ) - virtual SteamAPICall_t SubmitItemUpdate( UGCUpdateHandle_t handle, const char *pchChangeNote ) = 0; // commit update process started with StartItemUpdate() - virtual EItemUpdateStatus GetItemUpdateProgress( UGCUpdateHandle_t handle, uint64 *punBytesProcessed, uint64* punBytesTotal ) = 0; - - // Steam Workshop Consumer API - CALL_RESULT( SetUserItemVoteResult_t ) - virtual SteamAPICall_t SetUserItemVote( PublishedFileId_t nPublishedFileID, bool bVoteUp ) = 0; - CALL_RESULT( GetUserItemVoteResult_t ) - virtual SteamAPICall_t GetUserItemVote( PublishedFileId_t nPublishedFileID ) = 0; - CALL_RESULT( UserFavoriteItemsListChanged_t ) - virtual SteamAPICall_t AddItemToFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0; - CALL_RESULT( UserFavoriteItemsListChanged_t ) - virtual SteamAPICall_t RemoveItemFromFavorites( AppId_t nAppId, PublishedFileId_t nPublishedFileID ) = 0; - CALL_RESULT( RemoteStorageSubscribePublishedFileResult_t ) - virtual SteamAPICall_t SubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // subscribe to this item, will be installed ASAP - CALL_RESULT( RemoteStorageUnsubscribePublishedFileResult_t ) - virtual SteamAPICall_t UnsubscribeItem( PublishedFileId_t nPublishedFileID ) = 0; // unsubscribe from this item, will be uninstalled after game quits - virtual uint32 GetNumSubscribedItems() = 0; // number of subscribed items - virtual uint32 GetSubscribedItems( PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; // all subscribed item PublishFileIDs - - // get EItemState flags about item on this client - virtual uint32 GetItemState( PublishedFileId_t nPublishedFileID ) = 0; - - // get info about currently installed content on disc for items that have k_EItemStateInstalled set - // if k_EItemStateLegacyItem is set, pchFolder contains the path to the legacy file itself (not a folder) - virtual bool GetItemInstallInfo( PublishedFileId_t nPublishedFileID, uint64 *punSizeOnDisk, OUT_STRING_COUNT( cchFolderSize ) char *pchFolder, uint32 cchFolderSize, uint32 *punTimeStamp ) = 0; - - // get info about pending update for items that have k_EItemStateNeedsUpdate set. punBytesTotal will be valid after download started once - virtual bool GetItemDownloadInfo( PublishedFileId_t nPublishedFileID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) = 0; - - // download new or update already installed item. If function returns true, wait for DownloadItemResult_t. If the item is already installed, - // then files on disk should not be used until callback received. If item is not subscribed to, it will be cached for some time. - // If bHighPriority is set, any other item download will be suspended and this item downloaded ASAP. - virtual bool DownloadItem( PublishedFileId_t nPublishedFileID, bool bHighPriority ) = 0; - - // game servers can set a specific workshop folder before issuing any UGC commands. - // This is helpful if you want to support multiple game servers running out of the same install folder - virtual bool BInitWorkshopForGameServer( DepotId_t unWorkshopDepotID, const char *pszFolder ) = 0; - - // SuspendDownloads( true ) will suspend all workshop downloads until SuspendDownloads( false ) is called or the game ends - virtual void SuspendDownloads( bool bSuspend ) = 0; - - // usage tracking - CALL_RESULT( StartPlaytimeTrackingResult_t ) - virtual SteamAPICall_t StartPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0; - CALL_RESULT( StopPlaytimeTrackingResult_t ) - virtual SteamAPICall_t StopPlaytimeTracking( PublishedFileId_t *pvecPublishedFileID, uint32 unNumPublishedFileIDs ) = 0; - CALL_RESULT( StopPlaytimeTrackingResult_t ) - virtual SteamAPICall_t StopPlaytimeTrackingForAllItems() = 0; - - // parent-child relationship or dependency management - CALL_RESULT( AddUGCDependencyResult_t ) - virtual SteamAPICall_t AddDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0; - CALL_RESULT( RemoveUGCDependencyResult_t ) - virtual SteamAPICall_t RemoveDependency( PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID ) = 0; - - // add/remove app dependence/requirements (usually DLC) - CALL_RESULT( AddAppDependencyResult_t ) - virtual SteamAPICall_t AddAppDependency( PublishedFileId_t nPublishedFileID, AppId_t nAppID ) = 0; - CALL_RESULT( RemoveAppDependencyResult_t ) - virtual SteamAPICall_t RemoveAppDependency( PublishedFileId_t nPublishedFileID, AppId_t nAppID ) = 0; - // request app dependencies. note that whatever callback you register for GetAppDependenciesResult_t may be called multiple times - // until all app dependencies have been returned - CALL_RESULT( GetAppDependenciesResult_t ) - virtual SteamAPICall_t GetAppDependencies( PublishedFileId_t nPublishedFileID ) = 0; - - // delete the item without prompting the user - CALL_RESULT( DeleteItemResult_t ) - virtual SteamAPICall_t DeleteItem( PublishedFileId_t nPublishedFileID ) = 0; -}; - -#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION010" - -//----------------------------------------------------------------------------- -// Purpose: Callback for querying UGC -//----------------------------------------------------------------------------- -struct SteamUGCQueryCompleted_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 1 }; - UGCQueryHandle_t m_handle; - EResult m_eResult; - uint32 m_unNumResultsReturned; - uint32 m_unTotalMatchingResults; - bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache -}; - - -//----------------------------------------------------------------------------- -// Purpose: Callback for requesting details on one piece of UGC -//----------------------------------------------------------------------------- -struct SteamUGCRequestUGCDetailsResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 2 }; - SteamUGCDetails_t m_details; - bool m_bCachedData; // indicates whether this data was retrieved from the local on-disk cache -}; - - -//----------------------------------------------------------------------------- -// Purpose: result for ISteamUGC::CreateItem() -//----------------------------------------------------------------------------- -struct CreateItemResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 3 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; // new item got this UGC PublishFileID - bool m_bUserNeedsToAcceptWorkshopLegalAgreement; -}; - - -//----------------------------------------------------------------------------- -// Purpose: result for ISteamUGC::SubmitItemUpdate() -//----------------------------------------------------------------------------- -struct SubmitItemUpdateResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 4 }; - EResult m_eResult; - bool m_bUserNeedsToAcceptWorkshopLegalAgreement; - PublishedFileId_t m_nPublishedFileId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: a Workshop item has been installed or updated -//----------------------------------------------------------------------------- -struct ItemInstalled_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 5 }; - AppId_t m_unAppID; - PublishedFileId_t m_nPublishedFileId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: result of DownloadItem(), existing item files can be accessed again -//----------------------------------------------------------------------------- -struct DownloadItemResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 6 }; - AppId_t m_unAppID; - PublishedFileId_t m_nPublishedFileId; - EResult m_eResult; -}; - -//----------------------------------------------------------------------------- -// Purpose: result of AddItemToFavorites() or RemoveItemFromFavorites() -//----------------------------------------------------------------------------- -struct UserFavoriteItemsListChanged_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 7 }; - PublishedFileId_t m_nPublishedFileId; - EResult m_eResult; - bool m_bWasAddRequest; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to SetUserItemVote() -//----------------------------------------------------------------------------- -struct SetUserItemVoteResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 8 }; - PublishedFileId_t m_nPublishedFileId; - EResult m_eResult; - bool m_bVoteUp; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to GetUserItemVote() -//----------------------------------------------------------------------------- -struct GetUserItemVoteResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 9 }; - PublishedFileId_t m_nPublishedFileId; - EResult m_eResult; - bool m_bVotedUp; - bool m_bVotedDown; - bool m_bVoteSkipped; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to StartPlaytimeTracking() -//----------------------------------------------------------------------------- -struct StartPlaytimeTrackingResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 10 }; - EResult m_eResult; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to StopPlaytimeTracking() -//----------------------------------------------------------------------------- -struct StopPlaytimeTrackingResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 11 }; - EResult m_eResult; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to AddDependency -//----------------------------------------------------------------------------- -struct AddUGCDependencyResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 12 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; - PublishedFileId_t m_nChildPublishedFileId; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to RemoveDependency -//----------------------------------------------------------------------------- -struct RemoveUGCDependencyResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 13 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; - PublishedFileId_t m_nChildPublishedFileId; -}; - - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to AddAppDependency -//----------------------------------------------------------------------------- -struct AddAppDependencyResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 14 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; - AppId_t m_nAppID; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to RemoveAppDependency -//----------------------------------------------------------------------------- -struct RemoveAppDependencyResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 15 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; - AppId_t m_nAppID; -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to GetAppDependencies. Callback may be called -// multiple times until all app dependencies have been returned. -//----------------------------------------------------------------------------- -struct GetAppDependenciesResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 16 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; - AppId_t m_rgAppIDs[32]; - uint32 m_nNumAppDependencies; // number returned in this struct - uint32 m_nTotalNumAppDependencies; // total found -}; - -//----------------------------------------------------------------------------- -// Purpose: The result of a call to DeleteItem -//----------------------------------------------------------------------------- -struct DeleteItemResult_t -{ - enum { k_iCallback = k_iClientUGCCallbacks + 17 }; - EResult m_eResult; - PublishedFileId_t m_nPublishedFileId; -}; - -#pragma pack( pop ) - -#endif // ISTEAMUGC_H diff --git a/ScreenPlay/ThirdParty/steam/isteamunifiedmessages.h b/ScreenPlay/ThirdParty/steam/isteamunifiedmessages.h deleted file mode 100644 index 684f4e87..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamunifiedmessages.h +++ /dev/null @@ -1,63 +0,0 @@ -//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. ======= -// -// Purpose: Interface to unified messages client -// -// You should not need to use this interface except if your product is using a language other than C++. -// Contact your Steam Tech contact for more details. -// -//============================================================================= - -#ifndef ISTEAMUNIFIEDMESSAGES_H -#define ISTEAMUNIFIEDMESSAGES_H -#ifdef _WIN32 -#pragma once -#endif - -typedef uint64 ClientUnifiedMessageHandle; - -class ISteamUnifiedMessages -{ -public: - static const ClientUnifiedMessageHandle k_InvalidUnifiedMessageHandle = 0; - - // Sends a service method (in binary serialized form) using the Steam Client. - // Returns a unified message handle (k_InvalidUnifiedMessageHandle if could not send the message). - virtual ClientUnifiedMessageHandle SendMethod( const char *pchServiceMethod, const void *pRequestBuffer, uint32 unRequestBufferSize, uint64 unContext ) = 0; - - // Gets the size of the response and the EResult. Returns false if the response is not ready yet. - virtual bool GetMethodResponseInfo( ClientUnifiedMessageHandle hHandle, uint32 *punResponseSize, EResult *peResult ) = 0; - - // Gets a response in binary serialized form (and optionally release the corresponding allocated memory). - virtual bool GetMethodResponseData( ClientUnifiedMessageHandle hHandle, void *pResponseBuffer, uint32 unResponseBufferSize, bool bAutoRelease ) = 0; - - // Releases the message and its corresponding allocated memory. - virtual bool ReleaseMethod( ClientUnifiedMessageHandle hHandle ) = 0; - - // Sends a service notification (in binary serialized form) using the Steam Client. - // Returns true if the notification was sent successfully. - virtual bool SendNotification( const char *pchServiceNotification, const void *pNotificationBuffer, uint32 unNotificationBufferSize ) = 0; -}; - -#define STEAMUNIFIEDMESSAGES_INTERFACE_VERSION "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -struct SteamUnifiedMessagesSendMethodResult_t -{ - enum { k_iCallback = k_iClientUnifiedMessagesCallbacks + 1 }; - ClientUnifiedMessageHandle m_hHandle; // The handle returned by SendMethod(). - uint64 m_unContext; // Context provided when calling SendMethod(). - EResult m_eResult; // The result of the method call. - uint32 m_unResponseSize; // The size of the response. -}; - -#pragma pack( pop ) - -#endif // ISTEAMUNIFIEDMESSAGES_H diff --git a/ScreenPlay/ThirdParty/steam/isteamuser.h b/ScreenPlay/ThirdParty/steam/isteamuser.h deleted file mode 100644 index 0ea2bb82..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamuser.h +++ /dev/null @@ -1,369 +0,0 @@ -//====== Copyright (c) 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to user account information in Steam -// -//============================================================================= - -#ifndef ISTEAMUSER_H -#define ISTEAMUSER_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -// structure that contains client callback data -// see callbacks documentation for more details -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif -struct CallbackMsg_t -{ - HSteamUser m_hSteamUser; - int m_iCallback; - uint8 *m_pubParam; - int m_cubParam; -}; -#pragma pack( pop ) - - -//----------------------------------------------------------------------------- -// Purpose: Functions for accessing and manipulating a steam account -// associated with one client instance -//----------------------------------------------------------------------------- -class ISteamUser -{ -public: - // returns the HSteamUser this interface represents - // this is only used internally by the API, and by a few select interfaces that support multi-user - virtual HSteamUser GetHSteamUser() = 0; - - // returns true if the Steam client current has a live connection to the Steam servers. - // If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy. - // The Steam client will automatically be trying to recreate the connection as often as possible. - virtual bool BLoggedOn() = 0; - - // returns the CSteamID of the account currently logged into the Steam client - // a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API - virtual CSteamID GetSteamID() = 0; - - // Multiplayer Authentication functions - - // InitiateGameConnection() starts the state machine for authenticating the game client with the game server - // It is the client portion of a three-way handshake between the client, the game server, and the steam servers - // - // Parameters: - // void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token. - // int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes. - // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client - // CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( ) - // uint32 unIPServer, uint16 usPortServer - the IP address of the game server - // bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running) - // - // return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed - // The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process. - virtual int InitiateGameConnection( void *pAuthBlob, int cbMaxAuthBlob, CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0; - - // notify of disconnect - // needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call - virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0; - - // Legacy functions - - // used by only a few games to track usage events - virtual void TrackAppUsageEvent( CGameID gameID, int eAppUsageEvent, const char *pchExtraInfo = "" ) = 0; - - // get the local storage folder for current Steam account to write application data, e.g. save games, configs etc. - // this will usually be something like "C:\Progam Files\Steam\userdata\\\local" - virtual bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) = 0; - - // Starts voice recording. Once started, use GetVoice() to get the data - virtual void StartVoiceRecording( ) = 0; - - // Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for - // a little bit after this function is called. GetVoice() should continue to be called until it returns - // k_eVoiceResultNotRecording - virtual void StopVoiceRecording( ) = 0; - - // Determine the size of captured audio data that is available from GetVoice. - // Most applications will only use compressed data and should ignore the other - // parameters, which exist primarily for backwards compatibility. See comments - // below for further explanation of "uncompressed" data. - virtual EVoiceResult GetAvailableVoice( uint32 *pcbCompressed, uint32 *pcbUncompressed_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0; - - // --------------------------------------------------------------------------- - // NOTE: "uncompressed" audio is a deprecated feature and should not be used - // by most applications. It is raw single-channel 16-bit PCM wave data which - // may have been run through preprocessing filters and/or had silence removed, - // so the uncompressed audio could have a shorter duration than you expect. - // There may be no data at all during long periods of silence. Also, fetching - // uncompressed audio will cause GetVoice to discard any leftover compressed - // audio, so you must fetch both types at once. Finally, GetAvailableVoice is - // not precisely accurate when the uncompressed size is requested. So if you - // really need to use uncompressed audio, you should call GetVoice frequently - // with two very large (20kb+) output buffers instead of trying to allocate - // perfectly-sized buffers. But most applications should ignore all of these - // details and simply leave the "uncompressed" parameters as NULL/zero. - // --------------------------------------------------------------------------- - - // Read captured audio data from the microphone buffer. This should be called - // at least once per frame, and preferably every few milliseconds, to keep the - // microphone input delay as low as possible. Most applications will only use - // compressed data and should pass NULL/zero for the "uncompressed" parameters. - // Compressed data can be transmitted by your application and decoded into raw - // using the DecompressVoice function below. - virtual EVoiceResult GetVoice( bool bWantCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, bool bWantUncompressed_Deprecated = false, void *pUncompressedDestBuffer_Deprecated = 0, uint32 cbUncompressedDestBufferSize_Deprecated = 0, uint32 *nUncompressBytesWritten_Deprecated = 0, uint32 nUncompressedVoiceDesiredSampleRate_Deprecated = 0 ) = 0; - - // Decodes the compressed voice data returned by GetVoice. The output data is - // raw single-channel 16-bit PCM audio. The decoder supports any sample rate - // from 11025 to 48000; see GetVoiceOptimalSampleRate() below for details. - // If the output buffer is not large enough, then *nBytesWritten will be set - // to the required buffer size, and k_EVoiceResultBufferTooSmall is returned. - // It is suggested to start with a 20kb buffer and reallocate as necessary. - virtual EVoiceResult DecompressVoice( const void *pCompressed, uint32 cbCompressed, void *pDestBuffer, uint32 cbDestBufferSize, uint32 *nBytesWritten, uint32 nDesiredSampleRate ) = 0; - - // This returns the native sample rate of the Steam voice decompressor; using - // this sample rate for DecompressVoice will perform the least CPU processing. - // However, the final audio quality will depend on how well the audio device - // (and/or your application's audio output SDK) deals with lower sample rates. - // You may find that you get the best audio output quality when you ignore - // this function and use the native sample rate of your audio output device, - // which is usually 48000 or 44100. - virtual uint32 GetVoiceOptimalSampleRate() = 0; - - // Retrieve ticket to be sent to the entity who wishes to authenticate you. - // pcbTicket retrieves the length of the actual ticket. - virtual HAuthTicket GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0; - - // Authenticate ticket from entity steamID to be sure it is valid and isnt reused - // Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse ) - virtual EBeginAuthSessionResult BeginAuthSession( const void *pAuthTicket, int cbAuthTicket, CSteamID steamID ) = 0; - - // Stop tracking started by BeginAuthSession - called when no longer playing game with this entity - virtual void EndAuthSession( CSteamID steamID ) = 0; - - // Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to - virtual void CancelAuthTicket( HAuthTicket hAuthTicket ) = 0; - - // After receiving a user's authentication data, and passing it to BeginAuthSession, use this function - // to determine if the user owns downloadable content specified by the provided AppID. - virtual EUserHasLicenseForAppResult UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) = 0; - - // returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam - // (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT. - virtual bool BIsBehindNAT() = 0; - - // set data to be replicated to friends so that they can join your game - // CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client - // uint32 unIPServer, uint16 usPortServer - the IP address of the game server - virtual void AdvertiseGame( CSteamID steamIDGameServer, uint32 unIPServer, uint16 usPortServer ) = 0; - - // Requests a ticket encrypted with an app specific shared key - // pDataToInclude, cbDataToInclude will be encrypted into the ticket - // ( This is asynchronous, you must wait for the ticket to be completed by the server ) - CALL_RESULT( EncryptedAppTicketResponse_t ) - virtual SteamAPICall_t RequestEncryptedAppTicket( void *pDataToInclude, int cbDataToInclude ) = 0; - - // retrieve a finished ticket - virtual bool GetEncryptedAppTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket ) = 0; - - // Trading Card badges data access - // if you only have one set of cards, the series will be 1 - // the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1) - virtual int GetGameBadgeLevel( int nSeries, bool bFoil ) = 0; - - // gets the Steam Level of the user, as shown on their profile - virtual int GetPlayerSteamLevel() = 0; - - // Requests a URL which authenticates an in-game browser for store check-out, - // and then redirects to the specified URL. As long as the in-game browser - // accepts and handles session cookies, Steam microtransaction checkout pages - // will automatically recognize the user instead of presenting a login page. - // The result of this API call will be a StoreAuthURLResponse_t callback. - // NOTE: The URL has a very short lifetime to prevent history-snooping attacks, - // so you should only call this API when you are about to launch the browser, - // or else immediately navigate to the result URL using a hidden browser window. - // NOTE 2: The resulting authorization cookie has an expiration time of one day, - // so it would be a good idea to request and visit a new auth URL every 12 hours. - CALL_RESULT( StoreAuthURLResponse_t ) - virtual SteamAPICall_t RequestStoreAuthURL( const char *pchRedirectURL ) = 0; - - // gets whether the users phone number is verified - virtual bool BIsPhoneVerified() = 0; - - // gets whether the user has two factor enabled on their account - virtual bool BIsTwoFactorEnabled() = 0; - - // gets whether the users phone number is identifying - virtual bool BIsPhoneIdentifying() = 0; - - // gets whether the users phone number is awaiting (re)verification - virtual bool BIsPhoneRequiringVerification() = 0; - -}; - -#define STEAMUSER_INTERFACE_VERSION "SteamUser019" - - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: called when a connections to the Steam back-end has been established -// this means the Steam client now has a working connection to the Steam servers -// usually this will have occurred before the game has launched, and should -// only be seen if the user has dropped connection due to a networking issue -// or a Steam server update -//----------------------------------------------------------------------------- -struct SteamServersConnected_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 1 }; -}; - -//----------------------------------------------------------------------------- -// Purpose: called when a connection attempt has failed -// this will occur periodically if the Steam client is not connected, -// and has failed in it's retry to establish a connection -//----------------------------------------------------------------------------- -struct SteamServerConnectFailure_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 2 }; - EResult m_eResult; - bool m_bStillRetrying; -}; - - -//----------------------------------------------------------------------------- -// Purpose: called if the client has lost connection to the Steam servers -// real-time services will be disabled until a matching SteamServersConnected_t has been posted -//----------------------------------------------------------------------------- -struct SteamServersDisconnected_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 3 }; - EResult m_eResult; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Sent by the Steam server to the client telling it to disconnect from the specified game server, -// which it may be in the process of or already connected to. -// The game client should immediately disconnect upon receiving this message. -// This can usually occur if the user doesn't have rights to play on the game server. -//----------------------------------------------------------------------------- -struct ClientGameServerDeny_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 13 }; - - uint32 m_uAppID; - uint32 m_unGameServerIP; - uint16 m_usGameServerPort; - uint16 m_bSecure; - uint32 m_uReason; -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when the callback system for this client is in an error state (and has flushed pending callbacks) -// When getting this message the client should disconnect from Steam, reset any stored Steam state and reconnect. -// This usually occurs in the rare event the Steam client has some kind of fatal error. -//----------------------------------------------------------------------------- -struct IPCFailure_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 17 }; - enum EFailureType - { - k_EFailureFlushedCallbackQueue, - k_EFailurePipeFail, - }; - uint8 m_eFailureType; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Signaled whenever licenses change -//----------------------------------------------------------------------------- -struct LicensesUpdated_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 25 }; -}; - - -//----------------------------------------------------------------------------- -// callback for BeginAuthSession -//----------------------------------------------------------------------------- -struct ValidateAuthTicketResponse_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 43 }; - CSteamID m_SteamID; - EAuthSessionResponse m_eAuthSessionResponse; - CSteamID m_OwnerSteamID; // different from m_SteamID if borrowed -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when a user has responded to a microtransaction authorization request -//----------------------------------------------------------------------------- -struct MicroTxnAuthorizationResponse_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 52 }; - - uint32 m_unAppID; // AppID for this microtransaction - uint64 m_ulOrderID; // OrderID provided for the microtransaction - uint8 m_bAuthorized; // if user authorized transaction -}; - - -//----------------------------------------------------------------------------- -// Purpose: Result from RequestEncryptedAppTicket -//----------------------------------------------------------------------------- -struct EncryptedAppTicketResponse_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 54 }; - - EResult m_eResult; -}; - -//----------------------------------------------------------------------------- -// callback for GetAuthSessionTicket -//----------------------------------------------------------------------------- -struct GetAuthSessionTicketResponse_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 63 }; - HAuthTicket m_hAuthTicket; - EResult m_eResult; -}; - - -//----------------------------------------------------------------------------- -// Purpose: sent to your game in response to a steam://gamewebcallback/ command -//----------------------------------------------------------------------------- -struct GameWebCallback_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 64 }; - char m_szURL[256]; -}; - -//----------------------------------------------------------------------------- -// Purpose: sent to your game in response to ISteamUser::RequestStoreAuthURL -//----------------------------------------------------------------------------- -struct StoreAuthURLResponse_t -{ - enum { k_iCallback = k_iSteamUserCallbacks + 65 }; - char m_szURL[512]; -}; - - - -#pragma pack( pop ) - -#endif // ISTEAMUSER_H diff --git a/ScreenPlay/ThirdParty/steam/isteamuserstats.h b/ScreenPlay/ThirdParty/steam/isteamuserstats.h deleted file mode 100644 index 29ae38ba..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamuserstats.h +++ /dev/null @@ -1,476 +0,0 @@ -//====== Copyright � 1996-2009, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to stats, achievements, and leaderboards -// -//============================================================================= - -#ifndef ISTEAMUSERSTATS_H -#define ISTEAMUSERSTATS_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" -#include "isteamremotestorage.h" - -// size limit on stat or achievement name (UTF-8 encoded) -enum { k_cchStatNameMax = 128 }; - -// maximum number of bytes for a leaderboard name (UTF-8 encoded) -enum { k_cchLeaderboardNameMax = 128 }; - -// maximum number of details int32's storable for a single leaderboard entry -enum { k_cLeaderboardDetailsMax = 64 }; - -// handle to a single leaderboard -typedef uint64 SteamLeaderboard_t; - -// handle to a set of downloaded entries in a leaderboard -typedef uint64 SteamLeaderboardEntries_t; - -// type of data request, when downloading leaderboard entries -enum ELeaderboardDataRequest -{ - k_ELeaderboardDataRequestGlobal = 0, - k_ELeaderboardDataRequestGlobalAroundUser = 1, - k_ELeaderboardDataRequestFriends = 2, - k_ELeaderboardDataRequestUsers = 3 -}; - -// the sort order of a leaderboard -enum ELeaderboardSortMethod -{ - k_ELeaderboardSortMethodNone = 0, - k_ELeaderboardSortMethodAscending = 1, // top-score is lowest number - k_ELeaderboardSortMethodDescending = 2, // top-score is highest number -}; - -// the display type (used by the Steam Community web site) for a leaderboard -enum ELeaderboardDisplayType -{ - k_ELeaderboardDisplayTypeNone = 0, - k_ELeaderboardDisplayTypeNumeric = 1, // simple numerical score - k_ELeaderboardDisplayTypeTimeSeconds = 2, // the score represents a time, in seconds - k_ELeaderboardDisplayTypeTimeMilliSeconds = 3, // the score represents a time, in milliseconds -}; - -enum ELeaderboardUploadScoreMethod -{ - k_ELeaderboardUploadScoreMethodNone = 0, - k_ELeaderboardUploadScoreMethodKeepBest = 1, // Leaderboard will keep user's best score - k_ELeaderboardUploadScoreMethodForceUpdate = 2, // Leaderboard will always replace score with specified -}; - -// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry() -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -struct LeaderboardEntry_t -{ - CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info - int32 m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard - int32 m_nScore; // score as set in the leaderboard - int32 m_cDetails; // number of int32 details available for this entry - UGCHandle_t m_hUGC; // handle for UGC attached to the entry -}; - -#pragma pack( pop ) - - -//----------------------------------------------------------------------------- -// Purpose: Functions for accessing stats, achievements, and leaderboard information -//----------------------------------------------------------------------------- -class ISteamUserStats -{ -public: - // Ask the server to send down this user's data and achievements for this game - CALL_BACK( UserStatsReceived_t ) - virtual bool RequestCurrentStats() = 0; - - // Data accessors - virtual bool GetStat( const char *pchName, int32 *pData ) = 0; - virtual bool GetStat( const char *pchName, float *pData ) = 0; - - // Set / update data - virtual bool SetStat( const char *pchName, int32 nData ) = 0; - virtual bool SetStat( const char *pchName, float fData ) = 0; - virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0; - - // Achievement flag accessors - virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0; - virtual bool SetAchievement( const char *pchName ) = 0; - virtual bool ClearAchievement( const char *pchName ) = 0; - - // Get the achievement status, and the time it was unlocked if unlocked. - // If the return value is true, but the unlock time is zero, that means it was unlocked before Steam - // began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970. - virtual bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0; - - // Store the current data on the server, will get a callback when set - // And one callback for every new achievement - // - // If the callback has a result of k_EResultInvalidParam, one or more stats - // uploaded has been rejected, either because they broke constraints - // or were out of date. In this case the server sends back updated values. - // The stats should be re-iterated to keep in sync. - virtual bool StoreStats() = 0; - - // Achievement / GroupAchievement metadata - - // Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set. - // A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback - // which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the - // specified achievement. - virtual int GetAchievementIcon( const char *pchName ) = 0; - - // Get general attributes for an achievement. Accepts the following keys: - // - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8) - // - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden) - virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0; - - // Achievement progress - triggers an AchievementProgress callback, that is all. - // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that. - virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0; - - // Used for iterating achievements. In general games should not need these functions because they should have a - // list of existing achievements compiled into them - virtual uint32 GetNumAchievements() = 0; - // Get achievement name iAchievement in [0,GetNumAchievements) - virtual const char *GetAchievementName( uint32 iAchievement ) = 0; - - // Friends stats & achievements - - // downloads stats for the user - // returns a UserStatsReceived_t received when completed - // if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail - // these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data - CALL_RESULT( UserStatsReceived_t ) - virtual SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) = 0; - - // requests stat information for a user, usable after a successful call to RequestUserStats() - virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) = 0; - virtual bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) = 0; - virtual bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) = 0; - // See notes for GetAchievementAndUnlockTime above - virtual bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) = 0; - - // Reset stats - virtual bool ResetAllStats( bool bAchievementsToo ) = 0; - - // Leaderboard functions - - // asks the Steam back-end for a leaderboard by name, and will create it if it's not yet - // This call is asynchronous, with the result returned in LeaderboardFindResult_t - CALL_RESULT(LeaderboardFindResult_t) - virtual SteamAPICall_t FindOrCreateLeaderboard( const char *pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) = 0; - - // as above, but won't create the leaderboard if it's not found - // This call is asynchronous, with the result returned in LeaderboardFindResult_t - CALL_RESULT( LeaderboardFindResult_t ) - virtual SteamAPICall_t FindLeaderboard( const char *pchLeaderboardName ) = 0; - - // returns the name of a leaderboard - virtual const char *GetLeaderboardName( SteamLeaderboard_t hSteamLeaderboard ) = 0; - - // returns the total number of entries in a leaderboard, as of the last request - virtual int GetLeaderboardEntryCount( SteamLeaderboard_t hSteamLeaderboard ) = 0; - - // returns the sort method of the leaderboard - virtual ELeaderboardSortMethod GetLeaderboardSortMethod( SteamLeaderboard_t hSteamLeaderboard ) = 0; - - // returns the display type of the leaderboard - virtual ELeaderboardDisplayType GetLeaderboardDisplayType( SteamLeaderboard_t hSteamLeaderboard ) = 0; - - // Asks the Steam back-end for a set of rows in the leaderboard. - // This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t - // LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below) - // You can ask for more entries than exist, and it will return as many as do exist. - // k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries] - // k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate - // e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after - // k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user - CALL_RESULT( LeaderboardScoresDownloaded_t ) - virtual SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) = 0; - // as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers - // if a user doesn't have a leaderboard entry, they won't be included in the result - // a max of 100 users can be downloaded at a time, with only one outstanding call at a time - METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers) - CALL_RESULT( LeaderboardScoresDownloaded_t ) - virtual SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, - ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) = 0; - - // Returns data about a single leaderboard entry - // use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries - // e.g. - // void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded ) - // { - // for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ ) - // { - // LeaderboardEntry_t leaderboardEntry; - // int32 details[3]; // we know this is how many we've stored previously - // GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 ); - // assert( leaderboardEntry.m_cDetails == 3 ); - // ... - // } - // once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid - virtual bool GetDownloadedLeaderboardEntry( SteamLeaderboardEntries_t hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) = 0; - - // Uploads a user score to the Steam back-end. - // This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t - // Details are extra game-defined information regarding how the user got that score - // pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list - CALL_RESULT( LeaderboardScoreUploaded_t ) - virtual SteamAPICall_t UploadLeaderboardScore( SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32 *pScoreDetails, int cScoreDetailsCount ) = 0; - - // Attaches a piece of user generated content the user's entry on a leaderboard. - // hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare(). - // This call is asynchronous, with the result returned in LeaderboardUGCSet_t. - CALL_RESULT( LeaderboardUGCSet_t ) - virtual SteamAPICall_t AttachLeaderboardUGC( SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC ) = 0; - - // Retrieves the number of players currently playing your game (online + offline) - // This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t - CALL_RESULT( NumberOfCurrentPlayers_t ) - virtual SteamAPICall_t GetNumberOfCurrentPlayers() = 0; - - // Requests that Steam fetch data on the percentage of players who have received each achievement - // for the game globally. - // This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t. - CALL_RESULT( GlobalAchievementPercentagesReady_t ) - virtual SteamAPICall_t RequestGlobalAchievementPercentages() = 0; - - // Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch - // the next most achieved afterwards. Will return -1 if there is no data on achievement - // percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback). - virtual int GetMostAchievedAchievementInfo( char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0; - - // Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another - // GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last - // achievement has been iterated. - virtual int GetNextMostAchievedAchievementInfo( int iIteratorPrevious, char *pchName, uint32 unNameBufLen, float *pflPercent, bool *pbAchieved ) = 0; - - // Returns the percentage of users who have achieved the specified achievement. - virtual bool GetAchievementAchievedPercent( const char *pchName, float *pflPercent ) = 0; - - // Requests global stats data, which is available for stats marked as "aggregated". - // This call is asynchronous, with the results returned in GlobalStatsReceived_t. - // nHistoryDays specifies how many days of day-by-day history to retrieve in addition - // to the overall totals. The limit is 60. - CALL_RESULT( GlobalStatsReceived_t ) - virtual SteamAPICall_t RequestGlobalStats( int nHistoryDays ) = 0; - - // Gets the lifetime totals for an aggregated stat - virtual bool GetGlobalStat( const char *pchStatName, int64 *pData ) = 0; - virtual bool GetGlobalStat( const char *pchStatName, double *pData ) = 0; - - // Gets history for an aggregated stat. pData will be filled with daily values, starting with today. - // So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago, - // etc. cubData is the size in bytes of the pubData buffer. Returns the number of - // elements actually set. - virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) int64 *pData, uint32 cubData ) = 0; - virtual int32 GetGlobalStatHistory( const char *pchStatName, ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0; - -#ifdef _PS3 - // Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t - // callback. - virtual bool InstallPS3Trophies() = 0; - - // Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed - // by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies(). - virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0; - - // On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data. - // At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method. - // If you do not have any user data, call this function with pvData = NULL and cubData = 0 - virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0; - - // Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t - // callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required - // buffer size. - virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0; -#endif -}; - -#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: called when the latests stats and achievements have been received -// from the server -//----------------------------------------------------------------------------- -struct UserStatsReceived_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 1 }; - uint64 m_nGameID; // Game these stats are for - EResult m_eResult; // Success / error fetching the stats - CSteamID m_steamIDUser; // The user for whom the stats are retrieved for -}; - - -//----------------------------------------------------------------------------- -// Purpose: result of a request to store the user stats for a game -//----------------------------------------------------------------------------- -struct UserStatsStored_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 2 }; - uint64 m_nGameID; // Game these stats are for - EResult m_eResult; // success / error -}; - - -//----------------------------------------------------------------------------- -// Purpose: result of a request to store the achievements for a game, or an -// "indicate progress" call. If both m_nCurProgress and m_nMaxProgress -// are zero, that means the achievement has been fully unlocked. -//----------------------------------------------------------------------------- -struct UserAchievementStored_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 3 }; - - uint64 m_nGameID; // Game this is for - bool m_bGroupAchievement; // if this is a "group" achievement - char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement - uint32 m_nCurProgress; // current progress towards the achievement - uint32 m_nMaxProgress; // "out of" this many -}; - - -//----------------------------------------------------------------------------- -// Purpose: call result for finding a leaderboard, returned as a result of FindOrCreateLeaderboard() or FindLeaderboard() -// use CCallResult<> to map this async result to a member function -//----------------------------------------------------------------------------- -struct LeaderboardFindResult_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 4 }; - SteamLeaderboard_t m_hSteamLeaderboard; // handle to the leaderboard serarched for, 0 if no leaderboard found - uint8 m_bLeaderboardFound; // 0 if no leaderboard found -}; - - -//----------------------------------------------------------------------------- -// Purpose: call result indicating scores for a leaderboard have been downloaded and are ready to be retrieved, returned as a result of DownloadLeaderboardEntries() -// use CCallResult<> to map this async result to a member function -//----------------------------------------------------------------------------- -struct LeaderboardScoresDownloaded_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 5 }; - SteamLeaderboard_t m_hSteamLeaderboard; - SteamLeaderboardEntries_t m_hSteamLeaderboardEntries; // the handle to pass into GetDownloadedLeaderboardEntries() - int m_cEntryCount; // the number of entries downloaded -}; - - -//----------------------------------------------------------------------------- -// Purpose: call result indicating scores has been uploaded, returned as a result of UploadLeaderboardScore() -// use CCallResult<> to map this async result to a member function -//----------------------------------------------------------------------------- -struct LeaderboardScoreUploaded_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 6 }; - uint8 m_bSuccess; // 1 if the call was successful - SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was - int32 m_nScore; // the score that was attempted to set - uint8 m_bScoreChanged; // true if the score in the leaderboard change, false if the existing score was better - int m_nGlobalRankNew; // the new global rank of the user in this leaderboard - int m_nGlobalRankPrevious; // the previous global rank of the user in this leaderboard; 0 if the user had no existing entry in the leaderboard -}; - -struct NumberOfCurrentPlayers_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 7 }; - uint8 m_bSuccess; // 1 if the call was successful - int32 m_cPlayers; // Number of players currently playing -}; - - - -//----------------------------------------------------------------------------- -// Purpose: Callback indicating that a user's stats have been unloaded. -// Call RequestUserStats again to access stats for this user -//----------------------------------------------------------------------------- -struct UserStatsUnloaded_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 8 }; - CSteamID m_steamIDUser; // User whose stats have been unloaded -}; - - - -//----------------------------------------------------------------------------- -// Purpose: Callback indicating that an achievement icon has been fetched -//----------------------------------------------------------------------------- -struct UserAchievementIconFetched_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 9 }; - - CGameID m_nGameID; // Game this is for - char m_rgchAchievementName[k_cchStatNameMax]; // name of the achievement - bool m_bAchieved; // Is the icon for the achieved or not achieved version? - int m_nIconHandle; // Handle to the image, which can be used in SteamUtils()->GetImageRGBA(), 0 means no image is set for the achievement -}; - - -//----------------------------------------------------------------------------- -// Purpose: Callback indicating that global achievement percentages are fetched -//----------------------------------------------------------------------------- -struct GlobalAchievementPercentagesReady_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 10 }; - - uint64 m_nGameID; // Game this is for - EResult m_eResult; // Result of the operation -}; - - -//----------------------------------------------------------------------------- -// Purpose: call result indicating UGC has been uploaded, returned as a result of SetLeaderboardUGC() -//----------------------------------------------------------------------------- -struct LeaderboardUGCSet_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 11 }; - EResult m_eResult; // The result of the operation - SteamLeaderboard_t m_hSteamLeaderboard; // the leaderboard handle that was -}; - - -//----------------------------------------------------------------------------- -// Purpose: callback indicating that PS3 trophies have been installed -//----------------------------------------------------------------------------- -struct PS3TrophiesInstalled_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 }; - uint64 m_nGameID; // Game these stats are for - EResult m_eResult; // The result of the operation - uint64 m_ulRequiredDiskSpace; // If m_eResult is k_EResultDiskFull, will contain the amount of space needed to install trophies - -}; - - -//----------------------------------------------------------------------------- -// Purpose: callback indicating global stats have been received. -// Returned as a result of RequestGlobalStats() -//----------------------------------------------------------------------------- -struct GlobalStatsReceived_t -{ - enum { k_iCallback = k_iSteamUserStatsCallbacks + 12 }; - uint64 m_nGameID; // Game global stats were requested for - EResult m_eResult; // The result of the request -}; - -#pragma pack( pop ) - - -#endif // ISTEAMUSER_H diff --git a/ScreenPlay/ThirdParty/steam/isteamutils.h b/ScreenPlay/ThirdParty/steam/isteamutils.h deleted file mode 100644 index e331fa6a..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamutils.h +++ /dev/null @@ -1,264 +0,0 @@ -//====== Copyright � 1996-2008, Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to utility functions in Steam -// -//============================================================================= - -#ifndef ISTEAMUTILS_H -#define ISTEAMUTILS_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - - -// Steam API call failure results -enum ESteamAPICallFailure -{ - k_ESteamAPICallFailureNone = -1, // no failure - k_ESteamAPICallFailureSteamGone = 0, // the local Steam process has gone away - k_ESteamAPICallFailureNetworkFailure = 1, // the network connection to Steam has been broken, or was already broken - // SteamServersDisconnected_t callback will be sent around the same time - // SteamServersConnected_t will be sent when the client is able to talk to the Steam servers again - k_ESteamAPICallFailureInvalidHandle = 2, // the SteamAPICall_t handle passed in no longer exists - k_ESteamAPICallFailureMismatchedCallback = 3,// GetAPICallResult() was called with the wrong callback type for this API call -}; - - -// Input modes for the Big Picture gamepad text entry -enum EGamepadTextInputMode -{ - k_EGamepadTextInputModeNormal = 0, - k_EGamepadTextInputModePassword = 1 -}; - - -// Controls number of allowed lines for the Big Picture gamepad text entry -enum EGamepadTextInputLineMode -{ - k_EGamepadTextInputLineModeSingleLine = 0, - k_EGamepadTextInputLineModeMultipleLines = 1 -}; - - -// function prototype for warning message hook -#if defined( POSIX ) -#define __cdecl -#endif -extern "C" typedef void (__cdecl *SteamAPIWarningMessageHook_t)(int, const char *); - -//----------------------------------------------------------------------------- -// Purpose: interface to user independent utility functions -//----------------------------------------------------------------------------- -class ISteamUtils -{ -public: - // return the number of seconds since the user - virtual uint32 GetSecondsSinceAppActive() = 0; - virtual uint32 GetSecondsSinceComputerActive() = 0; - - // the universe this client is connecting to - virtual EUniverse GetConnectedUniverse() = 0; - - // Steam server time. Number of seconds since January 1, 1970, GMT (i.e unix time) - virtual uint32 GetServerRealTime() = 0; - - // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database) - // e.g "US" or "UK". - virtual const char *GetIPCountry() = 0; - - // returns true if the image exists, and valid sizes were filled out - virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0; - - // returns true if the image exists, and the buffer was successfully filled out - // results are returned in RGBA format - // the destination buffer size should be 4 * height * width * sizeof(char) - virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0; - - // returns the IP of the reporting server for valve - currently only used in Source engine games - virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0; - - // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power - virtual uint8 GetCurrentBatteryPower() = 0; - - // returns the appID of the current process - virtual uint32 GetAppID() = 0; - - // Sets the position where the overlay instance for the currently calling game should show notifications. - // This position is per-game and if this function is called from outside of a game context it will do nothing. - virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0; - - // API asynchronous call results - // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h) - virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0; - virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0; - virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0; - - // Deprecated. Applications should use SteamAPI_RunCallbacks() instead. Game servers do not need to call this function. - STEAM_PRIVATE_API( virtual void RunFrame() = 0; ) - - // returns the number of IPC calls made since the last time this function was called - // Used for perf debugging so you can understand how many IPC calls your game makes per frame - // Every IPC call is at minimum a thread context switch if not a process one so you want to rate - // control how often you do them. - virtual uint32 GetIPCCallCount() = 0; - - // API warning handling - // 'int' is the severity; 0 for msg, 1 for warning - // 'const char *' is the text of the message - // callbacks will occur directly after the API function is called that generated the warning or message - virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0; - - // Returns true if the overlay is running & the user can access it. The overlay process could take a few seconds to - // start & hook the game process, so this function will initially return false while the overlay is loading. - virtual bool IsOverlayEnabled() = 0; - - // Normally this call is unneeded if your game has a constantly running frame loop that calls the - // D3D Present API, or OGL SwapBuffers API every frame. - // - // However, if you have a game that only refreshes the screen on an event driven basis then that can break - // the overlay, as it uses your Present/SwapBuffers calls to drive it's internal frame loop and it may also - // need to Present() to the screen any time an even needing a notification happens or when the overlay is - // brought up over the game by a user. You can use this API to ask the overlay if it currently need a present - // in that case, and then you can check for this periodically (roughly 33hz is desirable) and make sure you - // refresh the screen with Present or SwapBuffers to allow the overlay to do it's work. - virtual bool BOverlayNeedsPresent() = 0; - - // Asynchronous call to check if an executable file has been signed using the public key set on the signing tab - // of the partner site, for example to refuse to load modified executable files. - // The result is returned in CheckFileSignature_t. - // k_ECheckFileSignatureNoSignaturesFoundForThisApp - This app has not been configured on the signing tab of the partner site to enable this function. - // k_ECheckFileSignatureNoSignaturesFoundForThisFile - This file is not listed on the signing tab for the partner site. - // k_ECheckFileSignatureFileNotFound - The file does not exist on disk. - // k_ECheckFileSignatureInvalidSignature - The file exists, and the signing tab has been set for this file, but the file is either not signed or the signature does not match. - // k_ECheckFileSignatureValidSignature - The file is signed and the signature is valid. - CALL_RESULT( CheckFileSignature_t ) - virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0; - - // Activates the Big Picture text input dialog which only supports gamepad input - virtual bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax, const char *pchExistingText ) = 0; - - // Returns previously entered text & length - virtual uint32 GetEnteredGamepadTextLength() = 0; - virtual bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText ) = 0; - - // returns the language the steam client is running in, you probably want ISteamApps::GetCurrentGameLanguage instead, this is for very special usage cases - virtual const char *GetSteamUILanguage() = 0; - - // returns true if Steam itself is running in VR mode - virtual bool IsSteamRunningInVR() = 0; - - // Sets the inset of the overlay notification from the corner specified by SetOverlayNotificationPosition. - virtual void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) = 0; - - // returns true if Steam & the Steam Overlay are running in Big Picture mode - // Games much be launched through the Steam client to enable the Big Picture overlay. During development, - // a game can be added as a non-steam game to the developers library to test this feature - virtual bool IsSteamInBigPictureMode() = 0; - - // ask SteamUI to create and render its OpenVR dashboard - virtual void StartVRDashboard() = 0; - - // Returns true if the HMD content will be streamed via Steam In-Home Streaming - virtual bool IsVRHeadsetStreamingEnabled() = 0; - - // Set whether the HMD content will be streamed via Steam In-Home Streaming - // If this is set to true, then the scene in the HMD headset will be streamed, and remote input will not be allowed. - // If this is set to false, then the application window will be streamed instead, and remote input will be allowed. - // The default is true unless "VRHeadsetStreaming" "0" is in the extended appinfo for a game. - // (this is useful for games that have asymmetric multiplayer gameplay) - virtual void SetVRHeadsetStreamingEnabled( bool bEnabled ) = 0; -}; - -#define STEAMUTILS_INTERFACE_VERSION "SteamUtils009" - - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - -//----------------------------------------------------------------------------- -// Purpose: The country of the user changed -//----------------------------------------------------------------------------- -struct IPCountry_t -{ - enum { k_iCallback = k_iSteamUtilsCallbacks + 1 }; -}; - - -//----------------------------------------------------------------------------- -// Purpose: Fired when running on a laptop and less than 10 minutes of battery is left, fires then every minute -//----------------------------------------------------------------------------- -struct LowBatteryPower_t -{ - enum { k_iCallback = k_iSteamUtilsCallbacks + 2 }; - uint8 m_nMinutesBatteryLeft; -}; - - -//----------------------------------------------------------------------------- -// Purpose: called when a SteamAsyncCall_t has completed (or failed) -//----------------------------------------------------------------------------- -struct SteamAPICallCompleted_t -{ - enum { k_iCallback = k_iSteamUtilsCallbacks + 3 }; - SteamAPICall_t m_hAsyncCall; - int m_iCallback; - uint32 m_cubParam; -}; - - -//----------------------------------------------------------------------------- -// called when Steam wants to shutdown -//----------------------------------------------------------------------------- -struct SteamShutdown_t -{ - enum { k_iCallback = k_iSteamUtilsCallbacks + 4 }; -}; - -//----------------------------------------------------------------------------- -// results for CheckFileSignature -//----------------------------------------------------------------------------- -enum ECheckFileSignature -{ - k_ECheckFileSignatureInvalidSignature = 0, - k_ECheckFileSignatureValidSignature = 1, - k_ECheckFileSignatureFileNotFound = 2, - k_ECheckFileSignatureNoSignaturesFoundForThisApp = 3, - k_ECheckFileSignatureNoSignaturesFoundForThisFile = 4, -}; - -//----------------------------------------------------------------------------- -// callback for CheckFileSignature -//----------------------------------------------------------------------------- -struct CheckFileSignature_t -{ - enum { k_iCallback = k_iSteamUtilsCallbacks + 5 }; - ECheckFileSignature m_eCheckFileSignature; -}; - - -// k_iSteamUtilsCallbacks + 13 is taken - - -//----------------------------------------------------------------------------- -// Big Picture gamepad text input has been closed -//----------------------------------------------------------------------------- -struct GamepadTextInputDismissed_t -{ - enum { k_iCallback = k_iSteamUtilsCallbacks + 14 }; - bool m_bSubmitted; // true if user entered & accepted text (Call ISteamUtils::GetEnteredGamepadTextInput() for text), false if canceled input - uint32 m_unSubmittedText; -}; - -// k_iSteamUtilsCallbacks + 15 is taken - -#pragma pack( pop ) - -#endif // ISTEAMUTILS_H diff --git a/ScreenPlay/ThirdParty/steam/isteamvideo.h b/ScreenPlay/ThirdParty/steam/isteamvideo.h deleted file mode 100644 index 32eeb594..00000000 --- a/ScreenPlay/ThirdParty/steam/isteamvideo.h +++ /dev/null @@ -1,71 +0,0 @@ -//====== Copyright © 1996-2014 Valve Corporation, All rights reserved. ======= -// -// Purpose: interface to Steam Video -// -//============================================================================= - -#ifndef ISTEAMVIDEO_H -#define ISTEAMVIDEO_H -#ifdef _WIN32 -#pragma once -#endif - -#include "isteamclient.h" - -// callbacks -#if defined( VALVE_CALLBACK_PACK_SMALL ) -#pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) -#pragma pack( push, 8 ) -#else -#error isteamclient.h must be included -#endif - - - - -//----------------------------------------------------------------------------- -// Purpose: Steam Video API -//----------------------------------------------------------------------------- -class ISteamVideo -{ -public: - - // Get a URL suitable for streaming the given Video app ID's video - virtual void GetVideoURL( AppId_t unVideoAppID ) = 0; - - // returns true if user is uploading a live broadcast - virtual bool IsBroadcasting( int *pnNumViewers ) = 0; - - // Get the OPF Details for 360 Video Playback - CALL_BACK( GetOPFSettingsResult_t ) - virtual void GetOPFSettings( AppId_t unVideoAppID ) = 0; - virtual bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) = 0; -}; - -#define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V002" - -DEFINE_CALLBACK( BroadcastUploadStart_t, k_iClientVideoCallbacks + 4 ) -END_DEFINE_CALLBACK_0() - -DEFINE_CALLBACK( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 ) - CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult ) -END_DEFINE_CALLBACK_1() - -DEFINE_CALLBACK( GetVideoURLResult_t, k_iClientVideoCallbacks + 11 ) - CALLBACK_MEMBER( 0, EResult, m_eResult ) - CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID ) - CALLBACK_MEMBER( 2, char, m_rgchURL[256] ) -END_DEFINE_CALLBACK_3() - - -DEFINE_CALLBACK( GetOPFSettingsResult_t, k_iClientVideoCallbacks + 24 ) - CALLBACK_MEMBER( 0, EResult, m_eResult ) - CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID ) -END_DEFINE_CALLBACK_2() - - -#pragma pack( pop ) - - -#endif // ISTEAMVIDEO_H diff --git a/ScreenPlay/ThirdParty/steam/lib/linux32/libsdkencryptedappticket.so b/ScreenPlay/ThirdParty/steam/lib/linux32/libsdkencryptedappticket.so deleted file mode 100644 index 774fcfc75081c7422486c95daefd2c8ae571b8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1063483 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

ikPQ8D2 z{16(4TSuVN;n)|OgwBsa=PvylvOJ|)0%15*_y&z{m!QsnHFogLG|8q64BTm3zM5T7RosmZoM2k zGXLU=*-mRGxdKTNo zoIQ7y<07}|g}4%K3P-|@#4d*cXC=2jB*h8fa*EZ%`RrBwZ^uqzS-DXLZFDv-7&9X) zq<*-2#KHc$V9$;}jiFMvj?x3wL3PTDTw`a$ove+g z=g+iTbYGD)WBgf+v_Yo~Pf79LcNtz09Tf{DUH^2v>H4>#dukZ{^fYX(3!~GXhAnbo zi(S}c7e;qJoo&vWw|gq`f1o+w|(gK$3O6n#KO&#Oi^2I<1x$$`BxIOOhB&y zB<$Q}N?pJfl8*-|#)CxSLAvlDDR>Y&9z=+T6mA!2MhbF zH?0ooDJa{XbV3zqkcnx|q_ca53|t1ZDC>vuy06$<=dWK5_RBzcKvH*g=Dk;SYLT~g zvDJDmd#`=54N1lJaf_`$u|{#9XyXj7a|#D%`{z%_fNCnCHwYd}$yT_*6J2C zzW-HOE9ltv(=)dnN2&MSHFrr|)fngwx+Fov)wnF#xop@`HhcE4% zjrWZDpI+dd2g7di0S7{EKfOe@HVhyW6i*>1(rgFHN6Mw~+5E3(& zlF+Mbq&L~rXfxFtKyJuqZK;}2v#xF3$km6CxPAkXwXGX9vf@ea1ni~b;mA(L+>R^Z z*-P6Y%>E$>VKz-;ufVAtar?PYEq4$G1YxdSyS%pAm8S)Bk6gPh(+{uRQE2<*+U2u$ z<+0L!m6h1nagcqnp0&%fkqxnt6~*3M|M^jA!Mr1*yYmR>)_m6??@2<4*6UOA3JjZdG;F%IfNCv`R@%0J>h^}sOQADT8nI}M zYy@{`Zydh#6`8A=qASp4$q>`H1_Co?F30cqc4V6*p8`fOE43viAsw-=Whag=>CtjUyV zh`U)b4e^u@j1ZCvL2<6EG)-=CRoKJ12>D>FmCuQOW&`)VD)oR@IrxV5{$CBnsryug zBezzQ_jG|%1DA8s%F%%~&9V^zm5FhHfZ~X%k60o)!X^#&u%YCMt5gOzE7kssMMfrc z%QUdL3WGS4Sb+hWkoGi8HaN~6`{(xtuz#bu@NTwy1GTL9HZ+*&d!7Bk2o6krCuXvU zqL^gG*s_m#NEtEVWqiK$1X7;HgPKflRCo&0{rBF;FI@}DJuqspBm5V}0iUS za$5h+8@V#l^dqoo1R-=PSf|rH#YtM>o}nu8=Z`2 z1R7QLC%e%(l%&y553|u*b)#bgfz4fVtF1(|22|IJ?B-^Uh#Z>n>b_A}idMf7(#CL=ru)GM4T