Files
Fishing2/Assets/Scripts/Common/Services/Settings/Settings.cs
2025-05-30 17:49:12 +08:00

98 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using NBF.Setting;
namespace NBF
{
public class Settings : MonoService<Settings>
{
private readonly Dictionary<string, List<OptionBase>> _dictionary = new Dictionary<string, List<OptionBase>>();
protected override void OnAwake()
{
List<OptionBase> list = new List<OptionBase>();
var options = Reflection.GetAllNonAbstractDerivedTypes<OptionBase>();
foreach (var option in options)
{
var settingOption = Activator.CreateInstance(option);
if (settingOption is OptionBase optionSetting)
{
list.Add(optionSetting);
optionSetting.Initialize();
}
}
list.SortBySortAttribute();
AddRangeToGroup(list);
}
public void LoadAllSettings()
{
foreach (var list in _dictionary.Values)
{
foreach (var option in list)
{
option.Load();
}
}
}
#region
/// <summary>
/// 获取指定 Group 的所有 OptionBase
/// </summary>
public List<OptionBase> GetOptionsByGroup(string group)
{
if (string.IsNullOrEmpty(group))
{
throw new ArgumentException("Group name cannot be null or empty.");
}
return _dictionary.TryGetValue(group, out var options) ? options : new List<OptionBase>();
}
/// <summary>
/// 获取所有 Group 名字列表
/// </summary>
public IEnumerable<string> GetAllGroups()
{
return _dictionary.Keys;
}
/// <summary>
/// 将 OptionBase 按 Group 分类存入字典
/// </summary>
private void AddToGroup(OptionBase option)
{
if (option == null) return;
if (string.IsNullOrEmpty(option.Group)) return;
// 如果字典中没有该 Group则新建一个 List 并加入字典
if (!_dictionary.ContainsKey(option.Group))
{
_dictionary[option.Group] = new List<OptionBase>();
}
// 将 Option 添加到对应的 Group List 中
_dictionary[option.Group].Add(option);
}
/// <summary>
/// 批量添加 OptionBase 到字典
/// </summary>
private void AddRangeToGroup(IEnumerable<OptionBase> options)
{
if (options == null) return;
foreach (var option in options)
{
AddToGroup(option);
}
}
#endregion
}
}