update 0.5.5

This commit is contained in:
2025-11-10 11:53:03 +08:00
parent a220320465
commit 568239ec4c
11 changed files with 2837 additions and 1971 deletions

View File

@@ -1,5 +1,35 @@
# Changelog # Changelog
## [Unrealse]
## [0.5.4] - 2025-10-13
新版软接口:
* 新增了对方法的识别,现在可以使用多种预设的接口模式,仅凭一个名称就调用到任意位置的方法!但是如果软接口执行失败,会直接抛出错误,不会隐式返回了。
UI库:
* 添加了关于全部复位状态的控制。
文本包裹器:
* 优化了在设置静态文本包裹器的参数时,可能会频繁执行装拆箱操作的问题。
* 添加了一个包裹器工具集可以避免在声明时使用大量的new语法并加入对象池控制不管它对性能是否有所提升都可以堵住那些不愿意写大量new的人的嘴。
* 添加了更多语法糖。
对象池宏:
* 添加一种特殊的对象池。
新增布尔库:
* 添加通过布尔切换执行委托的方法
编译程序更新:
* 加入对命令行的支持,通过命令行参数控制编译
修复
* 修复超级单例如果声名为了一个非自封闭的单例类,并调用绝对自身,期望获得隐式声名的嵌套类时,会无限创建实例的问题。
* 修复文本包裹器中对于常规数值类型的转换太有限的问题。
* 修复 XericRectSplinePath 在添加项目后界面坍塌的问题。
## [0.5.3] - 2025-09-26 ## [0.5.3] - 2025-09-26
添加一个大顶堆数据容器XericLibrary.Runtime.Type.SpatialAlgorithm.MaxHeap 添加一个大顶堆数据容器XericLibrary.Runtime.Type.SpatialAlgorithm.MaxHeap

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -134,16 +134,16 @@ namespace XericLibrary.Runtime.MacroLibrary
#region #region
public Action<Toggle, T> OnAnyToggleValueSwitchOn; public Action<Toggle, T> OnAnyToggleValueSwitchOn;
#endregion #endregion
#region #region
#if ODIN_INSPECTOR #if ODIN_INSPECTOR
[SerializeField, LabelText("编辑单选项目值")] [SerializeField, LabelText("编辑单选项目值")]
#endif #endif
private List<T> toggleValue; private List<T> toggleValue;
#endregion #endregion
public override void BakeToggleGroupItems() public override void BakeToggleGroupItems()
@@ -163,15 +163,15 @@ namespace XericLibrary.Runtime.MacroLibrary
return default; return default;
return toggleValue[index]; return toggleValue[index];
} }
protected override void ToggleRegister(Toggle t) protected override void ToggleRegister(Toggle t)
{ {
base.ToggleRegister(t); base.ToggleRegister(t);
OnAnyToggleValueSwitchOn?.Invoke(t, GetValueByIndex(GetIndex(t))); OnAnyToggleValueSwitchOn?.Invoke(t, GetValueByIndex(GetIndex(t)));
} }
} }
/// <summary> /// <summary>
/// toggle映射集 /// toggle映射集
/// <code> /// <code>
@@ -208,7 +208,7 @@ namespace XericLibrary.Runtime.MacroLibrary
protected List<Toggle> toggleList = new List<Toggle>(); protected List<Toggle> toggleList = new List<Toggle>();
protected bool ToggleListInvalid => toggleList is not { Count: > 0 }; protected bool ToggleListInvalid => toggleList is not { Count: > 0 };
public List<Toggle> ToggleList public List<Toggle> ToggleList
{ {
get get
@@ -250,7 +250,9 @@ namespace XericLibrary.Runtime.MacroLibrary
/// <summary> /// <summary>
/// 选中项目实例 /// 选中项目实例
/// </summary> /// </summary>
public Toggle CurrentSelectToggle => ToggleList[_nowSelectToggleIndex]; public Toggle CurrentSelectToggle => _nowSelectToggleIndex < 0 || _nowSelectToggleIndex > ToggleList.Count
? null
: ToggleList[_nowSelectToggleIndex];
/// <summary> /// <summary>
/// 允许清空选项的选中状态 /// 允许清空选项的选中状态
@@ -260,7 +262,7 @@ namespace XericLibrary.Runtime.MacroLibrary
get => ToggleGroup.allowSwitchOff; get => ToggleGroup.allowSwitchOff;
set => ToggleGroup.allowSwitchOff = value; set => ToggleGroup.allowSwitchOff = value;
} }
// 映射关系脏 // 映射关系脏
private bool _mappingDirty = false; private bool _mappingDirty = false;
@@ -270,6 +272,9 @@ namespace XericLibrary.Runtime.MacroLibrary
// 当前选中的项目 // 当前选中的项目
private int _nowSelectToggleIndex = -1; private int _nowSelectToggleIndex = -1;
// 在任意选项选中时复位允许反选toggle的功能
private bool _resetAllowToggleOffAtAnyIsOn;
#endregion #endregion
#region #region
@@ -334,6 +339,7 @@ namespace XericLibrary.Runtime.MacroLibrary
else else
tempToggleList = ToggleGroup.GetToggles(); tempToggleList = ToggleGroup.GetToggles();
} }
// 需要注意的是,这里不能随意释放掉原来的选项列表 // 需要注意的是,这里不能随意释放掉原来的选项列表
if (tempToggleList is { Count: > 0 }) if (tempToggleList is { Count: > 0 })
toggleList = tempToggleList; toggleList = tempToggleList;
@@ -360,18 +366,22 @@ namespace XericLibrary.Runtime.MacroLibrary
.ToList(); .ToList();
} }
#if ODIN_INSPECTOR #if ODIN_INSPECTOR
[HorizontalGroup("GetGroup"), Button("SaveGroup")] [HorizontalGroup("GetGroup"), Button("SaveGroup")] [DisableInEditorMode]
#endif #endif
[Obsolete("正常流程单选项组中的标签已经呈现了必要对象,无需重新设置")]
public void SetToggelGroupItems() public void SetToggelGroupItems()
{ {
if (!ToggleGroup.gameObject.activeInHierarchy)
{
Debug.LogWarning("编组尚未激活,成员与实际可能存在差异。");
return;
}
var realToggleGroup = ToggleGroup.GetToggles(); var realToggleGroup = ToggleGroup.GetToggles();
if (ToggleListInvalid || toggleList.Count != realToggleGroup.Count) if (ToggleListInvalid || toggleList.Count != realToggleGroup.Count)
{ {
Debug.LogError("编组无效,或编组成员与实际不符"); Debug.LogError("编组无效,或编组成员与实际不符");
return; return;
} }
realToggleGroup.Clear();
realToggleGroup.AddRange(toggleList);
Debug.Log("编组设置成功"); Debug.Log("编组设置成功");
} }
@@ -427,7 +437,7 @@ namespace XericLibrary.Runtime.MacroLibrary
if (_noInit) if (_noInit)
SetToggelGroupItems(); SetToggelGroupItems();
_mappingDirty = false; _mappingDirty = false;
_noInit = false; _noInit = false;
} }
@@ -537,14 +547,13 @@ namespace XericLibrary.Runtime.MacroLibrary
/// <param name="t"></param> /// <param name="t"></param>
protected virtual void ToggleRegister(Toggle t) protected virtual void ToggleRegister(Toggle t)
{ {
TryResetToggleGroupAutoOff();
_nowSelectToggleIndex = GetIndex(t); _nowSelectToggleIndex = GetIndex(t);
OnAnyToggleSwitchOn?.Invoke(t); OnAnyToggleSwitchOn?.Invoke(t);
OnAnyToggleIndexSwitchOn?.Invoke(_nowSelectToggleIndex); OnAnyToggleIndexSwitchOn?.Invoke(_nowSelectToggleIndex);
} }
/// <summary> /// <summary>
/// 获取toggle代表的索引 /// 获取toggle代表的索引
/// </summary> /// </summary>
@@ -585,6 +594,7 @@ namespace XericLibrary.Runtime.MacroLibrary
public void SetToggleOn(Toggle target) public void SetToggleOn(Toggle target)
{ {
target.isOn = true; target.isOn = true;
TryResetToggleGroupAutoOff();
} }
/// <summary> /// <summary>
@@ -606,6 +616,7 @@ namespace XericLibrary.Runtime.MacroLibrary
public void SetToggleOnWithoutNotify(Toggle target) public void SetToggleOnWithoutNotify(Toggle target)
{ {
_nowSelectToggleIndex = GetIndex(target); _nowSelectToggleIndex = GetIndex(target);
TryResetToggleGroupAutoOff();
target.SetIsOnWithoutNotify(true); target.SetIsOnWithoutNotify(true);
} }
@@ -615,13 +626,48 @@ namespace XericLibrary.Runtime.MacroLibrary
/// <param name="index"></param> /// <param name="index"></param>
public void SetToggleOnWithoutNotify(int index) public void SetToggleOnWithoutNotify(int index)
{ {
if (0 < index && index < ToggleList.Count) if (0 <= index && index < ToggleList.Count)
{ {
SetToggleOnWithoutNotify(ToggleList[index]); SetToggleOnWithoutNotify(ToggleList[index]);
} }
} }
/// <summary>
/// 将整个单选项组复位,这同时会标记单选项组上的允许取消操作。
/// 在下次选中标签时,会自动复位这个标记,确保全部反选的状态仅出现一次。
/// </summary>
#if ODIN_INSPECTOR
[Button("ResetAllToggleOff")]
#endif
public void ResetGroupAllToggleOff()
{
_nowSelectToggleIndex = -1;
if (ToggleGroup == null)
{
Debug.LogError("单选项组不存在...");
}
if (!ToggleGroup.allowSwitchOff)
{
_resetAllowToggleOffAtAnyIsOn = true;
ToggleGroup.allowSwitchOff = true;
}
ToggleList.ForEachDo(a => a.SetIsOnWithoutNotify(false));
}
/// <summary>
/// 如果此次按下是发生在全部反选之后的首次操作,那么关闭允许关闭的操作。
/// </summary>
private void TryResetToggleGroupAutoOff()
{
if (_resetAllowToggleOffAtAnyIsOn)
{
_resetAllowToggleOffAtAnyIsOn = false;
ToggleGroup.allowSwitchOff = false;
}
}
/// <summary> /// <summary>
/// 清除映射结构(不会清除toggle实例) /// 清除映射结构(不会清除toggle实例)
/// </summary> /// </summary>
@@ -643,7 +689,7 @@ namespace XericLibrary.Runtime.MacroLibrary
Clear(); Clear();
} }
public IEnumerator<Toggle> GetEnumerator() public IEnumerator<Toggle> GetEnumerator()
{ {

View File

@@ -211,6 +211,10 @@ namespace Deconstruction.UI.TmpText
/// <param name="requirementHyperlink">强制给带有link标记的对象加上超链接组件</param> /// <param name="requirementHyperlink">强制给带有link标记的对象加上超链接组件</param>
/// <param name="includeRepeatedMarking">是否包含重复引用的链接(是否包含当前超链接管理器下其他超链接管理器作用域下的超链接对象)</param> /// <param name="includeRepeatedMarking">是否包含重复引用的链接(是否包含当前超链接管理器下其他超链接管理器作用域下的超链接对象)</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>
/// 这个操作会扫描所有对象,然后在具有超链接特征的文本组件上生成超链接管理器。
/// 超链接响应的前提是开启 Raycast Target 选项。
/// </remarks>
public List<TMPHyperlinkReceiver> GetChildrenTmpText2Hyperlink( public List<TMPHyperlinkReceiver> GetChildrenTmpText2Hyperlink(
bool forceRefesh = false, bool forceRefesh = false,
bool requirementHyperlink = true, bool requirementHyperlink = true,
@@ -256,6 +260,9 @@ namespace Deconstruction.UI.TmpText
return result; return result;
} }
/// <summary>
/// 直接刷新所有超链接
/// </summary>
#if ODIN_INSPECTOR #if ODIN_INSPECTOR
[Button] [Button]
#endif #endif

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long