Files
ft/Client/Assets/Scripts/Services/FootPrintService.cs

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,
}