hch
2025-09-09 e7e22b0cfafe53223b0a0f6b6189b2a8219f0740
Main/System/HeroUI/HeroCollectionWin.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
@@ -8,20 +9,155 @@
/// </summary>
public class HeroCollectionWin : UIBase
{
    [SerializeField] Button heroPackBtn;
    [SerializeField] Text heroPackText;
    [SerializeField] ScrollerController heroListScroller;
    [SerializeField] List<Text> totalAttrList;
    [SerializeField] Button attrBtn;
    [SerializeField] HeroSelectBehaviour fiterManager;  //武将筛选
    SinglePack singlePack;
    protected override void InitComponent()
    {
        attrBtn.AddListener(() =>
        {
            SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
            SmallTipWin.showText = Language.Get("herocard6");
            UIManager.Instance.OpenWindow<SmallTipWin>();
        });
        heroPackBtn.AddListener(() =>
        {
            HeroUIManager.Instance.QueryUnLockHeroPack();
        });
    }
    protected override void OnPreOpen()
    {
        singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
        PackManager.Instance.gridRefreshEvent += GridRefreshEvent;
        PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
        HeroUIManager.Instance.OnHeroCollectEvent += OnHeroCollectEvent;
        heroListScroller.OnRefreshCell += OnRefreshCell;
        HeroUIManager.Instance.selectHeroCollectListJob = 0;
        HeroUIManager.Instance.selectHeroCollectListCountry = 0;
        HeroUIManager.Instance.SortHeroCollectList();
        Display();
    }
    protected override void OnPreClose()
    {
        PackManager.Instance.gridRefreshEvent -= GridRefreshEvent;
        PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
        HeroUIManager.Instance.OnHeroCollectEvent -= OnHeroCollectEvent;
        heroListScroller.OnRefreshCell -= OnRefreshCell;
    }
    void Display()
    {
        fiterManager.Display(0, HeroUIManager.Instance.selectHeroCollectListJob, HeroUIManager.Instance.selectHeroCollectListCountry, SelectJobCountry);
        CreateScroller();
        RefreshTotalAttr();
        RefreshPackCount();
    }
    void RefreshItemEvent(PackType type, int index, int itemID)
    {
        if (type != PackType.Hero)
            return;
        RefreshPackCount();
    }
    void RefreshPackCount()
    {
        int count = singlePack.GetAllItems().Count;
        heroPackText.text = UIHelper.AppendColor(count >= singlePack.unlockedGridCount ? TextColType.Red : TextColType.NavyBrown,
                            string.Format("{0}/{1}", count, singlePack.unlockedGridCount));
    }
    void GridRefreshEvent(PackType type)
    {
        if (type != PackType.Hero)
            return;
        RefreshPackCount();
    }
    void RefreshTotalAttr()
    {
        for (int i = 0; i < totalAttrList.Count; i++)
        {
            totalAttrList[i].text = PlayerPropertyConfig.GetFullDescription(PlayerPropertyConfig.basePerAttrs[i],
            HeroUIManager.Instance.allHeroBookPer);
        }
    }
    void SelectJobCountry(int job, int country)
    {
        HeroUIManager.Instance.selectHeroCollectListJob = job;
        HeroUIManager.Instance.selectHeroCollectListCountry = country;
        HeroUIManager.Instance.SortHeroCollectList();
        CreateScroller();
    }
    void CreateScroller()
    {
        heroListScroller.Refresh();
        var _List = HeroUIManager.Instance.heroCollectDict.Keys.ToList();
        _List.Reverse();
        for (int i = 0; i < _List.Count; i++)
        {
            var ids = HeroUIManager.Instance.heroCollectDict[_List[i]];
            if (ids.Count == 0)
                continue;
            //品质
            heroListScroller.AddCell(ScrollerDataType.Header, _List[i]);
            //武将
            for (int j = 0; j < ids.Count; j++)
            {
                if (j % 4 == 0)
                {
                    CellInfo cellInfo = new CellInfo();
                    cellInfo.infoInt1 = _List[i];
                    heroListScroller.AddCell(ScrollerDataType.Normal, j, cellInfo);
                }
            }
        }
        heroListScroller.Restart();
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        if (type == ScrollerDataType.Header)
        {
            var _cell = cell.GetComponent<Image>();
            _cell.SetSprite("herocoltitle" + cell.index);
        }
        else if (type == ScrollerDataType.Normal)
        {
            var _cell = cell as HeroCollectionLineCell;
            _cell?.Display(cell.index, cell.info.Value.infoInt1);
        }
    }
    void OnHeroCollectEvent()
    {
        RefreshTotalAttr();
        heroListScroller.m_Scorller.RefreshActiveCellViews();
    }
}