using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; namespace DDD { [CreateAssetMenu(fileName = "RestaurantState", menuName = "RestaurantState/RestaurantState", order = 0)] public class RestaurantState : ScriptableObject { [SerializeField] private AssetReference _restaurantManagementState; [SerializeField] private AssetReference _restaurantRunState; [SerializeField] private AssetReference _restaurantEnvironmentState; [SerializeField] private AssetReference _restaurantPlayerState; [SerializeField] private AssetReference _restaurantCustomerState; public RestaurantManagementState ManagementState { get; private set; } public RestaurantRunState RunState { get; private set; } public RestaurantEnvironmentState EnvironmentState { get; private set; } public RestaurantPlayerState PlayerState { get; private set; } public RestaurantCustomerState CustomerState { get; private set; } private bool _isLoaded; private void OnDisable() { if (_isLoaded == false) return; _restaurantManagementState.ReleaseAsset(); _restaurantRunState.ReleaseAsset(); _restaurantEnvironmentState.ReleaseAsset(); _restaurantPlayerState.ReleaseAsset(); _restaurantCustomerState.ReleaseAsset(); _isLoaded = false; } public async Task LoadData() { if (_isLoaded) { return; } var restaurantManagementStateHandle = _restaurantManagementState.LoadAssetAsync(); var restaurantRunStateHandle = _restaurantRunState.LoadAssetAsync(); var restaurantEnvironmentStateHandle = _restaurantEnvironmentState.LoadAssetAsync(); var restaurantPlayerStateHandle = _restaurantPlayerState.LoadAssetAsync(); var restaurantCustomerStateHandle = _restaurantCustomerState.LoadAssetAsync(); await restaurantManagementStateHandle.Task; await restaurantRunStateHandle.Task; await restaurantEnvironmentStateHandle.Task; await restaurantPlayerStateHandle.Task; await restaurantCustomerStateHandle.Task; ManagementState = restaurantManagementStateHandle.Result; RunState = restaurantRunStateHandle.Result; EnvironmentState = restaurantEnvironmentStateHandle.Result; PlayerState = restaurantPlayerStateHandle.Result; CustomerState = restaurantCustomerStateHandle.Result; Debug.Assert(ManagementState != null, "RestaurantManagementState is null"); Debug.Assert(RunState != null, "RestaurantRunState is null"); Debug.Assert(EnvironmentState != null, "RestaurantEnvironmentState is null"); Debug.Assert(PlayerState != null, "RestaurantPlayerState is null"); Debug.Assert(CustomerState != null, "RestaurantCustomerState is null"); _isLoaded = true; } } }