设置相关功能脚本呢
This commit is contained in:
98
Assets/Scripts/Common/Services/Settings/Settings.cs
Normal file
98
Assets/Scripts/Common/Services/Settings/Settings.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user