ProjectDDD/Assets/_DDD/_Scripts/RestaurantState/RestaurantState.cs

70 lines
3.1 KiB
C#
Raw Normal View History

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<RestaurantManagementState>();
var restaurantRunStateHandle = _restaurantRunState.LoadAssetAsync<RestaurantRunState>();
var restaurantEnvironmentStateHandle = _restaurantEnvironmentState.LoadAssetAsync<RestaurantEnvironmentState>();
var restaurantPlayerStateHandle = _restaurantPlayerState.LoadAssetAsync<RestaurantPlayerState>();
var restaurantCustomerStateHandle = _restaurantCustomerState.LoadAssetAsync<RestaurantCustomerState>();
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;
}
}
}