202 lines
6.4 KiB
C#
202 lines
6.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using AibisDream.Framework;
|
|
using AibisDream.Utility;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.Kit
|
|
{
|
|
public class ConfigUtil : SingletonBase<ConfigUtil>
|
|
{
|
|
private const string CharacterConfigPath = "/Config/character.csv";
|
|
private const string BaseConfigPath = "/Config/base_config.csv";
|
|
private const string SpriteGroupPath = "/Config/sprite_group.json";
|
|
|
|
private Dictionary<string, string> _baseConfigDic;
|
|
private Dictionary<string, Character> _characters;
|
|
private Dictionary<string, SpriteGroupConfig> _spriteConfigDict;
|
|
|
|
/// <summary>
|
|
/// 用于单例模式
|
|
/// </summary>
|
|
private ConfigUtil()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 调用时初始化
|
|
/// </summary>
|
|
public override void OnSingletonInit()
|
|
{
|
|
InitBaseConfig();
|
|
InitCharacterConfig();
|
|
InitSpriteGroupConfig();
|
|
}
|
|
|
|
private void InitBaseConfig()
|
|
{
|
|
var baseList = CsvUtil.Read(Application.streamingAssetsPath + BaseConfigPath);
|
|
if (baseList.Count <= 0)
|
|
{
|
|
Debug.Log("基础配置不存在");
|
|
}
|
|
|
|
// 基础配置只有key和value
|
|
_baseConfigDic = new Dictionary<string, string>();
|
|
foreach (var arr in baseList)
|
|
{
|
|
_baseConfigDic.Add(arr[0], arr[1]);
|
|
}
|
|
}
|
|
|
|
private void InitCharacterConfig()
|
|
{
|
|
var characterList = CsvUtil.ReadAsBean<Character>(Application.streamingAssetsPath + CharacterConfigPath);
|
|
_characters = characterList.ToDictionary(item => item.Key, item => item);
|
|
}
|
|
|
|
private void InitSpriteGroupConfig()
|
|
{
|
|
_spriteConfigDict =
|
|
JsonUtil.ReadBeanDict<SpriteGroupConfig>(Application.streamingAssetsPath + SpriteGroupPath) ?? new Dictionary<string, SpriteGroupConfig>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按key获取角色预设
|
|
/// </summary>
|
|
/// <param name="key">key</param>
|
|
/// <param name="character">角色配置</param>
|
|
/// <returns>是否能获取</returns>
|
|
public bool TryGetCharacter(string key, out Character character)
|
|
{
|
|
return _characters.TryGetValue(key, out character);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按key获取基础配置
|
|
/// </summary>
|
|
/// <param name="key">key</param>
|
|
/// <param name="value">配置项</param>
|
|
/// <returns>是否能获取</returns>
|
|
public bool TryGetBaseConfig(string key, out string value)
|
|
{
|
|
return _baseConfigDic.TryGetValue(key, out value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存SpriteGroupConfig
|
|
/// </summary>
|
|
/// <param name="config"></param>
|
|
public void SaveSpriteGroupConfig(SpriteGroupConfig config)
|
|
{
|
|
_spriteConfigDict[config.key] = config;
|
|
SaveConfig(_spriteConfigDict, Application.streamingAssetsPath + SpriteGroupPath);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 尝试获取Config
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="config"></param>
|
|
/// <returns></returns>
|
|
public bool TryGetSpriteConfig(string key, out SpriteGroupConfig config)
|
|
{
|
|
return _spriteConfigDict.TryGetValue(key, out config);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按类型读取Json配置
|
|
/// </summary>
|
|
/// <param name="path">路径</param>
|
|
/// <param name="key">key</param>
|
|
/// <param name="res">结果</param>
|
|
/// <typeparam name="T">类型</typeparam>
|
|
/// <returns>是否成功</returns>
|
|
public bool TryLoadConfig<T>(string path, string key, out T res)
|
|
{
|
|
try
|
|
{
|
|
res = JsonUtil.ReadBean<T>(path, key);
|
|
return true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
res = default;
|
|
Debug.Log(e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按类型读取
|
|
/// </summary>
|
|
/// <param name="path">路径</param>
|
|
/// <param name="res">结果</param>
|
|
/// <typeparam name="T">类型</typeparam>
|
|
/// <returns>是否成功</returns>
|
|
public bool TryLoadConfig<T>(string path, out T res)
|
|
{
|
|
try
|
|
{
|
|
string formattedKey = JsonUtil.FormatAsJsonPath(path);
|
|
res = JsonUtil.ReadBean<T>(formattedKey);
|
|
return true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
res = default;
|
|
Debug.Log(e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存Bean
|
|
/// </summary>
|
|
/// <param name="bean"></param>
|
|
/// <param name="path"></param>
|
|
/// <typeparam name="T"></typeparam>
|
|
public void SaveConfig<T>(T bean, string path)
|
|
{
|
|
var jsonPath = JsonUtil.FormatAsJsonPath(path);
|
|
JsonUtil.SaveBean(bean, jsonPath);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存配置
|
|
/// </summary>
|
|
/// <param name="bean">bean</param>
|
|
/// <param name="key">键</param>
|
|
/// <param name="path">路径</param>
|
|
/// <param name="saveMode">保存类型</param>
|
|
/// <typeparam name="T">类型</typeparam>
|
|
public void SaveConfig<T>(T bean, string key, string path, SaveMode saveMode = SaveMode.Add)
|
|
{
|
|
JsonUtil.SaveBean(bean, key, path, saveMode);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询某个文件夹下的所有文件
|
|
/// </summary>
|
|
/// <param name="folderPath">
|
|
/// </param>
|
|
/// <returns></returns>
|
|
public string[] GetFileNames(string folderPath)
|
|
{
|
|
if (!Directory.Exists(folderPath))
|
|
{
|
|
return Array.Empty<string>(); // 如果目录不存在,返回空数组
|
|
}
|
|
|
|
// 获取所有 .json 文件的完整路径
|
|
string[] filePaths = Directory.GetFiles(folderPath, "*.json");
|
|
|
|
// 提取文件名(不包括路径)
|
|
string[] fileNames = filePaths.Select(Path.GetFileName).ToArray();
|
|
|
|
return fileNames;
|
|
}
|
|
}
|
|
} |