ProjectDDD/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs
2025-07-21 13:11:38 +09:00

80 lines
2.9 KiB
C#

using System.Threading.Tasks;
using UnityEngine;
namespace DDD
{
public class RestaurantController : Singleton<RestaurantController>, IManager, IGameFlowHandler
{
private RestaurantEnvironmentState _restaurantEnvironmentState;
public RestaurantEnvironmentState RestaurantEnvironmentState => _restaurantEnvironmentState;
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.
_restaurantEnvironmentState = ScriptableObject.CreateInstance<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 async Task OnReadyNewFlow(GameFlowState newFlowState)
{
if (newFlowState == GameFlowState.ReadyForRestaurant)
{
CreateRestaurantPlayerSo createRestaurantPlayerSoJob = await AssetManager.LoadAsset<CreateRestaurantPlayerSo>(CreateRestaurantPlayerSo);
CreateEnvironmentSo createEnvironmentSoJob = await AssetManager.LoadAsset<CreateEnvironmentSo>(CreateEnvironmentSo);
var playerHandle = createRestaurantPlayerSoJob.OnReadyNewFlow(newFlowState);
var propHandle = createEnvironmentSoJob.OnReadyNewFlow(newFlowState);
// Combine handles and return it
await Task.WhenAll(playerHandle, propHandle);
}
}
}
}