Space Plunder
Loading...
Searching...
No Matches
UGetFriendAvatar Class Reference

#include <GetFriendAvatar.h>

Inheritance diagram for UGetFriendAvatar:

Static Public Member Functions

static UGetFriendAvatarGetSteamFriendAvatar (const FString &UniqueNetId, const ESteamAvatarSize AvatarSize=SteamAvatar_Medium)
 

Public Attributes

FResponseGetFriendAvatarDelegate OnSuccess
 
FResponseGetFriendAvatarDelegate OnFailure
 

Private Member Functions

virtual void Activate () override
 
void GetFriendAvatar ()
 
void OnAvatarDownloaded (AvatarImageLoaded_t *pAvatarDownloaded, bool bIOFailure)
 

Private Attributes

FOnlineSubsystemSteam * SteamSubsystem
 
ESteamAvatarSize Size
 
FString SteamID
 
CCallResult< UGetFriendAvatar, AvatarImageLoaded_t > m_callDownloadResult
 

Member Function Documentation

◆ Activate()

void UGetFriendAvatar::Activate ( )
overrideprivatevirtual
16{
17 if(SteamAPI_Init())
18 {
20 }
21 else
22 {
23 GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Failed to initialize the Steam API!"));
24 OnFailure.Broadcast(nullptr, EResult::k_EResultFail);
25 RemoveFromRoot();
26 }
27}
FResponseGetFriendAvatarDelegate OnFailure
Definition GetFriendAvatar.h:46
void GetFriendAvatar()
Definition GetFriendAvatar.cpp:29

◆ GetFriendAvatar()

void UGetFriendAvatar::GetFriendAvatar ( )
private
30{
31 uint64 ID = FCString::Strtoui64(*SteamID, nullptr, 10);
32 // const uint64 ID = *((uint64*)SteamID.UniqueNetId->GetBytes());
33 int Picture = 0;
34 switch (Size)
35 {
37 Picture = SteamFriends()->GetSmallFriendAvatar(ID);
38 break;
40 Picture = SteamFriends()->GetMediumFriendAvatar(ID);
41 break;
43 Picture = SteamFriends()->GetLargeFriendAvatar(ID);
44 break;
45 }
46 if (Picture == -1)
47 {
49 }
50 else
51 {
52 // If the picture is already available, process it immediately
53 AvatarImageLoaded_t FakeCallback;
54 FakeCallback.m_steamID = ID;
55 FakeCallback.m_iImage = Picture;
56 OnAvatarDownloaded(&FakeCallback, false);
57 }
58
59}
@ SteamAvatar_Small
Definition SteamFriendsData.h:11
@ SteamAvatar_Medium
Definition SteamFriendsData.h:12
@ SteamAvatar_Large
Definition SteamFriendsData.h:13
void OnAvatarDownloaded(AvatarImageLoaded_t *pAvatarDownloaded, bool bIOFailure)
Definition GetFriendAvatar.cpp:61
ESteamAvatarSize Size
Definition GetFriendAvatar.h:62
FString SteamID
Definition GetFriendAvatar.h:63
CCallResult< UGetFriendAvatar, AvatarImageLoaded_t > m_callDownloadResult
Definition GetFriendAvatar.h:66

◆ GetSteamFriendAvatar()

UGetFriendAvatar * UGetFriendAvatar::GetSteamFriendAvatar ( const FString & UniqueNetId,
const ESteamAvatarSize AvatarSize = SteamAvatar_Medium )
static

Get a texture of a valid friends avatar, STEAM ONLY, Returns invalid texture if the subsystem hasn't loaded that size of avatar yet Small = 32x32 Medium = 64x64 Large = 128x128

7{
8 UGetFriendAvatar* SelfRef = NewObject<UGetFriendAvatar>();
9 SelfRef->SteamSubsystem = static_cast<FOnlineSubsystemSteam*>(IOnlineSubsystem::Get());
10 SelfRef->Size = AvatarSize;
11 SelfRef->SteamID = UniqueNetId;
12 return SelfRef;
13}
Definition GetFriendAvatar.h:40
FOnlineSubsystemSteam * SteamSubsystem
Definition GetFriendAvatar.h:57

◆ OnAvatarDownloaded()

void UGetFriendAvatar::OnAvatarDownloaded ( AvatarImageLoaded_t * pAvatarDownloaded,
bool bIOFailure )
private
62{
63 if(bIOFailure || pAvatarDownloaded->m_iImage == -1)
64 {
65 OnFailure.Broadcast(nullptr, k_EResultFail);
66 RemoveFromRoot();
67 return;
68 }
69
70 uint32 Width, Height;
71 if (SteamUtils()->GetImageSize(pAvatarDownloaded->m_iImage, &Width, &Height) && Width > 0 && Height > 0)
72 {
73 // TArray<uint8> ImageRGBA;
74 // ImageRGBA.SetNum(Width * Height * 4);
75 uint8 *ImageRGBA = new uint8[Width * Height * 4];
76 // if (SteamUtils()->GetImageRGBA(pAvatarDownloaded->m_iImage, ImageRGBA.GetData(), ImageRGBA.Num()))
77 if (SteamUtils()->GetImageRGBA(pAvatarDownloaded->m_iImage, (uint8*)ImageRGBA, 4 * Height * Width * sizeof(char)))
78 {
79 UTexture2D* AvatarTexture = UTexture2D::CreateTransient(Width, Height, PF_R8G8B8A8);
80 if (AvatarTexture)
81 {
82 UE_LOG(LogTemp, Error, TEXT("Width: %i Height: %i"), Width, Height);
83 void* TextureData = AvatarTexture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
84 // FMemory::Memcpy(TextureData, ImageRGBA.GetData(), ImageRGBA.Num());
85 FMemory::Memcpy(TextureData, (void*)ImageRGBA, Height * Width * 4);
86 AvatarTexture->PlatformData->Mips[0].BulkData.Unlock();
87 delete[] ImageRGBA;
88 AvatarTexture->NeverStream = true;
89 AvatarTexture->UpdateResource();
90 OnSuccess.Broadcast(AvatarTexture, k_EResultOK);
91 RemoveFromRoot();
92 return;
93 }
94 }
95 }
96 OnFailure.Broadcast(nullptr, k_EResultFail);
97 RemoveFromRoot();
98}
FResponseGetFriendAvatarDelegate OnSuccess
Definition GetFriendAvatar.h:44

Member Data Documentation

◆ m_callDownloadResult

CCallResult<UGetFriendAvatar, AvatarImageLoaded_t> UGetFriendAvatar::m_callDownloadResult
private

◆ OnFailure

FResponseGetFriendAvatarDelegate UGetFriendAvatar::OnFailure

◆ OnSuccess

FResponseGetFriendAvatarDelegate UGetFriendAvatar::OnSuccess

◆ Size

ESteamAvatarSize UGetFriendAvatar::Size
private

◆ SteamID

FString UGetFriendAvatar::SteamID
private

◆ SteamSubsystem

FOnlineSubsystemSteam* UGetFriendAvatar::SteamSubsystem
private

The documentation for this class was generated from the following files: