Files
FlowScope/Packages/com.flowscope.gamecore/Runtime/Save/PlayerPrefsSaveStorage.cs
2026-06-04 14:54:49 +08:00

56 lines
1.6 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
namespace FlowScope.Save
{
public sealed class PlayerPrefsSaveStorage : ISaveStorage
{
private const string Prefix = "FlowScope.Save.";
public Task WriteAsync(string key, byte[] data, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
if (data == null)
{
throw new ArgumentNullException(nameof(data));
}
PlayerPrefs.SetString(ToPrefsKey(key), Convert.ToBase64String(data));
PlayerPrefs.Save();
return Task.CompletedTask;
}
public Task<byte[]> ReadAsync(string key, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
var prefsKey = ToPrefsKey(key);
return Task.FromResult(PlayerPrefs.HasKey(prefsKey)
? Convert.FromBase64String(PlayerPrefs.GetString(prefsKey))
: null);
}
public void Delete(string key)
{
PlayerPrefs.DeleteKey(ToPrefsKey(key));
PlayerPrefs.Save();
}
public bool Exists(string key)
{
return PlayerPrefs.HasKey(ToPrefsKey(key));
}
private static string ToPrefsKey(string key)
{
if (string.IsNullOrWhiteSpace(key))
{
throw new ArgumentException("Save key is required.", nameof(key));
}
return Prefix + key;
}
}
}