diff --git a/Assets/Resources/Fgui/Common/Common_fui.bytes b/Assets/Resources/Fgui/Common/Common_fui.bytes index e7f06c164..54cebc1ff 100644 Binary files a/Assets/Resources/Fgui/Common/Common_fui.bytes and b/Assets/Resources/Fgui/Common/Common_fui.bytes differ diff --git a/Assets/Resources/Fgui/Shop/Shop_fui.bytes b/Assets/Resources/Fgui/Shop/Shop_fui.bytes index ecc227018..0fe55438a 100644 Binary files a/Assets/Resources/Fgui/Shop/Shop_fui.bytes and b/Assets/Resources/Fgui/Shop/Shop_fui.bytes differ diff --git a/Assets/Scripts/Data.meta b/Assets/Scripts/Data.meta new file mode 100644 index 000000000..491267362 --- /dev/null +++ b/Assets/Scripts/Data.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53d4b4ea733e48a3b1324345029f2bc2 +timeCreated: 1747967959 \ No newline at end of file diff --git a/Assets/Scripts/Data/ListClassifyData.cs b/Assets/Scripts/Data/ListClassifyData.cs new file mode 100644 index 000000000..d88b51124 --- /dev/null +++ b/Assets/Scripts/Data/ListClassifyData.cs @@ -0,0 +1,12 @@ +namespace NBF +{ + public class ListClassifyData + { + public string Title; + + public ListClassifyData(string title) + { + this.Title = title; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Data/ListClassifyData.cs.meta b/Assets/Scripts/Data/ListClassifyData.cs.meta new file mode 100644 index 000000000..d1dd58e52 --- /dev/null +++ b/Assets/Scripts/Data/ListClassifyData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: edbbd6c0c6004af8924e5b8f2ec39039 +timeCreated: 1747969245 \ No newline at end of file diff --git a/Assets/Scripts/UI/Binders/CommonBinder.cs b/Assets/Scripts/UI/Binders/CommonBinder.cs index 408e47da7..f4c98622e 100644 --- a/Assets/Scripts/UI/Binders/CommonBinder.cs +++ b/Assets/Scripts/UI/Binders/CommonBinder.cs @@ -8,6 +8,7 @@ namespace NBF { public static void BindAll() { + UIObjectFactory.SetPackageItemExtension(ClassifyList.URL, typeof(ClassifyList)); UIObjectFactory.SetPackageItemExtension(CommonMenu.URL, typeof(CommonMenu)); UIObjectFactory.SetPackageItemExtension(ListTitleItem.URL, typeof(ListTitleItem)); } diff --git a/Assets/Scripts/UI/Common/ClassifyList.Designer.cs b/Assets/Scripts/UI/Common/ClassifyList.Designer.cs new file mode 100644 index 000000000..72515e4dc --- /dev/null +++ b/Assets/Scripts/UI/Common/ClassifyList.Designer.cs @@ -0,0 +1,25 @@ +/**本脚本为自动生成,每次生成会覆盖!请勿手动修改,生成插件文档及项目地址:https://git.whoot.com/whoot-games/whoot.fguieditorplugin**/ + + +using FairyGUI; +using FairyGUI.Utils; +using NBC; + +namespace NBF +{ + public partial class ClassifyList + { + public const string URL = "ui://6hgkvlaudrkwh1"; + + public GList List; + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + List = (GList)GetChild("List"); + OnInited(); + UILanguage.TrySetComponentLanguage(this); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/ClassifyList.Designer.cs.meta b/Assets/Scripts/UI/Common/ClassifyList.Designer.cs.meta new file mode 100644 index 000000000..58e0ed5db --- /dev/null +++ b/Assets/Scripts/UI/Common/ClassifyList.Designer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 75f98daf87c484ef782216da87003f53 \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/ClassifyList.cs b/Assets/Scripts/UI/Common/ClassifyList.cs new file mode 100644 index 000000000..2bbbb6272 --- /dev/null +++ b/Assets/Scripts/UI/Common/ClassifyList.cs @@ -0,0 +1,69 @@ +// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 + +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI; +using NBC; + +namespace NBF +{ + public partial class ClassifyList : GComponent + { + private readonly List _listData = new List(); + + public event Action OnClickItem; + + public int SelectedIndex => List.selectedIndex; + + private void OnInited() + { + List.itemProvider = GetListItemResource; + List.itemRenderer = OnRenderItem; + List.onClickItem.Add(OnClickListItem); + } + + public void SetListData(List listData) + { + _listData.Clear(); + foreach (var obj in listData) + { + _listData.Add(obj); + } + List.numItems = _listData.Count; + List.ScrollToView(0); + } + + void OnClickListItem(EventContext context) + { + Debug.Log($"con={context.data} nm={context.sender}"); + OnClickItem?.Invoke(null); + } + + void OnRenderItem(int index, GObject obj) + { + if (obj is ListItemBase item) + { + item.SetData(_listData[index]); + } + } + + //根据索引的不同,返回不同的资源URL + string GetListItemResource(int index) + { + var itemData = _listData[index]; + + if (itemData is ShopGearData shopItem) + { + return ShopGearItem.URL; + } + + if (itemData is ListClassifyData item) + { + return ListTitleItem.URL; + } + + return List.defaultItem; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/ClassifyList.cs.meta b/Assets/Scripts/UI/Common/ClassifyList.cs.meta new file mode 100644 index 000000000..3aea40d06 --- /dev/null +++ b/Assets/Scripts/UI/Common/ClassifyList.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ec101ca53ba6849efa2e51492b6310cf \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/CommonMenu.cs b/Assets/Scripts/UI/Common/CommonMenu.cs index 6c807f42d..97ed54a47 100644 --- a/Assets/Scripts/UI/Common/CommonMenu.cs +++ b/Assets/Scripts/UI/Common/CommonMenu.cs @@ -1,6 +1,7 @@ // 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 using System; +using System.Collections.Generic; using UnityEngine; using FairyGUI; using NBC; @@ -14,15 +15,29 @@ namespace NBF private void OnInited() { BtnClose.onClick.Add(OnClickClose); + List.onClickItem.Add(OnClickItem); } - - public void SetTabs() + + public void SetTabs(List tabList,int selectIndex = 0) { List.RemoveChildrenToPool(); - + for (int i = 0; i < tabList.Count; i++) + { + var tabData = tabList[i]; + var tabItem = List.AddItemFromPool().asButton; + tabItem.title = tabData.TabName; + } + Log.Info($"Set tab index={List.selectedIndex}"); + List.selectedIndex = selectIndex; + OnClickItem(); } + private void OnClickItem() + { + OnTabChange?.Invoke(List.selectedIndex); + } + private void OnClickClose() { OnClose?.Invoke(); diff --git a/Assets/Scripts/UI/Common/Items.meta b/Assets/Scripts/UI/Common/Items.meta new file mode 100644 index 000000000..a4e2ce7e1 --- /dev/null +++ b/Assets/Scripts/UI/Common/Items.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c64fdab373ea4ce29f82649e8be2a186 +timeCreated: 1747969700 \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/Items/ListItemBase.cs b/Assets/Scripts/UI/Common/Items/ListItemBase.cs new file mode 100644 index 000000000..55f1aa228 --- /dev/null +++ b/Assets/Scripts/UI/Common/Items/ListItemBase.cs @@ -0,0 +1,14 @@ +using FairyGUI; + +namespace NBF +{ + public abstract class ListItemBase : GButton + { + public virtual void SetData(object showData) + { + OnSetData(showData); + } + + protected abstract void OnSetData(object showData); + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/Items/ListItemBase.cs.meta b/Assets/Scripts/UI/Common/Items/ListItemBase.cs.meta new file mode 100644 index 000000000..363644d79 --- /dev/null +++ b/Assets/Scripts/UI/Common/Items/ListItemBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 380c357d667646b69158440a7d7eecd9 +timeCreated: 1747969715 \ No newline at end of file diff --git a/Assets/Scripts/UI/ListTitleItem.Designer.cs b/Assets/Scripts/UI/Common/Items/ListTitleItem.Designer.cs similarity index 100% rename from Assets/Scripts/UI/ListTitleItem.Designer.cs rename to Assets/Scripts/UI/Common/Items/ListTitleItem.Designer.cs diff --git a/Assets/Scripts/UI/ListTitleItem.Designer.cs.meta b/Assets/Scripts/UI/Common/Items/ListTitleItem.Designer.cs.meta similarity index 100% rename from Assets/Scripts/UI/ListTitleItem.Designer.cs.meta rename to Assets/Scripts/UI/Common/Items/ListTitleItem.Designer.cs.meta diff --git a/Assets/Scripts/UI/Common/Items/ListTitleItem.cs b/Assets/Scripts/UI/Common/Items/ListTitleItem.cs new file mode 100644 index 000000000..b5605fb8a --- /dev/null +++ b/Assets/Scripts/UI/Common/Items/ListTitleItem.cs @@ -0,0 +1,27 @@ +// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 + +using UnityEngine; +using FairyGUI; +using NBC; + +namespace NBF +{ + public partial class ListTitleItem : ListItemBase + { + public ListClassifyData ClassifyData; + private void OnInited() + { + } + + protected override void OnSetData(object showData) + { + width = parent.width - 40; + ClassifyData = showData as ListClassifyData; + if (ClassifyData == null) + { + ClassifyData = new ListClassifyData(string.Empty); + } + title = ClassifyData.Title; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/ListTitleItem.cs.meta b/Assets/Scripts/UI/Common/Items/ListTitleItem.cs.meta similarity index 100% rename from Assets/Scripts/UI/ListTitleItem.cs.meta rename to Assets/Scripts/UI/Common/Items/ListTitleItem.cs.meta diff --git a/Assets/Scripts/UI/Common/Items/TabListData.cs b/Assets/Scripts/UI/Common/Items/TabListData.cs new file mode 100644 index 000000000..1f55719d6 --- /dev/null +++ b/Assets/Scripts/UI/Common/Items/TabListData.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace NBF +{ + public class TabListData + { + public string TabName; + public bool Selected; + public List ListData; + + public void AddTestData(int index) + { + ListData = new List(); + TabName = $"标题-{index + 1}"; + var count1 = Random.Range(5, 10); + var count2 = Random.Range(10, 30); + for (int i = 0; i < count1; i++) + { + ListData.Add(new ListClassifyData($"Title-{i}")); + for (int j = 0; j < count2; j++) + { + var item = new ShopGearData(); + item.title = $"Item {i}-" + j; + ListData.Add(item); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/Items/TabListData.cs.meta b/Assets/Scripts/UI/Common/Items/TabListData.cs.meta new file mode 100644 index 000000000..c838cb7fd --- /dev/null +++ b/Assets/Scripts/UI/Common/Items/TabListData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 47a09808fe3440d59857224bdc01a91f +timeCreated: 1747970638 \ No newline at end of file diff --git a/Assets/Scripts/UI/ListTitleItem.cs b/Assets/Scripts/UI/ListTitleItem.cs deleted file mode 100644 index 7a570fe41..000000000 --- a/Assets/Scripts/UI/ListTitleItem.cs +++ /dev/null @@ -1,15 +0,0 @@ -// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 - -using UnityEngine; -using FairyGUI; -using NBC; - -namespace NBF -{ - public partial class ListTitleItem : GComponent - { - private void OnInited() - { - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/UI/Shops/FishingShopPanel.Designer.cs b/Assets/Scripts/UI/Shops/FishingShopPanel.Designer.cs index 4400d991d..32b1b893f 100644 --- a/Assets/Scripts/UI/Shops/FishingShopPanel.Designer.cs +++ b/Assets/Scripts/UI/Shops/FishingShopPanel.Designer.cs @@ -18,7 +18,7 @@ namespace NBF [AutoFind(Name = "divisionLine")] public GImage divisionLine; [AutoFind(Name = "List")] - public GList List; + public ClassifyList List; public override string[] GetDependPackages(){ return new string[] {"Common"}; } diff --git a/Assets/Scripts/UI/Shops/FishingShopPanel.cs b/Assets/Scripts/UI/Shops/FishingShopPanel.cs index cfc683f6f..a61255e27 100644 --- a/Assets/Scripts/UI/Shops/FishingShopPanel.cs +++ b/Assets/Scripts/UI/Shops/FishingShopPanel.cs @@ -7,22 +7,20 @@ using UIPanel = NBC.UIPanel; namespace NBF { - public class ListDataBase + + public class ShopGearData { public string title; } - public class ShopGearData : ListDataBase - { - } - public partial class FishingShopPanel : UIPanel { public override string UIPackName => "Shop"; public override string UIResName => "FishingShopPanel"; - private List _data = new List(); + private List _tabList = new List(); + protected override void OnInit() { base.OnInit(); @@ -31,58 +29,26 @@ namespace NBF for (int i = 0; i < 10; i++) { - var data = new ListDataBase(); - data.title = "Title" + i; - _data.Add(data); - for (int j = 0; j < 30; j++) - { - var item = new ShopGearData(); - item.title = $"Item {i}-" + j; - _data.Add(item); - } + var itemData = new TabListData(); + itemData.AddTestData(i); + _tabList.Add(itemData); } - // List.SetVirtual(); - List.itemProvider = GetListItemResource; - List.itemRenderer = OnRenderItem; - List.numItems = _data.Count; + Menu.OnTabChange += ChangeTab; } protected override void OnShow() { base.OnShow(); + Menu.SetTabs(_tabList); } - void OnRenderItem(int index, GObject obj) + + private void ChangeTab(int index) { - if (obj is ListTitleItem titleItem) - { - titleItem.width = List.width - 60; - titleItem.height = 47; - } - // else - // { - // obj.width = 224; - // obj.height = 320; - // } - } - - //根据索引的不同,返回不同的资源URL - string GetListItemResource(int index) - { - var itemData = _data[index]; - - if (itemData is ShopGearData shopItem) - { - return ShopGearItem.URL; - } - - if (itemData is ListDataBase item) - { - return ListTitleItem.URL; - } - - return List.defaultItem; + Log.Info($"Change tab index={index}"); + var listData = _tabList[index]; + List.SetListData(listData.ListData); } private void OnClick(GComponent btn) diff --git a/Assets/Scripts/UI/Shops/ShopGearItem.cs b/Assets/Scripts/UI/Shops/ShopGearItem.cs index 68884d10d..e5de871c7 100644 --- a/Assets/Scripts/UI/Shops/ShopGearItem.cs +++ b/Assets/Scripts/UI/Shops/ShopGearItem.cs @@ -6,10 +6,18 @@ using NBC; namespace NBF { - public partial class ShopGearItem : GButton + public partial class ShopGearItem : ListItemBase { + public ShopGearData GearData; private void OnInited() { } + + protected override void OnSetData(object showData) + { + GearData = showData as ShopGearData; + if(GearData == null) return; + title = GearData.title; + } } } \ No newline at end of file diff --git a/FGUIProject/assets/Common/Com/Buttons/ButtonTab.xml b/FGUIProject/assets/Common/Com/Buttons/ButtonTab.xml index c7ce17437..d5f51572c 100644 --- a/FGUIProject/assets/Common/Com/Buttons/ButtonTab.xml +++ b/FGUIProject/assets/Common/Com/Buttons/ButtonTab.xml @@ -2,12 +2,14 @@ - + +