+ /// 注意:操作具有一定的危险性,你可以自行制作这个列表对象的拷贝,但注意不要直接对返回的列表对象进行操作。
+ ///
+ ///
+ ///
@@ -139,114 +196,167 @@ namespace XericLibrary.Runtime.MacroLibrary
#endregion
#region 字段属性
+
#if ODIN_INSPECTOR
- [LabelText("单选组")]
+ [LabelText("单选组")]
#endif
public ToggleGroup ToggleGroup;
-#if ODIN_INSPECTOR
- [SerializeField, LabelText("编辑单选项目顺序")] [ListDrawerSettings(OnTitleBarGUI = "GetAndSortToggle")]
+#if ODIN_INSPECTOR
+ [SerializeField, LabelText("编辑单选项目顺序")]
#endif
- private List toggleList = new List();
+ protected List toggleList = new List();
- // 当前选中的项目
- private int _nowSelectToggleIndex = -1;
-
- public Transform TogglesContext => ToggleGroup.transform;
-
- ///
- /// 当前选中的toggle索引,依赖缓存,对于绕过该容器的单选项控制行为可能存在追踪不准确的问题。
- ///
- public int NowSelectToggleIndex => _nowSelectToggleIndex;
-
- ///
- /// 当前激活的toggle索引,直接进行查找而不是依赖当前缓存
- ///
- public int CurrentSelectToggleIndex
+ public List ToggleList
{
get
{
- for (var i = 0; i < toggleList.Count; i++)
- {
- if (!toggleList[i].isOn) continue;
- _nowSelectToggleIndex = i;
- return _nowSelectToggleIndex;
- }
- return -1;
- }
- }
-
- ///
- /// 当前选中的toggle
- ///
- public Toggle NowSelectToggle => toggleList[_nowSelectToggleIndex];
-
- #endregion
-
- #region 编辑器方法
-
- ///
- /// 获取并给列表排序(顺序不一定与拼音有关)
- ///
- public void GetAndSortToggle()
- {
-#if UNITY_EDITOR && ODIN_INSPECTOR
- // 自动获取并排序
- if (SirenixEditorGUI.ToolbarButton(EditorIcons.Refresh))
- {
- GetSortToggle();
- }
- // 反转顺序
- if (SirenixEditorGUI.ToolbarButton(EditorIcons.TriangleDown))
- {
- toggleList.Reverse();
- }
-#else
- GetSortToggle();
+#if UNITY_EDITOR
+ if (!Application.isPlaying)
+ return toggleList;
#endif
- void GetSortToggle()
- {
- var newToggleList = MacroSort.FullCharacterOrderSort(ToggleGroup.GetToggles(), a => a.name)
- .ToList();
- if (newToggleList.Count <= 0 || newToggleList == null)
- Debug.LogError("如果无法更新获取自动排序toggle,可能是因为toggleGroup被隐藏了,手动将其激活后再获取即可。");
- else
- toggleList = newToggleList;
+ if (_mappingDirty)
+ {
+ BakeToggleGroupItems();
+ _mappingDirty = false;
+ }
+
+ if (_noInit)
+ {
+ Initialize();
+ _noInit = false;
+ }
+
+ return toggleList;
}
}
- #endregion
-
- #region 接口
///
/// 获取索引下的单选项组件
///
///
- public Toggle this[int index] => toggleList[index];
+ public Toggle this[int index] => ToggleList[index];
- public int Count => toggleList.Count;
+ public int Count => ToggleList.Count;
- public IEnumerator GetEnumerator()
+ ///
+ /// 直接获取缓存选中索引
+ ///
+ public int CurrentSelectIndex => _nowSelectToggleIndex;
+
+ ///
+ /// 选中项目实例
+ ///
+ public Toggle CurrentSelectToggle => ToggleList[_nowSelectToggleIndex];
+
+ ///
+ /// 允许清空选项的选中状态
+ ///
+ public bool AllowSwitchOff
{
- return toggleList.GetEnumerator();
+ get => ToggleGroup.allowSwitchOff;
+ set => ToggleGroup.allowSwitchOff = value;
}
+
+ // 映射关系脏
+ private bool _mappingDirty = true;
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
+ // 未初始化
+ private bool _noInit = true;
+
+ // 当前选中的项目
+ private int _nowSelectToggleIndex = -1;
#endregion
- #region 初始化 和 增删改查
+ #region 结构更新
///
- /// 初始化
- ///
- /// 自动将所有的按键绑定回调事件;如果作为刷新函数调用,请确保已经完全组索引。
- /// 或者可以直接清空旧项目(CleanToggle),然后逐个添加(AddToggle)
- ///
+ /// 烘焙单选项组
///
+ ///
+ /// 注意不要再这里面使用ToggleList
+ ///
+#if ODIN_INSPECTOR
+ [HorizontalGroup("GetGroup"), Button("GetGroup")]
+#endif
+ public virtual void BakeToggleGroupItems()
+ {
+ if (ToggleGroup == null)
+ {
+ if (toggleList is not { Count: > 0 })
+ {
+ Debug.LogError("未指定单选项目组中的任何引用成员,无法初始化");
+ return;
+ }
+
+ var validToggle = toggleList.FirstOrDefault(a => a.group != null);
+ if (validToggle != null)
+ {
+ ToggleGroup = validToggle.group;
+ Debug.LogWarning("未指定单选项目组中的任何引用成员,但使用成员代偿");
+ }
+ else
+ {
+ Debug.LogError("未指定单选项目组中的任何引用成员,且无法利用成员代偿");
+ return;
+ }
+ }
+
+ List tempToggleList = null;
+#if UNITY_EDITOR
+ if (!Application.isPlaying)
+ {
+ if (!ToggleGroup.gameObject.activeInHierarchy)
+ {
+ var tempParents = ToggleGroup.transform.GetParents()
+ .Select(a => a.GetActivity()).ToList();
+ ToggleGroup.gameObject.SetActivityInHierarchy(true);
+ tempToggleList = ToggleGroup.GetToggles();
+ ToggleGroup.transform.GetParents()
+ .Zip(tempParents, (go, act) => (go, act))
+ .ForEachDo(a => a.go.SetActivity(a.act));
+ if (tempToggleList is not { Count: > 0 })
+ Debug.LogError("无法获取ToggleGroup中的成员,可能由于toggleGroup被隐藏导致其无法初始化");
+ }
+ else
+ tempToggleList = ToggleGroup.GetToggles();
+ }
+ else
+#endif
+ {
+ if (!ToggleGroup.gameObject.activeInHierarchy && toggleList is not { Count: > 0 })
+ Debug.LogError(
+ $"当前运行状态导致无法直接获取ToggleGroup中的成员,且运行时我无法自行决定目标ToggleGroup({ToggleGroup.name})所属生命周期,请提前在编辑器中对相关状态进行烘焙");
+ else
+ tempToggleList = ToggleGroup.GetToggles();
+ }
+ // 需要注意的是,这里不能随意释放掉原来的选项列表
+ if (tempToggleList is { Count: > 0 })
+ toggleList = tempToggleList;
+ }
+#if ODIN_INSPECTOR
+ [HorizontalGroup("GetGroup"), Button("GetGroup(Sort)")]
+#endif
+ public void BakeSortToggelGroupItems()
+ {
+ BakeToggleGroupItems();
+ if (toggleList is not { Count: > 0 })
+ toggleList = MacroSort.FullCharacterOrderSort(toggleList, a => a.name)
+ .ToList();
+ }
+#if ODIN_INSPECTOR
+ [HorizontalGroup("GetGroup"), Button("GetGroup(Reverse Sort)")]
+#endif
+ public void BakeReverseSortToggelGroupItems()
+ {
+ BakeToggleGroupItems();
+ if (toggleList is not { Count: > 0 })
+ toggleList = MacroSort.FullCharacterOrderSort(toggleList, a => a.name)
+ .Reverse()
+ .ToList();
+ }
+
public void Initialize()
{
// 啥也没有,压根没用这部分功能,用不着初始化。
@@ -268,6 +378,7 @@ namespace XericLibrary.Runtime.MacroLibrary
return;
}
}
+
// 防傻
if (ToggleGroup == null)
ToggleGroup = toggleList[0].group;
@@ -277,9 +388,10 @@ namespace XericLibrary.Runtime.MacroLibrary
foreach (var toggle in toggleList)
toggle.group = ToggleGroup;
}
+
// 防空
toggleList = toggleList.Where(a => a != null).ToList();
-
+
// 事件初始化
for (var i = 0; i < toggleList.Count; i++)
{
@@ -294,8 +406,15 @@ namespace XericLibrary.Runtime.MacroLibrary
// 如果不允许为空的情况下还为空,那就默认标记一个
if (!ToggleGroup.allowSwitchOff && _nowSelectToggleIndex < 0)
SetToggleOnWithoutNotify(0);
+
+ _mappingDirty = false;
+ _noInit = false;
}
+ #endregion
+
+ #region 初始化 和 增删改查
+
///
/// 添加一个toggle
///
@@ -305,27 +424,28 @@ namespace XericLibrary.Runtime.MacroLibrary
{
ToggleAddEvent(t);
- var resultIndex = toggleList.Count;
- toggleList.Add(t);
+ var resultIndex = ToggleList.Count;
+ ToggleList.Add(t);
return resultIndex;
}
///
/// 移除一个toggle,这不会影响其他toggle的索引,但此处移除的位置会为空。
///
- /// 注 :这不会销毁toggle。
+ /// 注意mapping管理的toggle在移除后会被清空事件
+ /// 此举这不会销毁toggle。
///
///
///
/// 是否成功移除toggle
public bool RemoveToggle(Toggle t)
{
- var index = toggleList.IndexOf(t);
+ var index = ToggleList.IndexOf(t);
if (index < 0)
return false;
t.onValueChanged.RemoveAllListeners();
- toggleList[index] = null;
+ ToggleList[index] = null;
return true;
}
@@ -335,37 +455,66 @@ namespace XericLibrary.Runtime.MacroLibrary
/// 是否同时销毁所有toggle
public void CleanToggle(bool allowDestroy)
{
- foreach (var t in toggleList)
+ foreach (var t in ToggleList)
{
t.onValueChanged.RemoveAllListeners();
if (allowDestroy)
Object.Destroy(t);
}
- toggleList.Clear();
+ ToggleList.Clear();
}
#endregion
#region 事件流程
-
+
+ ///
+ /// 强制标记映射关系脏,在下次运行时将自动按需更新
+ ///
+ public void SetDirty()
+ {
+ _mappingDirty = true;
+ }
+
+
+ ///
+ /// 查找当前选中实例在列表中的索引位置
+ ///
+ public int CurrentSelectToggleIndex()
+ {
+ for (var i = 0; i < ToggleList.Count; i++)
+ {
+ if (!ToggleList[i].isOn) continue;
+ _nowSelectToggleIndex = i;
+ return _nowSelectToggleIndex;
+ }
+
+ return -1;
+ }
+
+
///
/// toggle注册的事件,只有当按下时才需要调用此事件。
///
///
private void ToggleAddEvent(Toggle t)
{
- t.onValueChanged.AddListener(a =>
+ t.onValueChanged.RemoveListener(Listener);
+ t.onValueChanged.AddListener(Listener);
+ return;
+
+ void Listener(bool b)
{
- if (a) ToggleRegister(t);
- });
+ if (b) ToggleRegister(t);
+ }
}
///
/// toggle注册的事件,只有当按下时才需要调用此事件。
///
///
- private void ToggleRegister(Toggle t)
+ protected virtual void ToggleRegister(Toggle t)
{
_nowSelectToggleIndex = GetIndex(t);
OnAnyToggleSwitchOn?.Invoke(t);
@@ -373,6 +522,8 @@ namespace XericLibrary.Runtime.MacroLibrary
}
+
+
///
/// 获取toggle代表的索引
///
@@ -385,7 +536,8 @@ namespace XericLibrary.Runtime.MacroLibrary
Debug.LogError("无法查询空toggle的索引");
return 0;
}
- var index = toggleList.IndexOf(target);
+
+ var index = ToggleList.IndexOf(target);
if (index >= 0)
return index;
Debug.LogError($"无法查询 {target.name} 在当前单选项组中的索引。");
@@ -400,18 +552,17 @@ namespace XericLibrary.Runtime.MacroLibrary
///
public bool TryGetIndex(Toggle target, out int index)
{
- index = toggleList.IndexOf(target);
+ index = ToggleList.IndexOf(target);
return index >= 0;
}
-
+
///
/// 设置单选项激活
///
///
public void SetToggleOn(Toggle target)
{
- _nowSelectToggleIndex = GetIndex(target);
target.isOn = true;
}
@@ -421,9 +572,9 @@ namespace XericLibrary.Runtime.MacroLibrary
///
public void SetToggleOn(int index)
{
- if (0 < index && index < toggleList.Count)
+ if (0 < index && index < ToggleList.Count)
{
- SetToggleOn(toggleList[index]);
+ SetToggleOn(ToggleList[index]);
}
}
@@ -443,9 +594,9 @@ namespace XericLibrary.Runtime.MacroLibrary
///
public void SetToggleOnWithoutNotify(int index)
{
- if (0 < index && index < toggleList.Count)
+ if (0 < index && index < ToggleList.Count)
{
- SetToggleOnWithoutNotify(toggleList[index]);
+ SetToggleOnWithoutNotify(ToggleList[index]);
}
}
@@ -456,7 +607,7 @@ namespace XericLibrary.Runtime.MacroLibrary
public void Clear()
{
ToggleGroup.RemoveToggleGroupChangeEvent();
- toggleList.Clear();
+ ToggleList.Clear();
}
///
@@ -464,13 +615,49 @@ namespace XericLibrary.Runtime.MacroLibrary
///
public void DestroyAllToggle()
{
- for (int i = toggleList.Count - 1; i >= 0; i--)
+ for (int i = ToggleList.Count - 1; i >= 0; i--)
{
- Object.Destroy(toggleList[i]);
+ Object.Destroy(ToggleList[i]);
}
+
Clear();
}
-
+
+
+ public IEnumerator GetEnumerator()
+ {
+ return ToggleList.GetEnumerator();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ #endregion
+
+ #region 额外方法
+
+ public bool GetActive() => ToggleList.Any(a => a.gameObject.activeSelf);
+
+ public bool GetActiveInHierarchy() => ToggleList.Any(a => a.gameObject.activeInHierarchy);
+
+ public void SetActive(bool active)
+ {
+ ToggleGroup.gameObject.SetActivity(active);
+ ToggleList.ForEachDo(a => a.gameObject.SetActive(active));
+ }
+
+ public void SetActiveInHierarchy(bool active)
+ {
+ ToggleGroup.gameObject.SetActivity(active);
+ ToggleList.ForEachDo(a => a.gameObject.SetActivityInHierarchy(active));
+ }
+
+ #endregion
+
+ #region 过时
+
///
/// 清除映射结构,并销毁所有toggle组件
///
@@ -478,28 +665,19 @@ namespace XericLibrary.Runtime.MacroLibrary
public void RemoveAllToggle()
=> DestroyAllToggle();
+ ///
+ /// 当前选中的toggle索引,依赖缓存,对于绕过该容器的单选项控制行为可能存在追踪不准确的问题。
+ ///
+ [Obsolete("命名过时")]
+ public int NowSelectToggleIndex => CurrentSelectIndex;
+
+ ///
+ /// 当前选中的toggle
+ ///
+ [Obsolete("命名规范过时")]
+ public Toggle NowSelectToggle => CurrentSelectToggle;
+
#endregion
-
- #region 额外方法
-
- public bool GetActive() => toggleList.Any(a => a.gameObject.activeSelf);
-
- public bool GetActiveInHierarchy() => toggleList.Any(a => a.gameObject.activeInHierarchy);
-
- public void SetActive(bool active)
- {
- ToggleGroup.gameObject.SetActivity(active);
- toggleList.ForEachDo(a => a.gameObject.SetActive(active));
- }
-
- public void SetActiveInHierarchy(bool active)
- {
- ToggleGroup.gameObject.SetActivity(active);
- toggleList.ForEachDo(a => a.gameObject.SetActivityInHierarchy(active));
- }
-
- #endregion
-
}
#endregion
diff --git a/Runtime/XericLibrary.dll b/Runtime/XericLibrary.dll
index 18deb3257bdb849563838212cab2ac1fba230001..24436d2dba375d4ebf1cd2861fb68871e188a076 100644
GIT binary patch
literal 759296
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