using System.Threading.Tasks; using UnityEngine; namespace DDD { public class RestaurantController : Singleton, IManager, IGameFlowHandler { private RestaurantEnvironmentState _restaurantEnvironmentState; public RestaurantEnvironmentState RestaurantEnvironmentState => _restaurantEnvironmentState; // TODO : GameManager에 등록되게 So에 추가해주세요. public void Init() { LoadOrCreateRestaurantState(); RegisterFlowHandler(); } 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. _restaurantEnvironmentState = new RestaurantEnvironmentState(); } private void GenerateDummyEnvironmentProps() { // Make dummy placement data foreach (EnvironmentData prop in DataManager.Instance.EnvironmentDataSo.GetDataList()) { if (prop.EnvironmentType != EnvironmentType.Prop) { continue; } for (int i = 0; i < 10; i++) { // Make random position Vector2 randomPos = new Vector2( Random.Range(-10f, 10f), Random.Range(10f, 20f) ); RestaurantEnvironmentData randomPropData = new RestaurantEnvironmentData(); randomPropData.Position = randomPos; randomPropData.Id = prop.Id; _restaurantEnvironmentState.RestaurantEnvironmentProps.Add(randomPropData); } } } public Task OnReadyNewFlow(GameFlowState newFlowState) { if (newFlowState == GameFlowState.ReadyForRestaurant) { CreateRestaurantPlayer createRestaurantPlayerJob = new CreateRestaurantPlayer(); CreateEnvironment createEnvironmentJob = new CreateEnvironment(); var playerHandle = createRestaurantPlayerJob.OnReadyNewFlow(newFlowState); var propHandle = createEnvironmentJob.OnReadyNewFlow(newFlowState); // Combine handles and return it return Task.WhenAll(playerHandle, propHandle); } return Task.CompletedTask; } } }