Main/Assets/Code/Logic/_Helper/DeclareDataUtils.cs

174 lines
6.0 KiB
C#
Raw Normal View History

2025-01-25 04:38:09 +08:00
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
namespace Thousandto.Plugins.Common
{
/// <summary>
/// 配置数据中各种字符串解析处理
/// </summary>
public class DeclareDataUtils
{
/// <summary>
/// 解析字符串 -- 不带有前缀的字符串
/// </summary>
/// <param name="idx">从解析的数据中获取数据的索引</param>
/// <param name="originalStr">xxx;xxx</param>
/// <returns></returns>
public static string GetValue(int idx, string originalStr)
{
if (string.IsNullOrEmpty(originalStr)) return string.Empty;
var arr = originalStr.Split(new char[] { ';', '' });
if (idx >= 0 && idx < arr.Length)
{
return arr[idx];
}
return string.Empty;
}
/// <summary>
/// 获取带有前缀索引的数值
/// </summary>
/// <param name="idx"></param>
/// <param name="originalStr"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static float GetValue(int idx, string originalStr, float defaultValue)
{
float result = defaultValue;
if (float.TryParse(GetValue(idx, originalStr), out result))
{
return result;
}
return defaultValue;
}
/// <summary>
/// 获取带有前缀索引的数值
/// </summary>
/// <param name="idx"></param>
/// <param name="originalStr"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static int GetValue(int idx, string originalStr, int defaultValue)
{
int result = defaultValue;
if (int.TryParse(GetValue(idx, originalStr), out result))
{
return result;
}
return defaultValue;
}
/// <summary>
/// 获取带有前缀索引的颜色
/// </summary>
/// <param name="idx"></param>
/// <param name="originalStr"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static Color GetValue(int idx, string originalStr, Color defaultValue)
{
return DecodeColorBase(GetValue(idx, originalStr), defaultValue);
}
/// <summary>
/// 解析字符串 -- 带有前缀的的字符
/// </summary>
/// <param name="idx">从解析的数据中获取数据的索引</param>
/// <param name="originalStr">0_xxx;1_xxx</param>
/// <returns></returns>
public static string GetValueWithPrefix(int idx, string originalStr, string str = "{0}_")
{
if (string.IsNullOrEmpty(originalStr)) return string.Empty;
string idxStr = string.Format(str, idx);
var arr = originalStr.Split(new char[] { ';', '' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].StartsWith(idxStr))
{
return arr[i].Substring(2, arr[i].Length - 2);
}
}
return string.Empty;
}
/// <summary>
/// 获取带有前缀索引的数值
/// </summary>
/// <param name="idx"></param>
/// <param name="originalStr"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static float GetValueWithPrefix(int idx, string originalStr, float defaultValue, string str = "{0}_")
{
float result = defaultValue;
if (float.TryParse(GetValueWithPrefix(idx, originalStr, str), out result))
{
return result;
}
return defaultValue;
}
/// <summary>
/// 获取带有前缀索引的数值
/// </summary>
/// <param name="idx"></param>
/// <param name="originalStr"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static int GetValueWithPrefix(int idx, string originalStr,int defaultValue, string str = "{0}_")
{
int result = defaultValue;
if (int.TryParse(GetValueWithPrefix(idx, originalStr, str), out result))
{
return result;
}
return defaultValue;
}
/// <summary>
/// 获取带有前缀索引的颜色
/// </summary>
/// <param name="idx"></param>
/// <param name="originalStr"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static Color GetValueWithPrefix(int idx, string originalStr, Color defaultValue)
{
return DecodeColorBase(GetValueWithPrefix(idx, originalStr), defaultValue);
}
/// <summary>
/// 解析格式化颜色
/// </summary>
/// <param name="colorString"> 255;255;255;255或者255,255,255,255 </param>
/// <returns></returns>
public static Color DecodeColorBase(string colorString, Color defaultValue)
{
if (string.IsNullOrEmpty(colorString)) return defaultValue;
var arr = colorString.Split(new char[] { ',', ';', '' }, StringSplitOptions.RemoveEmptyEntries);
if (arr.Length > 2)
{
int tmp = 0;
int.TryParse(arr[0], out tmp);
float r = (float)tmp / 255f;
int.TryParse(arr[1], out tmp);
float g = (float)tmp / 255f;
int.TryParse(arr[2], out tmp);
float b = (float)tmp / 255f;
float a = 1;
if (arr.Length > 3)
{
int.TryParse(arr[3], out tmp);
a = (float)tmp / 255f;
}
return new Color(r, g, b, a);
}
return defaultValue;
}
}
}