hch
2025-08-23 eecfe1ac89223394753b44e0447da2c6c23b0210
153 【武将】招募系统
5个文件已修改
10个文件已添加
286 ■■■■■ 已修改文件
Main/Config/PartialConfigs/TreasureItemLibConfig.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/PartialConfigs/TreasureItemLibConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HappyXBModel.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroCallRuleWin.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroCallRuleWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroCallScoreRuleWin.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroCallScoreRuleWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroCallScoreWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroCallWin.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroSmallHeadCell.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroSmallHeadCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroSmallHeadLineCell.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HappyXB/HeroSmallHeadLineCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroSelectBehaviour.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroUIManager.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/PartialConfigs/TreasureItemLibConfig.cs
New file
@@ -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];
    }
}
Main/Config/PartialConfigs/TreasureItemLibConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: db3f92a327a7d7f48800c8eb069ae7a7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
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
{
Main/System/HappyXB/HeroCallRuleWin.cs
New file
@@ -0,0 +1,12 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 招募规则
/// </summary>
public class HeroCallRuleWin : UIBase
{
}
Main/System/HappyXB/HeroCallRuleWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c9610763bde1ce744b918ba059286aff
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/HappyXB/HeroCallScoreRuleWin.cs
New file
@@ -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();
    }
}
Main/System/HappyXB/HeroCallScoreRuleWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ebaa9682c49d10d41850e4940cd68934
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/HappyXB/HeroCallScoreWin.cs
@@ -19,6 +19,10 @@
    protected override void InitComponent()
    {
        call1Btn.AddListener(SendHeroCall);
        ruleBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<HeroCallScoreRuleWin>();
        });
    }
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>();
        });
    }
Main/System/HappyXB/HeroSmallHeadCell.cs
New file
@@ -0,0 +1,21 @@
using 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));
    }
}
Main/System/HappyXB/HeroSmallHeadCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 15fea9a71f009e844acaccbf4f37c8c1
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/HappyXB/HeroSmallHeadLineCell.cs
New file
@@ -0,0 +1,23 @@
using 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);
            }
        }
    }
}
Main/System/HappyXB/HeroSmallHeadLineCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 67434124635c2b447a4aae1fc5f1f21c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
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;
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