ProjectDDD/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs

101 lines
4.0 KiB
C#
Raw Normal View History

using System.Threading.Tasks;
using UnityEngine;
namespace DDD
{
public class RestaurantController : Singleton<RestaurantController>, IManager, IGameFlowHandler
{
public RestaurantEnvironmentStateSo RestaurantEnvironmentStateSo { get; private set; }
2025-08-12 11:46:30 +00:00
public RestaurantCustomerStateSo RestaurantCustomerStateSo { get; private set; }
private const string CreateRestaurantPlayerSo = "CreateRestaurantPlayerSo";
private const string CreateEnvironmentSo = "CreateEnvironmentSo";
public void PreInit()
{
LoadOrCreateRestaurantState();
RegisterFlowHandler();
}
2025-08-12 11:46:30 +00:00
public async Task Init()
{
2025-08-12 11:46:30 +00:00
await LoadData();
}
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<RestaurantEnvironmentStateSo>();
}
2025-08-12 11:46:30 +00:00
private async Task LoadData()
{
RestaurantCustomerStateSo = await AssetManager.LoadAsset<RestaurantCustomerStateSo>(DataConstants.RestaurantCustomerStateSo);
}
private void GenerateDummyEnvironmentProps()
{
// Make dummy placement data
foreach (EnvironmentData prop in DataManager.Instance.GetDataSo<EnvironmentDataSo>().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>(CreateRestaurantPlayerSo);
2025-07-31 11:02:00 +00:00
//CreateEnvironmentSo createEnvironmentSoJob = await AssetManager.LoadAsset<CreateEnvironmentSo>(CreateEnvironmentSo);
2025-07-27 19:51:11 +00:00
RestaurantManagementSo restaurantManagementSo = await AssetManager.LoadAsset<RestaurantManagementSo>(DataConstants.RestaurantManagementSo);
var playerHandle = createRestaurantPlayerSoJob.OnReadyNewFlow(newFlowState);
2025-07-31 11:02:00 +00:00
//var propHandle = createEnvironmentSoJob.OnReadyNewFlow(newFlowState);
2025-07-27 19:51:11 +00:00
var todayMenuHandle = restaurantManagementSo.OnReadyNewFlow(newFlowState);
// Combine handles and return it
2025-07-22 07:46:37 +00:00
InputManager.Instance.SwitchCurrentActionMap(InputActionMaps.Restaurant);
2025-07-31 11:02:00 +00:00
await Task.WhenAll(playerHandle, todayMenuHandle);
}
2025-08-12 11:46:30 +00:00
else if (newFlowState == GameFlowState.RunRestaurant)
{
var restaurantCustomerStateHandle = RestaurantCustomerStateSo.OnReadyNewFlow(newFlowState);
await Task.WhenAll(restaurantCustomerStateHandle);
}
}
public async Task OnExitCurrentFlow(GameFlowState exitingFlowState)
{
if (exitingFlowState == GameFlowState.ReadyForRestaurant)
{
}
else if (exitingFlowState == GameFlowState.RunRestaurant)
{
var restaurantCustomerStateHandle = RestaurantCustomerStateSo.OnExitCurrentFlow(exitingFlowState);
await Task.WhenAll(restaurantCustomerStateHandle);
}
}
}
}