110 lines
3.4 KiB
C#
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
|
|
}
|