71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using System;
|
|
public interface IFootPrintService
|
|
{
|
|
public EFootPrint FootPrint { get; }
|
|
public void UpdateFootPrint(EFootPrint newState);
|
|
public void UploadData();
|
|
public void LoadData(string data);
|
|
public bool HasFootPrint(EFootPrint state);
|
|
}
|
|
|
|
// ReSharper disable once ClassNeverInstantiated.Global
|
|
public class FootPrintService : IFootPrintService
|
|
{
|
|
private EFootPrint _footPrint;
|
|
private ulong _kvCompleteFootPrint;
|
|
internal ulong CompleteFootPrintForKVValidation => _kvCompleteFootPrint;
|
|
internal static game.PlayerDataStorage.PlayerKVFootPrintState DecodeForKVLoad(
|
|
System.Collections.Generic.IReadOnlyDictionary<string, string> raw,
|
|
game.PlayerDataStorage.PlayerKVSchemaDiagnostics errors)
|
|
=> game.PlayerDataStorage.PlayerKVSaveSchema.DecodeFootPrint(raw, errors);
|
|
internal void ResetForKVLoad()
|
|
{
|
|
_kvCompleteFootPrint = 0;
|
|
_footPrint = 0;
|
|
}
|
|
internal void ReplaceFromKVDecoded(game.PlayerDataStorage.PlayerKVFootPrintState state)
|
|
{
|
|
if (state == null) throw new ArgumentNullException(nameof(state));
|
|
_kvCompleteFootPrint = state.Bits;
|
|
// This legacy view contains only the low 32 bits. The ulong field retains the complete KV state.
|
|
_footPrint = unchecked((EFootPrint)(int)(uint)state.Bits);
|
|
}
|
|
public EFootPrint FootPrint => _footPrint;
|
|
public void UpdateFootPrint(EFootPrint newState)
|
|
{
|
|
_footPrint |= newState;
|
|
UploadData();
|
|
}
|
|
|
|
public void UploadData()
|
|
{
|
|
var data = (ulong)_footPrint;
|
|
PlayFabMgr.Instance.UpdateUserDataValue("FootPrint", data.ToString());
|
|
}
|
|
|
|
public void LoadData(string data)
|
|
{
|
|
_footPrint = (EFootPrint) ulong.Parse(data);
|
|
}
|
|
|
|
public bool HasFootPrint(EFootPrint state)
|
|
{
|
|
return (_footPrint & state) == state;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Record Status. Max out at 64th record.
|
|
/// </summary>
|
|
[Flags]
|
|
public enum EFootPrint : int
|
|
{
|
|
HasCommunityGuidancePanelBeenOpened = 1 << 0,
|
|
IsFaceBookRewardClaimed = 1 << 1,
|
|
IsInstagramRewardClaimed = 1 << 2,
|
|
IsDiscordRewardClaimed = 1 << 3,
|
|
IsTiktokRewardClaimed = 1 << 4,
|
|
IsYouTubeRewardClaimed = 1 << 5,
|
|
IsEventCanGuidePoped = 1 << 6,
|
|
IsFaceBookRewardLink = 1 << 7,
|
|
}
|