96 lines
3.1 KiB
C#
96 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace DDD
|
|
{
|
|
public class RestaurantController : Singleton<RestaurantController>, IManager, IGameFlowHandler
|
|
{
|
|
// static definitions
|
|
private static readonly List<Type> RestaurantFlowControllerTypes = new()
|
|
{
|
|
typeof(RestaurantPlayerController),
|
|
typeof(RestaurantEnvironmentController),
|
|
typeof(RestaurantManagementController),
|
|
typeof(RestaurantRunController)
|
|
};
|
|
|
|
public RestaurantState GetRestaurantState() => RestaurantState.instance;
|
|
public RestaurantDataSo RestaurantData() => RestaurantDataSo.instance;
|
|
|
|
private List<RestaurantFlowController> _restaurantFlowControllers = new();
|
|
|
|
public void PreInit()
|
|
{
|
|
RegisterFlowHandler();
|
|
}
|
|
|
|
public async Task Init()
|
|
{
|
|
await LoadData();
|
|
await RestaurantDataSo.instance.LoadData();
|
|
InitializeAllFlowControllers();
|
|
}
|
|
|
|
public void PostInit()
|
|
{
|
|
}
|
|
|
|
private void RegisterFlowHandler()
|
|
{
|
|
GameFlowManager.Instance.FlowHandlers.Add(this);
|
|
}
|
|
|
|
private void InitializeAllFlowControllers()
|
|
{
|
|
// Create controllers and initialize them
|
|
foreach (var restaurantFlowControllerType in RestaurantFlowControllerTypes)
|
|
{
|
|
// create new controllers from restaurantFlowControllerType
|
|
var newController = ScriptableObject.CreateInstance(restaurantFlowControllerType);
|
|
var newFlowController = newController as RestaurantFlowController;
|
|
_restaurantFlowControllers.Add(newFlowController);
|
|
newFlowController.InitializeController();
|
|
}
|
|
|
|
foreach (var restaurantFlowController in _restaurantFlowControllers)
|
|
{
|
|
restaurantFlowController.InitializeState();
|
|
}
|
|
}
|
|
|
|
private Task LoadData()
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public async Task OnReadyNewFlow(GameFlowState newFlowState)
|
|
{
|
|
List<Task> tasks = new List<Task>();
|
|
// Default restaurant initialization
|
|
if (newFlowState == GameFlowState.ReadyForRestaurant)
|
|
{
|
|
// Switch keymap
|
|
InputManager.Instance.SwitchCurrentActionMap(InputActionMaps.Restaurant);
|
|
}
|
|
|
|
// Restaurant FlowControllers - Player, Environment, Management, Run, ...
|
|
foreach (var flowController in _restaurantFlowControllers)
|
|
{
|
|
tasks.Add(flowController.OnReadyNewFlow(newFlowState));
|
|
}
|
|
await Task.WhenAll(tasks);
|
|
}
|
|
|
|
public async Task OnExitCurrentFlow(GameFlowState exitingFlowState)
|
|
{
|
|
List<Task> tasks = new List<Task>();
|
|
foreach (var flowController in _restaurantFlowControllers)
|
|
{
|
|
tasks.Add(flowController.OnExitCurrentFlow(exitingFlowState));
|
|
}
|
|
await Task.WhenAll(tasks);
|
|
}
|
|
}
|
|
} |