using System; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class CrossServerOneVsOneArenaWin : Window { [SerializeField] Button scoreRankBtn; [SerializeField] Button matchBtn; [SerializeField] Image matchBtn_Img; [SerializeField] Text matchBtn_Text; [SerializeField] Button dayAwardBtn; [SerializeField] Text winRateText; [SerializeField] Text sumNumText; [SerializeField] Text reaminNumText; [SerializeField] Text seasonTimeText; [SerializeField] Text openTimeText; [SerializeField] Text winStreakText; [SerializeField] Button buyTimesBtn; [SerializeField] Button matchRecordBtn; [SerializeField] RedpointBehaviour matchRedPointBeh; [SerializeField] GameObject inSeasonTimeObj; [SerializeField] GameObject outSeasonTimeObj; [SerializeField] GameObject lookPlayerObj; [SerializeField] Text lookTimeText; [SerializeField] Text curSeasonNumText; CrossServerOneVsOneModel crossServerModel { get { return ModelCenter.Instance.GetModel(); } } float coolTime = 0; #region Built-in protected override void BindController() { } protected override void AddListeners() { dayAwardBtn.AddListener(ClickDayAward); buyTimesBtn.AddListener(ClickBuyTimes); matchRecordBtn.AddListener(ClickMatchRecord); scoreRankBtn.AddListener(ClickScoreRank); } protected override void OnPreOpen() { coolTime = 0; crossServerModel.isClickCoolTime = false; SetDisplay(); CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent += UpdatePlayerInfo; TimeMgr.Instance.OnMinuteEvent += UpdateMinute; GlobalTimeEvent.Instance.secondEvent += UpdateSecond; DTCC002_tagGCCrossRealmPKStartMatch.CrossServerStartMatchEvent += OnStartMatch; } protected override void OnAfterOpen() { } protected override void LateUpdate() { base.LateUpdate(); if(crossServerModel.isClickCoolTime) { coolTime += Time.deltaTime; if(coolTime >= 1) { coolTime = 0; crossServerModel.isClickCoolTime = false; } } } protected override void OnPreClose() { CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent -= UpdatePlayerInfo; TimeMgr.Instance.OnMinuteEvent -= UpdateMinute; GlobalTimeEvent.Instance.secondEvent -= UpdateSecond; DTCC002_tagGCCrossRealmPKStartMatch.CrossServerStartMatchEvent -= OnStartMatch; } protected override void OnAfterClose() { } #endregion private void UpdatePlayerInfo() { UpdateMatchInfo(); UpdatePKInfo(); } private void SetDisplay() { UpdateMatchInfo(); UpdatePKInfo(); UpdateActivityState(); UpdateLookPlayerTime(); var pkSeason = CrossServerOneVsOnePKSeason.Instance; seasonTimeText.text = pkSeason.ToDisplaySeasonTime(); curSeasonNumText.text = pkSeason.SeasonID.ToString(); var openTimes = pkSeason.GetActivityTimes(); openTimeText.gameObject.SetActive(openTimes != null && openTimes.Count > 0); if(openTimes != null) { string openTimeDes = string.Empty; for(int i = 0; i < openTimes.Count; i++) { var openTime = openTimes[i]; string timeDes = StringUtility.Contact(openTime.hourBegin.ToString("D2"), ":", openTime.minuteBegin.ToString("D2") ,"-",openTime.hourEnd.ToString("D2"),":",openTime.minuteEnd.ToString("D2")); if(i == 0) { openTimeDes = timeDes; } else { openTimeDes = StringUtility.Contact(openTimeDes,"、",timeDes); } } openTimeText.text = Language.Get("CrossServer119", openTimeDes); } lookPlayerObj.SetActive(crossServerModel.IsMatching); matchRedPointBeh.gameObject.SetActive(!crossServerModel.IsMatching); } 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); } } private void UpdatePKInfo() { winRateText.text = CrossServerOneVsOnePlayerInfo.Instance.DisplayWinningRate(); sumNumText.text = CrossServerOneVsOnePlayerInfo.Instance.PKCount.ToString(); int winSteakCnt = CrossServerOneVsOnePlayerInfo.Instance.CWinCount; winSteakCnt = winSteakCnt > 1 ? winSteakCnt : 0; winStreakText.text = winSteakCnt.ToString(); } private void UpdateMinute() { UpdateActivityState(); } private void UpdateSecond() { UpdateLookPlayerTime(); } private void UpdateLookPlayerTime() { if (!crossServerModel.IsMatching) { if(lookPlayerObj.activeInHierarchy) { matchRedPointBeh.gameObject.SetActive(true); lookPlayerObj.SetActive(false); } return; } if(CrossServerOneVsOnePKSeason.Instance.isSatisfyMatch) { int totalSeconds = Mathf.RoundToInt((float)(DateTime.Now - crossServerModel.matchStartTime).TotalSeconds); if (totalSeconds < 3600) { int minute = totalSeconds / 60; int seconds = totalSeconds % 60; lookTimeText.text = StringUtility.Contact(minute.ToString("D2"), ":", seconds.ToString("D2")); } else { ClickMatch(0); } } else { ClickMatch(0); } } private void UpdateActivityState() { bool isInTime = CrossServerOneVsOnePKSeason.Instance.InPkSeason(TimeUtility.ServerNow); bool isOpen = CrossServerOneVsOnePKSeason.Instance.InOpenTime(); inSeasonTimeObj.SetActive(isInTime); outSeasonTimeObj.SetActive(!isInTime); matchBtn.RemoveAllListeners(); if (isInTime) { matchBtn_Text.text = Language.Get("CrossServer109"); if (isOpen) { matchBtn_Img.material = MaterialUtility.GetUIDefaultGraphicMaterial(); if (!crossServerModel.IsMatching) { matchBtn.AddListener(() => { ClickMatch(1); }); } else { matchBtn_Text.text = Language.Get("CrossServer110"); matchBtn.AddListener(() => { ClickMatch(0); }); } } else { matchBtn_Img.material = MaterialUtility.GetDefaultSpriteGrayMaterial(); matchBtn.AddListener(() => { SysNotifyMgr.Instance.ShowTip("CrossMatching20"); }); } } } private void ClickBuyTimes() { if (!crossServerModel.TryGetBuyMatchTimes("CrossMatching21")) return; WindowCenter.Instance.Open(); } private void ClickDayAward() { WindowCenter.Instance.Open(); } private void ClickScoreRank() { WindowCenter.Instance.Open(); } private void OnStartMatch() { matchRedPointBeh.gameObject.SetActive(false); lookPlayerObj.SetActive(true); crossServerModel.matchStartTime = DateTime.Now; UpdateLookPlayerTime(); UpdateActivityState(); } private void ClickMatch(int type) { if (type == 1) { if (!AssetVersionUtility.IsUnpriorAssetDownLoadOk()) { InGameDownLoad.Instance.TryDownLoad(InGameDownLoad.Dominant.Whole); return; } int remainNum = CrossServerOneVsOnePlayerInfo.Instance.GetDayRemainNum(); if (remainNum < 1) { WindowCenter.Instance.Open(); return; } } if (crossServerModel.isClickCoolTime) return; DebugEx.Log("ClickMatch......"); crossServerModel.isClickCoolTime = true; crossServerModel.SendCrossMatch(type); if(type == 0) { crossServerModel.IsMatching = false; matchRedPointBeh.gameObject.SetActive(true); lookPlayerObj.SetActive(false); UpdateActivityState(); } } private void ClickMatchRecord() { WindowCenter.Instance.Open(); } } }