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; Debug.Assert(PlayerData != null, "PlayerData is null"); Debug.Assert(ManagementData != null, "ManagementData is null"); _isLoaded = true; } private void OnDisable() { if (!_isLoaded) return; _restaurantPlayerDataSo.ReleaseAsset(); _restaurantManagementDataSo.ReleaseAsset(); _isLoaded = false; } } }