146 lines
6.0 KiB
C#
146 lines
6.0 KiB
C#
|
|
/*******************************************************************************
|
|||
|
|
Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
|
|||
|
|
|
|||
|
|
NOTICE:All information contained herein is, and remains the property of
|
|||
|
|
PICO Technology Co., Ltd. The intellectual and technical concepts
|
|||
|
|
contained herein are proprietary to PICO Technology Co., Ltd. and may be
|
|||
|
|
covered by patents, patents in process, and are protected by trade secret or
|
|||
|
|
copyright law. Dissemination of this information or reproduction of this
|
|||
|
|
material is strictly forbidden unless prior written permission is obtained from
|
|||
|
|
PICO Technology Co., Ltd.
|
|||
|
|
*******************************************************************************/
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
|
|||
|
|
namespace Pico.Platform.Models
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
/// <summary>Leaderboard info.</summary>
|
|||
|
|
public class Leaderboard
|
|||
|
|
{
|
|||
|
|
/// The unique identifier of the leaderboard, which is configured on the PICO Developer Platform.
|
|||
|
|
public readonly string ApiName;
|
|||
|
|
|
|||
|
|
/// Leaderboard ID.
|
|||
|
|
public readonly ulong ID;
|
|||
|
|
|
|||
|
|
/** Associate a destination to the leaderboard so that users can be directed to a specific location in the app.
|
|||
|
|
* If the leaderboard for that challenge is associated with a destination, the app will be launched, and the user will be directed to the destination.
|
|||
|
|
* If the leaderboard for that challenge is not associated with any destination, the app will be launched, and the user will be directed to the Home page.
|
|||
|
|
*/
|
|||
|
|
public readonly Destination DestinationOptional;
|
|||
|
|
|
|||
|
|
public Leaderboard(IntPtr o)
|
|||
|
|
{
|
|||
|
|
ApiName = CLIB.ppf_Leaderboard_GetApiName(o);
|
|||
|
|
ID = CLIB.ppf_Leaderboard_GetID(o);
|
|||
|
|
var pointer = CLIB.ppf_Leaderboard_GetDestination(o);
|
|||
|
|
if (pointer == IntPtr.Zero)
|
|||
|
|
DestinationOptional = null;
|
|||
|
|
else
|
|||
|
|
DestinationOptional = new Destination(pointer);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Leaderboard list. Each element is \ref Leaderboard.</summary>
|
|||
|
|
public class LeaderboardList : MessageArray<Leaderboard>
|
|||
|
|
{
|
|||
|
|
/// The total number of leaderboards in the list.
|
|||
|
|
public readonly ulong TotalCount;
|
|||
|
|
public LeaderboardList(IntPtr a)
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
TotalCount = CLIB.ppf_LeaderboardArray_GetTotalCount(a);
|
|||
|
|
NextPageParam = CLIB.ppf_LeaderboardArray_HasNextPage(a) ? "true" : string.Empty;
|
|||
|
|
var count = (int) CLIB.ppf_LeaderboardArray_GetSize(a);
|
|||
|
|
this.Capacity = count;
|
|||
|
|
for (var i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
Add(new Leaderboard(CLIB.ppf_LeaderboardArray_GetElement(a, (UIntPtr) i)));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Supplementary metric.</summary>
|
|||
|
|
public class SupplementaryMetric
|
|||
|
|
{
|
|||
|
|
/// The ID of the supplementary metric.
|
|||
|
|
public readonly UInt64 ID;
|
|||
|
|
/// The value of the supplementary metric.
|
|||
|
|
public readonly long Metric;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public SupplementaryMetric(IntPtr o)
|
|||
|
|
{
|
|||
|
|
ID = CLIB.ppf_SupplementaryMetric_GetID(o);
|
|||
|
|
Metric = CLIB.ppf_SupplementaryMetric_GetMetric(o);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Leaderboard entry info.</summary>
|
|||
|
|
public class LeaderboardEntry
|
|||
|
|
{
|
|||
|
|
/// The entry's display score.
|
|||
|
|
public readonly string DisplayScore;
|
|||
|
|
/// Additional info, no more than 2KB.
|
|||
|
|
public readonly byte[] ExtraData;
|
|||
|
|
/// Entry ID.
|
|||
|
|
public readonly UInt64 ID;
|
|||
|
|
/// The entry's ranking on the leaderboard. For example, returns `1` for top1.
|
|||
|
|
public readonly int Rank;
|
|||
|
|
/// The score used to rank the entry.
|
|||
|
|
public readonly long Score;
|
|||
|
|
/// The supplementary metric used for tiebreakers. This field can be null. Need to check whether it is null before use.
|
|||
|
|
public readonly SupplementaryMetric SupplementaryMetricOptional;
|
|||
|
|
/// The time when the entry was written to the leaderboard.
|
|||
|
|
public readonly DateTime Timestamp;
|
|||
|
|
/// The user the entry belongs to.
|
|||
|
|
public readonly User User;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public LeaderboardEntry(IntPtr o)
|
|||
|
|
{
|
|||
|
|
DisplayScore = CLIB.ppf_LeaderboardEntry_GetDisplayScore(o);
|
|||
|
|
var extraDataPtr = CLIB.ppf_LeaderboardEntry_GetExtraData(o);
|
|||
|
|
var extraDataSize = CLIB.ppf_LeaderboardEntry_GetExtraDataLength(o);
|
|||
|
|
ExtraData = MarshalUtil.ByteArrayFromNative(extraDataPtr, extraDataSize);
|
|||
|
|
ID = CLIB.ppf_LeaderboardEntry_GetID(o);
|
|||
|
|
Rank = CLIB.ppf_LeaderboardEntry_GetRank(o);
|
|||
|
|
Score = CLIB.ppf_LeaderboardEntry_GetScore(o);
|
|||
|
|
Timestamp = TimeUtil.SecondsToDateTime((long) CLIB.ppf_LeaderboardEntry_GetTimestamp(o));
|
|||
|
|
User = new User(CLIB.ppf_LeaderboardEntry_GetUser(o));
|
|||
|
|
{
|
|||
|
|
var pointer = CLIB.ppf_LeaderboardEntry_GetSupplementaryMetric(o);
|
|||
|
|
if (pointer == IntPtr.Zero)
|
|||
|
|
{
|
|||
|
|
SupplementaryMetricOptional = null;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SupplementaryMetricOptional = new SupplementaryMetric(pointer);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Leaderboard entry list. Each element is \ref LeaderboardEntry.</summary>
|
|||
|
|
public class LeaderboardEntryList : MessageArray<LeaderboardEntry>
|
|||
|
|
{
|
|||
|
|
/// The total number of entries on the leaderboard.
|
|||
|
|
public readonly ulong TotalCount;
|
|||
|
|
|
|||
|
|
public LeaderboardEntryList(IntPtr a)
|
|||
|
|
{
|
|||
|
|
NextPageParam = CLIB.ppf_LeaderboardEntryArray_HasNextPage(a) ? "true" : string.Empty;
|
|||
|
|
PreviousPageParam = CLIB.ppf_LeaderboardEntryArray_HasPreviousPage(a) ? "true" : string.Empty;
|
|||
|
|
var count = (int) CLIB.ppf_LeaderboardEntryArray_GetSize(a);
|
|||
|
|
this.Capacity = count;
|
|||
|
|
for (uint i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
this.Add(new LeaderboardEntry(CLIB.ppf_LeaderboardEntryArray_GetElement(a, (UIntPtr) i)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TotalCount = CLIB.ppf_LeaderboardEntryArray_GetTotalCount(a);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|