Main/Assets/Code/Logic/_Helper/DeclareDataUtils.cs
2025-01-25 04:38:09 +08:00

174 lines
6.0 KiB
C#
Raw Permalink 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 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;
}
}
}