using System.Threading.Tasks; using UnityEditor; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; namespace DDD { [CreateAssetMenu(fileName = "RestaurantDataSo", menuName = "RestaurantData/RestaurantDataSo", order = 0)] public class RestaurantDataSo : ScriptableSingleton { [Header("Asset References")] [SerializeField] private AssetReference RestaurantPlayerDataSo; [SerializeField] private AssetReference RestaurantManagementDataSo; public RestaurantPlayerDataSo PlayerData { get; private set; } public RestaurantManagementDataSo ManagementData { get; private set; } private bool _isLoaded; public async Task LoadData() { if (_isLoaded) { return; } var playerHandle = RestaurantPlayerDataSo.LoadAssetAsync(); var managementHandle = RestaurantManagementDataSo.LoadAssetAsync(); await playerHandle.Task; await managementHandle.Task; PlayerData = playerHandle.Result; ManagementData = managementHandle.Result; _isLoaded = true; } private void OnDisable() { if (!_isLoaded) return; RestaurantPlayerDataSo.ReleaseAsset(); RestaurantManagementDataSo.ReleaseAsset(); _isLoaded = false; } } }