268 lines
9.4 KiB
C#
268 lines
9.4 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;
|
||
using UnityEngine;
|
||
|
||
namespace Pico.Platform.Models
|
||
{
|
||
/// <summary>Challenge setting options.</summary>
|
||
public class ChallengeOptions
|
||
{
|
||
/// For creating challenge options
|
||
public ChallengeOptions()
|
||
{
|
||
Handle = CLIB.ppf_ChallengeOptions_Create();
|
||
}
|
||
|
||
/// Set the end date. Currently, not used.
|
||
public void SetEndDate(DateTime value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetEndDate(Handle, Convert.ToUInt64(TimeUtil.DateTimeToSeconds(value)));
|
||
}
|
||
|
||
/// Set whether to get active challenges.
|
||
public void SetIncludeActiveChallenges(bool value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetIncludeActiveChallenges(Handle, value);
|
||
}
|
||
|
||
/// Set whether to get future challenges whose start dates are latter than the current time.
|
||
public void SetIncludeFutureChallenges(bool value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetIncludeFutureChallenges(Handle, value);
|
||
}
|
||
|
||
/// Set whether to get past challenges whose end dates are earlier than the current time.
|
||
public void SetIncludePastChallenges(bool value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetIncludePastChallenges(Handle, value);
|
||
}
|
||
|
||
/// (Optional) Set the name of the leaderboard that the challenges associated with.
|
||
public void SetLeaderboardName(string value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetLeaderboardName(Handle, value);
|
||
}
|
||
|
||
/// Set the start date. Currently, not used.
|
||
public void SetStartDate(DateTime value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetStartDate(Handle, Convert.ToUInt64(TimeUtil.DateTimeToSeconds(value)));
|
||
}
|
||
|
||
/// Set the challenge title. Currently, not used.
|
||
public void SetTitle(string value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetTitle(Handle, value);
|
||
}
|
||
|
||
/// Set the filter for quering specified challenges.
|
||
public void SetViewerFilter(ChallengeViewerFilter value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetViewerFilter(Handle, value);
|
||
}
|
||
|
||
/// Set to get the challenges of a specific visibility type.
|
||
public void SetVisibility(ChallengeVisibility value)
|
||
{
|
||
CLIB.ppf_ChallengeOptions_SetVisibility(Handle, value);
|
||
}
|
||
|
||
public static explicit operator IntPtr(ChallengeOptions options)
|
||
{
|
||
return options != null ? options.Handle : IntPtr.Zero;
|
||
}
|
||
|
||
~ChallengeOptions()
|
||
{
|
||
CLIB.ppf_ChallengeOptions_Destroy(Handle);
|
||
}
|
||
|
||
IntPtr Handle;
|
||
|
||
public IntPtr GetHandle()
|
||
{
|
||
return Handle;
|
||
}
|
||
}
|
||
|
||
/// <summary>Challenge info.</summary>
|
||
public class Challenge
|
||
{
|
||
/// The creator of the challenge.
|
||
public readonly ChallengeCreationType CreationType;
|
||
|
||
/// Challenge ID
|
||
public readonly UInt64 ID;
|
||
|
||
/// Challenge's start date.
|
||
public readonly DateTime StartDate;
|
||
|
||
/// Challenge's end date.
|
||
public readonly DateTime EndDate;
|
||
|
||
/// Participants of the challenge, which might be null. Should check if it is null before use.
|
||
public readonly UserList ParticipantsOptional;
|
||
|
||
/// Users invited to the challenge, which might be null. Should check if it is null before use.
|
||
public readonly UserList InvitedUsersOptional;
|
||
|
||
/// The info about the leaderboard that the challenge associated with.
|
||
public readonly Leaderboard Leaderboard;
|
||
|
||
/// Challenge's title.
|
||
public readonly string Title;
|
||
|
||
/// Challenge's visibility.
|
||
public readonly ChallengeVisibility Visibility;
|
||
|
||
|
||
public Challenge(IntPtr o)
|
||
{
|
||
CreationType = CLIB.ppf_Challenge_GetCreationType(o);
|
||
|
||
try
|
||
{
|
||
EndDate = TimeUtil.SecondsToDateTime((long) CLIB.ppf_Challenge_GetEndDate(o));
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Debug.LogWarning($"Challenge Set EndDate: ppf_Challenge_GetEndDate(o) = {CLIB.ppf_Challenge_GetEndDate(o)}, Exception: {e}");
|
||
}
|
||
|
||
ID = CLIB.ppf_Challenge_GetID(o);
|
||
{
|
||
var pointer = CLIB.ppf_Challenge_GetInvitedUsers(o);
|
||
if (pointer == IntPtr.Zero)
|
||
{
|
||
InvitedUsersOptional = null;
|
||
}
|
||
else
|
||
{
|
||
InvitedUsersOptional = new UserList(pointer);
|
||
}
|
||
}
|
||
Leaderboard = new Leaderboard(CLIB.ppf_Challenge_GetLeaderboard(o));
|
||
{
|
||
var pointer = CLIB.ppf_Challenge_GetParticipants(o);
|
||
if (pointer == IntPtr.Zero)
|
||
{
|
||
ParticipantsOptional = null;
|
||
}
|
||
else
|
||
{
|
||
ParticipantsOptional = new UserList(pointer);
|
||
}
|
||
}
|
||
try
|
||
{
|
||
StartDate = TimeUtil.SecondsToDateTime((long) CLIB.ppf_Challenge_GetStartDate(o));
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Debug.LogWarning($"Challenge Set StartDate: ppf_Challenge_GetStartDate(o) = {CLIB.ppf_Challenge_GetStartDate(o)}, Exception: {e}");
|
||
}
|
||
|
||
Title = CLIB.ppf_Challenge_GetTitle(o);
|
||
Visibility = CLIB.ppf_Challenge_GetVisibility(o);
|
||
}
|
||
}
|
||
|
||
/// <summary>Challenge list. Each Element is \ref Challenge.</summary>
|
||
public class ChallengeList : MessageArray<Challenge>
|
||
{
|
||
public ChallengeList(IntPtr a)
|
||
{
|
||
TotalCount = CLIB.ppf_ChallengeArray_GetTotalCount(a);
|
||
NextPageParam = CLIB.ppf_ChallengeArray_HasNextPage(a) ? "true" : string.Empty;
|
||
PreviousPageParam = CLIB.ppf_ChallengeArray_HasPreviousPage(a) ? "true" : String.Empty;
|
||
int count = (int) CLIB.ppf_ChallengeArray_GetSize(a);
|
||
this.Capacity = count;
|
||
for (uint i = 0; i < count; i++)
|
||
{
|
||
this.Add(new Challenge(CLIB.ppf_ChallengeArray_GetElement(a, (UIntPtr) i)));
|
||
}
|
||
}
|
||
|
||
/// The total number of challenges in the list.
|
||
public readonly ulong TotalCount;
|
||
}
|
||
|
||
/// <summary>Challenge entry info.</summary>
|
||
public class ChallengeEntry
|
||
{
|
||
/// The entry's display score.
|
||
public readonly string DisplayScore;
|
||
|
||
/// The entry's additional info, no more than 2KB.
|
||
public readonly byte[] ExtraData;
|
||
|
||
/// The ID of the challenge that the entry belongs to.
|
||
public readonly UInt64 ID;
|
||
|
||
/// The rank of the entry.
|
||
public readonly int Rank;
|
||
|
||
/// The score of the entry.
|
||
public readonly long Score;
|
||
|
||
/// The time when the entry was written.
|
||
public readonly DateTime Timestamp;
|
||
|
||
/// The user the entry belongs to.
|
||
public readonly User User;
|
||
|
||
|
||
public ChallengeEntry(IntPtr o)
|
||
{
|
||
DisplayScore = CLIB.ppf_ChallengeEntry_GetDisplayScore(o);
|
||
var extraDataPtr = CLIB.ppf_ChallengeEntry_GetExtraData(o);
|
||
var extraDataSize = CLIB.ppf_ChallengeEntry_GetExtraDataLength(o);
|
||
ExtraData = MarshalUtil.ByteArrayFromNative(extraDataPtr, extraDataSize);
|
||
ID = CLIB.ppf_ChallengeEntry_GetID(o);
|
||
Rank = CLIB.ppf_ChallengeEntry_GetRank(o);
|
||
Score = CLIB.ppf_ChallengeEntry_GetScore(o);
|
||
|
||
try
|
||
{
|
||
Timestamp = TimeUtil.SecondsToDateTime((long) CLIB.ppf_ChallengeEntry_GetTimestamp(o));
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Debug.LogWarning($"ChallengeEntry Set Timestamp: ppf_ChallengeEntry_GetTimestamp(o) = {CLIB.ppf_ChallengeEntry_GetTimestamp(o)}, Exception: {e}");
|
||
}
|
||
|
||
User = new User(CLIB.ppf_ChallengeEntry_GetUser(o));
|
||
}
|
||
}
|
||
|
||
/// <summary>Challenge entry list. Each element is \ref ChallengeEntry.</summary>
|
||
public class ChallengeEntryList : MessageArray<ChallengeEntry>
|
||
{
|
||
public ChallengeEntryList(IntPtr a)
|
||
{
|
||
TotalCount = CLIB.ppf_ChallengeEntryArray_GetTotalCount(a);
|
||
NextPageParam = CLIB.ppf_ChallengeEntryArray_HasNextPage(a) ? "true" : string.Empty;
|
||
PreviousPageParam = CLIB.ppf_ChallengeEntryArray_HasPreviousPage(a) ? "true" : string.Empty;
|
||
int count = (int) CLIB.ppf_ChallengeEntryArray_GetSize(a);
|
||
this.Capacity = count;
|
||
for (uint i = 0; i < count; i++)
|
||
{
|
||
this.Add(new ChallengeEntry(CLIB.ppf_ChallengeEntryArray_GetElement(a, (UIntPtr) i)));
|
||
}
|
||
}
|
||
|
||
/// The total number of entries in the list.
|
||
public readonly ulong TotalCount;
|
||
}
|
||
} |