using System; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; //群英主界面 //QunyingManager.Instance.openQYWinNeedRoll 默认开启的时候滚动展示 public class QYWin : UIBase { [SerializeField] QYPlayerTop3Cell[] playerTop3Cells; [SerializeField] QYFighterCell[] FighterCells; [SerializeField] ScrollRect battleScrollRect; [SerializeField] Button closeBtn; [SerializeField] Text gameTimeText; [SerializeField] Button buyTicketBtn; [SerializeField] Text ticketCountText; [SerializeField] Text ticketTimeText; [SerializeField] Button achievementBtn; [SerializeField] Text achievementTargetText; [SerializeField] Text rankText; [SerializeField] Button defentPosBtn; [SerializeField] Button attackPosBtn; [SerializeField] Button refreshBtn; [SerializeField] Text refreshMoneyText; [SerializeField] Image refreshMoneyImg; [SerializeField] Text refreshCntText; [SerializeField] Button storeBtn; [SerializeField] Button rankBtn; [SerializeField] Button awardBtn; [SerializeField] Button noteBtn; int rankType = 0; protected override void InitComponent() { closeBtn.AddListener(CloseWindow); buyTicketBtn.AddListener(() => { StoreModel.Instance.ShowBuyItem(QunyingManager.challengeShopID); }); achievementBtn.AddListener(() => { UIManager.Instance.OpenWindow(); }); defentPosBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Qunying); }); attackPosBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Story); }); refreshBtn.AddListener(() => { RefreshFighters(); }); storeBtn.AddListener(() => { UIManager.Instance.OpenWindow(); }); rankBtn.AddListener(() => { var zoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(QunyingManager.DataMapID); PlayerRankWin.groupValue1 = zoneInfo != null ? (int)zoneInfo.ZoneID : 0; PlayerRankWin.crossServerID = zoneInfo != null ? (int)zoneInfo.CrossServerID : 0; UIManager.Instance.OpenWindow(rankType); }); awardBtn.AddListener(() => { UIManager.Instance.OpenWindow(1); }); noteBtn.AddListener(() => { UIManager.Instance.OpenWindow(); }); } protected override void OnPreOpen() { rankType = QunyingManager.Instance.GetRankType(); if (!QunyingManager.Instance.openQYWinNeedRoll) { var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int index); battleScrollRect.verticalNormalizedPosition = (4 - index) * 0.15f + 0f; } else { battleScrollRect.verticalNormalizedPosition = 1f; } RankModel.Instance.ResetQueryParam(); var zoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(QunyingManager.DataMapID); int zoneID = zoneInfo != null ? (int)zoneInfo.ZoneID : 0; int csID = zoneInfo != null ? (int)zoneInfo.CrossServerID : 0; RankModel.Instance.QueryRankByPage(rankType, 0, 3, groupValue1: zoneID, crossServerID: csID); QunyingManager.Instance.RequestRefreshFighters(0); RankModel.Instance.onRankRefresh += OnRankRefresh; QunyingManager.Instance.OnMatchListEvent += OnMatchListEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; QunyingManager.Instance.OnUpdateQunyingInfoEvent += OnUpdateQunyingInfoEvent; TimeMgr.Instance.OnDayEvent += OnDayEvent; Display(); } async UniTask SmoothScrollToBottom(float targetPos) { //等待 await UniTask.Delay(100); float duration = 0.3f; float elapsed = 0f; float startPos = battleScrollRect.verticalNormalizedPosition; while (elapsed < duration) { elapsed += Time.deltaTime; float t = elapsed / duration; battleScrollRect.verticalNormalizedPosition = Mathf.Lerp(startPos, targetPos, t); await UniTask.Yield(); } battleScrollRect.verticalNormalizedPosition = targetPos; } protected override void OnPreClose() { RankModel.Instance.onRankRefresh -= OnRankRefresh; QunyingManager.Instance.OnMatchListEvent -= OnMatchListEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; QunyingManager.Instance.OnUpdateQunyingInfoEvent -= OnUpdateQunyingInfoEvent; TimeMgr.Instance.OnDayEvent -= OnDayEvent; QunyingManager.Instance.openQYWinNeedRoll = true; } void OnDayEvent() { RankModel.Instance.ResetQueryParam(); var zoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(QunyingManager.DataMapID); int zoneID = zoneInfo != null ? (int)zoneInfo.ZoneID : 0; int csID = zoneInfo != null ? (int)zoneInfo.CrossServerID : 0; RankModel.Instance.QueryRankByPage(rankType, 0, 3, groupValue1: zoneID, crossServerID: csID); QunyingManager.Instance.RequestRefreshFighters(0); } void OnSecondEvent() { ShowGameTime(); } void Display() { DisplayFighers(); DisplayPlayerTop3(); ShowGameTime(); ShowTicketCnt(); OnUpdateQunyingInfoEvent(); } //活动时间 void ShowGameTime() { gameTimeText.text = QunyingManager.Instance.GetEndSecondStr(); if (QunyingManager.Instance.m_LastRecoverTime == 0) { ticketTimeText.text = ""; } else { ticketTimeText.text = Language.Get("Qunying6", TimeUtility.SecondsToDHMS(QunyingManager.Instance.restoreTicketMinute * 60 - (TimeUtility.GetCommServerTick() - (int)QunyingManager.Instance.m_LastRecoverTime))); } } void ShowTicketCnt() { ticketCountText.text = UIHelper.GetMoneyCnt(QunyingManager.challengeMoneyType) + "/" + QunyingManager.Instance.challengeMaxCnt; } void DisplayPlayerTop3() { for (int i = 0; i < playerTop3Cells.Length; i++) { playerTop3Cells[i].Display(rankType, i + 1); } } void OnPlayerDataRefresh(PlayerDataType type) { if (type == PlayerDataType.QunyingWDL) { DisplayFighers(); ShowTicketCnt(); } } void OnRankRefresh(int type) { if (type != rankType) return; DisplayPlayerTop3(); } void OnUpdateQunyingInfoEvent() { var nextRank = QunyingManager.Instance.GetNextAchievementRank(); if (nextRank == 0) { achievementTargetText.text = Language.Get("Qunying17"); } else { achievementTargetText.text = Language.Get("Qunying4", nextRank); } refreshMoneyText.text = UIHelper.ShowUseMoney(QunyingManager.Instance.refreshMoneyType, QunyingManager.Instance.refreshMoneyValue); refreshMoneyImg.SetIconWithMoneyType(QunyingManager.Instance.refreshMoneyType); refreshCntText.text = QunyingManager.Instance.m_RefreshCnt + "/" + QunyingManager.Instance.refreshMaxCnt; } void DisplayFighers() { for (int i = 0; i < FighterCells.Length; i++) { FighterCells[i].Display(i); } } void OnMatchListEvent() { //滚动到自己的位置 var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int index); if (QunyingManager.Instance.openQYWinNeedRoll) { SmoothScrollToBottom(myMatch == null ? 0.1f : (4 - index) * 0.15f + 0f).Forget(); } if (myMatch != null) { rankText.text = Language.Get("Qunying5", myMatch.Rank); } else { rankText.text = Language.Get("L1045"); } DisplayFighers(); } void RefreshFighters() { //验证钱和次数 if (!UIHelper.CheckMoneyCount(QunyingManager.Instance.refreshMoneyType, QunyingManager.Instance.refreshMoneyValue, 1)) { return; } if (QunyingManager.Instance.m_RefreshCnt >= QunyingManager.Instance.refreshMaxCnt) { SysNotifyMgr.Instance.ShowTip("Qunying1"); return; } QunyingManager.Instance.RequestRefreshFighters(1); } }