From 9470c3ab00aff4a8514ded147ea0de36105e787a Mon Sep 17 00:00:00 2001 From: "Bob.Song" <605277374@qq.com> Date: Mon, 13 Oct 2025 17:54:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95all?= =?UTF-8?q?=E5=92=8C=E5=88=97=E8=A1=A8=E6=A0=87=E9=A2=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/Fgui/Main/Main_fui.bytes | Bin 14833 -> 14760 bytes Assets/Resources/Fgui/Shop/Shop_fui.bytes | Bin 1779 -> 1758 bytes Assets/Scripts/Init.cs | 21 +++-- Assets/Scripts/UI/Bag/BagPanel.Designer.cs | 4 +- Assets/Scripts/UI/Bag/BagPanel.cs | 7 -- Assets/Scripts/UI/Common/Extensions.meta | 3 + .../Extensions/TabItemDataExtensions.cs | 73 ++++++++++++++++++ .../Extensions/TabItemDataExtensions.cs.meta | 3 + Assets/Scripts/UI/Common/ItemDataHelper.cs | 14 ---- .../Scripts/UI/Common/ItemDataHelper.cs.meta | 3 - .../Scripts/UI/Common/Items/ListTitleItem.cs | 8 ++ Assets/Scripts/UI/Common/List/ClassifyList.cs | 24 +++--- .../Scripts/UI/Common/List/CommonItemList.cs | 26 ++++--- Assets/Scripts/UI/Home/HomePanel.cs | 2 +- Assets/Scripts/UI/Shops/FishingShopPanel.cs | 30 ++++--- FGUIProject/assets/Main/BagPanel.xml | 9 +-- FGUIProject/assets/Shop/Com/ShopGearItem.xml | 2 +- 17 files changed, 157 insertions(+), 72 deletions(-) create mode 100644 Assets/Scripts/UI/Common/Extensions.meta create mode 100644 Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs create mode 100644 Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs.meta delete mode 100644 Assets/Scripts/UI/Common/ItemDataHelper.cs delete mode 100644 Assets/Scripts/UI/Common/ItemDataHelper.cs.meta diff --git a/Assets/Resources/Fgui/Main/Main_fui.bytes b/Assets/Resources/Fgui/Main/Main_fui.bytes index 55d579eadacf617e93cf0f5df9aa25b2437b3d1f..260c4c41bdb775af49e199d8e227a7bb2b74c6fd 100644 GIT binary patch delta 524 zcmYk2%S%*I9LK-E&h_58)A(wP87+;uWOuH2W_%1+c>=anQhLIG+~k9|0V1QI%)Nyj9fbEc@A?`|#NVq=@8^axDh1-I@xLofNd z(ZEhHAYNgbeP(mXYaIJe(|{&4>6nq4H+;#A(pw%j4eg!0zsCn2Gj00FWEF94*q@(G zKOrOcN0J2hn<3%DXSd!N_G?+oEWYqS_@HZ;!&e>)$7x=6m~Qe73tVZ%>H9|V13x(< zlSS7uZUw{=e({2JLj1-bK2p(2%Uq@JPzweAVuc@9v?*96uw^$B@hv5w&?XXm&2Axu zXYC;6uo^ifRMPldq=h_ub4#guT98g&o{9`>o8?FQFv>TK8Xk?7Q7%tJ_bQZ!JMx*b zk-FHRUYwJv?npV%dTY;Kybw>qb2#1JbM(BE9+}>~Or;*DtMBshE2(y<$#i$pse*U? JjHP-z*8mChk)Hqn delta 535 zcmYk2+e=hY6vn^hK6B2TV?}1>FqGjT=gfFKIyQEhvWJ``n3s{#lrG3X(m*vzCm5z4 zwD(G7J%mpZ7(_maFF{oF)Zb8AX?D>v)9#s<_RK)E;oFP-?cZ7~zPs*{I}kN$E0I5S zrDL(=uHE+pp5ZyJt*;TF^#RI$`Az-a9Arw>N!3dyD|JQc20t$Gk-~jun?IouHe(N> zIEZE>kkD~U;!iQegIlZkfm5tt0;Bw-vcrz&*+V#t7>*#0xQ!E0@<^auyv7Va3bgp&;P`(#G@=PjI^N1@?>J~V z^qx;xrZy|zbNIl$mQ5dd)UxuJ}>E+e*1YLMD0CZYK{9+dfkHzI{??1um#rUjqQ?Ky4sqRc`wxS53oou8!#A7zRjY;Xf&CF)t1qCvm0wX eqlj>6rj@?FSw?zxSx#bUk%4h(X6581Y*ql({1kKm diff --git a/Assets/Scripts/Init.cs b/Assets/Scripts/Init.cs index 0e4f0c9c6..ffcb95f4f 100644 --- a/Assets/Scripts/Init.cs +++ b/Assets/Scripts/Init.cs @@ -62,17 +62,16 @@ namespace NBF { // var map = LanguageConst.languageMap; - // Lan.Inst.AddLanguageModule((int)LanguageModuleType.Text, new LanguageText()); - // Lan.Inst.AddLanguageModule((int)LanguageModuleType.Image, new LanguageImage()); - // Lan.Inst.AddLanguageModule((int)LanguageModuleType.Font, new LanguageFont()); - // - // foreach (var key in LanguageConst.languageMap.Keys) - // { - // Lan.Inst.AddLanguage(key); - // } - // - // UI.Inst.SetUILanguage(); - // Lan.Inst.AutoUseLanguage(); + Lan.Inst.AddLanguageModule((int)LanguageModuleType.Text, new LanguageText()); + Lan.Inst.AddLanguageModule((int)LanguageModuleType.Image, new LanguageImage()); + Lan.Inst.AddLanguageModule((int)LanguageModuleType.Font, new LanguageFont()); + + foreach (var key in LanguageConst.languageMap.Keys) + { + Lan.Inst.AddLanguage(key); + } + App.UI.SetUILanguage(); + Lan.Inst.AutoUseLanguage(); } #endregion diff --git a/Assets/Scripts/UI/Bag/BagPanel.Designer.cs b/Assets/Scripts/UI/Bag/BagPanel.Designer.cs index 5efc1eeb1..0d70542c7 100644 --- a/Assets/Scripts/UI/Bag/BagPanel.Designer.cs +++ b/Assets/Scripts/UI/Bag/BagPanel.Designer.cs @@ -16,10 +16,10 @@ namespace NBF [AutoFind(Name = "back")] public GImage back; - [AutoFind(Name = "Menu")] - public CommonMenu Menu; [AutoFind(Name = "BottomMenu")] public BottomMenu BottomMenu; + [AutoFind(Name = "ItemList")] + public CommonItemList ItemList; public override string[] GetDependPackages(){ return new string[] {"Common"}; } public static void Show(object param = null){ App.UI.OpenUI(param); } diff --git a/Assets/Scripts/UI/Bag/BagPanel.cs b/Assets/Scripts/UI/Bag/BagPanel.cs index e3885af4f..8e55011ec 100644 --- a/Assets/Scripts/UI/Bag/BagPanel.cs +++ b/Assets/Scripts/UI/Bag/BagPanel.cs @@ -10,7 +10,6 @@ namespace NBF protected override void OnInit() { base.OnInit(); - Menu.OnTabChange += ChangeTab; } protected override void OnShow() @@ -36,12 +35,6 @@ namespace NBF } } - private void ChangeTab(int index) - { - if (index < 0) return; - Log.Info($"Change tab index={index}"); - } - private void UseBottomMenu() { BottomMenu.Use(this); diff --git a/Assets/Scripts/UI/Common/Extensions.meta b/Assets/Scripts/UI/Common/Extensions.meta new file mode 100644 index 000000000..44a5992b9 --- /dev/null +++ b/Assets/Scripts/UI/Common/Extensions.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 688374f241004942b3ef3af4086c983e +timeCreated: 1760344663 \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs b/Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs new file mode 100644 index 000000000..4717cfb7e --- /dev/null +++ b/Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs @@ -0,0 +1,73 @@ +using System.Collections.Generic; +using System.Linq; + +namespace NBF +{ + public static class TabItemDataExtensions + { + /// + /// 为TabItemData列表添加"全部"选项卡 + /// + /// 原始选项卡列表 + /// + /// 包含"全部"选项卡的新列表 + public static void AddAllTabItem(this List tabItems, bool addListTitle = false) + { + //判断是否存在二级目录,有二级目录则只在二级目录有"全部"选项卡 + if (tabItems.Any(tabItem => tabItem.Children.Count > 0)) + { + foreach (var tabItemData in tabItems) + { + if (tabItemData.Children.Count > 0) + { + var allTab = new TabItemData + { + Id = 0, + Key = "All", + Icon = "All", + IsAll = true, + Items = GetAllItemsFromTabs(tabItemData.Children, addListTitle) + }; + tabItemData.Children.Insert(0, allTab); + } + } + } + else + { + var allTab = new TabItemData + { + Id = 0, + Key = "All", + Icon = "All", + IsAll = true, + Items = GetAllItemsFromTabs(tabItems, addListTitle) + }; + tabItems.Insert(0, allTab); + } + } + + /// + /// 递归获取所有选项卡中的项目(去重) + /// + private static List GetAllItemsFromTabs(List tabs, bool addListTitle = false) + { + var allItems = new List(); + + foreach (var tab in tabs) + { + allItems.Add(new ClassifyListTitleData() + { + Title = tab.Key + }); + // 添加当前选项卡的项目 + if (tab.Items != null) + { + allItems.AddRange(tab.Items); + } + } + + // 去重处理(基于引用相等,如果需要基于内容去重需要重写Equals方法) + return allItems.Distinct().ToList(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs.meta b/Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs.meta new file mode 100644 index 000000000..8bba30ed5 --- /dev/null +++ b/Assets/Scripts/UI/Common/Extensions/TabItemDataExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab38f91a1c10449ea1d908bdffc5111a +timeCreated: 1760344665 \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/ItemDataHelper.cs b/Assets/Scripts/UI/Common/ItemDataHelper.cs deleted file mode 100644 index f44a9b430..000000000 --- a/Assets/Scripts/UI/Common/ItemDataHelper.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; - -namespace NBF -{ - public static class ItemDataHelper - { - public static List GetItemTabDataList(List list) where T : class - { - List ret = new List(); - - return ret; - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/ItemDataHelper.cs.meta b/Assets/Scripts/UI/Common/ItemDataHelper.cs.meta deleted file mode 100644 index cc74bd938..000000000 --- a/Assets/Scripts/UI/Common/ItemDataHelper.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ea59c591744a47729f78e4984cea1675 -timeCreated: 1760170968 \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/Items/ListTitleItem.cs b/Assets/Scripts/UI/Common/Items/ListTitleItem.cs index 87a2c07f6..000134bda 100644 --- a/Assets/Scripts/UI/Common/Items/ListTitleItem.cs +++ b/Assets/Scripts/UI/Common/Items/ListTitleItem.cs @@ -11,5 +11,13 @@ namespace NBF private void OnInited() { } + + public virtual void SetData(object showData) + { + if (showData is ClassifyListTitleData listTitleData) + { + this.SetLanguage(listTitleData.Title); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/List/ClassifyList.cs b/Assets/Scripts/UI/Common/List/ClassifyList.cs index 47e8bcbe1..391328fc7 100644 --- a/Assets/Scripts/UI/Common/List/ClassifyList.cs +++ b/Assets/Scripts/UI/Common/List/ClassifyList.cs @@ -8,6 +8,11 @@ using NBC; namespace NBF { + public class ClassifyListTitleData + { + public string Title; + } + public partial class ClassifyList : GComponent { private readonly List _listData = new List(); @@ -19,6 +24,10 @@ namespace NBF private void OnInited() { Game.Input.OnUICanceled += OnUICanceled; + List.defaultItem = ListTitleItem.URL; + List.itemProvider = GetListItemResource; + List.itemRenderer = OnRenderItem; + List.onClickItem.Add(OnClickListItem); } public override void Dispose() @@ -67,18 +76,13 @@ namespace NBF ListSelectionMode selectionMode = ListSelectionMode.Single) { List.selectedIndex = -1; - List.defaultItem = ListTitleItem.URL; - List.itemProvider = GetListItemResource; - List.itemRenderer = OnRenderItem; - List.onClickItem.Add(OnClickListItem); - // List.SetVirtual(); _listData.Clear(); foreach (var obj in listData) { _listData.Add(obj); } - + List.RemoveChildrenToPool(); List.selectionMode = selectionMode; List.numItems = _listData.Count; List.ScrollToView(0); @@ -92,17 +96,19 @@ namespace NBF void OnRenderItem(int index, GObject obj) { + var itemData = _listData[index]; if (obj is ListItemBase item) { - item.SetData(_listData[index]); + item.SetData(itemData); obj.SetSize(350, 300); } else if (obj is ListTitleItem titleItem) { + titleItem.SetData(itemData); titleItem.SetSize(List.width, 32); } } - + //根据索引的不同,返回不同的资源URL string GetListItemResource(int index) @@ -114,7 +120,7 @@ namespace NBF return ShopGearItem.URL; } - if (itemData is string title) + if (itemData is ClassifyListTitleData titleData) { return ListTitleItem.URL; } diff --git a/Assets/Scripts/UI/Common/List/CommonItemList.cs b/Assets/Scripts/UI/Common/List/CommonItemList.cs index 185623399..a83722fc0 100644 --- a/Assets/Scripts/UI/Common/List/CommonItemList.cs +++ b/Assets/Scripts/UI/Common/List/CommonItemList.cs @@ -1,6 +1,7 @@ // 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 using System.Collections.Generic; +using System.Linq; using UnityEngine; using FairyGUI; using NBC; @@ -27,22 +28,29 @@ namespace NBF base.Dispose(); } - public void SetData(List list) where T : class + /// + /// + /// + /// + /// 是否显示全部页签 + /// 是否列表页显示分类标题 + public void SetData(List tabItemList, bool showAll = false, bool showListTitle = true) { _tabList.Clear(); _currentTab = null; - var tabList = ItemDataHelper.GetItemTabDataList(list); style.selectedIndex = 0; //一级菜单 - foreach (var tabItemData in tabList) + if (tabItemList.Any(tabItem => tabItem.Children.Count > 0)) { - if (tabItemData.Children.Count > 0) - { - style.selectedIndex = 1; //有二级菜单 - break; - } + style.selectedIndex = 1; //有二级菜单 } - _tabList.AddRange(tabList); + _tabList.AddRange(tabItemList); + if (showAll) + { + _tabList.AddAllTabItem(showListTitle); + } + + Menu.SetTabs(_tabList); } private void ChangeTab(int index) diff --git a/Assets/Scripts/UI/Home/HomePanel.cs b/Assets/Scripts/UI/Home/HomePanel.cs index 37598fc68..d82b2339b 100644 --- a/Assets/Scripts/UI/Home/HomePanel.cs +++ b/Assets/Scripts/UI/Home/HomePanel.cs @@ -25,7 +25,7 @@ namespace NBF { var tab = new TabItemData { - Name = group + // Name = group }; tabList.Add(tab); } diff --git a/Assets/Scripts/UI/Shops/FishingShopPanel.cs b/Assets/Scripts/UI/Shops/FishingShopPanel.cs index 067a60e02..1015e5d3a 100644 --- a/Assets/Scripts/UI/Shops/FishingShopPanel.cs +++ b/Assets/Scripts/UI/Shops/FishingShopPanel.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using FairyGUI; using NBC; using NUnit.Framework; +using UnityEngine; using UIPanel = NBC.UIPanel; namespace NBF @@ -11,8 +12,6 @@ namespace NBF public class ShopGearData { public string title; - public int type; - public int subType; } public partial class FishingShopPanel : UIPanel @@ -23,21 +22,32 @@ namespace NBF this.AutoAddClick(OnClick); IsShowCursor = true; - var testData = new List(); + List tabItemList = new List(); for (int i = 0; i < 10; i++) { - for (int j = 20; j < 25; j++) + TabItemData tabItem = new TabItemData(); + tabItem.Key = $"Tab_{i}"; + for (int j = 0; j < 5; j++) { - var item = new ShopGearData + TabItemData tabSubItem = new TabItemData(); + tabSubItem.Key = $"SubTab_{j}"; + var count = Random.Range(2, 5); + for (int k = 0; k < count; k++) { - type = i, - subType = j - }; - testData.Add(item); + var item = new ShopGearData + { + title = $"Item:{i}-{j}-{k}" + }; + tabSubItem.Items.Add(item); + } + + tabItem.Children.Add(tabSubItem); } + + tabItemList.Add(tabItem); } - ItemList.SetData(testData); + ItemList.SetData(tabItemList, true, true); } protected override void OnShow() diff --git a/FGUIProject/assets/Main/BagPanel.xml b/FGUIProject/assets/Main/BagPanel.xml index f6109d1ce..afdd57018 100644 --- a/FGUIProject/assets/Main/BagPanel.xml +++ b/FGUIProject/assets/Main/BagPanel.xml @@ -4,12 +4,11 @@ - - - - + - + + + \ No newline at end of file diff --git a/FGUIProject/assets/Shop/Com/ShopGearItem.xml b/FGUIProject/assets/Shop/Com/ShopGearItem.xml index 26816a27d..0c6e2e690 100644 --- a/FGUIProject/assets/Shop/Com/ShopGearItem.xml +++ b/FGUIProject/assets/Shop/Com/ShopGearItem.xml @@ -9,7 +9,7 @@ - +