PICO Unreal Platform SDK
OnlineAchievementsInterfacePico.h
1// Copyright® 2015-2023 PICO Technology Co., Ltd. All rights reserved.
2
3#pragma once
4
5#include "Interfaces/OnlineAchievementsInterface.h"
6#include "OnlineIdentityPico.h"
7#include "OnlineSubsystemPicoPackage.h"
8
9#define USE_PICO_ACHIEVEMENT_DESC FName(TEXT("USE_PICO_ACHIEVEMENT_DESC"))
10#define USE_PICO_ACHIEVEMENT FName(TEXT("USE_PICO_ACHIEVEMNT"))
11#define USE_PICO_ACHIEVEMENT_WRITE FName(TEXT("USE_PICO_ACHIEVEMENT_WRITE"))
12
16struct FOnlineAchievementDescPico : FOnlineAchievementDesc
17{
20
22 uint64 Target;
23
26
29
32
34 FString Name;
35
38
41
42 FString ToDebugString() const
43 {
44 return FString::Printf( TEXT("Name=%s\nTitle=%s\nLockedDesc=%s\nUnlockedDesc=%s\nbIsHidden=%s\nType=%d\nTarget=%llu\nBitfieldLength=%u\nIsArchived: %s\nLockedImageURL: %s\nUnlockedImageURL: %s\nWritePolicy: %d\n"),
45 *Name, *Title.ToString(),
46 *LockedDesc.ToString(),
47 *UnlockedDesc.ToString(),
48 bIsHidden ? TEXT("true") : TEXT("false"),
49 Type,
50 Target,
52 IsArchived ? TEXT("true") : TEXT("false"),
56 );
57 }
58
59};
60
64struct FOnlineAchievementPico : FOnlineAchievement
65{
67 long long Count;
68
70 FString Bitfield;
71
74
75 FOnlineAchievementPico(const ppfAchievementProgressHandle& AchievementProgress) //:
76 // Count(ppf_AchievementProgress_GetCount(AchievementProgress)),
77 // Bitfield(ppf_AchievementProgress_GetBitfield(AchievementProgress)),
78 // bIsUnlocked(ppf_AchievementProgress_GetIsUnlocked(AchievementProgress))
79 {
80 Count = ppf_AchievementProgress_GetCount(AchievementProgress);
81 Bitfield = ppf_AchievementProgress_GetBitfield(AchievementProgress);
82 bIsUnlocked = ppf_AchievementProgress_GetIsUnlocked(AchievementProgress);
83
84 FString AchievementName = UTF8_TO_TCHAR(ppf_AchievementProgress_GetName(AchievementProgress));
85 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor ppf_AchievementProgress_GetName: %s, ppf_AchievementProgress_GetCount: %lld"), *AchievementName, ppf_AchievementProgress_GetCount(AchievementProgress));
86 Id = AchievementName;
87 }
88
90 Count(0),
91 bIsUnlocked(false)
92 {
93 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor by FOnlineAchievementDescPico AchievementDesc.Name: %s"), *AchievementDesc.Name);
94 Id = AchievementDesc.Name;
95 Progress = 0;
96 if (AchievementDesc.Type == EAchievementType::Bitfield)
97 {
98 Bitfield = TEXT("");
99 for (uint32 i = 0; i < AchievementDesc.BitfieldLength; ++i)
100 {
101 Bitfield.AppendChar('0');
102 }
103 }
104 }
105 FOnlineAchievementPico(const FOnlineAchievement& OnlineAchievementPico) :
106 Count(0),
107 bIsUnlocked(false)
108 {
109 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor by FOnlineAchievement Id: %s"), *OnlineAchievementPico.Id);
110 Id = OnlineAchievementPico.Id;
111 Progress = OnlineAchievementPico.Progress;
112 }
113};
114
115
119class FOnlineAchievementsPico : public IOnlineAchievements
120{
121private:
122
124 FOnlineSubsystemPico& PicoSubsystem;
125
127 TMap<FUniqueNetIdPico, TArray<FOnlineAchievement>> PlayerAchievements;
128
130 TMap<FString, FOnlineAchievementDescPico> AchievementDescriptions;
131
132 void GetWriteAchievementCountValue(FVariantData VariantData, long long& OutData) const;
133 void GetWriteAchievementBitfieldValue(FVariantData VariantData, FString& OutData, uint32 BitfieldLength) const;
134 double CalculatePlayerAchievementProgress(const FOnlineAchievementPico Achievement);
135
136
137 void SaveLog(const ELogVerbosity::Type Verbosity, const FString & Log) const;
138
140 const int MAX_REQUEST_SIZE = 50;
141 int GetAllProgressIndex = 0;
142 int GetAllDefinitionIndex = 0;
143
144public:
145
151 FOnlineAchievementsPico(FOnlineSubsystemPico& InSubsystem);
152
157
158 // Begin IOnlineAchievements interface
159
167 virtual void WriteAchievements(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate = FOnAchievementsWrittenDelegate()) override;
168
172 virtual void QueryAchievements(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override;
173
177 virtual void QueryAchievementDescriptions(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override;
178
189 virtual EOnlineCachedResult::Type GetCachedAchievement(const FUniqueNetId& PlayerId, const FString& AchievementId, FOnlineAchievement& OutAchievement) override;
190
200 virtual EOnlineCachedResult::Type GetCachedAchievements(const FUniqueNetId& PlayerId, TArray<FOnlineAchievement> & OutAchievements) override;
201
211 virtual EOnlineCachedResult::Type GetCachedAchievementDescription(const FString& AchievementId, FOnlineAchievementDesc& OutAchievementDesc) override;
212#if !UE_BUILD_SHIPPING
213 virtual bool ResetAchievements(const FUniqueNetId& PlayerId) override;
214#endif // !UE_BUILD_SHIPPING
215 // End IOnlineAchievements interface
216};
Definition: OnlineAchievementsInterfacePico.h:120
FOnlineSubsystemPico & PicoSubsystem
Definition: OnlineAchievementsInterfacePico.h:124
TMap< FUniqueNetIdPico, TArray< FOnlineAchievement > > PlayerAchievements
Definition: OnlineAchievementsInterfacePico.h:127
virtual void QueryAchievements(const FUniqueNetId &PlayerId, const FOnQueryAchievementsCompleteDelegate &Delegate=FOnQueryAchievementsCompleteDelegate()) override
Read achievement ids and progress from the server. You must use QueryAchievementDescriptions first to...
virtual void QueryAchievementDescriptions(const FUniqueNetId &PlayerId, const FOnQueryAchievementsCompleteDelegate &Delegate=FOnQueryAchievementsCompleteDelegate()) override
Read achievement descriptions from the server for displaying achievements in game。
virtual EOnlineCachedResult::Type GetCachedAchievements(const FUniqueNetId &PlayerId, TArray< FOnlineAchievement > &OutAchievements) override
Get cached achievements data.
const int MAX_REQUEST_SIZE
Definition: OnlineAchievementsInterfacePico.h:140
virtual ~FOnlineAchievementsPico()
virtual void WriteAchievements(const FUniqueNetId &PlayerId, FOnlineAchievementsWriteRef &WriteObject, const FOnAchievementsWrittenDelegate &Delegate=FOnAchievementsWrittenDelegate()) override
Refresh achievement progress data to the server, or unlock an achievement. If the achievement type is...
virtual EOnlineCachedResult::Type GetCachedAchievement(const FUniqueNetId &PlayerId, const FString &AchievementId, FOnlineAchievement &OutAchievement) override
Get cached achievement data.
TMap< FString, FOnlineAchievementDescPico > AchievementDescriptions
Definition: OnlineAchievementsInterfacePico.h:130
FOnlineAchievementsPico(FOnlineSubsystemPico &InSubsystem)
virtual EOnlineCachedResult::Type GetCachedAchievementDescription(const FString &AchievementId, FOnlineAchievementDesc &OutAchievementDesc) override
The lookup achievement data was found in the cache.
EAchievementType
The type of the achievement.
Definition: OnlineSubsystemPicoNames.h:561
EAchievementWritePolicy
The write policy of the achievement.
Definition: OnlineSubsystemPicoNames.h:570
Definition: OnlineAchievementsInterfacePico.h:17
uint32 BitfieldLength
Definition: OnlineAchievementsInterfacePico.h:25
FString UnlockedImageURL
Definition: OnlineAchievementsInterfacePico.h:40
EAchievementType Type
Definition: OnlineAchievementsInterfacePico.h:19
uint64 Target
Definition: OnlineAchievementsInterfacePico.h:22
FString LockedImageURL
Definition: OnlineAchievementsInterfacePico.h:37
bool IsArchived
Definition: OnlineAchievementsInterfacePico.h:31
FString Name
Definition: OnlineAchievementsInterfacePico.h:34
EAchievementWritePolicy WritePolicy
Definition: OnlineAchievementsInterfacePico.h:28
Definition: OnlineAchievementsInterfacePico.h:65
long long Count
Definition: OnlineAchievementsInterfacePico.h:67
FString Bitfield
Definition: OnlineAchievementsInterfacePico.h:70
bool bIsUnlocked
Definition: OnlineAchievementsInterfacePico.h:73