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
39 EAchievementWritePolicy WritePolicy;
40 bool IsArchived;
41 FString Name;
42 FString LockedImageURL;
43 FString UnlockedImageURL;
44
45 FString ToDebugString() const
46 {
47 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"),
48 *Name, *Title.ToString(),
49 *LockedDesc.ToString(),
50 *UnlockedDesc.ToString(),
51 bIsHidden ? TEXT("true") : TEXT("false"),
52 Type,
53 Target,
55 IsArchived ? TEXT("true") : TEXT("false"),
56 *LockedImageURL,
57 *UnlockedImageURL,
58 WritePolicy
59 );
60 }
61
62};
63
67struct FOnlineAchievementPico : FOnlineAchievement
68{
70 long long Count;
71
73 FString Bitfield;
74
77
78 FOnlineAchievementPico(const ppfAchievementProgressHandle& AchievementProgress) //:
79 // Count(ppf_AchievementProgress_GetCount(AchievementProgress)),
80 // Bitfield(ppf_AchievementProgress_GetBitfield(AchievementProgress)),
81 // bIsUnlocked(ppf_AchievementProgress_GetIsUnlocked(AchievementProgress))
82 {
83 Count = ppf_AchievementProgress_GetCount(AchievementProgress);
84 Bitfield = ppf_AchievementProgress_GetBitfield(AchievementProgress);
85 bIsUnlocked = ppf_AchievementProgress_GetIsUnlocked(AchievementProgress);
86
87 FString AchievementName = UTF8_TO_TCHAR(ppf_AchievementProgress_GetName(AchievementProgress));
88 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor ppf_AchievementProgress_GetName: %s, ppf_AchievementProgress_GetCount: %lld"), *AchievementName, ppf_AchievementProgress_GetCount(AchievementProgress));
89 Id = AchievementName;
90 }
91
93 Count(0),
94 bIsUnlocked(false)
95 {
96 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor by FOnlineAchievementDescPico AchievementDesc.Name: %s"), *AchievementDesc.Name);
97 Id = AchievementDesc.Name;
98 Progress = 0;
99 if (AchievementDesc.Type == EAchievementType::Bitfield)
100 {
101 Bitfield = TEXT("");
102 for (uint32 i = 0; i < AchievementDesc.BitfieldLength; ++i)
103 {
104 Bitfield.AppendChar('0');
105 }
106 }
107 }
108 FOnlineAchievementPico(const FOnlineAchievement& OnlineAchievementPico) :
109 Count(0),
110 bIsUnlocked(false)
111 {
112 UE_LOG_ONLINE_ACHIEVEMENTS(Display, TEXT("PPF_GAME FOnlineAchievementPico constructor by FOnlineAchievement Id: %s"), *OnlineAchievementPico.Id);
113 Id = OnlineAchievementPico.Id;
114 Progress = OnlineAchievementPico.Progress;
115 }
116};
117
118
122class FOnlineAchievementsPico : public IOnlineAchievements
123{
124private:
125
127 FOnlineSubsystemPico& PicoSubsystem;
128
130 TMap<FUniqueNetIdPico, TArray<FOnlineAchievement>> PlayerAchievements;
131
133 TMap<FString, FOnlineAchievementDescPico> AchievementDescriptions;
134
135 void GetWriteAchievementCountValue(FVariantData VariantData, long long& OutData) const;
136 void GetWriteAchievementBitfieldValue(FVariantData VariantData, FString& OutData, uint32 BitfieldLength) const;
137 double CalculatePlayerAchievementProgress(const FOnlineAchievementPico Achievement);
138
139
140 void SaveLog(const ELogVerbosity::Type Verbosity, const FString & Log) const;
141
142 const int MAX_REQUEST_SIZE = 50; // single max
143 int GetAllProgressIndex = 0;
144 int GetAllDefinitionIndex = 0;
145
146public:
147
153 FOnlineAchievementsPico(FOnlineSubsystemPico& InSubsystem);
154
159
160 // Begin IOnlineAchievements interface
161 virtual void WriteAchievements(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate = FOnAchievementsWrittenDelegate()) override;
162 virtual void QueryAchievements(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override;
163 virtual void QueryAchievementDescriptions(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override;
164 virtual EOnlineCachedResult::Type GetCachedAchievement(const FUniqueNetId& PlayerId, const FString& AchievementId, FOnlineAchievement& OutAchievement) override;
165 virtual EOnlineCachedResult::Type GetCachedAchievements(const FUniqueNetId& PlayerId, TArray<FOnlineAchievement> & OutAchievements) override;
166 virtual EOnlineCachedResult::Type GetCachedAchievementDescription(const FString& AchievementId, FOnlineAchievementDesc& OutAchievementDesc) override;
167#if !UE_BUILD_SHIPPING
168 virtual bool ResetAchievements(const FUniqueNetId& PlayerId) override;
169#endif // !UE_BUILD_SHIPPING
170 // End IOnlineAchievements interface
171};
Definition: OnlineAchievementsInterfacePico.h:123
FOnlineSubsystemPico & PicoSubsystem
Definition: OnlineAchievementsInterfacePico.h:127
TMap< FUniqueNetIdPico, TArray< FOnlineAchievement > > PlayerAchievements
Definition: OnlineAchievementsInterfacePico.h:130
virtual ~FOnlineAchievementsPico()
TMap< FString, FOnlineAchievementDescPico > AchievementDescriptions
Definition: OnlineAchievementsInterfacePico.h:133
FOnlineAchievementsPico(FOnlineSubsystemPico &InSubsystem)
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
EAchievementType Type
Definition: OnlineAchievementsInterfacePico.h:31
uint64 Target
Definition: OnlineAchievementsInterfacePico.h:34
Definition: OnlineAchievementsInterfacePico.h:68
long long Count
Definition: OnlineAchievementsInterfacePico.h:70
FString Bitfield
Definition: OnlineAchievementsInterfacePico.h:73
bool bIsUnlocked
Definition: OnlineAchievementsInterfacePico.h:76