ProjectDDD/Assets/_DDD/_Scripts/GameUi/UiManager.cs

111 lines
3.1 KiB
C#
Raw Normal View History

2025-08-21 07:25:27 +00:00
using System;
2025-07-21 07:53:39 +00:00
using System.Threading.Tasks;
2025-08-18 04:26:18 +00:00
using UnityEngine;
2025-07-21 07:53:39 +00:00
namespace DDD
{
2025-08-18 04:26:18 +00:00
public class UiManager : Singleton<UiManager>, IManager, IGameFlowHandler
2025-07-21 07:53:39 +00:00
{
2025-08-21 07:25:27 +00:00
[SerializeField] private Transform _hudRoot;
[SerializeField] private Transform _interactionUiRoot;
2025-08-18 04:26:18 +00:00
[SerializeField] private Transform _popupUiRoot;
2025-08-21 07:25:27 +00:00
[SerializeField] private Transform _commonUiRoot;
2025-07-21 07:53:39 +00:00
2025-08-21 07:25:27 +00:00
public UiData UiData => GameData.Instance.UiData;
public UiState UiState => GameState.Instance.UiState;
2025-07-21 07:53:39 +00:00
private void OnDestroy()
{
2025-08-18 04:26:18 +00:00
GameFlowManager.Instance?.FlowHandlers?.Remove(this);
2025-07-21 07:53:39 +00:00
}
2025-08-18 04:26:18 +00:00
public void PreInit()
2025-07-21 07:53:39 +00:00
{
2025-08-21 07:25:27 +00:00
ClearAll();
2025-08-18 04:26:18 +00:00
GameFlowManager.Instance.FlowHandlers.Add(this);
2025-08-21 07:25:27 +00:00
}
2025-07-21 07:53:39 +00:00
2025-08-21 07:25:27 +00:00
public Task Init()
{
var flowToUiMapping = UiData.FlowToUiMapping;
foreach (var flowToUis in flowToUiMapping)
2025-07-21 07:53:39 +00:00
{
2025-08-21 07:25:27 +00:00
if (flowToUis.Key == GameFlowState.All)
{
foreach (var ui in flowToUis.Value)
{
var uiType = ui.UiType;
var root = GetUiRoot(uiType);
UiState.CreateUi(ui, root);
}
}
2025-07-21 07:53:39 +00:00
}
2025-08-21 07:25:27 +00:00
return Task.CompletedTask;
2025-07-21 07:53:39 +00:00
}
2025-08-21 07:25:27 +00:00
public void PostInit()
2025-07-21 07:53:39 +00:00
{
2025-08-21 07:25:27 +00:00
2025-07-21 07:53:39 +00:00
}
2025-08-21 07:25:27 +00:00
private void ClearObjects(Transform root)
2025-07-21 07:53:39 +00:00
{
2025-08-21 07:25:27 +00:00
foreach (Transform child in root)
{
Destroy(child.gameObject);
}
}
2025-07-21 07:53:39 +00:00
2025-08-21 07:25:27 +00:00
private void ClearAll()
{
ClearObjects(_hudRoot);
ClearObjects(_interactionUiRoot);
ClearObjects(_popupUiRoot);
ClearObjects(_commonUiRoot);
2025-07-22 07:46:37 +00:00
}
2025-08-18 04:26:18 +00:00
public Task OnReadyNewFlow(GameFlowState newFlowState)
2025-07-22 07:46:37 +00:00
{
2025-08-21 07:25:27 +00:00
var flowToUiMapping = UiData.FlowToUiMapping;
foreach (var flowToUis in flowToUiMapping)
{
2025-08-21 09:18:34 +00:00
if (flowToUis.Key.HasFlag(newFlowState))
2025-08-21 07:25:27 +00:00
{
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);
}
}
}
2025-08-18 04:26:18 +00:00
return Task.CompletedTask;
2025-07-22 07:46:37 +00:00
}
2025-08-05 05:14:39 +00:00
2025-08-18 04:26:18 +00:00
public Task OnExitCurrentFlow(GameFlowState exitingFlowState)
2025-07-22 07:46:37 +00:00
{
2025-08-18 04:26:18 +00:00
return Task.CompletedTask;
2025-08-05 05:14:39 +00:00
}
2025-08-21 07:25:27 +00:00
public Transform GetUiRoot(UiType uiType)
2025-08-05 05:14:39 +00:00
{
2025-08-21 07:25:27 +00:00
return uiType switch
{
UiType.Hud => _hudRoot,
UiType.Interaction => _interactionUiRoot,
UiType.Popup => _popupUiRoot,
UiType.Common => _commonUiRoot,
_ => throw new Exception("UiType 설정 오류")
};
2025-07-21 07:53:39 +00:00
}
}
}