yyl
2025-10-31 39001a600fcae2bcf27c225df8752d75fb92fef4
Main/System/HeroUI/HeroListWin.cs
@@ -16,33 +16,41 @@
    [SerializeField] GameObject attrOnTip;
    [SerializeField] Button attrOnTipBtn;
    [SerializeField] GameObject foldObject;
    [SerializeField] Button unFoldBtn; //展开按钮
    [SerializeField] List<Button> countryBtnList;
    [SerializeField] GameObject unFoldObject;
    [SerializeField] Button foldBtn; //收起按钮
    [SerializeField] List<Button> jobBtnList;   //全部,输出、肉盾、辅助、控制
    [SerializeField] Button changeHeroPosBtn; //布阵按钮
    [SerializeField] HeroSelectBehaviour fiterManager;  //武将筛选
    private List<Image> countrySelectImgList;
    private List<Image> jobSelectImgList;
    SinglePack singlePack;
    /// </summary>
    protected override void InitComponent()
    {
        heroPackBtn.onClick.AddListener(() =>
        heroPackBtn.AddListener(() =>
        {
            HeroUIManager.Instance.QueryUnLockHeroPack();
        });
        changeHeroPosBtn.AddListener(() =>
        {
            HeroUIManager.Instance.selectTeamType = TeamType.Story;
            UIManager.Instance.OpenWindow<HeroPosWin>();
        });
        attrOnTipBtn.AddListener(() =>
        {
            attrOnTip.SetActive(!attrOnTip.activeSelf);
        });
    }
    protected override void OnPreOpen()
    {
        HeroUIManager.Instance.selectHeroListJob = 0;
        HeroUIManager.Instance.selectHeroListCountry = 0;
        singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
        heroListScroller.OnRefreshCell += OnRefreshCell;
        PackManager.Instance.RefreshItemEvent += RefreshPakCount;
        HeroManager.Instance.SortHeroList();
        PackManager.Instance.gridRefreshEvent += GridRefreshEvent;
        PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
        HeroManager.Instance.onHeroDeleteEvent += HeroDeleteEvent;
        HeroUIManager.Instance.SortHeroList();
        CreateScroller();
        Refresh();
    }
@@ -50,14 +58,50 @@
    protected override void OnPreClose()
    {
        heroListScroller.OnRefreshCell -= OnRefreshCell;
        PackManager.Instance.RefreshItemEvent -= RefreshPakCount;
        PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
        PackManager.Instance.gridRefreshEvent -= GridRefreshEvent;
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
        HeroManager.Instance.onHeroDeleteEvent -= HeroDeleteEvent;
    }
    private void OnCloseWindow(UIBase closeUI)
    {
        //其他武将功能产生数据变化,需要刷新武将列表
        if (closeUI is HeroTrainWin ||
            closeUI is HeroCallWin ||
            closeUI is HeroPosWin)
        {
            HeroUIManager.Instance.SortHeroList();
            CreateScroller();
            Refresh();
        }
    }
    public override void Refresh()
    {
        SinglePack singlePack = PackManager.Instance.GetSinglePack(PackType.Item);
        if (singlePack == null || singlePack.GetAllItems().Count <= 0)
        RefreshEmptyTip();
        OnBattleTeamAttrPer();
        RefreshPackCount();
        fiterManager.Display(0, HeroUIManager.Instance.selectHeroListJob, HeroUIManager.Instance.selectHeroListCountry, SelectJobCountry);
    }
    void HeroDeleteEvent(int heroID)
    {
        HeroUIManager.Instance.SortHeroList();
        heroListScroller.m_Scorller.RefreshActiveCellViews();
    }
    void RefreshEmptyTip()
    {
        if (HeroUIManager.Instance.heroSortList.Count <= 0)
        {
            heroListEmpty.SetActive(true);
            heroListScroller.SetActive(false);
@@ -67,11 +111,40 @@
            heroListEmpty.SetActive(false);
            heroListScroller.SetActive(true);
        }
    }
    void SelectJobCountry(int job, int country)
    {
        HeroUIManager.Instance.selectHeroListJob = job;
        HeroUIManager.Instance.selectHeroListCountry = country;
        HeroUIManager.Instance.SortHeroList();
        RefreshEmptyTip();
        CreateScroller();
    }
    //上阵加成
    void OnBattleTeamAttrPer()
    {
        var valuePer = 0;
        var team = TeamManager.Instance.GetTeam(TeamType.Story);
        if (team != null)
        {
            for (int i = 0; i < team.serverHeroes.Length; i++)
            {
                if (team.serverHeroes[i] == null)
                    continue;
                var hero = HeroManager.Instance.GetHero(team.serverHeroes[i].guid);
                if (hero != null)
                {
                    valuePer += hero.GetOnBattleAddPer();
                }
            }
        }
        //上阵属性
        for (int i = 0; i < attrOnList.Count; i++)
        {
            attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2 (PlayerPropertyConfig.baseAttrs[i], 1 ));
            attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
        }
    }
@@ -84,7 +157,7 @@
    void CreateScroller()
    {
        heroListScroller.Refresh();
        for (int i = 0; i < HeroManager.Instance.heroSortList.Count; i++)
        for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
        {
            if (i % 4 == 0)
            {
@@ -94,17 +167,29 @@
        heroListScroller.Restart();
    }
    void RefreshPakCount(PackType type, int index, int itemID)
    void RefreshItemEvent(PackType type, int index, int itemID)
    {
        SinglePack singlePack = PackManager.Instance.GetSinglePack(PackType.Item);
        if (singlePack == null)
        if (type != PackType.Hero)
            return;
        int count = singlePack.GetAllItems().Count;
        heroPackText.text =  UIHelper.AppendColor(count > singlePack.unlockedGridCount ? TextColType.Red : TextColType.NavyBrown,
                            string.Format("{0}/{1}", count, singlePack.unlockedGridCount));
        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();
    }
}