111 lines
3.1 KiB
C#
111 lines
3.1 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace DDD
|
|
{
|
|
public class UiManager : Singleton<UiManager>, IManager, IGameFlowHandler
|
|
{
|
|
[SerializeField] private Transform _hudRoot;
|
|
[SerializeField] private Transform _interactionUiRoot;
|
|
[SerializeField] private Transform _popupUiRoot;
|
|
[SerializeField] private Transform _commonUiRoot;
|
|
|
|
public UiData UiData => GameData.Instance.UiData;
|
|
public UiState UiState => GameState.Instance.UiState;
|
|
|
|
private void OnDestroy()
|
|
{
|
|
GameFlowManager.Instance?.FlowHandlers?.Remove(this);
|
|
}
|
|
|
|
public void PreInit()
|
|
{
|
|
ClearAll();
|
|
|
|
GameFlowManager.Instance.FlowHandlers.Add(this);
|
|
}
|
|
|
|
public Task Init()
|
|
{
|
|
var flowToUiMapping = UiData.FlowToUiMapping;
|
|
foreach (var flowToUis in flowToUiMapping)
|
|
{
|
|
if (flowToUis.Key == GameFlowState.All)
|
|
{
|
|
foreach (var ui in flowToUis.Value)
|
|
{
|
|
var uiType = ui.UiType;
|
|
var root = GetUiRoot(uiType);
|
|
UiState.CreateUi(ui, root);
|
|
}
|
|
}
|
|
}
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public void PostInit()
|
|
{
|
|
|
|
}
|
|
|
|
private void ClearObjects(Transform root)
|
|
{
|
|
foreach (Transform child in root)
|
|
{
|
|
Destroy(child.gameObject);
|
|
}
|
|
}
|
|
|
|
private void ClearAll()
|
|
{
|
|
ClearObjects(_hudRoot);
|
|
ClearObjects(_interactionUiRoot);
|
|
ClearObjects(_popupUiRoot);
|
|
ClearObjects(_commonUiRoot);
|
|
}
|
|
|
|
public Task OnReadyNewFlow(GameFlowState newFlowState)
|
|
{
|
|
var flowToUiMapping = UiData.FlowToUiMapping;
|
|
foreach (var flowToUis in flowToUiMapping)
|
|
{
|
|
if (flowToUis.Key.HasFlag(newFlowState))
|
|
{
|
|
foreach (var ui in flowToUis.Value)
|
|
{
|
|
var uiType = ui.UiType;
|
|
var root = GetUiRoot(uiType);
|
|
UiState.CreateUi(ui, root);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (var ui in flowToUis.Value)
|
|
{
|
|
UiState.DestroyUi(ui);
|
|
}
|
|
}
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task OnExitCurrentFlow(GameFlowState exitingFlowState)
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Transform GetUiRoot(UiType uiType)
|
|
{
|
|
return uiType switch
|
|
{
|
|
UiType.Hud => _hudRoot,
|
|
UiType.Interaction => _interactionUiRoot,
|
|
UiType.Popup => _popupUiRoot,
|
|
UiType.Common => _commonUiRoot,
|
|
_ => throw new Exception("UiType 설정 오류")
|
|
};
|
|
}
|
|
}
|
|
} |