using System.Threading.Tasks; using UnityEngine; namespace DDD { public class RestaurantController : Singleton, IManager, IGameFlowHandler { public RestaurantEnvironmentStateSo RestaurantEnvironmentStateSo { get; private set; } private const string CreateRestaurantPlayerSo = "CreateRestaurantPlayerSo"; private const string CreateEnvironmentSo = "CreateEnvironmentSo"; public void PreInit() { LoadOrCreateRestaurantState(); RegisterFlowHandler(); } public Task Init() { return Task.CompletedTask;; } public void PostInit() { GenerateDummyEnvironmentProps();// XXX : DUMMY! REMOVE THIS } private void RegisterFlowHandler() { GameFlowManager.Instance.FlowHandlers.Add(this); } private void LoadOrCreateRestaurantState() { // TODO : Load states from saved files. if none, create them. RestaurantEnvironmentStateSo = ScriptableObject.CreateInstance(); } private void GenerateDummyEnvironmentProps() { // Make dummy placement data foreach (EnvironmentData prop in DataManager.Instance.GetDataSo().GetDataList()) { for (int i = 0; i < 10; i++) { // Make random position Vector2 randomPos = new Vector2( Random.Range(-10f, 10f), Random.Range(10f, 20f) ); var randomPropData = new RestaurantEnvironmentData(prop.Id, randomPos); RestaurantEnvironmentStateSo.RestaurantEnvironmentProps.Add(randomPropData); } } } public async Task OnReadyNewFlow(GameFlowState newFlowState) { if (newFlowState == GameFlowState.ReadyForRestaurant) { CreateRestaurantPlayerSo createRestaurantPlayerSoJob = await AssetManager.LoadAsset(CreateRestaurantPlayerSo); CreateEnvironmentSo createEnvironmentSoJob = await AssetManager.LoadAsset(CreateEnvironmentSo); RestaurantManagementSo restaurantManagementSo = await AssetManager.LoadAsset(DataConstants.RestaurantManagementSo); var playerHandle = createRestaurantPlayerSoJob.OnReadyNewFlow(newFlowState); var propHandle = createEnvironmentSoJob.OnReadyNewFlow(newFlowState); var todayMenuHandle = restaurantManagementSo.OnReadyNewFlow(newFlowState); // Combine handles and return it InputManager.Instance.SwitchCurrentActionMap(InputActionMaps.Restaurant); await Task.WhenAll(playerHandle, propHandle, todayMenuHandle); } } } }