PICO Unreal Platform SDK
OnlineAchievementsInterfacePico.h
1/*******************************************************************************
2Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
3
4NOTICE:All information contained herein is, and remains the property of
5PICO Technology Co., Ltd. The intellectual and technical concepts
6contained herein are proprietary to PICO Technology Co., Ltd. and may be
7covered by patents, patents in process, and are protected by trade secret or
8copyright law. Dissemination of this information or reproduction of this
9material is strictly forbidden unless prior written permission is obtained from
10PICO Technology Co., Ltd.
11*******************************************************************************/
12// This plugin incorporates portions of the Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc.In the United States of America and elsewhere.
13// Unreal® Engine, Copyright 1998 – 2022, Epic Games, Inc.All rights reserved.
14
15#pragma once
16
17#include "Interfaces/OnlineAchievementsInterface.h"
18#include "OnlineIdentityPico.h"
19#include "OnlineSubsystemPicoPackage.h"
20
21#define USE_PICO_ACHIEVEMENT_DESC FName(TEXT("USE_PICO_ACHIEVEMENT_DESC"))
22#define USE_PICO_ACHIEVEMENT FName(TEXT("USE_PICO_ACHIEVEMNT"))
23#define USE_PICO_ACHIEVEMENT_WRITE FName(TEXT("USE_PICO_ACHIEVEMENT_WRITE"))
24
28struct FOnlineAchievementDescPico : FOnlineAchievementDesc
29{
32
34 uint64 Target;
35
38
41
44
46 FString Name;
47
50
53
54 FString ToDebugString() const
55 {
56 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"),
57 *Name, *Title.ToString(),
58 *LockedDesc.ToString(),
59 *UnlockedDesc.ToString(),
60 bIsHidden ? TEXT("true") : TEXT("false"),
61 Type,
62 Target,
64 IsArchived ? TEXT("true") : TEXT("false"),
68 );
69 }
70
71};
72
76struct FOnlineAchievementPico : FOnlineAchievement
77{
79 long long Count;
80
82 FString Bitfield;
83
86
87 FOnlineAchievementPico(const ppfAchievementProgressHandle& AchievementProgress) //:
88 // Count(ppf_AchievementProgress_GetCount(AchievementProgress)),
89 // Bitfield(ppf_AchievementProgress_GetBitfield(AchievementProgress)),
90 // bIsUnlocked(ppf_AchievementProgress_GetIsUnlocked(AchievementProgress))
91 {
92 Count = ppf_AchievementProgress_GetCount(AchievementProgress);
93 Bitfield = ppf_AchievementProgress_GetBitfield(AchievementProgress);
94 bIsUnlocked = ppf_AchievementProgress_GetIsUnlocked(AchievementProgress);
95
96 FString AchievementName = UTF8_TO_TCHAR(ppf_AchievementProgress_GetName(AchievementProgress));
97 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor ppf_AchievementProgress_GetName: %s, ppf_AchievementProgress_GetCount: %lld"), *AchievementName, ppf_AchievementProgress_GetCount(AchievementProgress));
98 Id = AchievementName;
99 }
100
101 FOnlineAchievementPico(const FOnlineAchievementDescPico& AchievementDesc) :
102 Count(0),
103 bIsUnlocked(false)
104 {
105 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor by FOnlineAchievementDescPico AchievementDesc.Name: %s"), *AchievementDesc.Name);
106 Id = AchievementDesc.Name;
107 Progress = 0;
108 if (AchievementDesc.Type == EAchievementType::Bitfield)
109 {
110 Bitfield = TEXT("");
111 for (uint32 i = 0; i < AchievementDesc.BitfieldLength; ++i)
112 {
113 Bitfield.AppendChar('0');
114 }
115 }
116 }
117 FOnlineAchievementPico(const FOnlineAchievement& OnlineAchievementPico) :
118 Count(0),
119 bIsUnlocked(false)
120 {
121 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor by FOnlineAchievement Id: %s"), *OnlineAchievementPico.Id);
122 Id = OnlineAchievementPico.Id;
123 Progress = OnlineAchievementPico.Progress;
124 }
125};
126
127
143class FOnlineAchievementsPico : public IOnlineAchievements
144{
145private:
146
147 // Reference to the owning subsystem
148 FOnlineSubsystemPico& PicoSubsystem;
149
150 // Mapping of players to their achievements
151 TMap<FUniqueNetIdPico, TArray<FOnlineAchievement>> PlayerAchievements;
152
153 // Cached achievements (not player-specific)
154 TMap<FString, FOnlineAchievementDescPico> AchievementDescriptions;
155
156 void GetWriteAchievementCountValue(FVariantData VariantData, long long& OutData) const;
157 void GetWriteAchievementBitfieldValue(FVariantData VariantData, FString& OutData, uint32 BitfieldLength) const;
158 double CalculatePlayerAchievementProgress(const FOnlineAchievementPico Achievement);
159
160
161 void SaveLog(const ELogVerbosity::Type Verbosity, const FString & Log) const;
162
163 // The maximum number of items that can be obtained in a single request
164 const int MAX_REQUEST_SIZE = 50;
165 int GetAllProgressIndex = 0;
166 int GetAllDefinitionIndex = 0;
167
168public:
169
170 //Constructor
171 // @param InSubsystem - A reference to the owning subsystem
172 FOnlineAchievementsPico(FOnlineSubsystemPico& InSubsystem);
173
174 virtual ~FOnlineAchievementsPico();
175
176 // Begin IOnlineAchievements interface
177
185 virtual void WriteAchievements(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate = FOnAchievementsWrittenDelegate()) override;
186
190 virtual void QueryAchievements(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override;
191
195 virtual void QueryAchievementDescriptions(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override;
196
207 virtual EOnlineCachedResult::Type GetCachedAchievement(const FUniqueNetId& PlayerId, const FString& AchievementId, FOnlineAchievement& OutAchievement) override;
208
218 virtual EOnlineCachedResult::Type GetCachedAchievements(const FUniqueNetId& PlayerId, TArray<FOnlineAchievement> & OutAchievements) override;
219
229 virtual EOnlineCachedResult::Type GetCachedAchievementDescription(const FString& AchievementId, FOnlineAchievementDesc& OutAchievementDesc) override;
230#if !UE_BUILD_SHIPPING
231 virtual bool ResetAchievements(const FUniqueNetId& PlayerId) override;
232#endif // !UE_BUILD_SHIPPING
233 // End IOnlineAchievements interface
234}; // end of OnlineAchievements(OnlineSub) // end of Function
OnlineAchievementsPico class inherited from IOnlineAchievements(Unreal Engine)
Definition: OnlineAchievementsInterfacePico.h:144
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.
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.
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:573
EAchievementWritePolicy
The write policy of the achievement.
Definition: OnlineSubsystemPicoNames.h:582
Definition: OnlineAchievementsInterfacePico.h:29
uint32 BitfieldLength
Definition: OnlineAchievementsInterfacePico.h:37
FString UnlockedImageURL
Definition: OnlineAchievementsInterfacePico.h:52
EAchievementType Type
Definition: OnlineAchievementsInterfacePico.h:31
uint64 Target
Definition: OnlineAchievementsInterfacePico.h:34
FString LockedImageURL
Definition: OnlineAchievementsInterfacePico.h:49
bool IsArchived
Definition: OnlineAchievementsInterfacePico.h:43
FString Name
Definition: OnlineAchievementsInterfacePico.h:46
EAchievementWritePolicy WritePolicy
Definition: OnlineAchievementsInterfacePico.h:40
Definition: OnlineAchievementsInterfacePico.h:77
long long Count
Definition: OnlineAchievementsInterfacePico.h:79
FString Bitfield
Definition: OnlineAchievementsInterfacePico.h:82
bool bIsUnlocked
Definition: OnlineAchievementsInterfacePico.h:85