Files
JJBB/Assets/Project/Script/GUI/Base/UIContainerMultiSelect.cs
2024-08-23 15:49:34 +08:00

146 lines
4.1 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.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIContainerMultiSelect : UIContainerSelect {
public int multiSelectNum = -1; // 多选的情况下,最多可选择数量,默认-1表示可无限多选
public UIItemMultiSelect curHightLight; // 当前高亮选中Item。
public override void OnSelectedObj(object obj)
{
ContentPos selectPos = _ValueList.Find((pos) =>
{
if (pos.Obj == obj)
return true;
return false;
});
if (selectPos == null)
return;
if (!((UIItemMultiSelect)selectPos.ShowItem).IsCanSelect())
return;
if (curHightLight != null)
{
curHightLight.UnSelected();
((UIItemMultiSelect)selectPos.ShowItem).Selected();
curHightLight = (UIItemMultiSelect)selectPos.ShowItem;
}
else
{
if (_Selecteds.Count != 0)
{
((UIItemMultiSelect)_Selecteds[0].ShowItem).UnSelected();
}
((UIItemMultiSelect)selectPos.ShowItem).Selected();
curHightLight = (UIItemMultiSelect)selectPos.ShowItem;
}
if (_IsMultiSelect)
{
if (_Selecteds.Contains(selectPos))
{
((UIItemMultiSelect)selectPos.ShowItem).UnAdd();
_Selecteds.Remove(selectPos);
}
else
{
// 当不存在时,仅当多选数目没到上限时,添加
if (_Selecteds.Count < multiSelectNum)
{
((UIItemMultiSelect)selectPos.ShowItem).Add();
_Selecteds.Add(selectPos);
}
// 优化当多选数目设置为1个时点击其他视作替换
else if (multiSelectNum == 1)
{
((UIItemMultiSelect)_Selecteds[0].ShowItem).UnAdd();
_Selecteds.RemoveAt(0);
((UIItemMultiSelect)selectPos.ShowItem).Add();
_Selecteds.Add(selectPos);
}
}
if (_SelectedCallBack != null)
{
_SelectedCallBack(selectPos.Obj);
}
}
else
{
if (!_Selecteds.Contains(selectPos))
{
_Selecteds.Clear();
_Selecteds.Add(selectPos);
}
}
if (_SelectedCallBack != null && _Selecteds.Contains(selectPos) && !_IsMultiSelect)
{
_SelectedCallBack(obj);
return;
}
if (_DisSelectedCallBack != null && !_Selecteds.Contains(selectPos) && !_IsMultiSelect)
{
_DisSelectedCallBack(obj);
return;
}
}
public override void InitSelectContent(IEnumerable list, IEnumerable selectedList, SelectedObjCallBack onSelect = null, SelectedObjCallBack onDisSelect = null, Hashtable exhash = null)
{
foreach (ContentPos item in _Selecteds)
{
if (item.ShowItem != null)
{
((UIItemMultiSelect)item.ShowItem).UnSelected();
((UIItemMultiSelect)item.ShowItem).UnAdd();
}
}
curHightLight = null;
_SelectedCallBack = onSelect;
_DisSelectedCallBack = onDisSelect;
gameObject.SetActive(true);
_SelectedList = selectedList;
base.InitContentItem(list, OnSelectedObj, exhash);
ShowItems();
}
public override List<T> GetSelecteds<T>()
{
List<T> selectedObjs = new List<T>();
if (_IsMultiSelect == false)
{
if (_Selecteds.Count > 0)
{
selectedObjs.Add((T)_Selecteds[0].Obj);
}
}
else
{
for (int i = 0; i < multiSelectNum && i < _Selecteds.Count; ++i)
{
if (_Selecteds[i].Obj == null)
{
break;
}
selectedObjs.Add((T)_Selecteds[i].Obj);
}
}
return selectedObjs;
}
}