From eecfe1ac89223394753b44e0447da2c6c23b0210 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 23 八月 2025 02:09:20 +0800
Subject: [PATCH] 153 【武将】招募系统

---
 Main/Config/PartialConfigs/TreasureItemLibConfig.cs.meta |   11 ++
 Main/System/HappyXB/HeroCallScoreWin.cs                  |    4 
 Main/System/HappyXB/HeroSmallHeadCell.cs.meta            |   11 ++
 Main/System/HappyXB/HeroCallWin.cs                       |    7 +
 Main/System/HappyXB/HeroCallScoreRuleWin.cs.meta         |   11 ++
 Main/System/HappyXB/HappyXBModel.cs                      |   12 ++
 Main/System/HappyXB/HeroSmallHeadLineCell.cs.meta        |   11 ++
 Main/System/HappyXB/HeroCallScoreRuleWin.cs              |   63 ++++++++++++
 Main/System/HappyXB/HeroSmallHeadLineCell.cs             |   23 ++++
 Main/Config/PartialConfigs/TreasureItemLibConfig.cs      |   25 +++++
 Main/System/HappyXB/HeroCallRuleWin.cs.meta              |   11 ++
 Main/System/HappyXB/HeroCallRuleWin.cs                   |   12 ++
 Main/System/HappyXB/HeroSmallHeadCell.cs                 |   21 ++++
 Main/System/HeroUI/HeroSelectBehaviour.cs                |    7 +
 Main/System/HeroUI/HeroUIManager.cs                      |   57 +++++++++++
 15 files changed, 284 insertions(+), 2 deletions(-)

diff --git a/Main/Config/PartialConfigs/TreasureItemLibConfig.cs b/Main/Config/PartialConfigs/TreasureItemLibConfig.cs
new file mode 100644
index 0000000..8ed45e7
--- /dev/null
+++ b/Main/Config/PartialConfigs/TreasureItemLibConfig.cs
@@ -0,0 +1,25 @@
+
+
+using System.Collections.Generic;
+
+public partial class TreasureItemLibConfig : ConfigBase<int, TreasureItemLibConfig>
+{
+    private static Dictionary<int, List<int>> resultDict = new Dictionary<int, List<int>>();
+	protected override void OnConfigParseCompleted()
+    {
+        if (!resultDict.ContainsKey(LibID))
+        {
+            resultDict[LibID] = new List<int>() { ItemID };
+        }
+        else
+        {
+            resultDict[LibID].Add(ItemID);
+        }
+    }
+
+
+    public static List<int> GetItemIDList(int libID)
+    {
+        return resultDict[libID];
+    }
+}
diff --git a/Main/Config/PartialConfigs/TreasureItemLibConfig.cs.meta b/Main/Config/PartialConfigs/TreasureItemLibConfig.cs.meta
new file mode 100644
index 0000000..3cb9e60
--- /dev/null
+++ b/Main/Config/PartialConfigs/TreasureItemLibConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: db3f92a327a7d7f48800c8eb069ae7a7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HappyXB/HappyXBModel.cs b/Main/System/HappyXB/HappyXBModel.cs
index 1b5af30..297dbbe 100644
--- a/Main/System/HappyXB/HappyXBModel.cs
+++ b/Main/System/HappyXB/HappyXBModel.cs
@@ -543,10 +543,20 @@
 
     }
 
+    //鎸夋牸瀛愬簱閰嶇疆鐨勫姹� 鑾峰緱鑾峰彇鐗╁搧
+    public List<int> GetAllGridLibItemIDByType(int type)
+    {
+        List<int> itemIDListTemp = new List<int>();
+        foreach (var kv in GetXBItemConfigByType(type).GridLibInfo)
+        {
+            itemIDListTemp.AddRange(TreasureItemLibConfig.GetItemIDList(kv.Value));
+        }
+        return itemIDListTemp.Distinct().ToList();
 
+    }
     
     #endregion
-}
+    }
 
 public class XBTypeInfo
 {
diff --git a/Main/System/HappyXB/HeroCallRuleWin.cs b/Main/System/HappyXB/HeroCallRuleWin.cs
new file mode 100644
index 0000000..6b6792b
--- /dev/null
+++ b/Main/System/HappyXB/HeroCallRuleWin.cs
@@ -0,0 +1,12 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鎷涘嫙瑙勫垯
+/// </summary>
+public class HeroCallRuleWin : UIBase
+{
+    
+}
\ No newline at end of file
diff --git a/Main/System/HappyXB/HeroCallRuleWin.cs.meta b/Main/System/HappyXB/HeroCallRuleWin.cs.meta
new file mode 100644
index 0000000..97333aa
--- /dev/null
+++ b/Main/System/HappyXB/HeroCallRuleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c9610763bde1ce744b918ba059286aff
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HappyXB/HeroCallScoreRuleWin.cs b/Main/System/HappyXB/HeroCallScoreRuleWin.cs
new file mode 100644
index 0000000..c89a8b5
--- /dev/null
+++ b/Main/System/HappyXB/HeroCallScoreRuleWin.cs
@@ -0,0 +1,63 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 绉垎鎷涘嫙瑙勫垯
+/// </summary>
+public class HeroCallScoreRuleWin : UIBase
+{
+
+    [SerializeField] ScrollerController scrollerController;
+    [SerializeField] HeroSelectBehaviour heroSelectBehaviour;
+
+
+    protected override void OnPreOpen()
+    {
+        HeroUIManager.Instance.selectHeroCallListJob = 0;
+        HeroUIManager.Instance.selectHeroCallListCountry = 0;
+
+        HeroUIManager.Instance.SortHeroCallList();
+        scrollerController.OnRefreshCell += OnRefreshCell;
+        Refresh();
+        CreateScroller();
+    }
+
+    protected override void OnPreClose()
+    {
+        scrollerController.OnRefreshCell -= OnRefreshCell;
+    }
+
+    public override void Refresh()
+    {
+        heroSelectBehaviour.Display(0, HeroUIManager.Instance.selectHeroListJob, HeroUIManager.Instance.selectHeroListCountry, SelectJobCountry);
+    }
+
+    void SelectJobCountry(int job, int country)
+    {
+        HeroUIManager.Instance.selectHeroCallListJob = job;
+        HeroUIManager.Instance.selectHeroCallListCountry = country;
+        HeroUIManager.Instance.SortHeroCallList();
+        scrollerController.m_Scorller.RefreshActiveCellViews();
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cellView)
+    {
+        var _cell = cellView as HeroSmallHeadLineCell;
+        _cell.Display(cellView.index);
+    }
+
+    void CreateScroller()
+    {
+        scrollerController.Refresh();
+        for (int i = 0; i < HeroUIManager.Instance.heroCallSortList.Count; i++)
+        {
+            if (i % 4 == 0)
+            {
+                scrollerController.AddCell(ScrollerDataType.Header, i);
+            }
+        }
+        scrollerController.Restart();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/HappyXB/HeroCallScoreRuleWin.cs.meta b/Main/System/HappyXB/HeroCallScoreRuleWin.cs.meta
new file mode 100644
index 0000000..49726b1
--- /dev/null
+++ b/Main/System/HappyXB/HeroCallScoreRuleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ebaa9682c49d10d41850e4940cd68934
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HappyXB/HeroCallScoreWin.cs b/Main/System/HappyXB/HeroCallScoreWin.cs
index 5bce5c3..25c32b0 100644
--- a/Main/System/HappyXB/HeroCallScoreWin.cs
+++ b/Main/System/HappyXB/HeroCallScoreWin.cs
@@ -19,6 +19,10 @@
     protected override void InitComponent()
     {
         call1Btn.AddListener(SendHeroCall);
+        ruleBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<HeroCallScoreRuleWin>();
+        });
     }
 
 
diff --git a/Main/System/HappyXB/HeroCallWin.cs b/Main/System/HappyXB/HeroCallWin.cs
index 229a972..9e74658 100644
--- a/Main/System/HappyXB/HeroCallWin.cs
+++ b/Main/System/HappyXB/HeroCallWin.cs
@@ -40,9 +40,14 @@
             HappyXBModel.Instance.SendXBManyQuest((int)HappXBTitle.HeroCallAdvanced);
         });
         scoreBtn.AddListener(() =>
-        { 
+        {
             UIManager.Instance.OpenWindow<HeroCallScoreWin>();
         });
+        
+        ruleBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<HeroCallRuleWin>();
+        });
     }
 
 
diff --git a/Main/System/HappyXB/HeroSmallHeadCell.cs b/Main/System/HappyXB/HeroSmallHeadCell.cs
new file mode 100644
index 0000000..594cbd1
--- /dev/null
+++ b/Main/System/HappyXB/HeroSmallHeadCell.cs
@@ -0,0 +1,21 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class HeroSmallHeadCell : MonoBehaviour
+{
+    [SerializeField] HeroHeadBaseCell heroHeadBaseCell;
+    [SerializeField] Image jobImg;
+    [SerializeField] Text nameText;
+
+    public void Display(int heroID)
+    {
+        var hero = HeroConfig.Get(heroID);
+        heroHeadBaseCell.Init(hero.HeroID, hero.SkinIDList[0]);
+        nameText.text = hero.Name;
+        jobImg.SetSprite(HeroUIManager.Instance.GetJobIconName(hero.Class));
+    }
+
+
+}
+
diff --git a/Main/System/HappyXB/HeroSmallHeadCell.cs.meta b/Main/System/HappyXB/HeroSmallHeadCell.cs.meta
new file mode 100644
index 0000000..6057d32
--- /dev/null
+++ b/Main/System/HappyXB/HeroSmallHeadCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 15fea9a71f009e844acaccbf4f37c8c1
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HappyXB/HeroSmallHeadLineCell.cs b/Main/System/HappyXB/HeroSmallHeadLineCell.cs
new file mode 100644
index 0000000..a0cde55
--- /dev/null
+++ b/Main/System/HappyXB/HeroSmallHeadLineCell.cs
@@ -0,0 +1,23 @@
+锘縰sing UnityEngine;
+
+public class HeroSmallHeadLineCell : CellView
+{
+    [SerializeField] HeroSmallHeadCell[] cardList;
+
+    public void Display(int index)
+    { 
+        for (int i = 0; i < cardList.Length; i++)
+        {
+            if (i + index < HeroUIManager.Instance.heroCallSortList.Count)
+            {
+                cardList[i].SetActive(true);
+                cardList[i].Display(HeroUIManager.Instance.heroCallSortList[index + i]);
+            }
+            else
+            {
+                cardList[i].SetActive(false);
+            }
+        }
+    }
+}
+
diff --git a/Main/System/HappyXB/HeroSmallHeadLineCell.cs.meta b/Main/System/HappyXB/HeroSmallHeadLineCell.cs.meta
new file mode 100644
index 0000000..7ead809
--- /dev/null
+++ b/Main/System/HappyXB/HeroSmallHeadLineCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 67434124635c2b447a4aae1fc5f1f21c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroUI/HeroSelectBehaviour.cs b/Main/System/HeroUI/HeroSelectBehaviour.cs
index 0385c40..da85036 100644
--- a/Main/System/HeroUI/HeroSelectBehaviour.cs
+++ b/Main/System/HeroUI/HeroSelectBehaviour.cs
@@ -62,6 +62,13 @@
 
     }
 
+    /// <summary>
+    /// 鍥藉鑱屼笟绛涢��
+    /// </summary>
+    /// <param name="state"> 0鏀惰捣锛�1灞曞紑</param>
+    /// <param name="job"></param>
+    /// <param name="country"></param>
+    /// <param name="onRefresh"> 鐐瑰嚮鎸夐挳闇�閫氱煡鍝嶅簲澶栭儴浜嬩欢</param>
     public void Display(int state, int job, int country, Action<int, int> onRefresh)
     {
         foldState = state;
diff --git a/Main/System/HeroUI/HeroUIManager.cs b/Main/System/HeroUI/HeroUIManager.cs
index 6f16674..8a73894 100644
--- a/Main/System/HeroUI/HeroUIManager.cs
+++ b/Main/System/HeroUI/HeroUIManager.cs
@@ -213,6 +213,10 @@
     public int selectCallIndex;//0锛�1鎶� 1锛�10鎶� 瀵瑰簲閰嶇疆椤哄簭
     public const string skipKey = "SkipHeroCall";
 
+    //绉垎鎷涘嫙棰勮
+    public List<int> heroCallSortList { get; private set; } = new List<int>();  //绉垎鎷涘嫙鍒楄〃 
+    public int selectHeroCallListJob = 0;    //绛涢�夎亴涓�
+    public int selectHeroCallListCountry = 0;    //绛涢�夊浗瀹�
 
     public bool IsNewHero(int heroID)
     {
@@ -239,6 +243,59 @@
 
         return true;
     }
+
+    List<int> allHeroCallScoreList = new List<int>();  //绉垎鎷涘嫙鍒楄〃 
+    public void SortHeroCallList()
+    {
+        if (allHeroCallScoreList.IsNullOrEmpty())
+        { 
+            allHeroCallScoreList = HappyXBModel.Instance.GetAllGridLibItemIDByType((int)HappXBTitle.HeroCallScore);
+        }
+        heroCallSortList = new List<int>();
+        if (selectHeroCallListJob == 0 && selectHeroCallListCountry == 0)
+        {
+            heroCallSortList = allHeroCallScoreList;
+        }
+        else
+        {
+            foreach (var item in allHeroCallScoreList)
+            {
+                HeroConfig heroConfig = HeroConfig.Get(item);
+                if (heroConfig == null)
+                {
+                    continue;
+                }
+                if (selectHeroCallListJob != 0 && selectHeroCallListJob != heroConfig.Class)
+                {
+                    continue;
+                }
+                if (selectHeroCallListCountry != 0 && selectHeroCallListCountry != heroConfig.Country)
+                {
+                    continue;
+                }
+                heroCallSortList.Add(item);
+            }
+        }
+
+        heroCallSortList.Sort(CmpHeroID);
+    }
+
+    int CmpHeroID(int idA, int idB)
+    {
+        HeroConfig heroA = HeroConfig.Get(idA);
+        HeroConfig heroB = HeroConfig.Get(idB);
+
+
+        // 鎺掑簭瑙勫垯锛氭灏嗗搧璐紴姝﹀皢ID
+        if (heroA.Quality != heroB.Quality)
+        {
+            return heroA.Quality > heroB.Quality ? -1 : 1;
+        }
+
+
+        return heroA.HeroID.CompareTo(heroB.HeroID);
+    }
+
     #endregion
 
 

--
Gitblit v1.8.0