186 lines
6.7 KiB
C#
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 &¤tActiveMenu != 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
|
|
}
|