MIF_E31222569/Assets/ToothyV/Scripts/Backend/Cloudsave.cs

110 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Unity.Services.CloudSave;
using UnityEngine;
public static class Cloudsave
{
#region Public Methods
/// <summary>
/// Menyimpan data bertipe class apapun ke Cloud Save dengan nama file tertentu.
/// </summary>
/// <param name="data">Objek data yang ingin disimpan.</param>
/// <param name="fileName">Nama file untuk menyimpan data di cloud.</param>
public static async Task SaveData(object data, string fileName)
{
try
{
Dictionary<string, object> dict = new()
{
{ fileName, data }
};
await CloudSaveService.Instance.Data.Player.SaveAsync(dict);
}
catch (Exception e)
{
Debug.LogError($"Error saving data [{fileName}]: {e}");
}
}
/// <summary>
/// Memuat data dari Cloud Save dan mengembalikannya sebagai objek bertipe T.
/// </summary>
/// <typeparam name="T">Tipe data yang ingin dimuat.</typeparam>
/// <param name="fileName">Nama file dari data di cloud.</param>
/// <returns>Data bertipe T, atau default jika gagal.</returns>
public static async Task<T> LoadData<T>(string fileName)
{
try
{
var data = await CloudSaveService.Instance.Data.Player.LoadAllAsync();
if (data.ContainsKey(fileName))
{
T res = data[fileName].Value.GetAs<T>();
return res;
}
}
catch (Exception e)
{
Debug.LogError($"Error loading data [{fileName}]: {e}");
}
return default;
}
/// <summary>
/// Memuat data dalam bentuk list dari Cloud Save berdasarkan nama file.
/// </summary>
/// <typeparam name="T">Tipe elemen dalam list.</typeparam>
/// <param name="fileName">Nama file di cloud.</param>
/// <returns>List data bertipe T, atau null jika gagal.</returns>
public static async Task<List<T>> LoadListData<T>(string fileName)
{
try
{
var data = await CloudSaveService.Instance.Data.Player.LoadAllAsync();
if (data.ContainsKey(fileName))
{
string json = data[fileName].Value.GetAsString();
string wrappedJson = $"{{\"items\": {json}}}";
List<T> res = JsonHelper.FromJson<T>(wrappedJson).ToList();
return res;
}
}
catch (Exception e)
{
Debug.LogError($"Error loading list data [{fileName}]: {e}");
}
return default;
}
/// <summary>
/// Menghapus data dari Cloud Save berdasarkan nama file.
/// </summary>
/// <param name="fileName">Nama file dari data yang ingin dihapus.</param>
public static async Task DeleteData(string fileName)
{
try
{
var cloudSaveData = await CloudSaveService.Instance.Data.Player.LoadAllAsync();
if (cloudSaveData.ContainsKey(fileName))
{
await CloudSaveService.Instance.Data.Player.DeleteAsync(
fileName,
new Unity.Services.CloudSave.Models.Data.Player.DeleteOptions()
);
}
}
catch (Exception e)
{
Debug.LogError($"Error deleting data [{fileName}]: {e}");
}
}
#endregion
}