using System;
using System.Collections.Concurrent;
using AlicizaX.Runtime;
namespace AlicizaX.Config.Runtime
{
///
/// 全局配置管理器。
///
[UnityEngine.Scripting.Preserve]
public sealed partial class ConfigManager : IConfigManager
{
private readonly ConcurrentDictionary m_ConfigDatas;
///
/// 初始化全局配置管理器的新实例。
///
[UnityEngine.Scripting.Preserve]
public ConfigManager()
{
m_ConfigDatas = new ConcurrentDictionary(StringComparer.Ordinal);
}
///
/// 获取全局配置项数量。
///
public int Count
{
get { return m_ConfigDatas.Count; }
}
void IModule.Dispose()
{
RemoveAllConfigs();
}
///
/// 检查是否存在指定全局配置项。
///
/// 要检查全局配置项的名称。
/// 指定的全局配置项是否存在。
[UnityEngine.Scripting.Preserve]
public bool HasConfig(string configName)
{
return m_ConfigDatas.TryGetValue(configName, out _);
}
///
/// 增加指定全局配置项。
///
/// 要增加全局配置项的名称。
/// 全局配置项的值。
/// 是否增加全局配置项成功。
[UnityEngine.Scripting.Preserve]
public void AddConfig(string configName, IDataTable configValue)
{
bool isExist = m_ConfigDatas.TryGetValue(configName, out var value);
if (isExist)
{
return;
}
m_ConfigDatas.TryAdd(configName, configValue);
}
///
/// 移除指定全局配置项。
///
/// 要移除全局配置项的名称。
[UnityEngine.Scripting.Preserve]
public bool RemoveConfig(string configName)
{
if (!HasConfig(configName))
{
return false;
}
return m_ConfigDatas.TryRemove(configName, out _);
}
///
/// 获取指定全局配置项。
///
/// 要获取全局配置项的名称。
/// 要获取全局配置项的全局配置项。
[UnityEngine.Scripting.Preserve]
public IDataTable GetConfig(string configName)
{
return m_ConfigDatas.TryGetValue(configName, out var value) ? value : null; //GetConfig()
}
///
/// 清空所有全局配置项。
///
[UnityEngine.Scripting.Preserve]
public void RemoveAllConfigs()
{
m_ConfigDatas.Clear();
}
}
}