Files
SHI-YardView/Assets/Scripts/UI/Panel_DetailMenu.cs

186 lines
6.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class Panel_DetailMenu : MonoBehaviour
{
private Dictionary<string, Button> tabButtons = new();
public Button currentTabButton;
private Dictionary<string, BaseDetailMenu> tabMenus = new();
public BaseDetailMenu currentActiveMenu;
public Action onClickBack;
public void Open()
{
gameObject.SetActive(true);
}
public void Close()
{
gameObject.SetActive(false);
}
public void Initialized()
{
var layoutGroups = transform.GetComponentsInChildren<VerticalLayoutGroup>(true);
var buttonsArea = layoutGroups.Where(area => area.name == "ButtonArea").FirstOrDefault();
var buttonDictionary = buttonsArea.transform.FindComponentDictionary<Button>();
var detailMenus = transform.FindComponentDictionary<BaseDetailMenu>();
foreach (var tabButton in buttonDictionary.Values)
{
tabButtons.Add(tabButton.name, tabButton);
tabButton.onClick.AddListener(() => SetDetialMenu(tabButton.name));
SettingTabMenu(tabButton.name, detailMenus);
}
}
private void SettingTabMenu(string tabButtonName, Dictionary<string, BaseDetailMenu> detailMenus)
{
foreach(var detailMenuName in detailMenus.Keys)
{
var tabMenuName = tabButtonName.Replace("Button_", "");
if (detailMenuName.Contains(tabMenuName))
{
detailMenus[detailMenuName].Initialized();
detailMenus[detailMenuName].onClickBack += OnClickBackButton;
detailMenus[detailMenuName].onClickClose += Close;
tabMenus.Add(tabButtonName, detailMenus[detailMenuName]);
}
}
}
private void OnClickBackButton()
{
onClickBack?.Invoke();
Close();
}
public void SetDetialMenu(string buttonName)
{
if (!gameObject.activeSelf)
{
Open();
}
ChangedTabButton(buttonName);
ChangedTabMenu(buttonName);
}
private void ChangedTabButton(string buttonName)
{
if(!tabButtons.ContainsKey(buttonName))
{
Debug.Log($"{buttonName}은 아직 등록되지 않은 메뉴 탭입니다.");
return;
}
if (currentTabButton != null && currentTabButton != tabButtons[buttonName])
{
var preSelected = currentTabButton.GetComponentInChildren<RawImage>(true);
preSelected.gameObject.SetActive(false);
}
currentTabButton = tabButtons[buttonName];
var selected = currentTabButton.GetComponentInChildren<RawImage>(true);
selected.gameObject.SetActive(true);
}
public void ChangedTabMenu(string buttonName)
{
if (!tabMenus.ContainsKey(buttonName))
{
Debug.Log($"{buttonName}에 해당하는 메뉴는 아직 등록되지 않은 메뉴 입니다.");
return;
}
if (currentActiveMenu != null &&currentActiveMenu != tabMenus[buttonName])
{
currentActiveMenu.gameObject.SetActive(false);
}
currentActiveMenu = tabMenus[buttonName];
currentActiveMenu.gameObject.SetActive(true);
}
#region
//private Button Button_Search;
//private Button Button_Filtering;
//private Button Button_BerthStatus;
//private Button Button_OutfittingProgress;
//private Button Button_QuayBerth;
//private Button Button_AutomationRate;
//private Button Button_OutFittingPlan;
//private Button Button_SteelStockyardStatus;
//private Button Button_BuildingStatus;
//private Button Button_AerialVideo;
//private void Initialized()
//{
// var buttonDictionary = transform.FindComponentDictionary<Button>();
// Button_Search = buttonDictionary.GetOrNull(nameof(Button_Search));
// Button_Filtering = buttonDictionary.GetOrNull(nameof(Button_Filtering));
// Button_BerthStatus = buttonDictionary.GetOrNull(nameof(Button_BerthStatus));
// Button_OutfittingProgress = buttonDictionary.GetOrNull(nameof(Button_OutfittingProgress));
// Button_QuayBerth = buttonDictionary.GetOrNull(nameof(Button_QuayBerth));
// Button_AutomationRate = buttonDictionary.GetOrNull(nameof(Button_AutomationRate));
// Button_OutFittingPlan = buttonDictionary.GetOrNull(nameof(Button_OutFittingPlan));
// Button_SteelStockyardStatus = buttonDictionary.GetOrNull(nameof(Button_SteelStockyardStatus));
// Button_BuildingStatus = buttonDictionary.GetOrNull(nameof(Button_BuildingStatus));
// Button_AerialVideo = buttonDictionary.GetOrNull(nameof(Button_AerialVideo));
// Button_Search.onClick.AddListener(OnClickSearchButton);
// Button_Filtering.onClick.AddListener(OnClickFilteringButton);
// Button_BerthStatus.onClick.AddListener(OnClickBerthStatusButton);
// Button_OutfittingProgress.onClick.AddListener(OnClickOutfittingProgressButton);
// Button_QuayBerth.onClick.AddListener(OnClickQuayBerthButton);
// Button_AutomationRate.onClick.AddListener(OnClickAutomationRateButton);
// Button_OutFittingPlan.onClick.AddListener(OnClickOutFittingPlanButton);
// Button_SteelStockyardStatus.onClick.AddListener(OnClickSteelStockyardStatusButton);
// Button_BuildingStatus.onClick.AddListener(OnClickBuildingStatusButton);
// Button_AerialVideo.onClick.AddListener(OnClickAerialVideoButton);
//}
//private void OnClickSearchButton()
//{
// onClickMenuSelected?.Invoke(Button_Search.name);
//}
//private void OnClickFilteringButton()
//{
// onClickMenuSelected?.Invoke(Button_Filtering.name);
//}
//private void OnClickBerthStatusButton()
//{
// onClickMenuSelected?.Invoke(Button_BerthStatus.name);
//}
//private void OnClickOutfittingProgressButton()
//{
// onClickMenuSelected?.Invoke(Button_OutfittingProgress.name);
//}
//private void OnClickQuayBerthButton()
//{
// onClickMenuSelected?.Invoke(Button_QuayBerth.name);
//}
//private void OnClickAutomationRateButton()
//{
// onClickMenuSelected?.Invoke(Button_AutomationRate.name);
//}
//private void OnClickOutFittingPlanButton()
//{
// onClickMenuSelected?.Invoke(Button_OutFittingPlan.name);
//}
//private void OnClickSteelStockyardStatusButton()
//{
// onClickMenuSelected?.Invoke(Button_SteelStockyardStatus.name);
//}
//private void OnClickBuildingStatusButton()
//{
// onClickMenuSelected?.Invoke(Button_BuildingStatus.name);
//}
//private void OnClickAerialVideoButton()
//{
// onClickMenuSelected?.Invoke(Button_AerialVideo.name);
//}
#endregion
}