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<QYAchievementWin>();
|
});
|
defentPosBtn.AddListener(() =>
|
{
|
FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Qunying);
|
});
|
attackPosBtn.AddListener(() =>
|
{
|
FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Story);
|
});
|
refreshBtn.AddListener(() =>
|
{
|
RefreshFighters();
|
});
|
|
storeBtn.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindow<QYStoreWin>();
|
});
|
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<PlayerRankWin>(rankType);
|
});
|
awardBtn.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindow<QYRankAwardWin>(1);
|
});
|
noteBtn.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindow<QYNoteWin>();
|
});
|
}
|
|
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);
|
}
|
|
}
|