Files
ChunilENG/Assets/Scripts/UI/Panel_Menu.cs

137 lines
3.9 KiB
C#

using CHN;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using WI;
using TMPro;
namespace CHN
{
public class Panel_Menu : PanelBase, IPopupPanel
{
RectTransform TabButtonList;
Button Button_Control;
Button Button_Protocol;
Button Button_Reset;
Button Button_Accept;
Button Button_Close;
public List<SettingPanel> settingPanels = new List<SettingPanel>();
SettingPanel currentTab;
public List<Button> tabButtons = new List<Button>();
Button currentTabButton;
public List<Image> accpetButtonImages = new List<Image>();
public Image Image_Control;
public Image Image_Protocol;
public override void AfterStart()
{
settingPanels.AddRange(GetComponentsInChildren<SettingPanel>(true));
tabButtons.AddRange(TabButtonList.GetComponentsInChildren<Button>(true));
Button_Control.onClick.AddListener(OnClickButton_Control);
Button_Protocol.onClick.AddListener(OnClickButton_Protocol);
Button_Reset.onClick.AddListener(OnClickButton_Reset);
Button_Accept.onClick.AddListener(OnClickButton_Accept);
Button_Close.onClick.AddListener(Close);
accpetButtonImages.Add(Image_Control);
accpetButtonImages.Add(Image_Protocol);
SetActive(false);
}
public void Open()
{
if (gameObject.activeSelf)
return;
ChangePanel<Panel_ControlSetting>();
ChangeButtonState(Button_Control);
SetActive(true);
transform.SetAsLastSibling();
}
void ChangePanel<T>() where T : SettingPanel
{
foreach (SettingPanel panel in settingPanels)
{
panel.Close();
if (panel.GetType() == typeof(T))
{
panel.Open();
currentTab = panel;
}
}
}
void ChangeButtonState(Button button)
{
foreach (var tabButton in tabButtons)
{
SetTabButtonState(tabButton, false, new Color32(56, 56, 56, 255));
}
currentTabButton = button;
SetTabButtonState(currentTabButton, true, new Color32(255, 255, 255, 255));
ChangeAcceptButton(button);
}
void SetTabButtonState(Button button, bool active ,Color32 textColor)
{
var image = button.transform.GetChild(2).GetComponent<Image>();
image.gameObject.SetActive(active);
var text = button.transform.GetComponentInChildren<TextMeshProUGUI>(true);
text.color = textColor;
}
void ChangeAcceptButton(Button button)
{
var splitIndex = button.name.IndexOf("_");
var buttonName = button.name.Substring(splitIndex + 1);
foreach(var acceptImage in accpetButtonImages)
{
if (acceptImage.name.Contains(buttonName))
{
Button_Accept.image.sprite = acceptImage.sprite;
}
}
}
void OnClickButton_Control()
{
ChangeButtonState(Button_Control);
ChangePanel<Panel_ControlSetting>();
}
void OnClickButton_Protocol()
{
ChangeButtonState(Button_Protocol);
ChangePanel<Panel_ProtocolSetting>();
}
void OnClickButton_Reset()
{
currentTab.Reset();
}
void OnClickButton_Accept()
{
currentTab.Accept();
}
public void Close()
{
SetActive(false);
}
}
}