using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; 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; [SerializeField] RedpointBehaviour rpChallage; // [SerializeField] ButtonEx btnDeployTroops; [SerializeField] List playerTop3Cells; [SerializeField] ScrollerController scrollerController; [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 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}"; protected override void InitComponent() { base.InitComponent(); btnAward.SetListener(() => { if (ArenaManager.Instance.IsOpenCrossServer()) UIManager.Instance.OpenWindow(); else UIManager.Instance.OpenWindow(); }); btnRecord.SetListener(() => { ArenaManager.Instance.SendViewGameRecPack(); UIManager.Instance.OpenWindow(); }); btnChallage.SetListener(() => { ArenaManager.Instance.SendArenaMatch(); UIManager.Instance.OpenWindow(); }); funPresetBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena); }); btnCrossAward.SetListener(() => { if (ArenaManager.Instance.IsOpenCrossServer()) UIManager.Instance.OpenWindow(); else UIManager.Instance.OpenWindow(); }); btnFunPresetCross.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena); }); // 跨服按钮监听器 btnAwardCross.SetListener(() => { UIManager.Instance.OpenWindow(); }); btnRecordCross.SetListener(() => { ArenaManager.Instance.SendViewGameRecPack(); UIManager.Instance.OpenWindow(); }); btnChallageCross.SetListener(() => { ArenaManager.Instance.SendArenaMatch(); UIManager.Instance.OpenWindow(); }); funPresetBtnCross.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena); }); serversBtn.SetListener(() => { UIHelper.ShowServersPanel(GuildManager.Instance.crossServerIDList); }); } protected override void OnPreOpen() { // 在base.OnPreOpen()之前设置functionOrder,避免被父类传入参数覆盖 bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer(); if (isOpenCrossServer) { functionOrder = 1; // 跨服排行 } else { functionOrder = 0; // 本服排行 } 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() { base.OnPreClose(); 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; } private void OnFuncStateChange(int obj) { if (obj == ArenaManager.Instance.DeployTroopsFuncId) { DisplayDeployTroop(); } } void DisplayDeployTroop() { bool isOpen = FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.DeployTroopsFuncId); // btnDeployTroops.SetActive(isOpen); } private void PlayerDataRefresh(PlayerDataType type) { if (type != PlayerDataType.ChallengeVoucher) return; Display(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell.Display(ArenaManager.Instance.rankType, cell.index + 1, valueFormat); 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(); _cell.DisplayCross(ArenaManager.Instance.corssRankType, cell.index + 1, valueFormat); RankModel.Instance.ListenRankPage(ArenaManager.Instance.corssRankType, cell.index, zoneID, 0, crossServerID); } private void OnUpdateArenaPlayerInfo() { Display(); } private void OnArenaMatchListEvent() { Display(); } private void OnUpdateGameRecInfo() { Display(); } private void Display() { voucher.Display(); CreateScroller(); DisplayMyRank(); DisplayTop3(); DisplayDeployTroop(); funPresetBtn.SetActive(FuncPresetManager.Instance.IsPreShow()); // 跨服显示 voucherCross.Display(); CreateScrollerCross(); DisplayMyRankCross(); DisplayTop3Cross(); funPresetBtnCross.SetActive(FuncPresetManager.Instance.IsPreShow()); } void CreateScroller() { scrollerController.Refresh(); var cnt = RankModel.Instance.GetRankShowMaxCnt(ArenaManager.Instance.rankType); for (int i = 3; i < cnt; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); } 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() { for (int i = 0; i < playerTop3Cells.Count; i++) { playerTop3Cells[i].Display(ArenaManager.Instance.rankType, i + 1); } } 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) { DisplayTop3(); scrollerController.m_Scorller.RefreshActiveCellViews(); DisplayMyRank(); } else if (type == ArenaManager.Instance.corssRankType) { DisplayTop3Cross(); scrollerControllerCross.m_Scorller.RefreshActiveCellViews(); DisplayMyRankCross(); } } }