182 lines
6.8 KiB
C#
182 lines
6.8 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 System.Runtime.InteropServices;
|
|||
|
|
|
|||
|
|
namespace Pico.Platform.Models
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
/// <summary>Achievement update info.</summary>
|
|||
|
|
public class AchievementUpdate
|
|||
|
|
{
|
|||
|
|
/// Whether the achievement is unlocked in this time.
|
|||
|
|
public readonly bool JustUnlocked;
|
|||
|
|
|
|||
|
|
/// Achievement name.
|
|||
|
|
public readonly string Name;
|
|||
|
|
|
|||
|
|
public AchievementUpdate(IntPtr o)
|
|||
|
|
{
|
|||
|
|
JustUnlocked = CLIB.ppf_AchievementUpdate_GetJustUnlocked(o);
|
|||
|
|
Name = CLIB.ppf_AchievementUpdate_GetName(o);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Achievement info.</summary>
|
|||
|
|
public class AchievementDefinition
|
|||
|
|
{
|
|||
|
|
/// Achievement type.
|
|||
|
|
public readonly AchievementType Type;
|
|||
|
|
|
|||
|
|
/// Achievement name.
|
|||
|
|
public readonly string Name;
|
|||
|
|
|
|||
|
|
/// The target to reach for unlocking a bitfield achievement.
|
|||
|
|
public readonly uint BitfieldLength;
|
|||
|
|
|
|||
|
|
/// The target to reach for unlocking a count achievement.
|
|||
|
|
public readonly long Target;
|
|||
|
|
|
|||
|
|
/// Achievement description.
|
|||
|
|
public readonly string Description;
|
|||
|
|
|
|||
|
|
/// Achievement title.
|
|||
|
|
public readonly string Title;
|
|||
|
|
|
|||
|
|
/// Whether the achievement is archieved.
|
|||
|
|
public readonly bool IsArchived;
|
|||
|
|
|
|||
|
|
/// Whether the achievement is a secret achievement. If so, it can be visible after being unlocked only.
|
|||
|
|
public readonly bool IsSecret;
|
|||
|
|
|
|||
|
|
/// Achievement ID.
|
|||
|
|
public readonly ulong ID;
|
|||
|
|
|
|||
|
|
/// The description shown to users when unlocking the achievement.
|
|||
|
|
public readonly string UnlockedDescription;
|
|||
|
|
|
|||
|
|
/// The write policy of the achievement.
|
|||
|
|
public readonly AchievementWritePolicy WritePolicy;
|
|||
|
|
|
|||
|
|
/// The URL of the image displayed when the achievement is still locked.
|
|||
|
|
public readonly string LockedImageURL;
|
|||
|
|
|
|||
|
|
/// The URL of the image displayed when the achievement is unlocked.
|
|||
|
|
public readonly string UnlockedImageURL;
|
|||
|
|
|
|||
|
|
public AchievementDefinition(IntPtr o)
|
|||
|
|
{
|
|||
|
|
Type = CLIB.ppf_AchievementDefinition_GetType(o);
|
|||
|
|
Name = CLIB.ppf_AchievementDefinition_GetName(o);
|
|||
|
|
BitfieldLength = CLIB.ppf_AchievementDefinition_GetBitfieldLength(o);
|
|||
|
|
Target = CLIB.ppf_AchievementDefinition_GetTarget(o);
|
|||
|
|
Description = CLIB.ppf_AchievementDefinition_GetDescription(o);
|
|||
|
|
Title = CLIB.ppf_AchievementDefinition_GetTitle(o);
|
|||
|
|
IsArchived = CLIB.ppf_AchievementDefinition_IsArchived(o);
|
|||
|
|
IsSecret = CLIB.ppf_AchievementDefinition_IsSecret(o);
|
|||
|
|
ID = CLIB.ppf_AchievementDefinition_GetID(o);
|
|||
|
|
UnlockedDescription = CLIB.ppf_AchievementDefinition_GetUnlockedDescription(o);
|
|||
|
|
WritePolicy = CLIB.ppf_AchievementDefinition_GetWritePolicy(o);
|
|||
|
|
LockedImageURL = CLIB.ppf_AchievementDefinition_GetLockedImageURL(o);
|
|||
|
|
UnlockedImageURL = CLIB.ppf_AchievementDefinition_GetUnlockedImageURL(o);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Achievement definition list.
|
|||
|
|
/// Each element is \ref AchievementDefinition.
|
|||
|
|
/// </summary>
|
|||
|
|
public class AchievementDefinitionList : MessageArray<AchievementDefinition>
|
|||
|
|
{
|
|||
|
|
/// The total number of `AchievementDefinition`.
|
|||
|
|
public readonly ulong TotalSize;
|
|||
|
|
|
|||
|
|
public AchievementDefinitionList(IntPtr a)
|
|||
|
|
{
|
|||
|
|
TotalSize = (ulong) CLIB.ppf_AchievementDefinitionArray_GetTotalSize(a);
|
|||
|
|
var count = (int) CLIB.ppf_AchievementDefinitionArray_GetSize(a);
|
|||
|
|
this.Capacity = count;
|
|||
|
|
for (uint i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
this.Add(new AchievementDefinition(CLIB.ppf_AchievementDefinitionArray_GetElement(a, (UIntPtr) i)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
NextPageParam = CLIB.ppf_AchievementDefinitionArray_HasNextPage(a) ? "true" : string.Empty;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>Achievement progress info. </summary>
|
|||
|
|
public class AchievementProgress
|
|||
|
|
{
|
|||
|
|
/// Achievement ID.
|
|||
|
|
public readonly ulong ID;
|
|||
|
|
|
|||
|
|
/// The progress of a bitfield achievement. `1` represents a completed bit.
|
|||
|
|
public readonly string Bitfield;
|
|||
|
|
|
|||
|
|
/// The progress of a count achievement.
|
|||
|
|
public readonly long Count;
|
|||
|
|
|
|||
|
|
/// Whether the achievement is unlocked
|
|||
|
|
public readonly bool IsUnlocked;
|
|||
|
|
|
|||
|
|
/// Achievement name.
|
|||
|
|
public readonly string Name;
|
|||
|
|
|
|||
|
|
/// The time when the achievement is unlocked.
|
|||
|
|
public readonly DateTime UnlockTime;
|
|||
|
|
|
|||
|
|
/// Additional info, no more than 2KB.
|
|||
|
|
public readonly byte[] ExtraData;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public AchievementProgress(IntPtr o)
|
|||
|
|
{
|
|||
|
|
ID = CLIB.ppf_AchievementProgress_GetID(o);
|
|||
|
|
Bitfield = CLIB.ppf_AchievementProgress_GetBitfield(o);
|
|||
|
|
Count = CLIB.ppf_AchievementProgress_GetCount(o);
|
|||
|
|
IsUnlocked = CLIB.ppf_AchievementProgress_GetIsUnlocked(o);
|
|||
|
|
Name = CLIB.ppf_AchievementProgress_GetName(o);
|
|||
|
|
|
|||
|
|
uint size = CLIB.ppf_AchievementProgress_GetExtraDataLength(o);
|
|||
|
|
ExtraData = new byte[size];
|
|||
|
|
Marshal.Copy(CLIB.ppf_AchievementProgress_GetExtraData(o), ExtraData, 0, (int) size);
|
|||
|
|
var unlockTime = CLIB.ppf_AchievementProgress_GetUnlockTime(o);
|
|||
|
|
if (unlockTime != 0)
|
|||
|
|
{
|
|||
|
|
UnlockTime = TimeUtil.SecondsToDateTime((long) unlockTime);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>The list of achievements with their progress info.
|
|||
|
|
/// Each element is \ref AchievementProgress.
|
|||
|
|
/// </summary>
|
|||
|
|
public class AchievementProgressList : MessageArray<AchievementProgress>
|
|||
|
|
{
|
|||
|
|
/// The total number of achievements with progress info.
|
|||
|
|
public readonly ulong TotalSize;
|
|||
|
|
|
|||
|
|
public AchievementProgressList(IntPtr a)
|
|||
|
|
{
|
|||
|
|
TotalSize = (ulong) CLIB.ppf_AchievementProgressArray_GetTotalSize(a);
|
|||
|
|
var count = (int) CLIB.ppf_AchievementProgressArray_GetSize(a);
|
|||
|
|
this.Capacity = count;
|
|||
|
|
for (uint i = 0; i < count; i++)
|
|||
|
|
{
|
|||
|
|
this.Add(new AchievementProgress(CLIB.ppf_AchievementProgressArray_GetElement(a, (UIntPtr) i)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
NextPageParam = CLIB.ppf_AchievementProgressArray_HasNextPage(a) ? "true" : string.Empty;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|