¡¡´ðÄ쥯¥é¥¹ View ¤ò·Ñ¾µ¤·¤Æ¤¤¤ëÇÉÀ¸¥¯¥é¥¹¤ò List ¤Ç´ÉÍý¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Ê£¿ô¤Î View ¤ò Mediator ¤¬´ÉÍý¤¹¤ë·Á¤ò¼è¤ê¤Þ¤¹¡£
¡¡List Æâ¤Ë¤¢¤ë»ØÄꤵ¤ì¤¿ View ¤òɽ¼¨¤·¤¿¤ê¡¢
°ÊÁ°É½¼¨¤µ¤ì¤Æ¤¤¤¿ View ¤ËÌá¤Ã¤¿¤ê¤È¤¤¤Ã¤¿¡¢UI ɽ¼¨¤òÀ©¸æ¤·¤¿¤ê¤¹¤ë¤³¤È¤¬º£²ó¤Î Mediator ¤ÎÌÜŪ¤Ë¤Ê¤ê¤Þ¤¹¡£
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class UIManager : AbstractSingleton<UIManager>
{
[SerializeField] Canvas m_Canvas;
[SerializeField] RectTransform m_Root;
[SerializeField] RectTransform m_BackgroundLayer;
[SerializeField] RectTransform m_ViewLayer;
List<View> m_Views;
View m_CurrentView;
readonly Stack<View> m_History = new();
void Start() {
m_Views = m_Root.GetComponentsInChildren<View>(true).ToList();
Init();
¡¡¡¡¡¡¡¡// TODO Canvas ¤Î¥ê¥µ¥¤¥º¤Ê¤É
}
void Init() {
// foreach (var view in m_Views)
// view.Hide();
// ¾åµ¤ò LINQ ¤Ç½ñ¤¤¤¿¾ì¹ç
m_Views.ForEach(view => view.Hide());
m_History.Clear();
}
/// <summary>
/// »ØÄꤵ¤ì¤¿·¿¤ÎºÇ½é¤ËÅÐÏ¿¤µ¤ì¤¿ UI View ¤ò¸¡º÷¤·¤Þ¤¹
/// </summary>
/// <typeparam name="T">¸¡º÷ÂоݤΠView ¥¯¥é¥¹</typeparam>
/// <returns>»ØÄꤵ¤ì¤¿·¿¤Î View ¥¤¥ó¥¹¥¿¥ó¥¹¡£¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ï null </returns>
public T GetView<T>() where T : View {
// foreach (var view in m_Views) {
// if (view is T tView) {
// return tView;
// }
// }
//
// return null;
// ¾åµ¤ò LINQ ¤Ç½ñ¤¤¤¿¾ì¹ç
return m_Views.OfType<T>().FirstOrDefault();
// ¼Â¹ÔÌ¿ÎáÎã
// m_Hud = UIManager.Instance.GetView<Hud>();
}
/// <summary>
/// »ØÄꤵ¤ì¤¿·¿¤Î View ¤ò¸¡º÷¤·¤Æɽ¼¨¤¹¤ë
/// </summary>
/// <param name="keepInHistory">Ìá¤ë¾ì¹ç¤Ë¸½ºß¤Î View ¤òÍúÎò¥¹¥¿¥Ã¥¯¤ËÄɲ乤뤫¤É¤¦¤«</param>
/// <typeparam name="T">¸¡º÷ÂоݤΠView ¥¯¥é¥¹</typeparam>
public void Show<T>(bool keepInHistory = true) where T : View {
// foreach (var view in m_Views) {
// if (view is T) {
// Show(view, keepInHistory);
// break;
// }
// }
// ¾åµ¤ò LINQ ¤Ç½ñ¤¤¤¿¾ì¹ç
var targetView = m_Views.OfType<T>().SingleOrDefault(); // FirstOrDefault ¤Ç¤â¤è¤¤
if (targetView != null)
{
Show(targetView, keepInHistory);
}
// ¼Â¹ÔÌ¿ÎáÎã
// UIManager.Instance.Show<SettingsMenu>();
// UIManager.Instance.Show<ShopView>();
}
/// <summary>
/// View ¤òɽ¼¨¤·¡¢Â¾¤Î View ¤òÈóɽ¼¨¤Ë¤¹¤ë
/// </summary>
/// <param name="view">ɽ¼¨¤¹¤ë View</param>
/// <param name="keepInHistory">Ìá¤ë¾ì¹ç¤Ë¸½ºß¤Î View ¤òÍúÎò¥¹¥¿¥Ã¥¯¤ËÄɲ乤뤫¤É¤¦¤«</param>
public void Show(View view, bool keepInHistory = true) {
if (m_CurrentView != null) {
if (keepInHistory) {
m_History.Push(m_CurrentView);
}
m_CurrentView.Hide();
}
view.Show();
m_CurrentView = view;
// ¼Â¹ÔÌ¿ÎáÎã
// Show(view, keepInHistory); // Show¥á¥½¥Ã¥ÉÆâ
// Show(m_History.Pop(), false); // GoBack ¥á¥½¥Ã¥ÉÆâ
}
/// <summary>
/// °ÊÁ°¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤¿¥Ú¡¼¥¸¤ËÌá¤ë
/// </summary>
public void GoBack() {
if (m_History.Count != 0) {
Show(m_History.Pop(), false);
}
}
}