using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; namespace DDD { [CreateAssetMenu(fileName = "RestaurantData", menuName = "RestaurantData/RestaurantData", order = 0)] public class RestaurantData : ScriptSingleton { [SerializeField] private AssetReference _restaurantPlayerData; [SerializeField] private AssetReference _restaurantManagementData; [SerializeField] private AssetReference _restaurantRunData; [SerializeField] private AssetReference _restaurantCustomerData; public RestaurantPlayerData PlayerData { get; private set; } public RestaurantManagementData ManagementData { get; private set; } public RestaurantRunData RunData { get; private set; } public RestaurantCustomerData CustomerData { get; private set; } private bool _isLoaded; public async Task LoadData() { if (_isLoaded) { return; } var restaurantPlayerDataHandle = _restaurantPlayerData.LoadAssetAsync(); var restaurantManagementDataHandle = _restaurantManagementData.LoadAssetAsync(); var restaurantRunDataHandle = _restaurantRunData.LoadAssetAsync(); var restaurantCustomerDataHandle = _restaurantCustomerData.LoadAssetAsync(); await Task.WhenAll( restaurantPlayerDataHandle.Task, restaurantManagementDataHandle.Task, restaurantRunDataHandle.Task, restaurantCustomerDataHandle.Task ); PlayerData = restaurantPlayerDataHandle.Result; ManagementData = restaurantManagementDataHandle.Result; RunData = restaurantRunDataHandle.Result; CustomerData = restaurantCustomerDataHandle.Result; Debug.Assert(PlayerData != null, "RestaurantPlayerData is null"); Debug.Assert(ManagementData != null, "RestaurantManagementData is null"); Debug.Assert(RunData != null, "RestaurantRunData is null"); Debug.Assert(CustomerData != null, "RestaurantCustomerData is null"); _isLoaded = true; } private void OnDisable() { if (_isLoaded == false) return; _restaurantPlayerData.ReleaseAsset(); _restaurantManagementData.ReleaseAsset(); _restaurantRunData.ReleaseAsset(); _restaurantCustomerData.ReleaseAsset(); _isLoaded = false; } } }