using System; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class CrossServerOneVsOneArenaWin : Window { [SerializeField] Button scoreRankBtn; [SerializeField] Button dayAwardBtn; [SerializeField] Text winRateText; [SerializeField] Text sumNumText; [SerializeField] Text seasonTimeText; [SerializeField] Text winStreakText; [SerializeField] Text reaminNumText; [SerializeField] Button buyTimesBtn; [SerializeField] Button matchRecordBtn; [SerializeField] GameObject inSeasonTimeObj; [SerializeField] GameObject outSeasonTimeObj; [SerializeField] Text curSeasonNumText; [SerializeField] Transform playerObjs; [SerializeField] Text dayStartTime; //前后限制几分钟开启活动,客户端自行处理 [SerializeField] CrossServerOneVsOnePKPlayerCell[] matchPlayerObjs; [SerializeField] Image refreshMoneyIcon; [SerializeField] Text refreshMoneyText; [SerializeField] Text freeRefreshText; [SerializeField] Button refreshBtn; [SerializeField] ToggleButton m_ToggleButton; //跳过战斗 CrossServerOneVsOneModel crossServerModel { get { return ModelCenter.Instance.GetModel(); } } int needChallengeCount = 10; #region Built-in protected override void BindController() { } protected override void AddListeners() { dayAwardBtn.AddListener(ClickDayAward); buyTimesBtn.AddListener(ClickBuyTimes); matchRecordBtn.AddListener(ClickMatchRecord); scoreRankBtn.AddListener(ClickScoreRank); refreshBtn.AddListener(ClickBuyRefreshMatch); m_ToggleButton.AddListener(SkipChallenge); } protected override void OnPreOpen() { crossServerModel.SendCrossMatch(0); SetDisplay(); CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent += UpdatePlayerInfo; TimeMgr.Instance.OnMinuteEvent += UpdateMinute; crossServerModel.UpdateMatchPlayersEvent += UpdateMatchPlayers; RoleParticularModel.OnRevPackage += OnRecvPlayerViewPack; m_ToggleButton.isOn = crossServerModel.isSkipFightChoose; } protected override void OnAfterOpen() { } protected override void OnPreClose() { CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent -= UpdatePlayerInfo; TimeMgr.Instance.OnMinuteEvent -= UpdateMinute; crossServerModel.UpdateMatchPlayersEvent -= UpdateMatchPlayers; RoleParticularModel.OnRevPackage -= OnRecvPlayerViewPack; } protected override void OnAfterClose() { } #endregion void SkipChallenge() { if (CrossServerOneVsOnePlayerInfo.Instance.PKCount < needChallengeCount) { SysNotifyMgr.Instance.ShowTip("NeedChallengeCount", needChallengeCount); return; } m_ToggleButton.isOn = !m_ToggleButton.isOn; crossServerModel.isSkipFightChoose = m_ToggleButton.isOn; } private void OnRecvPlayerViewPack(int viewType, int playerID, RoleParticularModel.ViewPlayerData data) { if (crossServerModel.matchPlayers.Count == 0) return; for (int i = 0;i < crossServerModel.matchPlayers.Count; i++) { if (crossServerModel.matchPlayers[i].PlayerID == playerID) { matchPlayerObjs[i].Display(i); break; } } } private void UpdatePlayerInfo() { UpdateMatchInfo(); UpdatePKInfo(); } void ShowOpenStateWithPlayers(bool isInTime) { bool dayStartTimeShow = false; //0点的前后3分钟不显示 if (isInTime && TimeUtility.ServerNow.Hour == 0 && TimeUtility.ServerNow.Minute < 3 || TimeUtility.ServerNow.Hour == 23 && TimeUtility.ServerNow.Minute >= 57) { isInTime = false; dayStartTimeShow = true; } dayStartTime.SetActive(dayStartTimeShow); dayStartTime.text = StringUtility.Contact(Language.Get("ActivitySettleWin__0"), " 23:57 - 00:03"); playerObjs.SetActive(isInTime); } private void UpdateMatchPlayers() { for (int i = 0; i < matchPlayerObjs.Length; i++) { matchPlayerObjs[i].Display(i); } } private void SetDisplay() { UpdateMatchInfo(); UpdatePKInfo(); UpdateActivityState(); UpdateMatchPlayers(); var pkSeason = CrossServerOneVsOnePKSeason.Instance; seasonTimeText.text = pkSeason.ToDisplaySeasonTime(); curSeasonNumText.text = pkSeason.SeasonID.ToString(); } private void UpdateMatchInfo() { int remainNum = CrossServerOneVsOnePlayerInfo.Instance.GetDayRemainNum(); //if (remainNum > 0) //{ // reaminNumText.text = StringUtility.Contact(UIHelper.AppendColor(TextColType.Green,remainNum.ToString()), "/", crossServerModel.freeMaxMatchNum); //} //else //{ // reaminNumText.text = StringUtility.Contact(UIHelper.AppendColor(TextColType.Red, remainNum.ToString()), "/", crossServerModel.freeMaxMatchNum); //} reaminNumText.text = StringUtility.Contact(remainNum, "/", crossServerModel.freeMaxMatchNum); int remainFreeNum = CrossServerOneVsOnePlayerInfo.Instance.GetDayFreeRefreshNum(); if (remainFreeNum > 0) { freeRefreshText.SetActive(true); refreshMoneyIcon.SetActive(false); freeRefreshText.text = StringUtility.Contact(Language.Get("L2032"), Language.Get("BlessedLand036", remainFreeNum, crossServerModel.freeMaxMatchRefreshNum)); } else { freeRefreshText.SetActive(false); refreshMoneyIcon.SetActive(true); refreshMoneyIcon.SetSmallIconWithMoneyType(crossServerModel.refreshMoneyType); refreshMoneyText.text = StringUtility.Contact(Language.Get("BlessedLand036", CrossServerOneVsOnePlayerInfo.Instance.GetDayFreeRefreshPrice(), UIHelper.ReplaceLargeNum( UIHelper.GetMoneyCnt(crossServerModel.refreshMoneyType)))); } } private void UpdatePKInfo() { winRateText.text = CrossServerOneVsOnePlayerInfo.Instance.DisplayWinningRate(); sumNumText.text = CrossServerOneVsOnePlayerInfo.Instance.PKCount.ToString(); int winSteakCnt = CrossServerOneVsOnePlayerInfo.Instance.CWinCount; winStreakText.text = winSteakCnt.ToString(); } private void UpdateMinute() { UpdateActivityState(); } private void UpdateActivityState() { bool isInTime = CrossServerOneVsOnePKSeason.Instance.InPkSeason(TimeUtility.ServerNow); inSeasonTimeObj.SetActive(isInTime); outSeasonTimeObj.SetActive(!isInTime); ShowOpenStateWithPlayers(isInTime); } private void ClickBuyTimes() { if (!crossServerModel.TryGetBuyMatchTimes("CrossMatching21")) return; WindowCenter.Instance.Open(); } private void ClickBuyRefreshMatch() { int price = CrossServerOneVsOnePlayerInfo.Instance.GetDayFreeRefreshPrice(); // UIHelper.ReplaceLargeNum(UIHelper.GetMoneyCnt(crossServerModel.refreshMoneyType) if (price == 0) { crossServerModel.SendCrossMatch(1); return; } if (UIHelper.GetMoneyCnt(crossServerModel.refreshMoneyType) < (ulong)price) { SysNotifyMgr.Instance.ShowTip("LackMoney", crossServerModel.refreshMoneyType); return; } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("CrossServerOneVsOne1", price), (bool isOk) => { if (isOk) { crossServerModel.SendCrossMatch(1); } }); } private void ClickDayAward() { WindowCenter.Instance.Open(); } private void ClickScoreRank() { WindowCenter.Instance.Open(); } private void ClickMatchRecord() { WindowCenter.Instance.Open(); } } }