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 }