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
///
/// Menyimpan data bertipe class apapun ke Cloud Save dengan nama file tertentu.
///
/// Objek data yang ingin disimpan.
/// Nama file untuk menyimpan data di cloud.
public static async Task SaveData(object data, string fileName)
{
try
{
Dictionary dict = new()
{
{ fileName, data }
};
await CloudSaveService.Instance.Data.Player.SaveAsync(dict);
}
catch (Exception e)
{
Debug.LogError($"Error saving data [{fileName}]: {e}");
}
}
///
/// Memuat data dari Cloud Save dan mengembalikannya sebagai objek bertipe T.
///
/// Tipe data yang ingin dimuat.
/// Nama file dari data di cloud.
/// Data bertipe T, atau default jika gagal.
public static async Task LoadData(string fileName)
{
try
{
var data = await CloudSaveService.Instance.Data.Player.LoadAllAsync();
if (data.ContainsKey(fileName))
{
T res = data[fileName].Value.GetAs();
return res;
}
}
catch (Exception e)
{
Debug.LogError($"Error loading data [{fileName}]: {e}");
}
return default;
}
///
/// Memuat data dalam bentuk list dari Cloud Save berdasarkan nama file.
///
/// Tipe elemen dalam list.
/// Nama file di cloud.
/// List data bertipe T, atau null jika gagal.
public static async Task> LoadListData(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 res = JsonHelper.FromJson(wrappedJson).ToList();
return res;
}
}
catch (Exception e)
{
Debug.LogError($"Error loading list data [{fileName}]: {e}");
}
return default;
}
///
/// Menghapus data dari Cloud Save berdasarkan nama file.
///
/// Nama file dari data yang ingin dihapus.
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
}