lcy
2 天以前 2dd1841d03a730d3d369092c2a3ad656cee4bf64
Main/System/Arena/ArenaWin.cs
@@ -3,8 +3,17 @@
using UnityEngine;
using UnityEngine.UI;
public class ArenaWin : UIBase
public class ArenaWin : FunctionsBaseWin
{
    [SerializeField] TextEx txtTip;
    [SerializeField] TextEx txtCrossTip;
    [SerializeField] Transform transLocalRank;
    [SerializeField] Transform transLocalButton;
    [SerializeField] Transform transLocalCrossButton;
    [SerializeField] ButtonEx btnCrossAward;
    [SerializeField] Button btnFunPresetCross;
    [SerializeField] ButtonEx btnRecord;
    [SerializeField] ButtonEx btnAward;
    [SerializeField] ButtonEx btnChallage;
@@ -15,7 +24,21 @@
    [SerializeField] ArenaPlayerRankCell myRankCell;
    [SerializeField] ArenaChallengeVoucher voucher;
    [SerializeField] Button funPresetBtn;
    //跨服排行
    [SerializeField] Transform transCrossRank;
    [SerializeField] ButtonEx btnRecordCross;
    [SerializeField] ButtonEx btnAwardCross;
    [SerializeField] ButtonEx btnChallageCross;
    [SerializeField] RedpointBehaviour rpChallageCross;
    [SerializeField] List<ArenaPlayerTop3Cell> playerTop3CellsCross;
    [SerializeField] ScrollerController scrollerControllerCross;
    [SerializeField] ArenaPlayerRankCell myRankCellCross;
    [SerializeField] ArenaChallengeVoucher voucherCross;
    [SerializeField] Button funPresetBtnCross;
    [SerializeField] Button serversBtn;
    [HideInInspector] public int groupValue1 = 0;   //一般用于跨服
    [HideInInspector] public int groupValue2 = 0;   //一般用于跨服
    [HideInInspector] public string valueFormat = "{0}";
@@ -23,7 +46,13 @@
    protected override void InitComponent()
    {
        base.InitComponent();
        btnAward.SetListener(() => UIManager.Instance.OpenWindow<ArenaAwardWin>());
        btnAward.SetListener(() =>
        {
            if (ArenaManager.Instance.IsOpenCrossServer())
                UIManager.Instance.OpenWindow<ArenaCrossAwardWin>();
            else
                UIManager.Instance.OpenWindow<ArenaAwardWin>();
        });
        btnRecord.SetListener(() =>
        {
            ArenaManager.Instance.SendViewGameRecPack();
@@ -34,31 +63,140 @@
            ArenaManager.Instance.SendArenaMatch();
            UIManager.Instance.OpenWindow<ArenaChallengeWin>();
        });
        funPresetBtn.AddListener(()=>
        funPresetBtn.AddListener(() =>
        {
            FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena);
        });
        btnCrossAward.SetListener(() =>
        {
            if (ArenaManager.Instance.IsOpenCrossServer())
                UIManager.Instance.OpenWindow<ArenaCrossAwardWin>();
            else
                UIManager.Instance.OpenWindow<ArenaAwardWin>();
        });
        btnFunPresetCross.AddListener(() =>
        {
            FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena);
        });
        // 跨服按钮监听器
        btnAwardCross.SetListener(() =>
        {
            UIManager.Instance.OpenWindow<ArenaCrossAwardWin>();
        });
        btnRecordCross.SetListener(() =>
        {
            ArenaManager.Instance.SendViewGameRecPack();
            UIManager.Instance.OpenWindow<ArenaRecordWin>();
        });
        btnChallageCross.SetListener(() =>
        {
            ArenaManager.Instance.SendArenaMatch();
            UIManager.Instance.OpenWindow<ArenaChallengeWin>();
        });
        funPresetBtnCross.AddListener(() =>
        {
            FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena);
        });
        serversBtn.SetListener(() =>
        {
            UIHelper.ShowServersPanel(GuildManager.Instance.crossServerIDList);
        });
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        RankModel.Instance.ResetQueryParam();
        RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
        rpChallage.redpointId = ArenaManager.Instance.GetRedPonitId(1);
    }
        // 在base.OnPreOpen()之前设置functionOrder,避免被父类传入参数覆盖
        bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer();
        if (isOpenCrossServer)
        {
            functionOrder = 1;  // 跨服排行
        }
        else
        {
            functionOrder = 0;  // 本服排行
        }
    protected override void NextFrameAfterOpen()
    {
        base.OnPreOpen();
        rpChallage.redpointId = ArenaManager.Instance.GetRedPonitId(1);
        rpChallageCross.redpointId = ArenaManager.Instance.GetRedPonitId(1);
        RankModel.Instance.onRankRefresh += OnRankRefresh;
        scrollerController.OnRefreshCell += OnRefreshCell;
        scrollerControllerCross.OnRefreshCell += OnRefreshCellCross;
        ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent;
        ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo;
        ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange;
        ShowRankByFunctionOrder();
        txtTip.SetActive(!isOpenCrossServer);
        txtCrossTip.SetActive(isOpenCrossServer);
        for (int i = 0; i < tabButtons.Length; i++)
        {
            tabButtons[i].SetActive(isOpenCrossServer);
        }
        RankModel.Instance.ResetQueryParam();
        if (isOpenCrossServer)
        {
            var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID);
            if (crossZoneInfo != null)
            {
                RankModel.Instance.QueryRankByPage(ArenaManager.Instance.corssRankType, groupValue1: (int)crossZoneInfo.ZoneID, crossServerID: (int)crossZoneInfo.CrossServerID, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
            }
        }
        else
        {
            RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
        }
        Display();
    }
    protected override void OpenSubUIByTabIndex()
    {
        ShowRankByFunctionOrder();
        RankModel.Instance.ResetQueryParam();
        // 重新查询对应排行
        bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer();
        if (functionOrder == 0 && isOpenCrossServer)
        {
            // 本服排行
            RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
        }
        else if (functionOrder == 1 && isOpenCrossServer)
        {
            // 跨服排行
            var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID);
            if (crossZoneInfo != null)
            {
                RankModel.Instance.QueryRankByPage(ArenaManager.Instance.corssRankType, groupValue1: (int)crossZoneInfo.ZoneID, crossServerID: (int)crossZoneInfo.CrossServerID, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
            }
        }
    }
    void ShowRankByFunctionOrder()
    {
        if (functionOrder == 0)
        {
            // 本服排行
            transLocalRank.SetActive(true);
            bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer();
            transLocalButton.SetActive(!isOpenCrossServer);
            transLocalCrossButton.SetActive(isOpenCrossServer);
            transCrossRank.SetActive(false);
        }
        else
        {
            // 跨服排行
            transLocalRank.SetActive(false);
            transCrossRank.SetActive(true);
        }
    }
    protected override void OnPreClose()
@@ -66,6 +204,7 @@
        base.OnPreClose();
        RankModel.Instance.onRankRefresh -= OnRankRefresh;
        scrollerController.OnRefreshCell -= OnRefreshCell;
        scrollerControllerCross.OnRefreshCell -= OnRefreshCellCross;
        ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent;
        ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo;
        ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo;
@@ -102,6 +241,18 @@
        RankModel.Instance.ListenRankPage(ArenaManager.Instance.rankType, cell.index, groupValue1, groupValue2);
    }
    void OnRefreshCellCross(ScrollerDataType type, CellView cell)
    {
        var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID);
        int zoneID = crossZoneInfo != null ? (int)crossZoneInfo.ZoneID : 0;
        int crossServerID = crossZoneInfo != null ? (int)crossZoneInfo.CrossServerID : 0;
        var _cell = cell.GetComponent<ArenaPlayerRankCell>();
        _cell.DisplayCross(ArenaManager.Instance.corssRankType, cell.index + 1, valueFormat);
        RankModel.Instance.ListenRankPage(ArenaManager.Instance.corssRankType, cell.index, zoneID, 0, crossServerID);
    }
    private void OnUpdateArenaPlayerInfo()
    {
        Display();
@@ -126,6 +277,13 @@
        DisplayDeployTroop();
        funPresetBtn.SetActive(FuncPresetManager.Instance.IsPreShow());
        // 跨服显示
        voucherCross.Display();
        CreateScrollerCross();
        DisplayMyRankCross();
        DisplayTop3Cross();
        funPresetBtnCross.SetActive(FuncPresetManager.Instance.IsPreShow());
    }
    void CreateScroller()
@@ -139,9 +297,25 @@
        scrollerController.Restart();
    }
    void CreateScrollerCross()
    {
        scrollerControllerCross.Refresh();
        var cnt = RankModel.Instance.GetRankShowMaxCnt(ArenaManager.Instance.corssRankType);
        for (int i = 3; i < cnt; i++)
        {
            scrollerControllerCross.AddCell(ScrollerDataType.Header, i);
        }
        scrollerControllerCross.Restart();
    }
    void DisplayMyRank()
    {
        myRankCell.Display(ArenaManager.Instance.rankType, 0, ArenaManager.Instance.score.ToString());
    }
    void DisplayMyRankCross()
    {
        myRankCellCross.DisplayCross(ArenaManager.Instance.corssRankType, 0, ArenaManager.Instance.score.ToString());
    }
    void DisplayTop3()
@@ -152,12 +326,27 @@
        }
    }
    void DisplayTop3Cross()
    {
        for (int i = 0; i < playerTop3CellsCross.Count; i++)
        {
            playerTop3CellsCross[i].DisplayCross(ArenaManager.Instance.corssRankType, i + 1);
        }
    }
    void OnRankRefresh(int type)
    {
        if (type != ArenaManager.Instance.rankType)
            return;
        DisplayTop3();
        scrollerController.m_Scorller.RefreshActiveCellViews();
        DisplayMyRank();
        if (type == ArenaManager.Instance.rankType)
        {
            DisplayTop3();
            scrollerController.m_Scorller.RefreshActiveCellViews();
            DisplayMyRank();
        }
        else if (type == ArenaManager.Instance.corssRankType)
        {
            DisplayTop3Cross();
            scrollerControllerCross.m_Scorller.RefreshActiveCellViews();
            DisplayMyRankCross();
        }
    }
}