PICO Unreal Platform SDK
Pico_Challenges.h
1// Copyright 2022 Pico Technology Co., Ltd.All rights reserved.
2// 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.
3// Unreal® Engine, Copyright 1998 – 2022, Epic Games, Inc.All rights reserved.
4#pragma once
5
6#include "CoreMinimal.h"
7#include "UObject/NoExportTypes.h"
8#include "PPF_Platform.h"
9#include "OnlineSubsystemPicoNames.h"
10#include "OnlineSubsystemPico.h"
11#include "Pico_Leaderboards.h"
12#include "Pico_User.h"
13#include "Pico_Challenges.generated.h"
14
16
17// class UPico_Leaderboard;
18class UPico_Challenge;
19class UPico_ChallengeEntry;
20class UPico_ChallengeEntryArray;
21class UPico_ChallengeArray;
22// enum FPico_ChallengeOptions;
23
24
25USTRUCT(BlueprintType, meta = (DisplayName = "ChallengeOptions"))
26struct FPico_ChallengeOptions
27{
28 GENERATED_USTRUCT_BODY()
29
30 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") FString Title;
31 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") int32 StartDate;
32 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") int32 EndDate;
33 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") FString LeaderboardName;
34 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") bool bIncludeActiveChallenges;
35 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") bool bIncludeFutureChallenges;
36 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") bool bIncludePastChallenges;
37 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") EChallengeVisibility Visibility;
38 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pico Platform|Challenges|Challenge Options") EChallengeViewerFilter ViewerFilter;
39};
40
41
42
43DECLARE_LOG_CATEGORY_EXTERN(PicoChallenges, Log, All);
44
48DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeGet, bool, bIsError, const FString&, ErrorMessage, UPico_Challenge*,
49 Challenge);
50
51DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeGetEntries, bool, bIsError, const FString&, ErrorMessage,
52 UPico_ChallengeEntryArray*, ChallengeEntryList);
53
54DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeGetEntriesAfterRank, bool, bIsError, const FString&, ErrorMessage,
55 UPico_ChallengeEntryArray*, ChallengeEntryList);
56
57DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeGetEntriesByIds, bool, bIsError, const FString&, ErrorMessage,
58 UPico_ChallengeEntryArray*, ChallengeEntryList);
59
60DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeGetList, bool, bIsError, const FString&, ErrorMessage,
61 UPico_ChallengeArray*, ChallengeList);
62
63DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeInvite, bool, bIsError, const FString&, ErrorMessage,
64 UPico_Challenge*, Challenge);
65
66DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeLeave, bool, bIsError, const FString&, ErrorMessage, UPico_Challenge*,
67 Challenge);
68
69DECLARE_DYNAMIC_DELEGATE_ThreeParams(FChallengeJoin, bool, bIsError, const FString&, ErrorMessage, UPico_Challenge*,
70 Challenge);
71
83class ONLINESUBSYSTEMPICO_API FPicoChallengesInterface
84{
85private:
86 FOnlineSubsystemPico& PicoSubsystem;
87
88public:
89 FPicoChallengesInterface(FOnlineSubsystemPico& InSubsystem);
91
92 FChallengeGet GetDelegate;
93 FChallengeGetEntries GetEntriesDelegate;
94 FChallengeGetEntriesAfterRank GetEntriesAfterRankDelegate;
95 FChallengeGetEntriesByIds GetEntriesByIdsDelegate;
96 FChallengeGetList GetListDelegate;
97 FChallengeJoin JoinDelegate;
98 FChallengeLeave LeaveDelegate;
99 FChallengeInvite InviteDelegate;
100
110 bool Get(const FString& ChallengeID, FChallengeGet InGetDelegate);
111
140 bool GetEntries(const FString& ChallengeID, int PageIdx, int PageSize, ELeaderboardFilterType Filter,
141 ELeaderboardStartAt StartAt, FChallengeGetEntries InGetEntriesDelegate);
142
156 bool GetEntriesAfterRank(ppfID ChallengeID, int PageIdx, int PageSize, unsigned long long AfterRank,
157 FChallengeGetEntriesAfterRank InGetEntriesAfterRankDelegate);
158
183 bool GetEntriesByIds(const FString& ChallengeID, int PageIdx, int PageSize, ELeaderboardStartAt StartAt,
184 const TArray<FString>& UserIDs, FChallengeGetEntriesByIds InGetEntriesByIdsDelegate);
185
200 bool GetList(FPico_ChallengeOptions ChallengeOptions, int PageIdx, int PageSize, FChallengeGetList InGetListDelegate);
201
211 bool Join(const FString& ChallengeID, FChallengeJoin InJoinDelegate);
212
222 bool Leave(const FString& ChallengeID, FChallengeLeave InLeaveDelegate);
223
234 bool Invite(const FString& ChallengeID, const TArray<FString>& UserIDs, FChallengeInvite Delegate);
235
236};
237
253UCLASS()
254class ONLINESUBSYSTEMPICO_API UOnlinePicoChallengesFunction : public UBlueprintFunctionLibrary
255{
256 GENERATED_BODY()
257
258
259public:
260
271 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
272 static void Get(UObject* WorldContextObject, const FString& ChallengeID, FChallengeGet InGetDelegate);
273
303 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
304 static void GetEntries(UObject* WorldContextObject, const FString& ChallengeID, int PageIdx, int PageSize,
306 FChallengeGetEntries InGetEntriesDelegate);
307
322 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
323 static void GetEntriesAfterRank(UObject* WorldContextObject, const FString& ChallengeID, int PageIdx, int PageSize,
324 const FString& AfterRank,
325 FChallengeGetEntriesAfterRank InGetEntriesAfterRankDelegate);
326
352 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
353 static void GetEntriesByIds(UObject* WorldContextObject, const FString& ChallengeID, int PageIdx, int PageSize,
354 ELeaderboardStartAt StartAt, const TArray<FString>& UserIDs,
355 FChallengeGetEntriesByIds InGetEntriesByIdsDelegate);
356
371 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
372 static void GetList(UObject* WorldContextObject, FPico_ChallengeOptions ChallengeOptions, int PageIdx, int PageSize,
373 FChallengeGetList InGetListDelegate);
374
385 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
386 static void Join(UObject* WorldContextObject, const FString& ChallengeID, FChallengeJoin InJoinDelegate);
387
398 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
399 static void Leave(UObject* WorldContextObject, const FString& ChallengeID, FChallengeLeave InLeaveDelegate);
400
412 UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = "OnlinePico|Challenges")
413 static void Invite(UObject* WorldContextObject, const FString& ChallengeID, const TArray<FString>& UserIDs,
414 FChallengeInvite Delegate);
415};
416 // end of BP_Challenges // end of BlueprintFunction
419
420
421UCLASS(BlueprintType)
422class ONLINESUBSYSTEMPICO_API UPico_Challenge : public UObject
423{
424 GENERATED_BODY()
425
426public:
427 void InitParams(ppfChallenge* ppfChallengeHandle);
428
429private:
430 ppfChallengeCreationType CreationType;
431 unsigned long long EndDate = 0;
432 unsigned long long StartDate = 0;
433 uint64_t ID = 0;
434 FString Title = FString();
435 ppfChallengeVisibility Visibility;
436 UPROPERTY()
437 UPico_UserArray* InvitedUsersOptional;
438 UPROPERTY()
439 UPico_UserArray* ParticipantsOptional;
440 UPROPERTY()
441 UPico_Leaderboard* Leaderboard;
442
443public:
444 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
445 EChallengeCreationType GetCreationType();
446
447 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
448 FDateTime GetEndDateTime();
449
450 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
451 FDateTime GetStartDateTime();
452
453 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
454 FString GetEndDate();
455
456 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
457 FString GetStartDate();
458
459 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
460 FString GetID();
461
462 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
463 FString GetTitle();
464
465 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
466 EChallengeVisibility GetVisibility();
467
468 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
469 UPico_UserArray* GetInvitedUsersOptional();
470
471 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
472 UPico_Leaderboard* GetLeaderboard();
473
474 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge")
475 UPico_UserArray* GetParticipantsOptional();
476};
477
478//
479UCLASS(BlueprintType)
480class ONLINESUBSYSTEMPICO_API UPico_ChallengeEntry : public UObject
481{
482 GENERATED_BODY()
483
484public:
485 void InitParams(ppfChallengeEntryHandle ppfChallengeEntryHandle);
486
487private:
488 FString DisplayScore = FString();
489 TArray<uint8> ExtraData;
490 uint64_t ID = 0;
491 int Rank;
492 long Score;
493 unsigned long long Timestamp;
494 UPROPERTY()
495 UPico_User* User;
496
497public:
498 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
499 FString GetDisplayScore();
500
501 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
502 TArray<uint8> GetExtraData();
503
504 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
505 FString GetExtraDataString();
506
507 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
508 FString GetID();
509
510 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
511 int32 GetRank();
512
513 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
514 int64 GetScore();
515
516 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
517 FDateTime GetTimestamp();
518
519 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry")
520 UPico_User* GetUser();
521};
522
523UCLASS(BlueprintType)
524class ONLINESUBSYSTEMPICO_API UPico_ChallengeEntryArray : public UObject
525{
526 GENERATED_BODY()
527private:
528 UPROPERTY()
529 TArray<UPico_ChallengeEntry*> ChallengeEntryArray;
530 int32 Size = 0;
531 bool bHasNextPage;
532 bool bHasPreviousPage;
533 int32 TotalCount = 0;
534public:
535 void InitParams(ppfChallengeEntryArrayHandle InppfChallengeEntryArrayHandle);
536
537 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry Array")
538 UPico_ChallengeEntry* GetElement(int32 Index);
539
540 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry Array")
541 int32 GetSize();
542
543 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry Array")
544 bool HasNextPage();
545
546 // UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry Array")
547 // bool HasPreviousPage();
548 //
549 // UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Entry Array")
550 // int32 GetTotalCount();
551};
552
553UCLASS(BlueprintType)
554class ONLINESUBSYSTEMPICO_API UPico_ChallengeArray : public UObject
555{
556 GENERATED_BODY()
557private:
558 UPROPERTY()
559 TArray<UPico_Challenge*> ChallengeArray;
560 int32 Size = 0;
561 bool bHasNextPage;
562 bool bHasPreviousPage;
563 int32 TotalCount = 0;
564
565public:
566 void InitParams(ppfChallengeArrayHandle InppfChallengeArrayHandle);
567
568 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Array")
569 UPico_Challenge* GetElement(int32 Index);
570
571 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Array")
572 int32 GetSize();
573
574 UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Array")
575 bool HasNextPage();
576
577 // UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Array")
578 // bool HasPreviousPage();
579 //
580 // UFUNCTION(BlueprintPure, Category = "Pico Platform|Challenges|Challenge Array")
581 // int32 GetTotalCount();
582};
583
PicoChallengesInterface class.
Definition: Pico_Challenges.h:84
bool Leave(const FString &ChallengeID, FChallengeLeave InLeaveDelegate)
Lets the current user leave a challenge.
bool Join(const FString &ChallengeID, FChallengeJoin InJoinDelegate)
Lets the current user join a challenge.
bool GetList(FPico_ChallengeOptions ChallengeOptions, int PageIdx, int PageSize, FChallengeGetList InGetListDelegate)
Gets a list of challenges.
bool GetEntriesAfterRank(ppfID ChallengeID, int PageIdx, int PageSize, unsigned long long AfterRank, FChallengeGetEntriesAfterRank InGetEntriesAfterRankDelegate)
Gets the challenge entries after a specified ranking.
bool GetEntriesByIds(const FString &ChallengeID, int PageIdx, int PageSize, ELeaderboardStartAt StartAt, const TArray< FString > &UserIDs, FChallengeGetEntriesByIds InGetEntriesByIdsDelegate)
Gets the challenge entries for specified user(s).
bool Invite(const FString &ChallengeID, const TArray< FString > &UserIDs, FChallengeInvite Delegate)
Invites user(s) to join a challenge.
bool GetEntries(const FString &ChallengeID, int PageIdx, int PageSize, ELeaderboardFilterType Filter, ELeaderboardStartAt StartAt, FChallengeGetEntries InGetEntriesDelegate)
Gets a list of challenge entries.
bool Get(const FString &ChallengeID, FChallengeGet InGetDelegate)
Gets a specified challenge by ID.
OnlinePicoChallenges Blueprint Function class.
Definition: Pico_Challenges.h:255
ELeaderboardStartAt
The type of sorting to use when getting leaderboard or challenge entries.
Definition: OnlineSubsystemPicoNames.h:648
EChallengeViewerFilter
The challenge viewer filter.
Definition: OnlineSubsystemPicoNames.h:637
EChallengeCreationType
The creator of the challenge.
Definition: OnlineSubsystemPicoNames.h:619
EChallengeVisibility
The visibility type of the challenge.
Definition: OnlineSubsystemPicoNames.h:628
ELeaderboardFilterType
The type of filter to use when using leaderboards or challenges.
Definition: OnlineSubsystemPicoNames.h:664