ProjectDDD/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs
NTG 8031f5cfa0 플레이어 생성 위치 초기화 오류 수정
Instantiate(prefab)만 사용하면 추후에 position을 바꿔도 다시 프리팹의 포지션으로 돌아오는 현상이 내부적으로 존재함.
Instantiate 동시에 매개변수로 position, rotation, parent를 모두 초기화 하는걸 권장함
2025-08-17 15:02:04 +09:00

96 lines
3.2 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();
await InitializeAllFlowControllers();
}
public void PostInit()
{
}
private void RegisterFlowHandler()
{
GameFlowManager.Instance.FlowHandlers.Add(this);
}
private async Task 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);
await newFlowController.InitializeController();
}
foreach (var restaurantFlowController in _restaurantFlowControllers)
{
await 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);
}
}
}