yyl
2025-07-29 80dddf17d8edba62f002d1237a604a509669340e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
/// <summary>
/// 武将列表
/// </summary>
public class HeroListWin : UIBase
{
    [SerializeField] Button heroPackBtn;
    [SerializeField] Text heroPackText;
    [SerializeField] ScrollerController heroListScroller;
    [SerializeField] GameObject heroListEmpty;
    [SerializeField] List<Text> attrOnList; //上阵属性加成
    [SerializeField] GameObject attrOnTip;
    [SerializeField] Button attrOnTipBtn;
 
    [SerializeField] Button changeHeroPosBtn; //布阵按钮
 
 
    private List<Image> countrySelectImgList;
    private List<Image> jobSelectImgList;
 
    SinglePack singlePack;
 
    /// </summary>
    protected override void InitComponent()
    {
        heroPackBtn.AddListener(() =>
        {
            HeroUIManager.Instance.QueryUnLockHeroPack();
        });
        changeHeroPosBtn.AddListener(() =>
        {
            HeroUIManager.Instance.selectTeamType = TeamType.Story;
            UIManager.Instance.OpenWindow<HeroPosWin>();
        });
    }
 
 
    protected override void OnPreOpen()
    {
        singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
        heroListScroller.OnRefreshCell += OnRefreshCell;
        //需要考虑调整为武将的事件,而不是背包
        PackManager.Instance.RefreshItemEvent += RefreshPakCount;
        HeroUIManager.Instance.SortHeroList();
        CreateScroller();
        Refresh();
    }
 
    protected override void OnPreClose()
    {
        heroListScroller.OnRefreshCell -= OnRefreshCell;
        PackManager.Instance.RefreshItemEvent -= RefreshPakCount;
    }
 
 
    public override void Refresh()
    {
        if (singlePack == null || singlePack.GetAllItems().Count <= 0)
        {
            heroListEmpty.SetActive(true);
            heroListScroller.SetActive(false);
        }
        else
        {
            heroListEmpty.SetActive(false);
            heroListScroller.SetActive(true);
        }
 
        OnBattleTeamAttrPer();
        
        RefreshPakCount(PackType.Hero, 0, 0);
    }
 
    //上阵加成
    void OnBattleTeamAttrPer()
    {
        var valuePer = 0;
        var team = TeamManager.Instance.GetTeam(TeamType.Story);
        if (team != null)
        {
            for (int i = 0; i < team.serverHeroes.Length; i++)
            {
                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.basePerAttrs[i], valuePer));
        }
    }
 
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as HeroCardLineCell;
        _cell.Display(cell.index);
    }
 
    void CreateScroller()
    {
        heroListScroller.Refresh();
        for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
        {
            if (i % 4 == 0)
            {
                heroListScroller.AddCell(ScrollerDataType.Header, i);
            }
        }
        heroListScroller.Restart();
    }
 
    void RefreshPakCount(PackType type, int index, int itemID)
    {
        if (type != PackType.Hero)
            return;
        if (singlePack == null)
            return;
 
        int count = singlePack.GetAllItems().Count;
 
        heroPackText.text = UIHelper.AppendColor(count > singlePack.unlockedGridCount ? TextColType.Red : TextColType.NavyBrown,
                            string.Format("{0}/{1}", count, singlePack.unlockedGridCount));
        
    }
    
}