版本更新,修复部分文本包裹器处理过程中可能遇到的下标错误的问题。

添加一些列表用法,如迭代直到……和直到……迭代
This commit is contained in:
2025-08-25 14:55:35 +08:00
parent 4c3f840141
commit 7ad6555795
7 changed files with 289 additions and 25 deletions
@@ -43,6 +43,13 @@ namespace Deconstruction.UI.TmpText
/// </summary>
private Dictionary<string, Action> _linkCallbacks = new Dictionary<string, Action>();
#if UNITY_EDITOR
protected void OnValidate()
{
canvas = GetComponentInParent<Canvas>();
}
#endif
protected void Awake()
{
if (canvas == null)
+21 -5
View File
@@ -5,6 +5,7 @@ using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.Serialization;
using XericLibrary.Runtime.MacroLibrary;
namespace Deconstruction.UI.TmpText
@@ -17,6 +18,8 @@ namespace Deconstruction.UI.TmpText
{
private TextMeshProUGUI _tmpText;
public bool autoFixRayCastTargetState = true;
#if ODIN_INSPECTOR
[LabelText("超链接管理器*")]
#endif
@@ -56,17 +59,30 @@ namespace Deconstruction.UI.TmpText
yield return link;
}
}
private void Awake()
#if UNITY_EDITOR
protected void OnValidate()
{
_tmpText = GetComponent<TextMeshProUGUI>();
}
#endif
protected virtual void Awake()
{
if (_tmpText == null)
_tmpText = GetComponent<TextMeshProUGUI>();
if (manager == null)
transform.GetParents().Startup(transform).GetComponent(out manager);
if (manager == null)
throw new Exception("TMP文本超链接集成捕获组件必须放在具有管理器的父级下");
}
protected virtual void OnEnable()
{
if (autoFixRayCastTargetState)
_tmpText.raycastTarget = true;
}
public void OnPointerClick(PointerEventData eventData)
{
ClickPoint(eventData.position);
@@ -87,7 +103,7 @@ namespace Deconstruction.UI.TmpText
}
catch (Exception e)
{
Debug.LogError($"点击 {_tmpText.text.LimitStringLength(32)} 的超链接 {linkID} 时出错:\n{e.Message}\n{e.Data}", this);
Debug.LogError($"超链接目标事件存在错误 {_tmpText.text.LimitStringLength(32)} :\n{e.Message}\n{e.Data}", this);
}
}
}
Binary file not shown.
+246 -17
View File
@@ -934,6 +934,11 @@
游戏方法调用标记类型
</summary>
</member>
<member name="T:XericLibrary.Runtime.CustomEditor.MacroMonoAttribute.AutoFindComponent">
<summary>
自动查找组件
</summary>
</member>
<member name="T:XericLibrary.Runtime.CustomEditor.MenuAttribute.CusMeAttribute">
<summary>
自定义菜单特性。
@@ -3491,6 +3496,24 @@
<param name="values">当目标枚举不实现Flags时,需要进行完全匹配</param>
<returns>返回是否存在至少有一个有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum,System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum,System.Enum[])">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumGreater1(System.Enum)">
<summary>
枚举1有效
@@ -3539,18 +3562,6 @@
</summary>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum,System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.FisherYatesShuffle(System.Int32,System.Int32)">
<summary>
Fisher-Yates洗牌算法,时间复杂度为O(n*n),空间复杂度为O(n);
@@ -3662,6 +3673,113 @@
<param name="interpolationSyntax">内插语法,表示此foreachdo不会作为执行器运行,而是作为其中一步执行</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.Repeat``1(System.Collections.Generic.IEnumerable{``0},System.Int32)">
<summary>
重复枚举器中的每个对象
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="repeatEachCount"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.Repeat``1(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,System.Int32}})">
<summary>
重复枚举器中的每个对象
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="repeatEachCount"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilTrue``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
迭代直到真状态
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilFalse``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
迭代直到假状态
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
迭代直到相等
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="target"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilNotEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
迭代直到不相等
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="target"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterTure``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
从首个条件为真的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterFalse``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
从首个条件为假的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
从首个相等的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterNotEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
从首个不等的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilEndOfTime``1(System.Collections.Generic.IEnumerable{``0},System.Int32)">
<summary>
迭代直到计数超出
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="count"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.IndexOf``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean})">
<summary>
在枚举器中定位到首个当equals结果为真的项目索引
@@ -3767,7 +3885,7 @@
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.Merge``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``0,``0})">
<summary>
将枚举器成员合并为一个结果
将枚举器成员合并为一个结果(比如用这个方法计算加法?)
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
@@ -4128,6 +4246,15 @@
<param name="target"></param>
<param name="index"></param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.SetAtIndex``1(System.Collections.Generic.IList{``0},``0,System.Int32)">
<summary>
在列表的指定位置添加目标,如果中间为空,则会填充空
</summary>
<typeparam name="T"></typeparam>
<param name="targetList"></param>
<param name="target"></param>
<param name="index"></param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.TryDoAtIndex``1(System.Collections.Generic.IList{``0},System.Int32,System.Action{``0})">
<summary>
尝试给定索引处做些什么,如果索引或项目无效,则不执行(这是获取语句,空项目也不会执行)
@@ -4186,6 +4313,17 @@
<param name="addition">添加成员(从源数组末尾开始添加)</param>
<param name="replaceAt">替换成员(如果为空,则不会检查数组成员差异)</param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.DiscrepancyOrder``1(System.Collections.Generic.IList{``0},System.Int32,System.Action{System.Int32},System.Action{System.Int32},System.Action{System.Int32})">
<summary>
比较这个列表的数量与目标数量的差异,
</summary>
<typeparam name="T"></typeparam>
<param name="origin"></param>
<param name="count"></param>
<param name="removeAt"></param>
<param name="addition"></param>
<param name="replaceAt"></param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.TryGetAtIndex``1(System.Collections.Generic.IList{``0},System.Int32,``0@)">
<summary>
尝试从列表中读取,如果项目为空,则先填充空,然后再获取
@@ -4453,6 +4591,15 @@
<param name="seed"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.RandomBoolean(System.Int32,System.Single,System.Int32)">
<summary>
获取在概率分布中的随机布尔值(如果需要非绝对概率随机,请移步洗牌算法)
</summary>
<param name="probability">概率基数</param>
<param name="percent">百分比(≤1)</param>
<param name="seed"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.GetNextRand(System.Random,System.Int32,System.Int32)">
<summary>
统一的单维随机数获取
@@ -5612,12 +5759,12 @@
值
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.min">
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.minValid">
<summary>
最小值
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.max">
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.maxValid">
<summary>
最大值
</summary>
@@ -5642,6 +5789,18 @@
无效时展示
</summary>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.#ctor(System.Double,System.Double,System.Double,System.String,System.String,System.Boolean,System.String)">
<summary>
值包裹器
</summary>
<param name="defaultValue"></param>
<param name="minValid"></param>
<param name="maxValid"></param>
<param name="name"></param>
<param name="format"></param>
<param name="enableInvalidValue"></param>
<param name="invalidString"></param>
</member>
<member name="T:XericLibrary.Runtime.MacroLibrary.MacroMath.ValueExpressionBlock">
<summary>
值表达式包裹器(没有子项,不计数)
@@ -5699,6 +5858,19 @@
<param name="mode"></param>
<param name="expression"></param>
</member>
<member name="T:XericLibrary.Runtime.MacroLibrary.MacroMath.ConditionBlock">
<summary>
条件包裹器
</summary>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.ConditionBlock.SetParamter(System.Int32,System.Object[])">
<summary>
设置参数
</summary>
<param name="startIndex">参数起点索引</param>
<param name="parameters">所有参数</param>
<returns>返回使用了多少参数</returns>
</member>
<member name="T:XericLibrary.Runtime.MacroLibrary.MacroMath.AlignBlock">
<summary>
对齐
@@ -6158,6 +6330,53 @@
<param name="dis">当前返回的最优单词的编辑距离</param>
<returns>当前最优的单词</returns>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.Contain">
<summary>
右值为左值的一部分时为包含
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.Belong">
<summary>
左值为右值的一部分时为属于
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.ImpactSpace">
<summary>
文本比较时考虑空格
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.ExactlyEquivalen">
<summary>
两者完全相等
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.EquivalentButIgnoreSpace">
<summary>
忽略空格
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.EquivalentButIgnoreCase">
<summary>
忽略空格,大小写
</summary>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.IsEquals(System.String,System.String,XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode)">
<summary>
判断两个文本是否相等
</summary>
<param name="lhs"></param>
<param name="rhs"></param>
<param name="mode">判断模式</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.ProcessString(System.String,XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode)">
<summary>
预处理字符串(应用所有模式规则)
</summary>
<param name="str"></param>
<param name="mode"></param>
<returns></returns>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.DayPerYear">
<summary>
一年有多少天
@@ -12567,8 +12786,8 @@
<summary>
可以直接获取一些没有空的类的空对象
<code>
与直接使用default不同的是,这里会尝试创建一个空示例,这对于使用
与直接使用default不同的是,这里会尝试创建一个空示例
(可能存在性能或aot问题,可能还是建议在各个类自身里编写空对象。)
</code>
</summary>
<typeparam name="T"></typeparam>
@@ -12740,6 +12959,11 @@
当前时刻
</summary>
</member>
<member name="F:XericLibrary.Runtime.Type.Base.TimingStamp.Today">
<summary>
当天的起始时刻
</summary>
</member>
<member name="F:XericLibrary.Runtime.Type.Base.TimingStamp.tickTime">
<summary>
时间节点
@@ -14128,6 +14352,11 @@
先导事件(如果MONO不允许启动Awake,先导事件仍会触发)
</summary>
</member>
<member name="T:XericLibrary.Runtime.Type.Weakly.MacroMonoBehaviour">
<summary>
原生支持各种宏用法的mono脚本
</summary>
</member>
<member name="T:XericLibrary.Runtime.Type.Weakly.XericSeriousMonoBehaviour">
<summary>
严格模式脚本