This repository has been archived on 2025-09-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
XericLibrary-OLD/Runtime/MicroLibrary/MacroString.cs
LiRuoChen a658cc424b 添加了更多的材质函数,部分与引擎新特性重合,这是为了能够脱离引擎在多个版本中更具可移植性。
添加了多种对程序流程控制与保全的脚本,而且现在可以更快速的构建一个具有线性关系的协程了。
  添加了一个支持多种模式的单维梯度控制器,类似unity的颜色梯度类型。
  添加了一个用于看向某个物体的旋转控制器。
  添加了一个加载宏。
  完善了批处理脚本流程。
2023-11-23 11:10:40 +08:00

185 lines
4.5 KiB
C#
Raw 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;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.CompilerServices;
using UnityEngine;
namespace XericLibrary.Runtime.MacroLibrary
{
public static partial class MacroMath
{
#region
/// <summary>
/// 获取此处的物体名称如果带有clone后缀则省略这个后缀
/// </summary>
[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetGameObjectNameWithoutClone(GameObject gameObject)
{
return GetGameObjectNameWithoutClone(gameObject.name);
}
/// <summary>
/// 获取此处的物体名称如果带有clone后缀则省略这个后缀
/// </summary>
[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetGameObjectNameWithoutClone(string gameObjectName)
{
const string cloneSuffix = "(Clone)";
if(gameObjectName.EndsWith(cloneSuffix))
{
int suffixIndex = gameObjectName.LastIndexOf(cloneSuffix);
string nameWithoutClone = gameObjectName.Substring(0, suffixIndex);
return nameWithoutClone;
}
return gameObjectName;
}
#endregion
#region
/// <summary>
/// 将一个数值四舍五入后转为一个文本并保留特定的小数点位如果这个小数位为0则省略不写
/// </summary>
/// <param name="value"></param>
/// <param name="decimals">目标小数位</param>
/// <returns></returns>
public static string RoundToString(this double value, int decimals)
{
if(value == 0)
return "0";
return Math.Round(value, decimals).ToString();
}
public static string RoundToString(this float value, int decimals)
{
return ((double)value).RoundToString(decimals);
}
#endregion
#region
#if false
/// <summary>
/// 将一个数值转为中文小写格式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string NumberToChinese_Format(int number)
{
CultureInfo cultureInfo = new CultureInfo("zh-CN");
// 使用文化信息中的数字格式来将数字转换为中文
return string.Format(cultureInfo, "{0:R}", number);
// 遗憾的是会报R无效
}
#endif
private static readonly string[] chineseNumber = new string[]
{"零","一","二","三","四","五","六","七","八","九"};
private static readonly string[] chineseDigit = new string[]
{ "","十","百","千","万","十","百","千","亿","十","百","千","亿"};
private static readonly string[] chineseNumber_ComplexFont = new string[]
{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private static readonly string[] chineseDigit_ComplexFont = new string[]
{ "","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","亿"};
/// <summary>
/// 将一个数值转为中文小写格式;
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
private static string NumberToChinese(int number, out bool needFillZero, int digit = 0)
{
needFillZero = false;
// 取消输出最高位的零
if(number == 0)
return "";
// 高位拼接一个当前位
if(number > 0)
{
int digitNumber = number % 10;
var result = NumberToChinese(number / 10, out var fillZero, digit + 1);
// 此处为零,后续可能需要填充一个零
needFillZero = digitNumber == 0;
// 如果此处为零,则等待低位处理填充
var proclitic =
needFillZero ? "" : (fillZero ? chineseNumber[0] : "") + chineseNumber[digitNumber] + chineseDigit[digit] ;
return result + proclitic;
}
// 输出最高位
return chineseNumber[number] + chineseDigit[digit];
}
/// <summary>
/// 将一个数值转为中文小写格式,并确保读写格式满足日常使用;
/// 比如 510会读成五百一十9009会读成九千零九
/// 最大支持到九千亿,理论上并不是它的极限,只要继续套格式即可。
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string NumberToChinese(int number)
{
string guide = "";
// 如果为零直接输出因为单个0没法读
if(number == 0)
return chineseNumber[0];
// 如果为负就在前面加上负
if(number < 0)
guide = "负";
string result;
// 特殊处理
switch(number)
{
case 10:
result = "十";
break;
case 11:
result = "十一";
break;
case 12:
result = "十二";
break;
case 13:
result = "十三";
break;
case 14:
result = "十四";
break;
case 15:
result = "十五";
break;
case 16:
result = "十六";
break;
case 17:
result = "十七";
break;
case 18:
result = "十八";
break;
case 19:
result = "十九";
break;
default:
result = NumberToChinese(Mathf.Abs(number), out var zero);
break;
}
// 合并格式化
return guide + result;
}
#endregion
}
}