完成快速选中相关内容

This commit is contained in:
2025-11-19 23:46:22 +08:00
parent dcd61c1a88
commit 4ac44848aa
13 changed files with 125 additions and 61 deletions

View File

@@ -34,6 +34,8 @@ namespace NBF.Fishing2
} }
} }
#region
public List<ItemInfo> GetItemsByType(ItemType itemType) public List<ItemInfo> GetItemsByType(ItemType itemType)
{ {
return Items.Where(item => item.ItemType == itemType).ToList(); return Items.Where(item => item.ItemType == itemType).ToList();
@@ -62,6 +64,33 @@ namespace NBF.Fishing2
return dic; return dic;
} }
public List<object> GetItemListData(params ItemType[] itemTypes)
{
var dic = GetItemsByType();
if (itemTypes == null || itemTypes.Length == 0)
{
itemTypes = new ItemType[] { ItemType.Rod, ItemType.Bobber, ItemType.Reel };
}
List<object> items = new List<object>();
foreach (var (type, list) in dic)
{
if (!itemTypes.Contains(type)) continue;
var typeItem = new ClassifyListTitleData()
{
Title = type.ToString()
};
items.Add(typeItem);
items.AddRange(list);
}
return items;
}
#endregion
public List<ItemInfo> GetBindItems(long itemId) public List<ItemInfo> GetBindItems(long itemId)
{ {
List<ItemInfo> ret = new List<ItemInfo>(); List<ItemInfo> ret = new List<ItemInfo>();

View File

@@ -89,7 +89,7 @@ namespace NBF
UIConfig.verticalScrollBar = "ui://6hgkvlauoomej"; UIConfig.verticalScrollBar = "ui://6hgkvlauoomej";
UIConfig.defaultFont = "AlibabaPuHuiTi-3-Medium"; UIConfig.defaultFont = "AlibabaPuHuiTi-3-Medium";
App.UI.SetUILanguage<UILangeageConfig>(); App.UI.SetUILanguage<UILangeageConfig>();
UIConfig.modalLayerColor = new Color(0, 0, 0, 0.9f); UIConfig.modalLayerColor = new Color(0, 0, 0, 0.99f);
AddUIPackages(); AddUIPackages();
} }

View File

@@ -19,6 +19,7 @@ namespace NBF
private void OnInited() private void OnInited()
{ {
onDragStart.Add(DragStart); onDragStart.Add(DragStart);
// Oncl
} }

View File

@@ -18,12 +18,12 @@ namespace NBF
public GImage back; public GImage back;
[AutoFind(Name = "box")] [AutoFind(Name = "box")]
public GImage box; public GImage box;
[AutoFind(Name = "List")]
public GList List;
[AutoFind(Name = "BtnCancel")] [AutoFind(Name = "BtnCancel")]
public BtnTitleInputControl BtnCancel; public BtnTitleInputControl BtnCancel;
[AutoFind(Name = "BtnConfirm")] [AutoFind(Name = "BtnConfirm")]
public BtnTitleInputControl BtnConfirm; public BtnTitleInputControl BtnConfirm;
[AutoFind(Name = "List")]
public ClassifyList List;
public override string[] GetDependPackages(){ return new string[] {"Common"}; } public override string[] GetDependPackages(){ return new string[] {"Common"}; }
public static void Show(object param = null){ App.UI.OpenUI<BagSelectPanel>(param); } public static void Show(object param = null){ App.UI.OpenUI<BagSelectPanel>(param); }

View File

@@ -15,26 +15,46 @@ namespace NBF
{ {
//context.data //context.data
private static Action<long> _selectCallBack; private static Action<long> _selectCallBack;
private static ItemType _itemType;
private List<ItemInfo> _items;
public static void Show(ItemType itemType, Action<long> callBack) // private static ItemType _itemType;
private static readonly List<ItemType> _itemTypes = new List<ItemType>();
private long _selectedId;
// private List<ItemInfo> _items;
// public static void Show(ItemType itemType, Action<long> callBack)
// {
// Show(new[] { itemType }, callBack);
// }
public static void Show(Action<long> callBack, params ItemType[] itemTypes)
{ {
_itemType = itemType; _itemTypes.Clear();
_itemTypes.AddRange(itemTypes);
_selectCallBack = callBack; _selectCallBack = callBack;
// List
Show(); Show();
} }
protected override void OnInit() protected override void OnInit()
{ {
IsModal = true;
this.AutoAddClick(OnClick); this.AutoAddClick(OnClick);
List.OnDoubleClickItem += OnDoubleClickItem;
List.OnClickItem += OnClickItem;
} }
protected override void OnShow() protected override void OnShow()
{ {
_selectedId = 0;
SetList(); SetList();
} }
protected override void OnDestroy()
{
List.OnClickItem -= OnClickItem;
List.OnDoubleClickItem -= OnDoubleClickItem;
}
private void OnClick(GComponent btn) private void OnClick(GComponent btn)
{ {
if (btn == BtnCancel) if (btn == BtnCancel)
@@ -43,12 +63,29 @@ namespace NBF
} }
else if (btn == BtnConfirm) else if (btn == BtnConfirm)
{ {
var selectIndex = List.selectedIndex; if (_selectedId > 0)
if (selectIndex >= 0)
{ {
var itemData = _items[selectIndex]; _selectCallBack?.Invoke(_selectedId);
_selectCallBack?.Invoke(itemData.Id);
} }
Hide();
}
}
private void OnClickItem(object item)
{
if (item is BagItem bagItem)
{
_selectedId = bagItem.ItemInfo.Id;
}
}
private void OnDoubleClickItem(object item)
{
if (item is BagItem bagItem)
{
_selectedId = bagItem.ItemInfo.Id;
_selectCallBack?.Invoke(bagItem.ItemInfo.Id);
Hide(); Hide();
} }
} }
@@ -57,24 +94,9 @@ namespace NBF
{ {
var role = App.Main.GetComponent<Role>(); var role = App.Main.GetComponent<Role>();
var roleBag = role.GetComponent<RoleBag>(); var roleBag = role.GetComponent<RoleBag>();
_items = roleBag.GetItemsByType(_itemType); List<object> items = roleBag.GetItemListData();
List.SetListData(items);
List.RemoveChildrenToPool();
List.defaultItem = BagItem.URL;
List.itemRenderer = OnRenderItem;
List.selectionMode = ListSelectionMode.Single;
List.numItems = _items.Count;
}
void OnRenderItem(int index, GObject obj)
{
var itemData = _items[index];
if (obj is BagItem bagItem)
{
bagItem.SetData(itemData);
}
} }
} }
} }

View File

@@ -35,6 +35,7 @@ namespace NBF
private void OnRemove(EventContext context) private void OnRemove(EventContext context)
{ {
context.PreventDefault(); context.PreventDefault();
context.StopPropagation();
OnChangeSlot?.Invoke(Index, 0); OnChangeSlot?.Invoke(Index, 0);
} }

View File

@@ -19,7 +19,7 @@ namespace NBF
[AutoFind(Name = "SlotTitle")] [AutoFind(Name = "SlotTitle")]
public GComponent SlotTitle; public GComponent SlotTitle;
[AutoFind(Name = "List")] [AutoFind(Name = "List")]
public GList List; public ClassifyList List;
[AutoFind(Name = "SlotList")] [AutoFind(Name = "SlotList")]
public GList SlotList; public GList SlotList;
[AutoFind(Name = "SlotSeparator")] [AutoFind(Name = "SlotSeparator")]

View File

@@ -18,6 +18,7 @@ namespace NBF
protected override void OnInit() protected override void OnInit()
{ {
SlotList.onClickItem.Add(OnClickSlotItem);
} }
protected override void OnShow() protected override void OnShow()
@@ -41,26 +42,31 @@ namespace NBF
} }
} }
List.RemoveChildrenToPool(); List<object> items = _roleBag.GetItemListData();
List.itemRenderer = OnRenderItem; List.SetListData(items);
var children = List.List.GetChildren();
List.numItems = _items.Count; foreach (var gObject in children)
}
void OnRenderItem(int index, GObject obj)
{
var itemData = _items[index];
if (obj is BagItem bagItem)
{ {
bagItem.SetData(itemData); gObject.draggable = true;
bagItem.draggable = true;
} }
} }
// void OnRenderItem(int index, GObject obj)
// {
// var itemData = _items[index];
// if (obj is BagItem bagItem)
// {
// bagItem.SetData(itemData);
// bagItem.draggable = true;
// }
// }
#endregion #endregion
#region #region
private int _lastSelectedItem;
private void SetSlotList() private void SetSlotList()
{ {
SlotList.RemoveChildrenToPool(); SlotList.RemoveChildrenToPool();
@@ -86,6 +92,21 @@ namespace NBF
// SlotList.RefreshVirtualList(); // SlotList.RefreshVirtualList();
} }
private void OnClickSlotItem(EventContext context)
{
if (context.data is BagSlotItem bagSlotItem)
{
_lastSelectedItem = bagSlotItem.Index;
BagSelectPanel.Show(SelectCallback, ItemType.Rod, ItemType.Bobber, ItemType.Reel);
}
}
private void SelectCallback(long selectId)
{
if (selectId < 1) return;
_roleBag.SetSlot(_lastSelectedItem, selectId).OnCompleted(OnChangeSlotItemDone);
}
#endregion #endregion
private bool CanShow(ItemInfo itemInfo) private bool CanShow(ItemInfo itemInfo)

View File

@@ -105,7 +105,7 @@ namespace NBF
{ {
if (context.data is not BagGearItem item) return; if (context.data is not BagGearItem item) return;
_lastSelectedItem = item; _lastSelectedItem = item;
BagSelectPanel.Show(item.BindData.Type, SelectCallback); BagSelectPanel.Show(SelectCallback, item.BindData.Type);
} }
#endregion #endregion

View File

@@ -19,6 +19,7 @@ namespace NBF
private readonly List<object> _listData = new List<object>(); private readonly List<object> _listData = new List<object>();
public event Action<object> OnClickItem; public event Action<object> OnClickItem;
public event Action<object> OnDoubleClickItem;
private int _columnsCount; private int _columnsCount;
@@ -98,6 +99,10 @@ namespace NBF
void OnClickListItem(EventContext context) void OnClickListItem(EventContext context)
{ {
OnClickItem?.Invoke(context.data); OnClickItem?.Invoke(context.data);
if (context.inputEvent.isDoubleClick)
{
OnDoubleClickItem?.Invoke(context.data);
}
} }
void OnRenderItem(int index, GObject obj) void OnRenderItem(int index, GObject obj)

View File

@@ -1,9 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<component size="1920,1080"> <component size="1920,1080">
<displayList> <displayList>
<component id="n7_uiwj" name="n7" src="8hy8la" fileName="Com/Back/Back1.xml" pkg="6hgkvlau" xy="0,0">
<relation target="" sidePair="width-width,height-height"/>
</component>
<image id="n3_uiwj" name="back" src="kryob" fileName="Images/Square.png" pkg="6hgkvlau" xy="348,102" size="1224,820" color="#08101b"> <image id="n3_uiwj" name="back" src="kryob" fileName="Images/Square.png" pkg="6hgkvlau" xy="348,102" size="1224,820" color="#08101b">
<relation target="" sidePair="center-center,middle-middle"/> <relation target="" sidePair="center-center,middle-middle"/>
</image> </image>
@@ -13,18 +10,6 @@
<image id="n1_uiwj" name="n1" src="kryob" fileName="Images/Square.png" pkg="6hgkvlau" xy="349,829" size="1222,2" alpha="0.3" color="#8bf3ff"> <image id="n1_uiwj" name="n1" src="kryob" fileName="Images/Square.png" pkg="6hgkvlau" xy="349,829" size="1222,2" alpha="0.3" color="#8bf3ff">
<relation target="n2_uiwj" sidePair="center-center,bottom-bottom"/> <relation target="n2_uiwj" sidePair="center-center,bottom-bottom"/>
</image> </image>
<list id="n0_uiwj" name="List" xy="357,112" size="1205,705" layout="flow_hz" overflow="scroll" lineGap="20" colGap="20" defaultItem="ui://hxr7rc7puq3a1h" autoClearItems="true">
<relation target="n2_uiwj" sidePair="center-center,middle-middle"/>
<item/>
<item/>
<item/>
<item/>
<item/>
<item/>
<item/>
<item/>
<item/>
</list>
<component id="n5_uiwj" name="BtnCancel" src="r03uj0" fileName="Com/Buttons/BtnTitleInputControl.xml" pkg="6hgkvlau" xy="717,859" size="85,32"> <component id="n5_uiwj" name="BtnCancel" src="r03uj0" fileName="Com/Buttons/BtnTitleInputControl.xml" pkg="6hgkvlau" xy="717,859" size="85,32">
<relation target="" sidePair="center-center,middle-middle"/> <relation target="" sidePair="center-center,middle-middle"/>
<Button title="退出" icon="ui://6hgkvlau9mf1jw"/> <Button title="退出" icon="ui://6hgkvlau9mf1jw"/>
@@ -33,5 +18,6 @@
<relation target="" sidePair="center-center,middle-middle"/> <relation target="" sidePair="center-center,middle-middle"/>
<Button title="继续"/> <Button title="继续"/>
</component> </component>
<component id="n8_uiwj" name="List" src="drkwh1" fileName="Com/ClassifyList.xml" pkg="6hgkvlau" xy="359,115" size="1197,703"/>
</displayList> </displayList>
</component> </component>

View File

@@ -7,10 +7,9 @@
<component id="n6_uiwj" name="SlotTitle" src="r6aumd" fileName="Com/CommonTitle.xml" pkg="6hgkvlau" xy="0,0"> <component id="n6_uiwj" name="SlotTitle" src="r6aumd" fileName="Com/CommonTitle.xml" pkg="6hgkvlau" xy="0,0">
<relation target="" sidePair="width-width,top-top"/> <relation target="" sidePair="width-width,top-top"/>
</component> </component>
<list id="n7_uiwj" name="List" xy="37,111" size="1846,775" layout="flow_hz" selectionMode="none" overflow="scroll" scrollBarFlags="4" scrollBarRes="ui://6hgkvlauoomej," clipSoftness="10,10" lineGap="20" colGap="20" defaultItem="ui://hxr7rc7puq3a1h" autoClearItems="true" foldInvisibleItems="true"> <component id="n7_uiwj" name="List" src="drkwh1" fileName="Com/ClassifyList.xml" pkg="6hgkvlau" xy="37,111" size="1846,775">
<relation target="" sidePair="width-width,height-height"/> <relation target="" sidePair="width-width,height-height"/>
<item url="ui://hxr7rc7poome9"/> </component>
</list>
<list id="n13_uiwj" name="SlotList" xy="38,901" size="1831,153" layout="row" overflow="hidden" lineGap="8" colGap="40" defaultItem="ui://hxr7rc7puiwj1t" align="center" autoClearItems="true"> <list id="n13_uiwj" name="SlotList" xy="38,901" size="1831,153" layout="row" overflow="hidden" lineGap="8" colGap="40" defaultItem="ui://hxr7rc7puiwj1t" align="center" autoClearItems="true">
<item/> <item/>
<item/> <item/>