Files

117 lines
3.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TON
{
public class UIManager : SingletonBase<UIManager>
{
public VariableJoystick joystick; // Joystick 컴포넌트를 참조
public static T Show<T>(UIList uiName) where T : UIBase
{
var targetUI = Singleton.GetUI<T>(uiName);
if (targetUI == null)
{
return null;
}
targetUI.Show();
return targetUI;
}
public static T Hide<T>(UIList uiName) where T : UIBase
{
var targetUI = Singleton.GetUI<T>(uiName);
if (targetUI == null)
{
return null;
}
targetUI.Hide();
return targetUI;
}
// 상점 및 기타 화면에서 재화 데이터 업데이트 시 매니저를 통해 호출
public void UpdateCashData()
{
var targetUI = Singleton.GetUI<OptionUI>(UIList.OptionUI);
targetUI.SetCashAmount();
}
private Dictionary<UIList, UIBase> panels = new Dictionary<UIList, UIBase>();
private Dictionary<UIList, UIBase> popups = new Dictionary<UIList, UIBase>();
private Transform panelRoot;
private Transform popupRoot;
private const string UI_PATH = "UI/Prefabs/";
public void Initalize()
{
if (panelRoot == null)
{
GameObject panelGo = new GameObject("Panel Root");
panelRoot = panelGo.transform;
panelRoot.SetParent(transform);
}
if (popupRoot == null)
{
GameObject popupGo = new GameObject("Popup Root");
popupRoot = popupGo.transform;
popupRoot.SetParent(transform);
}
for (int i = (int)UIList.PANEL_START + 1; i < (int)UIList.PANEL_END; i++)
{
panels.Add((UIList)i, null);
}
for (int i = (int)UIList.POPUP_START + 1; i < (int)UIList.POPUP_END; i++)
{
popups.Add((UIList)i, null);
}
}
public T GetUI<T>(UIList uiName, bool isReload = false) where T : UIBase
{
Dictionary<UIList, UIBase> container = null;
if (uiName > UIList.PANEL_START && uiName < UIList.PANEL_END)
{
container = panels;
}
else
{
container = popups;
}
if (!container.ContainsKey(uiName))
{
return null;
}
if (isReload && container[uiName])
{
Destroy(container[uiName].gameObject);
container[uiName] = null;
}
if (!container[uiName])
{
string path = UI_PATH + $"UI.{uiName}";
T result = Resources.Load<UIBase>(path) as T;
if (result)
{
container[uiName] = Instantiate(result, container == panels ? panelRoot : popupRoot);
container[uiName].gameObject.SetActive(false);
}
}
return container[uiName] as T;
}
}
}