diff --git a/Facepunch.Steamworks/Structs/UgcAdditionalPreview.cs b/Facepunch.Steamworks/Structs/UgcAdditionalPreview.cs new file mode 100644 index 0000000..49e6e34 --- /dev/null +++ b/Facepunch.Steamworks/Structs/UgcAdditionalPreview.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Steamworks.Data +{ + public struct UgcAdditionalPreview + { + internal UgcAdditionalPreview( string urlOrVideoID, string originalFileName, ItemPreviewType itemPreviewType ) + { + this.UrlOrVideoID = urlOrVideoID; + this.OriginalFileName = originalFileName; + this.ItemPreviewType = itemPreviewType; + } + + public string UrlOrVideoID { get; private set; } + public string OriginalFileName { get; private set; } + internal ItemPreviewType ItemPreviewType { get; private set; } + + /// + /// Flags that specify the type of preview an item has: + /// Image = 0, + /// YouTubeVideo = 1, + /// Sketchfab = 2, + /// EnvironmentMap_HorizontalCross = 3, + /// EnvironmentMap_LatLong = 4, + /// ReservedMax = 255 + /// + public int GetItemPreviewType() => (int)ItemPreviewType; + } +} diff --git a/Facepunch.Steamworks/Structs/UgcAdditionalPreview.cs.meta b/Facepunch.Steamworks/Structs/UgcAdditionalPreview.cs.meta new file mode 100644 index 0000000..511f7d5 --- /dev/null +++ b/Facepunch.Steamworks/Structs/UgcAdditionalPreview.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48f086235d5dbeb44bccbb40802e30fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Facepunch.Steamworks/Structs/UgcItem.cs b/Facepunch.Steamworks/Structs/UgcItem.cs index 08617ba..fb63898 100644 --- a/Facepunch.Steamworks/Structs/UgcItem.cs +++ b/Facepunch.Steamworks/Structs/UgcItem.cs @@ -113,6 +113,11 @@ namespace Steamworks.Ugc /// public PublishedFileId[] Children; + /// + /// Additional previews of this item or collection, available only from WithAdditionalPreviews(true) queries + /// + public UgcAdditionalPreview[] AdditionalPreviews { get; internal set; } + public bool IsInstalled => (State & ItemState.Installed) == ItemState.Installed; public bool IsDownloading => (State & ItemState.Downloading) == ItemState.Downloading; public bool IsDownloadPending => (State & ItemState.DownloadPending) == ItemState.DownloadPending; diff --git a/Facepunch.Steamworks/Structs/UgcQuery.cs b/Facepunch.Steamworks/Structs/UgcQuery.cs index eb8901a..79893bb 100644 --- a/Facepunch.Steamworks/Structs/UgcQuery.cs +++ b/Facepunch.Steamworks/Structs/UgcQuery.cs @@ -153,6 +153,7 @@ namespace Steamworks.Ugc ReturnsDefaultStats = WantsDefaultStats ?? true, //true by default ReturnsMetadata = WantsReturnMetadata ?? false, ReturnsChildren = WantsReturnChildren ?? false, + ReturnsAdditionalPreviews = WantsReturnAdditionalPreviews ?? false, }; } diff --git a/Facepunch.Steamworks/Structs/UgcResultPage.cs b/Facepunch.Steamworks/Structs/UgcResultPage.cs index 352f98a..03399b5 100644 --- a/Facepunch.Steamworks/Structs/UgcResultPage.cs +++ b/Facepunch.Steamworks/Structs/UgcResultPage.cs @@ -16,6 +16,7 @@ namespace Steamworks.Ugc internal bool ReturnsDefaultStats; internal bool ReturnsMetadata; internal bool ReturnsChildren; + internal bool ReturnsAdditionalPreviews; public IEnumerable Entries { @@ -83,7 +84,27 @@ namespace Steamworks.Ugc item.Children = children; } } - // TODO GetQueryUGCAdditionalPreview + + if ( ReturnsAdditionalPreviews ) + { + var previewsCount = SteamUGC.Internal.GetQueryUGCNumAdditionalPreviews( Handle, i ); + if ( previewsCount > 0 ) + { + item.AdditionalPreviews = new UgcAdditionalPreview[previewsCount]; + for ( uint j = 0; j < previewsCount; j++ ) + { + string previewUrlOrVideo; + string originalFileName; //what is this??? + ItemPreviewType previewType = default; + if ( SteamUGC.Internal.GetQueryUGCAdditionalPreview( + Handle, i, j, out previewUrlOrVideo, out originalFileName, ref previewType ) ) + { + item.AdditionalPreviews[j] = new UgcAdditionalPreview( + previewUrlOrVideo, originalFileName, previewType ); + } + } + } + } yield return item; }