Files
Fishing2/Assets/Scripts/UI/Settings/SettingPanel.cs
2025-06-12 16:18:55 +08:00

238 lines
6.6 KiB
C#

// 本脚本只在不存在时会生成一次。已存在不会再次生成覆盖
using System.Collections.Generic;
using FairyGUI;
using UnityEngine;
using NBC;
using NBF.Setting;
using Unity.VisualScripting;
using UIPanel = NBC.UIPanel;
namespace NBF
{
public partial class SettingPanel : UIPanel
{
public override string UIPackName => "Main";
public override string UIResName => "SettingPanel";
private readonly List<TabListData> tabList = new List<TabListData>();
private string _currentTab = "";
private List<int> _canSelectIndex = new List<int>();
private int _nowSelectIndex = -1;
protected override void OnInit()
{
base.OnInit();
IsShowCursor = true;
IsDontBack = true;
var groupNames = Settings.Instance.GetAllTabs();
foreach (var group in groupNames)
{
var tab = new TabListData
{
Name = group
};
tabList.Add(tab);
}
Menu.OnTabChange += ChangeTab;
List.onClickItem.Set(OnClickListItem);
}
protected override void OnShow()
{
Settings.Instance.LoadAllSettings();
InputManager.OnUICanceled += OnUICanceled;
Menu.SetTabs(tabList);
UseBottomMenu();
}
private void ChangeTab(int index)
{
if (index < 0) return;
Log.Info($"Change tab index={index}");
var tabListData = tabList[index];
_currentTab = tabListData.Name;
ResetSettingList();
}
private void ResetSettingList()
{
// TextTitle.text = Lan.Get(_currentGroup);
_nowSelectIndex = -1;
List.RemoveChildrenToPool();
if (string.IsNullOrEmpty(_currentTab)) return;
var options = Settings.Instance.GetOptionsByTab(_currentTab);
Dictionary<string, List<OptionBase>> groupOptions = new Dictionary<string, List<OptionBase>>();
foreach (var option in options)
{
if (!groupOptions.TryGetValue(option.Group, out List<OptionBase> list))
{
list = new List<OptionBase>();
groupOptions.Add(option.Group, list);
}
list.Add(option);
}
_canSelectIndex.Clear();
var url = UIPackage.GetItemURL(UIPackName, "SettingSubTitleItem");
foreach (var key in groupOptions.Keys)
{
var value = groupOptions[key];
if (List.AddItemFromPool(url) is GLabel label)
{
label.title = Lan.Get(key);
}
foreach (var option in value)
{
if (List.AddItemFromPool() is SettingItem item)
{
item.SetData(option);
var index = List.GetChildIndex(item);
_canSelectIndex.Add(index);
}
}
}
}
private void UseBottomMenu()
{
BottomMenu.Use(this);
}
private void OnApplySettings()
{
var options = Settings.Instance.GetOptionsByTab(_currentTab);
foreach (var option in options)
{
option.Apply();
}
}
private void OnResetSettings()
{
var options = Settings.Instance.GetOptionsByTab(_currentTab);
foreach (var option in options)
{
option.Reset();
}
}
private void OnUICanceled(string action)
{
if (action == InputDef.UI.SubPrev)
{
if (List.GetChildAt(List.selectedIndex) is SettingItem item)
{
item.OnPrev();
}
}
else if (action == InputDef.UI.SubNext)
{
if (List.GetChildAt(List.selectedIndex) is SettingItem item)
{
item.OnNext();
}
}
else if (action == InputDef.UI.Up)
{
ChangeListSelected();
}
else if (action == InputDef.UI.Down)
{
ChangeListSelected(false);
}
else if (action == InputDef.UI.Back)
{
OnBack();
}
else if (action == InputDef.UI.Enter)
{
OnApplySettings();
}
}
private void ChangeListSelected(bool up = true)
{
if (!up)
{
_nowSelectIndex++;
}
else
{
_nowSelectIndex--;
}
if (_nowSelectIndex < 0) _nowSelectIndex = 0;
else if (_nowSelectIndex >= _canSelectIndex.Count) _nowSelectIndex = _canSelectIndex.Count - 1;
var targetIndex = _canSelectIndex[_nowSelectIndex];
SetListSelected(targetIndex);
}
private void SetListSelected(int selectedIndex)
{
if (selectedIndex >= 0 && selectedIndex < List.numItems)
{
List.selectedIndex = selectedIndex;
List.ScrollToView(List.selectedIndex);
}
OnClickListItem();
}
private void OnClickListItem()
{
var index = List.selectedIndex;
if (index < 0)
{
return;
}
var settingItem = List.GetChildAt(index);
if (settingItem is SettingItem item)
{
Introduce.TextName.text = Lan.Get(item.Option.Name);
Introduce.TextIntroduce.text = Lan.Get(item.Option.Name);
// Introduce.
}
}
private void OnBack()
{
if (Settings.Instance.HaveNotAppleSettings())
{
MessageBox.Show("还有未保存的信息", (b) =>
{
if (b)
{
Hide();
}
});
}
else
{
Hide();
}
}
protected override void OnHide()
{
base.OnHide();
InputManager.OnUICanceled -= OnUICanceled;
}
protected override void OnDestroy()
{
base.OnDestroy();
Menu.OnTabChange -= ChangeTab;
}
}
}