Main/System/HeroUI/HeroListWin.cs
@@ -12,12 +12,13 @@
    [SerializeField] Text heroPackText;
    [SerializeField] ScrollerController heroListScroller;
    [SerializeField] GameObject heroListEmpty;
    [SerializeField] List<Text> attrOnList; //上阵属性加成
    [SerializeField] List<Text> attrOnList; //全体属性加成
    [SerializeField] GameObject attrOnTip;
    [SerializeField] Button attrOnTipBtn;
    [SerializeField] Button changeHeroPosBtn; //布阵按钮
    [SerializeField] HeroSelectBehaviour fiterManager;  //武将筛选
    [SerializeField] Transform heroSelectBehaviour;
    HeroSelectBehaviour fiterManager;  //武将筛选
    SinglePack singlePack;
@@ -37,23 +38,24 @@
        {
            attrOnTip.SetActive(!attrOnTip.activeSelf);
        });
        fiterManager = HeroSelectBehaviour.Create(heroSelectBehaviour);
    }
    protected override void OnPreOpen()
    {
        HeroUIManager.Instance.selectHeroListJob = 0;
        HeroUIManager.Instance.selectHeroListCountry = 0;
        singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
        heroListScroller.OnRefreshCell += OnRefreshCell;
        PackManager.Instance.gridRefreshEvent += GridRefreshEvent;
        PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
        HeroManager.Instance.onHeroDeleteEvent += HeroDeleteEvent;
        // HeroManager.Instance.onHeroDeleteEvent += HeroDeleteEvent;
        HeroUIManager.Instance.SortHeroList();
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        CreateScroller();
        // CreateScroller();
        Refresh();
        fiterManager.Display(0, SelectJobCountry);
    }
    protected override void OnPreClose()
@@ -62,7 +64,7 @@
        PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
        PackManager.Instance.gridRefreshEvent -= GridRefreshEvent;
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
        HeroManager.Instance.onHeroDeleteEvent -= HeroDeleteEvent;
        // HeroManager.Instance.onHeroDeleteEvent -= HeroDeleteEvent;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
    }
@@ -72,6 +74,7 @@
        //其他武将功能产生数据变化,需要刷新武将列表
        if (closeUI is HeroTrainWin ||
            closeUI is HeroCallWin ||
            closeUI is HeroDeleteWin ||
            closeUI is HeroPosWin)
        {
            HeroUIManager.Instance.SortHeroList();
@@ -117,15 +120,15 @@
        RefreshPackCount();
        fiterManager.Display(0, HeroUIManager.Instance.selectHeroListJob, HeroUIManager.Instance.selectHeroListCountry, SelectJobCountry);
    }
    void HeroDeleteEvent(int heroID)
    {
        HeroUIManager.Instance.SortHeroList();
        heroListScroller.m_Scorller.RefreshActiveCellViews();
    }
    // void HeroDeleteEvent(int heroID)
    // {
    //     HeroUIManager.Instance.SortHeroList();
    //     heroListScroller.m_Scorller.RefreshActiveCellViews();
    // }
@@ -144,10 +147,10 @@
        }
    }
    void SelectJobCountry(int job, int country)
    /// 回调参数: 职业,国家,伤害类型,6大战斗属性,特殊属性
    void SelectJobCountry(List<int> selects)
    {
        HeroUIManager.Instance.selectHeroListJob = job;
        HeroUIManager.Instance.selectHeroListCountry = country;
        HeroUIManager.Instance.selectHeroList = selects;
        HeroUIManager.Instance.SortHeroList();
        RefreshEmptyTip();
        CreateScroller();
@@ -156,23 +159,23 @@
    //上阵加成
    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();
                }
            }
        var valuePer = HeroUIManager.Instance.GetAllHeroPer();
        // 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.GetAddPer();
        //         }
        //     }
        }
        //上阵属性
        // }
        //全体属性
        for (int i = 0; i < attrOnList.Count; i++)
        {
            attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
@@ -181,23 +184,66 @@
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as HeroCardLineCell;
        _cell.Display(cell.index);
        if (type == ScrollerDataType.Header)
        {
            var _cell1 = cell as HeroCardLineTipCell;
            _cell1.Display(cell.index);
        }
        else
        {
            var _cell = cell as HeroCardLineCell;
            _cell.Display(cell.index, activeCount);
        }
    }
    int activeCount;
    void CreateScroller()
    {
        heroListScroller.Refresh();
        for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
        heroListScroller.AddCell(ScrollerDataType.Header, 0);
        activeCount = GetAttrActiveHeroCount();
        for (int i = 0; i < activeCount; i++)
        {
            if (i % 4 == 0)
            {
                heroListScroller.AddCell(ScrollerDataType.Header, i);
                heroListScroller.AddCell(ScrollerDataType.Normal, i);
            }
        }
        heroListScroller.AddCell(ScrollerDataType.Header, 1);
        var unActiveCount = HeroUIManager.Instance.heroSortList.Count - activeCount;
        for (int i = 0; i < unActiveCount; i++)
        {
            if (i % 4 == 0)
            {
                //加10000 表示未生效
                heroListScroller.AddCell(ScrollerDataType.Normal, 10000 + activeCount + i);
            }
        }
        heroListScroller.Restart();
    }
    int GetAttrActiveHeroCount()
    {
        int count = 0;
        for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
        {
            var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.heroSortList[i]);
            if (hero == null)
                continue;
            if (hero.isAttrActive)
            {
                count++;
            }
            else
            {
                break;
            }
        }
        return count;
    }
    void RefreshItemEvent(PackType type, int index, int itemID)
    {
        if (type != PackType.Hero)