2025-07-17 06:20:30 +00:00
|
|
|
using System.Threading.Tasks;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
namespace DDD
|
|
|
|
{
|
|
|
|
public class RestaurantController : Singleton<RestaurantController>, IManager, IGameFlowHandler
|
|
|
|
{
|
2025-07-21 04:20:31 +00:00
|
|
|
public RestaurantEnvironmentStateSo RestaurantEnvironmentStateSo { get; private set; }
|
2025-07-21 04:11:38 +00:00
|
|
|
|
|
|
|
private const string CreateRestaurantPlayerSo = "CreateRestaurantPlayerSo";
|
|
|
|
private const string CreateEnvironmentSo = "CreateEnvironmentSo";
|
|
|
|
|
|
|
|
public void PreInit()
|
2025-07-17 06:20:30 +00:00
|
|
|
{
|
|
|
|
LoadOrCreateRestaurantState();
|
|
|
|
RegisterFlowHandler();
|
|
|
|
}
|
|
|
|
|
2025-07-21 04:11:38 +00:00
|
|
|
public Task Init()
|
|
|
|
{
|
|
|
|
return Task.CompletedTask;;
|
|
|
|
}
|
|
|
|
|
2025-07-17 06:20:30 +00:00
|
|
|
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.
|
2025-07-21 04:20:31 +00:00
|
|
|
RestaurantEnvironmentStateSo = ScriptableObject.CreateInstance<RestaurantEnvironmentStateSo>();
|
2025-07-17 06:20:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void GenerateDummyEnvironmentProps()
|
|
|
|
{
|
|
|
|
// Make dummy placement data
|
2025-07-30 09:42:33 +00:00
|
|
|
foreach (EnvironmentData prop in DataManager.Instance.GetDataSo<EnvironmentDataSo>().GetDataList())
|
2025-07-17 06:20:30 +00:00
|
|
|
{
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
|
|
{
|
|
|
|
// Make random position
|
|
|
|
Vector2 randomPos = new Vector2(
|
|
|
|
Random.Range(-10f, 10f),
|
|
|
|
Random.Range(10f, 20f)
|
|
|
|
);
|
2025-07-21 04:20:31 +00:00
|
|
|
var randomPropData = new RestaurantEnvironmentData(prop.Id, randomPos);
|
|
|
|
RestaurantEnvironmentStateSo.RestaurantEnvironmentProps.Add(randomPropData);
|
2025-07-17 06:20:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2025-07-21 04:11:38 +00:00
|
|
|
public async Task OnReadyNewFlow(GameFlowState newFlowState)
|
2025-07-17 06:20:30 +00:00
|
|
|
{
|
|
|
|
if (newFlowState == GameFlowState.ReadyForRestaurant)
|
|
|
|
{
|
2025-07-21 04:11:38 +00:00
|
|
|
CreateRestaurantPlayerSo createRestaurantPlayerSoJob = await AssetManager.LoadAsset<CreateRestaurantPlayerSo>(CreateRestaurantPlayerSo);
|
|
|
|
CreateEnvironmentSo createEnvironmentSoJob = await AssetManager.LoadAsset<CreateEnvironmentSo>(CreateEnvironmentSo);
|
2025-07-27 19:51:11 +00:00
|
|
|
RestaurantManagementSo restaurantManagementSo = await AssetManager.LoadAsset<RestaurantManagementSo>(DataConstants.RestaurantManagementSo);
|
2025-07-21 04:11:38 +00:00
|
|
|
var playerHandle = createRestaurantPlayerSoJob.OnReadyNewFlow(newFlowState);
|
|
|
|
var propHandle = createEnvironmentSoJob.OnReadyNewFlow(newFlowState);
|
2025-07-27 19:51:11 +00:00
|
|
|
var todayMenuHandle = restaurantManagementSo.OnReadyNewFlow(newFlowState);
|
2025-07-17 06:20:30 +00:00
|
|
|
// Combine handles and return it
|
2025-07-22 07:46:37 +00:00
|
|
|
InputManager.Instance.SwitchCurrentActionMap(InputActionMaps.Restaurant);
|
2025-07-27 19:32:41 +00:00
|
|
|
await Task.WhenAll(playerHandle, propHandle, todayMenuHandle);
|
2025-07-17 06:20:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|